Created
March 14, 2022 12:56
-
-
Save deccer/a318a7995b406b0e090eb37273effb5e to your computer and use it in GitHub Desktop.
Arch Linux - Base Install Script - UEFI BTRFS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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