この記事では自動インストールのPXE Bootサーバをインストールして、PXE Bootサーバにネットワーク接続されたマシンにCentOS 7を自動でインストールします。 クライアントのメモリサイズを1536MBより大きくする必要があります。
Table of Contents
1 PXE Bootサーバをインストールする
以下のスクリプトでPXE Bootサーバをインストールします。環境に合わせて変数を変更してください。
- SERVER_IPADDRはPXE BootサーバのIPアドレスです。
- DHCP_SUBNETはDHCPで配布するネットワークアドレスです。
- DHCP_NETMASKはDHCPで配布するサブネットです。
- DHCP_DOMAINはDHCPで配布するドメインです。
- DHCP_DNSはDHCPで配布するDNSです。
- DHCP_ROUTERはDHCPで配布するゲートウェイです。
- DHCP_CLIENT_HOSTNAMEはクライアントのホスト名です。
- DHCP_CLIENT_IPADDRはクライアントに配布するIPアドレスです。
- DHCP_CLIENT_MACADDRはクライアントのMACアドレスです。
- KICKSTART_LANGUAGEはKickstartで設定する言語です。
- KICKSTART_KEYMAPはKickstartで設定するキーボードレイアウトです。
- KICKSTART_TIMEZONEはKickstartで設定するタイムゾーンです。
- MIRROR_URLはネットワークインストールで使用するリポジトリのURLです。
変数とは無関係にPreseedは以下の設定を実行します。
- rootユーザのパスワードはcentosです。
- ユーザ名がcentos、パスワードがcentosのユーザを作成します。
- パスワードはこちらの手順でハッシュ化しています。
- GNOMEデスクトップ環境のパッケージをインストールします。
- この記事ではcentos-7-ks.cfgというファイルを作成していますが、"cdrom"をコメントアウトすれば/root/anaconda-ks.cfgも使えます。
#!/bin/sh set -e # Change the following variable to yours. [ -z "${SERVER_IPADDR}" ] && \ SERVER_IPADDR=$(hostname -I | awk '{ print $1 }') [ -z "${DHCP_SUBNET}" ] && DHCP_SUBNET=192.168.11.0 [ -z "${DHCP_NETMASK}" ] && DHCP_NETMASK=255.255.255.0 [ -z "${DHCP_DOMAIN}" ] && DHCP_DOMAIN=hiroom2.com [ -z "${DHCP_DNS}" ] && DHCP_DNS="192.168.11.2, 192.168.11.1" [ -z "${DHCP_ROUTER}" ] && DHCP_ROUTER=192.168.11.1 [ -z "${DHCP_CLIENT_HOSTNAME}" ] && \ DHCP_CLIENT_HOSTNAME=centos-7-pxeboot-client [ -z "${DHCP_CLIENT_IPADDR}" ] && DHCP_CLIENT_IPADDR=192.168.11.254 [ -z "${DHCP_CLIENT_MACADDR}" ] && DHCP_CLIENT_MACADDR=52:54:00:5e:7a:a4 [ -z "${KICKSTART_LANGUAGE}" ] && KICKSTART_LANGUAGE=en_US.UTF-8 [ -z "${KICKSTART_KEYMAP}" ] && KICKSTART_KEYMAP=jp [ -z "${KICKSTART_TIMEZONE}" ] && KICKSTART_TIMEZONE=Asia/Tokyo # The mirror.centos.org is slow. You should use your country mirror server. # e.g.) MIRROR_URL=http://ftp.riken.jp/Linux/centos/7/os/x86_64 [ -z "${MIRROR_URL}" ] && \ MIRROR_URL=http://mirror.centos.org/centos-7/7/os/x86_64 tftp_server_install() { sudo yum install -y tftp-server sudo firewall-cmd --add-service=tftp --permanent sudo firewall-cmd --reload sudo systemctl enable tftp sudo systemctl restart tftp } dhcp_install() { sudo yum install -y dhcp cat <<EOF | sudo tee /etc/dhcp/dhcpd.conf subnet ${DHCP_SUBNET} netmask ${DHCP_NETMASK} { option domain-name "${DHCP_DOMAIN}"; option domain-name-servers ${DHCP_DNS}; option routers ${DHCP_ROUTER}; next-server ${SERVER_IPADDR}; filename "pxelinux.0"; } host ${DHCP_CLIENT_HOSTNAME} { hardware ethernet ${DHCP_CLIENT_MACADDR}; fixed-address ${DHCP_CLIENT_IPADDR}; } EOF sudo firewall-cmd --add-service=dhcp --permanent sudo firewall-cmd --reload sudo systemctl enable dhcpd sudo systemctl restart dhcpd } nfs_utils_install() { sudo yum install -y nfs-utils sudo firewall-cmd --add-service=nfs --permanent sudo firewall-cmd --reload sudo systemctl enable nfs sudo systemctl restart nfs sudo mkdir /var/lib/nfsroot cat <<EOF | sudo tee /etc/exports /var/lib/nfsroot *(rw,sync,no_root_squash,no_subtree_check) EOF sudo exportfs -ra } syslinux_install() { sudo yum install -y syslinux cd /var/lib/tftpboot sudo cp /usr/share/syslinux/pxelinux.0 . sudo cp -a /usr/share/syslinux . sudo wget -q ${MIRROR_URL}/isolinux/initrd.img sudo wget -q ${MIRROR_URL}/isolinux/vmlinuz sudo mkdir pxelinux.cfg cat <<EOF | sudo tee pxelinux.cfg/default path syslinux include menu.cfg default syslinux/vesamenu.c32 prompt 0 timeout 50 EOF cat <<EOF | sudo tee menu.cfg menu hshift 13 menu width 49 menu margin 8 menu tabmsg menu title automated install boot menu label centos-7-automated-install menu label ^CentOS 7 automated install kernel vmlinuz append vga=788 initrd=initrd.img ip=dhcp inst.repo=${MIRROR_URL} \ ks=nfs:${SERVER_IPADDR}:/var/lib/nfsroot/centos-7-ks.cfg menu end EOF } kickstart_install() { root_passwd=$(python -c " import crypt print(crypt.crypt(\"centos\", crypt.mksalt(crypt.METHOD_SHA512))) ") user_passwd=$(python -c " import crypt print(crypt.crypt(\"centos\", crypt.mksalt(crypt.METHOD_SHA512))) ") cat <<EOF | sudo tee /var/lib/nfsroot/centos-7-ks.cfg %pre if [ -b /dev/vda ]; then echo "ignoredisk --only-use=vda" > /tmp/drive-ks.cfg echo "bootloader --location=mbr --boot-drive=vda" >> /tmp/drive-ks.cfg else echo "ignoredisk --only-use=sda" > /tmp/drive-ks.cfg echo "bootloader --location=mbr --boot-drive=sda" >> /tmp/drive-ks.cfg fi %end %post # Using "firstboot --disable" does not work correctly? systemctl disable initial-setup-graphical systemctl disable initial-setup-text %end %include /tmp/drive-ks.cfg auth --enableshadow --passalgo=sha512 graphical firstboot --disable eula --agreed keyboard --vckeymap=${KICKSTART_KEYMAP} --xlayouts='${KICKSTART_KEYMAP}' lang ${KICKSTART_LANGUAGE} network --bootproto=dhcp --device=eth0 --ipv6=auto --activate network --hostname=${DHCP_CLIENT_HOSTNAME} rootpw --iscrypted ${root_passwd} timezone ${KICKSTART_TIMEZONE} --isUtc user --groups=wheel --name=centos --password=${user_passwd} --iscrypted xconfig --startxonboot autopart --type=lvm clearpart --none --initlabel reboot %packages @^gnome-desktop-environment @base @core @desktop-debugging @development @dial-up @directory-client @fonts @gnome-apps @gnome-desktop @guest-agents @guest-desktop-agents @input-methods @internet-browser @java-platform @multimedia @network-file-system-client @networkmanager-submodules @print-client @x11 %end %addon com_redhat_kdump --disable --reserve-mb='auto' %end EOF } pxeboot_main() { tftp_server_install dhcp_install nfs_utils_install syslinux_install kickstart_install } pxeboot_main
2 自動インストールを実行する
この記事ではKVMの仮想マシンにCentOS 7を自動インストールします。KVM以外の環境でもPXE Boot(あるいはBOOTP)を有効にすることでネットワークインストールが可能になります。BIOSの設定等をご確認ください。
virt-managerのBoot device orderでNICを有効にします。CDROMが空で、Diskに何もインストールしていない状態です。DiskにOSがインストールされている場合はオーダを変更する必要があります。
iPXEが立ち上がり、DHCPリクエストを送信します。PXE Bootサーバから応答があり、TFTPでブートイメージをダウンロードして起動します。
syslinuxのメニュー画面が立ち上がります。5秒後に"CentOS 7 automated install"が自動選択されます。
自動インストールが開始されます。
自動インストール完了後に自動で再起動され、インストールされたCentOS 7が起動します。