PXEブートでCentOSをリモートインストールした
PXEつかう
前提
予め以下を用意。
ホスト:test1
固定IP:192.168.33.10
環境
Mac上のVirtualBoxでやってます。
PXEの処理フロー(例)
- システムが PXE経由でブートし、DHCPサーバへアドレスを要求する
- DHCPサーバが、IPアドレス、tftpサーバのアドレス、最初にロードするプログラム名(pxelinux)等を通知する
- システムが DHCPサーバから通知された情報を元に、tftpで pxelinuxを取得する
- システム上の pxelinuxが tftpサーバから構成ファイル(カーネルファイル名 initrdファイル名、ブートオプション等の書かれているファイル)を取得する
- システム上の pxelinuxが取得した構成ファイルを元に tftpサーバからカーネル、initrdイメージを取得し、それを使用してブートする
- システム上でインストーラーが起動し、kickstart用構成ファイルを NFS経由で取得する
- システム上で kickstart用構成ファイルの指定に従いインストールが行われる、キット(インストール CDイメージ)は NFS経由で参照される
準備
- dhcp / syslinux / tftp-server / インストール
[vagrant@test1 ~]$ sudo yum install dhcp (略) [vagrant@test1 ~]$ sudo yum install xinetd (略) [vagrant@test1 ~]$ sudo yum install syslinux (略) [vagrant@test1 ~]$ sudo yum install tftp-server (略) [vagrant@test1 tftpboot]$ sudo yum install vsftpd
* NFSとは?
ローカルに接続されたストレージをネットワークを介してリモートの計算機に提供する分散ファイルシステムとそのプロトコル
* TFTPとは?
UDPでファイル転送するプロトコル。
* xinetdとは?
インターネットサービスを提供するプログラムの代わりに接続要求を待ち受け、接続要求があった時に各サービスを提供するプログラムを起動するもの
* syslinuxとは?
軽量なブートローダ「pxelinux.0」を含むパッケージ
- 各種設定
# tftp [vagrant@test1 ~]$ sudo vi /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } [vagrant@test1 ~]$ sudo /etc/rc.d/init.d/xinetd start xinetd を起動中: [ OK ] [vagrant@test1 ~]$ sudo chkconfig xinetd on # dhcp [vagrant@test1 tftpboot]$ sudo vi /etc/dhcp/dhcpd.conf subnet 192.168.33.0 netmask 255.255.255.0 { ★デフォげ option routers 192.168.33.10; ★サブネットマスク option subnet-mask 255.255.255.0; ★IPの範囲 range 192.168.33.11 192.168.33.50; ★TFTPサーバのIP(ホスト指定はNG) next-server 192.168.33.10; ★TFTPサーバルートからのファイルパス filename "pxelinux.0"; } [vagrant@test1 tftpboot]$ sudo /etc/rc.d/init.d/dhcpd start dhcpd を起動中: [ OK ] [vagrant@test1 tftpboot]$ sudo chkconfig dhcpd on # pxelnux(Linuxのブートローダ)をtftpディレクトリへコピー [vagrant@test1 ~]$ sudo cp -r /usr/share/syslinux/* /var/lib/tftpboot/ # isoのマウントポイントを作成 [vagrant@test1 vagrant]$ sudo mkdir -p /var/lib/tftpboot/images/centos7 # マウント [vagrant@test1 ~]$ sudo mount -o loop /vagrant/CentOS-7-x86_64-Minimal-1503-01.iso /var/lib/tftpboot/images/centos7 # kernelイメージ、RAMイメージコピー [vagrant@test1 ~]$ sudo mkdir /var/lib/tftpboot/centos7 [vagrant@test1 ~]$ sudo cp /var/lib/tftpboot/images/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7 # ftpルートにisoの中身コピー [vagrant@test1 ~]$ sudo cp -r /var/lib/tftpboot/images/centos7/* /var/ftp/pub/ # PXEブートの設定ファイルを作る [vagrant@test1 ~]$ sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg [vagrant@test1 ~]$ sudo vi /var/lib/tftpboot/pxelinux.cfg/default ★ファイル名「default」の代わりに対象マシンのMacアドレスを16進数表記にした設定ファイルを作成すると、クライアントマシン毎に割り当てられる default menu.c32 PROMPT 0 TIMEOUT 300 ONTIMEOUT local menu title ######## PXE Boot Menu ########## label 1 menu label ^1)CentOS 7 x64 with local Repo kernel centos7/vmlinuz append initrd=centos7/initrd.img inst.repo=ftp://192.168.33.10/pub # reboot [vagrant@test1 ~]$ sudo reboot
FTPサーバを使用する方法で構築した。
つまったこと
PXEクライアント起動時にブートローダが読み込めない
dhcpd.conf中でnext-serverを省略したためだった。調査した時に、DHCPサーバとTFTPサーバが同じ場合、不要と記載されていたのを鵜呑みにしていたが、実態と異なった。 バージョンによる差異かもしれないが、いずれにせよ公式ドキュメントを正としていくよう心がけたい。
tftpでファイルが見えない
/var/lib/tftpbootをルートにしていて、配下に「centos」と「ubuntu」を用意し、パーミッション・オーナーを統一した。 ところが、centos側だけ、getをしようとするとPermissionDeniedになる。 同名のディレクトリを作成しなおし、再度ファイルコピーして解消された。
インストールが途中で止まる
メモリ割り当てが低すぎた模様。2048MB割り当て、無事に動作した。