Nix:純粹功能型的Linux軟件包管理器
譯文【51CTO.com快譯】 Nix是一款功能強(qiáng)大的純粹功能型的軟件包管理系統(tǒng),為可靠且可重復(fù)的軟件包管理而設(shè)計(jì),按照GNU LGPLv2.1的條款發(fā)布。它是一款不太知名的Linux發(fā)行版NixOS中主要的軟件包管理系統(tǒng)。
Nix提供原子升級(jí)及回滾、多個(gè)版本的軟件包安裝、多用戶軟件包管理以及為軟件包輕松安裝構(gòu)建環(huán)境,無論開發(fā)人員使用哪種編程語言和工具。
在Nix下,軟件包是用“Nix表達(dá)式”這種功能型軟件包語言構(gòu)建的。這種功能型軟件包管理方法確保安裝或升級(jí)一個(gè)軟件包不會(huì)破壞其他軟件包。
Nix還有多用戶支持,這意味著普通(或非特權(quán))系統(tǒng)用戶可以安全地安裝軟件包,每個(gè)用戶由配置文件(Nix商店中出現(xiàn)在用戶Path中的軟件包集合)來識(shí)別。
如果一個(gè)用戶安裝了軟件包,另一個(gè)用戶試圖安裝同一個(gè)軟件包,不會(huì)再次構(gòu)建或下載該軟件包。
它目前支持Linux(i686、x86_64)和Mac OS X(x86_64)。然而,它的移植性相當(dāng)強(qiáng),你可以在支持POSIX線程、有C++11編譯器的大多數(shù)平臺(tái)上試用它。
我們?cè)诒疚闹袑⒔榻B如何在Linux中安裝(在多用戶模式下)和使用Nix軟件包管理器。我們將討論與常用工具有關(guān)的一些基本的軟件包管理任務(wù)。
如何在Linux中安裝Nix軟件包管理器?
我們將在多用戶模式下安裝***版本的Nix(v2.1.3)。幸好,有一個(gè)現(xiàn)成的安裝腳本,你可以在系統(tǒng)上使用下列curl命令,以普通用戶的身份從shell運(yùn)行。
- $ sh <(curl https://nixos.org/nix/install) --daemon
運(yùn)行上述命令將下載***的nix二進(jìn)制打包文件,你將進(jìn)入多用戶nix安裝屏幕,如屏幕截圖所示:
圖1:在Linux中安裝Nix軟件包管理器
想查看安裝過程中發(fā)生的詳細(xì)情況,請(qǐng)鍵入y并按回車鍵。如果你對(duì)結(jié)果滿意、準(zhǔn)備好繼續(xù),請(qǐng)鍵入y并按回車鍵。
圖2:Nix安裝摘要
腳本將根據(jù)需要多次調(diào)用sudo命令。你需要回答y并按回車鍵來允許它使用sudo。
圖3:Nix安裝繼續(xù)
然后,安裝程序會(huì)運(yùn)行幾個(gè)測試,生成Nix配置報(bào)告,在用戶ID 30001和30032之間創(chuàng)建構(gòu)建用戶,以及組ID為30000的組。出現(xiàn)提示時(shí)輸入y以繼續(xù)。它將為不同的構(gòu)建用戶設(shè)置構(gòu)建組,并創(chuàng)建Nix的基本目錄結(jié)構(gòu)。
它會(huì)修改文件/etc/bashrc(以及面向zsh的/etc/zshrc),如果這些文件存在的話。請(qǐng)注意,它先用.backup-before-nix擴(kuò)展名備份上述文件,安裝程序還會(huì)創(chuàng)建文件/etc/profile.d/nix.sh。
安裝程序還將設(shè)置nix-daemon服務(wù)和nix-daemon套接字服務(wù),為nix-daemon加載systemd單元,并啟動(dòng)上述兩個(gè)服務(wù)。
安裝完成后,你需要打開新的終端窗口,以便開始使用Nix?;蛘?,關(guān)閉并重新打開shell,讓最近的更改生效。然后獲取文件/etc/profile.d/nix.sh(因?yàn)樗皇莝hell啟動(dòng)文件,打開新的shell不會(huì)獲取它)。
- $ source /etc/profile.d/nix.sh
接下來,運(yùn)行下列命令從官方項(xiàng)目網(wǎng)站下載一些路徑,這些路徑是Nix運(yùn)行所必需的。所有路徑下載并拷貝到正確的位置后,你將看到系統(tǒng)和Nix安裝類型摘要,如屏幕截圖所示:
- $ nix-shell -p nix-info --run "nix-info -m"
圖4:Nix安裝和系統(tǒng)摘要
如何在Linux中使用Nix軟件包管理器?
在Nix下,軟件包管理由nix-env實(shí)用程序完成。它用于安裝、升級(jí)和刪除/擦除軟件包,以及查詢已安裝或可用于安裝的軟件包。
所有軟件包都在Nix通道中,該通道是一個(gè)URL,指向含有Nix表達(dá)式集合和指向二進(jìn)制緩存的指針的存儲(chǔ)庫。
默認(rèn)通道是Nixpkgs,訂閱通道列表存儲(chǔ)在~/.nix-channels中,你可以使用下列命令將它們列出來(沒有輸出表示沒有通道)。
- $ nix-channel --list
想添加Nix通道,請(qǐng)使用下列命令:
- $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
在安裝任何軟件包之前,先要更新Nix通道;這類似于在APT軟件包管理器下運(yùn)行apt update。
- $ nix-channel --update
圖5:更新Nix通道
可以使用下列命令查詢可供安裝的軟件包。
- $ nix-env -qa
圖6:查詢可供安裝的軟件包
在這個(gè)例子中,我們將使用前一個(gè)命令與grep一起安裝Apache Tomcat服務(wù)器,以查找可供安裝的軟件包,如圖所示:
- $ nix-env -qa | grep“apache-tomcat”
圖7:查找可供安裝的軟件包
想安裝軟件包,請(qǐng)指定軟件包版本,比如apache-tomcat-9.0.2,使用下列命令:
- $ nix-env -i apache-tomcat-9.0.2
圖8:使用Nix安裝軟件包
在本地系統(tǒng)上,Nix將軟件包存儲(chǔ)在Nix商店中,默認(rèn)情況下是在/nix/store目錄,其中每個(gè)軟件包都有各自唯一的子目錄。比如,apache-tomcat軟件包存儲(chǔ)在:
- /nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2
在此路徑中,隨機(jī)字符95gmgnxlrcpkhlm00fa5ax8kvd6189py是軟件包的唯一標(biāo)識(shí)符,它考慮到了所有依賴項(xiàng)。
你可以使用下列命令列出已安裝的軟件包。
- $ nix-env –q
圖9:列出已安裝的軟件包
想升級(jí)apache-tomcat軟件包,可以使用-u upgrade參數(shù)選項(xiàng)符,如圖所示:
- $ nix-env -u apache-tomcat
如果你想刪除/擦除apache-tomcat,請(qǐng)使用-e標(biāo)志。這里,軟件包并不立即從系統(tǒng)中刪除,只是處于未使用狀態(tài)。這很有用,因?yàn)橐苍S你想要執(zhí)行回滾,或者它可能在其他用戶的配置文件中。
- $ nix-env -e apache-tomcat
刪除軟件包后,你可以使用nix-collect-garbage實(shí)用程序進(jìn)行一些垃圾回收。
- $ nix-collect-garbage
如何在Linux中刪除Nix軟件包管理器?
想卸載Nix,一次性刪除所有與Nix有關(guān)的文件。
- $ sudo rm -rf /etc/profile/nix.sh /etc/nix /nix ~root/.nix-profile ~root/.nix-defexpr ~root/.nix-channels ~/.nix-profile ~/.nix-defexpr ~/.nix-channels
在帶有systemd的系統(tǒng)上,運(yùn)行下列命令,停止所有與Nix有關(guān)的服務(wù)并禁用它們。
- $ sudo systemctl stop nix-daemon.socket
- $ sudo systemctl stop nix-daemon.service
- $ sudo systemctl disable nix-daemon.socket
- $ sudo systemctl disable nix-daemon.service
- $ sudo systemctl daemon-reload
此外,你需要?jiǎng)h除/etc/profile、/etc/bashrc和/etc/zshrc這些文件中的任何引用Nix的項(xiàng)。
欲知詳情,請(qǐng)參閱我們介紹的上述實(shí)用程序的參考手冊(cè)頁。
- $ man nix-channel
- $ man nix-env
你可以在項(xiàng)目官網(wǎng)https://nixos.org/nix/找到Nix軟件包管理器的說明文檔。
結(jié)束語
Nix是一種純粹功能型的軟件包管理器,為可靠且可重復(fù)的軟件包管理而設(shè)計(jì)。它提供了很有意思的軟件包管理概念,與Linux中的YUM和APT等常用工具大不相同。
我們?cè)诒疚闹薪榻B了如何在多用戶模式下安裝nix,討論了如何用Nix進(jìn)行軟件包管理,歡迎留言交流。
原文標(biāo)題:Nix – The Purely Functional Package Manager for Linux,作者:Aaron Kili
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】