OS Template


About Answer Files

Different OS requires its own answer file to perform provisioning in unattend manner, for instance:

OS Answer File
RedHat/CentOS Kickstart
SUSE AutoYaST
VMware/ESX Kickstart
Windows WAIK

BootOS provides a unified web-base UI to custom OS provision answer file along with default settings.


PXE-boot Template

DEFAULT centos6.7
LABEL centos6.7
KERNEL http://osinstall.idcos.com/centos/6.7/os/x86_64/images/pxeboot/vmlinuz
APPEND initrd=http://osinstall.idcos.com/centos/6.7/os/x86_64/images/pxeboot/initrd.img ksdevice=bootif ks=http://osinstall.idcos.com/api/osinstall/v1/device/getSystemBySn?sn={sn} console=tty0 selinux=0 biosdevname=0
IPAPPEND 2
Note:
  • ksdevice=bootif set pxe network adapter, use with IPAPPEND 2

Linux Template

Take CentOS 6.7 for example:

install
url --url=http://osinstall.idcos.com/centos/6.7/os/x86_64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device bootif --bootproto dhcp --noipv6
rootpw  --iscrypted $6$eAdCfx9hZjVMqyS6$BYIbEu4zeKp0KLnz8rLMdU7sQ5o4hQRv55o151iLX7s2kSq.5RVsteGWJlpPMqIRJ8.WUcbZC3duqX0Rt3unK/
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
text
reboot
zerombr
bootloader --location=mbr --append="console=tty0 biosdevname=0 audit=0 selinux=0"
clearpart --all --initlabel
part /boot --fstype=ext4 --size=256 --ondisk=sda
part swap --size=2048 --ondisk=sda
part / --fstype=ext4 --size=100 --grow --ondisk=sda

%packages --ignoremissing
@base
@core
@development

%pre
_sn=$(dmidecode -s system-serial-number 2>/dev/null | awk '/^[^#]/ { print $1 }')
curl -H "Content-Type: application/json" -X POST -d "{\"Sn\":\"$_sn\",\"Title\":\"Start OS Installation\",\"InstallProgress\":0.6,\"InstallLog\":\"SW5zdGFsbCBPUwo=\"}" http://osinstall.idcos.com/api/osinstall/v1/report/deviceInstallInfo
curl -H "Content-Type: application/json" -X POST -d "{\"Sn\":\"$_sn\",\"Title\":\"Disk Partition and Install Software Package\",\"InstallProgress\":0.7,\"InstallLog\":\"SW5zdGFsbCBPUwo=\"}" http://osinstall.idcos.com/api/osinstall/v1/report/deviceInstallInfo

%post
progress() {
    curl -H "Content-Type: application/json" -X POST -d "{\"Sn\":\"$_sn\",\"Title\":\"$1\",\"InstallProgress\":$2,\"InstallLog\":\"$3\"}" http://osinstall.idcos.com/api/osinstall/v1/report/deviceInstallInfo
}

_sn=$(dmidecode -s system-serial-number 2>/dev/null | awk '/^[^#]/ { print $1 }')

progress "hostname and network setting" 0.8 "Y29uZmlnIG5ldHdvcmsK"

# config network
curl -o /tmp/networkinfo "http://osinstall.idcos.com/api/osinstall/v1/device/getNetworkBySn?sn=${_sn}&type=raw"
source /tmp/networkinfo

cat > /etc/sysconfig/network <<EOF
NETWORKING=yes
HOSTNAME=$HOSTNAME
GATEWAY=$GATEWAY
NOZEROCONF=yes
NETWORKING_IPV6=no
IPV6INIT=no
PEERNTP=no
EOF

cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
BOOTPROTO=static
IPADDR=$IPADDR
NETMASK=$NETMASK
ONBOOT=yes
TYPE=Ethernet
NM_CONTROLLED=no
EOF

progress "Add User" 0.85 "YWRkIHVzZXIgeXVuamkK"
useradd yunji

progress "Configure System Service" 0.9 "Y29uZmlnIHN5c3RlbSBzZXJ2aWNlCg=="

