#!/bin/bash # SPDX-License-Identifier: GPL-3.0-or-later # created by Tobias Powalowski <tpowa@archlinux.org> . /usr/lib/archboot/common.sh . /usr/lib/archboot/installer/common.sh echo "Automatic Archboot - Arch Linux Installation:" echo "Logging is done on ${_LOG}..." echo "10 seconds to stop the process with CTRL-C now..." sleep 10 ### localize echo "Localization..." echo "LANG=de_DE.UTF-8" > /etc/locale.conf echo LC_COLLATE=C >> /etc/locale.conf localectl set-locale "de_DE.UTF-8" &>"${_NO_LOG}" sd '(^[a-z])' '#$1' /etc/locale.gen sd "^#de_DE.UTF-8" "de_DE.UTF-8" /etc/locale.gen locale-gen &>"${_NO_LOG}" echo KEYMAP="de-latin1-nodeadkeys" > /etc/vconsole.conf echo FONT="ter-v16n" >> /etc/vconsole.conf systemctl restart systemd-vconsole-setup export LANG="de_DE.UTF-8" : > /.localize ### network profile echo "Network..." echo "#/etc/systemd/network/enp0s1-ethernet.network generated by Archboot setup" > "/etc/systemd/network/enp0s1-ethernet.network" echo "[Match]" >> "/etc/systemd/network/enp0s1-ethernet.network" echo "Name=enp0s1" >> "/etc/systemd/network/enp0s1-ethernet.network" echo "" >> "/etc/systemd/network/enp0s1-ethernet.network" echo "[Network]" >> "/etc/systemd/network/enp0s1-ethernet.network" echo "MulticastDNS=yes" >> "/etc/systemd/network/enp0s1-ethernet.network" echo "DHCP=yes" >> "/etc/systemd/network/enp0s1-ethernet.network" unset "http_proxy" unset "https_proxy" unset "ftp_proxy" unset "rsync_proxy" unset "HTTP_PROXY" unset "HTTPS_PROXY" unset "FTP_PROXY" unset "RSYNC_PROXY" rm -f /etc/systemd/network/10-wired-auto-dhcp.network systemctl restart systemd-networkd systemctl restart systemd-resolved while true; do if getent hosts www.google.com &>"${_LOG}"; then break else sleep 1 fi done : > /.network ### clock echo "Clock..." timedatectl set-timezone "Europe/Berlin" echo 0.0 0 0.0 > /etc/adjtime echo 0 >> /etc/adjtime echo UTC >> /etc/adjtime timedatectl set-local-rtc 0 systemctl restart systemd-timesyncd timedatectl set-ntp 1 : > /.clock ### pacman mirror echo "Pacman Server..." sd '^Server' '#Server' "/etc/pacman.d/mirrorlist" echo 'Server = https://mirror.selfnet.de/archlinux/$repo/os/$arch' >> "/etc/pacman.d/mirrorlist" ### pacman keyring echo "Pacman keyring..." _pacman_keyring pacman -Sy --noconfirm --noprogressbar archlinux-keyring &>"${_LOG}" : > /.pacsetup ### quicksetup : > /tmp/.device-names : > /tmp/.fstab wipefs -a -f "/dev/vdb" &>"${_NO_LOG}" dd if=/dev/zero of="/dev/vdb" bs=1M count=10 &>"${_NO_LOG}" sync ### partition echo "Partitioning /dev/vdb..." sfdisk "/dev/vdb" << EOF &>"${_LOG}" label: gpt label-id: E4E29768-0CE2-49A3-BB15-F6EFA15CFCF7 device: /dev/vdb unit: sectors first-lba: 2048 last-lba: 8388574 sector-size: 512 /dev/vdb1 : start= 2048, size= 4096, type=21686148-6449-6E6F-744E-656564454649, uuid=D9CFAA50-9824-46AB-B206-719B7B6F3E06, name="BIOS_GRUB" /dev/vdb2 : start= 6144, size= 2097152, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=27C63A33-AF19-44FC-8D00-9189D2A787A0, name="ESP" /dev/vdb3 : start= 2103296, size= 1048576, type=BC13C2FF-59E6-4262-A352-B275FD6F7172, uuid=CBD1E4D2-5750-48ED-AB8F-8B68C61DE67D, name="XBOOTLDR" /dev/vdb4 : start= 3151872, size= 524288, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=981191FF-9C0F-4305-B693-B2C42B418AE7, name="SWAP" /dev/vdb5 : start= 3676160, size= 4710400, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=51FE15D6-8085-4810-968A-5229C91F58F6, name="ARCH_LINUX_ROOT" EOF ### quicksetup mountpoints udevadm settle echo "Creating btrfs on /dev/vdb5, mounting to /mnt/install/..." mkfs.btrfs -f -L "ARCH_ROOT" /dev/vdb5 &>"${_LOG}" btrfs device scan &>"${_NO_LOG}" mkdir -p "/tmp/btrfsmp.DyH3" mount "/dev/vdb5" "/tmp/btrfsmp.DyH3" btrfs subvolume create "/tmp/btrfsmp.DyH3"/"root" &>"${_LOG}" umount "/tmp/btrfsmp.DyH3" rm -r "/tmp/btrfsmp.DyH3" btrfs device scan &>"${_NO_LOG}" mkdir -p "/mnt/install""/" mount -t "btrfs" -o "subvol=root,compress=zstd" "/dev/vdb5" "/mnt/install""/" &>"${_LOG}" btrfs balance start --full-balance "/mnt/install""/" &>"${_LOG}" echo "# DEVICE DETAILS: /dev/vdb5 PARTUUID=51fe15d6-8085-4810-968a-5229c91f58f6 PARTLABEL=ARCH_LINUX_ROOT UUID=$(lsblk -rpno UUID /dev/vdb5) LABEL=ARCH_ROOT" >> /tmp/.device-names echo -n "PARTUUID=51fe15d6-8085-4810-968a-5229c91f58f6 / btrfs defaults,subvol=root,compress=zstd 0 " >>/tmp/.fstab echo 0 >>/tmp/.fstab btrfs subvolume set-default "${_DESTDIR}"/"/" echo "Creating vfat on /dev/vdb2, mounting to /mnt/install/efi..." mkfs.vfat -F32 -n "ESP" /dev/vdb2 &>"${_LOG}" btrfs device scan &>"${_NO_LOG}" mkdir -p "/mnt/install""/efi" mount -t "vfat" -o "" "/dev/vdb2" "/mnt/install""/efi" &>"${_LOG}" mkdir "/mnt/install/efi/EFI" echo "# DEVICE DETAILS: /dev/vdb2 PARTUUID=27c63a33-af19-44fc-8d00-9189d2a787a0 PARTLABEL=ESP UUID=$(lsblk -rpno UUID /dev/vdb2) LABEL=ESP" >> /tmp/.device-names echo -n "PARTUUID=27c63a33-af19-44fc-8d00-9189d2a787a0 /efi vfat defaults 0 " >>/tmp/.fstab echo 1 >>/tmp/.fstab echo "Creating vfat on /dev/vdb3, mounting to /mnt/install/boot..." mkfs.vfat -F32 -n "XBOOTLDR" /dev/vdb3 &>"${_LOG}" btrfs device scan &>"${_NO_LOG}" mkdir -p "/mnt/install""/boot" mount -t "vfat" -o "" "/dev/vdb3" "/mnt/install""/boot" &>"${_LOG}" echo "# DEVICE DETAILS: /dev/vdb3 PARTUUID=cbd1e4d2-5750-48ed-ab8f-8b68c61de67d PARTLABEL=XBOOTLDR UUID=$(lsblk -rpno UUID /dev/vdb3) LABEL=XBOOTLDR" >> /tmp/.device-names echo -n "PARTUUID=cbd1e4d2-5750-48ed-ab8f-8b68c61de67d /boot vfat defaults 0 " >>/tmp/.fstab echo 1 >>/tmp/.fstab echo "Creating and activating swapspace on /dev/vdb4..." mkswap -L "SWAP" "/dev/vdb4" &>"${_LOG}" swapon "/dev/vdb4" &>"${_LOG}" echo "# DEVICE DETAILS: /dev/vdb4 PARTUUID=981191ff-9c0f-4305-b693-b2c42b418ae7 PARTLABEL=SWAP UUID=$(lsblk -rpno UUID /dev/vdb4) LABEL=SWAP" >> /tmp/.device-names ### pacman installation _chroot_mount mkdir -p "${_DESTDIR}/var/lib/pacman" echo "Installing base linux polkit btrfs-progs dosfstools terminus-font linux-firmware..." pacman --root /mnt/install --cachedir=/mnt/install/var/cache/pacman/pkg --noconfirm -Sy base linux polkit btrfs-progs dosfstools terminus-font linux-firmware &>"${_LOG}" sync _chroot_umount ### autoconfiguration _chroot_mount echo "Enable timezone setting on installed system..." cp -a /etc/localtime "${_DESTDIR}"/etc/localtime echo "Enable clock setting on installed system..." cp /etc/adjtime "${_DESTDIR}"/etc/adjtime echo "Enable network and proxy settings on installed system..." cp /etc/systemd/network/* "${_DESTDIR}"/etc/systemd/network/ &>"${_NO_LOG}" chroot "${_DESTDIR}" systemctl enable systemd-networkd &>"${_NO_LOG}" mkdir -p "${_DESTDIR}/etc/systemd/network.conf.d" cp /etc/systemd/network.conf.d/ipv6-privacy-extensions.conf "${_DESTDIR}"/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf echo "Create new fstab on installed system..." sort /tmp/.device-names >>"${_DESTDIR}"/etc/fstab sd '^[^#]*' '' "${_DESTDIR}"/etc/fstab sort /tmp/.fstab >>"${_DESTDIR}"/etc/fstab echo "Enable performance ioscheduler settings on installed system..." cp /etc/udev/rules.d/60-ioschedulers.rules "${_DESTDIR}"/etc/udev/rules.d/60-ioschedulers.rules echo "Enable sysctl swap settings on installed system..." cp /etc/sysctl.d/99-sysctl.conf "${_DESTDIR}"/etc/sysctl.d/99-sysctl.conf echo "Enable pacman's GPG keyring files on installed system..." cp -ar /etc/pacman.d/gnupg "${_DESTDIR}"/etc/pacman.d &>"${_NO_LOG}" echo "Enable pacman mirror on installed system..." cat << EOF > /tmp/inst-mirrorlist # Mirror used during installation Server = https://mirror.selfnet.de/archlinux/$repo/os/$arch EOF cat "${_DESTDIR}"/etc/pacman.d/mirrorlist >> /tmp/inst-mirrorlist mv /tmp/inst-mirrorlist "${_DESTDIR}/etc/pacman.d/mirrorlist" echo "Setting keymap and font on installed system..." cp /etc/vconsole.conf "${_DESTDIR}"/etc/vconsole.conf echo "Set default hostname on installed system..." echo "myhostname" > "${_DESTDIR}"/etc/hostname echo "Set default locale on installed system..." cp /etc/locale.conf "${_DESTDIR}"/etc/locale.conf echo "Enable glibc locales based on locale.conf on installed system..." sd "^#de_DE" "de_DE" "${_DESTDIR}"/etc/locale.gen echo "Enable windowkeys in console on installed system..." cp "/etc/systemd/system/windowkeys.service" "${_DESTDIR}/etc/systemd/system/windowkeys.service" chroot "${_DESTDIR}" systemctl enable windowkeys &>"${_NO_LOG}" echo "Setup bash with custom options on installed system..." cp "${_DESTDIR}"/etc/skel/.bash* "${_DESTDIR}"/root/ echo ". /etc/profile.d/custom-bash-options.sh" >> "${_DESTDIR}/etc/skel/.bashrc" echo ". /etc/profile.d/custom-bash-options.sh" >> "${_DESTDIR}/root/.bashrc" cp /etc/profile.d/custom-bash-options.sh "${_DESTDIR}"/etc/profile.d/ _chroot_umount echo "Rebuilding glibc locales on installed system..." systemd-nspawn -q -D /mnt/install locale-gen &>"${_NO_LOG}" ### set root password echo "123" > /tmp/.password echo "123" >> /tmp/.password passwd -R "${_DESTDIR}" "root" < /tmp/.password &>"${_NO_LOG}" echo "New password set for root." rm /tmp/.password ### pacman installation _chroot_mount echo "Installing nano..." pacman --root /mnt/install --cachedir=/mnt/install/var/cache/pacman/pkg --noconfirm -Sy nano &>"${_LOG}" sync _chroot_umount ### hwdetect echo "Preconfiguring mkinitcpio settings on installed system..." sd "^MODULES=.*" "MODULES=(virtio_blk btrfs vfat crc32c)" "${_DESTDIR}"/etc/mkinitcpio.conf sd "^HOOKS=.*" "HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems fsck)" "${_DESTDIR}"/etc/mkinitcpio.conf ### mkinitcpio disable fallback sd " 'fallback'" '' "${_DESTDIR}"/etc/mkinitcpio.d/*.preset rm -f "${_DESTDIR}/boot/initramfs-linux-fallback.img" ### mkinitcpio _chroot_mount echo "Running mkinitcpio on installed system..." chroot "${_DESTDIR}" mkinitcpio -p "linux" &>"${_LOG}" _chroot_umount ### pacman installation _chroot_mount echo "Installing amd-ucode..." pacman --root /mnt/install --cachedir=/mnt/install/var/cache/pacman/pkg --noconfirm -Sy amd-ucode &>"${_LOG}" sync _chroot_umount ### pacman installation _chroot_mount echo "Installing efivar efibootmgr..." pacman --root /mnt/install --cachedir=/mnt/install/var/cache/pacman/pkg --noconfirm -Sy efivar efibootmgr &>"${_LOG}" sync _chroot_umount ### systemd-boot echo "Setting up SYSTEMD-BOOT now..." mkdir -p "${_DESTDIR}/boot/loader/entries" mkdir -p "${_DESTDIR}/efi/loader" _chroot_mount chroot "${_DESTDIR}" bootctl install &>"${_LOG}" _chroot_umount ### /mnt/install/boot/loader/entries/archlinux-core-main.conf file : > "/mnt/install/boot/loader/entries/archlinux-core-main.conf" echo 'title Arch Linux' >> /mnt/install/boot/loader/entries/archlinux-core-main.conf echo 'linux /vmlinuz-linux' >> /mnt/install/boot/loader/entries/archlinux-core-main.conf echo 'initrd /initramfs-linux.img' >> /mnt/install/boot/loader/entries/archlinux-core-main.conf echo 'options root=PARTUUID=51fe15d6-8085-4810-968a-5229c91f58f6 rootfstype=btrfs rw rootflags=rw,relatime,compress=zstd:3,discard=async,space_cache=v2,subvolid=256,subvol=/root ' >> /mnt/install/boot/loader/entries/archlinux-core-main.conf echo '' >> /mnt/install/boot/loader/entries/archlinux-core-main.conf ### /mnt/install/efi/loader/loader.conf file : > "/mnt/install/efi/loader/loader.conf" echo 'timeout 5' >> /mnt/install/efi/loader/loader.conf echo 'default archlinux-core-main' >> /mnt/install/efi/loader/loader.conf echo '' >> /mnt/install/efi/loader/loader.conf ### pacman hook mkdir -p "${_DESTDIR}"/etc/pacman.d/hooks ### /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook file : > "/mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook" echo '[Trigger]' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'Type = Package' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'Operation = Upgrade' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'Target = systemd' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo '' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo '[Action]' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'Description = Gracefully upgrading systemd-boot...' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'When = PostTransaction' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo 'Exec = /usr/bin/systemctl restart systemd-boot-update.service' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook echo '' >> /mnt/install/etc/pacman.d/hooks/999-systemd-bootd.hook