614 lines
18 KiB
Plaintext
614 lines
18 KiB
Plaintext
install
|
|
text
|
|
#%include /tmp/source.ks
|
|
cdrom
|
|
{{reboot}}
|
|
lang en_US.UTF-8
|
|
keyboard us
|
|
rootpw r00tme
|
|
timezone --utc Etc/UTC
|
|
firewall --disabled
|
|
selinux --disabled
|
|
# ignore unsupported hardware warning
|
|
unsupported_hardware
|
|
# SKIP CONFIGURING X
|
|
skipx
|
|
repo --name="mos-centos" --baseurl=file:///run/install/repo/mos-centos/ --cost=100
|
|
{{extra_repos}}
|
|
# NEVER ever place zerombr here, it breaks automated installation
|
|
%include /tmp/bootloader.ks
|
|
%include /tmp/partition.ks
|
|
%include /tmp/post_partition.ks
|
|
|
|
|
|
|
|
|
|
|
|
%packages --nobase
|
|
@Core
|
|
fuel
|
|
fuel-library
|
|
fuel-dockerctl
|
|
authconfig
|
|
bind-utils
|
|
bridge-utils
|
|
cronie
|
|
crontabs
|
|
curl
|
|
dhcp
|
|
docker
|
|
fuel-bootstrap-image
|
|
# NOTE(kozhukalov): We don't need target centos images in 8.0
|
|
# fuel-target-centos-images{{CENTOS_RELEASE}}
|
|
fuelmenu
|
|
fuel-docker-images
|
|
fuel-mirror
|
|
fuel-openstack-metadata
|
|
gdisk
|
|
lrzip
|
|
lsof
|
|
man
|
|
mlocate
|
|
nmap-ncat
|
|
ntp
|
|
ntpdate
|
|
openssh-clients
|
|
policycoreutils
|
|
python-pypcap
|
|
rsync
|
|
puppet
|
|
rubygem-netaddr
|
|
rubygem-openstack
|
|
selinux-policy-targeted
|
|
strace
|
|
sysstat
|
|
system-config-firewall-base
|
|
tcpdump
|
|
telnet
|
|
vim
|
|
virt-what
|
|
wget
|
|
yum
|
|
yum-plugin-priorities
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
# PREINSTALL SECTION
|
|
# HERE ARE COMMANDS THAT WILL BE LAUNCHED BEFORE
|
|
# INSTALLATION PROCESS ITSELF
|
|
%pre
|
|
#!/bin/sh
|
|
|
|
# hard drives
|
|
drives=""
|
|
removable_drives=""
|
|
for drv in `ls -1 /sys/block | grep "sd\|hd\|vd\|cciss"`; do
|
|
if !(blkid | grep -q "${drv}.*Fuel"); then
|
|
if (grep -q 0 /sys/block/${drv}/removable); then
|
|
drives="${drives} ${drv}"
|
|
else
|
|
removable_drives="${removable_drives} ${drv}"
|
|
fi
|
|
fi
|
|
done
|
|
default_drive=`echo ${drives} ${removable_drives} | awk '{print $1}'`
|
|
|
|
installdrive="undefined"
|
|
forceformat="no"
|
|
for I in $(cat /proc/cmdline); do
|
|
case "$I" in
|
|
*=*)
|
|
if ! [[ "${I}" =~ "." ]]; then eval "$I"; fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
set ${drives} ${removable_drives}
|
|
numdrives=`echo $#`
|
|
|
|
tgtdrive="${installdrive}"
|
|
|
|
function confirm_format {
|
|
check_drive="$1"
|
|
local confirm_format="no"
|
|
|
|
if [[ "$forceformat" == "yes" ]] ; then
|
|
return 0
|
|
fi
|
|
|
|
if parted -s /dev/$check_drive print &>/dev/null ; then
|
|
echo
|
|
echo "$check_drive drive contains partition table:"
|
|
parted -s /dev/$check_drive print
|
|
echo
|
|
read -p "Are you sure you want to erase ALL data on disk $check_drive? (y/N)" confirm_format
|
|
if [[ "$confirm_format" == "y" ]] || [[ "$confirm_format" == "Y" ]] || [[ "$forceformat" == "yes" ]]; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
format_confirmed="no"
|
|
|
|
if [ $numdrives -lt 1 ]; then
|
|
exec < /dev/tty3 > /dev/tty3 2>&1
|
|
chvt 3
|
|
clear
|
|
echo
|
|
echo '********************************************************************'
|
|
echo '* E R R O R *'
|
|
echo '* *'
|
|
echo '* There is no suitable media available for installation. *'
|
|
echo '* Please attach a drive and try again. *'
|
|
echo '* *'
|
|
echo '********************************************************************'
|
|
echo
|
|
read -p "Press Enter to shut down the system: " _
|
|
poweroff
|
|
fi
|
|
|
|
if [ ${numdrives} -gt 1 ] || [ `echo ${drives} | wc -w` -eq 0 ] ; 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 '* the installation target? *'
|
|
echo '* *'
|
|
echo '********************************************************************************'
|
|
echo
|
|
echo "Possible choices"
|
|
echo "Persistent drives: ${drives}"
|
|
echo "Removable drives: ${removable_drives}"
|
|
echo
|
|
if [ `echo ${drives} | wc -w` -eq 1 ] ; then
|
|
read -t 30 -p "Choose hard drive: " tgtdrive || tgtdrive=$default_drive
|
|
else
|
|
read -p "Choose hard drive: " tgtdrive
|
|
fi
|
|
match="no"
|
|
for drive in ${drives[@]} ${removable_drives[@]}; do
|
|
if [[ "$drive" == "$tgtdrive" ]] && match="yes" ; then
|
|
if confirm_format $tgtdrive ; then
|
|
format_confirmed="yes"
|
|
break
|
|
else
|
|
tgtdrive="undefined"
|
|
read -p "You may select another disk. Press Enter to continue." _
|
|
fi
|
|
fi
|
|
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
|
|
|
|
if [ "$format_confirmed" != "yes" ] ; then
|
|
exec < /dev/tty3 > /dev/tty3 2>&1
|
|
chvt 3
|
|
if ! confirm_format $tgtdrive ; then
|
|
clear
|
|
echo
|
|
echo '********************************************************************'
|
|
echo '* E R R O R *'
|
|
echo '* *'
|
|
echo '* Disk $tgtdrive contains active partition(s). *'
|
|
echo '* Installation cannot continue without confirmation. *'
|
|
echo '* *'
|
|
echo '********************************************************************'
|
|
echo
|
|
read -p "Press Enter to restart: " _
|
|
reboot
|
|
fi
|
|
chvt 1
|
|
fi
|
|
|
|
# verify tgtdrive is at least 41GB
|
|
tgtdrivesize=$(( $(cat "/sys/class/block/${tgtdrive}/size") / 2 / 1024 ))
|
|
if [ $tgtdrivesize -lt 41984 ]; 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 41GB in size. Installation cannot continue. *'
|
|
echo '* Restart installation with a larger disk. *'
|
|
echo '* *'
|
|
echo '********************************************************************'
|
|
echo
|
|
read -p "Press Enter to restart: " _
|
|
reboot
|
|
fi
|
|
|
|
# paths in /dev have "/" instead of "!" for cciss devices
|
|
tgtdrive=$(echo $tgtdrive | sed -e 's/!/\//')
|
|
|
|
# source
|
|
if test -e /dev/disk/by-label/will_be_substituted_with_ISO_VOLUME_ID; then
|
|
echo "harddrive --partition=LABEL=will_be_substituted_with_ISO_VOLUME_ID --dir=/" > /tmp/source.ks
|
|
elif 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
|
|
|
|
vgdisplay -c | cut -d':' -f1 | xargs vgremove -ff
|
|
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
|
|
|
|
cat << EOF > /tmp/partition.ks
|
|
part /boot --onpart=/dev/${bootdev}3
|
|
part /boot/efi --onpart=/dev/${bootdev}2
|
|
part pv.001 --ondisk=${tgtdrive} --size=1 --grow
|
|
part pv.002 --ondisk=${tgtdrive} --size=20000
|
|
volgroup os pv.001
|
|
volgroup docker pv.002
|
|
logvol swap --vgname=os --recommended --name=swap
|
|
logvol / --vgname=os --size=10000 --name=root --fstype=ext4
|
|
logvol /var --vgname=os --size=10000 --name=var --fstype=ext4
|
|
logvol /var/log --vgname=os --size=4000 --grow --name=varlog --fstype=ext4
|
|
EOF
|
|
|
|
|
|
|
|
# bootloader
|
|
echo "bootloader --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
|
|
echo "%end" >> /tmp/post_partition.ks
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
# POSTINSTALL SECTIONS
|
|
# HERE ARE COMMANDS THAT WILL BE LAUNCHED JUST AFTER
|
|
# INSTALLATION ITSELF COMPLETED
|
|
|
|
|
|
# Parse /proc/cmdline and save for next steps
|
|
%post --log=/root/anaconda-parse-cmdline.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
for I in $(cat /proc/cmdline); do
|
|
case "$I" in
|
|
*=*)
|
|
if ! [[ "${I}" =~ "." ]]; then echo "${I}" >> /root/anaconda.cmdline.vars; fi
|
|
;;
|
|
esac
|
|
done
|
|
|
|
source /root/anaconda.cmdline.vars
|
|
|
|
if [[ ! -z $ifname ]]; then
|
|
echo "adminif=$(udevadm info --query=property -p /sys/class/net/${ifname%%:*} | \
|
|
awk -F\= '{ if ($1 == "ID_NET_NAME_PATH") print $2}')" >> /root/anaconda.cmdline.vars
|
|
fi
|
|
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
# Mount installation media in chroot
|
|
%post --nochroot --log=/mnt/sysimage/root/anaconda-post-before-chroot.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
source "/mnt/sysimage/root/anaconda.cmdline.vars"
|
|
|
|
SOURCE="/mnt/sysimage/tmp/source"
|
|
|
|
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
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
%post --log=/root/anaconda-post-configure-repos.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
# Mounting installation source
|
|
SOURCE=/tmp/source
|
|
FS=/tmp/fs
|
|
|
|
mkdir -p ${SOURCE}
|
|
mkdir -p ${FS}
|
|
|
|
if test -e /dev/disk/by-label/will_be_substituted_with_ISO_VOLUME_ID; then
|
|
mount /dev/disk/by-label/will_be_substituted_with_ISO_VOLUME_ID ${SOURCE}
|
|
elif 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
|
|
|
|
# this file is provided by fuel-openstack-metadata package
|
|
OPENSTACK_VERSION=`cat /etc/fuel_openstack_version`
|
|
|
|
# ----------------------
|
|
# UNPACKING REPOSITORIES
|
|
# ----------------------
|
|
|
|
wwwdir="/var/www/nailgun"
|
|
repodir="${wwwdir}/${OPENSTACK_VERSION}"
|
|
|
|
# Copying Centos files
|
|
mkdir -p ${repodir}/centos/x86_64
|
|
mkdir -p ${repodir}/mos-centos/x86_64
|
|
cp -r ${SOURCE}/images ${repodir}/centos/x86_64
|
|
cp -r ${SOURCE}/isolinux ${repodir}/centos/x86_64
|
|
cp -r ${SOURCE}/repodata ${repodir}/centos/x86_64
|
|
cp -r ${SOURCE}/Packages ${repodir}/centos/x86_64
|
|
cp -r ${SOURCE}/mos-centos/repodata ${repodir}/mos-centos/x86_64
|
|
cp -r ${SOURCE}/mos-centos/Packages ${repodir}/mos-centos/x86_64
|
|
cp -r ${SOURCE}/extra-repos ${repodir}/
|
|
cp ${SOURCE}/.treeinfo ${repodir}/centos/x86_64
|
|
|
|
# Copying Ubuntu files
|
|
mkdir -p ${repodir}/ubuntu/x86_64/images
|
|
cp -r ${SOURCE}/ubuntu/dists ${repodir}/ubuntu/x86_64
|
|
cp -r ${SOURCE}/ubuntu/pool ${repodir}/ubuntu/x86_64
|
|
|
|
# We do not ship debian-installer kernel and initrd on ISO.
|
|
# But we still need to be able to create ubuntu cobbler distro
|
|
# which requires kernel and initrd to be available. So, we
|
|
# just touch these files to work around cobbler's limitation.
|
|
touch ${repodir}/ubuntu/x86_64/images/linux
|
|
touch ${repodir}/ubuntu/x86_64/images/initrd.gz
|
|
|
|
# make links for backward compatibility
|
|
ln -s ${repodir}/centos ${wwwdir}/centos
|
|
ln -s ${repodir}/ubuntu ${wwwdir}/ubuntu
|
|
#Make a symlink for mos-centos in /var/www/nailgun in iso/ks.template
|
|
ln -s ${repodir}/mos-centos ${wwwdir}/mos-centos
|
|
ln -s ${repodir}/extra-repos ${wwwdir}/extra-repos
|
|
|
|
mkdir -p ${wwwdir}/targetimages
|
|
|
|
cp ${SOURCE}/send2syslog.py /bin/send2syslog.py
|
|
mkdir -p /var/lib/hiera
|
|
touch /var/lib/hiera/common.yaml /etc/puppet/hiera.yaml
|
|
|
|
# Prepare local repository specification
|
|
rm /etc/yum.repos.d/CentOS*.repo
|
|
cp ${SOURCE}/extra-repos/extra.repo /etc/yum.repos.d/
|
|
cat > /etc/yum.repos.d/nailgun.repo << EOF
|
|
[nailgun]
|
|
name=Nailgun Local Repo
|
|
baseurl=file:/var/www/nailgun/${OPENSTACK_VERSION}/centos/x86_64
|
|
gpgcheck=0
|
|
[mos]
|
|
name=MOS Local Repo
|
|
baseurl=file:/var/www/nailgun/${OPENSTACK_VERSION}/mos-centos/x86_64
|
|
gpgcheck=0
|
|
EOF
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
%post --log=/root/anaconda-post-configure-sysconfig.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
source "/root/anaconda.cmdline.vars"
|
|
SOURCE=/tmp/source
|
|
|
|
# Set correct docker volume group
|
|
echo "VG=docker" >> /etc/sysconfig/docker-storage-setup
|
|
|
|
# Disable create iptables rules by docker
|
|
echo "DOCKER_NETWORK_OPTIONS=--iptables=false" > /etc/sysconfig/docker-network
|
|
|
|
# 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
|
|
|
|
# Enable MOTD banner in sshd
|
|
sed -i -e "s/^\s*PrintMotd no/PrintMotd yes/g" /etc/ssh/sshd_config
|
|
|
|
# Add note regarding local repos creation to MOTD
|
|
cat >> /etc/motd << EOF
|
|
|
|
All environments use online repositories by default.
|
|
Use the following commands to create local repositories
|
|
on master node and change default repository settings:
|
|
|
|
* CentOS: fuel-mirror (see --help for options)
|
|
* Ubuntu: fuel-mirror (see --help for options)
|
|
|
|
Please refer to the following guide for more information:
|
|
https://docs.mirantis.com/openstack/fuel/fuel-7.0/reference-architecture.html#fuel-rep-mirror
|
|
|
|
EOF
|
|
|
|
# Install bootstrap_admin_node.sh and enabling it
|
|
install -m 0777 -D ${SOURCE}/bootstrap_admin_node.sh /usr/local/sbin/bootstrap_admin_node.sh
|
|
echo "ENABLED=1" > /etc/sysconfig/bootstrap_admin_node
|
|
|
|
# Copying version.yaml file. It contains COMMIT_SHA of last commit.
|
|
RELEASE=$(awk '/release/{gsub(/"/, "");print $2}' ${SOURCE}/version.yaml)
|
|
mkdir -p /etc/nailgun /etc/fuel/${RELEASE} /etc/fuel/release_versions
|
|
cp ${SOURCE}/version.yaml /etc/nailgun/version.yaml
|
|
cp ${SOURCE}/version.yaml /etc/fuel/${RELEASE}/version.yaml
|
|
ln -s /etc/fuel/${RELEASE}/version.yaml /etc/fuel/version.yaml
|
|
cp ${SOURCE}/version.yaml /etc/fuel/release_versions/`cat ${SOURCE}/openstack_version`.yaml
|
|
|
|
# Generete Fuel UUID
|
|
uuidgen > /etc/fuel/fuel-uuid
|
|
|
|
# Prepare bootstrap_admin_node config
|
|
cat > /etc/fuel/bootstrap_admin_node.conf << EOF
|
|
#Set to yes to run Fuel Setup
|
|
#Set to no to accept default settings
|
|
ADMIN_INTERFACE=${adminif}
|
|
showmenu=${showmenu:-no}
|
|
wait_for_external_config=${wait_for_external_config:-no}
|
|
EOF
|
|
|
|
# Prepare custom /etc/issue logon banner and script for changing IP in it
|
|
# We can have several interface naming schemes applied and several interface
|
|
# UI will listen on
|
|
ipstr=""
|
|
NL=$'\n'
|
|
for ip in `ip -o -4 a | grep -e "e[nt][hopsx].*" | awk '{print \$4 }' | cut -d/ -f1`; do
|
|
ipstr="${ipstr}https://${ip}:8443${NL}"
|
|
done
|
|
cat > /etc/issue <<EOF
|
|
#########################################
|
|
# Welcome to the Fuel server #
|
|
#########################################
|
|
Server is running on \m platform
|
|
|
|
Fuel UI is available on:
|
|
$ipstr
|
|
Default administrator login: root
|
|
Default administrator password: r00tme
|
|
|
|
Default Fuel UI login: admin
|
|
Default Fuel UI password: admin
|
|
|
|
Please change root password on first login.
|
|
|
|
EOF
|
|
|
|
# Unmounting source
|
|
umount -f ${SOURCE}
|
|
rm -rf ${SOURCE}
|
|
|
|
umount -f ${FS} || true
|
|
rm -rf ${FS}
|
|
|
|
echo "tos orphan 7" >> /etc/ntp.conf
|
|
|
|
# Disabling splash
|
|
sed -i --follow-symlinks -e '/^\slinux16/ s/rhgb/debug/' /boot/grub2/grub.cfg
|
|
|
|
# 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 | fgrep -q "virtualbox") && echo "blacklist i2c_piix4" > /etc/modprobe.d/blacklist-i2c-piix4.conf
|
|
|
|
# Blacklist intel_rapl module for VirtualBox so it does not create kernel errors
|
|
(virt-what | fgrep -q "virtualbox") && echo "blacklist intel_rapl" > /etc/modprobe.d/blacklist-intel-rapl.conf
|
|
|
|
# Disable sshd until after Fuel Setup if not running on VirtualBox
|
|
# TODO(mattymo): Remove VBox exception after LP#1487047 is fixed
|
|
(virt-what | fgrep -q "virtualbox") || systemctl disable sshd
|
|
|
|
%end
|
|
|
|
|
|
|
|
|
|
|
|
%post --log=/root/anaconda-post-configure-autologon.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
# Enable once root autologin for initial setup
|
|
mkdir -p /etc/systemd/system/getty@tty1.service.d/
|
|
cat > /etc/systemd/system/getty@tty1.service.d/autologin.conf << 'EOF'
|
|
[Service]
|
|
ExecStart=
|
|
ExecStart=-/sbin/agetty --autologin root --noclear %I 115200 linux
|
|
EOF
|
|
|
|
# Exec bootstrap_admin_node.sh if autologin enabled
|
|
cat >> /root/.bashrc << 'EOF'
|
|
if [[ "$(tty)" == "/dev/tty1" && -f /etc/systemd/system/getty@tty1.service.d/autologin.conf ]]; then
|
|
rm -Rf "/etc/systemd/system/getty@tty1.service.d"
|
|
/bin/systemctl daemon-reload
|
|
if [ -x /usr/local/sbin/bootstrap_admin_node.sh ]; then
|
|
exec /usr/local/sbin/bootstrap_admin_node.sh
|
|
fi
|
|
fi
|
|
EOF
|
|
%end
|
|
|
|
|
|
%post --nochroot --log=/mnt/sysimage/root/anaconda-post-interface-settings.log
|
|
#!/bin/bash
|
|
set -x
|
|
|
|
source "/mnt/sysimage/root/anaconda.cmdline.vars"
|
|
|
|
if [[ ! -z $adminif ]]; then
|
|
rm -f /mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-${ifname%%:*}
|
|
sed "s/${ifname%%:*}/${adminif}/g" \
|
|
/etc/sysconfig/network-scripts/ifcfg-${ifname%%:*} > \
|
|
/mnt/sysimage/etc/sysconfig/network-scripts/ifcfg-${adminif}
|
|
fi
|
|
%end
|