LINUX.ORG.RU

Сборка пакетов в Debian


0

1

День добрый, уважаемые форумчане! У меня стоит Nagios версии 3.2.0, хочу обновить до версии 3.2.3 (разница между версиями почти пол года) но в репозитории только версия 3.2.0. Я скачал тарболл с сайта Nagios, только хочу поставить его «правильно», чтобы все пути установки сохранились и не нужно было его удалять потом руками. Пробовал делать с помощью checkinstall:

разархивировал архив, сделал ./configure , сделал make , потом пишу checkinstall -D он мне в конце выдает ошибку о том что не может записать в папку /usr/share/nagios/bin/nagios. Я вручную создал ее, дал права, потом он тоже самое с другой папкой выдал. Не могу же я вручную все директории ему создавать)))

попробовал с помощью dh_make:

разархивировал в другую директорию, переименовал архив в nagios_3.2.3.orig.tar.gz , сделал dh_make, потом добавил комментарии в debian/control, создал файл changelog, делаю dpkg-buildpackage -rfakeroot он мне выдает

dpkg-source: инфо: используется формат исходника «3.0 (quilt)» dpkg-source: инфо: сборка nagios с использованием существующего ./nagios_3.2.3.orig.tar.gz dpkg-source: ошибка: не удалось представить изменение nagios-3.2.3/nagios_3.2.3.orig.tar.gz: содержимое двоичного файла изменено dpkg-source: ошибка: добавьте nagios_3.2.3.orig.tar.gz в debian/source/include-binaries, если хотите хранить изменённый двоичный файл в debian tarball

Так же пробовал просто написать debian/rules binary, в итоге ошибка

Result: FAIL make[3]: *** [test] Ошибка 1 make[3]: Leaving directory `/home/downloads/nagios-3.2.3/t' make[2]: *** [test-perl] Ошибка 2 make[2]: Leaving directory `/home/downloads/nagios-3.2.3' make[1]: *** [test] Ошибка 2 make[1]: Leaving directory `/home/downloads/nagios-3.2.3' dh_auto_test: make -j1 test returned exit code 2 make: *** [binary] Ошибка 29

Подскажите пожалуйста какие шаги мне предпринять чтобы правильно собрать deb пакет из исходников?


А sudo checkinstall не катит? Ну, или su -c, если судо нет.

anonymous ()

Для минорных релизов отлично работает следующий путь:

1. Подключаем дебовые src репозитории.
2. mkdir -p $HOME/src/temp_build && cd $HOME/src/temp_build
3. apt-get source sofware-name
4. wget orig_sources.tar.bz2 && tar -xjf orig_sources.tar.bz2
5. cp sofware-name/debian orig_sources_dir
6. mv orig_sources.tar.bz2 sofware-name_version.orig.tar.bz2
7. cd orig_sources_dir && dch -i
тут вписываем новый релиз с корректной версией(детали см. в конце)
8. dpkg-buildpackage -rfakeroot
9. cd ../; sudo dpkg -i <PACKAGE>.deb
Касательно dch -i. Важно правильно указать версию т.е. в твоем случае это будет что-то типа
nagios3 (3.2.3-0.1) UNRELEASED; urgency=low                                                                                                                 
                                                                                                                                                             
  * Release from GIT                                                                                                                                         
                                                                                                                                                             
 -- YourName <email>  Thu, 27 Jan 2011 15:35:08 +0200  

Вот еще полезный гайдик: http://www.debian.org/doc/maint-guide/ch-final.ru.html#s-update

Jetty ★★★★★ ()

P.S. в testing УЖЕ 3.2.3 :)
Тестинг разморозили )

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

ну я примерно тоже самое делаю:

скачал с сайта нагиоса архив nagios-3.2.3.tar.gz создал директорию /home/downloads/src/ скопировал сюда архив разархивировал tar -xvzf nagios-3.2.3.tar.gz переименовал архив в nagios_3.2.3.orig.tar.gz и скопировал в /home/downloads/src/nagios-3.2.3/

делаю ./configure make checkinstall -D

все равно выдает ошибку о том что не может создать файл. Даже при попытке собрать версию 3.2.1 все равно ошибка вылазит:

