我可以安裝一些在Nix存儲庫中不可用的軟件包(使用Nix),但可以作爲deb或rpm文件或作爲源文件(tar.gz)使用嗎?有什麼辦法呢?這隻能在NixOS上完成,還是在其他Linux發行版中安裝Nix?感謝您的洞察力。從外部Nix存儲庫安裝
2
A
回答
4
Nix包管理器是一個管理軟件的程序。爲此,與所有軟件包管理器一樣,此軟件需要打包成適合的格式。
Nix只能理解Nix表達式,它用於構建和安裝軟件。有一些轉換方法(例如對於cabal包),但是對於大多數軟件,需要有相應的Nix表達式才能夠與Nix一起使用。
也就是說,通常可以從其他軟件包管理器解包(例如.deb
)。由於大多數其他包裝管理者遵循Filesystem Hierarchy Standard (FHS)有與尼克斯使用它們無論哪種方式,一種方式:
使用功能buildFHSUserEnv
一個可以創建一個包含一些尼克斯包的FHS environment。爲了能夠使用與尼克斯一.deb
打包的軟件,一個因而必須:
- 創建尼克斯表達式來解壓縮文件
.deb
。這個表達式的結果是一個帶有軟件的Nix軟件包,它不工作,因爲包含的軟件將在FHS目錄中查找它的依賴關係。 - 創建一個FHS環境並將之前的構建包以及所有依賴項加載到它中。
這不是一個簡單的程序,但在一定深度here解釋。
大多數情況下,它更簡單 - 如果有人可以訪問軟件的源代碼 - 創建一個正常的「本地」Nix軟件包,以適當的方式構建軟件。創建一個包標準./configure
,make
,make install
構建過程很簡單:
{ stdenv, fetchurl, autoconf }: # Add other dependencies here, as parameters to the function
stdenv.mkDerivation {
name = "FOO-1.42b"; # name of the package
src = fetchurl { # there's also fetchgit and other helpers
url = mirror://sourceforge/FOO/FOO-1.42b-src.tar.gz;
sha256 = "07iwv4j4d2n7f7iffv2xfi1lyp4vr0m9qw40pidw15h1jczxgps9";
};
meta = {
homepage = http://foo.bar;
description = "bar foo bar foo";
license = stdenv.lib.licenses.bsd3; # adjust
platforms = stdenv.lib.platforms.all;
};
buildInputs = [ autoconf ]; # just as example, autoconf needed if ...
preConfigure = "make -f Makefile.aux prepare"; # ... this step of the build hasn't been done upstream yet
# configureFlags, preBuild, installTargets , ... only if non standard build
}
有些文檔關於這個可以在nixpkgs manual找到。
無論是單獨使用Nix還是在NixOS中,後面的方法都可以工作。對於前者,如果您不能在基本系統上使用Linux命名空間,則可能會遇到問題。
相關問題
- 1. Nix:安裝ssreflect
- 2. Angular 2,從Github存儲庫安裝庫
- 3. SVN外部從本地存儲庫到遠程存儲庫
- 4. 外部存儲庫變化
- 5. 如何將庫安裝到您公司的外部Maven存儲庫
- 6. Android內存需要在外部存儲上安裝apk嗎?
- 7. 通過Nix安裝Haskell包
- 8. 從外部存儲顯示?
- 9. 將boost庫安裝到git存儲庫時的存儲消耗
- 10. 外部存儲
- 11. 如何將數據庫從內部存儲備份到外部(共享)存儲
- 12. 克隆到外部存儲庫的mercurial存儲庫
- 13. 安卓:無需使用外部存儲
- 14. 無法安裝Cardview存儲庫
- 15. 爲Android Studio安裝支持存儲庫
- 16. pip安裝本地git存儲庫
- 17. 從外部存儲庫遠程部署jbpm-project
- 18. 從內部到外部存儲的Android複製數據庫
- 19. 安全地存儲外部數據庫的密碼
- 20. 如何使用composer安裝git存儲庫的一部分?
- 21. 外部存儲到內部存儲
- 22. 在nix-store之外安裝文件的按摩軟件包
- 23. redmine中的外部mercurial存儲庫?
- 24. Github掛鉤外部存儲庫
- 25. DDD,外部數據和存儲庫
- 26. 模擬存儲庫顛覆外部git
- 27. MediaWiki:存儲在外部數據庫中
- 28. 外部存儲庫中的代碼
- 29. maven本地存儲庫代理外部
- 30. 從外部UI取消安裝