【问题标题】:How to build Nix packages from source?如何从源代码构建 Nix 包?
【发布时间】:2018-08-18 23:06:27
【问题描述】:

我认为 NixOS 很棒,但不知道如何从源代码构建包。理解Nix expression language 不是问题,而是要知道在default.nix 中放入什么来构建一个包。

gedit 的 Nix 表达式为例:

{ stdenv, intltool, fetchurl, enchant, isocodes
, pkgconfig, gtk3, glib
, bash, wrapGAppsHook, itstool, libsoup, libxml2
, gnome3, librsvg, gdk_pixbuf, file, gspell }:

stdenv.mkDerivation rec {
  inherit (import ./src.nix fetchurl) name src;

  propagatedUserEnvPkgs = [ gnome3.gnome_themes_standard ];

  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];

  buildInputs = [ gtk3 glib intltool itstool enchant isocodes
                  gdk_pixbuf gnome3.defaultIconTheme librsvg libsoup
                  gnome3.libpeas gnome3.gtksourceview libxml2
                  gnome3.gsettings_desktop_schemas gnome3.dconf file gspell ];

  enableParallelBuilding = true;

  preFixup = ''
    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ gnome3.libpeas gnome3.gtksourceview ]}")
  '';

  meta = with stdenv.lib; {
    homepage = https://wiki.gnome.org/Apps/Gedit;
    description = "Official text editor of the GNOME desktop environment";
    maintainers = gnome3.maintainers;
    license = licenses.gpl2;
    platforms = platforms.linux;
  };
}

如何才能得出这个解决方案?我一定是错过了什么。

【问题讨论】:

    标签: nix nixos


    【解决方案1】:

    毫不奇怪,这样的包定义对任何人来说都有点不知所措。当您了解各种属性的作用后,您的示例包就变得非常简单了。

    根据我的经验,您会得出如下的包定义。我假设你现在没有从特定语言的存储库中打包一些东西。例如,您可以使用 make 构建的东西。

    1. mkDerivation开头
    2. 观察构建失败
    3. 通过添加依赖项、额外命令、配置标志、补丁等来修复错误。
    4. 重复

    所以你有它,这是反复试验。使用所需构建工具的经验会很有帮助。

    一些提示:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-14
      • 2012-06-11
      • 2017-05-24
      • 2023-03-04
      • 2010-11-17
      • 2021-10-07
      • 2012-01-21
      • 2012-06-13
      相关资源
      最近更新 更多