412 lines
14 KiB
Plaintext
412 lines
14 KiB
Plaintext
install
|
|
text
|
|
%include /tmp/source.ks
|
|
{{reboot}}
|
|
lang en_US.UTF-8
|
|
keyboard us
|
|
rootpw r00tme
|
|
timezone --utc Etc/UTC
|
|
firewall --disabled
|
|
selinux --disabled
|
|
# SKIP CONFIGURING X
|
|
skipx
|
|
# NEVER ever place zerombr here, it breaks automated installation
|
|
%include /tmp/bootloader.ks
|
|
%include /tmp/partition.ks
|
|
|
|
# PREINSTALL SECTION
|
|
# HERE ARE COMMANDS THAT WILL BE LAUNCHED BEFORE
|
|
# INSTALLATION PROCESS ITSELF
|
|
%pre
|
|
#!/bin/sh
|
|
|
|
# hard drives
|
|
drives=""
|
|
for drv in `ls -1 /sys/block | grep "sd\|hd\|vd\|cciss"`; do
|
|
if (grep -q 0 /sys/block/${drv}/removable); then
|
|
d=`echo ${drv} | sed -e 's/!/\//'`
|
|
drives="${drives} ${d}"
|
|
fi
|
|
done
|
|
|
|
installdrive="undefined"
|
|
for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
|
|
|
|
set ${drives}
|
|
numdrives=`echo $#`
|
|
|
|
tgtdrive="${installdrive}"
|
|
|
|
if [ ${numdrives} -gt 1 ]; then
|
|
exec < /dev/tty3 > /dev/tty3 2>&1
|
|
chvt 3
|
|
while [ "${tgtdrive}" = "undefined" ]; do
|
|
clear
|
|
echo
|
|
echo '********************************************************************************'
|
|
echo '* W A R N I N G *'
|
|
echo '* *'
|
|
echo '* Which of the detected hard drives do you want to be used as *'
|
|
echo '* installation target? *'
|
|
echo '* *'
|
|
echo '********************************************************************************'
|
|
echo
|
|
echo "Possible choices: ${drives}"
|
|
echo
|
|
read -p "Choose hard drive: " tgtdrive
|
|
match="no"
|
|
for drive in ${drives[@]}; do
|
|
[[ "$drive" == "$tgtdrive" ]] && match="yes" && break
|
|
done
|
|
if [[ "$match" == "no" ]]; then
|
|
tgtdrive="undefined"
|
|
read -p "Invalid choice. Press Enter to continue." _
|
|
fi
|
|
done
|
|
clear
|
|
chvt 1
|
|
else
|
|
tgtdrive=`echo ${drives} | sed -e "s/^\s*//" -e "s/\s*$//"`
|
|
fi
|
|
|
|
# verify tgtdrive is at least 30GB
|
|
tgtdrivesize=$(( $(cat "/sys/class/block/${tgtdrive}/size") / 2 / 1024 ))
|
|
if [ $tgtdrivesize -lt 30720 ]; then
|
|
exec < /dev/tty3 > /dev/tty3 2>&1
|
|
chvt 3
|
|
clear
|
|
echo
|
|
echo '********************************************************************'
|
|
echo '* E R R O R *'
|
|
echo '* *'
|
|
echo '* Your disk is under 30GB in size. Installation cannot continue. *'
|
|
echo '* Restart installation with a larger disk. *'
|
|
echo '* *'
|
|
echo '********************************************************************'
|
|
echo
|
|
read -p "Press Enter to restart: " _
|
|
reboot
|
|
fi
|
|
|
|
# source
|
|
if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
|
|
echo "harddrive --partition=UUID=will_be_substituted_with_actual_uuid --dir=/" > /tmp/source.ks
|
|
else
|
|
echo "cdrom" > /tmp/source.ks
|
|
fi
|
|
|
|
vgremove -ff os
|
|
dd if=/dev/zero of=/dev/${tgtdrive} bs=10M count=10
|
|
sleep 3
|
|
hdparm -z /dev/${tgtdrive}
|
|
parted -s /dev/${tgtdrive} mklabel gpt
|
|
parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary 0 24
|
|
parted -s /dev/${tgtdrive} set 1 bios_grub on
|
|
parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary fat16 24 224
|
|
parted -s /dev/${tgtdrive} set 2 boot on
|
|
parted -a none -s /dev/${tgtdrive} unit MiB mkpart primary 224 424
|
|
sleep 3
|
|
hdparm -z /dev/${tgtdrive}
|
|
|
|
# partition
|
|
|
|
# This adds support for the p seperator required for cciss devices
|
|
if echo ${tgtdrive} | grep -q -e cciss ; then
|
|
bootdev=${tgtdrive}p
|
|
else
|
|
bootdev=${tgtdrive}
|
|
fi
|
|
echo > /tmp/partition.ks
|
|
echo "partition /boot --onpart=/dev/${bootdev}3" >> /tmp/partition.ks
|
|
echo "partition pv.001 --ondisk=${tgtdrive} --size=30000 --grow" >> /tmp/partition.ks
|
|
echo "volgroup os pv.001" >> /tmp/partition.ks
|
|
echo "logvol swap --vgname=os --recommended --name=swap" >> /tmp/partition.ks
|
|
echo "logvol / --vgname=os --size=10000 --name=root --fstype=ext4" >> /tmp/partition.ks
|
|
echo "logvol /var --vgname=os --size=1 --grow --name=var --fstype=xfs" >> /tmp/partition.ks
|
|
|
|
# bootloader
|
|
echo "bootloader --location=mbr --driveorder=${tgtdrive} --append=' biosdevname=0 crashkernel=none'" > /tmp/bootloader.ks
|
|
|
|
# Anaconda can not install grub 0.97 on disks which are >4T.
|
|
# The reason is that grub does not support such large geometries
|
|
# and it simply thinks that the cylinder number has negative value.
|
|
# Here we just set geometry manually so that grub thinks that disk
|
|
# size is equal to 1G.
|
|
# 130 cylinders * (16065 * 512 = 8225280 bytes) = 1G
|
|
echo "%post --nochroot --log=/mnt/sysimage/root/anaconda-post-partition.log" > /tmp/post_partition.ks
|
|
echo "echo \"device (hd0) /dev/${tgtdrive}\" >> /tmp/grub.script" >> /tmp/post_partition.ks
|
|
echo "echo \"geometry (hd0) 130 255 63\" >> /tmp/grub.script" >> /tmp/post_partition.ks
|
|
echo "echo \"root (hd0,2)\" >> /tmp/grub.script" >> /tmp/post_partition.ks
|
|
echo "echo \"install /grub/stage1 (hd0) /grub/stage2 p /grub/grub.conf\" >> /tmp/grub.script" >> /tmp/post_partition.ks
|
|
echo "echo quit >> /tmp/grub.script" >> /tmp/post_partition.ks
|
|
echo "cat /tmp/grub.script | chroot /mnt/sysimage /sbin/grub --no-floppy --batch" >> /tmp/post_partition.ks
|
|
|
|
%end
|
|
|
|
%packages --nobase --excludedocs
|
|
@Core
|
|
authconfig
|
|
bind-utils
|
|
cronie
|
|
crontabs
|
|
curl
|
|
daemonize
|
|
fuelmenu
|
|
gdisk
|
|
man
|
|
mlocate
|
|
ntp
|
|
openssh-clients
|
|
policycoreutils
|
|
ruby21-puppet
|
|
ruby21-rubygem-netaddr
|
|
ruby21-rubygem-openstack
|
|
selinux-policy-targeted
|
|
subscription-manager
|
|
system-config-firewall-base
|
|
tcpdump
|
|
vim-enhanced
|
|
virt-what
|
|
wget
|
|
yum
|
|
|
|
%include /tmp/post_partition.ks
|
|
|
|
# POSTINSTALL SECTION
|
|
# HERE ARE COMMANDS THAT WILL BE LAUNCHED JUST AFTER
|
|
# INSTALLATION ITSELF COMPLETED
|
|
%post
|
|
echo -e "modprobe nf_conntrack_ipv4\nmodprobe nf_conntrack_ipv6" >> /etc/rc.modules
|
|
chmod +x /etc/rc.modules
|
|
echo -e "net.nf_conntrack_max=1048576" >> /etc/sysctl.conf
|
|
mkdir -p /var/log/coredump
|
|
echo -e "kernel.core_pattern=/var/log/coredump/core.%e.%p.%h.%t" >> /etc/sysctl.conf
|
|
chmod 777 /var/log/coredump
|
|
echo -e "* soft core unlimited\n* hard core unlimited" >> /etc/security/limits.conf
|
|
|
|
# Mount installation media in chroot
|
|
%post --nochroot --log=/mnt/sysimage/root/anaconda-post-before-chroot.log
|
|
#!/bin/sh
|
|
|
|
SOURCE="/mnt/sysimage/tmp/source"
|
|
|
|
for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
|
|
|
|
mkdir -p "${SOURCE}"
|
|
|
|
case "${repo}" in
|
|
nfs:*)
|
|
nfs_url="${repo#nfs:}"
|
|
mount -t nfs "${nfs_url}" "${SOURCE}"
|
|
;;
|
|
*)
|
|
if [ -d "/mnt/source" ]; then
|
|
mount -o bind "/mnt/source" "${SOURCE}"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
%post --log=/root/anaconda-post-after-chroot.log
|
|
#!/bin/bash
|
|
|
|
set -x
|
|
|
|
function save_cfg {
|
|
scrFile="/etc/sysconfig/network-scripts/ifcfg-$device"
|
|
search="domain $domain\nsearch $domain"
|
|
sed -i -e 's#^\(HOSTNAME=\).*$#\1'"$hostname"'#' /etc/sysconfig/network
|
|
grep -q "^\s*$ip\s+$hostname" /etc/hosts || echo "$ip $hostname" >> /etc/hosts
|
|
echo "${search}\nnameserver 127.0.0.1" > /etc/resolv.conf
|
|
[ $dns1 ] && echo -e "${search}\nnameserver $dns1" > /etc/resolv.conf
|
|
[ $dns1 ] && echo -e "${search}\nnameserver $dns1" > /etc/dnsmasq.upstream
|
|
[ $dns2 ] && echo "nameserver $dns2" >> /etc/resolv.conf
|
|
[ $dns2 ] && echo "nameserver $dns2" >> /etc/dnsmasq.upstream
|
|
|
|
echo DEVICE=$device > $scrFile
|
|
echo ONBOOT=yes >> $scrFile
|
|
echo NM_CONTROLLED=no >> $scrFile
|
|
echo HWADDR=$hwaddr >> $scrFile
|
|
echo USERCTL=no >> $scrFile
|
|
echo PEERDNS=no >> $scrFile
|
|
if [ $ip ]; then
|
|
echo BOOTPROTO=static >> $scrFile
|
|
echo IPADDR=$ip >> $scrFile
|
|
echo NETMASK=$netmask >> $scrFile
|
|
else
|
|
echo BOOTPROTO=dhcp >> $scrFile
|
|
fi
|
|
scrDHCPFile="/etc/sysconfig/network-scripts/ifcfg-$dhcp_interface"
|
|
#Ignore gateway and set up DHCP if it is used, otherwise apply it
|
|
if [ $dhcp_interface ] && [ "$dhcp_interface" != "$device" ]; then
|
|
echo "DEVICE=$dhcp_interface" > $scrDHCPFile
|
|
echo "BOOTPROTO=dhcp" >> $scrDHCPFile
|
|
echo "ONBOOT=yes" >> $scrDHCPFile
|
|
echo "USERCTL=no" >> $scrDHCPFile
|
|
else
|
|
echo GATEWAY=$gw >> /etc/sysconfig/network
|
|
fi
|
|
}
|
|
|
|
# Default FQDN
|
|
hostname="nailgun.mirantis.com"
|
|
|
|
for I in `cat /proc/cmdline`; do case "$I" in *=*) eval $I;; esac ; done
|
|
hostname=$hostname
|
|
domain=${hostname#*.}
|
|
ip=$ip
|
|
netmask=$netmask
|
|
gw=$gw
|
|
device="eth0"
|
|
hwaddr=`ifconfig $device | grep -i hwaddr | sed -e 's#^.*hwaddr[[:space:]]*##I'`
|
|
dhcp_interface=$dhcp_interface
|
|
save_cfg
|
|
|
|
# Mounting installation source
|
|
SOURCE=/tmp/source
|
|
FS=/tmp/fs
|
|
|
|
echo
|
|
mkdir -p ${SOURCE}
|
|
mkdir -p ${FS}
|
|
|
|
if test -e /dev/disk/by-uuid/will_be_substituted_with_actual_uuid; then
|
|
mount /dev/disk/by-uuid/will_be_substituted_with_actual_uuid ${FS}
|
|
mount -o loop ${FS}/nailgun.iso ${SOURCE}
|
|
fi
|
|
|
|
# Copying Repo to the nailgun /var/www directory
|
|
repodir="/var/www/nailgun"
|
|
mkdir -p ${repodir}/centos/fuelweb/x86_64
|
|
cp -r ${SOURCE}/images ${repodir}/centos/fuelweb/x86_64
|
|
cp -r ${SOURCE}/isolinux ${repodir}/centos/fuelweb/x86_64
|
|
cp -r ${SOURCE}/repodata ${repodir}/centos/fuelweb/x86_64
|
|
cp -r ${SOURCE}/Packages ${repodir}/centos/fuelweb/x86_64
|
|
cp ${SOURCE}/.treeinfo ${repodir}/centos/fuelweb/x86_64
|
|
cp -r ${SOURCE}/rhel ${repodir}
|
|
|
|
# Copying Ubuntu files
|
|
mkdir -p ${repodir}/ubuntu/fuelweb/x86_64/images
|
|
cp -r ${SOURCE}/ubuntu/conf ${repodir}/ubuntu/fuelweb/x86_64
|
|
cp -r ${SOURCE}/ubuntu/db ${repodir}/ubuntu/fuelweb/x86_64
|
|
cp -r ${SOURCE}/ubuntu/dists ${repodir}/ubuntu/fuelweb/x86_64
|
|
cp -r ${SOURCE}/ubuntu/pool ${repodir}/ubuntu/fuelweb/x86_64
|
|
cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux ${repodir}/ubuntu/fuelweb/x86_64/images
|
|
cp -r ${SOURCE}/ubuntu/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz ${repodir}/ubuntu/fuelweb/x86_64/images
|
|
|
|
# Copying eggs/gems to the nailgun directory
|
|
cp -r ${SOURCE}/eggs ${repodir}
|
|
cp -r ${SOURCE}/gems ${repodir}
|
|
|
|
# Copying bootstrap image
|
|
mkdir -p ${repodir}/bootstrap
|
|
cp -r ${SOURCE}/bootstrap/initramfs.img ${repodir}/bootstrap
|
|
cp -r ${SOURCE}/bootstrap/linux ${repodir}/bootstrap
|
|
|
|
mkdir -p /root/.ssh
|
|
chmod 700 /root/.ssh
|
|
cp ${SOURCE}/bootstrap/bootstrap.rsa /root/.ssh
|
|
chmod 600 /root/.ssh/bootstrap.rsa
|
|
|
|
# Unpacking puppet manifests for master and slave
|
|
cp ${SOURCE}/puppet-slave.tgz ${repodir}/
|
|
#mkdir -p /opt/nailgun_puppet
|
|
#tar zxf ${SOURCE}/puppet-nailgun.tgz -C /opt/nailgun_puppet
|
|
tar zxf ${SOURCE}/puppet-slave.tgz -C /etc/puppet/modules
|
|
mkdir -p /etc/puppet/manifests/
|
|
cp /etc/puppet/modules/osnailyfacter/examples/site.pp /etc/puppet/manifests/site.pp
|
|
cp ${SOURCE}/send2syslog.py /bin/send2syslog.py
|
|
#ln -s /etc/puppet/modules/mcollective /etc/puppet/modules/nailgun /etc/puppet/modules/osnailyfacter /etc/puppet/modules/stdlib /etc/puppet/modules/rabbitmq /etc/puppet/modules/puppetdb/ /etc/puppet/modules/postgresql/ /etc/puppet/modules/inifile/ /etc/puppet/modules/sysctl/ /opt/nailgun_puppet/
|
|
|
|
# Prepare local repository specification
|
|
rm /etc/yum.repos.d/CentOS*.repo
|
|
cat > /etc/yum.repos.d/nailgun.repo << EOF
|
|
[nailgun]
|
|
name=Nailgun Local Repo
|
|
baseurl=file:/var/www/nailgun/centos/fuelweb/x86_64
|
|
gpgcheck=0
|
|
EOF
|
|
|
|
# Disable subscription-manager plugins
|
|
sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/product-id.conf || :
|
|
sed -i 's/^enabled.*/enabled=0/' /etc/yum/pluginconf.d/subscription-manager.conf || :
|
|
|
|
# Disable GSSAPI in ssh server config
|
|
sed -i -e "/^\s*GSSAPICleanupCredentials yes/d" -e "/^\s*GSSAPIAuthentication yes/d" /etc/ssh/sshd_config
|
|
|
|
# Copying bootstrap_admin_node.sh, chmod it and
|
|
# adding /etc/init/bootstrap_admin_node.conf
|
|
cp ${SOURCE}/bootstrap_admin_node.sh /usr/local/sbin/bootstrap_admin_node.sh
|
|
chmod 0777 /usr/local/sbin/bootstrap_admin_node.sh
|
|
cp ${SOURCE}/bootstrap_admin_node.conf /etc/init/bootstrap_admin_node.conf
|
|
echo "ENABLED=1" > /etc/sysconfig/bootstrap_admin_node
|
|
|
|
# Copying version.yaml file. It contains COMMIT_SHA of last commit.
|
|
mkdir -p /etc/nailgun
|
|
cp ${SOURCE}/version.yaml /etc/nailgun/version.yaml
|
|
|
|
# Generete Fuel UUID
|
|
uuidgen > /etc/fuel-uuid
|
|
|
|
###Run fuel menu
|
|
[ -z "$showmenu" ] && showmenu="no"
|
|
cat > /root/.showfuelmenu << EOF
|
|
#Set to yes to run Fuel Setup
|
|
#Set to no to accept default settings
|
|
showmenu=$showmenu
|
|
EOF
|
|
|
|
# Prepare custom /etc/issue logon banner and script for changing IP in it
|
|
cat > /etc/issue << EOF
|
|
#########################################
|
|
# Welcome to the Fuel server #
|
|
#########################################
|
|
Server is running on \m platform
|
|
|
|
Fuel UI is available on: http://:8000
|
|
|
|
Default administrator login: root
|
|
Default administrator password: r00tme
|
|
|
|
Please change root password on first login.
|
|
|
|
EOF
|
|
|
|
echo "sed -i \"s%\(^.*able on:\).*$%\1 http://\`ip address show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 -\`:8000%\" /etc/issue" >>/etc/rc.local
|
|
|
|
# Unmounting source
|
|
umount -f ${SOURCE}
|
|
rm -rf ${SOURCE}
|
|
|
|
umount -f ${FS} || true
|
|
rm -rf ${FS}
|
|
|
|
# Enabling/configuring NTPD and ntpdate services
|
|
echo "server 127.127.1.0" >> /etc/ntp.conf
|
|
echo "fudge 127.127.1.0 stratum 10" >> /etc/ntp.conf
|
|
echo "tos orphan 7" >> /etc/ntp.conf
|
|
|
|
chkconfig ntpd on
|
|
chkconfig ntpdate on
|
|
|
|
# Do not show error message on ntpdate failure. Customers should not be confused
|
|
# if admin node does not have access to the internet time servers.
|
|
sed -i /etc/rc.d/init.d/ntpdate -e 's/\([ $RETVAL -eq 0 ] && success || \)failure/\1success/'
|
|
|
|
# Disabling splash
|
|
sed -i --follow-symlinks -e '/^\skernel/ s/rhgb//' /etc/grub.conf
|
|
sed -i --follow-symlinks -e '/^\skernel/ s/quiet//' /etc/grub.conf
|
|
|
|
# Disabling console clearing
|
|
sed -i 's/getty/getty --noclear/' /etc/init/tty.conf
|
|
|
|
# Disabling starting first console from start-ttys service
|
|
sed -i --follow-symlinks -e 's/ACTIVE_CONSOLES=.*/ACTIVE_CONSOLES=\/dev\/tty\[2-6\]/' /etc/sysconfig/init
|
|
|
|
# Copying default bash settings to the root directory
|
|
cp -f /etc/skel/.bash* /root/
|
|
|
|
# Blacklist i2c_piix4 module for VirtualBox so it does not create kernel errors
|
|
[[ $(virt-what) = "virtualbox" ]] && echo "blacklist i2c_piix4" > /etc/modprobe.d/blacklist-i2c-piix4.conf
|
|
|
|
%end
|