#!/bin/sh INSTALL_DRIVE=/dev/sda PARTITION_BOOT=1 PARTITION_SWAP=2 PARTITION_ROOT=3 LABEL_BOOT=BOOT LABEL_SWAP=SWAP LABEL_ROOT=ROOT MOUNT_PATH=/mnt GIT_REPO=git://andreasbaumann.dyndns.org/cfenginetests.git echo "Installing minimalistic base system.." sgdisk -Z ${INSTALL_DRIVE} sgdisk -a 2048 -o ${INSTALL_DRIVE} sgdisk -n ${PARTITION_BOOT}:0:+100M ${INSTALL_DRIVE} sgdisk -t ${PARTITION_BOOT}:ef02 ${INSTALL_DRIVE} sgdisk -c ${PARTITION_BOOT}:"${LABEL_BOOT}" ${INSTALL_DRIVE} sgdisk -n ${PARTITION_SWAP}:0:+900M ${INSTALL_DRIVE} sgdisk -t ${PARTITION_SWAP}:8200 ${INSTALL_DRIVE} sgdisk -c ${PARTITION_SWAP}:"${LABEL_SWAP}" ${INSTALL_DRIVE} sgdisk -n ${PARTITION_ROOT}:0:0 ${INSTALL_DRIVE} sgdisk -t ${PARTITION_ROOT}:8300 ${INSTALL_DRIVE} sgdisk -c ${PARTITION_ROOT}:"${LABEL_ROOT}" ${INSTALL_DRIVE} sgdisk -G ${INSTALL_DRIVE} mkswap ${INSTALL_DRIVE}${PARTITION_SWAP} swapon ${INSTALL_DRIVE}${PARTITION_SWAP} mkfs.ext4 ${INSTALL_DRIVE}${PARTITION_ROOT} mkdir -p ${MOUNT_PATH} mount ${INSTALL_DRIVE}${PARTITION_ROOT} ${MOUNT_PATH} export http_proxy=http://192.168.1.12:3128 export no_proxy=localhost,10.0.2.2 # use our local cache sed -i '/\[core\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf sed -i '/\[extra\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf sed -i '/\[community\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' /etc/pacman.conf # switch off signature for now sed -i 's/^SigLevel.*/SigLevel = Never/g' /etc/pacman.conf pacstrap ${MOUNT_PATH} filesystem grep findutils coreutils glibc bash pacman mkinitcpio kernel26 dhcpcd # use our local cache in installed pacman sed -i '/\[core\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf sed -i '/\[extra\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf sed -i '/\[community\]/aServer = http://10.0.2.2:8080/$repo/os/$arch' ${MOUNT_PATH}/etc/pacman.conf # add our local packages into a separate repository printf "\n[aba]\nServer = http://10.0.2.2:8080/\044repo/os/\044arch\n" >> ${MOUNT_PATH}/etc/pacman.conf # synchronize package databases for installed pacman arch-chroot ${MOUNT_PATH} pacman -Sy # switch off signature for now in installed pacman sed -i 's/^SigLevel.*/SigLevel = Never/g' ${MOUNT_PATH}/etc/pacman.conf arch-chroot ${MOUNT_PATH} pacman --noconfirm -S grub-bios arch-chroot ${MOUNT_PATH} grub-install --target=i386-pc --recheck ${INSTALL_DRIVE} cp ${MOUNT_PATH}/usr/share/locale/en@quot/LC_MESSAGES/grub.mo ${MOUNT_PATH}/boot/grub/locale/en.mo # disable quiet mode, set text mode instead of graphical mode # also ban cirrus KVM # set correct path of systemd binary (symlink /sbin/init has gone) sed -i 's/GRUB_CMDLINE_LINUX_DEFAULT="quiet"/GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=cirrus init=\/usr\/lib\/systemd\/systemd"/g' ${MOUNT_PATH}/etc/default/grub sed -i 's/GRUB_GFXMODE=auto/GRUB_GFXMODE=text/g' ${MOUNT_PATH}/etc/default/grub sed -i 's/#GRUB_TERMINAL_OUTPUT=console/GRUB_TERMINAL_OUTPUT=console/g' ${MOUNT_PATH}/etc/default/grub arch-chroot ${MOUNT_PATH} grub-mkconfig -o /boot/grub/grub.cfg genfstab -p ${MOUNT_PATH} >> ${MOUNT_PATH}/etc/fstab sed -i 's/^#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/g' ${MOUNT_PATH}/etc/locale.gen arch-chroot ${MOUNT_PATH} locale-gen echo LANG=en_US.UTF-8 > ${MOUNT_PATH}/etc/locale.conf ln -s /usr/share/zoneinfo/Europe/Zurich ${MOUNT_PATH}/etc/localtime arch-chroot ${MOUNT_PATH} hwclock --systohc --utc echo "archiso" > ${MOUNT_PATH}/etc/hostname arch-chroot ${MOUNT_PATH} systemctl enable dhcpcd@ens3.service arch-chroot ${MOUNT_PATH} sh -c "echo 'root:xx' | chpasswd" # synchronized time is a requirement, install and configure ntp # we use a standard NTP server, later we can change that via cfengine arch-chroot ${MOUNT_PATH} pacman --noconfirm -S ntp arch-chroot ${MOUNT_PATH} ntpdate 0.pool.ntp.org arch-chroot ${MOUNT_PATH} systemctl enable ntpd.service # monitord needs netstat arch-chroot ${MOUNT_PATH} pacman --noconfirm -S net-tools # we use 'git' to manage our promises arch-chroot ${MOUNT_PATH} pacman --noconfirm -S git-core arch-chroot ${MOUNT_PATH} pacman --noconfirm -S cfengine # install rules for the machine from git arch-chroot ${MOUNT_PATH} git clone ${GIT_REPO} /srv/cfengine/masterfiles # create machine keys arch-chroot ${MOUNT_PATH} cf-key # enable cfengine arch-chroot ${MOUNT_PATH} systemctl enable cf-execd.service arch-chroot ${MOUNT_PATH} systemctl enable cf-monitord.service arch-chroot ${MOUNT_PATH} systemctl enable cf-serverd.service echo "Done." systemctl poweroff