commit a839d0d13f2436d1b0da896ad970f91cf5d24509 Author: Maximilian Keßler Date: Mon Jul 25 14:23:03 2022 +0200 add first version of install script diff --git a/installer/install-arch b/installer/install-arch new file mode 100755 index 0000000..84f2584 --- /dev/null +++ b/installer/install-arch @@ -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}" <>/etc/pacman.conf <> /mnt/etc/fstab +echo "${hostname}" > /mnt/etc/hostname + + +### Set up custom repo on installed system as well +cat >>/mnt/etc/pacman.conf <