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

Обычно пакеты содержат болванки конфигурационных файлов, например, размещаемых в /etc. Очевидно, что если конфиг в пакете обновляется, пользователь потеряет свой отредактированный конфиг. Эта проблема легко решается использованием папок типа «config.d», содержимое которых включается в основной конфиг, заменяя собой повторяющиеся опции.
Файл «DEBIAN/conffiles» позволяет решить проблему иначе: он содержит список файлов конфигурации (по одному на строке). Если в текущей версии пакета один из этих файлов обновляется, то пользователь получает предупреждение о конфликте версий конфигов, и может выбрать: удалить, заменить, или сделать merge.
С этой ситуацией наверняка сталкивался каждый линуксоид, копавшийся в конфигах:) А ноги растут отсюда.
На каждой строке должен быть полный абсолютный путь до каждого конфига. Например:
/etc/supersh/init.conf
/etc/supersh/actions.conf
DEBIAN/dirs: список папок для создания
«Список абсолютных путей к папкам, которые требуются программе, но по каким-либо причинам не создаются.» - гласит официальная документация. На практике – здесь перечисляются все папки, так или иначе используемые программой: и где лежат бинарники, и которые используются программой.
По одной на строке. Например:
/var/log/supersh
/var/lib/supersh
Удобно использовать для создания нескольких пустых папок.
DEBIAN/menu: создание пунктов меню
Хитрый файл для создания пунктов меню. У меня он так и не заработал:) Складывается ощущение, что его содержимое используется либо в необычных оконных менеджерах, либо в каком-то консольном меню… или же использовалось ранее и было забыто:)
Пример:
?package(supersh):needs="text" section="Applications/Programming" title="Super Shell Script" command="/usr/bin/super.sh"
TODO: узнать зачем нужно. Об этом написано в man5 menufile , честно говоря я не вникал:)
UPD: Правильный способ добавления пункта меню
Файл /DEBIAN/menu создаёт неизвестно что и непонятно где: элементы графического меню всё равно не создаются. Поэтому будем делать правильно:)
В /usr/share/applications видим кучку *.desktop файлов: это и есть пункты меню. Они представляют собой текстовые файлы с синтаксисом наподобие ini-файла. Открываем, учимся, делаем так же и кладём получившийся *.desktop файл в usr/share/applications/ . Иконка для него должна лежать в usr/share/pixmaps .
После этого в postinst скрипт нужно добавить выполнение команды обновления меню update-menus:
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ] ; then
update-menus
fi

Работа со скриптами установки пакета будет рассмотрена далее.
Спасибо Condorious за наводку:)

DEBIAN/md5sums: контрольные суммы файлов
Используется для проверки целостности пакета. Важный файл.
Заполняется так (cwd=корень пакета):
$ md5deep -r usr > DEBIAN/md5sums
DEBIAN/watch: мониторинг сайта, откуда была скачана прога
Функция полезна, если Вы мэйнтейните от нескольких десятков пакетов, и уследить за всеми обновлениями сложно.
Файл содержит инструкции для программ uscan и uupdate. Используя эту возможность, можно следить за сайтом, откуда были получены исходники пакета, и обеспечивать контроль качества дистрибутива в целом.
Пример:
# Site Directory Pattern Version Script
ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate

И ещё пример для uscan(1):
version=3
madwimax.googlecode.com/files/madwimax-(.*)\.tar\.gz

DEBIAN/(preinst|postinst|prerm|postrm): скрипты установки
Всего можно создать до четырёх скриптов в одном пакете:

Обратите внимание, что ошибки, возникающие в этих скриптах никак не логируются : ничего интереснее кода возврата скрипта нигде не сохраняется, и логирование необходимо делать вручную! Пользователи одного моего пакета терпели неудачу при установке на Linux Mint, и не было даже возможности попросить у них лог ошибок (которого нету) чтобы выдебагать причину:)
Рекомендую использовать в начале каждого скрипта следующую болванку: она будет сохранять в syslog все возникающие ошибки.
#!/bin/bash
set -e # fail on any error
set -u # treat unset variables as errors

# ======[ Trap Errors ]======#
set -E # let shell functions inherit ERR trap

