diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..ca60a14 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,19 @@ +name: CI + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + pull_request: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + lint: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Run Shellcheck + uses: azohra/shell-linter@latest + with: + args: --external-sources \ No newline at end of file diff --git a/.github/workflows/reviewdog.yml b/.github/workflows/reviewdog.yml new file mode 100644 index 0000000..81972b1 --- /dev/null +++ b/.github/workflows/reviewdog.yml @@ -0,0 +1,41 @@ +# Workflow https://github.com/marketplace/actions/run-shellcheck-with-reviewdog + +name: Review Dog + +on: + push: + pull_request: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + shellcheck: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: shellcheck github-check + uses: reviewdog/action-shellcheck@v1 + with: + github_token: ${{ secrets.github_token }} + reporter: github-check # Change reporter. + pattern: "*.sh" # Optional. + exclude: "./.git/*" # Optional. + shellcheck_flags: --external-sources + #level: info + #shellcheck_flags: --severity=style + shellcheck_pr: + #if: github.event_name == 'pull_request' + name: shellcheck pull request + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: shellcheck github-pr-review + uses: reviewdog/action-shellcheck@v1 + with: + github_token: ${{ secrets.github_token }} + reporter: github-pr-review + pattern: "*.sh" # Optional. + exclude: "./.git/*" # Optional. + shellcheck_flags: --external-sources \ No newline at end of file diff --git a/AUTHORS b/AUTHORS index 33495ec..e340eea 100644 --- a/AUTHORS +++ b/AUTHORS @@ -20,6 +20,10 @@ Main Authors Vasilis Niakas : https://github.com/billniakas Salih Emin : https://github.com/cerebrux +QA +~~~~~~~~~~~~ +JohnGavr : https://github.com/JohnGavr + Contributors ~~~~~~~~~~~~ @@ -28,3 +32,4 @@ Ant. George : https://github.com/AntGeorge George Ioakeimidis : https://github.com/giorgosioak 217alex : https://github.com/217alex Dimitris Katsimardos : https://github.com/dimkatsi91 +JohnGavr : https://github.com/JohnGavr diff --git a/README.md b/README.md index d7d7199..7f6c4b0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Archon (Άρχων) - +![Lint and Shellcheck CI](https://github.com/CerebruxCode/Archon/workflows/CI/badge.svg?branch=develop) ``` _____ __|_ |__ _____ ______ __ _ _____ ____ _ @@ -32,8 +32,7 @@ * Ο Άρχων εγκαθιστά το βασικό σύστημα Arch Linux χωρίς την προσθήκη γραφικού περιβάλλοντος * Αναγνωρίζει αν το PC όπου γίνεται η εγκατάσταση έχει BIOS ή UEFI και κάνει τις ανάλογες κατατμήσεις (partitions) -* Δημιουργεί ένα μόνο partition (root+home) και για swap χρησιμοποιεί το [systemD-swap](http://cerebrux.net/2017/06/20/systemd-swap-%ce%b3%ce%b9%ce%b1-%cf%8c%cf%83%ce%bf%cf%85%cf%82-%ce%b4%ce%b5%ce%bd-%ce%b8%ce%ad%ce%bb%ce%bf%cf%85%ce%bd-swap-partition/) -* Εγκαθιστά τις multilib βιβλιοθήκες για υποστήριξη 32bit εφαρμογών +* Σε ρωτάει για το σύστημα αρχείων και αν θέλεις swapfile για χρήση ως SWAP * Λίγο πριν τελειώσει, ρωτάει τον χρήστη αν θέλει να επιλέξει και ένα γραφικό περιβάλλον που θέλει να εγκατασταθεί στο σύστημά του. Αν το αποδεχτεί θα κάνει τις απαραίτητες ενέργειες για να έχει την Vanilla - Upstream έκδοση του γραφικού περιβάλλοντος που επέλεξε. ## Σε ποιους απευθύνεται; diff --git a/archon.sh b/archon.sh index 12a9972..14b57bc 100755 --- a/archon.sh +++ b/archon.sh @@ -24,55 +24,76 @@ NC='\033[0m' ########Filesystem Function################## -function filesystems() { +function filesystems(){ PS3="Επιλέξτε filesystem: " - options=("ext4" "XFS" "Btrfs" "F2FS") + options=("ext4" "XFS (experimental)" "Btrfs" "F2FS (experimental)") select opt in "${options[@]}" - do - case $opt in + do + case $opt in # Η diskletter παίρνει τιμή μόνο αν είναι nvme ο δίσκος "ext4") fsprogs="e2fsprogs" - mkfs.ext4 "$diskvar""$disknumber" - mount "$diskvar""$disknumber" "/mnt" + mkfs.ext4 "$diskvar""$diskletter""$disknumber" + mount "$diskvar""$diskletter""$disknumber" "/mnt" + file_format="ext4" break ;; - "XFS") - fsprogs="xfsprogs" - mkfs.xfs "$diskvar""$disknumber" - mount "$diskvar""$disknumber" "/mnt" + "XFS (experimental)") + fsprogs="xfsprogs" + mkfs.xfs "$diskvar""$diskletter""$disknumber" + mount "$diskvar""$diskletter""$disknumber" "/mnt" + file_format="xfs" break ;; - "Btrfs") + "Btrfs") fsprogs="btrfs-progs" - mkfs.btrfs "-f" "$diskvar""$disknumber" - mount "$diskvar""$disknumber" "/mnt" + mkfs.btrfs "-f" "$diskvar""$diskletter""$disknumber" + mount "$diskvar""$diskletter""$disknumber" "/mnt" + btrfs subvolume create /mnt/@ + echo + if YN_Q "Θέλετε να προστεθεί subvolume home (y/n); " "μη έγκυρος χαρακτήρας" ; then + btrfs subvolume create /mnt/@home + umount /mnt + mount -o subvol=/@ "$diskvar""$diskletter""$disknumber" /mnt + mkdir -p /mnt/home + mount -o subvol=/@home "$diskvar""$diskletter""$disknumber" /mnt/home + else + umount /mnt + mount -o subvol=/@ "$diskvar""$diskletter""$disknumber" /mnt + fi + file_format="btrfs" break ;; - "F2FS") + "F2FS (experimental)") fsprogs="f2fs-tools" - mkfs.f2fs "-f" "$diskvar""$disknumber" - mount "$diskvar""$disknumber" "/mnt" + mkfs.f2fs "-f" "$diskvar""$diskletter""$disknumber" + mount "$diskvar""$diskletter""$disknumber" "/mnt" + file_format="f2fs" break ;; - *) echo -e "${IRed}Οι επιλογές σας πρέπει να είναι [1 ~ 4]. Παρακαλώ προσπαθήστε ξανα!${NC}";; + *) echo -e "${IRed}Οι επιλογές σας πρέπει να είναι [1 ~ 4]. Παρακαλώ επιλέξτε σωστά !${NC}";; esac - done -} + done + } + + ########Filesystem End ######################################## ######## Functions for Desktop and X Dsiplay server (X-Org)#### # function check_if_in_VM() { + echo echo -e "${IGreen}Έλεγχος περιβάλλοντος (PC | VM) ...${NC}" sleep 2 - pacman -S --noconfirm facter + installer "Εγκατάσταση εργαλείου Ελέγχου : " facter if [[ $(facter 2>/dev/null | grep 'is_virtual' | awk -F'=> ' '{print $2}') == true ]]; then + echo echo -e "${IGreen}Είμαστε σε VM (VirtualBox | VMware) ...${NC}" sleep 2 - pacman -S --noconfirm virtualbox-guest-dkms linux-headers xf86-video-vmware + installer "Πακέτα για VM" virtualbox-guest-dkms linux-headers xf86-video-vmware else - echo -e "${IGreen}Δεν είμαστε σε VM (VirtualBox | VMware) ...${NC}" + echo + echo -e "${IGreen}Δεν είμαστε σε VM (VirtualBox | VMware) αφαίρεση εργαλείων ελέγχου...${NC}" sleep 2 - pacman -Rs --noconfirm facter + pacman -Rs --noconfirm facter boost-libs cpp-hocon leatherman yaml-cpp fi sleep 2 } @@ -80,14 +101,19 @@ function check_if_in_VM() { function installer() { echo -e "${IGreen}Εγκατάσταση $1 ...${NC}" - if pacman -S --noconfirm $2 + echo + echo -e "${IYellow}Θα εγκατασταθούν τα : ${*:2} ${NC}" # Ενημέρωση του τι θα εγκατασταθεί + echo + if pacman -S --noconfirm "${@:2}" # Με ${*2} διαβάζει τα input then + echo echo -e "${IGreen}[ ΕΠΙΤΥΧΗΣ ] Εγκατάσταση $1 ...${NC}" else + echo echo -e "${IRed}[ ΑΠΕΤΥΧΕ ] Εγκατάσταση $1 ...${NC}" fi -} +} # Check Net Connection | If it is off , exit immediately # function check_net_connection() { @@ -96,17 +122,24 @@ function check_net_connection() { echo -e "${IGreen}Έλεγχος σύνδεσης στο διαδίκτυο${NC}" echo '----------------------------------------' if ping -c 3 www.google.com &> /dev/null; then + echo echo -e "${IYellow}Η σύνδεση στο διαδίκτυο φαίνεται ενεργοποιημένη...Προχωράμε...\n${NC}" else + echo echo -e "${IRed} Η σύνδεση στο Διαδίκτυο φαίνεται απενεργοποιημένη ... Ματαίωση ...\n" echo -e "Συνδεθείτε στο Διαδίκτυο και δοκιμάστε ξανά ... \n Ματαίωση...${NC}" + echo exit 1 fi } function initialize_desktop_selection() { sleep 2 - installer "Xorg Server" "xorg xorg-server xorg-xinit alsa-utils alsa-firmware pulseaudio noto-fonts" # Εγκατάσταση Xorg Server + echo + echo "Εγκατάσταση Xorg Server" + echo + installer "Xorg Server" xorg xorg-server xorg-xinit alsa-utils alsa-firmware pulseaudio pulseaudio-alsa noto-fonts # Εγκατάσταση Xorg Server και Audio server + echo PS3='Επιλέξτε ένα από τα διαθέσιμα γραφικά περιβάλλοντα : ' options=("GNOME" "Mate" "Deepin" "Xfce" "KDE" "LXQt" "Cinnamon" "Budgie" "i3" "Enlightenment" "UKUI" "Fluxbox" "Sugar" "Twm" "Έξοδος") @@ -116,107 +149,108 @@ function initialize_desktop_selection() { case "$choice" in "GNOME") echo -e "${IGreen}Εγκατάσταση GNOME Desktop Environment ...\n${NC}" - installer "GNOME Desktop" "gnome gnome-extra" + installer "GNOME Desktop" gnome gnome-extra sudo systemctl enable gdm sudo systemctl enable NetworkManager exit 0 ;; "Mate") - echo -e "${IGreen}Εγκατάσταση Mate Desktop Environment ... \n${NC}" - installer "Mate Desktop" "mate mate-extra networkmanager network-manager-applet" - installer "LightDM Display Manager" "lightdm lightdm-gtk-greeter" + echo -e "${IGreen}Εγκατάσταση Mate Desktop Environment ... \n${NC}" + installer "Mate Desktop" mate mate-extra networkmanager network-manager-applet + installer "LightDM Display Manager" lightdm lightdm-gtk-greeter sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "Deepin") echo -e "${IGreen}Εγκατάσταση Deepin Desktop Environment ...\n${NC}" - installer "Deepin Desktop" "deepin deepin-extra networkmanager" + installer "Deepin Desktop" deepin deepin-extra networkmanager sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "Xfce") echo -e "${IGreen}Εγκατάσταση Xfce Desktop Environment ... \n${NC}" - installer "Xfce Desktop" "xfce4 xfce4-goodies pavucontrol networkmanager network-manager-applet" - installer "LightDM Display Manager" "lightdm lightdm-gtk-greeter" + installer "Xfce Desktop" xfce4 xfce4-goodies pavucontrol networkmanager network-manager-applet + installer "LightDM Display Manager" lightdm lightdm-gtk-greeter sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "KDE") echo -e "${IGreen}Εγκατάσταση KDE Desktop Environment ... \n${NC}" - installer "KDE Desktop" "plasma-meta konsole dolphin" + installer "KDE Desktop" plasma-meta konsole dolphin sudo systemctl enable sddm sudo systemctl enable NetworkManager exit 0 ;; "LXQt") echo -e "${IGreen}Εγκατάσταση LXQt Desktop Environment ... \n${NC}" - installer "LXQt Desktop" "lxqt breeze-icons" - installer "SDDM Display Manager" "sddm" + installer "LXQt Desktop" lxqt breeze-icons + installer "SDDM Display Manager" sddm sudo systemctl enable sddm sudo systemctl enable NetworkManager exit 0 ;; "Cinnamon") echo -e "${IGreen}Εγκατάσταση Cinnamon Desktop Environment ... \n${NC}" - installer "Cinnamon Desktop" "cinnamon xterm networkmanager" - installer "LightDM Display Manager" "lightdm lightdm-gtk-greeter" + installer "Cinnamon Desktop" cinnamon xterm networkmanager + installer "LightDM Display Manager" lightdm lightdm-gtk-greeter sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "Budgie") echo -e "${IGreen}Εγκατάσταση Budgie Desktop Environment ... \n${NC}" - installer "Budgie Desktop" "budgie-desktop budgie-extras xterm networkmanager network-manager-applet" - installer "LightDM Display Manager" "lightdm lightdm-gtk-greeter" + installer "Budgie Desktop" budgie-desktop budgie-extras xterm networkmanager network-manager-applet + installer "LightDM Display Manager" lightdm lightdm-gtk-greeter sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "i3") echo -e "${IGreen}Εγκατάσταση i3 Desktop Environment ... \n${NC}" - installer "i3 Desktop" "i3 dmenu rxvt-unicode" - echo -e '#!/bin/bash \nexec i3' > /home/$USER/.xinitrc + installer "i3 Desktop" i3 dmenu rxvt-unicode + echo -e '#!/bin/bash \nexec i3' > /home/"$USER"/.xinitrc exit 0 ;; "Enlightenment") echo -e "${IGreen}Εγκατάσταση Enlightenment Desktop Environment ... \n${NC}" - installer "Enlightenment Desktop" "enlightenment terminology connman" - installer "LightDM Display Manager" "lightdm lightdm-gtk-greeter" + installer "Enlightenment Desktop" enlightenment terminology connman acpid #acpid and iwd need investigation + installer "LightDM Display Manager" lightdm lightdm-gtk-greeter sudo systemctl enable lightdm + sudo systemctl enable acpid sudo systemctl enable connman.service exit 0 ;; "UKUI") echo -e "${IGreen}Εγκατάσταση UKUI Desktop Environment ... \n${NC}" - installer "UKUI Desktop" "ukui xterm networkmanager network-manager-applet" + installer "UKUI Desktop" ukui xterm networkmanager network-manager-applet sudo systemctl enable lightdm sudo systemctl enable NetworkManager exit 0 ;; "Fluxbox") echo -e "${IGreen}Εγκατάσταση Fluxbox Desktop Environment ... \n${NC}" - installer "Fluxbox Desktop" "fluxbox xterm menumaker" - echo -e '#!/bin/bash \nstartfluxbox' > /home/$USER/.xinitrc + installer "Fluxbox Desktop" fluxbox xterm menumaker + echo -e '#!/bin/bash \nstartfluxbox' > /home/"$USER"/.xinitrc exit 0 ;; "Sugar") echo -e "${IGreen}Εγκατάσταση Sugar Desktop Environment ... \n${NC}" - installer "Sugar Desktop" "sugar sugar-fructose xterm" - installer "LXDM Display Manager" "lxdm" + installer "Sugar Desktop" sugar sugar-fructose xterm + installer "LXDM Display Manager" lxdm sudo systemctl enable lxdm sudo systemctl enable NetworkManager exit 0 ;; "Twm") echo -e "${IGreen}Εγκατάσταση Twm Desktop Environment ... \n${NC}" - installer "Twm Desktop" "xorg-twm xterm xorg-xclock" + installer "Twm Desktop" xorg-twm xterm xorg-xclock exit 0 ;; "Έξοδος") - echo -e "${IYellow}Έξοδος όπως επιλέχθηκε από το χρήστη "${USER}"${NC}" + echo -e "${IYellow}Έξοδος όπως επιλέχθηκε από το χρήστη ${USER}${NC}" exit 0 ;; *) @@ -255,8 +289,12 @@ function chroot_stage { echo read -rp "Δώστε όνομα υπολογιστή (hostname): " hostvar echo "$hostvar" > /etc/hostname + { + echo "127.0.0.1 localhost" + echo "127.0.1.1 $hostvar.localdomain $hostvar" + echo "::1 localhost" + }> /etc/hosts echo - sleep 2 echo '-------------------------------------' echo -e "${IGreen}9 - Ρύθμιση της κάρτας δικτύου${NC}" echo ' ' @@ -267,19 +305,22 @@ function chroot_stage { sleep 2 ethernet=$(ip link | grep "2: "| grep -oE "(en\\w+)") # Αναζήτηση κάρτας ethernet if [ "$ethernet" = "" ]; then # Έλεγχος αν υπάρχει κάρτα ethernet - echo -e "${IYellow}Δε βρέθηκε ενσύρματη κάρτα δικτύου${NC}" # και αν υπάρχει γίνεται εγκατάσταση + echo + echo -e "${IYellow}Δε βρέθηκε ενσύρματη κάρτα δικτύου${NC}" # και αν υπάρχει γίνεται εγκατάσταση else # και ενεργοποίηση - systemctl enable dhcpcd@"$ethernet".service - echo -e "${IGreen}Η κάρτα δικτύου $ethernet ρυθμίστηκε επιτυχώς${NC}"; + systemctl enable dhcpcd@"$ethernet".service + echo + echo -e "${IGreen}Η κάρτα δικτύου $ethernet ρυθμίστηκε επιτυχώς${NC}"; fi - echo wifi=$(ip link | grep ": "| grep -oE "(w\\w+)") # Αναζήτηση κάρτας wifi if [ "$wifi" = "" ]; then # Έλεγχος αν υπάρχει κάρτα wifi - echo -e "${IYellow}Δε βρέθηκε ασύρματη κάρτα δικτύου${NC}" # και αν υπάρχει γίνεται εγκατάσταση + echo + echo -e "${IYellow}Δε βρέθηκε ασύρματη κάρτα δικτύου${NC}" # και αν υπάρχει γίνεται εγκατάσταση else # και ενεργοποίηση - pacman -S --noconfirm iw wpa_supplicant dialog wpa_actiond + installer "Ρυθμίσεις Ασύρματης Κάρτας" iw wpa_supplicant dialog netctl wireless-regdb crda # CRDA/wireless-regdb : https://wiki.archlinux.org/index.php/Network_configuration/Wireless#Respecting_the_regulatory_domain systemctl enable netctl-auto@"$wifi".service - echo -e "${IGreen}Η ασύρματη κάρτα δικτύου $wifi ρυθμίστηκε επιτυχώς${NC}" + echo + echo -e "${IGreen}Η ασύρματη κάρτα δικτύου $wifi ρυθμίστηκε επιτυχώς${NC}" fi sleep 2 echo @@ -290,17 +331,14 @@ function chroot_stage { echo 'του root χρήστη ' echo '-------------------------------------' echo - sleep 1 ######################################################### until passwd # Μέχρι να είναι επιτυχής do # η αλλαγή του κωδικού - echo # του root χρήστη, θα - echo -e "${IYellow}O root κωδικός δεν άλλαξε, δοκιμάστε ξανά!${NC}" # τυπώνεται αυτό το μήνυμα - echo # + echo # του root χρήστη, θα + echo -e "${IYellow}O root κωδικός δεν άλλαξε, δοκιμάστε ξανά!${NC}" # τυπώνεται αυτό το μήνυμα + echo # done # ######################################################### - sleep 2 - echo echo echo '---------------------------------------' echo -e "${IGreen}11 - Linux LTS kernel (προαιρετικό)${NC}" @@ -311,10 +349,9 @@ function chroot_stage { echo '---------------------------------------' sleep 2 if YN_Q "Θέλετε να εγκαταστήσετε πυρήνα μακράς υποστήριξης (Long Term Support) (y/n); "; then - sudo pacman -S --noconfirm linux-lts + installer "Linux Lts Kernel" linux-lts fi echo - echo echo '---------------------------------------' echo -e "${IGreen}12 - Ρύθμιση GRUB${NC} " echo ' ' @@ -323,7 +360,7 @@ function chroot_stage { echo '---------------------------------------' echo sleep 2 - pacman -S --noconfirm grub efibootmgr os-prober + installer "Gurb Bootloader" grub efibootmgr os-prober lsblk --noheadings --raw -o NAME,MOUNTPOINT | awk '$1~/[[:digit:]]/ && $2 == ""' | grep -oP sd\[a-z]\[1-9]+ | sed 's/^/\/dev\//' > disks.txt filesize=$(stat --printf="%s" disks.txt | tail -n1) @@ -331,31 +368,26 @@ function chroot_stage { mkdir media cd media cd / - if [ $filesize -ne 0 ]; then + if [ "$filesize" -ne 0 ]; then num=0 while IFS='' read -r line || [[ -n "$line" ]]; do - num=$(( $num + 1 )) + num=$(( num + 1 )) echo $num mkdir /run/media/disk$num - mount $line /run/media/disk$num | echo -e "${IYellow}Προσαρτάται ο..."$num"oς δίσκος${NC}" + mount "$line" /run/media/disk$num && echo -e "${IYellow}Προσαρτάται ο... $num oς δίσκος${NC}" sleep 1 - - done < "disks.txt" + done < "disks.txt" else - echo -e "${IYellow}Δεν υπάρχουν άλλοι δίσκοι στο σύστημα${NC}" + echo -e "${IYellow}Δεν υπάρχουν άλλοι δίσκοι στο σύστημα${NC}" fi sleep 5 rm disks.txt if [ -d /sys/firmware/efi ]; then - #pacman -S --noconfirm grub efibootmgr os-prober grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub --recheck grub-mkconfig -o /boot/grub/grub.cfg else - #pacman -S --noconfirm grub os-prober - #lsblk | grep -i sd - #read -rp " Σε ποιο δίσκο θέλετε να εγκατασταθεί ο grub (/dev/sd? | /dev/nvme?); " grubvar diskchooser grub grub-install --target=i386-pc --recheck "$grubvar" grub-mkconfig -o /boot/grub/grub.cfg @@ -378,53 +410,64 @@ function chroot_stage { ######################################################### until passwd "$onomaxristi" # Μέχρι να είναι επιτυχής do # η εντολή - echo -e "${IYellow}O κωδικός του χρήστη δεν άλλαξε, δοκιμάστε ξανά!${NC}" # τυπώνεται αυτό το μήνυμα - echo + echo -e "${IYellow}O κωδικός του χρήστη δεν άλλαξε, δοκιμάστε ξανά!${NC}" # τυπώνεται αυτό το μήνυμα + echo done ######################################################### echo "$onomaxristi ALL=(ALL) ALL" >> /etc/sudoers echo - echo - echo '-------------------------------------' - echo -e "${IGreen}14 - Προσθήκη Multilib${NC} " - echo ' ' - echo 'Θα προστεθεί δυνατότητα για πρόσβαση ' - echo 'σε 32bit προγράμματα και βιβλιοθήκες ' - echo 'που απαιτούν κάποιες εφαρμογές ' - echo '-------------------------------------' - sleep 2 - echo - { - echo "[multilib]" - echo "Include = /etc/pacman.d/mirrorlist" - } >> /etc/pacman.conf - pacman -Syy echo '--------------------------------------' - echo -e "${IGreen}15 - Προσθήκη SWAP${NC} " + echo -e "${IGreen}14 - Προσθήκη SWAP file${NC} " echo ' ' - echo 'Θα χρησιμοποιηθεί το systemd-swap αντί' - echo 'για διαμέρισμα SWAP ώστε το μέγεθός ' - echo 'του να μεγαλώνει εάν και εφόσoν το ' - echo 'απαιτεί το σύστημα ' + echo 'Εάν θέλετε, μπορεί να δημιουργηθεί ' + echo 'SWAP file. Για το μέγεθός του μπορείτε' + echo 'να γράψετε έναν αριθμό σε MB. π.χ 4096' + echo 'για να δημιουργηθεί 4GB swap file ' echo '--------------------------------------' sleep 2 - ############################ Installing Zswap ############################### - pacman -S --noconfirm systemd-swap - # τα default του developer αλλάζουμε μόνο: echo - { - echo "zswap_enabled=0" - echo "swapfc_enabled=1" - } >> /etc/systemd/swap.conf.d/systemd-swap.conf - systemctl enable systemd-swap - echo "" + if YN_Q "Θέλετε να δημιουργήσετε swapfile (y/n); " "μη έγκυρος χαρακτήρας" ; then + echo + read -rp "Τι μέγεθος να έχει το swapfile; (Σε MB) : " swap_size + echo + while : # Δικλείδα ασφαλείας αν ο χρήστης προσθέσει μεγάλο νούμερο. + do + if [ "$swap_size" -ge 512 ] && [ "$swap_size" -le 8192 ]; then + break + else + read -rp "Δώσε μία τιμή από 512 εως 8192 : " swap_size + fi + done + if [[ "$file_format" == "btrfs" ]]; then + mount "$diskvar""$diskletter""$disknumber" /mnt + btrfs subvolume create /mnt/@swap + umount /mnt + mkdir /swap + mount -o subvol=@swap "$diskvar""$diskletter""$disknumber" /swap + truncate -s 0 /swap/swapfile + chattr +C /swap/swapfile + btrfs property set /swap/swapfile compression none + dd if=/dev/zero of=/swap/swapfile bs=1M count="$swap_size" status=progress + chmod 600 /swap/swapfile + mkswap /swap/swapfile + echo """$diskvar""""$diskletter""""$disknumber"" /swap btrfs subvol=@swap 0 0 " >> /etc/fstab + echo "/swap/swapfile none swap defaults 0 0" >> /etc/fstab + else + touch /swapfile + dd if=/dev/zero of=/swapfile bs=1M count="$swap_size" status=progress + chmod 600 /swapfile + mkswap /swapfile + echo '/swapfile none swap defaults 0 0' >> /etc/fstab + fi + fi + echo echo '--------------------------------------' echo -e "${IGreen}BONUS - Εγκατάσταση Desktop${NC}" echo ' ' echo 'Θέλετε να εγκαταστήσετε κάποιο γραφικό' echo 'περιβάλλον ; ' echo ' ' - echo -e " ${IGreen}ΣΗΜΑΝΤΙΚΟ:${NC} " + echo -e " ${IGreen}ΣΗΜΑΝΤΙΚΟ:${NC} " echo 'Τα διαθέσιμα γραφικά περιβάλλοντα ' echo 'είναι ΜΟΝΟ από τα επίσημα αποθετήρια ' echo 'και όχι από το AUR. Όποιο και αν ' @@ -433,15 +476,22 @@ function chroot_stage { echo 'επίσημες KISS οδηγίες του Arch Wiki ' echo '--------------------------------------' sleep 2 + echo ############# Installing Desktop ########### if YN_Q "Θέλετε να συνεχίσετε (y/n); " "μη έγκυρος χαρακτήρας" ; then - echo "" + echo echo -e "${IYellow}Έναρξη της εγκατάστασης${NC}" check_if_in_VM initialize_desktop_selection else - echo -e "${IYellow}Έξοδος...${NC}" - exit 0 + echo '--------------------------------------------------------' + echo -e "${IGreen} Τέλος εγκατάστασης${NC} " + echo ' Μπορείτε να επανεκκινήσετε το σύστημά σας και να κάνετε ' + echo ' εγκατάσταση τις εφαρμογές ή το γραφικό περιβάλλον που' + echo ' θέλετε...' + echo '--------------------------------------------------------' + sleep 5 + exit fi } @@ -492,31 +542,36 @@ echo "---------------------------------------------------------" num=0 while IFS='' read -r line || [[ -n "$line" ]]; do - num=$(( $num + 1 )) - echo "["$num"]" $line + num=$(( num + 1 )) + echo "[$num]" "$line" done < disks echo "---------------------------------------------------------" +echo read -rp "Επιλέξτε δίσκο για εγκατάσταση (Q/q για έξοδο): " input if [[ $input = "q" ]] || [[ $input = "Q" ]] then - echo -e "${IYellow}Έξοδος...${NC}" - tput cnorm -- normal # Εμφάνιση cursor + echo + echo -e "${IYellow}Έξοδος...${NC}" + tput cnorm -- normal # Εμφάνιση cursor exit 0 fi -if [ $input -gt 0 ] && [ $input -le $num ]; #έλεγχος αν το input είναι μέσα στο εύρος της λίστας +if [ "$input" -gt 0 ] && [ "$input" -le $num ]; #έλεγχος αν το input είναι μέσα στο εύρος της λίστας then if [[ $1 = "grub" ]]; # αν προστεθεί το όρισμα grub τότε η μεταβλητή που θα αποθηκευτεί - then # θα είναι η grubvar - grubvar="/dev/"$(cat disks | head -n$(( $input )) | tail -n1 ) - echo Διάλεξατε τον $grubvar + then # θα είναι η grubvar + grubvar="/dev/"$(cat < disks | head -n$(( input )) | tail -n1 ) + echo Διάλεξατε τον "$grubvar" else - diskvar="/dev/"$(cat disks | head -n$(( $input )) | tail -n1 ) - echo Διάλεξατε τον $diskvar + diskvar="/dev/"$(cat < disks | head -n$(( input )) | tail -n1 ) + if [[ "$diskvar" = *"/dev/nvme0n"[1-9]* ]]; then #Εκχώρηση τιμής στην diskletter αν είναι nvme ο δίσκος. + diskletter="p" + fi + echo Διάλεξατε τον "$diskvar" fi break - else +else echo -e "${IYellow}Αριθμός εκτός λίστας${NC}" sleep 2 clear @@ -530,20 +585,23 @@ export -f diskchooser #Τυπικός έλεγχος για το αν είσαι root. because you never know if [ "$(id -u)" -ne 0 ] ; then - echo -e "${IRed}Λυπάμαι, αλλά πρέπει να είσαι root χρήστης για να τρέξεις το Archon.${NC}" + echo + echo -e "${IRed}Λυπάμαι, αλλά πρέπει να είσαι root χρήστης για να τρέξεις το Archon.${NC}" echo -e "${IYellow}Έξοδος...${NC}" - sleep 2 + echo + sleep 2 exit 1 fi #Τυπικός έλεγχος για το αν το τρέχει σε Arch. if [ ! -f /etc/arch-release ] ; then - echo -e "${IRed}Λυπάμαι, αλλά το σύστημα στο οποίο τρέχεις το Archon δεν είναι Arch Linux${NC}" + echo + echo -e "${IRed}Λυπάμαι, αλλά το σύστημα στο οποίο τρέχεις το Archon δεν είναι Arch Linux${NC}" echo -e "${IYellow}Έξοδος...${NC}" - sleep 2 + echo + sleep 2 exit fi - setfont gr928a-8x16.psfu echo -e "----------------------${IGreen} Archon ${NC}--------------------------" echo " _____ "; @@ -559,7 +617,7 @@ sleep 1 echo ' Σκοπός αυτού του cli εγκαταστάτη είναι η εγκατάσταση του' echo ' βασικού συστήματος Arch Linux ΧΩΡΙΣ γραφικό περιβάλλον.' echo '' -echo ' Η διαδικασία ολοκληρώνεται σε 15 βήματα' +echo ' Η διαδικασία ολοκληρώνεται σε 14 βήματα' echo '' echo ' Προτείνεται η εγκατάσταση σε ξεχωριστό δίσκο για την ' echo ' αποφυγή σπασίματος του συστήματος σας. ' @@ -571,9 +629,10 @@ echo ' You have been warned !!!' sleep 5 echo if YN_Q "Θέλετε να συνεχίσετε (y/n); " "μη έγκυρος χαρακτήρας" ; then - echo "" + echo echo -e "${IYellow}Έναρξη της εγκατάστασης${NC}" else + echo echo -e "${IYellow} Έξοδος...${NC}" exit 0 fi @@ -583,15 +642,18 @@ echo '---------------------------------------' echo -e "${IGreen} 1 - Έλεγχος σύνδεσης στο διαδίκτυο${NC}" echo '---------------------------------------' if ping -c 3 www.google.com &> /dev/null; then - echo '---------------------------------------' + echo echo -e "${IYellow}Υπάρχει σύνδεση στο διαδίκτυο${NC}" echo ' Η εγκατάσταση θα συνεχιστεί' - echo '---------------------------------------' + echo else + echo echo -e "${IRed}Δεν βρέθηκε σύνδεση στο διαδίκτυο! Συνδεθείτε στο διαδίκτυο και δοκιμάστε ξανά${NC}" - sleep 1 + echo + sleep 1 echo -e "${IYellow} Έξοδος...${NC}" - sleep 1 + echo + sleep 1 exit 1 fi sleep 1 @@ -605,19 +667,12 @@ echo ' γίνει η εγκατάσταση του Arch Linux ' echo '----------------------------------------------' echo diskchooser -#lsblk | grep -i 'sd\|nvme' #Προσθήκη nvme ανάγνωσης στην εντολή lsblk -#echo -#echo -#echo '--------------------------------------------------------' -#read -rp " Γράψτε σε ποιο δίσκο (με την μορφή /dev/sdX ή /dev/nvmeX) θα εγκατασταθεί το Arch; " diskvar -#echo '--------------------------------------------------------' echo echo '--------------------------------------------------------' echo -e "${IYellow} Η εγκατάσταση θα γίνει στον $diskvar ${NC}" echo '--------------------------------------------------------' sleep 1 echo -echo echo '---------------------------------------------' echo -e "${IGreen} 3 - Γίνεται έλεγχος αν το σύστημά σας είναι${NC}" echo ' ' @@ -627,55 +682,31 @@ sleep 1 set -e ################### Check if BIOS or UEFI ##################### -function UEFI () { -if [[ "$diskvar" = *"/dev/sd"[a-z]* ]]; then - parted "$diskvar" mklabel gpt - parted "$diskvar" mkpart ESP fat32 1MiB 513MiB - parted "$diskvar" mkpart primary ext4 513MiB 100% - mkfs.fat -F32 "$diskvar""1" - disknumber="2" - filesystems - mkdir "/mnt/boot" - mount "$diskvar""1" "/mnt/boot" - sleep 1 -else - parted "$diskvar" mklabel gpt - parted "$diskvar" mkpart ESP fat32 1MiB 513MiB - parted "$diskvar" mkpart primary ext4 513MiB 100% - mkfs.fat -F32 "$diskvar""p1" - disknumber="p2" - filesystems - mkdir "/mnt/boot" - mount "$diskvar""p1" "/mnt/boot" - sleep 1 -fi -} -function BIOS () { - if [[ "$diskvar" = *"/dev/sd"[a-z]* ]]; then - parted "$diskvar" mklabel msdos - parted "$diskvar" mkpart primary ext4 1MiB 100% - sleep 1 - else - parted "$diskvar" mklabel msdos - parted "$diskvar" mkpart primary ext4 1MiB 100% - sleep 1 - fi -} - if [ -d /sys/firmware/efi ]; then #Η αρχική συνθήκη παραμένει ίδια echo echo -e "${IYellow} Χρησιμοποιείς PC με UEFI${NC}"; echo sleep 1 - UEFI #Συνάρτηση για UEFI, αν προστεθεί sd? ή nvme? (line 311-333) + parted "$diskvar" mklabel gpt + parted "$diskvar" mkpart ESP fat32 1MiB 513MiB + parted "$diskvar" mkpart primary ext4 513MiB 100% + disknumber="1" # Η τιμή 1 γιατί θέλουμε το 1ο partition + mkfs.fat -F32 "$diskvar""$diskletter""$disknumber" + disknumber="2" # Στο δεύτερο partition κάνει mount το /mnt στην filesystem. + filesystems + disknumber="1" # Προσοχή οι γραμμές 646-647 αν μπουν πάνω από την filesystem υπάρχει πρόβλημα στο boot. + mkdir "/mnt/boot" + mount "$diskvar""$diskletter""$disknumber" "/mnt/boot" + disknumber="2" # Θα χρειαστεί στο swapfile το δεύτερο partition + sleep 1 else echo echo -e "${IYellow} Χρησιμοποιείς PC με BIOS${NC}"; echo sleep 1 - #Συνάρτηση για BIOS, αν προστεθεί sd? ή nvme? (line 334-348) - ########## Υποστηριξη GPT για BIOS συστήματα ########## - echo -e "${IYellow}Θα θέλατε GPT Partition scheme ή MBR${NC}" + ########## Υποστηριξη GPT για BIOS συστήματα ########## + echo + echo -e "${IYellow}Θα θέλατε GPT Partition scheme ή MBR${NC}" echo PS3="Επιλογή partition scheme: " options=("MBR" "GPT") @@ -685,24 +716,16 @@ else "MBR") parted "$diskvar" mklabel msdos parted "$diskvar" mkpart primary ext4 1MiB 100% - if [[ "$diskvar" = *"/dev/sd"[a-z]* ]]; then - disknumber="1" - else - disknumber="p1" - fi + disknumber="1" filesystems break ;; "GPT") + disknumber="2" parted "$diskvar" mklabel gpt parted "$diskvar" mkpart primary 1 3 parted "$diskvar" set 1 bios_grub on parted "$diskvar" mkpart primary ext4 3MiB 100% - if [[ "$diskvar" = *"/dev/sd"[a-z]* ]]; then - disknumber="2" - else - disknumber="p2" - fi filesystems break ;; @@ -710,18 +733,14 @@ else esac done fi + sleep 1 echo -echo echo '--------------------------------------------------------' echo -e "${IGreen} 4 - Ανανέωση πηγών λογισμικού (Mirrors)${NC} " echo '--------------------------------------------------------' -pacman -Syy -#pacman -S --noconfirm reflector #απενεργοποίηση λόγω bug του Reflector -#reflector --latest 10 --protocol http --protocol https --sort rate --save /etc/pacman.d/mirrorlist -#pacman -Syy sleep 1 -echo +pacman -Syy echo echo '--------------------------------------------------------' echo -e "${IGreen} 5 - Εγκατάσταση της Βάσης του Arch Linux${NC} " @@ -731,20 +750,26 @@ echo '--------------------------------------------------------' sleep 2 pacstrap /mnt base base-devel linux linux-firmware dhcpcd "$fsprogs" echo -echo echo '--------------------------------------------------------' echo -e "${IGreen} 6 - Ολοκληρώθηκε η βασική εγκατάσταση του Arch Linux${NC}" echo ' ' echo ' Τώρα θα γίνει είσοδος στο εγκατεστημένο Arch Linux ' echo '--------------------------------------------------------' sleep 1 +# Μεταβλητές που χρειάζονται όταν το file_format="btrfs" στο arch-chroot +if [[ "$file_format" == "btrfs" ]]; then + export file_format="$file_format" + export diskvar="$diskvar" + export disknumber="$disknumber" + export diskletter="$diskletter" +fi cp archon.sh /mnt/archon.sh genfstab -U /mnt >> /mnt/etc/fstab arch-chroot /mnt ./archon.sh --stage chroot -echo +rm /mnt/archon.sh #διαγραφή του script από το / του συστήματος echo echo '--------------------------------------------------------' -echo -e "${IGreen} Τέλος εγκατάστασης${NC} " +echo -e "${IGreen} Τέλος εγκατάστασης${NC} " echo ' Μπορείτε να επανεκκινήσετε το σύστημά σας ' echo '--------------------------------------------------------' sleep 5