sonyps4.ru

Как создать deb пакет из tgz. Создание пакета Debian с нуля

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

Формат файла deb описывается в man-справке (man pages) deb(5) - эта справка выводится, если в терминале набрать команду man deb. Также в Интернете есть немало страниц, содержащих эту информацию - достаточно набрать в строке поиска deb(5), чтобы найти их. Здесь это руководство не приводится, так как в официальном руководстве для разработчиков Debian, в справке по формату пакетов (которое на момент написания этого руководства находилось по адресу http://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html) написано, что формат пакетов может изменяться, а потому для работы с ними рекомендуестя использовать утилиту dpkg-deb. Справку по работе с утилитой dpkg-deb можно получить, набрав в терминале команду man dpkg-deb.

Работа программы GUI-deb как раз и заключается в создании директории, содержащей необходимые данные, и запуске программы dpkg-deb с указанием ей этой директории и других нужных параметров.

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

Вне директории "DEBIAN" содержатся те файлы, которые будут скопированы в файловую систему компьютера, на который будет устанавливаться пакет. Файлы должны располагаться в тех директориях, в которые они будут помещаться при установке пакета. То есть, внутри директории, создаваемой для dpkg-deb, должна создаваться копия нужных нам частей файловой системы - так, как если бы эта директория являлась для неё корнем ("/"). То есть, допустим, если имя директории, на основе которой будет создаваться пакет - "~/TMP_DEBS/MyProgram", и нужно, чтобы при установке в файловой системе в директорию "/usr/share/pixmaps" записывался файл "MyProgram.png" - надо в директории "~/TMP_DEBS/MyProgram" создать директорию "usr", в ней - директорию "share", внутри "share" - директорию "pixmaps", и уже в директорию "pixmaps" поместить файл "MyProgram.png". В итоге, полный путь к файлу будет "~/TMP_DEBS/MyProgram/usr/share/pixmaps/MyProgram.png". При создании пакета часть директории "~/TMP_DEBS/MyProgram" будет обрезана, и при установке файл "MyProgram.png" как раз и попадёт по нужному адресу "/usr/share/pixmaps". Таким образом, нужные директории надо создать для каждого файла.

После создания директории остаётся только запустить dpkg-deb, передав нужные параметры. Самые необходимые для сборки пакетов параметры dpkg-deb описываются в разделе "Параметры командной строки для утилиты dpkg-deb" . В случае отсутствия ошибок в файле control, установочный пакет будет создан.

Зачастую некоторый пакет имеется в ветках unstable и experimental , однако его нет в ветках stable /testing . Программу поставить очень хочется, а обновлять полсистемы страшновато или нежелательно.

Для таких случаев есть замечательный ресурс backports.org , однако его использование во многом похоже на прямое использование веток unstable и иногда доставляет бОльшие проблемы из-за периодически возникающих конфликтов между backports и unstable.

В большинстве случаев установить пакет из unstable и experimental можно, используя пересборку пакета в своем окружении. Делается это довольно несложно, и данное руководство предназначено для того, чтобы помочь начинающему пользователю в этом вопросе. Для примера мы разберем вариант с установкой пакета fluxbox из experimental -ветки.

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

#aptitude install devscripts

Gpg-ключ и выполним экспорт некоторых переменных окружения, связанных с ним:

export [email protected] export DEBFULLNAME="yourfullname" export [email protected]

Настройка apt-get

Прежде всего, нам необходимо настроить apt-get на работу с src-репозитариями Debian. Для этого добавьте в Ваш файл /etc/apt/sources.list следующие строки:

deb-src http://ftp.debian.org/debian testing main contrib non-free deb-src http://ftp.debian.org/debian sid main contrib non-free deb-src http://ftp.debian.org/debian experimental main contrib non-free

Зеркало пакетов, разумеется, можете выбрать любое - то, которым наиболее часто пользуетесь. После изменения файла /etc/apt/sources.list сделайте традиционный

#apt-get update

Немного теории

Что представляет собой src-пакет в системе Debian?

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

Все скрипты, файлы и т.п., относящиеся к сборке пакета в системе Debian, традиционно располагаются в подкаталоге debian/ вместе с исходными текстами.

Src-пакет Debian обычно состоит из нескольких файлов:

    package-version.dsc - текстовый файл, включающий в себя перечень остальных необходимых файлов;

    package-version.orig.tar.gz - архив с исходными текстами программы;

    package-version.diff.gz - патч на архив с исходными текстами программы, добавляющий в них вышеупомянутый каталог debian/, а так же, возможно, содержащий исправления внесенные в исходные тексты сопровождающим.

Примечание : Некоторые включают каталог debian/ прямо в архив с исходными кодами. Это в основном касается программ разработанных специально для Debian. В таком случае вместо файлов .orig.tar.gz и .diff.gz будет один файл package-version.tar.gz .

Получение и распаковка пакета с исходными текстами

$ apt-get source package

для нашего случая с fluxbox это будет выглядеть так:

$ apt-get source fluxbox Чтение списков пакетов... Готово Построение дерева зависимостей... Готово Нужно загрузить 1033kB архивов с исходными текстами. Получено:1 http://ftp.debian.org experimental/main fluxbox 0.9.15.1+1.0rc2-1 (dsc) Получено:2 http://ftp.debian.org experimental/main fluxbox 0.9.15.1+1.0rc2-1 (tar) Получено:3 http://ftp.debian.org experimental/main fluxbox 0.9.15.1+1.0rc2-1 (diff) Получено 1033kB за 1m38s (10,5kB/c) gpg: Signature made Втр 04 Июл 2006 17:05:39 MSD using DSA key ID E160649A gpg: Can"t check signature: public key not found dpkg-source: extracting fluxbox in fluxbox-0.9.15.1+1.0rc2 dpkg-source: unpacking fluxbox_0.9.15.1+1.0rc2.orig.tar.gz dpkg-source: applying ./fluxbox_0.9.15.1+1.0rc2-1.diff.gz

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

$ apt-cache policy <имя пакета>

В результате этого действия, как видно из приведенного выше лога, были скачаны нужные файлы с зеркала (которое мы прописали в /etc/apt/sources.list ) и произведена распаковка исходников и наложение патча в .diff.gz .

Данную операцию необязательно было проделывать с помощью apt-get , можно было пойти на страничку пакета , скачать файлы по ссылке Downloads (внизу страницы) и распаковать командой

$ dpkg-source -x fluxbox_0.9.15.1+1.0rc2-1.dsc

Также можно использовать утилиту dget, которая скачает весь пакет и сразу распакует исходники:

dget www.path.to/fluxbox_0.9.15.1+1.0rc2-1.dsc

Немного об устройстве каталога debian/

Все действия по сборке пакетов выполняются из каталога с исходными текстами, который получился при распаковке src-архива. В этом каталоге расположен и каталог debian/.

В данном каталоге нас прежде всего будут интересовать два файла:

    debian/rules - этот скрипт осуществляет собственно сборку пакета (и представляет собой обычный Makefile);

    debian/control - этот текстовый файл снабдит нас некоторой информацией, которая нам понадобится ниже;

Прежде всего в последнем файле нас интересует одна строка, для нашего пакета fluxbox она выглядит так:

    Build-Depends: libx11-dev, libxext-dev, libxft-dev, libxinerama-dev, libxpm-dev, libxrandr-dev, x-dev, libxt-dev, debhelper (>=4.1.0), libxft-dev, libx11-dev, libxext-dev, libxft-dev, libxinerama-dev, libxpm-dev, libxrandr-dev, x-dev, libimlib2-dev, libgtk2.0-dev, cdbs

как видим это просто список пакетов которые необходимы нам при сборке.

Зависимости для сборки

Это может оказаться как самый простой вопрос, так и самый сложный. Ситуация состоит в следующем. Сопровождающий пакета, как правило, является человеком, хорошо разбирающимся во внутреннем устройстве Debian, поэтому сопровождающие зачастую раньше других переходят на использование testing/unstable веток. Кроме того, аплоад пакетов в Debian происходит прежде всего в unstable, а потому сопровождающий часто оттестировал сборку своего пакета только под testing/unstable. Довольно редко авторы программ указывают версионные зависимости для своих детищ, поэтому не всегда удаётся проставить правильные версии, и они могут быть как завышены, так и занижены. Выяснять, с какой версией той или иной библиотеки перестанет собираться программа занимает много времени и сил, а зачастую и не очень нужно.

Установка зависимостей для сборки

Простой случай: все получилось с первого раза

Если у Вас apt-get настроен так, как было указано выше, то в большинстве случаев установка зависимостей может быть сделана одной командой:

# apt-get build-dep fluxbox

Для рассматриваемого нами пакета fluxbox все необходимое будет установлено без проблем, и можно переходить к разделу (ниже) Сборка пакета .

Требуемые зависимости отсутствуют в моем дистрибутиве

Здесь возможны два варианта.

    Вариант, дающий 100%-й результат, но, возможно, требующий проделать больше работы: просматриваем строку Build-Depends , о которой речь шла выше, и смотрим, какие библиотеки или утилиты отсутствуют в нашем дистрибутиве. Как правило, их перечень не такой большой чтобы испугать настойчивого человека (одна-две). Собираем эти библиотеки или утилиты по этому хауту (рекурсивно;)).

    В случае если в строке Build-Depends указана какая-то отсутствующая в нашем дистрибутиве версия пакета, то можно попробовать понизить требования сопровождающего, отредактировав файл debian/control . Попробуйте уменьшить номер версии требуемой библиотеки или утилиты, указанный сопровождающим, на тот что у Вас имеется. Перед тем как двигаться по этой пути, проглядите каталог с исходными текстами на наличие файлов INSTALL или README. В этих файлах авторы программы иногда описывают зависимости своего детища и если уж автор программы указал версионную зависимость, то скорее всего попытка ее понизить ни к чему не приведет.

