Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Как сделать deb пакет из исходников. Готовим deb из наших бинарников

    Как сделать deb пакет из исходников. Готовим deb из наших бинарников

    Создаём список пакетов:

    $ dpkg-scanpackages . /dev/null | gzip -9c > ./Packages.gz
    Может быть, нам будет выведено сообщение типа:

    Dpkg-scanpackages: warning: Packages in archive but missing from override file: dpkg-scanpackages: warning: fossil linux-headers-3.8.0-avl9-pae linux-image-3.8.0-avl9-pae pdfsam sublimetext virtualbox-4.2 xserver-xorg-input-wacom zotero dpkg-scanpackages: info: Wrote 8 entries to output Packages file.
    Теперь в нашем репозитории 8 пакетов. Отлично, добавляем наш репозиторий в файл:

    строчкой типа:

    Deb file:///home/имя_пользователя/zips/virensdebianrepository ./
    Теперь нужно обновить список пакетов, чтобы они стали доступны для установки:

    Всё, теперь можно установить, к примеру, свежесобранный текстовый редактор Sublime Text 2 (отличная инструкция там) как всегда: Теперь, для того, чтобы установить SublimeText достаточно сделать:
    # apt-get install sublimetext

    Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: sublimetext 0 upgraded, 1 newly installed, 0 to remove and 245 not upgraded. Need to get 0 B/11.4 MB of archives. After this operation, 17.4 MB of additional disk space will be used. WARNING: The following packages cannot be authenticated! sublimetext Install these packages without verification ? Y Selecting previously deselected package sublimetext. (Reading database ... 247813 files and directories currently installed.) Unpacking sublimetext (from ..././sublimetext_2.0.2_i386.deb) ... Setting up sublimetext (2.0.2) ... Всё, пакет будет распакован и установлен, а то, что он из местного репозитория, видно вот тут: (from ..././sublimetext_2.0.2_i386.deb)

    Заключение

    Описанные в этом посте рецепты - блюда на скорую руку, а не фуагра с трюфелями. Для больших репозиториев или сложных пакетов придётся-таки ознакомиться с документацией и руководствами . Ещё можно воспользоваться программой , которая умеет не только создавать репозитории, но и записывать их на CD/DVD диски.

    Отдельное спасибо тов. brainstream , который указал на баг в посте с отрисовкой окружения PRE. Такое бывает, когда доверяешь хаскельным поделкам вроде pandoc:-)

    Да, если есть что добавить - пишите в комментариях, но учтите, что пост - именно на скорую руку, без нужды перечитывать фолианты Debian Packaging Guidelines и прочую квантовую физику.

    Анонимный комментирует...

    Ошибка у вас в тексте:
    "Теперь, для того, чтобы установить Skype достаточно сделать:

    # apt-get install sublimetext "

    Анонимный комментирует...

    Распаковывать пакеты можно через dpkg-deb:
    $ dpkg-deb -x что.deb куда/

    Анонимный комментирует...

    Всегда использовал dpkg -e и dpkg -x для полной распаковки пакета и быстрой правки файлов или зависимостей в контрольных файлах. А так же использовал checkinstall вместо make install для создания пакета при компиляции чего либо. Мне кажется эти утилиты стоит упомянуть.

    virens комментирует...

    Сборка пакетов из исходников в Debian - это от лукавого! Я сейчас припомню свой опыт:

    1. В deb-пакете должны быть прописаны майнтейнер и прочая чепуха, без которой (сюрприз-сюрприз!) пакет не соберется.

    2. Вы собрали, установили и думаете, что на этом всё? Не тут-то было, добрый aptitude может снести пакет ко всем чертям при установке чего-то другого. Вам знакомо такое чувство: как? где? что? я же уже ставил этот пакет!!! Ну вот такой он aptitude - весь из себя православный, а значит, патриархальный и вольнодумства не позволяющий.

    3. Поэтому срочно необходим маневр: aptitude hold package. "Что, хорошо держится? А теперь будьте любезны - отлепите!" (с) Поскольку с этого момента aptitude будет ругаться, что он не в состоянии разрулить зависимости, не снеся вашего пакета.

    4. На этом нервы мои сдали... И я открыл для себя Gentoo, а мои волосы снова стали мягкими и шелковистыми!

    virens комментирует...

    @iv_vl комментирует...
    И я открыл для себя Gentoo, а мои волосы...
    Наглый пиар Генты?! В моём бложике??? Нет пути! ;-)

    1. В deb-пакете должны быть прописаны майнтейнер и прочая чепуха
    Стандартное policy - надо же знать, кому дать в морду за сломанный пакет:-) И потом, это всяко лучше того бедлама, который творится в RPM-ных федорах и зюзях.

    2. Вы собрали, установили и думаете, что на этом всё? Не тут-то было, добрый aptitude может снести пакет ко всем чертям при установке чего-то другого.
    Только если ты ставишь пакет старой версии - например, у меня стоит hold на IceWM, который я поставил из Lenny (придурок-майнтейнер запихнул в Squeeze айс с отломанным треем). Аптитуда тебя предупредит перед подобными манёврами, если что.

    3. Поэтому срочно необходим маневр: aptitude hold package.... aptitude будет ругаться, что он не в состоянии разрулить зависимости
    Это ложь и провокация: только если ты не влепил hold на что-нибудь типа gcc или glibc, нормально оно разруливать зависимости будет. В отличие от RPM-ов, которые любят сдаваться сразу в стиле "Ну не шмогла я, не шмогла" :-)

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

    4. На этом нервы мои сдали...
    Как-то ты быстро сдулся. Кстати, а как дела с зависимостями в генте? Как вы там живёте-то с конпелянием на каждый чих?
    Я это...не троллинга ради.... народ интересуется.

    iv_vl

    Создание пакета Debian с нуля является своего рода волшебным процессом. Вы могли бы начать гуглить с запросом “Создание пакета Debian с нуля” и получить множество результатов, ни один из которых не стал бы тем, который Вам необходим. Несомненно, Вы найдете большой обзор команд, которые используются в Debian и, если Вы роете достаточно глубоко, Вы сможете все же найти пару команд, которые помогут создать базовый пакет Debian, но не смогут объяснить, что происходит. Более подробную информацию о том, что все же «происходит» Вы можете получить, в данном посте мы попробуем это частично затронуть.

    Во-первых, необходимо начать с установки некоторых зависимостей. Все это руководство было сделано на основе Ubuntu 14.04, но подходит для большинства операционных систем на основе Debian. Выполните следующую команду, чтобы приступить к работе.

    Sudo apt-get install build-essential dh-make

    Mkdir mylittledeb touch mylittledeb/Makefile touch mylittledeb/hello.c

    #include int main() { printf(“Hello, Worldn”); return 0; }

    Make-файл должен иметь следующее содержание. Информация для того, кто не знаком с Make-файлами - нужно применять «_», а не пробел или позже при выполнении некоторых команд Вы рискуете получить ошибки. Кроме того, обратите внимание, что очистка целевого элемента установлена ||true после удаления бинарного файла. Указанное рассогласование и другие элементы Debian мы будем использовать в дальнейшем запуская make clean перед созданием.

    All: gcc hello.c -o hello clean: rm hello || true

    В этой точке у Вас есть созданный пакет Debian, который позволит пользователям печатать «Hello, World». Это не самая интересная часть, но дальше будет больше. На этом этапе убедитесь, что запуск make производит бинарный вызов hello и запускает двоичные выводы «Hello, World». Если такого не произошло - значит, что-то пошло не так и это надо исправить, для того, чтобы двигаться дальше.

    Наконец, мы можем приступить к фактическому созданию пакета! Чтобы инициализировать пакет Debian, мы будем использовать удобную dh_make программу, которую мы устанавливали раньше. При выполнении следующей команды с вводом тех же настроек, которые указаны ниже, Вы должны получить ошибку, но это плановая ошибка. В данном случае важно понять, что такое dh_make и как решить другие проблемы, с которыми Вы, вероятно, столкнетесь позже при работе с более усовершенствованными пакетами.

    Dh_make -p mylittledeb_0.0.1 Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? s Maintainer name: root Email-Address: root@unknown Date: Sun, 10 Apr 2016 14:38:32 -0400 Package Name: mylittledeb Version: 0.0.1 License: blank Type of Package: Single Hit to confirm: Could not find mylittledeb_0.0.1.orig.tar.xz Either specify an alternate file to use with -f, or add --createorig to create one.

    Мы получили сообщение об ошибке. Теперь рассмотрим несколько вещей, которые касаются этой ошибки. Во-первых, что такое orig.tar.xz файл. Во-вторых, почему использовался флаг -p? Давайте начнем с простого вопроса. Флаг-p используется, потому что dh_make смотрит на имя директории, в которой Вы находитесь в настоящее время, чтобы выяснить имя пакета и версию. Многие могут согласится, что глупо вызывать каталог таким путем, поэтому флаг -p при первом выполнении dh_make передает данные в виде <имя пакета> _ <версия>.

    Теперь давайте выясним, что за файл orig.tar.xz. Официальная документация говорит, что это - просто tarball исходного кода, который в нашем случае является просто текущим состоянием каталога. Однако, возможно, что-то особенное в этом orig.tar.xz файле есть. Поэтому давайте посмотрим, как он создается. Выполнение следующей команды позволит Вам снести исходный код для dh-make. Вы можете сделать это в tmp, так как потребуется очистить все файлы, если вы делаете это в вашем пакете mylittledeb.

    Apt-get source dh_make

    Теперь, когда есть исходный код, давайте посмотрим, что происходит. Открывая сценарий dh_make, можно найти внутри файл Perl. При поиске orig.tar.xz с Vim приходим к следующей строке.

    System(‘tar’, ‘cfJ’, “../$package_name_$version.orig.tar.xz”, “.”);

    Это просто старый архивный файл tar. Однако у Вас должно быть некоторое понимание того, что все эти волшебные Debian сценарии делаются на случай, если все пойдет не так. Теперь давайте вернемся в нашу папку mylittledeb и запустим следующее:

    Dh_make -p mylittledeb_0.0.1 --createorig

    Теперь вы должны увидеть папку DEBiAN в вашей папке mylittledeb со следующим содержимым:

    Changelog compat control copyright docs init.d.ex manpage.1.ex manpage.sgml.ex manpage.xml.ex menu.ex mylittledeb.cron.d.ex mylittledeb.default.ex mylittledeb.doc-base.EX postinst.ex postrm.ex preinst.ex prerm.ex README.Debian README.source rules source watch.ex

    Файлы.ex и.EX являются примерами файлов. В большинстве из них нет никакой необходимости.

    changelog - этот файл управляет Вашей версией пакета, а также кратко приводит объяснение о том, что изменилось, начиная с последнего обновления. Вот то, на что должен быть похож основной файл.

    Mylittledeb (0.0.1–1) unstable; urgency=low * Initial release (Closes: #nnnn) - root

    "mylittledeb" будет содержать в названии "0.0.1" это версия пакета и "1" в конце это - версия Debian. Нестабильный дистрибутив, для которого пакет Debian является целевым и переноса на различные дистрибутивы, сделан за пределами этого процесса. В данном случае мы просто будем использовать trusty, так как все это строится на Ubuntu 14.04. После того, как Вы все сделали это выглядит примерно так:

    Mylittledeb (0.0.1–1) trusty; urgency=low * Intial package release - root Sun, 10 Apr 2016 15:00:11 -0400

    Последняя строка должна содержать имя, связанное с ключом GPG, если вы хотите подписать свои пакеты. Но мы еще дойдем до подписи пакета. На данный момент Вы можете проигнорировать этот пункт.

    compat - это волшебный файл, и Вы должны всегда использовать цифру 9. Это - примерно единственная информация, которую Вы можете найти на нем. Почему именно 9? Ну, она используется всеми инструментами в пакете debhelper , это будет гарантировать, что ваш файл Debian совместим.

    control - файл управления содержит версию, независимую информацию о Вашем пакете, которую увидят люди при выполнении "apt-cache show mylittledeb". Это все довольно хорошо объяснено в вики Debian . Ваш пакет должен выглядеть следующим образом.

    Source: mylittledeb Section: devel Priority: optional Maintainer: root Build-Depends: debhelper (>= 8.0.0) Standards-Version: 3.9.4 #Vcs-Git: git://git.debian.org/collab-maint/mylittledeb.git #Vcs-Browser: http://git.debian.org/?p=collab-maint/mylittledeb.git;a=summary Package: mylittledeb Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: An example debian package that says “Hello, World”

    Нужно понимать, что сборка зависимостей должна быть построена правильно, так как включает в себя все зависимости для вашего пакета. Они не должны быть добавлены к Depends , который включает только зависимости, которые запускают Вашу программу. Здесь важно отметить, что {shlibs:Depends} и {misc:Depends} - это две волшебные строки, вызываемые командой dh_shlibdeps. Эта команда полезна для определения зависимостей, Ваших двоичных потребностей, которые не сразу очевидны.

    copyright - это самый очевидный из файлов, и если Вы заинтересованы выпустить пакет в общий доступ, он просто обязан содержать данный файл.

    docs - этот файл может перечислить имена всех файлов, которые вы хотели бы видеть включенными в комплект.

    rules - файл правил Debian, содержит всю информацию о создании вашего пакет и является специальной версией Makefile. В файле указываются дополнительные цели, которые используются в создании файлов Debian. По умолчанию, это очень простой файл, который просто запускает основные команды. Тем не менее, если вам нужно что-то переопределить, например, как ваш каталог будет очищаться до сборки, Вам стоит сделать что-то вроде этого.

    #!/usr/bin/make -f # -*- makefile -*- # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 override_dh_auto_clean: rm /tmp/random.file %: dh $@

    Все доступные переопределения перечислены в этой вики статье , а также более детальное описания файла правил. По умолчанию все инструменты debhelper используют этот файл таким образом, например, если мы хотим очистить директорию, это должно быть сделано перед созданием нового пакета, то выполняется следующая команда "dh clean". Эта команда в свою очередь вызывает dh_testdir, dh_auto_clean и dh_clean, что в свою очередь вызывает некоторые perl скрипты.

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

    source/format - этот файл кажется довольно простым. На данный момент Вы можете оставить его как есть. Просто знайте, что это формат компилирования, специфический способ применения патчей к восходящему тарболу который мы создали ранее.

    *.install- этот файл не создается автоматически, так что вам нужно будет сделать файл с именем mylittledeb.install. Любой файл, который был добавлен с установкой, будет использоваться, чтобы установить двоичный файл. Файл или директория, расположенные в системе, используется при установке пакета. Так как у нас есть «hello world» двоичный файл, мы должны будем поместить это в пользовательскую систему. Следующий файл поместит наш «hello world» двоичный файл в пользовательскую директорию /usr/bin.

    Hello /usr/bin

    Остальная часть файлов, заканчивающихся на.ex и.EX, содержит описания того, что делают различные файлы. Их лучше же конечно сохранить, но и от удаления ничего страшного не произойдет.

    Теперь простая часть. Выполните следующую команду.

    Dpkg-buildpackage

    Если раскомментировать export DH_VERBOSE=1 вы можете увидеть все команды, которые выполняются в данный момент. Все эти команды Вы можете переопределить, по этому в случае возникновения проблемы с своим собственным пакетом Вы сможете определить ее причину.

    Вот вывод приведенной выше команды:

    Dpkg-buildpackage: source package mylittledeb dpkg-buildpackage: source version 0.0.1-1 dpkg-buildpackage: source distribution trusty dpkg-buildpackage: source changed by root dpkg-buildpackage: host architecture amd64 dpkg-source --before-build mylittledeb debian/rules clean dh clean dh_testdir dh_auto_clean make -j1 clean make: Entering directory `/root/mylittledeb" rm hello || true rm: cannot remove ‘hello’: No such file or directory make: Leaving directory `/root/mylittledeb" dh_clean rm -f debian/mylittledeb.substvars rm -f debian/mylittledeb.*.debhelper rm -rf debian/mylittledeb/ rm -f debian/*.debhelper.log rm -f debian/files find . ((-type f -a (-name "#*#" -o -name ".*~" -o -name "*~" -o -name DEADJOE -o -name "*.orig" -o -name "*.rej" -o -name "*.bak" -o -name ".*.orig" -o -name .*.rej -o -name ".SUMS" -o -name TAGS -o (-path "*/.deps/*" -a -name "*.P")) -exec rm -f {} +) -o (-type d -a -name autom4te.cache -prune -exec rm -rf {} +)) rm -f *-stamp dpkg-source -b mylittledeb dpkg-source: info: using source format `3.0 (quilt)" dpkg-source: info: building mylittledeb using existing ./mylittledeb_0.0.1.orig.tar.xz dpkg-source: info: building mylittledeb in mylittledeb_0.0.1-1.debian.tar.gz dpkg-source: info: building mylittledeb in mylittledeb_0.0.1-1.dsc debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build make -j1 make: Entering directory `/root/mylittledeb" gcc hello.c -o hello make: Leaving directory `/root/mylittledeb" dh_auto_test debian/rules binary dh binary dh_testroot dh_prep rm -f debian/mylittledeb.substvars rm -f debian/mylittledeb.*.debhelper rm -rf debian/mylittledeb/ dh_auto_install install -d debian/mylittledeb dh_install install -d debian/mylittledeb//usr/bin cp -a ./hello debian/mylittledeb//usr/bin/ dh_installdocs install -g 0 -o 0 -d debian/mylittledeb/usr/share/doc/mylittledeb chown -R 0:0 debian/mylittledeb/usr/share/doc chmod -R go=rX debian/mylittledeb/usr/share/doc chmod -R u+rw debian/mylittledeb/usr/share/doc install -g 0 -o 0 -m 644 -p debian/README.Debian debian/mylittledeb/usr/share/doc/mylittledeb/README.Debian install -g 0 -o 0 -m 644 -p debian/copyright debian/mylittledeb/usr/share/doc/mylittledeb/copyright dh_installchangelogs install -o 0 -g 0 -p -m644 debian/changelog debian/mylittledeb/usr/share/doc/mylittledeb/changelog.Debian dh_perl dh_link dh_compress cd debian/mylittledeb chmod a-x usr/share/doc/mylittledeb/changelog.Debian gzip -9nf usr/share/doc/mylittledeb/changelog.Debian cd "/root/mylittledeb" dh_fixperms find debian/mylittledeb -print0 2>/dev/null | xargs -0r chown --no-dereference 0:0 find debian/mylittledeb ! -type l -print0 2>/dev/null | xargs -0r chmod go=rX,u+rw,a-s find debian/mylittledeb/usr/share/doc -type f ! -regex "debian/mylittledeb/usr/share/doc/[^/]*/examples/.*" -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb/usr/share/doc -type d -print0 2>/dev/null | xargs -0r chmod 755 find debian/mylittledeb/usr/share/man debian/mylittledeb/usr/man/ debian/mylittledeb/usr/X11*/man/ -type f -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb -perm -5 -type f (-name "*.so.*" -or -name "*.so" -or -name "*.la" -or -name "*.a") -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb/usr/include -type f -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb/usr/share/applications -type f -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb -perm -5 -type f (-name "*.cmxs") -print0 2>/dev/null | xargs -0r chmod 644 find debian/mylittledeb/usr/lib/perl5 debian/mylittledeb/usr/share/perl5 -type f -perm -5 -name "*.pm" -print0 2>/dev/null | xargs -0r chmod a-X find debian/mylittledeb/usr/bin -type f -print0 2>/dev/null | xargs -0r chmod a+x find debian/mylittledeb/usr/lib -type f -name "*.ali" -print0 2>/dev/null | xargs -0r chmod uga-w dh_strip strip --remove-section=.comment --remove-section=.note debian/mylittledeb/usr/bin/hello dh_makeshlibs rm -f debian/mylittledeb/DEBIAN/shlibs dh_shlibdeps install -o 0 -g 0 -d debian/mylittledeb/DEBIAN dpkg-shlibdeps -Tdebian/mylittledeb.substvars debian/mylittledeb/usr/bin/hello dh_installdeb dh_gencontrol echo misc:Depends= >> debian/mylittledeb.substvars dpkg-gencontrol -ldebian/changelog -Tdebian/mylittledeb.substvars -Pdebian/mylittledeb chmod 644 debian/mylittledeb/DEBIAN/control chown 0:0 debian/mylittledeb/DEBIAN/control dh_md5sums (cd debian/mylittledeb >/dev/null ; find . -type f ! -regex "./DEBIAN/.*" -printf "%P" | LC_ALL=C sort -z | xargs -r0 md5sum > DEBIAN/md5sums) >/dev/null chmod 644 debian/mylittledeb/DEBIAN/md5sums chown 0:0 debian/mylittledeb/DEBIAN/md5sums dh_builddeb dpkg-deb --build debian/mylittledeb .. dpkg-deb: building package `mylittledeb" in `../mylittledeb_0.0.1-1_amd64.deb". signfile mylittledeb_0.0.1-1.dsc gpg: skipped "root ": secret key not available gpg: : clearsign failed: secret key not available dpkg-genchanges >../mylittledeb_0.0.1-1_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build mylittledeb dpkg-buildpackage: full upload (original source is included) dpkg-buildpackage: warning: failed to sign .dsc and .changes file

    Обратите внимание, что подписать изменения не удалось, потому что, как было сказано выше, ключ GPG не был создан. Это не страшно, даже не смотря на то, что получили такую ошибку пакет фактически был создан успешно.

    Теперь Вы должны увидеть набор новых файлов в том же каталоге, где размещена Ваша папка mylittledeb. Нас интересует файл с названием «mylittledeb_0.0.1-1_amd64.deb», который может быть установлен с помощью команды:

    Sudo dpkg -i mylittledeb_0.0.1–1_amd64.deb

    Теперь вы должны иметь возможность запускать «Hello» из любого места на вашем компьютере, и получить текст «Hello, World».

    Эта статья не завершена. Вы можете помочь в ее написании

      Исправив стилистику статьи

      Добавив больше информации о подготовке исходных кодов для дебианизации

    Дистрибутивы, основанные на Debian – это не только отличная система управления пакетами APT , которая сама разрешает зависимости, но и удобные инструменты для создания пакетов и своих репозиториев. Если уж вы решились собрать программу из исходников, то советую ещё изучить, как дебианизировать исходники. Это отнимет чуть больше времени, чем стандартное

    ./ configure && make && make install make uninstall

    но не все исходники это поддерживают, а что ещё чаще - исходники удаляют после установки, тогда удалить программу можно только вручную. Но чтобы это сделать, нужно точно знать что и куда установилось. А это уж точно никто не знает, кроме самих разработчиков программы (ну или тех, кто более-менее разбирался в исходниках программы).

    Классификация случаев сборки

    Возможны следующие случаи сборки пакетов:

      Сборка из исходников;

      Сборка из бинарных файлов;

    исходники или бинарные файлы берутся:

      Не из репозитория;

      Из репозитория другого дистрибутива;

      Из репозитория другого выпуска Ubuntu, из PPA или из Debian;

    дебианизация:

      Недоступна;

      Берётся из репозитория Ubuntu, из PPA или из Debian:

      • Из другой версии программы;

        Из текущей версии программы:

        • Не из репозитория текущего выпуска Ubuntu;

          Из репозитория текущего выпуска Ubuntu;

    причина сборки:

      Ни в репозитории Ubuntu текущего выпуска, ни в PPA нет нужной версии программы;

      Доступная версия программы по каким-либо причинам не устраивает (не устраивает код или данные программы, параметры конфигурации или управляющая информация пакета);

      И то, и другое.

    Сборка из исходников

    Что необходимо

    Полное Руководство начинающего разработчика Debian доступно .

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

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

    sudo apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot

    Можно так же autobook - это документация по утилитам GNU Autoconf , Automake , и Libtool . Ну и конечно то, что требуют сами исходные коды для корректной сборки.

    Создание ключа шифрования

    Этот шаг не обязателен, его можно пропустить.

    Чтобы создать ключ, зайдите в Приложения → Стандартные → Пароли и ключи шифрования . В открывшемся окне, в меню Ключ → Новый ключ , выбираем ключ pgp . Заполняем поля Полное имя и Электронный адрес .

    В мире свободного программного обеспечения, для предотвращения «краж» или «подделок», принято подписывать свои «ценные» вещи электронным ключом, открытая часть которого хранится на общедоступных серверах и позволяет другим пользователям легко выяснить подлинность и целостность той или иной вещи.
    Поэтому отнеситесь к созданию ключа очень ответственно.
    Никто вас не заставляет вписывать сюда реальные имя и фамилию, или ещё какие-нибудь личные данные, но если вас не разыскивает интерпол - думаю указать фамилию и имя будет верным решением, хотя можно и просто свой ник В общем, решайте сами. А вот почтовый адрес укажите реальный, и который вы не поменяете.

    Можно завести ящик, если ещё нет, на каком-нибудь популярном почтовом сервере: например, gmail.com или yandex.ru .
    Это позволит в будущем легко связаться с вами человеку, который вас не знает, но по той или иной причине встретил «вещь», подписанную вами.
    Далее вас спросят ввести пароль, как дополнительную защиту. Он может быть полезен, если вы будете использовать закрытый ключ на машинах, которым вы не можете на 100% доверять. Обратная сторона - вам придётся вводить пароль каждый раз, как только вы будете что-то подписывать.

    Хотя последняя версия программы seahorse имеет демон, который автоматически запускается в сеансе GNOME , и умеет «запоминать пароль» на время сеанса, но пока не все программы умеют с ней работать.

    Итак, вы создали ключ - теперь его можно будет использовать при создании пакетов.
    Для этого, в файл ~/.bashrc, или в другой стартовый скрипт, вашего любимого шелла (для zsh ~/.zshrc), нужно вписать переменные

    Export DEBEMAIL=ваш@имейл

    На основании e-mail будет искаться ключ в pgp, при подписи пакета.
    Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.
    Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно нужно изменить версию командой

    dch -i

    для того, чтобы в изменения вписался ваш e-mail. А для того, чтобы ваш открытый ключ попал на сервер, необходимо в настройках «seahorse → Пароли и ключи шифрования», настроить соединение с сервером публичных ключей.
    Для этого, в меню Правка→Параметры на закладке Публикация ключей необходимо поставить галку Публиковать ключи… .
    Теперь можно выбрать ключ и в меню по правой кнопке выбрать Синхронизировать и опубликовать ключи .

    Дебианизация недоступна

    Итак, у нас есть только gcoolprog-0.5.3.tar.gz .

    Обычно я выполняю следующие действия:

    Предварительно подготавливаю рабочую директорию

    "http://<путь до файла>" #можно конечно и просто через браузер скачать но обычно так быстрее

    Получаем файл gcoolprog-0.5.3.tar.gz . Распакуем его перейдем в полученный каталог:

    tar zxvf gcoolprog-0.5.3.tar.gz cd gcoolprog-0.5.3

    Для корректной сборки нужно, чтобы корневая директория содержала не только название, но и версию!

    ./ configure --prefix =/ usr && make

    Если команда выполнилась успешно, то осталось только дебианизировать.

    Дебианизация

    Ничего страшного в этом нет, как я уже говорил есть скрипты, которые сильно упрощают этот процесс.
    Вообще смысл всей этой процедуры - создать директорию debian в корне исходников, с нужными файлами конфигурации и скриптом(ами).
    Для этого, в корне исходных текстов, выполним

    Dh_make --createorig

    На что мы должны получить следующий диалог

    Type of package: single binary, multiple binary, library, kernel module or cdbs? s Maintainer name: denis Email-Address: [email protected] Date: Mon, 13 Aug 2007 12:40:33 +0400 Package Name: gcoolprog Version: 0.5.3 License: blank Type of Package: Single Hit to confirm:

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

    Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение.ex) с примерами на все случаи жизни.

    Description:

    Вместо и (без угловых кавычек) нужно вписать описание, что это за программа.
    Именно эти сведения увидит пользователь, когда посмотрит описание пакета.
    Второй момент - это поправить файл debian/rules
    в секции binary-arch : нужно раскомментировать (т.е. убрать # в начале строки)

    Dh_install

    без этого мы получим пустой пакет.
    Иногда debian/rules содержит лишь:

    %: dh $@

    Что приемлемо с использованием debhelper.
    Этих настроек будет достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share.

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

    Теперь, соберём пакет:

    В директории выше, т.е. в ~/src/gcoolprog/0.5.3, мы получим файлы

    Gcoolprog_0.5.3-1.diff.gz gcoolprog_0.5.3-1_i386.changes gcoolprog_0.5.3-1_i386.deb gcoolprog_0.5.3.orig.tar.gz

    Вот теперь мы можем установить пакет

    dpkg -i * .deb

    Дебианизация берётся из репозитория Ubuntu, из PPA или из Debian

    Дебианизация берётся из другой версии программы

    В этом случае, очень удобно взять дебианизацию оттуда и поправить для новой версии.

    Как я уже сказал, возможно нам повезёт и достаточно будет только сменить версию. Но не будем гадать.

    Ниже я не буду комментировать то, что описано в предыдущем решении.

    mkdir ~/ src/ gcoolprog mkdir ~/ src/ gcoolprog/ 0.5.3 cd ~/ src/ gcoolprog/ 0.5.3 wget "http://<путь до файла>"

    получаем файл gcoolprog-0.5.3.tar.bz2

    bunzip2 gcoolprog-0.5.3.tar.bz2 gzip gcoolprog-0.5.3.tar mv gcoolprog-0.5.3.tar.gz gcoolprog_0.5.3.orig.tar.gz

    теперь распаковываем его

    tar zxvf ./ gcoolprog_0.5.3.orig.tar.gz

    скачиваем предыдущую версию с http://packages.ubuntu.com или http://packages.debian.org , файл gcoolprog_0.5.1.diff.gz (в самом низу в секции More Information on gcoolprog)

    wget "http://archive.ubuntu.com/ubuntu/pool/universe/g/gcoolprog/gcoolprog_0.5.1.diff.gz" gunzip gcoolprog_0.5.1.diff.gz patch -p0 < ./ gcoolprog_0.5.1.diff

    получаем директорию

    ~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.1/ debian

    копируем каталог gcoolprog-0.5.1/debian в директорию ~/src/gcoolprog/0.5.3/gcoolprog-0.5.3

    cp -a ~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.1/ debian ~/ src/ gcoolprog/ 0.5.3/ gcoolprog-0.5.3 dch -i

    этой командой изменяется файл debian/changelog например увидим

    Gcoolprog (0.5.1-1ubuntu2) feisty; urgency =low * -- denis < ubuntu_user@ mail.ru>

    но поскольку у нас версия 0.5.3, то нужно изменить значения на

    Gcoolprog (0.5.3-1ubuntu1) feisty; urgency =low * New upstream release. -- denis < ubuntu_user@ mail.ru> Mon, 13 Aug 2007 14 :13 :27 +0400

    сохраните изменения. Теперь можно выполнить команду сборки в пакет.

    Dpkg-buildpackage -rfakeroot

    получим файлы

    cd .. ls -1 gcoolprog_0.5.3-1 .diff.gz gcoolprog_0.5.3-1 _i386.changes gcoolprog_0.5.3-1 _i386.deb gcoolprog_0.5.3.orig.tar.gz dpkg -i * .deb

    Дебианизация берётся из текущей версии программы

    Дебианизация берётся не из репозитория текущего выпуска Ubuntu

    Для Debian нужно использовать сайт http://packages.debian.org , для Ubuntu - http://packages.ubuntu.com . Тогда, например, в Ubuntu ищем пакет gcoolprog в репозитории будущего релиза.

    Предварительно подготовим рабочую директорию

    mkdir ~/ src/ gcoolprog mkdir ~/ src/ gcoolprog/ 0.5.3 cd ~/ src/ gcoolprog/ 0.5.3

    теперь скачиваем три файла

    wget http:// archive.ubuntu.com/ ubuntu/ pool/ universe/ g/ gcoolprog/ gcoolprog_0.5.3-1 .dsc wget http:// archive.ubuntu.com/ ubuntu/ pool/ universe/ g/ gcoolprog/ gcoolprog_0.5.3.orig.tar.gz wget http:// archive.ubuntu.com/ ubuntu/ pool/ universe/ g/ gcoolprog/ gcoolprog_0.5.3-1 .diff.gz

    или тоже самое, но одной командой

    Dget http:// archive.ubuntu.com/ ubuntu/ pool/ universe/ g/ gcoolprog/ gcoolprog_0.5.3-1 .dsc

    из пакета devscripts
    затем распакуем командой

    Dpkg-source -x ./ gcoolprog_0.5.3-1 .dsc

    получим каталог gcoolprog-0.5.3.Перейдём в него и сменим версию:

    cd gcoolprog-0.5.3 dch -i gcoolprog (0.5.3-1ubuntu1) feisty; urgency =low * backport from gutsy -- denis < ubuntu_user@ mail.ru> Mon, 13 Aug 2007 14 :13 :27 +0400

    теперь можно собирать пакет

    Dpkg-buildpackage -rfakeroot

    получим файлы

    cd .. ls -1 . gcoolprog_0.5.3-1 .diff.gz gcoolprog_0.5.3-1 _i386.changes gcoolprog_0.5.3-1 _i386.deb gcoolprog_0.5.3.orig.tar.gz dpkg -i * .deb

    Дебианизация берётся из репозитория текущего выпуска Ubuntu

    В случае, когда для нужной версии программы имеется пакет в репозитории текущего выпуска Ubuntu, но он по каким-либо причинам не устраивает и в его исходники нужно внести изменения (например, применить какой-нибудь патч) и пересобрать, основываясь на уже имеющейся в пакете дебианизации, можно поступить следующим образом.

    Для сборки понадобятся следующие пакеты: build-essential devscripts fakeroot. Потребуются также пакеты для разработки, мы их установим в дальнейшем.

    Скачиваем исходники:

    cd ~/ src apt-get source gcoolprog

    apt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники).

    Устанавливаем необходимые для сборки пакеты для разработки:

    sudo apt-get build-dep gcoolprog

    Собираем пакеты:

    cd gcoolprog-0.5.3 debuild -b -us -uc

    debuild следует запускать в директории исходников. Параметры -b -us -uc передаются программе dpkg-buildpackage. Первый требует собирать только бинарные пакеты, второй и третий - не подписывать цифровой подписью, соответственно, пакет исходников и файл.changes. Получившиеся в результате сборки пакеты будут в директории на один уровень выше.

    Сборка из бинарных файлов

    Ниже идёт пример как можно поступить в случае, если доступен только deb-пакет и нет его дебианизированных исходников.

    Предположим, что работаем в каталоге ~/tmp . Создадим подкаталог ~/tmp/someprog , чтобы распаковать файлы какого-нибудь пакета, нужно выполнить

    dpkg -x ~./ tmp/ some-prog-123 .deb ./ someprog

    Для того, чтобы извлечь контрольную информацию, выполним

    mkdir ~/ tmp/ someprog/ DEBIAN dpkg -e ~/ tmp/ some-prog-123 .deb ./ someprog/ DEBIAN

    ну а теперь, чтобы всё это собрать обратно в пакет, нужно выполнить

    dpkg -b ./ someprog ~/ tmp/ some-prog-123 -new.deb

    В каталоге ~/tmp/someprog/DEBIAN содержатся файлы, описывающие, что это за пакет, от чего он зависит, и контрольные суммы файлов, находящихся в нём. Для того, чтобы собрать свой пакет, нужно поместить файлы в каталоге ~/tmp/someprog так, как будто это корневой каталог.То есть, если нужно, чтобы файл установился в /usr/bin ,нужно его поместить в каталог ~/tmp/someprog/usr/bin , ну и, соответственно, если что-то должно лежать в /etc , то в ~/tmp/someprog/etc и т.д.

    Затем в ~/tmp/someprog создать каталог DEBIAN, обязательно большими буквами, и в нём файл ~/tmp/someprog/DEBIAN/control , в этом файле описывается название пакета, его зависимости и описание, формат очень простой. Например:

    Package: libcurl3 Version: 7.15.2-2 Section: libs Priority: optional Architecture: i386 Depends: libc6 (>= 2.3.5-1), libcomerr2 (>= 1.33-3), libidn11 (>= 0.5.18), libkrb53 (>= 1.4.2), libssl0.9.8 (>= 0.9.8a-1),zlib1g (>= 1:1.2.1), ca-certificates Suggests: libldap2 Replaces: libcurl2 (<< 1:7.11.2-2) Installed-Size: 324 Maintainer: Domenico Andreoli Source: curl Description: Multi-protocol file transfer library libcurl is designed to be a solid, usable, reliable and portable multi-protocol file transfer library. . SSL support is provided by OpenSSL. To enable LDAP support package libldap2-dev is required. . This is the shared version of libcurl. . Homepage: http://curl.haxx.se

    Ну а теперь собрать:

    dpkg -b ./ someprog some-prog-123 -new.deb

    Этой информации достаточно, чтобы собрать/пересобрать простенький пакет. На самом деле можно ещё запускать скрипты при установке пакета, при его удалении и много чего ещё, что нужно нормальному maintainer"у.

    Если вы установили программу Linux с исходного кода, запустив «make install», установка не сильно сложная, но это становится действительно сложным при удалении данной программы, если автор программы не обеспечил удаления в файле Makefile. Вам придется сравнивать полный список файлов в вашей системе до и после установки программы из исходников, и вручную удалить все файлы, которые были добавлены во время установки.

    CheckInstall отслеживает все файлы, созданные или измененные с помощью установки командной строки (например, «make install» «make install_modules», и т.д.), и собирает стандартный бинарный пакет, давая вам возможность установливать или удалять его с вашего дистрибутива.

    В этой статье «Создание RPM или DEB пакетов с Checkinstall в Linux» я расскажу как это делается только основанных на RedHat’s и Debian’s дистрибутивов и покажу как собрать RPM или DEB пакет с исходного кода, используя Checkinstall.

    Установка CheckInstall on Linux.

    Чтобы установить Checkinstall на Debian/Ubuntu и остальных debian-оподобных ОС, выполните:

    # aptitude install checkinstall

    Чтобы установить Checkinstall в дистрибутивах основанных на Red Hat, вам нужно будет скачать встроенных.rpm в Checkinstall, можете использовать мой.

    Для начала пробуем его найти в ОС:

    # yum search checkinstall

    Если покажет что есть пакет, то его можно установить:

    # yum install checkinstall

    Или качаем пакет:

    # cd /usr/local/src && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm

    # cd /usr/local/src && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/i686/checkinstall-1.6.2-3.el6.1.i686.rpm

    Выполняем установку:

    # yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm

    # yum install checkinstall-1.6.2-3.el6.1.i686.rpm

    После установки Checkinstall, вы можете использовать следующий формат чтобы собрать пакет для конкретной ОС:

    # checkinstall

    Без данного аргумента,по умолчанию checkinstall выполнит команду «make install».

    # checkinstall make install_packages # checkinstall make modules_install # checkinstall install.sh # checkinstall setup # checkinstall rpm -i my-package-1.0.i386-1.rpm

    Сборка RPM или DEB пакета с CheckInstall

    В этом примере, я покажу как можно собрать пакет Htop — это интерактивная, текстовая утилита для просмотра процессов для Unix/Linux (аналог top. Но Htop лучше — лично мои соображения).

    Первое что нужно сделать, так это скачать исходный код с официального сайта. Я привык сохранять все архивы в /usr/local/src. Скачиваем исходный код программы и распаковываем ее, и переходим в папку с кодом для дальнейших действий:

    # cd /usr/local/src && wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz # tar xzf htop-1.0.3.tar.gz && cd htop-1.0.3

    Следующее что необходимо сделать- это сконфигурировать htop, после конфигурирования, обычно выполняют команду ‘make install’, но для checkinstall — это не нужно.

    # ./configure # make install

    Поэтому, чтобы собрать Htop пакет, мы можем ссылаться на Checkinstall без каких-либо аргументов, которые будут использовать команду «make install ‘, чтобы построить пакет. В процессе сборки пакета, команда Checkinstall задаст вам ряд вопросов.

    Вот команды, чтобы собрать пакет Htop:

    # ./configure # checkinstall

    1. Ответьте ‘Y’, на вопрос «Должен ли я создать набор пакетов документации по умолчанию?»

    2. Вы можете ввести краткое описание пакета, а затем нажмите Enter два раза.

    3. Введите число, чтобы изменить какой-либо из следующих значений или введите «enter» чтобы продолжить:

    После чего Checkinstall создаст.rpm или.deb пакет автоматически, в зависимости от вашей системы Linux.

    На CentOS 7 выглядит это так:

    На Debian 7 выглядит это так:

    Опции Checkinstall

    # checkinstall ]

    *Выбор тип пакета*

    T,—type=
    Выбор ОС для сборки пакета.

    S
    Собрать пакет для Slackware.

    R
    Собрать пакет для RPM’s ОС.

    D
    Собрать пакет для Debian’s ОС.

    *Опции для установки собранных пакетов*

    —install=
    Выполнить или не выполнять установку после сборки пакета.

    —fstrans=
    Enable (включить)/disable (выключить) код перевода файловой системы.

    *Опции для скриптов*

    Y, —default
    Принять ответы на все вопросы, по умолчанию.

    —pkgname=
    Установить имя.

    —pkgversion=
    Установить версию.

    A, —arch, —pkgarch=
    Установить архитектуру.

    —pkgrelease=
    Установить release.

    —pkglicense=
    Установить лицензию.

    —pkggroup=
    Установить software group

    —pkgsource=
    Установить местоположение сорсов (исходного кода).

    —pkgaltsource=
    Установить альтернативное местоположение сорсов (исходного кода).

    —pakdir=
    Новый пакет будет сохранен здесь (указать путь).

    —maintainer=
    Пакет maintainer (.deb).

    —provides=
    Особенности данного пакета (.rpm).

    —requires=
    Особенности требуемые этому пакету (.rpm).

    —rpmflags=
    Передайте эти флаги в rpm установщику.

    —rpmi
    Используйте опцию «-i» для rpm при установке.rpm.

    —rpmu
    Используйте опцию «-U» для rpm при установке.rpm.

    —dpkgflags=
    Передайте эти флаги dpkg установщику (deb ОС).

    —spec=Местоположение файла.spec.

    —nodoc
    Не включать файлы документации.

    *Опции выводимой информации*

    D<0|1|2>
    Установить уровни для debug.

    Si
    Запустить интерактивную установку команды.

    —showinstall=
    Переключиться на интерактивную установку команды(Да\Нет).

    Ss
    Запустите интерактивный скрипт установки для Slackware.

    —showslack=
    Переключиться на интерактивную установку команды(Да\Нет) для Slackware.

    * Параметры настройки пакета *

    —autodoinst=
    Переключать создание скрипта doinst.sh

    —strip=
    Снимите любые ELF бинарники, найденные внутри пакета

    —stripso=
    Снимите любые ELF бинарные библиотеки (.so файлы)

    —addso=
    Искать любые shared libs и добавить их в /etc/ld.so.conf

    —reset-uids=
    Сбросить привелегии для всех файлов/папок на 755 и владельца/группу для всех директорий на root.root

    —gzman=
    Сжатие любые страницы man-ы, найденные в пакете

    —docdir=Путь для размещения файла с документацией

    —umask=
    Установите значение umask

    —exclude=
    Исключить эти файлы/ каталоги из пакета

    —include=
    Принудительно включить в пакет файлы/директории, перечисленных в «listfile»

    —inspect
    Проверить список файлов пакета в

    —review-spec
    Просмотрить файл spec до создания.rpm

    —review-control
    Просмотрить файл управления до создания.deb

    —newslack
    Использовать новый (8.1+) Slackware описание формата («—newslack» implies «-S»)

    —with-tar=/path/to/tar
    Вручную установите путь к tar binary в этой системе.

    * Параметры очистки *

    —deldoc=
    Удалить doc-pak по окончании.

    —deldesc=
    Удалить файлы description-pak по окончании.

    —delspec=
    Удалить файл spec по окончании.

    —bk
    Резервное копирование любых замененных файлов.

    —backup=
    Переключить резервного копирования.

    *О CheckInstall*

    —help, -h
    Показать это сообщение.

    —copyright
    Показать Copyright информацию.

    —version
    Показать версию программы.

    Я описывал сборку программы из исходного кода, а также создание простенького deb-пакета. В этот раз я хочу подробнее остановиться на их создании. Это руководство не претендует на звание инструкции для разработчики или сопровождающего, потому в конце я дам ссылки на подробные руководства от разработчиков Debian .

    Способов создания deb-пакета довольно много. Я не буду здесь описывать крупные системы сборки, которые используются на сборочных серверах, ибо большинству это не нужно. Я опишу два наиболее простых способа создания своего пакета. Первым делом, нам нужно установить кое-какие инструменты для работы:

    sudo apt-get install build-essential git automake devscripts make libtool fakeroot automake autotools-dev

    Далее нужно создать цифровой ключ. Этот шаг не обязателен, но если вы планируете распространять свои пакеты, будет крайне мудрым решением подписать их своим ключом. Это позволит пользователю, скачавшему ваш пакет, удостовериться что именно вы его создали. Для создания ключа можно воспользовать графическими утилитами (Seahorse , Kgpg ) либо в терминале:

    DEBEMAIL="ваш E-Mail который вы указали при создании ключа"
    DEBFULLNAME="Ваше имя (или псевдоним)"
    export DEBEMAIL DEBFULLNAME

    Это позволит автоматически добавлять вашу цифровую подпись при подписании пакетов. Далее нам необходим архив с исходным кодом. Пример я буду проводить простой, так как в зависимости от сложности программы, необходима дополнительная настройка (создание постинсталяционных скриптов, правил сборки и т.д.). Предположим у нас есть архив с исходным кодом программы "Myprogramm" - myprogramm_1.0.tar.gz . Распакуем его в домашнюю директорию (или любую где вам удобнее). Обратите внимание: каталог после распаковки должен иметь имя myprogramm-1.0 . Название и через дефис - номер версии. Теперь откроем терминал и выполним:

    cd ~/myprogramm-1.0
    dh_make --createorig

    Мы перешли в каталог с исходным кодом и создали архив с ним и базовую дебианизацию. После второй команды выведится сообщение, где нужно выбрать тип пакета: s (single, одиночный), m (multiple, несколько пакетов), l (library, библиотека), k (kernel module, модуль ядра). В нашем случае это s. Теперь нам нужно немного всё настроить. Перейдите в каталог /myprogramm-1.0/debian и откройте файл control в любом текстовом редакторе. Это главный файл для сборки пакета. В нём указывается вся основная информация. Он имеет примерно такой вид:

    Source: myprogramm
    Section: admin
    Priority: optional
    Maintainer: Aleksey Samoilov
    Build-Depends: debhelper (>= 5)
    Standards-Version: 3.9.6
    Homepage: http://www.example.com

    Package: myprogramm
    Architecture: all
    Depends: ${shlib:Depends}, ${misc:Depends}
    Section: admin
    Priority: optional
    Description: My new programm
    My programm is a simple example to build your own deb-package

    Пошли по порядку. В первой секции указывается имя пакета с исходным кодом. Далее секция ПО (в данном случае admin). Затем приоритет (опционально), имя сопровождающего и его E-Mail (то есть ваше), сборочные зависимости (пакеты необходимые для сборки), версия стандарта (на данный момент 3.9.7), далее идёт имя пакета после сборки, архитектура для которой он собирается (all означает все поддерживаемые архитектуры), секция ПО, приоритет, краткое описание и полное описание. Так как пример у нас простой, для начала этого хватит. Вы также можете открыть файл copyright и указать там своё имя и E-Mail. В файле Changelog находится список изменений каждой версии данного ПО. Так как это первая сборка, то нужно указать что это First Release, а также закрыть некий баг (отсутствие данного пакета в репозитории). Номер бага можно написать от балды. Если вы пересобираете пакет, то сперва измените его версию командой dch -i Файлы в каталоге debian с расширениями .ex - это примеры. При сборке более сложных пакетов, будут нужны и эти дополнительные файлы. Это к примеру послеустановочные скрипты (postinst ), файл, проверяющий наличие новой версии тарболла с исходным кодом (watch ) и так далее. Файл rules - это мейкфайл, правила для сборки пакета. Для простых программ его можно не менять, в остальных случаях - необходима его правка, для указания параметров сборки, или установки иконок. Много чего.

    Теперь, когда вы заполнили файл control, можно приступать к сборке. Для этого находясь в каталоге с исходным кодом, выполните команду debuild . Система проведёт конфигурацию, скомпилирует программу, запакует в пакет, выполнит проверку на распространённые ошибки при дэбианизации и попросит дважды ввести пароль для вашего ключа (если вы его не создавали, то ничего не будет). Теперь в каталоге уровнем выше (в нашем случае в домашней директории), вы увидите несколько файлов, среди которых искомый deb-пакет. Теперь его можно установить командой sudo dpkg -i myprogramm-1.0-1.deb или в графическом менеджере Gdebi.

    Вот таким образом можно собрать простой пакет. Но что делать, если вы не хотите засорять систему кучей сборочных зависимостей? Более того, при сборке некоторых пакетов, могут быть использованы некоторые изменённые файлы. К примеру более новые версии библиотек, если вы обновили систему из бэкпортов, или различные изменения в конфигах. На подобные случаи можно воспользоваться виртуальной машиной, контейнером или использовать специальный инструмент под названием pbulder. Pbuilder - это инструмент для создания чистого окружения, в котором находится только то, что необходимо для сборки. Система при этом не засоряется ненужными файлами, а сборка программы происходит в лабораторных условиях. Устанавливаем:

    sudo apt install pbuilder

    Я приведу пример своего конфига, с помощью которого можно будет собирать пакеты не только под разные релизы Debian, но и Ubuntu.

    sudo nano /etc/pbuilderrc

    Вставляем следующее содержимое:

    STABLE_CODENAME="stable"
    OLDSTABLE_CODENAME="oldstable"
    DEBIAN_SUITES=($UNSTABLE_CODENAME, $TESTING_CODENAME, $STABLE_CODENAME $STABLE_BACKPORTS_SUITE $OLDSTABLE_CODENAME
    "sid" "stretch" "jessie" "wheezy")
    UBUNTU_SUITES=("precise" "trusty" "xenial")
    UBUNTU_MIRROR="mirror.yandex.ru"
    DEBIAN_MIRROR="mirror.yandex.ru"
    : ${DIST:="$(lsb_release --short --codename)"}
    : ${ARCH:="$(dpkg --print-architecture)"}

    NAME="$DIST"
    if [ -n "${ARCH}" ]; then
    NAME="$NAME-$ARCH"
    # следующая строчка нужна для того чтобы собирать под разные архитектуры
    DEBOOTSTRAPOPTS=("--arch" "$ARCH" "${DEBOOTSTRAPOPTS[@]}")
    fi

    BASETGZ="/home/sunderland93/pbuilder/$NAME-base.tgz"
    DISTRIBUTION="$DIST"
    BUILDRESULT="/home/sunderland93/pbuilder/$DIST/result/"
    APTCACHE="/home/sunderland93/pbuilder/$NAME/aptcache/"
    BUILDPLACE="/home/sunderland93/pbuilder/build/"
    if $(echo ${DEBIAN_SUITES[@]} | grep -q $DIST); then
    MIRRORSITE="http://$DEBIAN_MIRROR/debian/"
    COMPONENTS="main contrib non-free"
    elif $(echo ${UBUNTU_SUITES[@]} | grep -q $DIST); then
    MIRRORSITE="http://$UBUNTU_MIRROR/ubuntu/"
    COMPONENTS="main restricted universe multiverse"
    else
    echo "Неизвестный дистрибутив: @DIST"
    exit 1
    fi

    export DPKG_GENSYMBOLS_CHECK_LEVEL=4
    USE_PDEBUILD_INTERNAL=yes

    Замените sunderland93 на своё имя в системе. Таким образом, мы сможем собирать пакеты для Debian 7, 8, testing и unstable, а также под Ubuntu 12.04, 14.04 и 16.04. Скачанные для сборки зависимости будут лежать в pbuilder/имя дистрибутива/aptcache . Это кстати очень полезно - у нас будет базовый архив, который не будет засорён левыми зависимостями и весить несколько гигабайт. И окружение будет готовиться индивидуально для каждой программы. Можно и вшить эти зависимости в базовый архив, но я не рекомендую это делать. Теперь давайте создадим базовый архив, содержащий чистое окружение для сборки. Для примера возьмём Debian 8 64-bit:

    sudo DIST=jessie ARCH=amd64 pbuilder --create

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

    sudo DIST=jessie ARCH=amd64 pdebuild

    И ждём. Скачанные пакеты будут закешированны, и в следующий раз уже не буду качаться. После сборки, готовый deb-пакет появится в каталоге pbuilder/jessie/result . Вот и всё.