Как открыть deb файл на linux. Как установить DEB пакет в Debian и производных.

deb - расширение имён файлов «бинарных» пакетов для распространения и установки программного обеспечения в ОС проекта Debian, и других, использующих систему управления пакетами dpkg. И сегодня мы посмотрим три инструмента командной строки, чтобы помочь вам установить локальный Debian пакет.

Если вы спрашиваете себя: “Как я могу установить Deb пакет в Ubuntu или Debian?”, То вы пришли в нужное место.

Вы можете щелкнуть правой кнопкой мыши на загруженном DEB пакете и выбрать установку из контекстного меню, но с помощью графического инсталлятора это будет очень медленно по сравнению с терминальными командами. Вот 3 различных инструмента командной строки, чтобы помочь вам установить Deb-пакеты. Они же Dpkg, Gdebi и APT.

Dpkg

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

Используйте dpkg для установки локального Debian пакета, как показано ниже.

Sudo dpkg -i версия_пакета.deb

Dpkg сам по себе не может решить проблему зависимостей, потому что он не понимает репозиториев. Но вы можете использовать следующую команду, чтобы решить эту проблему.

Sudo apt install -f

Установочный пакет Gdebi

Gdebi - программа для установки.deb пакетов, разработанная корпорацией Canonical специально для Ubuntu.

Gdebi не устанавливается по умолчанию в Ubuntu, так что вам нужно ее в первую очередь установить, для этого открываем терминал и пишем следующую строку.

Sudo apt install gdebi

Для установки локального deb-пакета используйте

Sudo gdebi версия_пакета.deb

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

Apt

apt (advanced packaging tool ) - программа для установки, обновления и удаления программных пакетов в операционных системах Debian и основанных на них (Ubuntu, Linux Mint и т. п.), иногда также используется в дистрибутивах, основанных на Mandrake, например Mandriva, ALTLinux и PCLinuxOS. Способна автоматически устанавливать и настраивать программы для UNIX-подобных операционных систем как из предварительно откомпилированных пакетов, так и из исходных кодов.

Обычно вы будете использовать APT для установки пакетов из интернет-хранилищ программного обеспечения, как в этом примере:

Sudo apt install Firefox

Знаете ли вы, что он также может быть использован для установки локальных Deb пакетов? Это еще одна причина, почему вы должны использовать apt вместо apt-get, который не имеет такой возможности. Вам нужно просто перейти в каталог, где хранится deb-пакет и установите его, как показано на примере ниже.

Cd/путь/к/файлу/deb-пакеты/ sudo apt install ./версия_пакета.deb

Например, чтобы установить TeamViewer 12 в Ubuntu 16.04/16.10, сначала загрузите пакет TeamViewer.deb в текущий каталог

Wget https://downloadus1.teamviewer.com/download/version_12x/teamviewer_12.0.69753_i386.deb

Затем установите его с помощью:

Sudo apt install ./teamviewer_12.0.69753_i386.deb

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

Используя apt для установки локальных deb пакетов, вам просто нужно добавить./, который представляет текущий рабочий каталог, перед именем пакета, так чтобы apt смог спокойно найти deb пакет.

Вот и все!

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

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

Universal Extractor – удобная утилита для распаковки различных архивов, а также некоторых дополнительных типов файлов. Данная программа, прежде всего, подходит тем пользователям, которые занимаются созданием архивов на компьютере, а лишь скачивают различные архивы из интернета, а затем распаковывают их. Утилита Universal Extractor вполне справляется с этой задачей. Она позволяет распаковать все известные архивы, а также файлы dll, exe, mdi и другие типы файлов. По сути, программа может служить, в некоторой степени, своеобразным установщиком программ, т.к. она позволяет распаковывать некоторые из установщиков, а затем запускать...

HaoZip - китайский клон популярного архиватора Winrar, как с точки зрения функциональности так и интерфейса в целом. Архиватор умеет работать со всеми популярными форматами, среди которых 7Z, ZIP, TAR, RAR, ISO, UDF, ACE, UUE, CAB, BZIP2, ARJ, JAR, LZH, RPM, Z, LZMA, NSIS, DEB, XAR, CPIO, SPLIT, WIM, IMG и другие. Кроме этого с помощью Haozip можно монтировать ISO образы и посмотреть картинки через встроенный просмотрщик, что весьма полезная фича для архиваторов. Что касается интерфейса, то здесь китайские разработчики хорошо потрудились. Они не только скопировали дизайн и функционал с архиватора Winrar, но и добави...

Peazip - универсальный и мощный архиватор с графической оболочкой. Отличная замена платному аналогу - Winrar. PeaZip поддерживает шифрование данных, создание многотомных архивов, работу с несколькими архивами одновременно, экспорт задания в виде командной строки, установку фильтров на содержимое архива. Кроме этого архиватор поддерживает все известные и даже неизвестные форматы архивов включая 7Z, 7Z-sfx, BZ2/TBZ2, GZ/TGZ, PAQ/LPAQ, TAR, UPX, ZIP и другие. Интерфейс PeaZip очень примитивен и в то же время насыщенна полезными функциями. Можно с помощью помощника интегрировать в проводник Windows или вернуть обратно, установ...

При разработке архиватора FreeArc автор решил создать программу, которая выполняет сжатие файлов с максимальной скоростью. Для этого потребовались лучшие качества библиотек сжатия LZMA, PPMD и GRZipLib. В процессе упаковки архиватор формирует файлы по типам и производит сжатие благодаря применению наиболее подходящего алгоритма. При работе архиватор использует более десяти различных алгоритмов и фильтров. Если сравнить это с распространёнными архиваторами, то у 7-zip всего три, а у RAR использует всего семь алгоритмов. Архиватор легко адаптируется для установки на различных системах. Он разработан на открытой платформе дающей в...

FileOptimizer – удобное приложение для сжатия файлов, созданное одной из независимых команд программистов. Данное приложение отличается улучшенными алгоритмами сжатия и высокой скоростью работы. Программа позволяет сжимать файлы практически всех типов, включая архивы, текстовые форматы, форматы изображений и т.п. Также, данная программа может работать со скриптами, а также через командную строку, что будет особенно полезно опытным пользователям. Для начинающих пользователей же, всё очень просто. Программа интегрируется в контекстное меню, что позволяет очень быстро сжимать файлы, находящиеся на любом диске и в любой папке.

TUGZip – удобный архиватор, имеющий понятный пользовательский интерфейс, а также обладающий рядом дополнительных возможностей. Программа TUGZip позволяет работать почти со всеми популярными архивами. Однако на этом возможности программы TUGZip не ограничиваются. Утилита TUGZip позволяет работать с образами оптических дисков, например, img, nrg, iso и т.п. Также, программа TUGZip может быть интегрирована в контекстное меню. Но если большинство архиваторов лишь добавляют в него подменю, то программа TUGZip может похвастаться возможностью использовать различные скрипты для автоматизирования процесса создания архивов, либо их распа...

7-Zip – известный архиватор с открытым исходным кодом. Такая особенность позволяет вносить изменения в структуру программы, добавляя в неё определённые функции. Программа отличается понятным и простым интерфейсом и обладает уникальными алгоритмами, позволяющими ускорить архивацию данных и их распаковку. Также, данная программа может выполнять стандартные операции с архивом, например, вы можете установить пароль на файл, либо установить степень сжатия архива. Также, если необходимо, вы можете создать самораспаковывающийся архив с необходимыми параметрами, которые задаются в специальных комментариях к архиву.

ExtractNow является удобной программой, позволяющей распаковать заархивированные файлы достаточно быстро: всего лишь нажатием одной кнопки. Особенно удобна такая опция покажется тем пользователям, которым регулярно приходится распаковывать множество файлов. Единственный минус - программа не поддерживает создание архивов, т.к. является исключительно распаковщиком (качественным и удобным), а не архиватором. Чтобы совершить распаковку файла, нужно перетащить архивы в окно программы и нажать кнопку Extract. Поддерживает популярные форматы архивов. Таким образом, программа может распаковать все популярные и наиболее часто использующ...

Simplyzip – удобный архиватор со всеми необходимыми функциями, которые использует большинство пользователей. Программа работает практически со всеми популярными форматами архивов, включая rar или zip. Тем не менее, из-за того, что разработчики программы winRar не разрешают использовать алгоритмы своего формата, архивы Rar можно только распаковывать или просматривать их содержимое. Однако программа Simplyzip поддерживает установку различных модулей и плагинов, которые могут расширить функционал данного архиватора. Если установить необходимый плагин, то программу можно научить создавать, как Rar архивы, так и архивы других формат...

Ashampoo ZIP - программа-архиватор, помогающая сжимать и хранить нужную информацию. Работает с множеством форматов, позволяя пользователям отправлять объемные документы в сжатом виде. Ashampoo ZIP имеет широкий набор различных функций. Посредством приложения можно создавать, распаковывать и разделять архивы. Помимо этого в программе поддерживается чтение, восстановление, шифрование, а также мгновенное конвертирование. Список форматов, которые поддерживаются Ashampoo ZIP довольно внушительный. Помимо создания архивов программа поддерживает распаковку документов более 30 различных архивных форматов.

IZArc – удобная программа для работы с архивами, отличающаяся понятным и простым интерфейсом, а также рядом дополнительных возможностей. Программа IZArc поддерживает огромное количество форматов, включая самые популярные rar и zip. Уникальные алгоритмы, используемые в программе, позволяют увеличить скорость работы с архивами. Однако главная особенность программы IZArc состоит в том, что она может легко конвертировать архивы из одного формата в другой. Это особенно необходимо, если вам нужно передать некоторые файлы другому пользователю, у которого нет соответствующего архиватора.Кроме того, программа IZArc позволяет просматрива...

Ежегодно, для улучшения и большего удобства пользователей, разработчики различного компьютерного софта выпускают множество интересных, удобных и качественных программ, существенно помогающих в работе. Одной из таких программ является новейшая разработка архиватора WinArc. Данная утилита доступна для общего пользования и с его помощью вам не составит труда заархивировать или разархивировать, любой, интересующий вас файл. Данная утилита во время работы, использует все ядра процессора тем самым ускорив процесс архивирования. Кроме этого имеет функцию регулировки использования ОЗУ, что позволит значительно снизить нагрузку на ваш к...

Чтобы начать создавать deb пакеты, нужно установить несколько пакетов:

$ sudo apt-get install dh_make

Подготовка папки с исходниками

Для того, чтобы dh_make и другие утилиты могли работать с папкой с исходниками, нужно привести ее в специфичный вид.

Папка должна называться имяпакета-версия . Т.е. если у меня есть папка Plugins с программой версии 0.1, то я создаю папку с именем plugins-0.1 .

$ ls VKSPlugins $ mv VKSPlugins/ libvksplugins-0.1 $ ls libvksplugins-0.1
Теперь нужно создать архив с этой папкой. Архив должен содержать в имени *.orig.tar.gz , т.е.:

$ tar -zcf libvksplugins_0.1.orig.tar.gz libvksplugins-0.1 $ ls libvksplugins-0.1 libvksplugins_0.1.orig.tar.gz
Последний подготовительный шаг, это создание в папке с исходниками папки debian со множеством служебных файлов. Чтобы это сделать, нужно выполнить команду:

$ cd libvksplugins-0.1/ $ dh_make Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? l Maintainer name: User Name Email-Address: [email protected] Date: Wed, 19 Aug 2015 14:55:53 +0300 Package Name: libvksplugins Version: 0.1 License: blank Type of Package: Single Hit to confirm: Skipping creating ../libvksplugins_0.1.orig.tar.gz because it already exists Done. Please edit the files in the debian/ subdirectory now. plugins uses a configure script, so you probably don’t have to edit the Makefiles.
В процессе выполнения этой команды будет задан вопрос о том, какой тип архива мы создаем, самый простой это single.

О типе пакета

На самом деле документация говорит, выбирать вариант только single . Т.к. я не смог понять всех требований к пакету типа library но меня вполне устраивает результат, то описание и дальше пойдет про пакет типа library .

Настройка пакета

Вся настройка пакета происходит путем редактирования файлов в каталоге debian . Рассмотрим те файлы, которые будем использовать:
  • changelog - история пакета.
  • control - главный конфиг пакета;
  • rules - аналог Makefile для пакета;
Кроме этих файлов, в папке debian будет создано много файлов *.ex которые являются примерами для конфигурации различных вещей, но мы не будем их использовать и поэтому их нужно удалить.

changelog

Данный файл содержит историю изменения пакета и текущую версию пакета. Посмотрим на его содержимое:

$ cat changelog libvksplugins (0.1-1) unstable; urgency=low * Initial release (Closes: #nnnn) -- User Name Wed, 19 Aug 2015 15:03:51 +0300
В начале идет название пакета - libvksplugins , затем его версия. Версия делиться на две части символом «-». Первая часть показывает версию программы в пакете, вторая «ревизию» пакета. Ревизия это версия пакета, т.е. если раньше такого пакета не было, то ревизия равна 1. Если же пакет с такой версией программы уже был, но в нем произошли изменения, то ревизия увеличивается.

Слово unstable показывает, что пакет является не стабильным, т.е. он не был протестирован должным образом на машинах пользователей.

Надпись urgency=low показывает срочность изменения. Т.к. срочности нет, то значение равно low . Если бы, мы делали пакет для исправления серьезной уязвимости или ошибки, то значение можно было бы установить в high .

После первой строки идет пустая строка, а за ней первая запись:

* Initial release (Closes: #nnnn)
В Debian, changelog используется для автоматического закрытия ошибок в системах отслеживания ошибок в программных продуктах. Т.к. в данном случае, я не использую такую систему, то эта строка принимает вид:

* Initial release

Замечание

При проверке пакета программой lintian , отсутствие Closes: #XXXX считается ошибкой.


Последняя строка является подписью человека, сделавшего запись. В ней содержится имя и адрес, а также дата изменения.

После установки deb пакета, файл changelog устанавливается в

/usr/share/doc/<пакет>/changelog.Debian.gz

control

Файл debian/control является главным конфигом, при создании deb пакета. Вот пример такого файла:

$ cat control Source: libvksplugins Priority: optional Maintainer: User Name Build-Depends: debhelper (>= 9), cmake Standards-Version: 3.9.5 Section: libs Homepage: #Vcs-Git: git://anonscm.debian.org/collab-maint/plugins.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/plugins.git;a=summary Package: libvksplugins-dev Section: libdevel Architecture: any Depends: libvkspluginsBROKEN (= ${binary:Version}), ${misc:Depends} Description: Package: libvkspluginsBROKEN Architecture: any Description:
Видно, что файл разбит на секции при помощи пустых строк. Каждая секция описывает один пакет, создаваемый из папки с исходниками. Рассмотрим их по порядку:

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

Priority Эта секция устанавливает приоритет пакета. Т.к. система может прекрасно обойтись без нового пакета, то значение секции установлено в optional . Т.е. этот пакет не обязателен для установки. Подробнее о приоритетах написано .

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

Build-Depends Одна из самых важных секций, устанавливающая зависимости пакета. Зависимости, указанные в данной секции должны быть выполнены, чтобы можно было собрать пакет. Т.е. список зависимостей для сборки и установки могут отличаться.

Видно, что в зависимостях стоят debhelper (>= 9), cmake . Зависимость debhelper (>= 9) ставиться для всех пакетов по умолчанию. Она нужна для корректной работы программ вида dh_* .

Второй элемент cmake был добавлен потому, что папка с исходниками содержала файл CMakeLists.txt , т.е. для сборки используется система сборки CMake . Для того, чтобы узнать, какие зависимости есть у программы, можно почитать ее документацию. Кроме этого, можно воспользоваться командой dpkg-depcheck . Данная команда должна запускаться так:

$ dpkg-depcheck -d ./configure
Но, т.к. при использовании CMake нет скрипта конфигурирования, то я использую ее так:

$ mkdir build && cd build $ dpkg-depcheck -d cmake ../ ..... Packages needed: libxml2:amd64 cmake libkrb5support0:amd64 language-pack-ru-base libnettle4:amd64 ..... libedit2:amd64 libtasn1-6:amd64 qt4-qmake libgssapi-krb5-2:amd64 libhcrypto4-heimdal:amd64 ..... libroken18-heimdal:amd64 libsqlite3-0:amd64 libqt4-dev libssl1.0.0:amd64 .....
Из примечательных тут можно отметить:

Cmake
qt4-qmake
libqt4-dev

Остальные являются зависимостями данных. Причем, cmake уже есть в списке зависимостей сборки. В принципе, можно его оставить как есть или указать используемую версию:

$ apt-cache show cmake | grep Version: Version: 2.8.12.2-0ubuntu6
При этом в CMakeLists.txt указана версия cmake, которую нужно использовать:

$ cat CMakeLists.txt | grep cmake_minimum cmake_minimum_required(VERSION 2.8.4)
Я думаю, что разработчику виднее, и поэтому указываю версию из CMakeLists.txt. Для Qt 4 все понятно с номерами версий, но для очистки совести проверим и их версии:

$ apt-cache show qt4-qmake | grep Version: Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1.1 Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1 $ apt-cache show libqt4-dev | grep Version: Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1.1 Version: 4:4.8.6+git49-gbc62005+dfsg-1ubuntu1
Т.е. для Qt 4 указываем версию 4.8.6:

Build-Depends: debhelper (>= 9), cmake (>= 2.8.4), qt4-qmake (>= 4.8.6), libqt4-dev (>= 4.8.6)
Standards-Version Версия стандарта, в соответствии с которым создан файл. Это значение не нужно менять.

Section . Секция для пакета, т.е. группа пакетов, выполняющая одну задачу. В Политике Debian разделе 2.4 этот вопрос описан более подробно.

Homepage Домашняя страница проекта. Т.к. данный код писал я и у него нет страницы, просто удаляю эту строку.

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

Из схемы видно, что из исходников программы, я хочу получить 4 пакета:

  • пакет с исходными кодами;
  • пакет с бинарником (самой библиотекой);
  • пакет для разработки (заголовочные файлы);
  • пакет с документацией.
Возникает вопрос, зачем так много пакетов? Ответов на него может быть несколько, если прочитать соответствующие обсуждения на stackoverflow.com то основная идея разбиения в том, что большинству пользователей не нужны заголовочные файлы и документация, поэтому разделение этих файлов способствует снижению нагрузки на сеть и скорости установки программ.

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

Кроме описанных выше пакетов, можно создать dbg пакет с отладочной сборкой программы. Это может пригодиться, если программа падает и у Вас есть под рукой отладчик. Однако, я так и не смог понять как это делать. Документация не дает ответа на этот вопрос. Если делать так как описано в ней, то я либо получаю пустой пакет либо получаю кучу ошибок при сборке.

Схема на рисунке выше показывает, что пакет с исходниками называется libvksplugins_source , однако, в файле control указано, что пакет с исходниками будет называться libvksplugins . На самом деле, он действительно будет называться libvksplugins , а пакет с бинарниками, будет называться libvksplugins… deb . Суть этой путаницы в том, что пакет с исходниками представляет собой tar архив и служебные файлы, тогда как пакет бинарников это архив с расширение deb.

Настройка пакета библиотеки Посмотрим внимательно на описание пакета библиотеки:

Package: libvksplugins
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Library for creating plugins with VKS 2
This library provides a mechanism for creating plugins
to use in project VKS 2.

Параметр Architecture устанавливает архитектуру собираемого пакета. Значение any означает, что после сборки бинарников нужная архитектура будет подставлена системой сборки. Т.е. на 64х битной машине, получится пакет ..._amd64... а на 32х битной пакет ..._i386... .

Для пакетов, содержащих скрипты или тексты, нужно указывать значение как all .

Третья строка, описывает зависимости создаваемого пакета. Вот как она описана в 4й главе Руководства начинающего разработчика Debian:

Утилита dh_shlibdeps вычисляет зависимости двоичного пакета от общих библиотек. Она генерирует список исполняемых файлов ELF и общих библиотек, которые находит для каждого двоичного пакета. Этот список подставляется вместо ${shlibs:Depends} .

Утилита dh_perl вычисляет зависимости Perl. Она генерирует список зависимостей от perl или perlapi для каждого двоичного пакета. Этот список подставляется вместо ${perl:Depends} .

Некоторые команды пакета debhelper могут добавлять зависимости к вашему генерируемому пакету. Каждая команда генерирует список необходимых пакетов для каждого двоичного пакета. Этот список подставляется вместо
${misc:Depends} .

Утилита dh_gencontrol генерирует файл DEBIAN/control для каждого двоичного пакета, заменяя ${shlibs:Depends} , ${perl:Depends} , ${misc:Depends} и т.д на полученные значения.


Т.е. эта строка говорит о том, что сборщик пакета сам определит зависимости.

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

  • строка должна начинаться с пробела;
  • строка не должна быть длиннее 80 символов;
  • пустая строка должна начинаться с пробела и состоять из символа точки.
Настройка пакета заголовочных файлов Пакет с заголовочными файлами, будет называться libvksplugins-dev, вот его описание:

Package: libvksplugins-dev
Section: libdevel
Architecture: any
Depends: libvksplugins (= ${binary:Version}), ${misc:Depends}
Description: Development package for libvksplugins
This package provides development files for
library libvksplugins.
.
Also, it contains pkg-config file, to use.

В данном примере, интересна строка Depends . В ней указано, что данный пакет будет зависеть от пакета библиотеки libvksplugins , причем (= ${binary:Version} ) говорит о том, что необходимо строгое совпадение версий бинарного пакета и пакета разработчика. Это важный момент потому, что заголовочные файлы должны строго соответствовать бинарникам.

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

Package: libvksplugins-doc
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: Documentation for libvksplugins
Package contains html documentation files for libvksplugins

Тут должно быть все понятно.

rules

Данный файл является аналогом Makefile для сборки пакетов. По умолчанию, он создается в таком виде:

$ cat rules #!/usr/bin/make -f # See debhelper(7) (uncomment to enable) # output every command that modifies files on the build system. #DH_VERBOSE = 1 # see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/* DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/default.mk # see FEATURE AREAS in dpkg-buildflags(1) #export DEB_BUILD_MAINT_OPTIONS = hardening=+all # see ENVIRONMENT in dpkg-buildflags(1) # package maintainers to append CFLAGS #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic # package maintainers to append LDFLAGS #export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed # main packaging script based on dh7 syntax %: dh $@ # debmake generated override targets # This is example for Cmake (See http://bugs.debian.org/641051) #override_dh_auto_configure: # dh_auto_configure -- \ # -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
Видно, что это bash скрипт с синтаксисом Makefile. Единственная интересная конструкция здесь это

%: dh $@
Это шаблон, который для всех целей вызывает dh команду с передачей аргументов ей. Для сборки пакета важно, чтобы текст dh $@ начитался с символа табуляции. Т.е. отступ это не пробелы, а табуляция.

Т.к. исходники используют систему сборки CMake, то нужно изменить эту запись следующим образом:

%: dh $@ --buildsystem=cmake

Содержимое пакетов

После того, как мы указали в debian/control какие пакеты мы хотим получить, нужно указать какие файлы в какой пакет помещать. Для этого, для каждого названия пакета из файла control , нужно создать в папке debian два файла. Первый должен называться пакет.dirs , а второй пакет.install . Суть файлов в том, что первый указывает, какие папки нужно создать для пакета, а второй, какие файлы включить в пакет.

Посмотрим на их содержимое:

$ cat libvksplugins-dev.dirs usr/lib usr/include $ cat libvksplugins-dev.install usr/include/* usr/lib/lib*.a usr/lib/lib*.so usr/lib/pkgconfig/* usr/share/pkgconfig/*
Важный момент, отсутствие начальной дроби в путях и отсутствие дроби в конце пути к папке. Проверив, куда CMake устанавливает файлы библиотеки, можно сформировать такие файлы:

$ for item in $(ls libvksplugins*); do echo "$item:"; cat $item; done libvksplugins-dev.dirs: usr/include/dep572 usr/lib/pkgconfig libvksplugins-dev.install: usr/include/dep572/plugins/* usr/lib/dep572/lib*.so usr/lib/pkgconfig/* libvksplugins.dirs: usr/lib/dep572 libvksplugins-doc.dirs: usr/share/doc/libplugins-0.1 libvksplugins-doc.install: usr/share/doc/libplugins-0.1/*.tgz libvksplugins.install: usr/lib/dep572/lib*.so.*

Завершение настройки

Т.к. исходники мои, то никаких дополнительных описаний и ограничений copyright у меня нет, поэтому я удаляю все лишние файлы из каталога debian.

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

После настройки, сборка пакетов происходит довольно просто, нужно в папке проекта (которая включает подпапку debian) выполнить команду:

$ dpkg-buildpackage -rfakeroot -us -uc
Параметры -us -uc говорят о том, что не нужно подписывать gpg ключом созданные пакеты. Их можно не использовать, если настроен ключ подписи gpg по умолчанию. Как указать ключ подписи по умолчанию, я тоже не понял. Если все прошло хорошо, то у нас поваляется набор пакетов в папке выше:

$ ls -l ../ итого 748 drwxrwxr-x 10 user user 4096 авг. 20 10:46 libvksplugins-0.1 -rw-rw-r-- 1 user user 2210 авг. 20 10:47 libvksplugins_0.1-1_amd64.changes -rw-r--r-- 1 user user 6418 авг. 20 10:47 libvksplugins_0.1-1_amd64.deb -rw-rw-r-- 1 user user 1504 авг. 20 10:46 libvksplugins_0.1-1.debian.tar.xz -rw-rw-r-- 1 user user 1008 авг. 20 10:46 libvksplugins_0.1-1.dsc -rw-rw-r-- 1 user user 36713 авг. 19 14:52 libvksplugins_0.1.orig.tar.gz -rw-r--r-- 1 user user 3262 авг. 20 10:47 libvksplugins-dev_0.1-1_amd64.deb -rw-r--r-- 1 user user 699564 авг. 20 10:47 libvksplugins-doc_0.1-1_all.deb

Заключение

Если вы дочитали до сюда - значит вы любите читать.

Этот текст является результатом моего опыта внедрения deb пакетов на работе. Опыт показал, что наличие сетевого репозитория (reprepro) и внимательное отслеживание версий, позволяют без проблем обновлять и тестировать различные версии ПО на парке из 30 машин с системами Astra Linux 1.3, 1.4 и Эльбрус ОС.

Приемы работы в Ubuntu.
Глава 6: Управление пакетами

Оригинал: "Ubuntu Hacks: Chapter 6 - Package Management"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2010 г.

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

Управления пакетами в дистрибутивах, основанных на Debian, является очень мощным механизмом и экономит массу усилий, которые можно впустую потратить на поиск последних пакетов и отслеживания зависимостей. Возможностей автоматизированных средств, таких как apt-get , Synaptic и Adept, практически всегда хватает большинству пользователей, и вы должны, по мере возможности, пользоваться ими. Однако иногда возникают обстоятельства, когда вам может потребоваться непосредственно установить пакет .deb .

Предостережение. В Ubuntu используются автоматизированные средства установки пакетов по веской причине. С их помощью реализованы специальные средства защиты, обеспечивающих совместимость пакетов и наличие библиотек, если они необходимы пакетам. Если устанавливаете отдельно взятые файлы .deb (особенно те, которые не упакованы для конкретной версии Ubuntu), вы не только теряете всю массу этих преимуществ, вы также можете из-за несовместимости библиотек вывести из строя отдельные части системы, перезаписать файлы, от которых зависят другие программы Ubuntu, или добавить уникальные версии, которые усложнят обновление вашей системы в процессе ее эксплуатации. Перед тем, как устанавливать отдельный пакет .deb , особенно если вы новичок в Ubuntu, пожалуйста, изучите все другие возможности установки, в том числе использование репозитариев universe и multiverse [Совет # 60 ]. Вы создали свое собственное ядро "в стиле Ubuntu" Если вы с помощью утилиты make-kpkg откомпилировали из исходного кода свое собственное ядро, вы в итоге должны получить пакет .deb , в котором будет находиться двоичный код ядра, и файлы .deb для любого дополнительного модуля, которые вы, возможно, соберете (конкретные шаги этой процедуры описаны в разделе "Сборка ядер в стиле Ubuntu" [Совет # 78 ]). Вы откомпилировали свой собственный пакет из исходных кодов Ubuntu Как и при компиляции ядра, вы компилировали исходный код Ubuntu при помощи утилиты dpkg , и, в конечном счете, вы получили отдельный файл .deb , который вам нужно установить вручную. Вы хотите вернуться к старой версии программы Такая ситуация может возникнуть, в частности, в случае, если вы используете релиз Ubuntu, предназначенный для разработчиков. Иногда последних версиях релизов, предназначенных для разработчиков, имеются ошибки. В этим случае вам может потребоваться вернуться к предыдущей версии пакета. Один из самых простых способов сделать это состоит в нахождении более старой версии пакета .deb (возможно, в вашем локальном кэше пакетов в /var/cache/apt/archives/ ) и установке его вручную. Программа, которую вы хотите установить, имеет расширение.deb, но ее нет в репозитариях Ubuntu Могут возникнуть обстоятельства, при которых в репозитариях Ubuntu отсутствует пакет .deb , который вы хотите установить, поскольку это более новый пакет, чем тот, что предлагает Ubuntu, поскольку вы нашли более универсальный вариант файла .deb , или третья сторона предоставила файл .deb для Ubuntu, но еще не создала свой собственный репозитарий пакетов (например, как веб браузер Opera Web в его текущем варианте пакета).

Подсказка

Если вы нашли программу, упакованную в формате.deb, то в девяти случаях из десяти есть большая вероятность, что эта программа уже есть в одном из репозитариев Ubuntu. Подробности о дополнительных репозитариях, которые предоставляются Ubuntu и третьими сторонами, смотрите в разделе "Изменение списка репозитариев пакетов" [Совет # 60 ].

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

Установка файла.deb

Всякий раз, когда вам, независимо от причины, требуется установить файл .de b, нужно обратиться к утилите dpkg . Утилита dpkg является инструментом, который в дистрибутивах, базирующихся на Debian, используется для установки файлов .deb . (Даже когда вы пользуетесь автоматическими средствами управления пакетами, на самом деле за кулисами в системе для установки пакетов используется dpkg ). Если вы знакомы с инструментальным средством rpm , используемых в дистрибутивах, базирующихся на пакетах RPM, то обнаружите, что у dpkg похожий синтаксис. Чтобы установить из командной строки обычный файл .deb , наберите следующее:

Whiprush@ubuntu:~$ sudo dpkg -i packagename.deb

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

Whiprush@ubuntu:~$ sudo dpkg -i package1.deb package2.deb package3.deb

или используйте универсальный символ [Совет # 13 ], чтобы установить все файлы.deb, которые есть в текущем каталоге:

Whiprush@ubuntu:~$ sudo dpkg -i *.deb

Утилита dpkg также имеет параметр, задающий рекурсивное исполнение (-R). Если у вас есть директорий, заполненный файлами deb, вы можете установить их следующим образом:

Whiprush@ubuntu:~$ sudo dpkg -i -R /path/to/directory

и утилита dpkg будет рекурсивно искать и устанавливать все файлы .deb , которые находятся в этом директории и во всех его поддиректориях.

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

Предостережение

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

Чтобы посмотреть полный список параметров --force , наберите следующее:

Whiprush@ubuntu:~$ dpkg --force-help

К числу наиболее полезных параметров относятся следующие:

Установка пакета, даже если он отмечен как hold .

Force-overwrite

Установка пакета, даже если он может переписать файлы из другого пакета.

Выдать список ошибок об отсутствующих зависимостях и в любом случае продолжить установку.

Force-conflicts

Даже если пакет конфликтует с другим пакетом, в любом случае продолжить установку.

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

Whiprush@ubuntu:~$ sudo dpkg -i --force-overwrite packagename.deb

Удаление пакета

Иногда вам может потребоваться удалить отдельный пакет вручную. В dpkg есть параметры -r и -P , предназначенные для удаления пакета и удаления пакета с очисткой конфигурационных файлов, соответственно. Чтобы удалить пакет, введите:

Whiprush@ubuntu:~$ sudo dpkg -r packagename

Обратите внимание, что вы не указываете расширение .deb в имени файла, который вы, возможно, перед этим устанавливали, - только имя самого пакета. Когда указывается параметр -r , dpkg будет искать и удалять все файлы этого пакета, кроме конфигурационных файлов, которые будут оставлены на случай, если программа будет устанавливаться еще раз. Если вы хотите очистить систему от всех файлов, включая конфигурационные файлы, используйте параметр -P:

Whiprush@ubuntu:~$ sudo dpkg -P packagename

И других, использующих систему управления пакетами dpkg .

Пакет Debian (dpkg)


Иконка deb-файлов в среде GNOME
Расширение .deb или .udeb
MIME -тип application/vnd.debian.binary-package
Разработчик Debian
Тип формата Система управления пакетами
Содержит Программное обеспечение и метаданные в архивах .tar .bz2 или.tar.
Расширен из и tar

Установка deb-пакета в Gdebi

deb-old

Изначальный («старый») формат, обозначаемый в документации как deb-old, использовался до версии Debian 0.93. Его устройство следующее: две строки ASCII -текста, за которыми следуют два сцепленных архива формата tar.gz . Первая строка содержит номер версии формата, дополненный до 8 цифр (0,939000 для всех старых форматов). Вторая строка содержит десятичную строку (без начальных нулей), определяющую длину первого архива формата tar.gz. Каждая из этих строк завершается одним символом новой строки .

Современный формат

Начиная с Debian версии 0.93, deb файл представляет собой архив формата .

Обычно архив содержит 3 файла в нижеприведенной последовательности:

  • debian-binary - текстовый файл, содержащий версию формата deb-пакета (современный формат - версия 2.0);
  • control.tar - tar-архив, содержащий информацию и скрипты установки пакета, может быть сжат с помощью gzip или , тип архива отображается в имени файла (к примеру control.tar.gz).
  • data.tar - tar-архив, содержащий дерево устанавливаемых файлов пакета, может быть сжат с помощью gzip , bzip2 , lzma или , тип архива отображается в имени файла (к примеру data.tar.gz).

Архив control.tar содержит информацию о поставляемом в данном пакете программном обеспечении:

  • control - содержит краткую информацию о пакете программного обеспечения: наименование, версия, описание, целевая архитектура, зависимости от других пакетов и так далее;
  • md5sums - cодержит MD5 -суммы всех устанавливаемых файлов;
  • conffiles - список файлов пакета, являющихся конфигурационными, при обновлении файлы из этого списка не перезаписываются новыми, если это не указано отдельно;
  • preinst , postinst , prerm , postrm - необязательные сценарии оболочки, выполняемые соответственно до и после установки или удаления пакета;
  • config - сценарий для debconf - механизма конфигурации;
  • shlibs - список разделяемых библиотек пакета.

Архив data.tar содержит устанавливаемые файлы пакета и при установке разворачивается в систему относительно её корня.

Репозитории

Основной вид распространения deb-пакетов - репозитории. Для описания репозитория обычно используется строчка:

Deb http://ftp.debian.org/debian squeeze main contrib non-free

  • deb - указание типа репозитория
  • http://ftp.**** - URI корня репозитория. Может использоваться http:// ftp:// file:// и некоторые другие схемы.
  • squeeze - distribution part. Версия операционной системы.
  • main contrib *** *** - component - Компоненты операционной системы (в основном различающиеся свободой).

Репозиторий, размещенный на сетевых хранилищах обычно объединяет несколько distribution part с общим хранением пакетов. структура обычно такова.

  • /pool/ - структуированное по имени хранилище скомпилированных пакетов и исходных текстов программ.
  • /dists/ - списки пакетов, входящий в определённый distribution part.

Программное обеспечение

Создание пакетов

Создают пакеты deb обычно с помощью утилит dpkg - в частности, dpkg-buildpackage. Основы создания пакетов описаны в «Руководстве нового сопровождающего Debian» и «Справочнике разработчика Debian» .

Совсем простые, но малопригодные для серьёзного сопровождения пакеты можно создавать с помощью программы CheckInstall .

Debhelper - коллекция небольших программ, которые могут быть использованы в файлах debian/rules (наборах инструкций для сборки deb-пакета). Создана Джо Хессом с целью предоставить создателям пакетов Debian возможность писать структурно более простые debian/rules -файлы и повторно использовать готовые стабильные и удобные решения для многих подзадач сборки пакетов. По состоянию на конец 2010-х годов содержит более 60 небольших программ.

Часто вместе с программами debhelper используют написанную Крейгом Смоллом утилиту dh_make (не являющуюся его частью), которая копирует шаблоны всех файлов, необходимых для постройки deb-пакета из исходного кода программы. Эти шаблоны могут включать информацию, которую предоставил пользователь, и краткую информацию о том, как строится программа из исходного кода. После запуска dh_make , как правило, всё равно необходимо отредактировать большинство файлов шаблонов для того, чтобы построить deb-пакет.

Система CDBS - набор make-правил, использующий debhelper и позволяющий пользователям писать ещё более короткие файлы сборки deb-пакетов.

udeb

Проект debian-installer ввёл формат udeb («µdeb», «микро-deb»), который идентичен формату deb, но не полностью следует политике