archinstall/base.sh

365 lines
12 KiB
Bash

#!/bin/bash
# Vor Reboot
echo "Select Prozessor Vendor (Defaults to no ucode):"
echo "1) AMD 2) Intel 3) Other(no ucode)"
read -r vendor
: "${vendor:=3}"
if [[ $vendor == 1 ]]; then
echo "AMD"
ucode="amd-ucode"
elif [[ $vendor == 2 ]]; then
echo "Intel"
ucode="intel-ucode"
elif [[ $vendor == 3 ]]; then
echo "no Ucode"
ucode=""
else
echo "Vendor Unknown, aborting"
exit 1
fi
echo "Select Kernel (Defaults to Linux):"
echo "1) Linux 2) Linux LTS 3) Linux Zen"
read -r kernel
: "${kernel:=1}"
tempString="";
for range in ${kernel//,/ }; do
tempString="$tempString{${range//-/..}}";
done;
tempString=${tempString//\}{/\} {};
tempString=$(echo $tempString | tr [:blank:] '\n' | sed 's/{\([0-9]\{1,2\}\)}/\1/' | tr '\n' ',');
tempString=${tempString/%,/};
result="";
for range2 in ${tempString//,/ }; do
result+=$(eval echo $range2);
result+=";";
done;
result=${result/%;};
result=${result//;/ };
echo $result
for index in ${result}; do
echo -n "Ausgewählt: "
case $index in
*1*)
echo "Linux"
selectedKernel+="linux "
header+="linux-headers "
;;
*2*)
echo "Linux LTS"
selectedKernel+="linux-lts "
header+="linux-lts-headers "
;;
*3*)
echo "Linux Zen"
selectedKernel+="linux-zen "
header+="linux-zen-headers "
;;
*) echo "Error, aborting" ;;
esac
done
#if [[ $kernel == 1 ]]; then
# echo "Linux"
# selectedKernel="linux"
# header="linux-headers"
#elif [[ $kernel == 2 ]]; then
# echo "Linux/Linux LTS"
# selectedKernel="linux linux-lts"
# header="linux-headers linux-lts-headers"
#elif [[ $kernel == 3 ]]; then
# echo "Linux/Linux Zen"
# selectedKernel="linux linux-zen"
# header="linux-headers linux-zen-headers"
#elif [[ $kernel == 4 ]]; then
# echo "Linux/Linux LTS/Linux Zen"
# selectedKernel="linux linux-lts linux-zen"
# header="linux-headers linux-lts-headers linux-zen-headers"
#elif [[ $kernel == 5 ]]; then
# echo "Linux LTS/Linux Zen"
# selectedKernel="linux-lts linux-zen"
# header="linux-lts-headers linux-zen-headers"
#else
# echo "no Kernel selectet, aborting"
# exit 1
#fi
read -r -p "Passwort für Root (Default: test) :" rootpw
: "${rootpw:=test}"
if [[ $rootpw == "" ]]; then
echo "Kein Passwort für Root vergeben, breche ab"
exit 1
fi
read -r -p "Nutzername (Default: eichehome): " nutzername
: "${nutzername:=eichehome}"
if [[ $nutzername == "" ]]; then
echo "Kein Nutzername eingegeben, breche ab"
exit 1
fi
read -r -p "Passwort für $nutzername (Default: testen): " nutzerpw
: "${nutzerpw:=testen}"
if [[ $rootpw == "" ]]; then
echo "Kein Passwort für $nutzername vergeben, breche ab"
exit 1
fi
echo "General configuration:"
echo "1) Server (Systemd-networkd, no graphics card) 2) Laptop/Desktop (Networkmanager(iwd), Graphics Card, GNOME)"
read -r configuration
: "${configuration:=2}"
if [[ $configuration == 2 ]]; then
echo "Laptop/Desktop"
echo ""
echo "Graphics Card"
echo "1) AMD 2) Intel 3) Nvidia"
read -r gracard
if [[ $gracard == 1 ]]; then
echo "AMD"
elif [[ $gracard == 2 ]]; then
echo "Intel"
elif [[ $gracard == 3 ]]; then
echo "Nvidia"
else
read -r -p "No Graphics Card selected. Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1
fi
elif [[ $configuration == 1 ]]; then
echo "Server"
fi
sleep 1
# Pacman Konfiguration
sed -i 's/#\(Color\)/\1/' /etc/pacman.conf
# Umbruch notwendug
sed -i 's/#\(ParallelDownloads\s=\s5\)/\1\
ILoveCandy/' /etc/pacman.conf
# Zeit einstellen
ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
hwclock --systohc
# vim /etc/locale.gen
sed -i 's/#\(de_DE.UTF-8\)/\1/' /etc/locale.gen
locale-gen
echo "LANG=de_DE.UTF-8" >> /etc/locale.conf
echo "KEYMAP=de-latin1-nodeadkeys" >> /etc/vconsole.conf #only for console not for DE or terminal
#echo "FONT=Tamsyn10x20r" >> /etc/vconsole.conf
echo "arch" >> /etc/hostname
# vim /etc/hosts
echo "127.0.0.1 localhost" > /etc/hosts
echo "::1 localhost" >> /etc/hosts
echo "127.0.1.1 arch.localedomain arch" >> /etc/hosts
echo root:"${rootpw}" | chpasswd
pacman -S ${selectedKernel} "${ucode}"
pacman -S autoconf automake binutils bison debugedit fakeroot flex gcc groff libtool m4 make patch pkgconf texinfo which ${header} # Included in base-devel: archlinux-keyring autoconf automake binutils bison debugedit fakeroot file findutils flex gawk gcc gettext grep groff gzip libtool m4 make pacman patch pkgconf sed sudo texinfo which
pacman -S iwd dialog reflector xdg-user-dirs xdg-utils inetutils ldns bash-completion openssh rsync iptables-nft ipset firewalld lynx man-db man-pages texinfo opendoas pacman-contrib rebuild-detector
sed -i 's/#\(CHARACTER_SET:\).*/\1utf-8/' /etc/lynx.cfg
echo "permit :wheel" > /etc/doas.conf
echo "permit persist eichehome as root" >> /etc/doas.conf
echo "" >> /etc/doas.conf
doas -C /etc/doas.conf && echo "config ok" || echo "config error"
read -r -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && pacman -R sudo || echo "do not forget to check doas.conf and remove sudo afterwards"
#Idee: ppp polkit(?)
pacman -S efibootmgr mtools dosfstools
if [[ $gracard == 1 ]]; then
pacman -S --noconfirm xf86-video-amdgpu
elif [[ $gracard == 3 ]]; then
pacman -S --noconfirm nvidia nvidia-utils nvidia-settings
fi
if [[ $configuration == 1 ]]; then
systemctl enable systemd-networkd
systemctl enable iwd
systemctl enable sshd
# Netzwerk
# Ethernet
echo "Ethernet"
#ethernet_network=$(find / -type f -name 20-ethernet.network | grep configs)
cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-ethernet.network)" /etc/systemd/network/
# Wlan
echo "WLAN"
#wlan_network=$(find / -type f -name 20-wlan.network | grep configs)
cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-wlan.network)" /etc/systemd/network/
# Wwan (Mobilefunk)
echo "Mobilfunk"
#wwan_network=$(find / -type f -name 20-wwan.network | grep configs)
cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-wwan.network)" /etc/systemd/network/
elif [[ $configuration == 2 ]]; then
pacman -S fwupd networkmanager modemmanager avahi bluez bluez-utils sshfs pipewire pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack pipewire-zeroconf pipewire-v4l2 pipewire-docs pipewire-roc helvum wireplumber gstreamer gst-plugin-pipewire gst-libav gst-plugins-good gst-plugins-base xdg-desktop-portal-gnome espeak-ng networkmanager-openconnect networkmanager-openvpn networkmanager-pptp networkmanager-vpnc power-profiles-daemon plymouth
pacman -S gnome gdm gnome-software-packagekit-plugin
systemctl enable NetworkManager
# Configure IWD as Backend for Networkmanager
#wifi_backend_conf=$(find / -type f -name wifi_backend.conf | grep configs)
cp "$(find "${PWD}" -type f -path '*/configs/*' -name wifi_backend.conf)" /etc/NetworkManager/conf.d/
# Disable MulticastDNS in systemd-resolved
#disable_multicastDNS_conf=$(find / -type f -name disable-multicastDNS.conf | grep configs)
mkdir -p /etc/systemd/resolved.conf.d
cp "$(find "${PWD}" -type f -path '*/configs/*' -name disable-multicastDNS.conf)" /etc/systemd/resolved.conf.d/
systemctl enable avahi-daemon
systemctl enable bluetooth
systemctl enable gdm
#LibreOffice
pacman -S libreoffice-fresh-de
#Deutsche Tastatur einstellen
gsettings set org.gnome.desktop.input-sources source "[('xkb', 'de')]"
fi
systemctl enable systemd-resolved
systemctl enable systemd-timesyncd
systemctl enable reflector.timer
systemctl enable firewalld
systemctl enable fstrim.timer
systemctl enable systemd-time-wait-sync.service
if [[ $gracard == 1 ]]; then
sed -i 's/MODULES=()/MODULES=(amdgpu)/' /etc/mkinitcpio.conf #AMD
elif [[ $gracard == 2 ]]; then
sed -i 's/MODULES=()/MODULES=(i915)/' /etc/mkinitcpio.conf #Intel
elif [[ $gracard == 3 ]]; then
sed -i 's/MODULES=()/MODULES=(nvidia)/' /etc/mkinitcpio.conf #Nvidia
fi
sed -i 's/BINARIES=()/BINARIES=(btrfs)/' /etc/mkinitcpio.conf
sed -i 's/^HOOKS=(.*)/HOOKS=(base systemd keyboard autodetect sd-vconsole modconf kms block sd-encrypt filesystems fsck)/' /etc/mkinitcpio.conf
if [[ $configuration == 2 ]]; then
sed -i 's/^HOOKS=(.*)/HOOKS=(base systemd keyboard plymouth autodetect sd-vconsole modconf kms block sd-encrypt filesystems fsck)/' /etc/mkinitcpio.conf
fi
if [[ $kernel == 1 ]]; then
mkinitcpio -p linux
elif [[ $kernel == 2 ]]; then
mkinitcpio -p linux
mkinitcpio -p linux-lts
elif [[ $kernel == 3 ]]; then
mkinitcpio -p linux
mkinitcpio -p linux-zen
elif [[ $kernel == 4 ]]; then
mkinitcpio -p linux
mkinitcpio -p linux-lts
mkinitcpio -p linux-zen
elif [[ $kernel == 5 ]]; then
mkinitcpio -p linux-lts
mkinitcpio -p linux-zen
fi
bootctl install
# Bootloaderconfig
scriptpfad="${PWD}-${0}"
scriptpfad="${scriptpfad//-.}"
scriptpfad="${scriptpfad//base.sh}"
#loader_conf=$(find / -type f -name loader.conf | grep configs)
cp "$(find "${scriptpfad}" -type f -path '*/configs/*' -name loader.conf)" /boot/loader/
#$selectedKernel="linux linux-lts linux-zen"
entry_conf=$(find "${PWD}" -type f -path '*/configs/*' -name entry.conf)
for kernel in $selectedKernel; do
boot_entry_name="${kernel//linux/arch}";
# Standart
echo "$boot_entry_name.conf"
cp "$entry_conf" /boot/loader/entries/"$boot_entry_name".conf
sed -i "s/#KERNEL#/$kernel/" /boot/loader/entries/"$boot_entry_name".conf
sed -i "s/#INITRAMFS#/$kernel/" /boot/loader/entries/"$boot_entry_name".conf
boot_entry="${boot_entry_name//arch/arch-linux}"
title=""
for word in ${boot_entry//-/ }; do
word="${word@u} "
title="${title}${word//Lts/LTS}"
done
sed -i "s/#TITLE#/$title/" /boot/loader/entries/"$boot_entry_name".conf
# Fallback
echo "$boot_entry_name-fallback.conf"
cp "$entry_conf" /boot/loader/entries/"$boot_entry_name"-fallback.conf
sed -i "s/#KERNEL#/$kernel/" /boot/loader/entries/"$boot_entry_name"-fallback.conf
sed -i "s/#INITRAMFS#/$kernel-fallback/" /boot/loader/entries/"$boot_entry_name"-fallback.conf
boot_entry="${boot_entry_name//arch/arch-linux}-fallback"
title=""
for word in ${boot_entry//-/ }; do
word="${word@u} "
title="${title}${word//Lts/LTS}"
done
sed -i "s/#TITLE#/$title/" /boot/loader/entries/"$boot_entry_name"-fallback.conf
done;
#TITLE#Arch Linux Zen Fallback
#KERNEL#linux-zen
#INITRAMFS#linux-zen-fallback
#if [[ $kernel == 1 || $kernel == 2 || $kernel == 3 || $kernel == 4 ]]; then
# # Entry Arch
# arch_conf=$(find / -type f -name arch.conf | grep configs)
# cp "$arch_conf" /boot/loader/entries/
#fi
#
#if [[ $kernel == 2 || $kernel == 4 || $kernel == 5 ]]; then
# # Entry Arch LTS
# arch_lts_conf=$(find / -type f -name arch-lts.conf | grep configs)
# cp "$arch_lts_conf" /boot/loader/entries/
#fi
#
#if [[ $kernel == 3 || $kernel == 4 || $kernel == 5 ]]; then
# # Entry Arch Zen
# arch_zen_conf=$(find / -type f -name arch-zen.conf | grep configs)
# cp "$arch_zen_conf" /boot/loader/entries/
#fi
#
#if [[ $kernel == 1 || $kernel == 2 || $kernel == 3 || $kernel == 4 ]]; then
# # Entry Arch Fallback
# arch_fallback_conf=$(find / -type f -name arch-fallback.conf | grep configs)
# cp "$arch_fallback_conf" /boot/loader/entries/
#fi
#
#if [[ $kernel == 2 || $kernel == 4 || $kernel == 5 ]]; then
# # Entry Arch LTS Fallback
# arch_lts_fallback_conf=$(find / -type f -name arch-lts-fallback.conf | grep configs)
# cp "$arch_lts_fallback_conf" /boot/loader/entries/
#fi
#
#if [[ $kernel == 3 || $kernel == 4 || $kernel == 5 ]]; then
# # Entry Arch Zen Fallback
# arch_zen_fallback_conf=$(find / -type f -name arch-zen-fallback.conf | grep configs)
# cp "$arch_zen_fallback_conf" /boot/loader/entries/
# if [[ $vendor == 1 ]]; then
# sed -i 's/#AMD//' /boot/loader/entries/arch-zen-fallback.conf
# elif [[ $vendor == 2 ]]; then
# sed -i 's/#Intel//' /boot/loader/entries/arch-zen-fallback.conf
# fi
#fi
# Verschlüsselungs-Passwort: testpassword
cryptroot_name=$(grep "#\s/dev/mapper" /etc/fstab | head -n 1 | sed 's/#\s\/dev\/mapper\/\(.*\)\s.*/\1/')
cryptroot_device_name=$(grep "LABEL=EFI" /etc/fstab | sed 's/#\s\/dev\/\(.\{3\}\).*/\1/')
cryptroot_device_uuid=$(blkid -o value -s UUID /dev/"$cryptroot_device_name"2)
#sed -i "s/root=LABEL=arch/root=\/dev\/mapper\/$cryptroot_name rd.luks.name=$cryptroot_device_uuid=$cryptroot_name/" /boot/loader/entries/arch.conf
find /boot -type f -name arch\*.conf -exec sed -i "s/root=LABEL=arch/root=\/dev\/mapper\/$cryptroot_name rd.luks.name=$cryptroot_device_uuid=$cryptroot_name/ splash quiet" {} \;
useradd -mG wheel "$nutzername"
echo "$nutzername":"$nutzerpw" | chpasswd
#echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers.d/wheel_group