- 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.
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: