[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