GNU Guix — GNU Guix
Wersja stabilna | 1.3.0 / 11 maja 2021
|
---|---|
Magazyn | |
Napisane w | Schemat Guile , C++ ( rdzeń Nix ) |
Licencja | GPLv3+ |
Strona internetowa | guix |
GNU Guix ( / ɡ iː 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ż
- System GNU Guix
- Debian GNU/Hurd
- Porównanie dystrybucji Linuksa
- NixOS – podobny system operacyjny, który zainspirował GNU Guix