This article will run PXE Boot server for automated install, and automatically install CentOS 7 on client which is connected to PXE Boot server via network. You must make client memory be rather than 1536MB.
Table of Contents
1 Install PXE Boot server
The following script will install PXE Boot server. Change the variables to your environment.
- SERVER_IPADDR is IP adress of PXE Boot server.
- DHCP_SUBNET is network address for DHCP.
- DHCP_NETMASK is subnet for DHCP.
- DHCP_DOMAIN is domain for DHCP.
- DHCP_DNS is DNS for DHCP.
- DHCP_ROUTER is gateway for DHCP.
- DHCP_CLIENT_HOSTNAME is hostname of client.
- DHCP_CLIENT_IPADDR is IP address of client.
- DHCP_CLIENT_MACADDR is MAC address of client.
- KICKSTART_LANGUAGE is language for Kickstart.
- KICKSTART_KEYMAP is keyboard layout for Kickstart.
- KICKSTART_TIMEZONE is time zone for Kickstart.
- MIRROR_URL is repository URL for network installation.
Preseed runs the following.
- Set root user password to "centos".
- Create user which name is "centos" and password is "centos".
- Password is hashed with this.
- Install packages for GNOME desktop environment.
- This article creates centos-7-ks.cfg. But you can use /root/anaconda-ks.cfg by making "cdrom" to comment out.
#!/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 Install CentOS 7 automatically
This article installs CentOS 7 on virtual machine on KVM. Virtual machine on VirtualBox and real machine too can be installed CentOS 7 automatically with enabling network boot. Please check your BIOS setting.
Enable "NIC" of "Boot device order" with virt-manager. If CDROM is not empty or Disk is already installed some OS, you need to change order in order to NIC be top.
iPXE sends DHCP requests, receives DHCP response from PXE Boot server, download and run boot image.
syslinux's menu is displayed. After 5 seconds, "CentOS 7 automated install" will be selected automatically.
Automated install is started.
Virtual machine is rebooted automatically when automated install is completed. Installed CentOS 7 is started.