LINUX.ORG.RU

Функциональный менеджер пакетов Nix: Часть 3. Описание сборки пакета

 


0

0

Продолжаем осваивать функциональный менеджер пакетов Nix. В этой части цикла мы обсудим вопросы самостоятельного расширения набора описаний пакетов. Здесь нам будет полезно знание языка Nix-выражений, описание которого было дано в предыдущей статье. Как управляться с готовым набором пакетов, смотрите в первой статье («Базовое использование») цикла.

>>> Подробности

★★★

Проверено: boombick ()

Ответ на: комментарий от mechanicus

а при чем здесь rpm? это призвано заменить portage, но вряд ли получится

anonymous ()
Ответ на: комментарий от anonymous

Это призвано заменить LHS.

а при чем здесь rpm? это призвано заменить portage, но вряд ли получится

Nix призван заменить не только RPM и Portage, но покушается на куда более фундаментальные вещи.

Camel ★★★★★ ()
Ответ на: комментарий от devl547

Редкостное УГ — это менеджеры, которые не могут решить проблему коллизий имен файлов.

balodja ★★★ ()

Описание пакета очень похоже на идеал.

Спек для mpg321:

{stdenv, fetchurl, libao, libmad, libid3tag, zlib}:

stdenv.mkDerivation {
name = «mpg321-0.2.10»;
src = fetchurl {
url = mirror://sourceforge/mpg321/mpg321-0.2.10.tar.gz;
sha256 = «db0c299592b8f1f704f41bd3fc3a2bf138658108588d51af61638c551af1b0d4»;
};

buildInputs = [libao libid3tag libmad zlib];

meta = {
description = «Command-line MP3 player.»;
homepage = http://mpg321.sourceforge.net/;
license = «GPLv2»;
};
}



Вот только откуда он берет список файлов для заворачивания в пакет?

А если надо распилить пакет на основной и девел или отделить данные или плагины?

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

> Вот только откуда он берет список файлов для заворачивания в пакет?

Скачивает тарболл и смотрит, что там?

Obey-Kun ★★★★★ ()
Ответ на: Это призвано заменить LHS. от Camel

Re: Это призвано заменить LHS.

каким образом он призван заменить rpm, если установка из исходников? можно и в бинарных дистрах его ставить, но он не призван заменить их бинарные пакеты.

anonymous ()

аЄб�НаКб�ИаОаНаАаЛб�Нб�Й аМаЕаНаЕаДаЖаЕб�аПаАаКаЕб�ОаВ Nix: аЇаАб���3. а�ПаИб�АаНаИаЕ б�БаОб�КаИ аПаАаКаЕб�А

Это по ссылке...

anonymous ()
Ответ на: комментарий от Obey-Kun

>Скачивает тарболл и смотрит, что там?

файлов, которые пойдут в бинарный пакет. Он же умеет делать предустановленные бинарные пакеты.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Хотя возможно он заворачивает вообще все окружение, которое построит.

AVL2 ★★★★★ ()
Ответ на: комментарий от balodja

>которые не могут решить проблему коллизий
...и поэтому кидают все как в винде в оду папку чтоб наверняка.
Редкостное УГ - это мейнтейнеры, которые пропускают такие коллизии

devl547 ★★★★★ ()
Ответ на: комментарий от devl547

>..и поэтому кидают все как в винде в оду папку чтоб наверняка.

чушь

Редкостное УГ - это мейнтейнеры, которые пропускают такие коллизии

ну ты счас всех майнтейнеров федоры, дебиана и всех всех, кто пользуется рпм и дебами назвал Уг. причем редкостным, а ведь их много...

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

Это очень похоже на ini файл с ненужными скобками и точка-с-запятыми.

Deleted ()
Ответ на: комментарий от Deleted

>Это очень похоже на ini файл с ненужными скобками и точка-с-запятыми.

и это замечательно, что похоже на простой ini-файл. И тем не менее это полноценный сценарий сборки и опакечивания программы.

AVL2 ★★★★★ ()

Фтопку Nix. Gentoo наше всё.

anonymous ()
Ответ на: комментарий от AVL2

Я имею в виду, а нельзя было просто ini-файлом обойтись, или там что-то сложнее?

Deleted ()
Ответ на: комментарий от Deleted

>Я имею в виду, а нельзя было просто ini-файлом обойтись, или там что-то сложнее?

