Šta je novo?

nixOS - iskustva i zapazanja

enterthevoid

Banned
Banovan
Učlanjen(a)
25.11.2017
Poruke
485
Poena
20
Otvaram ovu temu da bih mogao pisati o ovom sistemu koji u svetu koristi mali broj ljudi a kod nas jos manji broj ljudi (ko ima osim mene nek digne dva prsta?). Razlog zasto pisem o ovom sistemu jer zato sto je poprilicno inovativan i resava neke "vekovne" probleme sa kojima se i dalje susrecu popularne distribucije. Nisam ga dugo koristio, pa ce prva zapazanja biti povrsna ali kako vreme bude odmicalo pisacu vise i detaljnije.

Za pocetak, zaboravite sve sto znate o Unix i Linux sistemima. Salim se, ali se i ne salim. nixOS je Linux distro jer je izgradjen oko Linux kernela i GNU/Unix userspace softvera. Ali resenja koja koristi nemaju veze ni sa Unixom ni sa vecinom Linux distribucija. Unix i Linux distroi se uglavnom grade i odrzavaju tako sto se edituje mali milion konfiguracionih fajlova koji su u tekstualnoj formi i imaju odredjenu strukturu. To dovodi do toga da sa rastom kompleksnosti raste i opterecenje onoga koji sisteme odrzava. Pa se taj posao automatizuje kroz razne skripte. Ali i tih skripti ima puno i valjda ih odrzavati jer su jedan nivo apstrakcije vise. nixOS se ne gradi i odrazava korak po korak, svaka komponenta sistema za sebe. nixOS se deklarise kroz poseban programski (funkcionalni) jezik kojim se vrsi kompletna konfiguracija sistema. Sto znaci da prvo treba nauciti taj jezik da bi se bilo sta promenilo na sistemu.

nixOS se sadrzi iz dve komponente, samog nixOS-a kao sistema izgradnje i odrzavanja Linux softverske distribucije i nix paket menadzera koji inkorporira programski jezik istog naziva. nix menadzer paketa se moze koristiti svuda, na drugim Linux distroima, na MacOS, *BSD, za Windows ne znam.

U Ubuntu se program instalira sa apt install $pkg (ArchLinux: pacman -S $pkg, Fedora: dnf install $pkg). nix paket menadzer podrzava takav nacim instalacije paketa preko komande nix-env -i $pkg ili nix-env -iA $pkg, razlika je sto u drugom slucaju se pretraga paketa vrsi po atributu sto je brze. Ali idiomatski nacin instalacije paketa u nixOS je kroz deklarisanje sistema sto se vrsi kroz configuration.nix koji se nalazi u /etc/nixos/ sto dovodi do system-wide instalacije paketa ili config.nix koji se nalazi u $HOME/nixpkgs/ sto instalira programera za aktivnog korisnika.

Konfiguracija sistema tj. configuration.nix obuhvata sve stavke koje se na drugim Linux distroima konfigurisu zasebno: hostname, hosts, datetime, location, fstab, users, pkgs, services etc. To znaci da kada snimite configuration.nix i odradite komandu nixos-rebuild switch po reboot-u dobijate novi unos u bootloaderu koji sadrzi datu konfiguraciju. Nema smeca preostalog od brisanja starih programa (leftover dotfiles), nema konflikata, sve cisto ko bebina guza. Takvih konfiguracija mislim da moze biti neograniceno ali zbog rasta zauzeca prostora na disku mislim da se vise od x brisu gde mislim ali nisam siguran da je x 5. Moguce da nisam u pravu, nov sam u ovome.

Paketi su unapred definisani, nije kao Void gde dobijas samo basic komponentne a sve ostalo sam biras. Vise je kao Debian gde instaliras paket i dobijes kucu uz njega. Uz openbox sam dobio slim display manager a da ga nisam ni trazio... ali tu ima jedna kvaka, nixos veoma uspesno moze biti source based distro kao sto je Gentoo ukoliko imate dovoljno dobro poznavanje nix jezika vi mozete deklarisati nove pakete, cak i sopstveni kanal kako vam volja, sa sve promenom flagova.

Kakvi kanali? nixOS ima vise kanala, stable koji su oznaceni sa datumom i to su vam oni Debian, Ubuntu LTS provereni paketi. Naravno zbog prirode nixOSa vi mozete istovremeno imati i 16.04 LTS i 18.04 LTS bez potrebe da instalirate potpuno novi distro. Inace ti stable izlaze na 6 meseci kao i Fedora ili standardna Ubuntu izdanja. Postoji unstable sto je efektivno rolling i postoji neki redukovani kanal za koji jos nisam nacisto sta predstavlja. Mozete imati sopstveni kanal. Kao i kada koristite void i zelite da kompajlirate vase programe preko xpbs-src pa prekopirate github repo sa templejtima paketa koje dalje mozete menjati (*BSD ports pristup), tako uz nixOS i kanal koji koristite dobijate sve te definicije svih paketa koje sadrzi dati kanal na disku, nema potrebe za povlacenje sa servera. Sa servera se naravno svlaci data i source fajlovi potrebni za izgradnju programa jer ne moze sve bas da stane. To znaci da vi mozete imati kastomizovan kanal sa svojim definicijama paketa kako vam volja. Vise kanala moze biti aktivno na sistemu. Ovaj sistem je spejs satl za ono sto Debian koristi i sto uglavnom ne radi.

To su otprilike prednosti, onako opsirno i zaokolno a sada mane u kratkim crtama (do sada primecene):
- prvo i osnovno sto upada u oci je: how the fuck am i supposed to dual boot with nixOS? Nemam pojma, radim na tome. Nije trivijalan problem koliko vidim.
- drugo sto jos vise upada u oci je: komanda za package query je nix-env -qaP $pkg ili nix-env -qaP $pkg | grep $pkg. Sta je problem? Uzasno je spor query. Zasto je spor? Jer ceslja vas disk tj. definicije paketa i taj nix jezik vrsi evaluaciju svakog unosa i posto ih u stable ima ~14000 to zna da potraje dok nadje onaj koji trazi. Drugi paket menadzeri obicno drze te definicije na nekom serveru pohranjenje u nekoj bazi koja ovaj posao daleko efikasnije obavlja. Zasto nixOS ne drzi definicije u nekoj bazi, nisam siguran. Valjda autor zna zasto i ima dobar razlog za to. Ono sto je korisno je da nix-env -qaP $pkg1 $pkg2 $pkg3 traje gotovo jednako vremena kao pretraga jednog unosa ali daje rezultate za sve pakete koji su predmet unosa. Pacman na primer, daje jedan paket koji zadovoljava sve patterne tj. stringove u query-ju. Moj ljubljeni void i njegov xbps-query podrzava samo jedan pattern tj. string kao argument... Znaci query kroz nix je surovo spor ali ako grupisete sve programe koji vas zanimaju dobicete rezultate o svima njima dok kod drugih morate pretrazivati jedan po jedan.
- menjati pakete, njihove medjuzavisnosti i generalna kastomizacija nije trivijalan posao niti je veicni poznato kako se to radi
- sto dalje povlaci da instalacija programerskih okruzenja nije trivijalan posao i zbog nacina rada mnogih od njih (python env) moze doci do raznih problema

To je za sada, pisacu jos kada steknem malo vise iskustva. Sistem obecava ali je totalno alien i nov i zbog toga je slabo zastupljen. Fura se uglavnom medju ljubiteljima funkcionalnih programskih jezika jer zadovoljava njihov osnovni kriterijum kvaliteta, purity.

Edit: Pre nego sto neko kaze pa sta ce mi to, postoje Chef, Ansible, Puppet itd. nixOS nije uporediv sa njima, ovo je ceo sistem izgradjen od nule da resi probleme a ne jos jedan dodatak koji polovicno radi.
 
Poslednja izmena:
+1 enterthevoid, hvala na zapažanjima.:)

