#!/usr/bin/env bash DISK='/dev/sda' FQDN='vagrant-arch.vagrantup.com' KEYMAP='us' LANGUAGE='en_US.UTF-8' PASSWORD=$(/usr/bin/openssl passwd -crypt 'vagrant') TIMEZONE='UTC' CONFIG_SCRIPT='/usr/local/bin/arch-config.sh' ROOT_PARTITION="${DISK}1" TARGET_DIR='/mnt' echo "==> Clearing partition table on ${DISK}" /usr/bin/sgdisk --zap ${DISK} echo "==> Destroying magic strings and signatures on ${DISK}" /usr/bin/dd if=/dev/zero of=${DISK} bs=512 count=2048 /usr/bin/wipefs --all ${DISK} echo "==> Creating /root partition on ${DISK}" /usr/bin/sgdisk --new=1:0:0 ${DISK} echo "==> Setting ${DISK} bootable" /usr/bin/sgdisk ${DISK} --attributes=1:set:2 echo '==> Creating /root filesystem (ext4)' /usr/bin/mkfs.ext4 -O ^64bit -F -m 0 -q -L root ${ROOT_PARTITION} echo "==> Mounting ${ROOT_PARTITION} to ${TARGET_DIR}" /usr/bin/mount -o noatime,errors=remount-ro ${ROOT_PARTITION} ${TARGET_DIR} echo '==> Bootstrapping the base installation' /usr/bin/pacstrap ${TARGET_DIR} base base-devel /usr/bin/arch-chroot ${TARGET_DIR} pacman -S --noconfirm gptfdisk openssh syslinux /usr/bin/arch-chroot ${TARGET_DIR} syslinux-install_update -i -a -m /usr/bin/sed -i 's/sda3/sda1/' "${TARGET_DIR}/boot/syslinux/syslinux.cfg" /usr/bin/sed -i 's/TIMEOUT 50/TIMEOUT 10/' "${TARGET_DIR}/boot/syslinux/syslinux.cfg" echo '==> Generating the filesystem table' /usr/bin/genfstab -p ${TARGET_DIR} >> "${TARGET_DIR}/etc/fstab" echo '==> Generating the system configuration script' /usr/bin/install --mode=0755 /dev/null "${TARGET_DIR}${CONFIG_SCRIPT}" cat <<-EOF > "${TARGET_DIR}${CONFIG_SCRIPT}" echo '${FQDN}' > /etc/hostname /usr/bin/ln -s /usr/share/zoneinfo/${TIMEZONE} /etc/localtime echo 'KEYMAP=${KEYMAP}' > /etc/vconsole.conf /usr/bin/sed -i 's/#${LANGUAGE}/${LANGUAGE}/' /etc/locale.gen /usr/bin/locale-gen /usr/bin/mkinitcpio -p linux /usr/bin/usermod --password ${PASSWORD} root # https://wiki.archlinux.org/index.php/Network_Configuration#Device_names /usr/bin/ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules /usr/bin/ln -s '/usr/lib/systemd/system/dhcpcd@.service' '/etc/systemd/system/multi-user.target.wants/dhcpcd@eth0.service' /usr/bin/sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config /usr/bin/systemctl enable sshd.service # Vagrant-specific configuration /usr/bin/useradd --password ${PASSWORD} --comment 'Vagrant User' --create-home --user-group vagrant echo 'Defaults env_keep += "SSH_AUTH_SOCK"' > /etc/sudoers.d/10_vagrant echo 'vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/10_vagrant /usr/bin/chmod 0440 /etc/sudoers.d/10_vagrant /usr/bin/install --directory --owner=vagrant --group=vagrant --mode=0700 /home/vagrant/.ssh /usr/bin/curl --output /home/vagrant/.ssh/authorized_keys --location https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub /usr/bin/chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys /usr/bin/chmod 0600 /home/vagrant/.ssh/authorized_keys # clean up /usr/bin/pacman -Rcns --noconfirm gptfdisk EOF echo '==> Entering chroot and configuring system' /usr/bin/arch-chroot ${TARGET_DIR} ${CONFIG_SCRIPT} rm "${TARGET_DIR}${CONFIG_SCRIPT}" # http://comments.gmane.org/gmane.linux.arch.general/48739 echo '==> Adding workaround for shutdown race condition' /usr/bin/install --mode=0644 /root/poweroff.timer "${TARGET_DIR}/etc/systemd/system/poweroff.timer" echo '==> Installation complete!' /usr/bin/sleep 3 /usr/bin/umount ${TARGET_DIR} /usr/bin/systemctl reboot