[code] ========================= Результаты установки =========================== cd ./base && make install make[1]: Entering directory `/home/downloads/NEW/nagios-3.2.1/base' make install-basic make[2]: Entering directory `/home/downloads/NEW/nagios-3.2.1/base' /usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/bin /usr/bin/install -c -m 774 -o nagios -g nagios nagios /usr/local/nagios/bin /usr/bin/install -c -m 774 -o nagios -g nagios nagiostats /usr/local/nagios/bin make[2]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/base' make strip-post-install make[2]: Entering directory `/home/downloads/NEW/nagios-3.2.1/base' /usr/bin/strip /usr/local/nagios/bin/nagios /usr/bin/strip /usr/local/nagios/bin/nagiostats make[2]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/base' make[1]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/base' cd ./cgi && make install make[1]: Entering directory `/home/downloads/NEW/nagios-3.2.1/cgi' make install-basic make[2]: Entering directory `/home/downloads/NEW/nagios-3.2.1/cgi' /usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/sbin for file in *.cgi; do \ /usr/bin/install -c -m 775 -o nagios -g nagios $file /usr/local/nagios/sbin; \ done make[2]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/cgi' make strip-post-install make[2]: Entering directory `/home/downloads/NEW/nagios-3.2.1/cgi' for file in *.cgi; do \ /usr/bin/strip /usr/local/nagios/sbin/$file; \ done /usr/bin/strip:/usr/local/nagios/sbin/avail.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/cmd.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/config.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/extinfo.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/histogram.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/history.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/notifications.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/outages.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/showlog.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/status.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/statusmap.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/statuswml.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/statuswrl.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/summary.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/tac.cgi: could not create temporary file to hold stripped copy: No error /usr/bin/strip:/usr/local/nagios/sbin/trends.cgi: could not create temporary file to hold stripped copy: No error make[2]: *** [strip-post-install] Ошибка 1 make[2]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/cgi' make[1]: *** [install] Ошибка 2 make[1]: Leaving directory `/home/downloads/NEW/nagios-3.2.1/cgi' make: *** [install] Ошибка 2

**** Установка неудачна. Отменяется создание пакета.

Очищается...OK

Удачи. [/code]

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

и немножко не понял

5. cp sofware-name/debian orig_sources_dir 6. mv orig_sources.tar.bz2 sofware-name_version.orig.tar.bz2 7. cd orig_sources_dir && dch -i

orig_sources_dir это что значит?

r1sh ()

>У меня стоит Nagios версии 3.2.0, хочу обновить до версии 3.2.3

качаешь сорцы пакета из сида, build-dep и переканпеляешь под свой дистр

http://packages.debian.org/sid/nagios3 - те что справа в секции «исходный код»

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

Не, ты не совсем понял :)
Описанный мною путь - это путь создания(на самом деле обновления) валидного пакета дебиан :)
чекинстал запускать не надо :)

смотри, когда ты делаешь «apt-get source nagios3», скачиваются сорцы, и затем распаковываются в nagios3-3.2.0 (или что-то типа того). Внутри есть каталог debian, вот это и есть правила сборки пакета дебиановского. А так как в минорных версиях содержимое сорцов почти не изменяется(как правило баги фиксят и т.д.) то эти же правила подойдут и для версии 3.2.3(с очень большой вероятностью).
Таким образом, мы банально берем эти правила(каталог дебиан) и подсовываем в свежие исходинки, т.е. «cp sofware-name/debian orig_sources_dir» что в твоем случае выглядит как «cp nagios3-3.2.0/debian nagios-3.2.3»
Получает «отдебианенные» сорцы версии 3.2.3. А дальше собираем его как обычный дебиан пакет, т.е. «dch -i» (обновляем чейнджлог) и зачем «dpkg-buildpackage -rfakeroot» собственно собраем сам пакет.

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

Точнее концептуально да, лучше. Но практически не всегда получается.

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

могут зависимости не удовлетвориться, тем более с нынешним расхождением sid-lenny

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

Именно поэтому подумался сквиз чета :)

Jetty ★★★★★ ()

Оформи сообщение нормально, поставь br'ы, где надо. Тошнит, ей богу!

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

