Как сделать 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 ./
Теперь нужно обновить список пакетов, чтобы они стали доступны для установки:
# 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. На этом нервы мои сдали...
Как-то ты быстро сдулся. Кстати, а как дела с зависимостями в генте? Как вы там живёте-то с конпелянием на каждый чих?
Я это...не троллинга ради.... народ интересуется.
Создание пакета 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
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
Мы получили сообщение об ошибке. Теперь рассмотрим несколько вещей, которые касаются этой ошибки. Во-первых, что такое 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)
"mylittledeb" будет содержать в названии "0.0.1" это версия пакета и "1" в конце это - версия Debian. Нестабильный дистрибутив, для которого пакет Debian является целевым и переноса на различные дистрибутивы, сделан за пределами этого процесса. В данном случае мы просто будем использовать trusty, так как все это строится на Ubuntu 14.04. После того, как Вы все сделали это выглядит примерно так:
Mylittledeb (0.0.1–1) trusty; urgency=low
* Intial package release
- root
Последняя строка должна содержать имя, связанное с ключом GPG, если вы хотите подписать свои пакеты. Но мы еще дойдем до подписи пакета. На данный момент Вы можете проигнорировать этот пункт.
compat - это волшебный файл, и Вы должны всегда использовать цифру 9. Это - примерно единственная информация, которую Вы можете найти на нем. Почему именно 9? Ну, она используется всеми инструментами в пакете debhelper , это будет гарантировать, что ваш файл Debian совместим.
control - файл управления содержит версию, независимую информацию о Вашем пакете, которую увидят люди при выполнении "apt-cache show mylittledeb". Это все довольно хорошо объяснено в вики Debian . Ваш пакет должен выглядеть следующим образом.
Source: mylittledeb
Section: devel
Priority: optional
Maintainer: root
Нужно понимать, что сборка зависимостей должна быть построена правильно, так как включает в себя все зависимости для вашего пакета. Они не должны быть добавлены к 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
Обратите внимание, что подписать изменения не удалось, потому что, как было сказано выше, ключ 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;
Из репозитория текущего выпуска Ubuntu;
Недоступна;
Берётся из репозитория Ubuntu, из PPA или из Debian:
причина сборки:
Ни в репозитории 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, при подписи пакета.
Нужно завершить сеанс и зайти заново, чтобы изменения вступили в силу.
Помните, что если вы бэкпортируете пакет, дебианизированный не вами, обязательно нужно изменить версию командой
для того, чтобы в изменения вписался ваш 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
Тут мы указываем сформировать пакет, для одиночного бинарного файла.
Но мы с вами молодцы и всё у нас прошло без ошибок - появился каталог 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 в репозитории будущего релиза.
Предварительно подготовим рабочую директорию
теперь скачиваем три файла
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 gcoolprogapt-get source скачивает исходники из репозитория Ubuntu в текущую директорию. Многие пакеты в репозитории имеют общие друг с другом исходники, поэтому кроме исходников выбранного пакета могут скачаться и исходники других пакетов (общие для нескольких пакетов исходники).
Устанавливаем необходимые для сборки пакеты для разработки:
sudo apt-get build-dep gcoolprogСобираем пакеты:
cd gcoolprog-0.5.3 debuild -b -us -ucdebuild следует запускать в директории исходников. Параметры -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
Ну а теперь собрать:
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_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=
—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 . Вот и всё.
- Японские телефоны Новый японский смартфон
- Lenovo G500S: характеристики, основные особенности
- Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
- А конкуренты у смартфона есть
- Что такое расширение файла TRZ?
- Не работает динамик в "айфоне"
- В чем разница внешнего вида защитных стекол для смартфона?