# config service
service=(crond network ntpd rsyslog sshd sysstat)
chkconfig --list | awk '{ print $1 }' | xargs -n1 -I@ chkconfig @ off
echo ${service[@]} | xargs -n1 | xargs -I@ chkconfig @ on

progress "System Settings" 0.95 "Y29uZmlnIGJhc2ggcHJvbXB0Cg=="

# custom bash prompt
cat >> /etc/profile <<'EOF'

export LANG=en_US.UTF8
export PS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H\e[m:\e[4m`pwd`\e[m\e[1;37m]\e[m\e[1;36m\e[m\n\$ '
export HISTTIMEFORMAT='[%F %T] '
EOF

progress "Provision Success!" 1 "aW5zdGFsbCBmaW5pc2hlZAo="

Notes:

  • --url=xxx OS Image URL
  • rootpw --iscrypted root password setting, generated by grub-crypt
  • Using curl to post progress message to BootOS server,
  • After disk partition and software package installation, using progress keyword to update progress
  • Query network setting from BootOS server via web service API
  • Set progress to 1 while provision is success

VMWare/ESX Template

  • Import ESXi OS Image
mount -o loop VMware-VMvisor-Installer-6.0.0.update01-3029758.x86_64.iso /media/
rsync -az /media/ /opt/cloudboot/home/www/esxi/6.0u1/
  • Modify boot.cfg to use http instead of tftp
sed -i.orig -e 's;/;http://osinstall.idcos.com/esxi/6.0u1/;g' -e '/kernelopt/d' /opt/cloudboot/home/www/esxi/6.0u1/boot.cfg

Note

Select esxi6.0u1-x86_64 as pxe template, esxi6.0 as OS template.


Windows Template

Take Windows Server 2008 R2 Enterprise and Windows Server 2012 R2 Datacenter for example, it may also apply to other windows version.

Note

Samba service must running to provision windows OS

  • Import windows OS media
mount -o loop cn_windows_server_2008_r2_standard_enterprise_datacenter_and_web_with_sp1_x64_dvd_617598.iso /media
rsync -az /media/ /opt/cloudboot/home/samba/windows/2008r2/
umount /media
Note:
  • Windows Server 2008 R2I OS media is under folder /opt/cloudboot/home/samba/windows/2008r2
  • Drivers is under folder /opt/cloudboot/home/samba/windows/drivers/2008r2. Using model name as sub-folder, and put driver’s driver.sys and driver.inf under the sub-folder is recommended.
  • winconfig.exe program under /opt/cloudboot/home/samba/windows/firstboot folder is installed by Cloudboot to update provision progress and configure windows OS including disk partitioning, network setting, user and registry setting, etc. User may upload preinstall.cmd and/or postinstall.cmd batch file to the same folder. CloudBoot will run these two file automatically at the right provision phase.
  • Select win2008r2-x86_64 as OS type, and win2008r2-x86_64 as OS tempalte while create provision job
  • The default administrator password is yunjikeji
  • A sample of folder structure for windows OS drivers is shown as below:
/opt/cloudboot/home/samba/windows/drivers/
|-- 2008r2
|   |-- broadcom
|   |-- intel_10gb
|   |-- intel_40gb
|   |-- intel_pro100
|   |-- intel_pro1000
|   |-- kvm
|   |-- lsi_sas2
|   |-- lsi_sas3
|   |-- megasas2
|   |-- megasr1
|   `-- percsas3
`-- 2012r2
    |-- broadcom
    |-- intel_10gb
    |-- intel_40gb
    |-- intel_pro100
    |-- intel_pro1000
    |-- kvm
    |-- lsi_sas2
    |-- lsi_sas3
    |-- megasas2
    |-- megasr1
    `-- percsas3

XenServer Template

  • Import XenServer 6.5 OS image
mount -o loop XenServer-6.5.0-xenserver.org-install-cd.iso /media/
rsync -az /media/ /opt/cloudboot/home/www/xenserver/6.5/
  • Select xenserver6.5-x86_64 as OS type, and xenserver6.5 as OS tempalte while create provision job