Εισαγωγή στο Guix, μια ξεχωριστή διανομή.

Είμαστε τυχεροί σήμερα να έχουμε απεριόριστες επιλογές για την διανομή/distro που προτιμάμε να βάλουμε στο μηχάνημα μας. Είμαστε άτυχοι στο γεγονός ότι το 99% από τις επιλογές που έχουμε είναι preconfiguration από Debian/Arch/Fedora.

Δεν υπάρχουν διανομές σήμερα που λύνουν κοινά προβλήματα που έχουν οι παραπάνω διανομές, απλά παίρνουν τα από πάνω ως βάση και προσφέρουν αισθητικές αλλαγές, ή ένα πιο εύκολο installation process, ή καβγάδες για τα init systems.

Και εδώ έρχεται το θέμα μας σήμερα, μια διανομή που βρήκα που μου άλλαξε την γνώμη μου για αυτήν την σημερινή linux δυστοπία, μια διανομή που θα σου αλλάξει το τρόπο που βλέπεις το σύστημα σου, το Guix. Τι προσφέρει όμως το Guix που οι παραπάνω 3 διανομές δεν προσφέρουν?
image

Το Guix πρώτα από όλα είναι ένα system configuration tool, σου δίνει την δυνατότητα να κατεβάζεις προγράμματα αλλά και ενα ΟΛΟΚΛΗΡΟ GNU/Linux περιβάλλον!

Για να είμαι πιο σωστός, θα πρέπει να πω πως είναι ένα functional package manager, όπως το Νix

Αυτο το “functional” μοντέλο του σιγουρεύει ότι ο,τι αλλαγές κάνεις στο configuration/διαμόρφωση συστήματος σου θα έχει το ίδιο αποτέλεσμα άμα το το βάλεις στο νέο σύστημα (περισσότερα σε αυτό σε λίγο) με την δυνατότητα να γυρίσεις “πίσω” το σύστημα σου άμα κάνεις “χαζομάρα”, κάτι που το κάνει ιδανικό ακόμα και για αρχάριους.

Δεν θα γινόταν να μιλήσω για Guix, χωρίς να αναφέρω την ιδεολογία από πίσω του. Το Guix είναι προτζεκτ του Free Software Foundation, σε αντίθεση με τις διανομές από πάνω, έρχεται μόνο με λογισμικό που σέβεται τα δικαιώματα του χρήστη. Δεν θα βρεις spyware ή proprietary software εδώ. Είναι μια διανομή που ΠΡΑΓΜΑΤΙΚΑ σέβεται την ελευθερία σου.

Πώς ακριβώς όμως λειτουργεί?
image
Στο Guix όταν κατεβάζεις λογισμικό, δεν πηγαίνει στο /bin όπως σε άλλες διανομές. Χρησιμοποιεί το /gnu/store όπου μόνο o guix daemon εχει write access, και τα συνδέει με διαφορετικά profiles

Σε updates/αλλαγές κάνει νέα προφιλ, και έχεις την δυνατότητα να κάνεις roll-back το σύστημα σου σε παλιό προφιλ, άμα κατι πάει στραβα.

Κάτι που το κάνει ΙΔΑΝΙΚΟ ακόμα και για αρχάριους.

Στο Guix μπορείς να κατεβάζεις λογισμίκο μόνο για συγκεκριμένους users και όχι για όλο το σύστημα επίσης. Για να κατεβάσεις λογισμικό απλά τρέχεις

guix install <your-desired-software-εδω>

προσθέτεις sudo άμα το θες system wide, αλλά η μαγεία γίνεται αλλιώς. Μπορείς να γράψεις πως ακριβώς θες το συστημα σου με guile scheme!

Ας δούμε ένα απλό παράδειγμα:

;; Εδω βλέπουμε ένα απλό configuration
;; Βγαίνει αυτόματα απο το graphical installer
(use-modules (gnu) (nongnu packages linux))
(use-service-modules cups desktop networking ssh xorg)

