Advertisement
gkane

artix-installer

May 30th, 2025 (edited)
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 8.45 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. get_conf() {    ############# CONFIGURATION ###################################################################
  4.     log "$1"
  5.     if [ ! -f conf.sh ]; then
  6.         wget https://pastebin.com/raw/Ed9xkKq4 -O conf.sh &>/dev/null
  7.         echo -e "Datei 'conf.sh' heruntergeladen!"
  8.         exit
  9.     fi
  10. }
  11.  
  12. export install_log="$(mktemp -t install_logXXX)"
  13. export red="\033[1;31m"
  14. export green="\033[1;32m"
  15. export cyan="\033[0;36m"
  16. export normal="\033[0m"
  17.  
  18. title() {
  19.     clear
  20.     echo -ne "${cyan}#                Artix Linux Automated Installer (no interaction)              #${normal}"
  21. }
  22.  
  23. case "$init_system" in
  24.     dinit) export init_programs=("dinit" "elogind-dinit");;
  25.     openrc) export init_programs=("openrc" "elogind-openrc");;
  26.     runit) export init_programs=("runit" "elogind-runit");;
  27.     s6) export init_programs=("s6-base" "elogind-s6");;
  28.     *) echo "Ungültiges init_system!"; exit 1;;
  29. esac
  30.  
  31. get_init() {
  32.     log "$1"
  33.     echo -e "\nWhich init system do you want to use?"
  34.     options=("dinit" "openrc" "runit" "s6")
  35.     select_option $? 1 "${options[@]}"
  36.     case $? in
  37.     0) export init_system="dinit"
  38.         export init_programs=("dinit" "elogind-dinit");;
  39.     1) export init_system="openrc"
  40.         export init_programs=("openrc" "elogind-openrc");;
  41.     2) export init_system="runit"
  42.         export init_programs=("runit" "elogind-runit");;
  43.     3) export init_system="s6"
  44.         export init_programs=("s6-base" "elogind-s6");;
  45.     esac
  46. }
  47.  
  48. mount_partitions() {
  49.     log "$1"
  50.     mount "${root_partition}" /mnt
  51.     mkdir -p /mnt/boot
  52.     mount "${boot_partition}" /mnt/boot
  53. }
  54.  
  55. init_base() {
  56.     log "$1"
  57.     loadkeys de_CH-latin1
  58.     sed -i '1iServer = https://mirror2.artixlinux.org/$repo/os/$arch' /etc/pacman.d/mirrorlist
  59.     sed -i 's/^#Color/Color/' /etc/pacman.conf
  60.     sed -i '/^Color/!s/^#Color/Color/' /etc/pacman.conf
  61.     if grep -q '^#ParallelDownloads' /etc/pacman.conf; then
  62.         sed -i 's/^#ParallelDownloads.*/ParallelDownloads = 10/' /etc/pacman.conf
  63.     elif grep -q '^ParallelDownloads' /etc/pacman.conf; then
  64.         sed -i 's/^ParallelDownloads.*/ParallelDownloads = 10/' /etc/pacman.conf
  65.     else
  66.         echo 'ParallelDownloads = 10' >> /etc/pacman.conf
  67.     fi
  68. }
  69.  
  70. install_base_system() {
  71.     log "$1"
  72.     basestrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware efibootmgr "${init_programs[@]}"
  73.     fstabgen -U /mnt >> /mnt/etc/fstab
  74. }
  75.  
  76. config_time() {
  77.     log "$1"
  78.     ln -sf "/usr/share/zoneinfo/${timezone}" /etc/localtime
  79.     hwclock --systohc
  80. }
  81.  
  82. config_lang() {
  83.     log "$1"
  84.     echo -e "en_US.UTF-8 UTF-8\nde_CH.UTF-8 UTF-8" >> /etc/locale.gen
  85.     locale-gen
  86.     echo -e "LANG=en_US.UTF-8\nLC_COLLATE=C\nLC_TIME=de_CH.UTF-8\nLC_NUMERIC=de_CH.UTF-8\nLC_MONETARY=de_CH.UTF-8\nLC_PAPER=de_CH.UTF-8\nLC_MEASUREMENT=de_CH.UTF-8" > /etc/locale.conf
  87.     echo "KEYMAP=de_CH-latin1" > /etc/vconsole.conf
  88. }
  89.  
  90. config_network() {
  91.     log "$1"
  92.     echo "${hostname}" > /etc/hostname
  93.     echo -e "127.0.0.1\tlocalhost" >> /etc/hosts
  94.     echo -e "::1\t\tlocalhost" >> /etc/hosts
  95.     echo -e "127.0.1.1\t${hostname}.localdomain ${hostname}" >> /etc/hosts
  96.     pacman -S --noconfirm --needed connman-${init_system}
  97.     case "${init_system}" in
  98.         dinit) ln -s ../connmand /etc/dinit.d/boot.d/;;
  99.         openrc) rc-update add connmand;;
  100.         runit) ln -s /etc/runit/sv/connmand /etc/runit/runsvdir/default;;
  101.         s6) touch /etc/s6/adminsv/default/contents.d/connmand
  102.             s6-db-reload;;
  103.     esac
  104. }
  105.  
  106. create_user() {
  107.     log "$1"
  108.     echo -e "${root_password}\n${root_password}" | passwd
  109.     useradd -m "${username}"
  110.     echo "${username} ALL=(ALL:ALL) ALL" >> /etc/sudoers
  111.     echo -e "${user_password}\n${user_password}" | passwd "${username}"
  112.     usermod -a -G video,audio,input,power,storage,disk,network "${username}"
  113. }
  114.  
  115. add_universe_repo() {
  116.     log "$1"
  117.     sed -i "s/^#ParallelDownloads.*$/ParallelDownloads = 10/" /etc/pacman.conf
  118.     echo -e '\n[universe]\nServer = https://universe.artixlinux.org/$arch' >> /etc/pacman.conf
  119.     pacman -Syy
  120. }
  121.  
  122. add_arch_repo() {
  123.     log "$1"
  124.     pacman -S --noconfirm --needed artix-archlinux-support
  125.     echo -e "\n[extra]\nInclude = /etc/pacman.d/mirrorlist-arch" >> /etc/pacman.conf
  126.     echo -e "\n[multilib]\nInclude = /etc/pacman.d/mirrorlist-arch" >> /etc/pacman.conf
  127.     pacman-key --populate archlinux
  128.     pacman -Syy
  129. }
  130.  
  131. install_microcode() {
  132.     log "$1"
  133.     pacman -S --noconfirm --needed amd-ucode
  134. }
  135.  
  136. configure_mkinitcpio() {
  137.     log "$1"
  138.     sed -i 's/^HOOKS.*$/HOOKS=(base udev autodetect keyboard keymap modconf block filesystems fsck)/g' /etc/mkinitcpio.conf
  139.     mkinitcpio -P
  140. }
  141.  
  142. install_gpu_drivers() {
  143.     log "$1"
  144.     pacman -S --noconfirm --needed mesa mesa-utils amdvlk vulkan-mesa-layers radeontop libva-mesa-driver mesa-vdpau
  145. }
  146.  
  147. move_kernels_efistub_entry() {
  148.     log "$1"
  149.     efidir="/boot/${init_system}"
  150.     mkdir -p "$efidir"
  151.     # Move Kernel, Microcode, Initramfs
  152.     mv /boot/vmlinuz-linux-zen "$efidir/"
  153.     mv /boot/amd-ucode.img "$efidir/"
  154.     mv /boot/initramfs-linux-zen.img "$efidir/"
  155.     mv /boot/initramfs-linux-zen-fallback.img "$efidir/"
  156.     # Get root partition UUID
  157.     ROOT_UUID=$(blkid -s UUID -o value "${root_partition}")
  158.     KERNEL_OPT="rw quiet"
  159.     # Create EFISTUB entry
  160.     efibootmgr --create \
  161.       --disk $(echo $boot_partition | sed 's/[0-9]*$//') \
  162.       --part $(echo $boot_partition | grep -o '[0-9]*$') \
  163.       --label "Artix-${init_system}" \
  164.       --loader "\\${init_system}\\vmlinuz-linux-zen" \
  165.       --unicode "initrd=\\${init_system}\\amd-ucode.img initrd=\\${init_system}\\initramfs-linux-zen.img root=UUID=${ROOT_UUID} ${KERNEL_OPT}" \
  166.       --verbose
  167. }
  168.  
  169. clean() {
  170.     cat /mnt/opt/install_log* >> "${install_log}"
  171.     rm /mnt/opt/install_log*
  172.     umount -R /mnt
  173. }
  174.  
  175. finish() {
  176.     echo -ne "${cyan}
  177. --------------------------------------------------------------------------------
  178.        Installation is done. Please reboot manually.
  179. --------------------------------------------------------------------------------
  180. ${normal}"
  181. }
  182.  
  183. spin() { local i=0; local sp="/-\|"; local n=${#sp}; printf " "; sleep 0.2; while true; do printf "\b${cyan}%s${normal}" "${sp:i++%n:1}"; sleep 0.2; done; }
  184. log() { exec 3>&1 4>&2; trap 'exec 2>&4 1>&3' 0 1 2 3; exec 1>>"${install_log}" 2>&1; echo -e "\n${cyan}${1}${normal}\n"; }
  185. run_step() {
  186.     local msg="$1"
  187.     local func="$2"
  188.     printf "${cyan}${msg}${normal}"
  189.     unshare -fp --kill-child -- bash -c "spin" &
  190.     spinpid=$!
  191.     trap 'kill -9 $spinpid' SIGTERM SIGKILL
  192.     ${func} "${msg}" &>/dev/null
  193.     if [[ $? -eq 0 ]]; then
  194.         kill -9 ${spinpid}
  195.         printf "\b \t\t${cyan}[Done]${normal}\n"
  196.     else
  197.         kill -9 ${spinpid}
  198.         printf "\b \t\t${red}[Failed]${normal}\n"
  199.         printf "\n${red}Sorry! ${msg%%\\*} went wrong. See full log at "
  200.         if ! unshare -U true &>/dev/null ; then
  201.             printf "/mnt${install_log} ${normal}\n\n"
  202.         else
  203.             printf "${install_log} ${normal}\n\n"
  204.         fi
  205.         exit 1
  206.     fi
  207. }
  208.  
  209. title
  210. export -f spin
  211. export -f log
  212. export -f run_step
  213. export -f config_time
  214. export -f config_lang
  215. export -f config_network
  216. export -f create_user
  217. export -f add_universe_repo
  218. export -f add_arch_repo
  219. export -f install_microcode
  220. export -f enable_zram
  221. export -f configure_mkinitcpio
  222. export -f install_gpu_drivers
  223. export -f move_kernels_efistub_entry
  224.  
  225. # --- Ablauf ---
  226. run_step "Selecting init\t\t\t" "get_init"
  227. run_step "Getting config\t\t\t" "get_conf"
  228. run_step "Mounting Partitions\t\t" "mount_partitions"
  229. run_step "Init Base System\t\t\t" "init_base"
  230. run_step "Installing Base System\t\t" "install_base_system"
  231.  
  232. artix-chroot /mnt bash << '_exit'
  233. install_log="$(mktemp -p /opt -t install_logXXX)"
  234. run_step "Configuring Time\t\t" "config_time"
  235. run_step "Configuring Language\t\t" "config_lang"
  236. run_step "Configuring Network\t\t" "config_network"
  237. run_step "Creating User Account\t\t" "create_user"
  238. run_step "Adding Universe Repo\t\t" "add_universe_repo"
  239. [[ "${arch_repo}" == "yes" ]] && run_step "Adding Arch Repo\t\t" "add_arch_repo" || true
  240. run_step "Installing Microcode\t\t" "install_microcode"
  241. run_step "Configuring mkinitcpio\t\t" "configure_mkinitcpio"
  242. run_step "Installing GPU Drivers\t\t" "install_gpu_drivers"
  243. run_step "Move Kernels, create efibootmgr entry\t" "move_kernels_efistub_entry"
  244. _exit
  245.  
  246. if [[ $? -eq 0 ]]; then
  247.     run_step "Cleaning After Install\t\t" "clean"
  248.     finish
  249.     exit 0
  250. else
  251.     exit 1
  252. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement