GNU Guix — GNU Guix

GNU Guix
Guix logo.svg
Wersja stabilna
1.3.0 / 11 maja 2021 ; 5 miesięcy temu ( 11 maja 2021 )
Magazyn
Napisane w Schemat Guile , C++ ( rdzeń Nix )
Licencja GPLv3+
Strona internetowa guix .gnu .org / pl /

GNU Guix ( / ɡ k s / ) jest funkcjonalnym, wieloplatformowym menedżerem pakietów i narzędziem do tworzenia instancji i zarządzania systemami operacyjnymi typu Unix, opartymi na menedżerze pakietów Nix . Receptury konfiguracji i pakietów są napisane w Guile Scheme . GNU Guix jest domyślnym menedżerem pakietów w dystrybucji systemu GNU Guix .

W odróżnieniu od tradycyjnych menedżerów pakietów , Guix (podobnie jak Nix) wykorzystuje czysto funkcjonalny model wdrażania, w którym oprogramowanie jest instalowane w unikalnych katalogach generowanych przez skróty kryptograficzne . Wszystkie zależności dla każdego oprogramowania są zawarte w każdym hashu. To rozwiązuje problem piekła zależności , umożliwia współistnienie wielu wersji tego samego oprogramowania i sprawia, że ​​pakiety są przenośne i odtwarzalne . Wykonywanie obliczeń naukowych w układzie Guixa zostało zaproponowane jako obiecująca odpowiedź na kryzys powtarzalności .

Rozwój GNU Guix jest spleciony z GNU Guix System , instalowalną dystrybucją systemu operacyjnego wykorzystującą jądro Linux-libre i system init GNU Shepherd .

Główne cechy

Pakiety Guix są definiowane za pomocą funkcjonalnych interfejsów API programu Guile Scheme, zaprojektowanych specjalnie do zarządzania pakietami. Zależności są śledzone bezpośrednio w tym języku za pomocą specjalnych wartości zwanych „pochodnymi”, które są oceniane przez demona Guix leniwie . Guix automatycznie śledzi te odniesienia, dzięki czemu zainstalowane pakiety mogą być usuwane ze śmieci, gdy żaden inny pakiet od nich nie zależy. Kosztem większych wymagań dotyczących pamięci masowej wszystkie aktualizacje w Guix są zarówno atomowe, jak i można je wycofać. Funkcja wycofywania Guixa jest dziedziczona z projektu Nix i nie znajduje się w żadnym z natywnych menedżerów pakietów popularnych dystrybucji Linuksa, takich jak Debian i jego pochodne, Arch Linux i jego pochodne, ani w innych głównych dystrybucjach, takich jak Fedora , CentOS lub OpenSUSE. Menedżer pakietów Guix może być jednak używany w takich dystrybucjach i jest dostępny dla Debiana i Paraboli. Dzięki temu wielu użytkowników może bezpiecznie instalować oprogramowanie w tym samym systemie bez uprawnień administratora.

W porównaniu do tradycyjnych menedżerów pakietów, sklepy z pakietami Guix mogą się znacznie powiększyć i dlatego wymagają większej przepustowości; chociaż w porównaniu do rozwiązań kontenerowych (takich jak Docker), które są również powszechnie stosowane do rozwiązywania piekła zależności, Guix jest szczuplejszy i stosuje się do praktyk takich jak Nie powtarzaj się i Pojedyncze źródło prawdy . Jeśli użytkownik zdecyduje się budować wszystko ze źródła, wymagana jest jeszcze większa przestrzeń dyskowa i przepustowość.

Sklep

Odziedziczona po projekcie Nixa, większość zawartości menedżera pakietów jest przechowywana w katalogu /gnu/store, w którym tylko demon Guix ma dostęp do zapisu. Osiąga się to za pomocą wyspecjalizowanych montowań wiązań, w których Store jako system plików jest montowany tylko do odczytu , co uniemożliwia ingerencję nawet ze strony użytkownika root, podczas gdy demon Guix ponownie montuje Store jako do odczytu/zapisu we własnej prywatnej przestrzeni nazw. Guix rozmawia z tym demonem, aby budować rzeczy lub sprowadzać substytuty, które są przechowywane w sklepie. Użytkownicy są zniechęceni do ręcznego dotykania sklepu przez ponowne zamontowanie go jako nadającego się do zapisu, ponieważ narusza to cały cel sklepu.

Zbieranie śmieci

