Страница 1 из 1

Сборка deb-пакетов в домашних условиях.

Добавлено: 18 дек 2005, 13:25
Llama
собственно, временами хочется поставить на debian-подобные системы что-то из исходников...
Дале описан самый быстрй и самый изуверский способ получения deb-пакетов из исходников ;)

1) Все делаем от юзера.
2) Распаковываем исходники, читаем INSTALL, ./configure --help, запускаем ./configure с нужными опциями, запускаем make.
3) после успешной компиляции создаем некий каталог, например /tmp/package
4) делаем make install DESTDIR=/tmp/package/
внимательно наблюдаем за выводом make install - если небыло ругни на permission denied - значит добрые разработчики предусмотрели обработку параметра DESTDIR и нам повезло ;)
5) в /tmp/package создаем подкаталог DEBIAN, в нем
- файл control.
примерное содержимое файла:

Код: Выделить всё

Package: licq-plugin-icqnd
Architecture: i386
Depends: licq
Provides: licq-plugin
Priority: optional
Version: 0.1.9.3
Maintainer: nobody care
Description: graphical user interface plug-in for Licq using GTK2
 This package provides the GTK2-based graphical user interface to the Licq
Надеюсь, в поянениях не нуждается...
Далее, выполняем команду:
dpkg-deb -b /tmp/package package-version-arch.deb
И получаем файл package-version-arch.deb пригодный к установке.

Более человечный способ описан напрмер тут:
http://women.alioth.debian.org/wiki/ind ... houtHelper
Но мне как-то и эотго хватает ;)

Добавлено: 18 дек 2005, 16:02
kif0rt
Вот спасибо ... давно искал подобную инфу. теперь соберу k3b 0.12.9.

Добавлено: 20 дек 2005, 23:11
*Sasha*
kif0rt,
А почему не 0.12.10?

Добавлено: 21 дек 2005, 20:21
Llama
Еще hint: допустим путем безчеловечных экспириментов поломана система зависимостей в дистриубтиве...

Например, какомй-то пакету очень хочется видеть
пакет mozilla-firefox-gnome-support, а у нас есть только firefox-gnome-support. Далее есть два пути:
1) Правильный - сделать apt-get build-dep firefox-gnome-support && apt-get sources firefox-gnome-support, после чего поправить debian/control дописав в описание пакета строчку Provides: mozilla-firefox-gnome-support или поправив существующий Provides:, после чего сделать fakeroot dpkg-buildpackage. Подождать пока все скомпилится, поставить поправленый пакет. Но на dialup так сделать трудно - больно много возможно придется качать.
2) Неправильный путь. Создаем пустой каталог, в нем - DEBIAN/control примерно такого содержания, после чего собираем пакеты как было описано выше и ставим его.

Код: Выделить всё

Package: fake-mozilla-firefox-gnome-support
Maintainer: nobody care
Architecture: i386
Section: gnome
Depends: firefox
Provides: mozilla-firefox-gnome-support
Version: 0.1
Description: Package to provide fake-mozilla-firefox-gnome-support
 Package to provide fake-mozilla-firefox-gnome-support - from scratch

Добавлено: 22 дек 2005, 00:03
kif0rt
*Sasha* писал(а):kif0rt,
А почему не 0.12.10?
хм ... верси плодятся как кролики. щас будем качать.

Re: Сборка deb-пакетов в домашних усоваиях.

Добавлено: 22 дек 2005, 23:40
Berserker
Llama писал(а): 4) делаем make install DESTDIR=/tmp/package/
внимательно наблюдаем за выводом make install - если небыло ругни на permission denied - значит добрые разработчики предусмотрели обработку параметра DESTDIR и нам повезло ;)
Тут можно и посмотреть Makefile - куда оно собирается ставить то , что скомпилено, и отредатровать соответствующую переменную. Обычно ее значение "/usr/local/".

Добавлено: 15 фев 2006, 21:35
Llama
Ну... /usr/local/ вобщем-то можно задать и на этапе ./configure - там будет правильнее.
ИМХО править в makefile префикс не стоит - ибо вполне может оказаться что при работает какой-нить скрипт который модифицирует скажем в скриптах/либах/модулях некие занчения соответсвенно prefix (вполне вероятно для программ использующих что-то интерпретируемое в качестве модулей)
Правильнее будет посмотреть в Makefile каким образом вызывается install - почти всегда это что-то вида

