[Comm] Сборка rpm из исходников
Alexander Bokovoy
=?iso-8859-1?q?a=2Ebokovoy_=CE=C1_sam-solutions=2Enet?=
Вс Ноя 30 10:57:01 MSK 2003
On Sat, Nov 29, 2003 at 09:14:00PM +0200, Евгений Косенко wrote:
> Вот, собрался опробовать свои силы в сборке rpm-пакетов из исходников. Как мне
> и рекомендовали, посмотрел статью
>
> http://atmsk.ru/indexe98c.html?option=articles&task=viewarticle&artid=40&Itemid=3
>
> и попробовал сделать так же. Могу сказать, что статья явно не для новичков.
> Во-первых, в тексте нигде не упомянуто, что "непривилегированный"
> пользователь должен входить в группу rpm. Во-вторых, каталог /usr/src, куда
> рекомендуется ставить исходники, доступен только для "привилегированного"
> пользователя root. Как он может быть доступен другим при установке из коробки
> -- ума не приложу. А в-третьих, совершенно неясно, из каких каталогов
> выполнять указанные команды. Впрочем, обо всем по порядку. Итак,
1. Он действительно не обязан входить в группу rpm для обычной сборки.
2. При запуске rpm -i some-package.src.rpm произойдет создание дерева RPM
для сборки в Вашем домашнем каталоге (~/RPM, если не указано другое в
~/.rpmmacros) -- так сделано у нас, начиная с М2.2.
> /home/user
> $ apt-get source gnome-mlview
Вот для работы этой команды, пользователь *должен* входить в группу rpm.
Связано это с тем, что ему (точнее, apt'у в этом режиме) нужен доступ к
/var/cache/apt/*, который имеет права доступа только владельцу (root) и
группе (rpm) -- не все же в системе обязаны иметь доступ к общесистемной
службе установки пакетов.
> Чтение списков пакетов... Завершено
> Построение дерева зависимостей... Завершено
> Необходимо получить 451kB исходных архивов.
> Получено: 1 ftp://ftp.linux.kiev.ua i586/classic gnome-mlview 0.6.0-alt1
> (srpm) [451kB]
> Получено 26,4kB за 19s (1324B/s).
> gnome-mlview
> ##################################################
> $
>
> Мнэ... Он, оказывается, не только тянет файл, как сказано в статье, он еще его
> и ставит! Ладно,
>
> $ ls -l /usr/src
> итого 2
> drwxr-xr-x 3 root root 72 Ноя 8 21:37 kernel
> drwxr-xr-x 14 root root 792 Ноя 8 21:37 linux
> $ ls -l
> ...
> drwxr-xr-x 4 user user 96 Ноя 29 20:10 RPM
> ...
>
> Похоже, что подкаталог RPM ставится в тот же каталог... Ладно, может ему нужно
> указывать установку явно:
>
> $ rm -rf RPM
> $ rpm -i gnome-mlview-0.6.0-alt1.src.rpm
> $ ls -l /usr/src
> итого 2
> drwxr-xr-x 3 root root 72 Ноя 8 21:37 kernel
> drwxr-xr-x 14 root root 792 Ноя 8 21:37 linux
> $ ls -l
> ...
> drwxr-xr-x 4 user user 96 Ноя 29 20:10 RPM
> ...
>
> Весело? Мне не очень. Проверял и от обычного пользователя и от
> суперпользователя, во всех домашних каталогах и в /usr/src, результат всегда
> один и тот же -- файлы ставятся в домашний каталог. На этом фоне фраза типа
Все правильно. Файлы и должны ставиться в домашний каталог.
>
> > Теперь необходимо положить исходники программы *.tar.gz и патчи *.patch.gz в
> > папочку с /usr/src/RPM/SOURCES, файл описания процесса сборки *.spec
> > положить в папку /usr/src/RPM/SPECS и можно приступать к сборке. Не спешите
> > хвататься за MC и раскладывать файлы вручную, я всего лишь описал процесс,
> > чтобы вы знали, где искать концы после этой операции. В реальности все
> > вышеперечисленное делает команда
>
> > $rpm -i ваша_программа.src.rpm
>
> выглядит как особо изощренное издевательство. После трехлетней жизни в Линукс
> у меня выработалось устойчивое мнение, что результаты сборки не должны
> зависеть от положения рабочего каталога так же, как и от фаз Луны. Неужели
> каталог /usr/src обладает особой магией?
Я думаю, что в данном случае материал на atmsk.ru устарел.
>
> Ладно, идем дальше... Допустим, вопреки рекомендациям, имея особо продвинутые
> права, выполняем следующее:
>
> $ su -
> ...
> # mv ~user/RPM /usr/src
> # chgrp -R rpm /usr/src/RPM
> # ls -lR /usr/src/RPM
> /usr/src/RPM:
> total 1
> drwxr-xr-x 2 user rpm 248 Nov 29 21:02 SOURCES
> drwxr-xr-x 2 user rpm 88 Nov 29 21:02 SPECS
>
> /usr/src/RPM/SOURCES:
> total 464
> -rw-r--r-- 1 eugine rpm 22753 Sep 24 01:22
> gnome-mlview-0.6.0.ru.po
> -rw-rw-r-- 1 user rpm 753 Sep 11 22:34 gnome-mlview-16.png
> -rw-rw-r-- 1 user rpm 2087 Sep 11 22:34 gnome-mlview-32.png
> -rw-rw-r-- 1 user rpm 4859 Sep 11 22:34 gnome-mlview-48.png
> -rw-rw-r-- 1 user rpm 432144 Sep 11 09:45 mlview-0.6.0.tar.bz2
>
> /usr/src/RPM/SPECS:
> total 4
> -rw-r--r-- 1 user rpm 2652 Sep 24 01:22 gnome-mlview.spec
> # cd /usr/src/RPM/SPECS
> # rpm -ba gnome-mlview.spec
> gnome-mlview.spec: No such file or directory
> # exit
> $ pwd
> /home/user
> $ rpm -ba gnome-mlview.spec
> gnome-mlview.spec: No such file or directory
> $ cd /usr/src/RPM/SPECS
> $ rpm -ba gnome-mlview.spec
> gnome-mlview.spec: No such file or directory
> $
>
> И так далее в разных позах с одним и тем же результатом. Цитирую статью:
>
> > Обратите внимание! в отличии от обычных операций установки через RPM - эта
> > операция выполняется от пользователя! иначе RPM скажет вам, что сборка
> > разрешена только непривилегированным пользователям и собирать ничего не
> > будет.
>
> Не знаю, насколько нужно быть "непривилигированным" пользователем, но если
> приведенные сообщения обозначают, "что сборка разрешена только
> непривилегированным пользователям", то я испанский летчик.
>
> Ладно, это все мелочи и придирки в плохом настроении. Главный вопрос: что я
> делаю не так? Или я такой счастливый, что для первого знакомства мне попался
> кривой пакет из Сизифа?
Все, что Вам нужно было сделать:
0. rpm -i some-package.src.rpm
1. Поставить все необходимые для сборки пакета зависимости
2. cd ~/RPM/SPECS
3. rpmbuild -ba some-package.spec
Пример. foobar -- только что созданный пользователь, я ничего не
модифицировал в его окружении.
[foobar на boids foobar]$ rpm -i /home/common/Sisyphus/files/SRPMS/samba3-3.0-alt46.1.src.rpm
[foobar на boids foobar]$ ls
Documents RPM tmp
[foobar на boids foobar]$ cd ~/RPM/SPECS/
[foobar на boids SPECS]$ ls
samba3.spec
[foobar на boids SPECS]$ rpmbuild -ba samba3.spec
ошибка: неудовлетворенные зависимости сборки:
automake_1.6 нужен для samba3-3.0-alt46.1
libattr-devel нужен для samba3-3.0-alt46.1
libpopt-devel нужен для samba3-3.0-alt46.1
libreadline-devel нужен для samba3-3.0-alt46.1
libssl-devel нужен для samba3-3.0-alt46.1
libacl-devel нужен для samba3-3.0-alt46.1
libcups-devel нужен для samba3-3.0-alt46.1
latex2html нужен для samba3-3.0-alt46.1
libMySQL-devel нужен для samba3-3.0-alt46.1
[foobar на boids SPECS]$
Теперь мне надо установить недостающие сборочные зависимости, чтобы
собрать этот пакет, но это уже за пределами рассматриваемой "проблемы".
--
/ Alexander Bokovoy
Samba Team http://www.samba.org/
ALT Linux Team http://www.altlinux.org/
Midgard Project Ry http://www.midgard-project.org/
Подробная информация о списке рассылки community