こちらの記事でUbuntu16.04LTSへPXEブートをするための環境を作った。 この時はUbuntu16.04LTSを自動インストールする環境のみ作ったがCentOS7も使いたかったので、CentOS7を自動インストールする設定も追加してみたときの手順を書いておく。
なお、以下の手順はこちらの記事にあるUbuntuにTFTPサーバとDHCPサーバの設定は行ってあるものとする。
手順
SFTPの準備
Ubuntuのインストーラの起動にはTFTPだけで良かったが、CentOSではSFTPも必要となるため、vsftpdのパッケージをインストールする。
$ sudo apt install vsftpd
続いて、ブートに必要なファイルの設置場所だが、/var/lib/tftpboot/
を利用する。
/var/lib/tftpboot/
はTFTPサーバ(Ubuntuではtftpd-hpa)が使うディレクトリとして/etc/default/tftp
で指定していたものだが、前回の記事にあるUbuntuのブート関連ファイルの設置場所と合わせるためにここを使っているが、環境に合わせて設定すれば良い。これは/etc/vsftpd.conf
のlocal_root
パラメータで指定できる。
合わせてanonymous_enable
とpasv_enable
をYESへと変更する。
/etc/vsftpd.conf
の変更点
@@ -22,7 +22,8 @@ listen_ipv6=YES # # Allow anonymous FTP? (Disabled by default). -anonymous_enable=NO +anonymous_enable=YES # # Uncomment this to allow local users to log in. local_enable=YES @@ -153,3 +154,7 @@ # # Uncomment this to indicate that vsftpd use a utf8 filesystem. #utf8_filesystem=YES + + +local_root=/var/lib/tftpboot +pasv_enable=YES
ということで/var/lib/tftpboot/
以下にcentos/7/pub
というディレクトリを掘っておく。
$ sudo mkidr -p /var/lib/tftpboot/centos/7/pub
CentOS7のブートに必要なファイルの準備
CentOS7の最新ISOを取得する。12/16時点では CentOS 7.5 18.10。 適当にIIJのミラーから取得したがどこからとってきても良い。
$ wget http://ftp.iij.ad.jp/pub/linux/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso -P /tmp
適当に/mnt/iso
とか作ってISOイメージをマウントする。
$ sudo mkdir /mnt/iso $ sudo mount -t iso9660 -o,ro /tmp/CentOS-7-x86_64-Minimal-1810.iso /mnt/iso/
必要なファイルを/var/lib/tftpboot/
以下にコピーする。
$ sudo cp -pr /mnt/iso/isolinux/initrd.img /var/lib/tftpboot/centos/7/ $ sudo cp -pr /mnt/iso/isolinux/vmlinuz /var/lib/tftpboot/centos/7/ $ sudo cp -pr /mnt/iso/* /var/lib/tftpboot/centos/7/pub/ $ sudo cp -pr /mnt/iso/* /var/lib/tftpboot/centos/7/pub/ $ sudo cp -pr /mnt/iso/.treeinfo /var/lib/tftpboot/centos/7/pub/
kickstartファイルの作成
/var/lib/tftpboot/centos/7/pub/kickstart/centos7.cfg
をとりあえずこんな感じのものでを置いておけば良い。
細かいことをしたければもっと詳細に書けば良いけど動作確認を主目的とするので適当にしておく。
cmdline install url --url="ftp://user:password@192.168.34.68/centos/7/pub" lang ja_JP.UTF-8 keyboard --vckeymap=jp --xlayouts='jp' timezone Asia/Tokyo --isUtc --nontp network --bootproto=dhcp --ipv6=auto --activate --hostname=centos #rootpw --plaintext password rootpw --iscrypted $1$2c5VfLZS$WKO3i5/aJrKMDe9fudZ/p0 user --groups=wheel --name=centos $1$2c5VfLZS$WKO3i5/aJrKMDe9fudZ/p0 --iscrypted zerombr bootloader --location=mbr clearpart --all --initlabel part / --fstype=xfs --grow --size=1 --asprimary --label=root auth --enableshadow --passalgo=sha512 selinux --disabled firewall --disabled firstboot --disabled reboot %packages %end
CentOS7のPXEブート設定
PXEブート時のメニュー画面を出す/var/lib/tftpboot/boot-screens/menu.cfg
へ、CentOSのメニューを追加する。
user:password
のところは/var/lib/tftpboot/centos/7/pub
以下にあるファイルを取得するために使用するOSユーザとそのパスワードに書き換える。
menu title Installer boot menu label auto-install-centos7 menu label ^CentOS 7 x64 auto install kernel centos/7/vmlinuz append initrd=centos/7/initrd.img inst.repo=ftp://user:password@10.1.1.129/centos/7/pub ks=ftp://user:password@10.1.1.129/centos/7/pub/kickstart/centos7.cfg #append initrd=centos/7/initrd.img method=http://ftp.riken.jp/Linux/centos/7 label auto-install-ubuntu-16.04 menu label ^Ubuntu 16.04 auto install kernel ubuntu/xenial/ubuntu-installer/amd64/linux append auto=true priority=critical vga=788 initrd=ubuntu/xenial/ubuntu-installer/amd64/initrd.gz preseed/url=tftp://10.1.1.129/ubuntu/xenial/preseed/preseed.cfg preseed/interactive=false label ubuntu-16.04 menu title Ubuntu 16.04 include ubuntu/xenial/ubuntu-installer/amd64/boot-screens/menu.cfg label centos7 menu label ^CentOS 7 x64 kernel centos/7/vmlinuz append initrd=centos/7/initrd.img inst.repo=ftp://user:password@10.1.1.129/centos/7/pub label mainmenu menu label ^Back.. menu exit menu end
後はこれでネットワークブートさせれば起動する。
KVMのゲストを起動させてPXEブートさせるとすれば例えば以下(以下はあくまで例なので特に--networkのオプションとかは環境に合わせて修正する。--pxeは必須。)のような感じでやるとインストーラが起動して自動インストールが始まる。
$ virt-install \ --connect qemu:///system \ -n centos7-pxe-test01 \ --ram 2048 \ --vcpus 1 \ --network type=direct,source=eno1,source_mode=bridge,model=virtio \ --pxe \ --graphics vnc,listen=0.0.0.0,port=5990 \ --noautoconsole \ --disk size=10,path=/var/lib/libvirt/images/centos7-pxe-test01.img \ --debug
VNC Viewerとかを使って画面を表示させ、インストールが開始されれば成功。
まとめ
Ubuntu16.04LTSのPXEブートサーバを使ってCentOS7を自動インストールさせる方法について書いた。