NixOS, сборка пакетов из исходного кода
Я думаю, что NixOS великолепен, но не может понять, как собрать пакет из исходного кода. Понимание языка nix не проблема, но как узнать, что добавить в default.nix для сборки пакета. Возьмем, к примеру, выражение nix для gedit:
{ 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;
};
}
Someone Как кто-то может прийти к этому решению? Я должен что-то упустить.
1 ответ
Неудивительно, что такое определение пакета немного ошеломляет кого-либо. Когда вы понимаете, на что влияют различные атрибуты, ваш пример пакета становится довольно простым.
По моему опыту, вы получите такое определение пакета следующим образом. Я предполагаю, что вы не упаковываете что-то из языкового репозитория на данный момент. То, что вы могли бы построить с make
, например.
- Начните с mkDerivation
- Смотреть сбой сборки
- Исправьте ошибку, добавив зависимости, дополнительные команды, настройте флаги, патчи и т. Д.
- Повторение
Так что у вас есть, это проб и ошибок. Опыт работы с необходимыми инструментами сборки очень помогает.
Некоторые намеки:
- Посмотрите на похожие пакеты, как они определены
- Прочитайте документацию Nixpkgs
- Сканирование кода поддержки языковых экосистемных пакетов
- https://nixos.wiki/wiki/Generic_Algorithm_on_Doing_Packaging