最近は開発用の VM の構築には Packer や Vagrant が流行っているようですが、自社では諸事情で VirtualBox や VMware で個別に VM を作るのが主流です。
が、VM を作るたびに CentOS のインストーラーの GUI をぽちぽちするのは苦痛なので、KickStart で一発でインストールできる ISO を作っています。
先日 CentOS 7 がリリースされたので CentOS 7 用の ISO も作ってみました。
作り方
手順の中の ftp://example.com/centos/7/os/x86_64/
は適当な CentOS 7 のミラーに変更してください。
自社とかでミラーしているならそれを使うのが良いと思います。
.
ISO を作るために mkisofs が必要なのでインストールします。CentOS 6 なら genisoimage パッケージに含まれています。
$ yum install genisoimage
作業用のディレクトリを作成します。
$ mkdir -p iso/{isolinux,ks} $ cd iso
適当な CentOS のミラーから centos/7/os/x86_64/isolinux/
をダウンロードします。
$ rsync -avz rsync://ftp.iij.ad.jp/centos/7/os/x86_64/isolinux/ isolinux/
isolinux.cfg を編集します。
$ vi isolinux/isolinux.cfg
"label linux" という行から最後までをざくっと削除して下記の内容を追記します。
label centos7 menu label ^Install CentOS 7 menu default kernel vmlinuz append initrd=initrd.img inst.stage2=ftp://example.com/centos/7/os/x86_64/ ks=cdrom:/ks/centos7.cfg
ついでに先頭の方にある timeout の値を短くしておきます。
timeout 50
KickStart のコンフィグを作成します。
$ vi ks/centos7.cfg
次のように作成します。
ks/centos7.cfg
#version=RHEL7 cmdline install url --url=ftp://example.com/centos/7/os/x86_64/ lang en_US.UTF-8 keyboard --vckeymap=jp106 --xlayouts=jp timezone Asia/Tokyo --isUtc --nontp network --bootproto=dhcp --ipv6=auto --activate --hostname=unknown #rootpw --plaintext password rootpw --iscrypted $1$2c5VfLZS$WKO3i5/aJrKMDe9fudZ/p0 zerombr bootloader --location=mbr clearpart --all --initlabel part / --fstype=xfs --grow --asprimary --size=1 auth --enableshadow --passalgo=sha512 firstboot --disabled selinux --disabled firewall --disabled poweroff %packages --nobase %end %pre mkdir /mnt/cdrom mount -o ro /dev/cdrom /mnt/cdrom %end %post --log=/root/ks-post.log set -x %include /mnt/cdrom/ks/post.sh %end
インストール後になにか後処理を入れたいなら ks/post.sh に書きます。
$ vi ks/post.sh
例えばブート時のカーネルパラメータから rhgb を削除するようにしてみます。
ks/post.sh
# [grub] remove rhgb sed -i.orig -r '/^GRUB_CMDLINE_LINUX=/s/\s+rhgb//' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg
ISO を作ります。
$ mkisofs \ -o ../centos7-x86_64.iso \ -b isolinux/isolinux.bin \ -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table -r -J -v ./
centos7-x86_64.iso が作成されます。この ISO からブートすると KickStart で CentOS 7 が自動でインストールされます。
注意点
なお、↑の centos7.cfg ままだと・・・
- root のパスワードが password です
- 次の手順で変更できます
openssl passwd -1
で好きなパスワードを入力して暗号化します- centos7.cfg の
rootpw --iscrypted ...
のところを暗号化されたパスワードで書き換えます
- 次の手順で変更できます
- 問答無用でディスクのパーティションを削除します
- この ISO を挿入してブートすると既存のシステムは破壊されます
- ディスク全体を "/" にします
- swap が必要なら後で追加してください
- インストールされるパッケージは最小構成です
- Base すらありません
- インストール後に
yum groupinstall base
してください
- firewall は無効です
- 必要ならセットアップ後に有効にしてください
- selinux は無効です
- すみません
ハマったところ
isolinux.cfg のカーネルパラメータで inst.stage2 でインストールソースを指定しないと次のようなメッセージが表示されてインストールが止まりました。
dracut-initqueue: Warning: Could not boot dracut-initqueue: Warning: /dev/root does not exist
CentOS 6 のころは無くても大丈夫だったのになぜだろう?