Guix – podobnie jak Nix – ma wbudowane urządzenia do zbierania śmieci, które pomagają przycinać martwe przedmioty w sklepie i zachować te, które są żywe .

Definicje pakietów

Oto przykład definicji pakietu dla pakietu hello:

(define-public hello
  (package
   (name "hello")
   (version "2.10")
   (source (origin
            (method url-fetch)
            (uri (string-append "mirror://gnu/hello/hello-" version
                                ".tar.gz"))
            (sha256
             (base32
              "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
   (build-system gnu-build-system)
   (synopsis "Hello, GNU world: An example GNU package")
   (description
    "GNU Hello prints the message \"Hello, world!\" and then exits.  It
 serves as an example of standard GNU coding practices.  As such, it supports
 command-line arguments, multiple languages, and so on.")
   (home-page "https://www.gnu.org/software/hello/")
   (license gpl3+)))

Jest napisany przy użyciu Guile. Receptury pakietów można łatwo przeglądać (uruchamiając np. guix edit hello ) i zmieniać w Guix, dzięki czemu system jest przejrzysty i bardzo łatwy do zhakowania.

Aktualizacje transakcyjne

Odziedziczone z projektu Nix, wszelkie manipulacje elementami sklepu są od siebie niezależne, a katalogi sklepu zaczynają się od zakodowanego w base32 hasha kodu źródłowego pochodnego wraz z jego danymi wejściowymi.

Profile

Pakiet Guix wykorzystuje generacje profili, które są zbiorem dowiązań symbolicznych do określonych elementów sklepu, łącznie z tym, co użytkownik zainstalował w profilu. Za każdym razem, gdy pakiet jest instalowany lub usuwany, zostanie zbudowana nowa generacja.

Np. profil użytkownika, który zainstalował tylko GNU Hello, zawiera odnośniki do pozycji w sklepie, która zawiera wersję hello zainstalowaną z aktualnie używanym guixem.

Np. w wersji c087a90e06d7b9451f802323e24deb1862a21e0f guixa odpowiada to następującemu elementowi: /gnu/store/md2plii4g5sk66wg9cgwc964l3xwhrm9-hello-2.10 (zbudowany z powyższego przepisu).

Oprócz dowiązań symbolicznych, każda kompilacja profilu guix zawiera również połączenie wszystkich podręczników informacyjnych, stron podręcznika, ikon, czcionek itp., dzięki czemu użytkownik może przeglądać dokumentację i mieć dostęp do wszystkich zainstalowanych ikon i czcionek.

Domyślne dowiązania symboliczne do generacji profili są przechowywane w /var/guix w systemie plików.

Wiele profili użytkowników

Użytkownik może utworzyć dowolną liczbę profili, wywołując pakiet guix -p POLECENIE NAZWA-PROFILU . W bieżącym katalogu zostanie utworzony nowy katalog z nazwą profilu oraz dowiązaniami symbolicznymi generowania profilu.

Wycofanie

Pakiet Guix umożliwia natychmiastowy powrót do poprzedniej generacji profilu poprzez zmianę dowiązania symbolicznego na wcześniejszą generację profilu. Profile są również przechowywane w sklepie, np. ten element to profil zawierający hello powyżej: /gnu/store/b4wipjlsapvnijmbawl7sh76087vpl4n-profile (zbudowany i aktywowany podczas uruchamiania guix install hello ).

Środowisko

Środowisko Guix umożliwia użytkownikowi łatwe wejście do środowiska, w którym znajdują się wszystkie niezbędne pakiety do tworzenia oprogramowania bez zapychania domyślnego profilu użytkownika zależnościami dla wielu projektów.

Np. uruchomienie środowiska guix hello wprowadza do środowiska jednorazowego, w którym znajduje się wszystko, co jest potrzebne do skompilowania hello na guix (gcc, guile, itp.).

Trwałe środowisko programistyczne

Jeśli chcesz trwałego środowiska gc-rooted, które nie jest śmieciami zbieranymi przy następnym uruchomieniu guixa gc, możesz utworzyć root:

Np. uruchomienie środowiska guix --root=hello-root hello otwiera środowisko, w którym jest obecne wszystko, co jest potrzebne do skompilowania guixa (gcc, guile, itp.) i zarejestrowane jako root w bieżącym katalogu (poprzez dowiązanie symboliczne do elementów w sklepie) .

Pakiet

Pakiet Guix umożliwia użytkownikowi łączenie elementów magazynu i wyprowadzanie ich jako binarnego obrazu dockera, relokowalnego archiwum tar lub pliku binarnego squashfs.

Wykres

Wykres Guixa umożliwia użytkownikowi przeglądanie różnych wykresów pakietów i ich zależności.

System Guix (system operacyjny)

GNU Guix System używa Guixa jako swojego menedżera pakietów i systemu konfiguracji, podobnie jak NixOS używa Nix .

Historia

Projekt GNU ogłosił w listopadzie 2012 roku pierwsze wydanie GNU Guix, funkcjonalnego menedżera pakietów opartego na Nix, który udostępnia między innymi Guile Scheme APIs . Projekt rozpoczął w czerwcu 2012 roku Ludovic Courtès, jeden z hakerów GNU Guile. 20 sierpnia 2015 ogłoszono, że Guix został przeniesiony na GNU Hurd .

Wydania

Projekt nie ma ustalonego harmonogramu wydań i do tej pory był publikowany co około 6 miesięcy.

Wersja Zapowiedź Obsługiwane architektury Pakiety
0,1 (alfa) Courtès, Ludovic (18 stycznia 2013). „GNU Guix 0.1 wydany (alfa)” . i686, x86_64 ~150
0,2 (alfa) Courtès, Ludovic (12 maja 2013). „GNU Guix 0.2 wydany (alfa)” . ~400
0,3 Courtès, Ludovic (17.07.2013). "GNU Guix 0.3 wydany" . ~430
0,4 Courtès, Ludovic (27 września 2013). „GNU Guix 0.4 wydany” . ~490
0,5 Courtès, Ludovic (11.12.2013). "GNU Guix 0.5 wydany" . ~600
0,6 Courtès, Ludovic (9 kwietnia 2014). „Wypuszczono GNU Guix 0.6” . ~691
0,7 Courtès, Ludovic (25.07.2014). „Wypuszczono GNU Guix 0.7” . ~825
0,8 Courtès, Ludovic (18 listopada 2014). "GNU Guix 0.8 wydany" . i686, x86_64, mips64el ~987
0.8.1 Courtès, Ludovic (29.01.2015). „Wypuszczono GNU Guix 0.8.1” . i686, x86_64, mips64el, armv7 ~1151
0.8.2 Courtès, Ludovic (14 maja 2015). „Wypuszczono GNU Guix 0.8.2” . ~1869
0.8.3 Courtès, Ludovic (22.07.2015). „GNU Guix 0.8.3 wydany” . ~2048
0.9.0 Courtès, Ludovic (5 listopada 2015). „Wypuszczono GNU Guix 0.9.0” . ~2591
0.10.0 Courtès, Ludovic (29 marca 2016). „Wypuszczono GNU Guix i GuixSD 0.10.0” . ~3230
0.11.0 Courtès, Ludovic (3 sierpnia 2016). „Wydanie GNU Guix i GuixSD 0.11.0” . ~3714
0.12.0 Wurmus, Ricardo (21.12.2016). „Udostępniono GNU Guix i GuixSD 0.12.0” . ~4567
0,13,0 Courtès, Ludovic (22 maja 2017). „Wydanie GNU Guix i GuixSD 0.13.0” . i686, x86_64, mips64el, armv7, aarch64 ~5407
0.14.0 Courtès, Ludovic (7 grudnia 2017 r.). „Wypuszczono GNU Guix i GuixSD 0.14.0” . ~6618
0.15.0 Courtès, Ludovic (6 lipca 2018 r.). „Wypuszczono GNU Guix i GuixSD 0.15.0” . ~7857
0,16,0 Courtès, Ludovic (6 grudnia 2018 r.). „Wydanie GNU Guix i GuixSD 0.16.0” . ~8715
1.0.0 Courtès, Ludovic (2 maja 2019). „Wydanie GNU Guix 1.0.0” . ~9712
1.0.1 Courtès, Ludovic (19 maja 2019). „Wypuszczono GNU Guix 1.0.1” . ~9771
1.1.0 Courtès, Ludovic (15 kwietnia 2020 r.). „Wydanie GNU Guix 1.1.0” . i686, x86_64, armv7, aarch64 ~13161
1.2.0 Courtès, Ludovic (23 listopada 2020 r.). „Wydanie GNU Guix 1.2.0” . ~15333
1.3.0 Courtès, Ludovic (11 maja 2021). „Wydanie GNU Guix 1.3.0” . i686, x86_64, powerpc64le, armv7, aarch64 ~17262

Zobacz też

Bibliografia

Zewnętrzne linki