# Trap non-normal exit signals:
# 1/HUP, 2/INT, 3/QUIT, 15/TERM, ERR
trap err_handler 1 2 3 15 ERR
function err_handler {
local exit_status=${1:-$?}
logger -s -p "syslog.err" -t "ootync.deb" "supersh.deb script "$0" error code $exit_status (line $BASH_LINENO: "$BASH_COMMAND")"
exit $exit_status
}

Ваш код установочного скрипта...

WARNING: болванка пока не тестировалась широко, проверьте лишний раз! На невозможность отладки наткнулся совсем недавно:)

DEBIAN/templates: шаблоны для диалогов
Как уже было сказано, в скрипте DEBIAN/config можно задавать пользователю вопросы: ввести строку, выбрать один из вариантов, поставить галочку,… Этим занимается «библиотека» bash функций debhelper пакета debconf, умеющая кроме этого ещё массу полезных вещей. Здесь их не рассматриваю:)
Файл DEBIAN/templates содержит данные, используемые при выводе диалоговых окон (GUI или ncurses). Файл содержит блоки, разделённые пустой строкой. Каждый блок определяет ресурсы, используемые в одном конкретном диалоговом окне.
Шапка для всех типов диалогов стандартная:
Template: supersh/template-name
Type: string
Default: Default-value
Description: Dialog-title
␣Dialog-text

Template - уникальный (в пределах одного пакета) идентификатор шаблона. Если в скрипте нужно вызвать определённый диалог - используется именно это имя.
Type - тип шаблона. Определены такие типы: string, password, boolean, select, multiselect, text, note, error.
Default-value - значение по умолчанию: пользователь может просто согласиться с ним.
Description - как и в контрольном файле, состоит из двух полей: короткое описание, и длинный текст. Первое - это заголовок «окна», второе - более развёрнутое описание того, что требуется от пользователя. Рекомендуется не использовать слов вроде «введите», а сразу суть: «Приветствие скрипта», «Точка монтирования»,…

Тип Описание шаблона
string Приглашение на ввод текстовой строки
password Приглашение на ввод пароля.
Для этого типа шаблона нет значения Default по понятным причинам:)
boolean Галочка:) Имеет строковое значение «true» или «false»
select Возможность выбора одного из нескольких вариантов.

Choices: yes, no, maybe
multiselect Возможность выбора нескольких вариантов галочками.
Варианты предлагаются в дополнительном атрибуте шаблона:
Choices: sex, drugs, rock-n-roll
text Выводит на экран текст: некоторая не очень важная информация
note Выводит на экран текст: важная информация
error Выводит на экран текст: очень важная информация, критическая.

Для шаблонов text, note, error также нет значения Default, так как они лишь отображают информацию:)
Поиграемся с следующим шаблоном:
Template: supersh/greeting
Type: string
Description: Welcome message
␣The message you wish the script to welcome you with.
Default: Greetings, my master!
Основы использования debconf и debhelper
Это лишь работоспособные наброски. В оригинале почитать о шаблонах и работе с ними можно здесь: man 7 debconf-devel:)
Чтобы использовать шаблоны в своём скрипте настройки DEBIAN/config, необходимо сначала подключить функции debhelper:
. /usr/share/debconf/confmodule . Также этот файл нужно подключить в скрипте postinst: иначе скрипт DEBIAN/config вообще не выполнится!
Эти функции доступны в пакете debconf, не забудьте включить его в зависимости!
Примитивный пример использования. Файл DEBIAN/config
#!/bin/bash -e

# Подключение команд debconf

Case "$1" in
configure|reconfigure)
# Запрос


# Обработка ответа

greeting="$RET"
echo "$greeting" > /etc/supersh/greeting.txt
;;
*)
echo "config called with unknown argument \`$1"" >&2
exit 1
;;
esac
# Запрос
db_input medium "supersh/greeting" || true # инициализация
db_go || true # вывод запроса на экран

# Обработка ответа
db_get "supersh/greeting" # Получение значения в переменную $RET
greeting="$RET"
echo "$greeting" > /etc/supersh/greeting.txt