;; Εχεις την επιλογή να διαλέξεις τι kernel θες
;; αλλά και firmware
;; Το σωστό θα ήταν να βάλεις linux-libre
;; Αλλά λόγω περιορισμένου hardware πολλοί χρειάζονται το non-free kernel
(operating-system
 (kernel linux)
 (firmware (list linux-firmware))

;; Εδω μπόρεις να βάλεις το ελληνικό locale επισης
 (locale "en_US.utf8")

;; Θέτεις την ώρα
 (timezone "Europe/Athens")

;; Εδω βάζω πως θέλω το πληκτρολόγιο μου
;; Πάντα αλλάζω το ctrl με caps
  (keyboard-layout (keyboard-layout "us"
				     #:options
				     '("ctrl:nocaps")))
;; Βάζεις το όνομα του συστήματος
 (host-name "guix-linuxforumGR")

 ;; Εδώ βάζεις τους users.
 (users (cons* (user-account
                (name "apollo")
                (comment "Apollo")
                (group "users")
                (home-directory "/home/apollo")
                (supplementary-groups '("wheel" "netdev" "audio" "video")))
               %base-user-accounts))

;; Εδώ βάζουμε το λογισμικό που θέλουμε να βάλουμε σε όλους τους users
;; Εγώ τρέχω κυριώς exwm, αλλα εδώ μπορείς να βάλεις ότι θες. 'Οπως
;; Firefox, picom, python, flatpak κτλπ
(packages (append (map specification->package
			  `("emacs-exwm"  
			    "emacs-desktop-environment"
			    "xrandr"
                "qtile"
                "alacritty"
                "alsa-utils"
                "bluez-alsa"
                "emacs-vterm"
                "emacs-multi-vterm"
                "git"))
		     %base-packages))

;; Εδω βάζουμε τα services που θέλουμε να τρέχουνε
   (services
    (append (list (service gnome-desktop-service-type)		 
		  (service openssh-service-type)

;; Βαζούμε το bluetooth σε auto-enable
		  (bluetooth-service #:auto-enable?
				     #t)
   ;;Libvirt για vms
		  (service libvirt-service-type
			   (libvirt-configuration
			    (unix-sock-group "libvirt")
			    (tls-port "16555")))

		  (service cups-service-type)
		  (set-xorg-configuration
		   (xorg-configuration (keyboard-layout keyboard-layout))))
	    ;; Αυτη τη λίστα την βάζουμε
	    ;; στο:
	    %desktop-services))))

;; Εδω βάζεις την λίστα με το file system σου
;; το UUID  το παίρνεις με την εντολή blkid στο terminal
 (file-systems (cons* (file-system
                       (mount-point "/boot/efi")
                       (device (uuid "021E-83B3"
                                     'fat32))
                       (type "vfat"))
                      (file-system
                       (mount-point "/")
                       (device (uuid
                                "your--uuid"
                                'ext4))
                       (type "ext4")) %base-file-systems)))

Οι περιορισμοί για το τι μπορείς να κάνεις με το config σου περιορίζονται μόνο από την φαντασία σου.

Το game changer είναι ότι μπορείς να πάρεις το config που έχεις ήδη χτίσει, να το βάλεις σε νέο hardware και να έχεις το ίδιο ακριβώς σύστημα! ή απλα να έχεις ένα git repo να κανεις sync το σύστημα σου σε διαφορετικά μηχανήματα.

Επίσης το guix σε σύγκριση με άλλες διανομές, έχει απίστευτα καλό documentation
Official website
Eχει ένα πολύ καλα γραμμένο manual
Αλλά επίσης ενα ύπεροχο cookbook οπου θα βρεις real-life examples και χρήσεις του guix, μαζί με οδηγίες για το πως να μαθεις scheme

Side-note:
Σαν κοινότητα του Linux, ιδιαίτερα εδώ που βλέπω πολλούς αρχαρίους, θα πρέπει να τους μάθουμε για λογισμικά που σέβονται την ελευθερία τους και κάνουν την ζωή τους πιο εύκολη. Να τους μιλάμε για τις αξίες από copyleft licenses οπως το GPL3, και όχι για π.χ systemD vs systemE όπως έβλεπα να γίνεται .

9 «Μου αρέσει»

Έχει αρκετό ενδιαφέρον αυτό που μας παρουσίασες. Παρ’ όλα αυτά, απ όσο έχω καταλάβει, δεν έχει μεγάλη δημοτικότητα το guix. Πού οφείλεται αυτό;

Επίσης, αναφέρθηκες σε nix. Έχεις εμπειρία; Αν ναι, θα ήθελες να μας πεις 2 λόγια και γι αυτό, ή ακόμα καλύτερα ένα ακόμη αρθράκι να το δούμε και αυτό λίγο πιο εμπεριστατωμένα;

Σε κάθε περίπτωση όταν προκύψει ελεύθερος χρόνος (γελάω!) θα το δοκιμάσω έστω σε ένα vm, μήπως και με βολέψει και το χρησιμοποιήσω σε πιο μόνιμη βάση.

2 «Μου αρέσει»

Ευχαριστούμε για το άρθρο. Από τη στιγμή που είδα το πρώτο μου Gemfile (ένα αρχείο που περιγράφει τις βιβλιοθήκες που θέλει μια εφαρμογή σε Ruby On Rails όπως πχ αυτό εδώ το λογισμικό του φόρουμ αντίστοιχα υπάρχει το Cargo.toml για Rust) ονειρεύτηκα μια διανομή που θα πέρναγες το λογισμικό που θέλεις σε ένα αρχείο.

Και μετά ήρθε το Guix/Νιχ αλλά ποτέ δεν κάθισα να ασχοληθώ. Σαν ένα ενδιάμεσο στάδιο πόσο νόημα θα είχε να περάσεις μια διανομή σε Nix για τη διαχείριση των πακέτων; Μια άλλη ερώτηση. Πόσο immutable είναι το σύστημα και αν υπάρχει τρόπος επαλήθευσης του.

Η άγνοια της διανομής και η μη προώθηση της από κόσμο που θεωρητικά και στα λόγια είναι υπέρ του Σταλλμαν, και ενάντια σε κάποιο συγκεκριμένο λογισμικό διαχείρισης και εκκίνησης, πραγματικά με έχει εντυπωσιάσει και μένα. Μάλλον, κανένας σήμερα δε θέλει να ξεμάθει ή να μάθει νέα πράγματα από την αρχή. Και να το παίζεις επαναστάτης είναι μάλλον ευκολότερο :innocent: Τεσπά, συγνώμη για την παρένθεση ας συζητήσουμε για τα σοβαρά το Guix.

2 «Μου αρέσει»

Η δημοτικότητα είναι αρκετά υψηλή άμα πάρουμε το γεγονός ότι είναι viable option σαν distro απο το τέλη του 2020(πριν απο όσα εχω δει συνιστούσαν να έχεις guix ως package manager σε άλλο distro). Επίσης, το official channel δεν έχει την ποικιλία που έχει κάτι σαν AUR, αλλά σε αντίθεση με αυτό ότι μπαίνει είναι ελεγμένο, και προσπαθούν να έχουν μόνο ελεύθερο λογισμικό, Κάποια βασικά πράγματα που ίσως είναι καλά ίσως όχι:

  • Το official iso στην σελίδα έρχεται με το linux-libre kernel, και δεν έχει firmware για proprietary wifi cards που έχουν πολλά λαπτοπ σήμερα. Κάτι που αποθαρρύνει νέους χρήστες να το δοκιμάσουν
    • Μπορείς να βάλεις το κανονικό linux-kernel όπως έκανα στο παραδείγμα πάνω (περισσοτερα κατω)
  • Ίσως χρειαστεί να χρησιμοποιήσεις flatpak ή nonguix channel για κάτι που δεν το έχουν πακετάρει ακόμα στο official repo ή proprietary software

Τώρα σε σύγκριση με το nix, δεν το έχω δοκιμάσει γιατί δεν μου αρέσει η γλώσσα, έχει πολλά limitations, και παρόλο που έχει μεγαλύτερο community, το documentation δεν είναι καλο φτιαγμένο.

Η guile scheme ειναι general purposed και μόλις την μάθεις μπορείς να την χρησιμοποιήσεις σε δικά σου προτζεκτ, όποτε με το μάθεις Guix, έχεις μάθει μια από τις πιο όμορφες γλώσσες προγραμματισμού.

Γιατί να διαλέξεις Guix αντί για Nix:

  • Θες να μάθεις scheme ή απλά την προτιμάς απο nix

  • Ενδιαφέρεσαι για την ελευθερία σου, και θα κάνεις κάποιες μικρές θυσίες για αυτό, όπως να έχεις
    πρόσβαση σε περιορισμένο, μόνο ελεύθερο λογισμικό, και στην χειρότερη άμα κάτι το έχεις ανάγκη(όπως wifi drivers) θα το προσθέσεις μόνος σου(όπως έκανα πάνω στο παράδειγμα)

  • Εχει τέλειο integration με emacs, πολλά απο τα emacs-packages μπορείς να τα κατεβάσεις με guix

  • Το community. Mέχρι τώρα το community και τα άτομα γύρω απο το guix είναι πραγματικά παθιασμένα με αυτό, και πρόθυμα για tech support. Σε αντίθεση με άλλα communities, άμα έχεις κάποιο πρόβλημα θα σε βοηθήσουν, και δεν θα φας RTFM απευθείας :laughing:

  • Είναι πιο εύκολο να συνεισφέρεις, είναι καλοδεχούμενοι σε εθελοντές και ακόμα και άμα δεν έχεις κάνει την καλύτερη δουλειά ας πούμε με το να “πακετάρεις” κάτι, θα σε βοηθήσουν. Και έχει περισσότερα resources να μάθεις.

Πως να ξεκινήσεις με Guix

Ακολούθησε τις οδηγίες εδω για να το κατεβάσεις είτε σε vm είτε σαν δεύτερο distro στο σύστημα σου(το συνιστώ γιατί καλό θα ήταν να δοκιμάσεις το το bootloader config σε κανονικό σύστημα) με το κανονικό linux kernel. Και τσέκαρε το resources από πάνω.

3 «Μου αρέσει»

Your dreams, have become a reality :smiley:

Αυτό εδω νομίζω καλύπτει τις ερωτήσεις καλύτερα από ότι μπορώ εγώ εδώ. Αξίζει να το δοκιμάσεις και θα ήθελα να δω την γνώμη σου μια μέρα για αυτό!

Από όσα βλέπω για εσένα μοιάζει κομμένο και ραμμένο στα μέτρα σου μιας και έχεις αγάπη με scheme

1 «Μου αρέσει»

@ThanosApollo επιτρέπεται να κάνω μία ερώτηση;
Μπορούμε να εγκαταστήσουμε το Guix σε κινητό μέσα από την εφαρμογή Termux;

1 «Μου αρέσει»

Ναι ! (Περίπου?)
Αλλά δεν το έχω δοκιμάσει ακομα :laughing:

1 «Μου αρέσει»

Αυτά είναι νέα…@ThanosApollo
Ευχαριστούμε!!!

1 «Μου αρέσει»

Eίχα δει ένα βίντεο κάποια στιγμή για το guix αλλά είχα μείνει με την εντύπωση οτι δεν πέρνει nonfree kernel και firmware και νομιζα δεν θα μπορούσα να το χρησιμοποιήσω. Ευχαριστούμε @ThanosApollo .

Το guix προέρχεται από το nix και χρησιμοποιεί την ίδιο λογική package management. Όλα το sw υπάρχει σε ένα store, κάθε έκδοση/εκδοχή πακέτου “εγκαθίσταται” σε ξεχωριστό κατάλογο που το όνομά του περιέχει hash όλων των εξαρτήσεων στις οποίες βασίστηκε το build. Δεν αντικαθίσταται ποτέ ένα αρχείο από ένα άλλο μέσα στο store κατά την αναβάθμιση - ναι, για τους φίλους των buzzwords η λειτουργία του nix/guix store είναι immutable. Η νέα έκδοση ενός πακέτου εγκαθίσταται δίπλα στην παλιά , ενεργοποιείται και μπορεί να γίνει rollback πολύ εύκολα. Αυτό το χαρακτηριστικό, σε συνδυασμό με την πιστή αναδημιουργία όλου του συστήματος από το config του κάνει τις διανομές αυτές να ξεχωρίζουν.
Η μεγάλη διαφορά των 2 είναι ότι το guix συνειδητά χρησιμοποιεί guile scheme (για την ακρίβεια dsls φτιαγμένες με guile) για την ρύθμιση κάθε πλευράς του συστήματος, από το init/service manager (shepherd) ως την ρύθμιση sw ή και συνδυασμού sw, αφού έχουν γράψει mappings για αρκετά ήδη υπάρχοντα αρχεία ρυθμίσεων.
Το κόστος για τις καταπληκτικές δυνατότητες αυτών των package managers και διανομών είναι κυρίως ότι α) η λειτουργία τους είναι αρκετά πιο αργή σε σχέση με τους παραδοσιακούς package managers και β) ότι απαιτούν μια εντελώς διαφορετική λογική χειρισμού απ’ ότι έχουμε συνηθίσει. Το πρώτο σίγουρα μπορεί κάποιος να το ξεπεράσει (απόδειξη όσοι χρησιμοποιούν “source-based” διανομές :stuck_out_tongue: ), το δεύτερο είναι μάλλον το δυσκολότερο.
Αν κάποιος ενδιαφέρεται για επίσης διαφορετικό, που ξεκινά από άλλη αφετηρία στο package management, ας ρίξει μια ματιά στο -πειραματικό- distri του Michael Stapelberg.

7 «Μου αρέσει»

Τι είπες τώρα ; Χρόνια σχεδίαζα στο μυαλό μου πως θα ήταν ιδανικό με ένα text config file να σεταρεις μια διανομή στα όλα του και τώρα αυτό μου λες ότι έγινε πραγματικότητα;! Τρέχω να το δοκιμάσω μες τον ελεύθερο χρόνο του ΣΚ. Μου άνοιξες δουλειές με την καλή έννοια ! :innocent::crazy_face:

5 «Μου αρέσει»