Для того чтобы узнать, что еще не установлено для сборки пакета, запустите утилиту dpkg-checkbuilddeps в каталоге с исходными текстами. Эта утилита выведет список того что требуется для сборки, но еще не установлено в Вашей системе. Для перехода к следующему шагу Вам необходимо добиться того чтобы утилита dpkg-checkbuilddeps не выдавала сообщений о неудовлетворенных зависимостях. Можете попробовать собрать неудовлетворенную зависимость или понизить требования к номеру версии или покомбинировать эти два варианта.

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

Простая сборка

Итак, все что необходимо нам для сборки, установлено. Осталось, собственно, собрать пакет. Для этого нам понадобится утилитка fakeroot , установите ее, если она у Вас еще не установлена.

Переходим в каталог с распакованным src-пакетом и даем команду:

  • $ dch -i

Отдельно надо рассмотреть вопрос о том, какую версию указывать в changelog.

  • Это не должна быть версия, встречающаяся в официальном репозитории (чтобы не создавать путаницы)
  • Если вы делаете просто бэкпорт, то версия должна быть младше той версии, на основе которой собран пакет (чтобы не возникло проблем, когда этот пакет попадет в testing, затем в stable и вы попробуете сделать dist-upgrade). Добавьте строку ~backports1 к номеру версии в таком случае. Позже, если в репозитариях окажется пакет с таким же номером версии, то ваша система произведет его обновление. Цифра 1 в данном случае может означать номер Вашей сборки, а слово backports может быть заменено на любое другое, которое будет более информативным.

