mklive/scripts/bootstrap.sh

156 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
source $(dirname $0)/defaults.conf
source ${WORKDIR}/mklive.conf
source $(dirname $0)/functions.sh
set -e
einfo "Bootstraping live system"
BUILD_TIME=$(date +%Y-%m-%dT%H:%M)
CHROOT=${WORKDIR}/chroot
startstage bootstrap
#bootstrap basic system
[ -d $CHROOT ] && einfo "Skipping 'debootstrap' as chrootdir is already present" || debootstrap --components=main,restricted,universe,multiverse --variant=$DIST_VARIANT --arch=$ARCH $DIST_RELEASE $CHROOT $DIST_MIRROR
#prepair chroot
mount -t proc proc $CHROOT/proc/
mount -t sysfs sys $CHROOT/sys/
mount -o bind /dev $CHROOT/dev/
#install locales
if ! checkstage bootstrap_locales; then
einfo " installing locales"
chroot $CHROOT apt -y install locales
echo "de_DE.UTF-8 UTF-8" >> $CHROOT/etc/locale.gen
echo "en_US.UTF-8 UTF-8" >> $CHROOT/etc/locale.gen
chroot $CHROOT locale-gen
endstage bootstrap_locales
fi
#install systemd
checkstage bootstrap_systemd || chroot $CHROOT apt -y install systemd && endstage bootstrap_systemd
#install live-boot
checkstage bootstrap_liveboot || chroot $CHROOT apt-get -y install live-boot && endstage bootstrap_liveboot
DEFAULT_PACKAGES="console-setup language-pack-de"
#install additional packages
if [ -n "${PACKAGES}" ]; then
DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \
LC_ALL=C LANGUAGE=C LANG=C chroot $CHROOT apt-get -y install ${DEFAULT_PACKAGES} ${PACKAGES}
fi
echo "LANG=de_DE.UTF-8" >> $CHROOT/etc/default/locale
if [ "${LIVE_AUTOLOGIN}" == "true" ]; then
einfo "Autologin is enabled"
requiredir "$CHROOT/etc/systemd/system/getty@tty1.service.d/"
cat > "$CHROOT/etc/systemd/system/getty@tty1.service.d/override.conf" << EOF
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin root --noclear %I \$TERM
EOF
fi
#set the rootpw
chpasswd -R $(readlink -f $CHROOT) <<< "root:${LIVE_ROOTPW}"
#change to a full busybox - for tftp support
sed -i -r 's/=.+(\/bin\/busybox)/=\1/' chroot/usr/share/initramfs-tools/hooks/zz-busybox-initramfs
#remove ubuntu ads
for f in 00-header 10-help-text 50-motd-news
do
[ -f ${CHROOT}/etc/update-motd.d/$f ] && rm ${CHROOT}/etc/update-motd.d/$f
done
#(re)install kernel
chroot $CHROOT apt -y -o "APT::Install-Recommends=false" install ${KERNEL_PACKAGE}
#clean chroot
chroot $CHROOT apt autoremove
chroot $CHROOT apt-get clean
umount $CHROOT/proc/
umount $CHROOT/sys/
umount $CHROOT/dev/
if [ -x $CHROOT/usr/sbin/sshd ];then
sed -i -r "s/^[#]?PermitRootLogin .+$/PermitRootLogin ${LIVE_SSH_ROOTLOGIN}/" $CHROOT/etc/ssh/sshd_config
cat > $CHROOT/etc/systemd/system/regenerate_ssh_host_keys.service << EOF
[Unit]
Description=Regenerate SSH host keys
Before=ssh.service
[Service]
Type=oneshot
ExecStartPre=-/bin/sh -c "/bin/rm -f -v /etc/ssh/ssh_host_*_key*"
ExecStart=/usr/bin/ssh-keygen -A -v
ExecStartPost=/bin/systemctl disable regenerate_ssh_host_keys
[Install]
WantedBy=multi-user.target
EOF
SSH_STATUS="on"
[ -e ${CHROOT}/etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service ] || ln -s ../regenerate_ssh_host_keys.service ${CHROOT}/etc/systemd/system/multi-user.target.wants/regenerate_ssh_host_keys.service
else
SSH_STATUS="off"
fi
#final changes
echo "${LIVE_HOSTNAME}" > $CHROOT/etc/hostname
echo "${LIVE_NAME} Build@${BUILD_TIME} \\l" > $CHROOT/etc/issue
echo "${LIVE_NAME} Build@${BUILD_TIME}" > $CHROOT/etc/issue.net
echo "" > $CHROOT/etc/legal
#set a default keyboard layout
cat > ${CHROOT}/etc/default/keyboard << EOF
XKBMODEL="pc105"
XKBLAYOUT="de"
XKBVARIANT="nodeadkeys"
XKBOPTIONS=""
BACKSPACE="guess"
EOF
cat > ${CHROOT}/etc/update-motd.d/01-info << EOF
#!/bin/bash
echo -e "\n===== GENERAL =====\n"
echo " ${LIVE_NAME}"
echo " Buildtime: ${BUILD_TIME}"
echo " Root password: ${LIVE_ROOTPW}"
echo " SSH: ${SSH_STATUS}"
echo ""
echo -e "\n====== NETWORK ======\n"
echo " Interfaces:"
ip -c -br addr | grep -v lo | sed -r 's/^(.*)$/ \1/g'
echo -e "\n Default route: "
ip -c -br route show default | awk '{print " "\$3"\t("\$5")"}'
echo ""
#Diskingo
echo -e "\n====== DISKS ======\n"
lsblk -e 7,11 -o NAME,SIZE,TYPE,FSTYPE,SERIAL,MODEL | sed -r -e 's/^(.*)$/ \1/g' -e 's/([A-Za-z0-9]) /\1 /g'
echo ""
EOF
chmod +x ${CHROOT}/etc/update-motd.d/01-info
einfo "Bootstrap done"
endstage bootstrap