Здесь уже кроется неприятная засада: обратите внимание, что функции db_input передаётся приоритет диалога medium. Для debconf можно установить минимальный приоритет: диалоги с приоритетом ниже которого не отображаются, а берётся значение по умолчанию (Default шаблона)! Чтобы этого ТОЧНО не случилось - используем приоритет critical:) Кроме того, при установке из GUI порог вывода вопросов выше, и многие из них не отображаются вообще.
Возможные приоритеты: low - всегда используется default, medium - дефаулт обычно вполне подходит, high - дефаулт нежелателен, critical - внимание пользователя жизненно важно.
|| true используется чтобы скрипт не помер из-за ключика "-e" переданного bash.
В этом скрипте тоже рекомендуется использовать ту болванку для отлова ошибок, иначе с распространяемым пакетом могут возникнуть проблемы при отладке:)
Все тонкости использования debconf (функции, способы, параметры, коды ошибок) описаны в достаточно многословном мане: man debconf-devel .

И последнее: при удалении пакета командой purge - debconf должен также вычистить из своей базы сведения о пакете. Например, он сохраняет выбор пользователя при запросах db_input.
Чтобы вычистить эти данные, нужно в postinst-скрипт добавить следующее:
if [ "$1" == "purge" ] && [ -e /usr/share/debconf/confmodule ] ; then
. /usr/share/debconf/confmodule
db_purge
fi

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

Ура! Все нужные файлы созданы, лежат по нужным папочкам. Теперь пора собирать пакет:)
Первое, что нужно сделать - это рекурсивно выставить всем файлам в корне пакета пользователя и группу root:root (или другие, если потребуется). Это нужно затем, что файлы пакета упаковываются в tar.gz архив который сохраняет и права доступа к файлам, и владельца. Потому нужно выполнить:
$ sudo chown -R root:root .
Однако делать это не обязательно. Есть отличная команда fakeroot которая при создании архива подменит владельца файлос root-ом.
В нашем примере, скрипт должен иметь бит выполнимости.
Потом выходим на папку назад, чтоб было видно корневую папку пакета, и пакет создаётся лёгким пинком сам:
$ fakeroot dpkg-deb --build supersh
Созданный пакет необходимо переименовать, чтобы он соответствовал порядку именования *.deb пакетов: <имя пакета>_<версия>_<архитектура>.deb
$ mv supersh.deb supersh_1.0-1_all.deb
Всё, пакет готов!
Автоматическая проверка пакета
Существует утилита lintian, позволяющая проверить пакет и выявить типичные ошибки в его структуре. Делается это так:
$ lintian supersh_1.0-1_all.deb
Установка пакета
$ sudo dpkg -i supersh_1.0-1_all.deb

Создаём собственный репозиторий пакетов

Теперь у нас есть собственный пакет. Когда их будет несколько, и тем более - с зависимостями, окажется, что намного удобнее быстренько поднять собственный локальный микро-репозиторий, и включить его в список источников менеджера пакетов:) Здесь я опишу быстрый HowTo «как создать свой репозиторий». Идею будет легко развить, почитывая соответствующую документацию:)
Сперва установим помощника:
$ sudo apt-get install reprepro
Описание будущего репозитория
Центр репозитория - его описание. Главное в нём - список компонент репозитория. Мы создадим компоненты «soft» и «games».
Выберите папку для будущего репозитория. Все действия производятся из её корня.
Создаём файл conf/distributions следующего содержания:
Description: my local repository
Origin: Ubuntu
Suite: testing
AlsoAcceptFor: unstable experimental
Codename: karmic
Version: 5.0
Architectures: i386 amd64 source
Components: soft games
UDebComponents: soft games

В нашем деле создания простого репозитория все поля не играют принципиальной роли, и используются лишь для визуального определения «что есть что»:)

Создание репозитория
Репозиторий описан! Теперь сгенерируем болванку на основе описания. Команды выполняются в корне репозитория:
$ reprepro export
$ reprepro createsymlinks
И добавим готовый репозиторий в /etc/apt/sources.list:
deb file:///path/to/repo/ karmic soft games
Этот репозиторий можно также расшарить при помощи веб-сервера.
Управление пакетами в репозитории
В корень репозитория кладём *.deb файлы для добавления, и добавляем их в компоненту soft дистрибутива karmic:
reprepro -C soft includedeb karmic *.deb
теперь пакеты доступны из менеджера пакетов:)
Удаление пакетов:
reprepro -C soft remove karmic supersh

Финиш

В статье рассмотрены материалы по созданию deb пакетов. Акцент сделан на моментах, для которых в сети нет достаточно наглядного описания. Надеюсь, что моя попытка изложить просто и понятно не провалилась:)
Домашнее задание:)) - вполне неплохо документированные вещи, которые легко найти в man"ах и статьях:
  • Создание source пакетов, компилирующих исходники: на примере Zabbix об этом отлично рассказал хабраюзер

Даже если вы новичок в Linux и работаете с ним совсем не долго, вы знаете, что самый распространенный способ установки программ в дистрибутивах, основанных на данном ядре, это установка из репозиториев. Однако, бывают случаи, когда это невозможно, а нужная программа распространяется в виде пакета rpm или deb. И поскольку более распространенными на сегодняшний день являются дистрибутивы, основанные на Debian (Ubuntu, Elementary OS, Linux Mint и т.п), в которых используются deb пакеты, рассмотрим как устанавливать именно их.

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

В Ubuntu установить deb пакет можно через Центр приложений:

  • скачайте нужный файл;
  • кликните по нему два раза левой клавишей мыши;
  • в открывшемся Центре Приложений выберите «Установить».

Установка deb пакета через терминал

Как всегда, самый простой и универсальный способ как для настройки Linux, так и установки deb пакетов в частности, это терминал. Чтобы установить deb пакет через терминал достаточно выполнить несколько команд. Рассмотрим на примере установки Google Chrome:

  • естественно, сначала скачиваем сам пакет;
  • дальше открываем терминал и переходим в каталог с файлом, поскольку чаще всего это «Загрузки», то команда будет выглядеть так: cd ~/Загрузки/
  • и выполняем установку при помощи пакетного менеджера dpkg: sudo dpkg -i google-chrome-stable_current_i386.deb
  • вводим пароль суперпользователя и ждем окончания установки.

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

Sudo dpkg -i имя_пакета.deb Предыдущая запись

Можно устанавливать стороннее программное обеспечение. Для этого используются файлы с расширением.DEB. Их открывают через Центр приложений, терминал или утилиты. Легче всего это сделать при помощи графического интерфейса. Но пользователи, которые раньше не работали в такой ОС, вряд ли смогут разобраться без инструкции. В Ubuntu установка DEB-пакета немного отличается от запуска EXE-файлов в Windows.

Чтобы утилита работала без ошибок, её лучше загружать из Центра приложений Линукс (ЦП). Так вы точно получите официальное ПО. Оно будет самостоятельно обновляться. Можно поискать файлы на сайте разработчика нужной вам программы. Обращайтесь к неофициальным источникам в крайнем случае: например, когда на компьютере нет доступа в интернет . Также ручная установка DEB актуальна, если вы не нашли утилиту в ЦП.

Если на компьютере отключена сеть, это единственный способ поставить на него драйвера. Лучше искать их на сайте launchpad.net. Введите в строку поиска «Linux-Firmware». Далее выбирайте дистрибутив и архитектуру.

Для работы пакета нужны библиотеки, от которых он зависит. Такие объекты есть и в других ОС. Например, в Windows это DLL-файлы . При инсталляции ПО из Центра недостающие дополнения будут устанавливаться автоматически. А со сторонними утилитами всё не так просто. Если библиотек нет, и ЦП их не подгрузил, значит, их надо качать вручную.

Графический интерфейс

Самое простое - инсталляция DEB-пакета через графический интерфейс. Он напоминает проводник Win. Но отличия всё же есть.


Так вы запускаете файлы через Центр приложений. Он часто тормозит и «неправильно» открывает утилиты. Поэтому лучше использовать консоль.

Терминал

Вот как установить DEB-пакет на Ubuntu, используя консольные команды:


Другие утилиты

Существуют и другие утилиты для загрузки установщиков.

Gdebi

Если её у вас нет, скачайте через терминал. Введите команду «sudo apt install gdebi». Служба появится в контекстном меню файлов. Использовать её просто:


Можно и через консоль «sudo gdebi [Путь_к_директории]/[Имя_пакета].deb». Программа сама загрузит связанные библиотеки, если компьютер подключен к интернету, и они есть в репозитории.

Apt

Вот как выглядит установка DEB в Ubuntu через программу Advanced Packaging Tool. Она подходит для локальных пакетов:

  1. Запустите «Терминал».
  2. Перейдите в папку с нужным файлом «cd ~/[Имя_каталога]». В команде можно указать полный путь.
  3. И введите «sudo apt install ./[Имя_файла].deb». Точка с косой чертой («слешем») означает, что вы обращаетесь к текущей директории.
  4. Зависимости загрузятся автоматически, если они доступны.

Теперь вы знаете, как установить DEB-пакет на Linux Ubuntu. Способов много. Можно загружать программы с помощью интуитивно-понятного интерфейса или терминала. Дополнительные библиотеки, от которых зависит утилита, тоже надо качать. В результате вы поставите не один пакет, а несколько.

Большинство пользователей, работающих в Ubuntu, устанавливают программы при помощи утилиты apt-get . Действительно, этот способ очень хорош и очень прост. Но, многие оказываются в тупике, когда скачивают какой-нибудь файл в deb и не могут его установить.

"Зависимость" от apt-get - не очень хорошая привычка.

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

Пошаговая инструкция:

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

Для установки файла.deb, войдите в систему как суперпользователь root (или просто выполните команду sudo , набрав затем корректный пароль) и выполните в командной строке Ubuntu следующую команду: dpkg -i file.deb где file.deb, тот файл.deb, который вы хотите установить.

Возможно в работе вам пригодятся еще следующие возможности утилиты dpkg : dpkg --unpack file.deb - распаковка содержимого deb файла, без его установки в систему

dpkg --configure file.deb - изменение настроек устанавливаемого пакета

dpkg --remove file.deb - удаление файла file.deb из системы

Вообще, данный способ - самый распространенный при установке deb файлов . Не бойтесь использовать то, что удобно!

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

Установочные файлы на iPhone/iPad бывают двух типов - DEB и IPA. IPA - это файлы игр и разных программ из iTunes AppStore. Устанавливаются и качаются они в один клик, также такие файлы можно найти и скачать в Интернете.

Особенности установки DEB

DEB - пакеты установки твиков и программ, которые можно загрузить из Cydia. Если вы будете загружать DEB-файлы из Cydia, то вы их больше не увидите, эти файлы сразу удалятся после установки программы. А вот если вы скачали пакет DEB на просторах Интернета, то вам потребуется ручная установка. Как установить DEB на iPad или на iPhone? Далее будут описаны четыре варианта установки.

Первый способ

Как установить DEB на iPhone? Первый метод - это установка через терминал. Это один из самых сложных вариантов. На вашем телефоне должен быть установлен терминал - либо MobileTerminal из Сидии или, как вариант, настроенный доступ на iPhone с компьютера. Вам нужно скопировать файл.deb в телефон (/var/mobile). Далее в нем нужно ввести следующее (во время набора символы не будут появляться, ничего страшного): su root alpine dpkg -i название_файла.deb. После каждой написанной строчки нажимаем Enter. Если файл не установится, то терминал сообщит вам об этом.

Второй способ

Как установить DEB-пакет на iPhone или iPad? Метод второй - установить через Cydia (если присутствует доступ к файлам по usb). Вам нужно скопировать DEB-файл по следующему адресу: /var/root/media/Cydia/AutoInstall. Если некоторых папок нет, то создайте их вручную. Далее перезагрузите телефон. После запуска девайса Cydia установит все файлы автоматически.

Третий способ

Как установить DEB? Метод третий - через Cider (требуется Cydia на девайсе). Запустите на компьютере Cider (не забудьте предварительно подключить телефон к компьютеру), при первом запуске программа создает все требуемые папки и файлы. В папку Archives, копируете нужные DEB-файлы. Затем запускаете Cider для того, чтобы программа увидела файлы. На вкладке "Синхронизация" будут отображены наши DEB-пакеты, нужно выбрать, куда скопировать их, - в кэш Cydia или в папку AutoInstall. Кэш Cydia: после того как вы скопировали файл, вам нужно запустить Сидию и в поиске выбрать программу, которую вы хотите установить, далее запустить установку, и она сразу установится, не скачиваясь из Интернета. Папка AutoInstall: нужно скопировать файл, перезагрузить ваш iPhone или iPad, и программка во время перезагрузки установится автоматически.

Четвертый способ

Как устанавливать DEB-файлы? Метод четвертый - установка через программу iFile. Данная работа проводится на самом телефоне или планшете. Для начала вам нужно установить требуемую программу iFile на ваш девайс из Сидии. Следующим шагом будет загрузка DEB-файла на ваш телефон или планшет. Переместить файл можно любым известным и доступным вам методом. Перемещаете файл в любую папку. После копирования, открываете файл DEB и нажимаете кнопку Install. Дождитесь окончания установки программы.

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