ну если вынести все скрипты в отдельные файлы, то можно и обойтись. Собственно, в сложных случаях они так и делают вынося сборку в build.sh. Только это ничего не меняет, просто весь кошмар будет в отдельных файлах.

AVL2 ★★★★★ ()

Какие у Nix преимущества по сравнению с Portage? Rollback меня, как пользователя, не интересует. С тех пор, как перелез с ~amd64 на amd64 (с нестабильной ветки на стабильную), ничего не отваливалось и не ломалось при обновлении, необходимости в откатах нет.

anonymous ()
Ответ на: комментарий от anonymous

>Он чист :)
Если ты имеешь ввиду, что он написан на функциональном языке, то это строго побоку, хоть бейсик, лишь бы хорошо работал.

anonymous ()
Ответ на: комментарий от anonymous

какие преимущества у порш кайена по сравнению с горбатым запорожцем?

скажу сразу, скорость, проходимость, надежность и удобство меня, как пользователя не интересуют. С тех пор как я отпилил у своего рыдвана все лишнее оставив только раму и передние колеса, ничего больше не отваливалось.

AVL2 ★★★★★ ()

О каких ini файлах вообще идёт речь? Никс это ленивый чисто функциональный ЯП.

astsmtl ()

Бинарные пакеты собираются с помощью системы непрерывной интеграции «Гидра». Т.е. она помогает поддерживать все пакеты в работоспособном состоянии, и предоставляет бинарные сборки. Юольшой профит в том, что если вы ставите пакет для которого есть бинарная сборка, то он будет просто скачан и распакован. Если вы что-то изменили, меняется хеш в хранилище, и пакет будет собран из исходников.

astsmtl ()

Загадка, вот как IBM_dw умеет писать на темы, которые либо нахрен нкому не сдались, либо УГ, либо для школия? Талант, блин. Интересно, там просто бот или идиоты?

Sanitar ()
Ответ на: комментарий от AVL2

Адекватный ответ видно издалека...

anonymous ()
Ответ на: комментарий от astsmtl

все таки непонятно, как никс разделяет пакеты между собой. Хеш чего он в итоге берет? Как он выделяет (не переписывает) конфиги при обновлении (хотя по идее он вообще ичего не переписывает, но процедура обновления есть? и конфиги-то надо переносить из старой версии). Можно ли использовать эту систему вовсе без компилятора, используя только предкомпиленые пакеты из репозитария? Можно ли использовать некую отдельную систему (билдинг фарм) для сборки с деплойментом на другие машины?

AVL2 ★★★★★ ()
Ответ на: комментарий от astsmtl

Описание пакетов это язык? Как страшно жить!

Deleted ()

Чушь какая-то. Порты наше все.

BSD ()

Вообще было бы не плохо, иметь возможность использования пакетов простых к установке не зависимо от дистрибутива.

unixnik ★★★★★ ()
Ответ на: комментарий от AVL2

> Описание пакета очень похоже на идеал.

Где-то кавычки в значениях параметров нужны, где-то нет. Где-то перечисление идёт в фигурных скобках через запятую, где-то в квадратных через пробел. И этот разброд в синтаксисе похож на идеал?

anonymous ()
Ответ на: комментарий от unixnik

ну это всё равно как-то костылёво выглядит. Вот если б оно генерить пакеты умело ... можно было бы подумать. А вообще, мне вот aur хватает.

dotbg ★★★★ ()
Ответ на: комментарий от anonymous

> Если ты имеешь ввиду, что он написан на функциональном языке, то это строго побоку, хоть бейсик, лишь бы хорошо работал.

Он сам функциональный.

balodja ★★★ ()
Ответ на: комментарий от balodja

>Он сам функциональный.
Можешь поподробнее про его функциональность рассказать?

anonymous ()
Ответ на: комментарий от anonymous

А зайти на nixos.org и прочитать первую надпись сложно? Ну и анонимусы нынче пошли, ай-ай-ай.

balodja ★★★ ()
Ответ на: комментарий от anonymous

>Где-то кавычки в значениях параметров нужны, где-то нет. Где-то перечисление идёт в фигурных скобках через запятую, где-то в квадратных через пробел. И этот разброд в синтаксисе похож на идеал?

не говори, даже среди людей нет идеала - где-то девочки, где-то мальчики и нафига этот разброд?


Я говорил о том, что тот же самый спек для рпм выглядит так:

%define _bindir /usr/bin
%define _docdir /usr/share/doc
%define packer %(finger -lp `echo «$USER»` | head -n 1 | cut -d: -f 3)
%define buildsubdir %{name}

