Как да използвате Nix за инсталиране на софтуер на macOS

Mac има няколко package managers на трети страни за инсталиране на допълнителен софтуер. Ето как да използвате мениджъра на пакети Nix с macOS.

Nix е мениджър на пакети, който предоставя базирани на контейнери среди за разработка на различни платформи. Подобно на контейнерни системи като Docker и Kubernetes, Nix ви позволява да инсталирате конфигурирани среди за разработка в машини и мрежи с по-малко конфигурация и проблеми.

Традиционно на Mac потребителите използват MacPorts или Homebrew за инсталиране на пакети на трети страни. И двете системи имат предимства и недостатъци.

Homebrew е популярен в общността на хората, които използват Mac поради своята лесна употреба и инсталиране: пакетите могат да бъдат инсталирани от приложението Terminal в macOS само с няколко команди, а актуализациите са автоматични и също толкова лесни.

И на Homebrew, и на MacPorts обаче им липсва преносимост. Можете да пишете терминални (shell) скриптове, за да инсталирате Homebrew или MacPorts пакети в различни системи, но поддръжката на скриптове може да стане сложна и често е трудно да се пишат скриптове, които са наясно с всички възможни машинни конфигурации.

Nix решава това, като ,,контейнеризира“ среди за разработка и ги прави по-преносими между системите.

Компромисът, който плащате с Nix, е малко по-сложна конфигурация.

NixOS от NixOS Foundation всъщност е няколко неща: това е дистрибуция на Linux, която използва мениджъра на пакети Nix. Nixpkgs е колекция от над 80 000 пакета, които могат да бъдат инсталирани с помощта на мениджъра на пакети Nix.

Има три отделни ръководства за Nix: ръководството на Nix, ръководството Nixpkgs и ръководството NixOS.

Има и справочно ръководство на Nix.

Налично е поддържано от общността неофициално NixOS Wiki и сайт за разработка на Nix се намира на nix.dev. NixOS Wiki има информация за мениджъра на пакети, езика Nix, Nixpkgs и самата NixOS.

Има и Nix език, който можете да използвате за създаване и копиране на части от пакети за нови инсталации.

Вероятно ще искате да прочетете цялото ръководство на Nix поне преди да започнете да инсталирате и използвате Nix.

Ръководства за „Nix“, „Nixpkgs“ и „NixOS“.
Има няколко нови термина, които трябва да разберете, за да използвате Nix.

Nix се основава на декларативно програмиране – създаване на програми, базирани на описание какво трябва да прави даден софтуер, а не как да го направи. Накратко, декларативното програмиране се опитва да избегне софтуер, базиран на състояние и променящо се състояние, за да постигне някакъв резултат.

Изрази. Nix изразите са основно подкомпоненти на инсталируем софтуер, които са предварително дефинирани за по-късно извличане и инсталиране. Идеята с изразите е, че компонентът вече е дефиниран, така че когато бъде инсталиран, да работи по същия начин във всички системи.

Всеки израз също има път за търсене.

Канали. Nix каналът е специфичен път към един или повече предварително дефинирани Nix изрази, които могат да бъдат дистанционно извлечени и инсталирани. Има списък с официални канали на channels.nixos.org.

Повечето канали имат версии. За даден канал можете също да се абонирате или отпишете.

Всеки канал има съдържание за изтегляне, което се инсталира, когато каналът е инсталиран.

Магазин. За разлика от Homebrew и самия UNIX, Nix не инсталира пакети в стандартните UNIX директории като /usr, /bin, /sbin или /opt.

Вместо това той създава свое собствено хранилище – специална директория и volume, използвани за съхраняване на всички инсталирани пакети. Използвайки магазин, Nix пакетите са много по-преносими, тъй като целият магазин може да бъде преместен като единица.

Nix инсталира конфигурационен файл в /etc/nixos/configuration.nix, който обикновено е невидим, освен ако не включите функцията за скрити файлове на macOS Finder.

Flakes са експериментална функция на Nix, която представлява файлове, използвани за дефиниране и контрол на зависимостите между пакетите. Макар и популярни, люспите Nix все още са експериментални и нямат силна документация, така че ги използвайте на свой собствен риск.

Събиране на боклук. Както в някои среди за програмиране, когато премахнете Nix пакет, той всъщност не се деинсталира веднага. За да направите това, стартирайте Nix Garbage Collector.

Мислете за събирача на отпадъци като за процес, който работи безшумно във фонов режим, който почиства всички неизползвани или остарели компоненти, които вече не са необходими.

Много съвременни системи използват събирачи на боклук – включително Java VM и средите за изпълнение Swift и Objective-C от Apple.

Можете да извикате колектора за боклук Nix по всяко време след инсталирането в терминала с:

Инсталацията на Nix включва няколко инструмента за команден ред (CLI), които можете да стартирате от приложението Terminal. Те включват:

Всички тези команди и други са описани подробно в ръководството на Nix.

Потребителската среда на Nix е просто набор от софтуер и инструменти, инсталирани от Nix.

Nix обикновено се инсталира в /nix, но след macOS Catalina коренът на стартовия диск на macOS е само за четене.

