どうもお久しぶりです、元バンドマンの新米エンジニアgucciです。
最初のブログ投稿からはや4ヶ月も経ってしまいました。
さらに振り返ると、ちょうど1年ほど前にエンジニアになるべくプログラミングスクールに通い始め、
そこからもう1年が経ったのだなぁとしみじみ思います。
さて、そんな私が今回ご紹介するのは「PXEブートサーバを構築しよう!」です。
これは入社してすぐに研修でやったものの一つで、とても勉強になったのでご紹介させていただきます。
私のように文系出身でサーバなどの基礎知識がなかったり、
Linuxのコンソールにあまり触れたことがなかったりするけど、
それでも「エンジニアになろうかしら!」と思っているそんなあなたにうってつけです。
ぜひ、今回ご紹介するPXEブートサーバの構築を試してみてください。
また、途中で登場する用語やコマンドなどの意味を調べながらやっていくと、より自分の身につくと思うのでおすすめです。
PXEブートサーバとは
さて、ここまでおすすめしておいてそもそもPXEとはなんなのかを説明していませんでした。
PXEとは、
Preboot eXecution Environment(PXE、ピー・エックス・イー、ピクシー)は、コンピュータのブート環境のひとつ。インテルの策定したネットワークブートの規格である。ネットワークブートを利用することにより、ストレージをもたないクライアントコンピュータや、ストレージに別のOSが導入されているクライアントコンピュータがサーバ上のOSイメージを使用して起動できる。
(wikipedia先生より)
とのこと。
これを利用することで一体なにができるかと簡単に言うと、CDやUSBからOSをインストールするのではなく、
PCとPCをLANケーブルで接続してネットワーク経由でOSのインストールができる!ということです。
たとえば、CDドライブが壊れてしまった古いパソコンへ新しいOSをインストールしたり、
一度に大量のPCへ接続してOSをインストールしたりすることができるようになります。
PXEを利用してPCのプログラムを起動することができるサーバを「PXEブートサーバ」と言います。
今回はVirtual Boxという仮想マシンを用いてPXEブートサーバを構築しましょう。
HostマシンとTargetマシンはどちらもVirtual Boxで作れるので、わざわざPCを複数用意する必要はありません。
無料ですべて行えるのでご安心を。
一番簡単にPXEを構築できる方法をご紹介するので、色々と足りない設定や説明などあるかもしれませんがご容赦ください。
ではさっそく挑戦してみましょう!
Host機をVirtual Boxで作成
Virtual BoxというのはOracleが開発している仮想化ソフトのことで、使用しているPC上に仮想的なPCを作成し、別のOSをインストール・実行することができます。
こちらは何かと便利なのでPCに入れておいて損はないかと思われます。
今回使用するOSはUbuntuというフリーのLinuxディストリビューションの1つです。
こちらのUbuntu18.04.1LTSを用いてやっていきましょう。
VIrutlal Boxをインストールして新規マシンを作成し、Ubuntuをインストールする方法はたくさんネットに載っているのでそちらをご参考ください。
必要に応じて設定は変更すべきですが、PXEブートサーバをお試しで作ることが目的なので基本的にはデフォルトの設定のまま突き進んで問題ありません。
Ubuntuのインストーラはこちらから、ubuntu-18.04.1-live-server-amd64.iso
をダウンロードしてください。
インストールが完了して「Reboot Now」を叩けばVMが再起動してUbuntuが起動してくれます。
それでは、本題のPXEブートサーバを構築していきましょう!
PXEブートサーバとはどういう仕組み?
そもそもPCは起動時にBIOSなどの起動デバイスで設定された順番にデバイスを読み込んでいきます。
基本設定ではHDDが先に読み込まれますが、このBIOSの設定を変更することでCDなどの光学ドライブやUSBから起動させることができるようになります。
BIOSの設定によりPXEから起動することで、ネットワーク起動が実現できるわけです。
しかし、マシンの中にインストーラを用意して接続しただけだと、
どこからそのマシンに接続して、
どうやってファイルを転送をして、
どこにインストーラがあるのか、
マシンにはわかりません。それを設定してあげるのが今回のゴールです。
PXEブートサーバは以下の流れにより実現できます。
簡単に例えると、
DHCPサーバがどこに接続するのか住所を指定
TFTPサーバがファイルを転送してくれる配達員
HTTPサーバが実際にインストーラが置いてある倉庫
といったイメージがわかりやすいかと思います。
これらのサーバをそれぞれ設定することで、PXEブートサーバが構築できるのです。
PXEブートサーバの構築
それでは、VMにインストールしたUbuntuを使って実際に各サーバを設定してきましょう!
Ubuntuを起動後、まずはパッケージのupdateから。
$ sudo apt update $ sudo apt upgrade
まず、DHCPサーバをインストールします。
$ sudo apt install isc-dhcp-server
次に、 TFTPサーバをインストールします。
$ sudo apt install tftpd-hpa
そして、HTTPサーバとして使用するapache2をインストールします。
$ sudo apt install apache2
最後に、Ubuntuのインストーラのisoイメージをダウンロードしましょう。
今回は手軽にPXEブートを体験するために、liveCD用installerではなく通常のCD用installerを使います。
$ sudo wget http://cdimage.ubuntu.com/releases/18.04.1/release/ubuntu-18.04.1-server-amd64.iso
これで、必要な材料は揃いました。
ここからは、諸々の設定と適切な配置を行なっていきます。
DHCPの設定を編集していきましょう。
$ sudo vi /etc/dhcp/dhcpd.conf
エディターが開かれると思うので、
option domain-name "example.org"; option domain-name-servers ns1.example.org, ns2.example.org;
をコメントアウトして、 一番下に下記を足します。
subnet 10.0.2.0 netmask 255.255.255.0 { range 10.0.2.91 10.0.2.99; filename "pxelinux.0"; }
次に、ダウンロードしたisoイメージを適切な場所に配置します。
isoイメージを展開してあげる必要があるので、そのためのディレクトリを作って、
$ sudo mkdir /mnt/ubuntu
展開します。
$ sudo mount -o loop,ro ubuntu-18.04.1-server-amd64.iso /mnt/ubuntu/
この展開したisoイメージの中に、
TFTPサーバに配置するnetbootのファイルと、HTTPサーバに配置するinstallのファイルが入っているので、それらを配置してあげましょう。
TFTPサーバにnetbootのファイルをセット。
$ sudo cp -r /mnt/ubuntu/install/netboot/* /var/lib/tftpboot/
HTTPサーバにinstallのファイルをセット。
$ sudo ln -s /mnt/ubunu /var/www/html/
上はコピーをしていて、下はリンクを貼っています。
こういったコマンドの意味も、ぜひ調べながらやってみてくださいね。
最後に、
PXEブートサーバに静的なIPアドレスを設定します。
$ ifconfig
と叩くと、enp0s3
に現在設定されているIPアドレスが表示されるかと思います。
このIPアドレスをこちらで指定する静的なIPアドレスに設定してあげます。
どこの住所なのかを予めしっかりと決めてあげるということですね。
$ sudo vi /etc/netplan/50-cloud-init.yaml
エディターが開かれるので、下記のように編集してください。
network: ethernets: enp0s3: addresses: [10.0.2.7/24] gateway4: 10.0.2.1 dhcp4: false nameservers: addresses: [10.0.2.1] version: 2
この設定を反映させるために、
$ sudo netplan apply
と叩いてあげましょう。
もう一度ifconfig
を叩くと、10.0.2.7
に変わっていることがわかると思います。
3つのサーバを立ち上げましょう!
$ sudo systemctl start tftpd-hpa $ sudo systemctl start isc-dhcp-server $ sudo systemctl start apache2
これで…PXEブートサーバの準備はバッチリです!
TargetマシンとBIOSの設定
PXEブートさせるTargetマシンをVirtual Boxで新規に作成しましょう。
作成したVMのBIOS設定を変更します。
設定ボタンを押し「システム」へ行くと、「起動順序」という項目があると思います。
ここの項目で、ネットワーク
にチェックを入れて一番上に移動させてください。
この設定により、起動時にネットワークからブートさせることができます。
ネットワークアダプタの変更
作成した2つのVM機の両マシン間で通信を行うために再び設定ボタンを押して「ネットワーク」へ行きましょう。
ここの割り当てを内部ネットワーク
にどちらのマシンも切り替えます。
名前や高度な設定はデフォルトのままでOKです。
これで…全ての準備が整いました!
Let's PXEブート
それでは、TargetマシンのVMを立ち上げてみましょう。
おねがい!動いて!
やりました!
インストールを叩いてどんどん進んで行きましょう!
「Configure the network」画面まできたら、設定したnameserverのアドレスを入れます。
次に、hostnameを求められるので、PXEブートサーバを構築したUbuntuのマシンの名前を入力します。
そして、「Choose a mirror of the Ubuntu archive」の画面では、一番上のenter information manually
を選択します。
ここで、apache2で立てたHTTPサーバの場所を教えてあげます。
今回は静的なIPアドレスに10.0.2.7
を設定したので、
次の画面では、
/var/www/html/
配下にリンクを貼った/ubuntu/
を入れてあげます。
isoイメージをマウントしてあるubuntuというディレクトリのリンクが貼ってあるので、これによりisoイメージを実行できるというわけです。
この次の画面は空っぽのままでEnterを押してください。
次の画面にインストーラが遷移すれば、もう安心です!
インストーラに従ってインストールを進めていけば無事にTargetマシンにUbuntu18.04.1がインストールされます!
最後までインストールが終わりenterを押すと再起動が始まってまたPXEブートが始まってしまうので、
一度マシンをシャットダウンしてBIOSの設定を直しましょう。HDDから読みこむように設定を直して、起動すると…!
イエス!PXEブート成功!おめでとうございます!
お疲れ様でした!
ついでにあと少し
ここまでで今回のゴールには到達しました。 なので、ここからはちょっとした付け足しみたいなものです。
その1
〜PXEブートでUbuntuをインストールしたTargetのマシンをそのまま使いたい場合〜
現在の設定だと、
パッケージをインストールしようとした際、インストール時に指定したPXEブートサーバのhttp://10.0.2.7/ubuntu/
を見に行ってしまいます。
$ sudo apt update
をしても失敗してしまうはずです。
そこで、パッケージの参照先を正しく指定し直しましょう。
$ sudo vi /etc/apt/source.list
この中を以下に書き換えてあげましょう。
deb http://jp.archive.ubuntu.com/ubuntu/ bionic main restricted deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates main restricted deb http://jp.archive.ubuntu.com/ubuntu/ bionic universe deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates universe deb http://jp.archive.ubuntu.com/ubuntu/ bionic multiverse deb http://jp.archive.ubuntu.com/ubuntu/ bionic-updates multiverse deb http://jp.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
これで、再度$sudo apt update
を行うと無事にパッケージがインストールされるはずです。
その2
〜仮想マシンではなく、実際のマシンに対してPXEブートを行いたい場合〜
最近のノートPCはNIC(LANケーブルを挿す穴)が搭載されていないことが多いですが、
デスクトップであったりNICが搭載されているノートPCと、 同様にTargetのマシンがあれば実マシンでのPXEブートが可能です。
その際、TargetマシンのBIOSの設定とPXEブートサーバを構築したVMマシンの設定を変更する必要があります。
TargetマシンのBIOS画面の起動方法は調べる必要がありますが、一般的にはPC起動時にF2キーを連打するとBIOS画面が起動できます。
BIOS画面が起動できたら、PXE(もしくはNetwork)を一番最初に起動するようにしてあげましょう。
PXEブートサーバを構築したVMマシンの設定は、「ネットワーク」をブリッジアダプター
に変更します。
これで、実マシンに対するPXEブートができるはずです。
最後に
いかがだったでしょうか?
PXEブートサーバの構築方法だけでも色々とありますので、他のやり方もネットを参考にしながら試してみると面白いと思います。
また、Ubuntuのversionも変わって行くと各パッケージの仕様も色々と変わって行くので、
トライ&エラーを繰り返しながら動かしてみてください。
長々とお付き合いいただきありがとうございました。
それでは、良きPXEブートライフを!
アスタミューゼでは、エンジニア・デザイナーを募集しています。 ご興味のある方は是非、こちらのバナーから気軽にご応募ください。 お待ちしております!