Dodao bih samo da Nix jezik nije još u potpunosti dokumentovan zbog čega treba imati vremena da se uđe u štos ali this time next year...:D:wave:
 
Dokumentacija je bolja nego najblize slicno resenje, GNU Guix koji je baziran na Guile jeziku koji iako ima vec dosta godina je totalno opskuran i baziran na Lisp dijalektu Scheme. Ono sto sam video, meni je lakse raditi sa nix-om.

Guix doduse ima odredjene prednosti kako kazu po internetu (nisam probao). NixOS ima ocigledan problem sa paketima tj. odrzavanjem istih. Query za Firefox na primer izbaci pet razlictih paketa bez jasne naznake koje su razlike izmedju njih sto zahteva googlanje i pitanje drugih korisnika za savet. Guix izgleda da ima bolji sistem automatizacije izgradnje i odrzavanja paket i resava neke od tih problema. Mada sam ja to slicno cuo za openSUSE pa u praksi ti automatizovani build i testing package sistemi ne funkcionisu bas najbolje. Jer da funkcionisu pa svaki bi ih distro implementirao i ne bi bilo potrebe za gomilom mainternera, sve bi skripte odrzavale. Posto to ocigledno nije tako, Debian i slicne velike zajednice su u prednosti u odnosu na sve ostale. Ne jer su distroi tehnicki bolje reseni vec samo zato sto imaju vise majstora koji rade na sistemu a ako dodas dovoljno majstora i najgore zamisljen sistem ce se nekako gurati unapred.

Moram priznati da iako cenim sve sto resava nixOS sistem nekako mi je ga mrsko koristiti, da li je navika ili sta vec, ali tinkering sa gomilom fajlova mi je izgleda usao u krv i organizam mi odbija deklarativni pristup konfigurasanja sistema. Ali ne dam se ja jos, zacrtao sam da mu dam nekoliko meseci da vidim hocu li se navici i zavoleti deklarativni pristup konfguraciji.
 
Poslednja izmena:
Nije pretraga problem, mislim jeste jer je query spor ali glavni problem je sto po obavljenoj pretrazi ti kao korisnik nemas pojma koje su razlike izmedju paketa koje pretraga izbacuje. Sta je wrapped, sta unwrapped, sta obican paket. Za to se mora konsultovati dokumentacija koja je namenjena i pisana za developere. Jeste sistem okrenut serverskoj primeni ali ipak bi nesto kao sto je instalacija paketa trebalo biti bolje razjasnjeno i dokumentovano kroz sam alat koji vrsi pretragu. Konkretno, zbog nacina na koji funkcionise nixOS postoji potreba za wrapperima pogotovo kada se instalira nego programersko okruzenje jer u suprotnom se moze desiti da biblioteke ne vide jedna drugu. Da je nixOS operativni pravljen od nule tih problema ne bi bilo, ali kao i GoboLinux ovo je jedan nivo apstrakcije iznad klasicne Linux/Unix organizacije fajl sistema. Zbog toga pretraga na sajtu pomaze jednako kao i pretraga putem konzole, ni tamo ne pisu razlike izmedju paketa.

Jedna od zamerki korisnika je neazurnost odredjenih paketa a ja to ne vidim kao problem u sistemu koji funkcionise kao nixOS. Jeste, bilo bi lepo da se prati upstream tempo ali u ovom slucaju cuvanje starih paketa nije jeres vec prednost. Voleo bih da vidim Linux sistem koji je u stanju da podrzi cuvanje i distribucije svih verzija svih programa. U teoriji nixOS omogucava njihovu instalaciju sto vecina Linuxa ne moze. Ali ne postoji repo koji sadrzi sve verzije svih programa (poput oldversion.com).
 
Dual boot nixOS ArchMergeD:

-instalirao nixOS i njegov grub (javljao mi je grešku pri instalaciji sistema sve dok nisam stavio nixOS grub na sda
-ušao u ArchMergeD grub na poznat način (search.file /boot/intel-ucode.img root itd...
-ponovo instalirao grub iz ArchMergeD i apdejtovao - rezultat - ne vidi nixOS
-prekopirao unos iz nixOS /boot/grub/grub.cfg u ArchMergeD /etc/grub.d/40_custom i ponovo update-grub
-podigao nixOS i video da moram da se zezam sa konfigurisanjem wifi
-pregazio nixOS i metio elementary na tu particiju
 
Ja nisam ni probao dual boot sa voidom, jos razbijam glavu oko nix. Void sam instalirao kroz kontejner, za sada ga koristim kroz konzolu, videcu da nekako nabudzim da se X podize na tty2. To mu dodje kao dual boot samo sto imam dva distroa aktivna istovremeno.

Nesto mi se ne igra sa btrfs, mogao bih u teoriji da napravim novi subvolume i instaliram void tu, pa da vidim hoce li ga systemd-boot videti ili ne. Ako ne, imam drugu particiju za zasebni bootloader sto bi znacilo da bi dual boot imao dva koraka, prvo u systemd-boot pa onda iz njega u refind. Mislim da refind ne radi u nixos. Grub ne koristim iz subjektivno-objektivnih razloga iako bih morao da sam se odlucio za enkriptovanu boot particiju.

Nego me pomalo glava boli od nixos, koliko ja kapiram ovde je sve symlinkovano negde i zbog toga nisam nacisto sta je gde. Pritom se izgleda pri svakoj akciji kreira kopija koja se modifikuje, nista se direktno ne modifikuje. To mu valjda dodje taj immutable data princip koji vazi u funkcionalnim jezicima. Nisam probao ali mislim da ako nestane struje u toku apgrejda nixos ne bi trebalo biti nista dok ce na primer dpkg zahtevati oporavak. Sve je to lepo, ali mnogo je novih koncepata kao nix-shell koji zapravo kreira privremeni shell u kojem mozes raditi eksperimente a da to ne utice na postojeci user shell. Bar sam ja to tako shvatio za sada, ima ovde mnogo da se uci.

Ovom konceptu treba dobar mikrokernel, Linux kernel je suvise u sprezi sa userspace-om i hijerarhija fajl sistema ide kontra nixosu, zato se sve symlinkuje. Takodje ovaj hash sto se upisuje u nix/store/ foldere koji sadrze programe opasno smara. Prefix je i pravi clutter. Bilo bi dobro da je taj hash metadata, neki tag ili sta znam, samo da nije u imenu fajla. Kao i da je taj nix store zapravo implementiran kao baza podataka, zbog brzine query-a. Ovako je sve smarajuce sporo.
 
Dual boot nixOS ArchMergeD:

-podigao nixOS i video da moram da se zezam sa konfigurisanjem wifi
-pregazio nixOS i metio elementary na tu particiju
Ја сам се неколико година играо са дистрибуцијама и пробао свакакве врсте, како редовне тако и ове које је неко развијао из постојеће али после кренуо својим правцем. Све се на крају завршавало на сличан начин као у последњој цитираној реченици. Те дистрибуције користе само аутори и понеко ко не зна шта да ради у слободно време.
 
Najveci problem ove i slicnih distribucija je sto su apsolutno neuskladjene sa osnovnim sistemom na kojem su izgradjene. Narodski receno, ovo je kao da radis u debelim rukavicama dok si u slucaju Archa, Voida ili Gentooa umazan masinskim uljem od glave do pete.

Prednosti su neosporne ali je cena seks sa kondomom, jednostavno je neprijatno. Kada bi sistem bio izgradjen sa ovakvom idejom od nule onda bi bila sasvim druga prica, ali sve mora biti drugacije, kernel, programi, fajl sistem. Ovako je pisanje uz vetar, uz upstream, uz kernel.

Sanjam povratak mikrokernel ideji, otvoreni hardver, obavezne free firmver/drajvere za hardver, nekakvu standardizaciju na nivou svih operativnih kako proprietary tako i free, koja nije POSIX od pre 30 godina... ali mogu to sve samo da sanjam i koristim nesavrsene sisteme koji zavrsavaju posao nekako uz gurku.

Stvarno steta, jer realno ovaj sistem resava kljucne probleme koje imaju Linux distribucije. Jos je sad smaracki Valve zakomplikovao stvari i dodatno pravi problem oko kompatibilnosti izmedju Linux distribucija jer koriste nefleksiblni sistem za distribuciju onog njihovog spajvera. Valjda ce i taj gejming na Linuks zamreti ponovo, pa da izbacimo te probleme iz jednacine.
 
Stvarno steta, jer realno ovaj sistem resava kljucne probleme koje imaju Linux distribucije. Jos je sad smaracki Valve zakomplikovao stvari i dodatno pravi problem oko kompatibilnosti izmedju Linux distribucija jer koriste nefleksiblni sistem za distribuciju onog njihovog spajvera. Valjda ce i taj gejming na Linuks zamreti ponovo, pa da izbacimo te probleme iz jednacine.

+1, ko zna, u dogledno vreme možda unaprede distro... Po meni nikad nije gubljenje vremena isprobati nešto novo ako je i u naznaci nešto bolje u pitanju. Za igre, Windows je i dalje prvi izbor i tu je zaista bespredmetno pokušavati s nečim drugim.
 
Vecinu gotchas sam savladao, problemi koji ostaju bez resenja su fina podesavanja config fajlova za individualne programe. Ne znam da li to nix uopste podrzava za sve programe. Hteo bih sve da deklarisem a ne da ostavljam repove od imperativne konfiguracije po $HOME.

Ali moram priznati da je nixos-rebuild switch sjajna komanda, predjem u potpuno novo okruzenje bez potrebe za restartom, eventualno ako je menjan user ima potrebe uradili logout. Zaista sjajna stvar, tesko mi se sada vracati na pesacki posao koji bi podrazumevao desetine minuta podesavanja svega ili koriscenje eksternih alata za sinhronizaciju konfiguracije.

Jedino sto smara je ciscenje koje se mora obavljati, nesto slicno kao i u slucaju btrfsa... brisanje programa samo makne simlinkove ali ne brise nista iz /nix/store. To se radi sa drugom komandom, moze se automatizovati preko cron job, ali bih voleo da ima neki ugradjeni mehanizam i tajmere da to radi automatski.

Znaci smarajuci momenti su odrzavanje sistema cistim tj. brisanje obrisanih programa (zvuci blesavo znam), fino konfigurisanje svakog programa na deklarativni nacin kao i veca kontrola nad binarnim paketima i medjuzavisnostima koje instaliraju. Posto ovde binarni paketi znaju bas svasta da instaliraju, nisu samo osnovni program plus opcione medjuzavisnosti kao u slucaju void linuxa. Sto znaci da cu u jednom momentu morati da predjem na source based pristup, napravim svoj channel, tu ubacim sve dodatne programe koje cu sam kompajlirati i odrzavati uz custom build opcije. Bazu cu ostaviti binarnu, ne mogu da odrzavam 500 paketa ali nekih 50-tak koje koristim bih mogao.

Edit: Da je ovaj pristup mainstream, imali bi potpuno komentarisan configuration.nix sa svim mogucim opcijama i programima kao template config file. Pritom bi se konfiguracija obavljala tako sto maknes komentar sa onoga sto zelis da ukljucis u tvoju konfiguraciju. To za GUI-less sisteme a za tamo gde GUI moze da radi jedan lep frontend preko toga, opciono wizard ili sematski prikaz ili neka baza ili pak radio/check buttons, nebitno kako, mogao bi isto to da radis samo bez kucanja u text fajl. Kad to zavrsis sistem gotov. Na netu bi se distroi razlikovali po konfiguraciji. Apsolutno superioran sistem u odnosu na manuelno zidanje operativnog sistema koje imamo sada. Samo sto moraju i programi da podrze to.
 
Poslednja izmena:
Nazad
Vrh Dno