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 withIPAPPEND 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 URLrootpw --iscrypted
root password setting, generated bygrub-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
to1
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’sdriver.sys
anddriver.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 uploadpreinstall.cmd
and/orpostinstall.cmd
batch file to the same folder. CloudBoot will run these two file automatically at the right provision phase.
- Windows Server 2008 R2I OS media is under folder
- Select
win2008r2-x86_64
as OS type, andwin2008r2-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, andxenserver6.5
as OS tempalte while create provision job