Вместо това на системите след Catalina, Nix ще създаде нов volume, който да съхранява магазина на Nix и ще го монтира като volume в скритата папка Volumes на macOS в основата на стартовия диск.

Ако имате администраторски достъп, инсталаторът ще ви подкани за разрешение sudo (суперпотребител), когато го стартирате, за да създадете новия volume.

За да стартирате интерактивния инсталатор на Nix в терминала, въведете:

curl -L https://nixos.org/nix/install | ш

Когато инсталаторът се стартира, той ви дава кратко съобщение за това какво ще направи и къде ще бъдат инсталирани нещата. Той също така създава нов потребител на UNIX и UUID за потребителя – които се използват по време на изграждане на контейнери и пакети на Nix.

Инсталаторът на Nix съхранява препратка към volume на хранилището на Nix в /etc/fstab.

Обърнете внимание, че обемът на магазина на Nix се монтира, но не и на работния плот на Finder – няма да го видите на работния плот на вашия Mac, но все още е там.

Вместо това Nix го монтира в основата на вашия стартов диск в директория с име „Nix Store“. Вътре в тази директория има магазин и папка var.

Папката store съдържа всички пакети и канали, изтеглени и инсталирани от NIX, папката var съдържа папка log, а папката nix, която съдържа DB, профили, връзка към фоновия демон, потребителските пулове и други части.

fstab е файлът с таблицата на файловата система, който казва на UNIX къде живеят всички файлови системи и техните volumes.

Когато сте готови да продължите с инсталатора, въведете администраторска парола в терминала и натиснете Return.

Ще видите как инсталаторът на Nix се изпълнява и докато го прави, той ще опише какво създава.

Ако инсталираният Nix има sudo достъп, той също ще се опита да добави някои опции за конфигурация към скритите файлове на потребителския профил на стартовия диск на вашия Mac в папките user и etc, а именно:

/etc/bashrc /etc/profile.d/nix.sh /etc/zshrc /etc/bash.bashrc /etc/zsh/zshrc

Тези профилни файлове се зареждат от macOS, когато влезете, и съдържат променливи на средата и пътища до инсталиран софтуер.

И накрая, инсталаторът на Nix настройва фонов процес или демон, наречен nix-daemon, който управлява тихо магазина на Nix във фонов режим.

След като инсталаторът приключи, ще трябва или да излезете от терминала и да го отворите отново, или да отворите нова обвивка на терминала, за да може терминалът да зареди всички нови конфигурации на Nix.

След като инсталаторът приключи, можете да инициализирате Nix пакетите по подразбиране и да тествате инсталацията на Nix в терминал с:

nix-shell -p nix-info –изпълнете „nix-info -m“

Трябва да видите съобщение за извличане на пътища и след това списък на всички пакети, инсталирани в локалния магазин на Nix.

В долната част на съобщението трябва да видите номера на текущата версия на Nix и Darwin, името на канала и пътя до профила на файла на пакетите.

Можете също така ръчно да инсталирате всеки съществуващ Nix пакет в терминала, като използвате командата nix-env –install, последвана от името на пакета. Например:

nix-env –инсталирайте firefox

Деинсталирането на пакет е същото, с изключение на това, че използвате флага –uninstall към командата nix-env

Налични са няколко добри сайта на Nix на трети страни – не забравяйте да ги разгледате.

Zero-to-nix.com е ръководство за използване на Nix и включва раздел за бърз старт и концепции, който дава добър преглед на всяка част от Nix и как те си пасват.

Determinate.systems е сайт, ориентиран към Nix, който съдържа много ръководства за Nix, както и самостоятелна инсталационна програма за Nix, в случай че не искате да използвате инсталацията, базирана на терминал.

Книгата Nix and Flakes от Ryan Yin е онлайн урок и GitHub repo за начинаещи, пълен с полезна информация, свързана с Nix.

Репото nix-darwin съдържа всички модули, пакети и документация за порта Darwin (macOS) на мениджъра на пакети Nix.

Nixpacks е помощна програма, която може да вземе всяка директория с файлове и да я контейнеризира за повторна употреба.

След като преминете кривата на обучение, Nix може да бъде доста ефективен и полезен. Възможността за конфигуриране и повторно инсталиране на преносими контейнери в различни системи е много мощна.

Можете да конфигурирате произволен набор от среди и инструменти и след това да го пакетирате за повторно разполагане на повечето системи.

Възможността да създавате свои собствени Nix пакети и контейнери, които след това могат да се използват повторно, спестява много време, когато трябва да конфигурирате нова машина.

Основният недостатък на Nix като мениджър на пакети е повишената сложност и кривата на обучение. В момента също няма версия на Windows.

Homebrew все още е по-опростен от Nix, но с изключение на писането на собствени персонализирани скриптове за инсталация, Homebrew няма преносимост. Опитът да се напишат обичайни инсталационни шел скриптове за всяка възможна система е непрактичен.

След като научите и овладеете Nix, той ще се превърне в мощен инструмент във вашия арсенал за разработка.

Оставете отговор

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *