Skip to content

Instantly share code, notes, and snippets.

@deccer
Created March 14, 2022 12:56
Show Gist options
  • Save deccer/a318a7995b406b0e090eb37273effb5e to your computer and use it in GitHub Desktop.
Save deccer/a318a7995b406b0e090eb37273effb5e to your computer and use it in GitHub Desktop.
Arch Linux - Base Install Script - UEFI BTRFS
#!/bin/bash
set -e
set -o pipefail
set -o errtrace
set -o nounset
set -o errexit
KEYMAP='us'
LANG='en_US'
TIMEZONE='Europe/Berlin'
FONT=Lat2-Terminus16
BLOCKDEVICEDISK=/dev/sda
BLOCKDEVICEBOOT=/dev/sda1
BLOCKDEVICESWAP=/dev/sda2
BLOCKDEVICEBTRFS=/dev/sda3
SUBVOLROOT=@
SUBVOLHOME=@home
SUBVOLPKG=@pkg
SUBVOLSNAPSHOTS=@snapshots
EFISIZE=256M
SWAPSIZE=2G
MNT=/mnt
HOSTNAME=archbox
DEFAULTUSER=deccer
(
echo o
echo Y
echo n
echo 1
echo
echo +$EFISIZE
echo ef00
echo n
echo 2
echo
echo +$SWAPSIZE
echo 8200
echo n
echo 3
echo
echo
echo 8300
echo w
echo Y
) | sudo gdisk $BLOCKDEVICEDISK > /dev/null
mkfs.fat -F 32 -n BOOT $BLOCKDEVICEBOOT
mkswap $BLOCKDEVICESWAP
swapon $BLOCKDEVICESWAP
mkfs.btrfs -f -L ROOT $BLOCKDEVICEBTRFS
mount $BLOCKDEVICEBTRFS $MNT
cd $MNT
btrfs sub create $SUBVOLROOT
btrfs sub create $SUBVOLHOME
btrfs sub create $SUBVOLPKG
btrfs sub create $SUBVOLSNAPSHOTS
cd ..
umount $MNT
mount -o noatime,compress=lzo,space_cache,subvol=$SUBVOLROOT $BLOCKDEVICEBTRFS $MNT
mkdir -p $MNT/{boot,home,var/cache/pacman/pkg,.snapshots,btrfs}
mount $BLOCKDEVICEBOOT $MNT/boot
mount -o noatime,compress=lzo,space_cache,subvol=$SUBVOLHOME $BLOCKDEVICEBTRFS $MNT/home
mount -o noatime,compress=lzo,space_cache,subvol=$SUBVOLPKG $BLOCKDEVICEBTRFS $MNT/var/cache/pacman/pkg
mount -o noatime,compress=lzo,space_cache,subvol=$SUBVOLSNAPSHOTS $BLOCKDEVICEBTRFS $MNT/.snapshots
mount -o noatime,compress=lzo,space_cache,subvolid=5 $BLOCKDEVICEBTRFS $MNT/btrfs
pacstrap $MNT base base-devel btrfs-progs dosfstools
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) / btrfs rw,noatime,compress=lzo,space_cache,subvol=$SUBVOLROOT 0 0" > $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBOOT) /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2" >> $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) /home btrfs rw,noatime,compress=lzo,space_cache,subvol=$SUBVOLHOME 0 0" >> $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) /var/cache/pacman/pkg btrfs rw,noatime,compress=lzo,space_cache,subvol=$SUBVOLPKG 0 0" >> $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) /.snapshots btrfs rw,noatime,compress=lzo,space_cache,subvol=$SUBVOLSNAPSHOTS 0 0" >> $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) /btrfs btrfs rw,noatime,compress=lzo,space_cache,subvolid=5,subvol=/ 0 0" >> $MNT/etc/fstab
echo "/dev/disk/by-uuid/$(blkid -s UUID -o value $BLOCKDEVICESWAP) none swap defaults 0 0" >> $MNT/etc/fstab
arch-chroot $MNT ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime
arch-chroot $MNT hwclock --systohc
echo $LANG.UTF-8 UTF-8 > /mnt/etc/locale.gen
arch-chroot $MNT locale-gen
echo LANG=$LANG.UTF-8 >> $MNT/etc/locale.conf
echo KEYMAP=$KEYMAP > $MNT/etc/vconsole.conf
echo FONT=$FONT >> $MNT/etc/vconsole.conf
echo $HOSTNAME >> $MNT/etc/hostname
echo 127.0.0.1 $HOSTNAME.localdomain $HOSTNAME >> $MNT/etc/hosts
arch-chroot $MNT useradd -m -G wheel -s /bin/bash $DEFAULTUSER
echo 'root ALL=(ALL) ALL' > $MNT/etc/sudoers
echo '%wheel ALL=(ALL) ALL' >> $MNT/etc/sudoers
MKINITCPIOCONF=$MNT/etc/mkinitcpio.conf
echo 'MODULES=()' > $MKINITCPIOCONF
echo 'BINARIES=()' >> $MKINITCPIOCONF
echo 'FILES=()' >> $MKINITCPIOCONF
echo 'HOOKS=(base udev autodetect modconf block btrfs filesystems keyboard)' >> $MKINITCPIOCONF
echo 'COMPRESSION=lzma' >> $MKINITCPIOCONF
arch-chroot $MNT mkinitcpio -p linux
LOADERCONF=$MNT/boot/loader/loader.conf
arch-chroot $MNT bootctl --path=/boot install
echo 'default arch' > $LOADERCONF
echo 'timeout 3' >> $LOADERCONF
echo 'editor 0' >> $LOADERCONF
BOOTENTRY=$MNT/boot/loader/entries/arch.conf
echo 'title Arch Linux' > $BOOTENTRY
echo 'linux /vmlinuz-linux' >> $BOOTENTRY
echo 'initrd /initramfs-linux.img' >> $BOOTENTRY
echo "options root=UUID=$(blkid -s UUID -o value $BLOCKDEVICEBTRFS) rootflags=subvol=$SUBVOLROOT rw" >> $BOOTENTRY
arch-chroot $MNT systemctl enable dhcpcd.service
echo 'Installation almost complete. Setting passwords'
echo 'Choose a root password:'
arch-chroot $MNT passwd
echo Choose a password for $DEFAULTUSER:
arch-chroot $MNT passwd $DEFAULTUSER
umount -R $MNT
clear
echo 'Installation finished, please reboot now.'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment