Зачастую некоторый пакет имеется в ветках unstable и experimental , однако его нет в ветках stable /testing . Программу поставить очень хочется, а обновлять полсистемы страшновато или нежелательно.
Для таких случаев есть замечательный ресурс backports.org , однако его использование во многом похоже на прямое использование веток unstable и иногда доставляет бОльшие проблемы из-за периодически возникающих конфликтов между backports и unstable.
В большинстве случаев установить пакет из unstable и experimental можно, используя пересборку пакета в своем окружении. Делается это довольно несложно, и данное руководство предназначено для того, чтобы помочь начинающему пользователю в этом вопросе. Для примера мы разберем вариант с установкой пакета fluxbox из experimental -ветки.
Установим инструменты для сборки:
#aptitude install devscriptsGpg-ключ и выполним экспорт некоторых переменных окружения, связанных с ним:
export [email protected] export DEBFULLNAME="yourfullname" export [email protected]Прежде всего, нам необходимо настроить 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 updateSrc-пакет для 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 .
для нашего случая с 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Все действия по сборке пакетов выполняются из каталога с исходными текстами, который получился при распаковке 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-пакетом и даем команду:
Отдельно надо рассмотреть вопрос о том, какую версию указывать в 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(но не устанавливаем!) Если конфигурируется со всеми нужными опциями и собирается в бинарный файл, значит осталось только дебианизировать.
Распаковываем пакет в папку /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*.debCмысл всей этой процедуры - создать директорию 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Здесь мы указываем сформировать пакет для одиночного бинарного файла. Если бы мы не переименовали архив, то получили бы следующее сообщение:
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:Вместо
без этого мы получим пустой пакет. Обычно этих настроек достаточно для сборки пакета с одной программой, которая не содержит разделяемых библиотек, т.е. только бинарник в /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 , затем откройте на редактирование /etc/pbuilderrc и пропишите адрес Вашего любимого репозитория.
Выполните команды:
# pbuilder update # pbuilder create --distribution """sarge"""система готова к употреблению.
Вместо имени sarge подставьте название Вашего дистрибутива.
теперь чтобы собрать пакет для выбранного дистрибутива дайте команду:
# pbuilder build package-version.dscБудут автоматически проделаны все описанные выше шаги, при этом все пакеты требуемые для сборки скачиваются и устанавливаются во временный каталог, поэтому система не "замусоривается" лишними пакетами. Правда, проблему с зависимостями для сборки всё равно придется решать, однако последовательно пройти по всем зависимостям с данным инструментом не представляет особого труда. Почитайте документацию на этот замечательный пакет и узнайте об остальных его возможностях.
с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")Создаём список пакетов:
$ 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
Отдельное спасибо тов. 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. На этом нервы мои сдали...
Как-то ты быстро сдулся. Кстати, а как дела с зависимостями в генте? Как вы там живёте-то с конпелянием на каждый чих?
Я это...не троллинга ради.... народ интересуется.
Постараюсь как можно доступнее изложить процесс создания deb пакетов на примере ruby-zookeper. Предупреждаю сразу, что описанный мной метод пакетирования ruby gems неправильный, лучше использовать gem2deb для этого, но т.к. из исходников с помощью gem2deb собрать ruby-zookeper последней версии у меня не получилось, то вот самый простой метод сборки.
Если вы будете собирать ruby пакеты, как рекомендуется, через gem2deb, то лучше добавьте строку
Export DH_RUBY_IGNORE_TESTS=all/export DH_RUBY_IGNORE_TESTS=all
в debian/rules.
Т.к. мы будем собирать ruby код, то нам понадобится ruby и набор инструментов для сборки deb пакетов.
Sudo apt-get install ruby dpkg-dev
Если у вас старая версия ruby, то в ней нет команды gem, придется устанавливать еще и пакет rubygems или обновлять ruby.
Теперь установим гем fpm , который соберет за нас deb пакет.
Sudo gem install fpm fpm -s gem -t deb zookeeper
В текущей директории у нас появился пакет rubygem-zookeeper_1.4.11_amd64.deb, казалось бы, что дело уже в шляпе, но т.к. нам нужен source пакет, для того, чтобы можно было собрать из него deb, например в OBS , то мы будем продолжать.
Создадим сборочную директорию
Cp rubygem-zookeeper_1.4.11_amd64.deb ~/ cd mkdir -p ruby-zookeeper/fakeroot cd ruby-zookeeper/fakeroot
Извлечем в нее содержание только что собранного пакета
Dpkg-deb -R ~/rubygem-zookeeper_1.4.11_amd64.deb ruby-zookeeper_1.4.11-1
Теперь будем создавать файлы, необходимые для сборки пакета. Они должны находиться в директории debian. Часть файлов мы можем скопировать из распакованного пакета.
Mkdir debian cp rubygem-zookeeper_1.4.11-1/DEBIAN/control debian/control
Отредактируем его до следующего состояния. Не забудьте поменять Maintainer
Source: ruby-zookeeper
Maintainer:
Нам еще нужен debian/rules. Создадим его. override_dh_shlibdeps нужен, чтоб не проверять линковку библиотек zookeeper, т.к. она не проходит.
#!/usr/bin/make -f # -*- makefile -*- %: dh $@ override_dh_shlibdeps: true
Табуляции в debian/rules обязательны, заменить их на пробелы нельзя. Сделаем его исполняемым.
Chmod +x debian/rules
Usr/* var/*
Теперь создадим debian/changelog и запишем туда:
Ruby-zookeeper (1.4.11-1) UNRELEASED; urgency=medium
* Initial release
-- root
Также нам еще нужен debian/compat
Echo 7 > debian/compat
Скопируем файлы, которые будут установлены, в локальную директорию и удалим папку с распакованным пакетом, она нам больше не пригодится.
Mv ruby-zookeeper_1.4.11-1/{usr,var} . rm -r ruby-zookeeper_1.4.11-1
Соберем новый пакет, а также source пакет.
Dpkg-buildpackage -rfakeroot -uc -F
В директории выше у нас появятся все необходимые файлы.
Ll .. total 5528 drwxr-xr-x 3 root root 4096 Dec 20 13:32 ./ drwx------ 12 root root 4096 Dec 20 13:31 ../ drwxr-xr-x 5 root root 4096 Dec 20 13:28 fakeroot/ -rw-r--r-- 1 root root 1261 Dec 20 13:32 ruby-zookeeper_1.4.11-1_amd64.changes -rw-r--r-- 1 root root 2375044 Dec 20 13:32 ruby-zookeeper_1.4.11-1_amd64.deb -rw-r--r-- 1 root root 565 Dec 20 13:32 ruby-zookeeper_1.4.11-1.dsc -rw-r--r-- 1 root root 3263381 Dec 20 13:32 ruby-zookeeper_1.4.11-1.tar.gz
Можно проверить содержимое получившегося deb пакета
Если вы установили программу Linux с исходного кода, запустив «make install», установка не сильно сложная, но это становится действительно сложным при удалении данной программы, если автор программы не обеспечил удаления в файле Makefile. Вам придется сравнивать полный список файлов в вашей системе до и после установки программы из исходников, и вручную удалить все файлы, которые были добавлены во время установки.
CheckInstall отслеживает все файлы, созданные или измененные с помощью установки командной строки (например, «make install» «make install_modules», и т.д.), и собирает стандартный бинарный пакет, давая вам возможность установливать или удалять его с вашего дистрибутива.
В этой статье «Создание RPM или DEB пакетов с Checkinstall в Linux» я расскажу как это делается только основанных на RedHat’s и Debian’s дистрибутивов и покажу как собрать RPM или DEB пакет с исходного кода, используя Checkinstall.
Чтобы установить 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
В этом примере, я покажу как можно собрать пакет 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 выглядит это так:
*Выбор тип пакета*
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-файл представляет собой архив в формате 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, установочный пакет будет создан.