diff --git a/linux_mint.sh b/linux_mint.sh old mode 100644 new mode 100755 index c5c92db..c647a49 --- a/linux_mint.sh +++ b/linux_mint.sh @@ -3,84 +3,171 @@ ### # Set variables ### +export DEBIAN_FRONTEND=noninteractive +DPKG_CFG_FRAGMENT=/etc/dpkg/dpkg.cfg.d/non-interactive + +# Color of prefix (>>>) to distinguish user and root echos +color_prefix=32 # green # Linux distro script_distro='Linux Mint 19.x' # Additional packages -more_packages="" +packages=( + # Graphics + cheese + inkscape + + # Office + libreoffice + + # Security + keepassxc + + # Games + 0ad + beneath-a-steel-sky + billard-gl + blobby + blockout2 + flight-of-the-amazon-queen + freeciv + frozen-bubble + gbrainy + gnome-games + gweled + hedgewars + lincity-ng + lure-of-the-temptress + openttd + pingus + pipewalker + pokerth + supertux + supertuxkart + teeworlds + wesnoth + widelands + + # Gaming platforms + playonlinux + steam + wine-stable + winetricks + + # System management + gparted + + # Tools + hardinfo + shutter + vim + + # Management + calibre + + # Media + vlc + + # Knowledge + goldendict + ubuntu-edu-preschool + ubuntu-edu-primary + ubuntu-edu-secondary + ubuntu-edu-tertiary + + # Language support + language-selector-common + openoffice.org-hyphenation + language-pack-ar + language-pack-gnome-ar + language-pack-fa + language-pack-gnome-fa +) ### # Functions ### -function _addToDefaultPackages() { - more_packages="${more_packages} ${1}" +is_root() { + [[ $UID -eq 0 ]] } +# $*: message to echo +e() { + printf "\e[%sm>>>\e[0m %s\n" "$color_prefix" "$*" +} + +# It's a pain to stop (ctrl+c, kill) execution with all the Python applications +# so we catch SIGINT and SIGTERM and exit immediately +handle_signal() { + e "Ausführung abgebrochen! Script wird beendet..." + exit 1 +} + +# always executed on shell exit regardless of reason. for cleanup tasks +handle_exit() { + # Remove temporary dpkg cfg if root + is_root && rm -f "$DPKG_CFG_FRAGMENT" +} + +trap handle_signal SIGINT SIGTERM +trap handle_exit EXIT + +pkg() { + apt install "$@" --yes --quiet +} ### -# Define additional software packages +# Root setup ### +if is_root; then + color_prefix=31 # red + if [[ $1 != "root-setup" ]]; then + e "Dieses Script sollte nicht direkt als Root ausgeführt werden!" >&2 + e "Privilegien werden automatisch eskaliert sobald es notwendig ist." >&2 + exit 1 + fi -# Graphics -_addToDefaultPackages "cheese" -_addToDefaultPackages "inkscape" + # place temporary dpkg configurations to ensure non-interactive upgrade + cat <<'DPKG' >"$DPKG_CFG_FRAGMENT" +force-confold +force-confdef +DPKG -# Office -_addToDefaultPackages "libreoffice" + e "Automatische Installation empfohlener Pakete aktivieren ..." + sed -i 's/false/true/g' /etc/apt/apt.conf.d/00recommends -# Security -_addToDefaultPackages "keepassxc" + e "Besten Spiegelserver für '${script_distro}' auswählen ..." + mint-switch-to-local-mirror -# Games -_addToDefaultPackages "0ad" -_addToDefaultPackages "beneath-a-steel-sky" -_addToDefaultPackages "billard-gl" -_addToDefaultPackages "blobby" -_addToDefaultPackages "blockout2" -_addToDefaultPackages "flight-of-the-amazon-queen" -_addToDefaultPackages "freeciv" -_addToDefaultPackages "frozen-bubble" -_addToDefaultPackages "gbrainy" -_addToDefaultPackages "gnome-games" -_addToDefaultPackages "gweled" -_addToDefaultPackages "hedgewars" -_addToDefaultPackages "lincity-ng" -_addToDefaultPackages "lure-of-the-temptress" -_addToDefaultPackages "openttd" -_addToDefaultPackages "pingus" -_addToDefaultPackages "pipewalker" -_addToDefaultPackages "pokerth" -_addToDefaultPackages "supertux" -_addToDefaultPackages "supertuxkart" -_addToDefaultPackages "teeworlds" -_addToDefaultPackages "wesnoth" -_addToDefaultPackages "widelands" + e "Paketquellen aktualisieren ..." + apt update --yes --quiet -# Gaming platforms -_addToDefaultPackages "playonlinux" -_addToDefaultPackages "steam" -_addToDefaultPackages "wine-stable" -_addToDefaultPackages "winetricks" + e "System aktualisieren (apt) ..." + apt full-upgrade --yes --quiet -# System management -_addToDefaultPackages "gparted" + e "System aktualisieren (mintupdate-cli) ..." + mintupdate-cli --yes upgrade -# Tools -_addToDefaultPackages "hardinfo" -_addToDefaultPackages "shutter" -_addToDefaultPackages "vim" + e "Proprietäre Treiber installieren (sofern verfügbar) ..." + ubuntu-drivers autoinstall -# Management -_addToDefaultPackages "calibre" + e "Zusätzliche Software installieren ..." + pkg "${packages[@]}" -# Knowledge -_addToDefaultPackages "goldendict" -_addToDefaultPackages "ubuntu-edu-preschool" -_addToDefaultPackages "ubuntu-edu-primary" -_addToDefaultPackages "ubuntu-edu-secondary" -_addToDefaultPackages "ubuntu-edu-tertiary" + e "Sprachunterstützung vervollständigen ..." + pkg "$(check-language-support)" + # these packages have to be installed after "$(check-language-support)" + pkg hunspell-de-at hunspell-de-ch hunspell-de-de + e "Unnötige Pakete entfernen und Cache bereinigen ..." + apt clean --yes --quiet + apt autoremove --yes --quiet + + e "Root Setup abgeschlossen." + # It's very important to exit here. We don't want root past this point! + exit +fi ### # Greeting @@ -93,58 +180,28 @@ echo "\ ### # Maintainer: Computertruhe e. V. # Website: https://computertruhe.de/ -# Version: 0.1.4 +# Version: 0.2.0 # Repo: https://codeberg.org/Computertruhe/computertruhe-setup # Distro: ${script_distro} ### " -echo ">>> Starte initiales Setup für Rechner mit frisch installiertem \"${script_distro}\" ..." - +e "Starte initiales Setup für Rechner mit frisch installiertem '${script_distro}' ..." ### # Automatic installation ### -echo ">>> Automatische Installation empfohlener Pakete aktivieren ..." -sudo sed -i 's/false/true/g' /etc/apt/apt.conf.d/00recommends +e "Script wird als Root ausgeführt für privilegierte Aufgaben" +sudo ./"$0" root-setup -echo ">>> Besten Spiegelserver für \"${script_distro}\" auswählen ..." -mint-switch-to-local-mirror - -echo ">>> Paketquellen aktualisieren ..." -apt update - -echo ">>> System aktualisieren (apt) ..." -DEBIAN_FRONTEND=noninteractive apt full-upgrade --yes - -echo ">>> System aktualisieren (mintupdate-cli) ..." -DEBIAN_FRONTEND=noninteractive mintupdate-cli upgrade --yes - -echo ">>> Proprietäre Treiber installieren (sofern verfügbar) ..." -ubuntu-drivers autoinstall - -echo ">>> Zusätzliche Software installieren ..." -DEBIAN_FRONTEND=noninteractive apt install ${more_packages} --yes - -echo ">>> Sprachpakete 'ar' und 'fa' installieren ..." -apt install language-pack-ar language-pack-gnome-ar language-pack-fa language-pack-gnome-fa --yes -echo ">>> Sprachunterstützung vervollständigen ..." -apt install language-selector-common --yes -apt install $(check-language-support) --yes -apt install hunspell-de-at hunspell-de-ch hunspell-de-de openoffice.org-hyphenation --yes - -echo ">>> Richte arabisches und persisches Tastatur-Layout ein..." +e "Richte arabisches und persisches Tastatur-Layout ein..." gsettings set org.gnome.libgnomekbd.keyboard layouts "['de', 'ara', 'ir']" -echo ">>> Ändere Anzeigeoptionen für die Tastatur auf die richtigen Werte..." + +e "Ändere Anzeigeoptionen für die Tastatur auf die richtigen Werte..." gsettings set org.cinnamon.desktop.interface keyboard-layout-show-flags false gsettings set org.cinnamon.desktop.interface keyboard-layout-use-upper true gsettings set org.cinnamon.desktop.interface keyboard-layout-prefer-variant-names true -echo ">>> Unnötige Pakete entfernen ..." -apt clean -apt autoremove --yes - - ### # Finalisation ### -echo ">>> Initiales Setup beendet." +e "Initiales Setup beendet."