dshimizu/blog

アルファ版

PXEブートでCentOS7を自動ンストール

こちらの記事で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.conflocal_rootパラメータで指定できる。

合わせてanonymous_enablepasv_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を自動インストールさせる方法について書いた。