LINUX.ORG.RU

сборка deb-пакета

 , , ,


1

1

Подскажите способ максимально просто пакетить софт имея на руках только исходники? Пакечу редко, поэтому понимания процесса мало. dm_make создаёт кучу мусора и по дефолту, если следовать разным руководствам, не работает. Всё же просто должно быть, по идее сценарий сборки заключен в rules и всё что нужно сделать - это сэмулировать make && make install или нет? Но в моем случае используется qmake, т.е. $ qmake qwtpolar.pro $ make $ sudo make install

после чего получаю *.so-шки в системе (всё делается в снапшотном виртуальном сборщике) Какой rules должен быть что бы все скомпилированные файлы легли после сборки на свои места?

если ты не способен решить эту проблему, то прошу тебя ничего не опакечивать.

mos ★★☆☆☆ ()

Я пару раз тупо checkinstall использовал для создания .deb — но там были очень простецкие проги, в буквальном смысле 2D игрушки.

Vsevolod-linuxoid ★★★★★ ()

dm_make создаёт кучу мусора и по дефолту, если следовать разным руководствам, не работает

Скорее всего, ты делаешь что-то не так.

Поставь пакет packaging-tutorial и почитай входящий в него PDF.

Ну а если совсем тупой, делаешь так: https://www.electricmonk.nl/log/2011/09/06/creating-simple-debian-packages/

anonymous ()

Ну так давно известно: создание deb как формата пакетов - скрытая диверсия против свободного программного обеспечения.

meliafaro ★★★★★ ()

У меня собирается в Makefile ARCH=amd64 make. Сначала собираются утили, кладутся в пакет, с пакетом собирается свой репозиторий (здесь нет этого скрипта build_packages.sh)

UTILS = util1 util2

PKGNAME=my-utils
VERSION=0.5
MAINTAINER=Maintainer
CTRL=deb/DEBIAN/control

all: package


utils:
#	echo $(UTILS)
	for u in $(UTILS); do make -C ./$$u clean; make -C ./$$u; done

clean:
	rm -rf ./deb
	for u in $(UTILS); do make -C ./$$u clean; done


package: utils
	mkdir -p deb/usr/bin
	mkdir -p deb/DEBIAN
#	cp -f $(EXE) deb/usr/bin
	for u in $(UTILS); do cp -f ./$$u/$$u deb/usr/bin; done
	echo "Package: $(PKGNAME)" >$(CTRL)
	echo "Version: $(VERSION)" >>$(CTRL)
#	echo "Architecture: all" >>$(CTRL)
	echo "Architecture: $(ARCH)" >>$(CTRL)
	echo "Maintainer: $(MAINTAINER)" >>$(CTRL)
	echo "Installed-Size: `du ./deb -s -B1000 | awk '{print(int($$1))}'`" >>$(CTRL)
	echo "Section: system" >>$(CTRL)
	echo "Homepage: http://www.mypage.ru" >>$(CTRL)
	echo "Description: Any utilities for something" >>$(CTRL)
	dpkg-deb -b ./deb ./
#	
#	echo "Depends: зависимости (пакет (>= версия))
#	echo "Recommends: рекомендации (пакет (>= версия))
#	echo "Suggests: предложения (пакет)
#	
	mv -f *.deb ../my-debian/pool/non-free/g
	cd ../my-debian; ./build_packages.sh; cd ../my-utils

test:
	echo $(ARCH)
bugs-bunny ()

Если я ничего не путаю то кто-то на ЛОРе делал штуку которая собираем deb-пакеты из подобия PKGBUILD.

urxvt ★★★★★ ()
Ответ на: комментарий от bugs-bunny

dh_make --createorig debuild

   dh_perl
   dh_usrlocal
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_marker.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_canvas.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_panner.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_fitter.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_global.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_layout.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_item.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_curve.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_plot.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_picker.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_grid.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_renderer.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_magnifier.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_itemdict.h is not a directory
dh_usrlocal: debian/qwtpolar/usr/local/qwtpolar-1.1.1/include/qwt_polar_spectrogram.h is not a directory
rmdir: не удалось удалить «debian/qwtpolar/usr/local/qwtpolar-1.1.1/include»: Каталог не пуст
dh_usrlocal: rmdir debian/qwtpolar/usr/local/qwtpolar-1.1.1/include returned exit code 1
make: *** [binary] Ошибка 1
dpkg-buildpackage: ошибка: fakeroot debian/rules binary возвратил код ошибки 2
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

что не так?

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

«DESTDIR» задаётся в qwtpolarconfig.pri на который ориентируется qmake при создании Makefile, соответственно после изменений qwtpolarconfig.pri исходники нужно перепаковать? Иначе ругать на изменения исходного кода.

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

Я же использовал в примере выше dpkg-deb из пакета dpkg-dev. Это собственно тулзы для сборки пакетов, а не обертки над ними типа dh_make.

В моем примере просто создается файл описания пакета на 10-15 строк deb/DEBIAN/control; создается структура каталогов с файлами для установки; натравливается на каталог ./deb утиль dpkg-deb -b ./deb ./. Все, deb-пакет готов!

Для каких-то особых случаев возможно надо писать доп. скрипты установки/удаления чего-либо в ramdisk, сервисы, конфиги в /etc. Но это, я так понимаю, в вашем случае не понадобится - надо просто раскидать файлы по файловой системе в нужные каталоги, и чтобы пакет попал в базу установленных.

bugs-bunny ()
Ответ на: комментарий от bugs-bunny

почему dpkg-deb а не debuild -us -uc как везде пишут?

debian/control у меня есть заполненный как нужно, когда запускаю dpkg-deb -b он ругается на то что якобы в строке 8 отсутствует package-name, хотя оно там присутствует.

и можно подробнее о «создается структура каталогов с файлами для установки»?

по идее как, когда делаешь qmake qwtpolar.pro происходит генерация Makefile с теми параметрами которые есть в файле qwtpolarconfig.pri, дальше sudo make install, всё, бинари и прочее разлетелось по системе.

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

почему dpkg-deb а не debuild -us -uc как везде пишут?

Потому, что это очевидно разные тулзы

debian/control у меня есть заполненный как нужно, когда запускаю dpkg-deb -b он ругается на то что якобы в строке 8 отсутствует package-name, хотя оно там присутствует.

Ну и как я могу что-то сказать не видя этого файла? Показали бы хоть его )

и можно подробнее о «создается структура каталогов с файлами для установки»?
... make install, всё, бинари и прочее разлетелось по системе.

Нужны бинари для целевой системы. Могут собираться на i386 машине бинари под amd64 или вообще arm его тулчейном. Зачем разводить помойку на машине сборки. То, что будет лежать на целевой системе в /bin надо соответственно положить в ./deb/bin в каталоге сборки, ну и т.п. для остального например /usr/lib в ./deb/usr/lib.

bugs-bunny ()
Ответ на: комментарий от midnight

В той цитате тот человек описывает __свой__ метод, а не сабжевый.

Либо собирать руками и опакечивать через скрипт makedeb, либо писать свой деббилд, в который в нужном месте прописать вызов qmake. Проблем никаких нет. Только в обоих случаях нужен файл control, да.

saahriktu ★★★★★ ()

debian/rules

%:
        dh $@ 

override_dh_auto_configure:
        qmake qwtpolar.pro

override_dh_auto_install:
        dh_auto_install

debian/install

debian/qwtpolar/usr/local/qwtpolar-1.1.1/*

debian/dirs

usr/qwtpolar-1.1.1

console output

   dh_install
dh_install: qwtpolar missing files (debian/qwtpolar/usr/local/qwtpolar-1.1.1/*), aborting
make: *** [binary] Ошибка 2
dpkg-buildpackage: ошибка: fakeroot debian/rules binary возвратил код ошибки 2
debuild: fatal error at line 1357:
dpkg-buildpackage -rfakeroot -D -us -uc failed

midnight ()

собрал с установкой не по стандартным путям с таким rules

%:
        dh $@ 

override_dh_auto_configure:
        qmake qwtpolar.pro

override_dh_auto_install:
#       dh_auto_install
        mkdir -p $(CURDIR)/debian/tmp/opt/qwtpolar-1.1.1/lib
        cp -r $(CURDIR)/lib/* $(CURDIR)/debian/tmp/opt/qwtpolar-1.1.1/lib
#       make DESTDIR=$(CURDIR)/debian/tmp install
        mkdir -p $(CURDIR)/debian/tmp/opt/qwtpolar-1.1.1/include
        cp -r $(CURDIR)/src/*.h $(CURDIR)/debian/tmp/opt/qwtpolar-1.1.1/include

в *.install файлах «opt/qwtpolar-1.1.1/lib/*»

как организовать установку по стандартным?

при make && make install ставится в /usr/local.

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