Dobrým príkladom by mohol byť databázový server PostgreSQL. Väčšina zložitosti nastavenia takéhoto databázového servera je zhrnutá do nezvyčajne krátkeho zadania príslušnej služby:
(service postgresql-service-type
(postgresql-configuration
(postgresql postgresql-14)))
Úplné zadanie operačného systému pre použitie s kontajnerom systému Guix by vyzeralo asi takto:
(use-modules (gnu)) (use-package-modules databases) (use-service-modules databases) (operating-system (host-name "container") (timezone "Europe/Bratislava") (file-systems (cons (file-system (device (file-system-label "co-ma-po-tom")) (mount-point "/") (type "ext4")) %base-file-systems)) (bootloader (bootloader-configuration (bootloader grub-bootloader) (targets '("/dev/sdX")))) (services (cons* (service postgresql-service-type (postgresql-configuration (postgresql postgresql-14) (config-file (postgresql-config-file (log-destination "stderr") (hba-file (plain-file "pg_hba.conf" "\ local all all trust host all all 10.0.0.1/32 trust")) (extra-config '(("listen_addresses" "*") ("log_directory" "/var/log/postgresql"))))))) (service postgresql-role-service-type (postgresql-role-configuration (roles (list (postgresql-role (name "skuska") (create-database? #t)))))) %base-services)))
Pomocou postgresql-role-service-type
zadáme úlohu „skuska“ a
vytvoríme príslušnú databázu tak, aby sme všetko mohli priamo vyskúšať bez
ďalšieho ručného zasahovania. Nastavenia v postgresql-config-file
umožňujú klientom pripájať sa z IP adresy 10.0.0.1 bez overenia — zlý
nápad pre systémy vo výrobnom nasadení ale vhodný pre tento príklad.
Zostavme skript, ktorý spustí inštanciu systému Guix v podobe
kontajnera. Uložte horeuvedené zadanie pre operating-system
do súboru
os.scm a potom použite guix system container
pre zostavenie
spúšťača. (see Invoking guix system in GNU Guix Reference
Manual).
$ guix system container os.scm Zostavia sa nasledovné odvodeniny: /gnu/store/…-run-container.drv … building /gnu/store/…-run-container.drv... /gnu/store/…-run-container
Teraz, keď už máme skript spúšťača, môžeme ho použiť pre spustenie nového
systému s bežiacou PostgreSQL službou. Vedzte, že kvôli doposiaľ
neodstráneným obmedzeniam, musíme spúšťač spustiť ako root, napr. pomocou
sudo
.
$ sudo /gnu/store/…-run-container systémový kontajner beží pod PID 5983 …
Presuňte proces do pozadia pomocou Ctrl-z nasledovaným bg
.
Zaznamenajte si označenie procesu na výstupe; neskôr ho budeme potrebovať
pre pripojenie ku kontajneru. Viete čo? Skúsme sa pripojiť ku kontajneru už
teraz. Použijeme nsenter
, nástroj poskytovaný balíkom
util-linux
:
$ guix shell util-linux $ sudo nsenter -a -t 5983 root@container /# pgrep -a postgres 49 /gnu/store/…-postgresql-14.4/bin/postgres -D /var/lib/postgresql/data --config-file=/gnu/store/…-postgresql.conf -p 5432 51 postgres: checkpointer 52 postgres: background writer 53 postgres: walwriter 54 postgres: autovacuum launcher 55 postgres: stats collector 56 postgres: logical replication launcher root@container /# exit
Služba PostgreSQL beží v kontajneri!