Nix是一款功能強大的純粹功能型的軟件包管理系統,爲可靠且可重複的軟件包管理而設計,按照GNU LGPLv2.1的條款發佈。它是一款不太知名的Linux發行版NixOS中主要的軟件包管理系統。

Nix提供原子升級及回滾、多個版本的軟件包安裝、多用戶軟件包管理以及爲軟件包輕鬆安裝構建環境,無論開發人員使用哪種編程語言和工具。

在Nix下,軟件包是用“Nix表達式”這種功能型軟件包語言構建的。這種功能型軟件包管理方法確保安裝或升級一個軟件包不會破壞其他軟件包。

Nix還有多用戶支持,這意味着普通(或非特權)系統用戶可以安全地安裝軟件包,每個用戶由配置文件(Nix商店中出現在用戶Path中的軟件包集合)來識別。

如果一個用戶安裝了軟件包,另一個用戶試圖安裝同一個軟件包,不會再次構建或下載該軟件包。

它目前支持Linux(i686、x86_64)和Mac OS X(x86_64)。然而,它的移植性相當強,你可以在支持POSIX線程、有C++11編譯器的大多數平臺上試用它。

我們在本文中將介紹如何在Linux中安裝(在多用戶模式下)和使用Nix軟件包管理器。我們將討論與常用工具有關的一些基本的軟件包管理任務。

如何在Linux中安裝Nix軟件包管理器?

我們將在多用戶模式下安裝最新版本的Nix(v2.1.3)。幸好,有一個現成的安裝腳本,你可以在系統上使用下列curl命令,以普通用戶的身份從shell運行。

$ sh 運行上述命令將下載最新的nix二進制打包文件,你將進入多用戶nix安裝屏幕,如屏幕截圖所示:圖1:在Linux中安裝Nix軟件包管理器想查看安裝過程中發生的詳細情況,請鍵入y並按回車鍵。如果你對結果滿意、準備好繼續,請鍵入y並按回車鍵。圖2:Nix安裝摘要腳本將根據需要多次調用sudo命令。你需要回答y並按回車鍵來允許它使用sudo。圖3:Nix安裝繼續然後,安裝程序會運行幾個測試,生成Nix配置報告,在用戶ID 30001和30032之間創建構建用戶,以及組ID爲30000的組。出現提示時輸入y以繼續。它將爲不同的構建用戶設置構建組,並創建Nix的基本目錄結構。它會修改文件/etc/bashrc(以及面向zsh的/etc/zshrc),如果這些文件存在的話。請注意,它先用.backup-before-nix擴展名備份上述文件,安裝程序還會創建文件/etc/profile.d/nix.sh。安裝程序還將設置nix-daemon服務和nix-daemon套接字服務,爲nix-daemon加載systemd單元,並啓動上述兩個服務。安裝完成後,你需要打開新的終端窗口,以便開始使用Nix。或者,關閉並重新打開shell,讓最近的更改生效。然後獲取文件/etc/profile.d/nix.sh(因爲它不是shell啓動文件,打開新的shell不會獲取它)。$ source /etc/profile.d/nix.sh 接下來,運行下列命令從官方項目網站下載一些路徑,這些路徑是Nix運行所必需的。所有路徑下載並拷貝到正確的位置後,你將看到系統和Nix安裝類型摘要,如屏幕截圖所示:$ nix-shell -p nix-info --run "nix-info -m" 圖4:Nix安裝和系統摘要如何在Linux中使用Nix軟件包管理器?在Nix下,軟件包管理由nix-env實用程序完成。它用於安裝、升級和刪除/擦除軟件包,以及查詢已安裝或可用於安裝的軟件包。所有軟件包都在Nix通道中,該通道是一個URL,指向含有Nix表達式集合和指向二進制緩存的指針的存儲庫。默認通道是Nixpkgs,訂閱通道列表存儲在~/.nix-channels中,你可以使用下列命令將它們列出來(沒有輸出表示沒有通道)。$ nix-channel --list 想添加Nix通道,請使用下列命令:$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable 在安裝任何軟件包之前,先要更新Nix通道;這類似於在APT軟件包管理器下運行apt update。$ nix-channel --update 圖5:更新Nix通道可以使用下列命令查詢可供安裝的軟件包。$ nix-env -qa 圖6:查詢可供安裝的軟件包在這個例子中,我們將使用前一個命令與grep一起安裝Apache Tomcat服務器,以查找可供安裝的軟件包,如圖所示:$ nix-env -qa | grep“apache-tomcat” 圖7:查找可供安裝的軟件包想安裝軟件包,請指定軟件包版本,比如apache-tomcat-9.0.2,使用下列命令:$ nix-env -i apache-tomcat-9.0.2 圖8:使用Nix安裝軟件包在本地系統上,Nix將軟件包存儲在Nix商店中,默認情況下是在/nix/store目錄,其中每個軟件包都有各自唯一的子目錄。比如,apache-tomcat軟件包存儲在:/nix/store/95gmgnxlrcpkhlm00fa5ax8kvd6189py-apache-tomcat-9.0.2 在此路徑中,隨機字符95gmgnxlrcpkhlm00fa5ax8kvd6189py是軟件包的唯一標識符,它考慮到了所有依賴項。你可以使用下列命令列出已安裝的軟件包。$ nix-env –q 圖9:列出已安裝的軟件包想升級apache-tomcat軟件包,可以使用-u upgrade參數選項符,如圖所示:$ nix-env -u apache-tomcat 如果你想刪除/擦除apache-tomcat,請使用-e標誌。這裏,軟件包並不立即從系統中刪除,只是處於未使用狀態。這很有用,因爲也許你想要執行回滾,或者它可能在其他用戶的配置文件中。$ nix-env -e apache-tomcat 刪除軟件包後,你可以使用nix-collect-garbage實用程序進行一些垃圾回收。$ nix-collect-garbage 如何在Linux中刪除Nix軟件包管理器?想卸載Nix,一次性刪除所有與Nix有關的文件。$ 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的系統上,運行下列命令,停止所有與Nix有關的服務並禁用它們。$ 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 此外,你需要刪除/etc/profile、/etc/bashrc和/etc/zshrc這些文件中的任何引用Nix的項。欲知詳情,請參閱我們介紹的上述實用程序的參考手冊頁。$ man nix-channel $ man nix-env 你可以在項目官網https://nixos.org/nix/找到Nix軟件包管理器的說明文檔。結束語Nix是一種純粹功能型的軟件包管理器,爲可靠且可重複的軟件包管理而設計。它提供了很有意思的軟件包管理概念,與Linux中的YUM和APT等常用工具大不相同。我們在本文中介紹瞭如何在多用戶模式下安裝nix,討論瞭如何用Nix進行軟件包管理,歡迎留言交流。

查看原文 >>
相關文章