ааа спасибо огромное за обьяснение, вот значит чего не хватала то а я все голову ломал))) я уже думал что папка debian в каталоге исходника это чтото типа эмулятора новой версии ядра и бла бла бла)

Значит так все просто?) Супер))

после dch -i соответственно нужно исправить версию на новую не забыть)

и потом когда он собрался просто dpkg -i имя_пакета?)

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

В точку :)
Про версию... Та версия которую ты впишешь в dch -i влияет на то какой файл сорцов будет искаться:
если распакованные сорцы лежат в /tmp/src/nagios, то в /tmp/src должен быть файл, точнее архив с сорцами nagios_<ВЕРСИЯ_ИЗ_dch-i>.orig.tar.bz2

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

Кстати а как правильно подключить репозиторий сида, чтобы при apt-get update у меня не все пакеты обновились а только к примеру Nagios?

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

точно!) теперь все стало ясно) а такой мелочи не хватало)

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

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

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 800

Package: *
Pin: release a=unstable
Pin-Priority: 700

единственное я не понял момента по поводу цифр приоритета

P > 1000 causes a version to be installed even if this constitutes a downgrade of the package 990 < P <=1000 causes a version to be installed even if it does not come from the target release, unless the installed version is more recent 500 < P <=990 causes a version to be installed unless there is a version available belonging to the target release or the installed version is more recent 100 < P <=500 causes a version to be installed unless there is a version available belonging to some other distribution or the installed version is more recent 0 < P <=100 causes a version to be installed only if there is no installed version of the package P < 0 prevents the version from being installed

в переводе получается что:

1000 - ставится в любом случае, даже если пакет stable а система testing.

990 < P <=1000  версия пакета поставиться даже если не с этого релиза, если только установленная версия ниже.

500 < P <=990   версия пакета поставится только если есть более новая версия для данного релиза

0 < P <=100   версия пакета поставиться, если есть более новая версия для другого релиза или установленный пакет имеет более позднюю версию.

P < 0   не поставится вааааще

я пробовал прописывать как я указал выше и пробовал вот так:

Package: *
Pin: release a=stable
Pin-Priority: 100

Package: *
Pin: release a=testing
Pin-Priority: 90

Package: *
Pin: release a=unstable
Pin-Priority: 80

я попробовал первый способ, сделал apt-get update, потом
apt-cache policy nagios3 >> /home/nagios3_1
apt-cache show nagios3 >> /home_nagios3_1
apt-cache policy nagios3 >> /home/nagios3_2
apt-cache show nagios3 >> /home_nagios3_2
и
diff -u nagios3_1 nagios3_2 | less

--- nagios3_1   2011-02-09 11:50:33.996999467 +0300
+++ nagios3_2   2011-02-09 11:52:44.441048844 +0300
@@ -3,12 +3,12 @@
   Кандидат:   3.2.1-2
   Таблица версий:
      3.2.3-1 0
-         90 http://debian.nsu.ru/debian/ testing/main i386 Packages
-         80 http://debian.nsu.ru/debian/ unstable/main i386 Packages
+        800 http://debian.nsu.ru/debian/ testing/main i386 Packages
+        700 http://debian.nsu.ru/debian/ unstable/main i386 Packages
  *** 3.2.1-2 0
-        100 http://mirror2.corbina.ru/debian/ stable/main i386 Packages
-        100 ftp://ftp.ru.debian.org/debian/ stable/main i386 Packages
-        100 http://debian.nsu.ru/debian/ stable/main i386 Packages
+        900 http://mirror2.corbina.ru/debian/ stable/main i386 Packages
+        900 ftp://ftp.ru.debian.org/debian/ stable/main i386 Packages
+        900 http://debian.nsu.ru/debian/ stable/main i386 Packages
         100 /var/lib/dpkg/status
 Package: nagios3
 Priority: optional

разницы вообще никакой в файлах кроме цифр приоритетов, он и так и так видел последнюю версию файла но при apt-get upgrade он не ставил ее) так в чем тогда разница?)

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

Разница,на практике, по большей части «логическая» т.к. ставится пакет с большим приоритетом, за исключением <100 >1000 :)

1000 - для даунгрейда

<100 - не ставить

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