Name: mpg321
Summary: A Free command-line mp3 player, compatible with mpg123
Version: 0.2.11
Release: 2
License: GPL2+
Vendor: D. E. Evans <sinuhe@deevans.net>
Packager: %packer
Group: Applications/Multimedia
Source: http://prdownloads.sourceforge.net/mpg321/mpg321_0.2.11.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-build
BuildRequires: libao-devel, libmad, libid3tag-devel, zlib-devel
Provides: mpg123
Obsoletes: mpg123

%description
mpg321 is a clone of the popular mpg123 command-line mp3 player. It
should function as a drop-in replacement for mpg123 in many
cases. While some of the functionality of mpg123 is not yet
implemented, mpg321 should function properly in most cases for most
people, such as for frontends such as gqmpeg.

mpg321 is based on the mad MPEG audio decoding library. It therefore
is highly accurate, and also uses only fixed-point calculation, making
it more efficient on machines without a floating-point unit.

While mpg321 is not as fast as the non-free mpg123 on systems which
have a floating point unit, it comes under a fully Free license, which
allows greater freedom to its users. For most people who want mpg123,
mpg321 is a better alternative.

%prep
echo Building %{name}-%{version}-%{release}
%setup -n %{name}
%configure

%build
%{__make} %{?_smp_mflags}

%install
%makeinstall

%clean
%{__rm} -rf %{buildroot}

%files
%defattr(-,root,root)
%dir %_docdir/%{name}-%{version}/
%doc AUTHORS BUGS ChangeLog COPYING HACKING NEWS THANKS TODO README README.remote
%doc %{_mandir}/man1/%{name}.1.gz

# the binary files
%{_bindir}/*

%changelog
* Thu Dec 24 2009 - D. E. Evans <sinuhe@deevans.net>
- Tidy up for multi-distro support.


И это по моему дикий оверхед.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

> И это по моему дикий оверхед.

Оверхед-не-оверхед, но в спеке для RPM содержится больше информации о пакете и нет того самого разброда в синтаксисе («здесь строки в кавычках, там без кавычек», «тут перечисление так, там перечисление сяк» и т.п.).

anonymous ()
Ответ на: комментарий от AVL2

> И это по моему дикий оверхед.

И это всё нужная информация. Nix тоже ее откуда-то берет.

tailgunner ★★★★★ ()
Ответ на: комментарий от anonymous

>Оверхед-не-оверхед, но в спеке для RPM содержится больше информации о пакете и нет того самого разброда в синтаксисе («здесь строки в кавычках, там без кавычек», «тут перечисление так, там перечисление сяк» и т.п.).

вот не надо про разброд.

Здесь переменная %{_prefix} с процентом, а там ${RPM_BUILD_ROOT} уже с долларом.

здесь параметр с двумя минусами: make --prefix=/usr install

а тут уже без: make DESTDIR=/usr install

а в никсовом никакого разброда. спиписки везде как списки, строки как строки, функции как функции, а числа как числа.

AVL2 ★★★★★ ()
Ответ на: комментарий от tailgunner

>И это всё нужная информация. Nix тоже ее откуда-то берет.

именно. никс ее берет, а не перекладывает на пакажера и в каждый спек.

AVL2 ★★★★★ ()
Ответ на: комментарий от AVL2

> Здесь переменная %{_prefix} с процентом, а там ${RPM_BUILD_ROOT} уже с долларом.

То, что подставляется самим RPM-ом — с процентом. Что подставляется шеллом — с долларом.

здесь параметр с двумя минусами: make --prefix=/usr install

а тут уже без: make DESTDIR=/usr install

Параметры make к синтаксису спеков RPM отношения не имеют.

а в никсовом никакого разброда. спиписки везде как списки, строки как строки, функции как функции, а числа как числа.

Ну да. В начале список в фигурных скобках через запятую, параметры функций mkDerivation и fetchurl — в фигурных скобках через точку с запятой, а список библиотек (или что там в buildInputs) — в квадратных скобках через пробел. Строки с названием, описанием и лицензией пакета пишутся в кавычках, строки с адресами — без кавычек. Идеальный единообразный синтаксис прям. :/

anonymous ()
Ответ на: комментарий от AVL2

> именно. никс ее берет, а не перекладывает на пакажера и в каждый спек.

И откуда он её берёт? Из астрала получает или сам придумывает?

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.