106 lines
2.8 KiB
Bash
106 lines
2.8 KiB
Bash
|
#!/bin/sh
|
||
|
# -*- coding: utf-8 -*-
|
||
|
# A simple installer for Artix Linux
|
||
|
|
||
|
confirm_password() {
|
||
|
stty -echo
|
||
|
until [ "$pass1" = "$pass2" ] && [ "$pass2" ]; do
|
||
|
printf "%s: " "$1" >&2 && read -r pass1 && printf "\n" >&2
|
||
|
printf "confirm %s: " "$1" >&2 && read -r pass2 && printf "\n" >&2
|
||
|
done
|
||
|
stty echo
|
||
|
echo "$pass2"
|
||
|
}
|
||
|
|
||
|
# Load keymap
|
||
|
sudo loadkeys us
|
||
|
|
||
|
# Check boot mode
|
||
|
[ ! -d /sys/firmware/efi ] && printf "Not booted in UEFI mode. Aborting..." && exit 1
|
||
|
|
||
|
# Choose MY_INIT
|
||
|
until [ "$MY_INIT" = "openrc" ] || [ "$MY_INIT" = "dinit" ]; do
|
||
|
printf "Init system (openrc/dinit): " && read -r MY_INIT
|
||
|
[ ! "$MY_INIT" ] && MY_INIT="openrc"
|
||
|
done
|
||
|
|
||
|
# Choose disk
|
||
|
while :; do
|
||
|
sudo fdisk -l
|
||
|
printf "\nDisk to install to (e.g. /dev/sda): " && read -r MY_DISK
|
||
|
[ -b "$MY_DISK" ] && break
|
||
|
done
|
||
|
|
||
|
PART1="$MY_DISK"1
|
||
|
PART2="$MY_DISK"2
|
||
|
PART3="$MY_DISK"3
|
||
|
case "$MY_DISK" in
|
||
|
*"nvme"*)
|
||
|
PART1="$MY_DISK"p1
|
||
|
PART2="$MY_DISK"p2
|
||
|
PART3="$MY_DISK"p3
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
# Swap size
|
||
|
until (echo "$SWAP_SIZE" | grep -Eq "^[0-9]+$") && [ "$SWAP_SIZE" -gt 0 ] && [ "$SWAP_SIZE" -lt 97 ]; do
|
||
|
printf "Size of swap partition in GiB (4): " && read -r SWAP_SIZE
|
||
|
[ ! "$SWAP_SIZE" ] && SWAP_SIZE=4
|
||
|
done
|
||
|
|
||
|
# Choose filesystem
|
||
|
until [ "$MY_FS" = "btrfs" ] || [ "$MY_FS" = "ext4" ]; do
|
||
|
printf "Filesystem (btrfs/ext4): " && read -r MY_FS
|
||
|
[ ! "$MY_FS" ] && MY_FS="btrfs"
|
||
|
done
|
||
|
|
||
|
ROOT_PART=$PART3
|
||
|
[ "$MY_FS" = "ext4" ] && ROOT_PART=$PART2
|
||
|
|
||
|
# Encrypt or not
|
||
|
printf "Encrypt? (y/N): " && read -r ENCRYPTED
|
||
|
[ ! "$ENCRYPTED" ] && ENCRYPTED="n"
|
||
|
|
||
|
MY_ROOT="/dev/mapper/root"
|
||
|
MY_SWAP="/dev/mapper/swap"
|
||
|
if [ "$ENCRYPTED" = "y" ]; then
|
||
|
CRYPTPASS=$(confirm_password "encryption password")
|
||
|
else
|
||
|
MY_ROOT=$PART3
|
||
|
MY_SWAP=$PART2
|
||
|
[ "$MY_FS" = "ext4" ] && MY_ROOT=$PART2
|
||
|
fi
|
||
|
[ "$MY_FS" = "ext4" ] && MY_SWAP="/dev/MyVolGrp/swap"
|
||
|
|
||
|
# Timezone
|
||
|
until [ -f /usr/share/zoneinfo/"$REGION_CITY" ]; do
|
||
|
printf "Region/City (e.g. 'America/Denver'): " && read -r REGION_CITY
|
||
|
[ ! "$REGION_CITY" ] && REGION_CITY="America/Denver"
|
||
|
done
|
||
|
|
||
|
# Host
|
||
|
while :; do
|
||
|
printf "Hostname: " && read -r MY_HOSTNAME
|
||
|
[ "$MY_HOSTNAME" ] && break
|
||
|
done
|
||
|
|
||
|
# Users
|
||
|
ROOT_PASSWORD=$(confirm_password "root password")
|
||
|
|
||
|
installvars() {
|
||
|
echo MY_INIT="$MY_INIT" MY_DISK="$MY_DISK" PART1="$PART1" PART2="$PART2" PART3="$PART3" \
|
||
|
SWAP_SIZE="$SWAP_SIZE" MY_FS="$MY_FS" ROOT_PART="$ROOT_PART" ENCRYPTED="$ENCRYPTED" MY_ROOT="$MY_ROOT" MY_SWAP="$MY_SWAP" \
|
||
|
REGION_CITY="$REGION_CITY" MY_HOSTNAME="$MY_HOSTNAME" \
|
||
|
CRYPTPASS="$CRYPTPASS" ROOT_PASSWORD="$ROOT_PASSWORD"
|
||
|
}
|
||
|
|
||
|
printf "\nDone with configuration. Installing...\n\n"
|
||
|
|
||
|
# Install
|
||
|
sudo "$(installvars)" sh src/installer.sh
|
||
|
|
||
|
# Chroot
|
||
|
sudo cp src/iamchroot.sh /mnt/root/ &&
|
||
|
sudo "$(installvars)" artix-chroot /mnt /bin/bash -c 'sh /root/iamchroot.sh; rm /root/iamchroot.sh; exit' &&
|
||
|
printf '\nYou may now poweroff.\n'
|