Исходя из этого, правильным будет добавить к версии -какаятострока1 , если вы что-то существенно дорабатывали, или ~какаятострока1 , если делали бэкпорт.

$ fakeroot ./debian/rules binary или $ dpkg-buildpackage -rfakeroot или #debuild

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

Проблемы на этом шаге могли возникнуть только в двух случаях:

  • Вы что-то не (так) сделали на предыдущих шагах (например, понизили зависимость, а реально этого делать было нельзя);
  • Вы наткнулись на ошибку в src-пакете. Такое тоже иногда случается. Бывает, что пакеты не собираются, например, из за "неверно" установленного umask . Вообще, сборка пакетов от umask зависеть не должна, но этот баг почему-то довольно часто встречается в Debian.

Вернитесь на несколько шагов назад и повторите попытку.

Если есть только архив с исходниками

Итак, у нас есть только fluxbox-0.9.15.tar.bz2. Обычно выполняюncz следующие действия: Предварительно подготавливаю рабочую директорию:

mkdir ~/src/fluxbox mkdir ~/src/fluxbox/0.9.15 cd ~/src/fluxbox/0.9.15 wget "http://<путь до файла>" (можно конечно и просто через браузер скачать но обычно так быстрее)

Получаем файл fluxbox-0.9.15.tar.bz2. Немного забегая вперёд, обработаем файл программой gzip.

bunzip2 fluxbox-0.9.15.tar.bz2 gzip fluxbox-0.9.15.tar

Получим fluxbox-0.9.15.tar.gz, переименуем:

mv fluxbox-0.9.15.tar.gz fluxbox_0.9.15.orig.tar.gz

(т.е. разделили имя и версию подчёркиванием и после версии добавили слово orig: fluxbox_0.9.15.orig.tar.gz) Теперь распаковываем его (но ни в коем случае не удаляем!):

tar zxvf ./fluxbox_0.9.15.orig.tar.gz cd fluxbox-0.9.15

Для корректной сборки нужно, чтобы корневая директория содержала не только название, но и версию! Ниже будем считать директорию ~/src/fluxbox/0.9.15/fluxbox-0.9.15 корневой директорией исходников. Далее выполняем «черновую» сборку. Т.е. делаем, как обычно

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

(но не устанавливаем!) Если конфигурируется со всеми нужными опциями и собирается в бинарный файл, значит осталось только дебианизировать.

Если есть только deb-пакет

Распаковываем пакет в папку /tmp/program/

$ dpkg -x program*.deb /tmp/program

Чтобы распаковать информацию о пакете, нужно выполнить:

mkdir /tmp/program/DEBIAN $ dpkg -e program*.deb /tmp/program/DEBIAN

Теперь можно делать изменения. Чтобы снова собрать пакет, делаем следующее:

$ dpkg - b /tmp/program program-new*.deb

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

Cмысл всей этой процедуры - создать директорию debian в корне исходников, с нужными файлами конфигурации и скриптом(ами). Для этого, в корне исходных текстов (~/src/fluxbox/0.9.15/fluxbox-0.9.15), выполним:

dh_make Type of package: single binary, multiple binary, library, kernel module or cdbs? s Maintainer name: Frank Email-Address: [email protected] Date: Wen, 20 Mai 2011 12:40:33 +0200 Package Name: fluxbox Version: 0.9.15 License: GPLv3 Type of Package: Single Hit to confirm:

Здесь мы указываем сформировать пакет для одиночного бинарного файла. Если бы мы не переименовали архив, то получили бы следующее сообщение:

Could not find fluxbox_0.9.15.orig.tar.gz Either specify an alternate file to use with -f, or add --createorig to create one.

В таком случае советую прервать dh_make (Ctrl+C) и переименовать архив, как описано выше. Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог debian в корне исходников, посмотрев его содержимое, Вы увидите кучу файлов (расширение.ex) с примерами на все случаи жизни. Будем считать, что программа у нас простая, обычно ни один из этих файлов не нужен. Первым делом нужно добавить описание программы в файле debian/control :

Description:

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

  • dh_install

без этого мы получим пустой пакет. Обычно этих настроек достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /usr/bin и данные в /usr/share. Теперь, соберём пакет:

dpkg-buildpackage -rfakeroot

в директории выше, т.е. в ~/src/fluxbox/0.9.15, мы получим файлы:

cd .. ls -1 fluxbox_0.9.15-1.diff.gz fluxbox_0.9.15-1_i386.changes fluxbox_0.9.15-1_i386.deb fluxbox_0.9.15.orig.tar.gz

Установка пакета

После того, как пакет собран, его осталось установить командой:

dpkg -i имя_пакета.deb

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

Сборка с созданием чистых образов систем

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

В качестве решения подойдет chroot с чистым окружением… Испугались? Все уже украдено до нас.

Сборка пакета в системе pbuilder

Довольно неплохо упрощает данный процесс интерактивная программа pbuilder . Установите пакет pbuilder , затем откройте на редактирование /etc/pbuilderrc и пропишите адрес Вашего любимого репозитория.

Выполните команды:

# pbuilder update # pbuilder create --distribution """sarge"""

система готова к употреблению.

Вместо имени sarge подставьте название Вашего дистрибутива.

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

# pbuilder build package-version.dsc

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

Сборка пакета в системе cowbuilder

сowbuilder является из пакета cowdancer – это аналог pbuilder, только образ сборочной системы он хранит не в tar.gz а в развернутом виде, а при сборке копирует этот образ с использованием техники copy-on-write, что ускоряет сборку.

Пример конфига /etc/pbuilderrc:

BUILDPLACE=/var/cache/pbuilder/build/ USEPROC=yes USEDEVPTS=yes USEDEVFS=no BUILDRESULT=/var/cache/pbuilder/result/ #у меня кэширующий apt-cacher, пожтому я отключил кэширование пакетов внутри pbuilder #APTCACHE="/var/cache/pbuilder/aptcache/" APTCACHE="" REMOVEPACKAGES="" HOOKDIR="" export DEBIAN_FRONTEND="noninteractive" DEBEMAIL="Alexander GQ Gerasiov < [email protected] >" BUILDSOURCEROOTCMD="fakeroot" PBUILDERROOTCMD="sudo" DEBBUILDOPTS="" APTCONFDIR="" BUILDUSERID=1000 BUILDUSERNAME=gq export LOGNAME=gq BINDMOUNTS="" unset DEBOOTSTRAPOPTS export PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin" export SHELL=/bin/bash DEBOOTSTRAP="cdebootstrap" PKGNAME_LOGFILE_EXTENTION="_$(dpkg --print-architecture).build"

Создать образ системы можно и без использования конфига:

# cowbuilder --create --distribution sid --architecture i386

Теперь логинимся в чистую систему:

# cowbuilder --login --save # aptitude install devscripts

Виход из окружения стандартен, собраные пакеты искать в /var/cache/pbuilder.

exit или Сtrl+D

Сборка пакета в чистом окружении

Как теперь собрать пакет в нужном окружении. Вначале из нашего каталога <имя пакета>-<версия апстрим> с измененной версией и поправленными build-depends собираем сурцовый пакет новой версии:

dpkg-buildpackade -rfakeroot -S

Переходим каталогом выше, где собрался файлик <имя пакета>_<версия>.dsc (где версия, это уже наша версия с “~backport”) и говорим

pbuild --dist sarge <имя пакета>_<версия>.dsc

Если произошла ошибка (например из-за проблем с зависимостями), то возвращаемся к шагу 1 и исправляем ошибки. Если все прошло нормально, то собранные пакеты окажутся в каталоге /var/cache/pbuilder/results. Вот собственно и все.

Для обновления образов (особенно актуально для testing) я использую команду

pbuild --dist etch --update

Пример скрипта автоматизации: || ||

Пример скрипта автоматизации для нескольких релизов: || ||

Удаление зависимостей для сборки

Для этого можно использовать deborphan :

$ deborphan или $ deborphan -guess-dev или сразу удалить: # deborphan -guess-dev | xargs apt-get remove -purge -y

или же скриптом(проверено PavloRudyj):

# aptitude markauto $(apt-cache showsrc PACKAGE_NAME | grep Build-Depends | perl -p -e "s/(?:[\[(].+?[\])]|Build-Depends:|,|\|)//g")

Если вы установили программу 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
Показать версию программы.

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

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

Что же нужно сделать, для создания своего репозитория с пакетами? Можно воспользоваться тем же launchpad.net , например. Но, последнее время, он не очень развивается и выглядит ненадежно. К тому же, его удобно использовать для своих не коммерческих разработок, но использовать его для дистрибуции корпоративного ПО будет проблематично.

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

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

Для всех своих проектов я использую . Структура проекта выглядит примерно так:

Project/ |- bin/ | |- project |- src/ | |- github.com/ | |- 4gophers/ | |- project/ | |- main.go |- vendor/

Когда я запускаю gb build , то все бинарники собираются в папке bin . Таким образом, все что нам нужно - это просто добавить спецификацию нашего будущего deb пакета прям в папку с проектом:

Mkdir project/DEBIAN touch project/DEBIAN/control

В результате будет такая структура:

Project/ |- DEBIAN/ | |- control |- bin/ | |- project |- src/ |- vendor/

В файле control нужно указать информацию о нашем пакете. Не забывайте про пустую последнюю строку:

Package: project Priority: optional Section: devel Installed-Size: 100 Maintainer: Ivan Ivanov Architecture: i386 Version: 1.0 Depends: libc6 (>= 2.1) Description: Short description here Long description here

  • Package - имя вашего пакета
  • Priority - приоритет пакета (optional, extra, standard, important, required) для обычных программ лучше ставить optional
  • Section - раздел к которому относится данный пакет (admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome, graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-free, oldlibs, otherosfs, perl, python, science, shells, sound, tex, text, utils, web, x11)
  • Installed-Size - размер файлов пакета в килобайтах
  • Maintainer - имя и email создателя пакета
  • Architecture - архитектура процессора, для которой предназначен пакет (i386, amd64, all, source, all)
  • Version - версия пакета
  • Depends - в данном поле необходимо указать имена пакетов, от которых зависит ваш пакет (например, библиотеки)
  • Description - в первой строке пишем короткое описание пакета, в остальных более подробно

Все что находится в папке project попадет в пакет. И папка bin тоже. В этой папке лежит наш бинарный файл, который нужно установить. Чтобы ваши файлы оказались в нужной директории на компьютере пользователя, нужно создать соответствующую структуру каталогов внутри вашей папки с проектом.

Стоит отметить, что такой подход к созданию deb пакетов не самый правильный. Конечно, в нашем случае мы осознанно идем на этот шаг, но вам нужно понимать, что в deb пакет попадет все содержимое папки project , в том числе папки src , vendor и так далее. Конечно, можно скопировать файлы в другую папку, и даже написать скрипт для этого, но все уже придумано до нас. Более правильный способ - это использовать утилиты dh_make и dpkg-buildpackage .

Теперь можно собирать пакет. Для этого на уровень выше выполним команду:

Dpkg-deb -z8 -Zgzip --build project

На уровень выше будет создан файл project.deb , который можно устанавливать с помощью команды:

Sudo dpkg -i project.deb

Свой репозиторий пакетов

Теперь переходим к самому интересному. Как же нам распространять наши пакеты? Запустим свой сервер репозиториев, конечно же. А для этого воспользуемся сервером apt репозиториев deb-simple .

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

Go get github.com/esell/deb-simple

Если go не установлен на той машине, где вы собираетесь запустить сервер с репозиториями, то вы можете собрать бинарник локально и просто скопировать его. Кроме этого, можно использовать docker.

Затем нужно запустить сервер. Это можно сделать с помощью docker, но мне больше нравится использовать supervisord . Вот пример моей конфигурации сервиса:

Command=/home/user/go1.5/bin/deb-simple directory=/home/user/deb-simple/ autorestart=true stdout_logfile=none

Тут важно указать путь к бинарнику(command) и рабочую папку(directory), в которой мы разместим наш конфиг.

Сервер deb-simple поддерживает https, но пока нам это не нужно. Для репозиториев нужно создать папку repo . Наш конфиг conf.json будет выглядит так:

{ "listenPort" : "9090", "rootRepoPath" : "/home/user/deb-simple/repo", "supportedArch" : ["all","i386","amd64"], "enableSSL" : false, "SSLcert" : "server.crt", "SSLkey" : "server.key" }

Чтобы загрузить пакет в свой репозиторий, нужно воспользоваться HTTP API самого сервиса:

Curl -XPOST "http://localhost:9090/upload?arch=amd64" -F "[email protected]"

Точно так же для удаления:

Curl -XDELETE "http://localhost:9090/delete" -d "{"filename":"project.deb","arch":"amd64"}"

Нам осталось добавить наш сервер репозиториев к списку в /etc/apt/source.list.d/ . Можно создать отдельный файл с содержимым:

Deb http://my-hostname:9090/ stable main

Теперь запускайте sudo apt-get update и устанавливайте свои программы сколько душе угодно.

Создание пакета 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».



Загрузка...