Код: Выделить всё

INSTALL = /path/to/install 
и вызывается оно чем-то вида $(INSTALL) $(src-localtion)/binary-file $(INSTALL_ROOT)/$(BINARY_PREFIX)
Соответсвенно проверяем по MAKEFILE - скорее всего переменная INSTALL_ROOT в Makefile нигде не задается, соотвественно ее можно задать перед вызовом:

Код: Выделить всё

INSTALL_ROOT=/tmp/package make install
PS: для ленивых - INSTALL_ROOT используется при сборке php ;)

Добавлено: 24 апр 2006, 02:43
phaoost
такой вот трабл: ставлю arts из исходников при этом убив старый. прописываю в control Provides: libartsc0, libartsc0-dev, libarts1, libarts1-dev, arts
cтавлю собраный пакет, запускаю aptitude.
в результате собраный пакет стоит, но новых виртуальных пакетов нет. при этом в инфомации об установленном пакете указано:

Код: Выделить всё

i    --\ arts-1.5.2                                                             1.5.2-1    <none>
  Description: arts

  Priority: extra
  Section: checkinstall
  Maintainer: root@localhost.localdomain
  Compressed size: 0
  Uncompressed size: 5528k
  Source Package: arts-1.5.2
  --\ Package names provided by arts-1.5.2
p  U arts                                                                       <none>     1.3.2-3
p  U libarts1-dev                                                               <none>     1.3.2-3
p  U libartsc0-dev                                                              <none>     1.3.2-3
p  U libarts1                                                                   <none>     1.3.2-3
p  U libartsc0                                                                  <none>     1.3.2-3
  --\ Packages which depend on arts-1.5.2
    --\ Depends
p  U  kde-core 5:44
p  U  kde-devel 5:44
p  U  libsdl1.2-dev 1.2.7+1.2.8cvs20041007-4.1
p  U  libarts1-dev 1.3.2-3
p  U  kde-devel 5:44
p  U  vlc-plugin-arts 0.8.4-svn20050920-3+hal0+linex1
p  U  vlc-plugin-arts 0.8.1.svn20050314-1
    --\ Suggests
i  U  libxine1 1.0.1-1.3bpo2
p  U  libxine1 1.0.1-1sarge1
i  U  libao2 0.8.6-1
  --\ Versions
i    1.5.2-1
т.е. пописанные мной имена он определяет, но так как нет виртуального пакета, то другие проги не хотят его воспринимать как новую версию указанных в provides пакетов. как сделать, чтоб появились соответствующие виртуальные пакеты, чтобы их другие проги видели?

Добавлено: 04 июл 2006, 12:09
rain

Код: Выделить всё

 apt-get install checkinstall 

Код: Выделить всё

 ./configure && make && checkinstall 
При сборке пакета можно будет указать данные о пакете и т.п. Собранный пакет будет лежать в корне дерева исходников. Его можно сохранить для последующих установок (сам пакет уже установлен)

По поводу предыдущего поста - из имени пакета убери версию. При checkinstall это второй пункт.

Добавлено: 04 июл 2006, 12:39
Llama
если уж юзать автоматизированные тулзы - то проще и правильнее сделать apt-get install maint-guide-ru && zless /usr/share/doc/maint-guide-ru/maint-guide/maint-guide.ru.txt.gz |iconv -f koi8r |less родные дебиановские dh-* тулзы не сложнее а результат получается ИМХО чуть более корректным.

Re: Сборка deb-пакетов в домашних условиях.

Добавлено: 15 окт 2008, 02:29
Igorila
вот такая вот поблема
checking for a BSD-compatible install... /usr/bin/instal -c
checking whether bild environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking build system type... i686-pc-gnulibc1
checking host system type... i686-pc-gnulibc1
configure: error: "Sorry, build is only supported for GNU/Linux"
ну не как не пойму чего не хватает.

Re: Сборка deb-пакетов в домашних условиях.

Добавлено: 16 окт 2008, 13:05
mend0za
Igorila, подземный стук не лечим

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

Re: Сборка deb-пакетов в домашних условиях.

Добавлено: 24 окт 2009, 23:11
red1ynx
Может есть способ автоматизировать процесс сборки? Т.е. из архива исходников получить deb-пакет с минимальными движениями.

Re: Сборка deb-пакетов в домашних условиях.

Добавлено: 24 окт 2009, 23:13
Llama
red1ynx, checkinstall