add first version of install script

This commit is contained in:
Maximilian Keßler 2022-07-25 14:23:03 +02:00
commit a839d0d13f

133
installer/install-arch Executable file
View file

@ -0,0 +1,133 @@
#!/bin/bash
# WARNING: this script will destroy data on the selected disk.
# This script can be run by executing the following:
# curl -sL https://git.io/vAoV8 | bash
set -uo pipefail
trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR
REPO_URL="https:mkessler-arch.maximilian-kessler.de"
MIRRORLIST_URL="https://archlinux.org/mirrorlist/?country=DE&protocol=https&use_mirror_status=on"
pacman -Sy --noconfirm pacman-contrib dialog
echo "Updating mirror list"
curl -s "$MIRRORLIST_URL" | \
sed -e 's/^#Server/Server/' -e '/^#/d' | \
rankmirrors -n 5 - > /etc/pacman.d/mirrorlist
### Get infomation from user ###
hostname=$(dialog --stdout --inputbox "Enter hostname" 0 0) || exit 1
clear
: ${hostname:?"hostname cannot be empty"}
user=$(dialog --stdout --inputbox "Enter username" 0 0) || exit 1
clear
: ${user:?"user cannot be empty"}
password=$(dialog --stdout --passwordbox "Enter disk encryption password" 0 0) || exit 1
clear
: ${password:?"password cannot be empty"}
password2=$(dialog --stdout --passwordbox "Enter disk encryption password again" 0 0) || exit 1
clear
[[ "$password" == "$password2" ]] || ( echo "Passwords did not match"; exit 1; )
devicelist=$(lsblk -dplnx size -o name,size | grep -Ev "boot|rpmb|loop" | tac)
device=$(dialog --stdout --menu "Select installation disk" 0 0 0 ${devicelist}) || exit 1
clear
# set up all further variables
cryptlvm="cryptlvm"
vlgrp="vlgrp"
key_fingerprint="B419CDA93D7544F8214B3216A23D90C2433DAFBC"
mapped_device="/dev/mapper/${cryptlvm}"
part_boot="${device}p1"
part_luks="${device}p2"
part_swap="/dev/${vlgrp}/swap"
part_root="/dev/${vlgrp}/root"
part_home="/dev/${vlgrp}/home"
### Set up logging ###
exec 1> >(tee "stdout.log")
exec 2> >(tee "stderr.log")
timedatectl set-ntp true
### Setup the disk and partitions ###
swap_size=$(free --mebi | awk '/Mem:/ {print $2}')
# creates two partitions: one boot partition and another partition, filling the rest of space
echo "Creating partitions on ${device}..."
fdisk "${device}" <<EOF
g
n
+256M
t
EFI System
n
w
EOF
wipefs "${part_boot}"
wipefs "${part_luks}"
echo "Setting up luks on ${part_luks}"
echo "${password}" | cryptsetup luksFormat -q "${part_luks}"
echo "${password}" | cryptsetup open "${part_luks}"
pvcreate "${mapped_device}"
vgcreate "${vlgrp}" "${mapped_device}"
lvcreate -L "{$swap_size}" "${vlgrp}" -n swap
lvcreate -L "{$root_size}" "${vlgrp}" -n root
lvcreate -l '99%FREE' "${vlgrp}" -n home
mkfs.fat -F32 "${part_boot}"
mkfs.ext4 "${part_root}"
mkfs.ext4 "${part_home}"
mkswap "${part_swap}"
mount "${part_root}" /mnt
mount "${part_home}" /mnt/home --mkdir
mount "${part_boot}" /mnt/boot --mkdir
swapon "${part_swap}"
### Install and configure the basic system ###
cat >>/etc/pacman.conf <<EOF
[mkessler-arch]
Server = $REPO_URL
EOF
### Receive and lsign signing key of custom repo
pacman-key --recv-keys keyid "${key_fingerprint}"
pacman-key --lsign-key "${key_fingerprint}"
pacstrap /mnt mkessler-desktop
genfstab -U /mnt >> /mnt/etc/fstab
echo "${hostname}" > /mnt/etc/hostname
### Set up custom repo on installed system as well
cat >>/mnt/etc/pacman.conf <<EOF
[mkessler-arch]
Server = $REPO_URL
EOF
arch-chroot /mnt pacman-key --recv-keys keyid "${key_fingerprint}"
arch-chroot /mnt pacman-key --lsign-key "${key_fingerprint}"
arch-chroot /mnt bootctl install
arch-chroot /mnt useradd --create-home --user-group --shell /usr/bin/zsh --groups wheel,uucp,video,audio,storage,games,input "$user"
arch-chroot /mnt chsh -s /usr/bin/zsh
echo "$user:$password" | chpasswd --root /mnt
echo "root:$password" | chpasswd --root /mnt