Instalacja kolejnego systemu Guix
ŹRÓDŁO Aby zainstalować system Guix nie potrzebuję używać graficznego instalatora. Jednym z moich narzędzi jest system Guix zainstalowany na pamięci przenośnej.
Dzięki temu mogę instalować kolejne systemy Guix względnie trywialnie przez skopiowanie jednego pliku i przygotowanie partycji.
Przygotowanie modułu instalacyjnego
Na wspomnianej pamięci przenośnej mam kopię repozytorium kanału Deployment, w którym znajdują się moduły definiujące konfiguracje systemów.
[ŹRÓDŁO] Podręcznik Guile o ładowaniu modułów
W repozytorium Deployment kopiuję konfigurację przenośnego systemu, która jest względnie uniwersalna w porównaniu do innych, do nowego pliku o nazwie odpowiadającej nazwie nowego systemu.
$ cp deployment/systems/mcdowell.scm deployment/systems/cokolwiek.scm
W nowo skopiowanym pliku zmieniam nazwę modułu i nazwę systemu.
(define-module (deployment systems cokolwiek)
#:use-module ( (gnu packages package-management)
#:prefix gnu:packages:package-management:)
#:use-module ( (gnu services)
#:prefix gnu:services:)
#:use-module ( (gnu services base)
#:prefix gnu:services:base:)
…
#:use-module ( (users id1000)
#:prefix users:id1000:))
(define system-name
"cokolwiek")
Zanim zapomnę, zapisuję i wypycham te zmiany do kanonicznego repozytorium.
$ git add .
$ git commit -am 'systems: add cokolwiek system'
[master 45ea36f] systems: add cokolwiek system
1 file changed, 105 insertions(+)
create mode 100644 deployment/systems/cokolwiek.scm
$ git push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Wymienianie obiektów: 8, gotowe.
Zliczanie obiektów: 100% (8/8), gotowe.
Kompresja delt z użyciem do 32 wątków
Kompresowanie obiektów: 100% (4/4), gotowe.
Zapisywanie obiektów: 100% (5/5), 2.07 KiB | 2.07 MiB/s, gotowe.
Total 5 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
To ssh://marekpasnikowski.pl:23/deployment.git
ade0553..45ea36f master -> master
Przygotowanie partycji
ŹRÓDŁO Aby zainstalować nowy system, konieczne jest przygotowanie magazynu danych. Mój sposób instalacji polega wydzieleniu partycji w kolejności od największej do najmniejszej i dopełnieniu pustej przestrzeni pamięcią wymiany. Podstawową ideą jest wydzielenie tylko połowy pamięci na partycję główną, aby zachować dużą część tranzystorów pamięci jako nadmiar przedłużający żywotność całego urządzenia magazynowego.
Najpierw upewniam się, pod jakim identyfikatorem jest magazyn danych.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931,5G 0 disk
sdb 8:16 1 114,6G 0 disk
├─sdb1 8:17 1 64G 0 part /gnu/store
│ /
├─sdb2 8:18 1 1G 0 part /boot
├─sdb3 8:19 1 128M 0 part
└─sdb4 8:20 1 49,5G 0 part [SWAP]
Używam programu cfdisk
, aby zbudować odpowiednią tablicę partycji.
$ sudo cfdisk /dev/sda
Hasło:
Synchronizacja dysków.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 931,5G 0 disk
├─sda1 8:1 0 512G 0 part
├─sda2 8:2 0 1G 0 part
├─sda3 8:3 0 128M 0 part
└─sda4 8:4 0 418,4G 0 part
sdb 8:16 1 114,6G 0 disk
├─sdb1 8:17 1 64G 0 part /gnu/store
│ /
├─sdb2 8:18 1 1G 0 part /boot
├─sdb3 8:19 1 128M 0 part
└─sdb4 8:20 1 49,5G 0 part [SWAP]
Mógłbym pominąć miejsce na partycję BOOT
, ale jeśli ją skonfiguruję, to zachowam zdolność rozruchu tego magazynu danych na innych komputerach opartych na starej technologii rozruchu.
DO ZROBIENIA
Za pomocą graficznego programu gparted
ustawiam partycje analogicznie do obecnie używanego systemu.
Jedynym problemem jest niezdolność programu gparted
do nadania etykiety dla partycji rozruchowej.
Potrzebny jest do tego program fatlabel
.
Powinienem opracować listę poleceń tekstowych do etykietowania partycji.
$ sudo fatlabel /dev/sda2 COKOLWIEK
W tym momencie komputer jest przygotowany do instalacji nowego systemu.
Instalacja
ŹRÓDŁO Podręcznik Guix wskazuje na potrzebę odpowiedniego zamontowania docelowych partycji.
$ sudo mount /dev/sda1 /mnt
$ sudo herd start cow-store /mnt
herd: error: service 'cow-store' could not be found
Zakładam, że jest to przestarzała treść podręcznika i ignoruję ten błąd.
Wewnątrz repozytorium kanału Deployment wywołuję polecenie instalacyjne.
$ sudo guix system init deployment/systems/cokolwiek.scm /mnt
guix system: błąd: 'deployment/systems/cokolwiek.scm' does not return an operating system or an image
Moje moduły z definicjami systemów nie zawierają kodu wykonawczego.
Ponieważ moje próby wywołania zmiennej bezpośrednio w poleceniu guix system init
były bezskuteczne, chwilowo dopisuję wywołanie definicji systemu na końcu modułu i tym razem instalacja rusza i kończy się sukcesem.
$ sudo guix system init deployment/systems/cokolwiek.scm /mnt
Updating channel 'guix' from Git repository at 'https://git.marekpasnikowski.pl/git/guix.git'...
guix system: ostrzeżenie: pulled channel 'guix' from a mirror of https://git.guix.gnu.org/guix.git, which might be stale
Updating channel 'deployment' from Git repository at 'https://git.marekpasnikowski.pl/git/deployment.git'...
Updating channel 'guix-rust-past-crates' from Git repository at 'https://git.marekpasnikowski.pl/git/guix-rust-past-crates.git'...
guix system: ostrzeżenie: pulled channel 'guix-rust-past-crates' from a mirror of https://codeberg.org/guix/guix-rust-past-crates.git, which might be stale
Updating channel 'nonguix' from Git repository at 'https://git.marekpasnikowski.pl/git/nonguix.git'...
guix system: ostrzeżenie: pulled channel 'nonguix' from a mirror of https://gitlab.com/nonguix/nonguix, which might be stale
Updating channel 'sovereign' from Git repository at 'https://git.marekpasnikowski.pl/git/sovereign.git'...
substitute: looking for substitutes on 'http://192.168.10.3:8080'... 100.0%
substitute: looking for substitutes on 'https://substitutes.nonguix.org'... 100.0%
substitute: looking for substitutes on 'https://nonguix-proxy.ditigal.xyz/'... 100.0%
substitute: looking for substitutes on 'https://bordeaux.guix.gnu.org'... 100.0%
substitute: looking for substitutes on 'https://ci.guix.gnu.org'... 100.0%
substitute: looking for substitutes on 'http://192.168.10.3:8080'... 100.0%
substitute: looking for substitutes on 'http://192.168.10.3:8080'... 100.0%
module-import-compiled 1.5MiB 4.2MiB/s 00:00 ▕██████████████████▏ 100.0%
module-import-compiled 1.5MiB 4.4MiB/s 00:00 ▕██████████████████▏ 100.0%
building /gnu/store/j2diaxn07l1lf5p6s4md53zpays8n2ga-config.scm.drv...
building /gnu/store/f1q7isyx24lm3pzkh5h7li5xf99b12d2-git.scm.drv...
building /gnu/store/4w0c7yxg69dzvpi544zrglf2vl5fgnzj-hash.scm.drv...
building /gnu/store/2hk9waj947hgn5hqqmqp655g8h1lgxal-module-import.drv...
building /gnu/store/4vdy93jg2yr50j0mkw00v1s4aahkhvnr-module-import.drv...
building /gnu/store/pvm5a4cb65igqf12znd8x6fbk0wmbryi-compute-guix-derivation.drv...
Computing Guix derivation for 'x86_64-linux'... \
substitute: looking for substitutes on 'http://192.168.10.3:8080'... 100.0%
substitute: looking for substitutes on 'https://substitutes.nonguix.org'... 100.0%
substitute: looking for substitutes on 'https://nonguix-proxy.ditigal.xyz/'... 100.0%
substitute: looking for substitutes on 'https://bordeaux.guix.gnu.org'... 100.0%
substitute: looking for substitutes on 'https://ci.guix.gnu.org'... 100.0%
The following derivations will be built:
/gnu/store/f115kngj8fyymi5gpqn03fmiqrn0w33a-etc.drv
/gnu/store/04qiqbqh0v1vkg32d8pq8f863raygalq-activate-service.scm.drv
/gnu/store/2dabf6vlbj6kvdh7b7wcxldn8ak9rafy-activate.scm.drv
/gnu/store/6f5bq5hxm2gx04qd4frw1qmddidp80hh-provenance.drv
/gnu/store/q8ni4qmjqwr87rw3mqffma4kys5rw7sr-init.drv
/gnu/store/svb9q5i0w0xmc4gk3028m2dqi76qhra8-raw-initrd.drv
/gnu/store/89hrfinkj8sa1aizvl3wmqqlhfvqngj8-combined-initrd.drv
/gnu/store/gl7wzay96b4ynzn1acxwpmgvsavmf6f5-parameters.drv
/gnu/store/j0j1avdy377nvh4f93x05j65wjmprklc-shepherd-swap-cokolwiek-swap.scm.drv
/gnu/store/4harprlmnjsfgqwkkvi2h52ym4ay0s7n-shepherd-swap-cokolwiek-swap.go.drv
/gnu/store/zsslwylhfhxb4pld9ay6pg48lp8j7riz-shepherd-host-name.scm.drv
/gnu/store/84s79rcr5jmnic4ky4c6adg95n4kva2j-shepherd-host-name.go.drv
/gnu/store/x8ww5ib04v06jm83qjd5pkaddp79f001-shepherd.conf.drv
/gnu/store/jfnn59d6vqpx1n3rv8x4g72svmb877ri-boot.drv
/gnu/store/yk1y0kpng1sc7yn2dz8rvnfb0v24561b-system.drv
/gnu/store/jsrdys85vlbydp1sms2ch9xkyj8d9i98-parameters.drv
/gnu/store/07lf5bzlk1lms6y2mp25z7460z504z8r-system.drv
/gnu/store/72x0nyw9m54hsc1grskzmpfs54ymm6hf-grub.cfg.drv
building /gnu/store/6f5bq5hxm2gx04qd4frw1qmddidp80hh-provenance.drv...
building /gnu/store/f115kngj8fyymi5gpqn03fmiqrn0w33a-etc.drv...
building /gnu/store/q8ni4qmjqwr87rw3mqffma4kys5rw7sr-init.drv...
building /gnu/store/04qiqbqh0v1vkg32d8pq8f863raygalq-activate-service.scm.drv...
building /gnu/store/svb9q5i0w0xmc4gk3028m2dqi76qhra8-raw-initrd.drv...
building /gnu/store/2dabf6vlbj6kvdh7b7wcxldn8ak9rafy-activate.scm.drv...
building /gnu/store/89hrfinkj8sa1aizvl3wmqqlhfvqngj8-combined-initrd.drv...
building /gnu/store/zsslwylhfhxb4pld9ay6pg48lp8j7riz-shepherd-host-name.scm.drv...
building /gnu/store/gl7wzay96b4ynzn1acxwpmgvsavmf6f5-parameters.drv...
building /gnu/store/jsrdys85vlbydp1sms2ch9xkyj8d9i98-parameters.drv...
building /gnu/store/84s79rcr5jmnic4ky4c6adg95n4kva2j-shepherd-host-name.go.drv...
building /gnu/store/j0j1avdy377nvh4f93x05j65wjmprklc-shepherd-swap-cokolwiek-swap.scm.drv...
building /gnu/store/4harprlmnjsfgqwkkvi2h52ym4ay0s7n-shepherd-swap-cokolwiek-swap.go.drv...
building /gnu/store/x8ww5ib04v06jm83qjd5pkaddp79f001-shepherd.conf.drv...
building /gnu/store/jfnn59d6vqpx1n3rv8x4g72svmb877ri-boot.drv...
building /gnu/store/07lf5bzlk1lms6y2mp25z7460z504z8r-system.drv...
building /gnu/store/yk1y0kpng1sc7yn2dz8rvnfb0v24561b-system.drv...
building /gnu/store/72x0nyw9m54hsc1grskzmpfs54ymm6hf-grub.cfg.drv...
/gnu/store/n988yf5wsahxgn7xjl12zvk1rdd0m7br-system
/gnu/store/91fybdq9279mcym1d77jfdnkzjs1plsp-grub.cfg
initializing operating system under '/mnt'...
kopiowanie do '/mnt'...
populating '/mnt'...
substitute: looking for substitutes on 'http://192.168.10.3:8080'... 100.0%
substitute: looking for substitutes on 'https://substitutes.nonguix.org'... 100.0%
substitute: looking for substitutes on 'https://nonguix-proxy.ditigal.xyz/'... 100.0%
substitute: looking for substitutes on 'https://bordeaux.guix.gnu.org'... 100.0%
The following derivations will be built:
/gnu/store/icknvjnsa5p9x3k9dl3bj411b6xndpy9-module-import.drv
/gnu/store/z60dy97dz6majxf84gylhk50w965drji-module-import.drv
/gnu/store/2afjsb4xbdggflrcq0x9gk3kfbjjia1m-install-bootloader.scm.drv
1,3 MB will be downloaded
module-import-compiled 625KiB 1.2MiB/s 00:00 ▕██████████████████▏ 100.0%
module-import-compiled 625KiB 1.2MiB/s 00:01 ▕██████████████████▏ 100.0%
building /gnu/store/icknvjnsa5p9x3k9dl3bj411b6xndpy9-module-import.drv...
building /gnu/store/z60dy97dz6majxf84gylhk50w965drji-module-import.drv...
building /gnu/store/2afjsb4xbdggflrcq0x9gk3kfbjjia1m-install-bootloader.scm.drv...
guix system: bootloader pomyślnie zainstalowany na /dev/sda
ZROBIONE Udało mi się po raz kolejny zapomnieć ustawić hasło na koncie administracyjnym. Powinienem ustawić uniwersalne hasło początkowe w części wspólnej konfiguracji systemów.
$ sudo chroot /mnt
root@mcdowell /# passwd marek
New password:
Retype new password:
passwd: hasło zostało zmienione