Устанавливаются deb пакеты. Установка DEB пакета в Ubuntu

Apple Keynote 5.1 is a 2011 version of Keynote, which is a presentation software that is under the iWork suite. It is actually the 21st version released by Apple in July 20, 2011. This version has the basic features and functions but with new and improved tools, such as the Mac OS X Lion support, auto save capability, resume, full-screen view, and character picker. It also has improved compatibility with Microsoft Office from Windows computers. Another new tool included is the Anvil and Fall Apart. A newer version succeeded Keynote 5.1, which is now the Keynote 5.1.1, launched last December 1, 2011. Added feature on this version is the ability to address troubleshooting issues during a current use of the software on Mac OS X Lion. It also has improved accessibility and stability. Both the Keynote 5.1 and 5.1.1 have the functionality with Keynote Remote application to control or manage slideshowing using either the iPod Touch or iPhone.

Mireth Technology Music Man

Mireth Technology Music Man

Music Man is a digital music management tool for Mac OS X. It serves as MP3 Ripper that rips audio CD to MP3, WMA, AAC (M4A, M4B), MP2, WAV or to Ogg Vorbis; can rip the whole CD or just selected tracks; able to rip both MP3 and M4A in one operation. It converts well known digital music formats; converts from audio CD, unprotected AAC (m4a, m4b), MP2, MP3, WAV, unprotected WMA, etc. It plays Music such as in audio CD, MP2, MP3, WMA, Wav, AAC (M4A,M4B,M4P), Ogg Vorbis, Midi on Mac OS X; plays from your Mac, from CD, DVD, or flash drive. It can burn music to CD, DVD or USB Flash Drive Memory. A MIDI file is utilized by various programs and can be generated by MIDI development applications and is able to be synched or connected to computers that have compatible MIDI devices to produce audio data quickly and easily. A file with .kar extension is one example of a MIDI file incorporated with encoding specifications. KAR files contain reference data of various MIDI audio tracks such as song lyrics, album details, artist name, etc. In order to play MIDI files with linked KAR files, the Nullsoft Winamp Media Player 5.6 software can be utilized.

Paragon AIMMS

Paragon AIMMS is known as optimization modeling technology developed by Paragon, which enables users to make decisions faster and accurately as well as consistently no matter how complex decision making is. This is because this application is designed to model and solve problems related to large scale optimization and scheduling type by suggesting optimal solutions as well as comparing them. Leading companies use this software because it has user-friendly features that make it easy and straightforward to use in order that users can quickly acquire insights that may be very helpful for their business. AIMMS uses a combination of imperative and declarative programming styles. It also features control flow statements that are responsible for exchanging data, handling user interface event as well as constructing algorithms. This is most often used by various industries that deal with chemicals, oil, agriculture, steel, etc. because of its decision making support and improvement abilities. The model files that the AIMMS created are called AMB files.

DivX Descriptor 2

DivX Descriptor 2

DivX Descriptor 2 was developed by Daren-Softwares, and this is a program that opens files with the .DDCX extension. When the file extension .ex started to be heavily used by various applications, this became a common problem because many users opened files without knowing that it was a file in a format that was different from what they expected. The DivX Descriptor 2 file format was developed to help users open the correct files, by properly reading the file extension using the DivX Descriptor 2 software. Some file types that are read by this software include Text, Data, Audio, Video, 3D Image, Raster Image, Vector Image, Page Layout, Spreadsheet, Database, Executable, Game, CAD, GIS, Web, Plugin, Font, System, Settings, Encoded, Compressed, Disk Image, Developer, Backup and Misc among others. These have different file extensions, and this eventually resulted to a lot of users opening files that are not what they want. This version of DivX Descriptor 2 brings a much more flexible, new file format and ending the limitation of 500 characters in the name of the files. Обычно пакеты содержат болванки конфигурационных файлов, например, размещаемых в /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 об этом отлично рассказал хабраюзер

.deb — расширение имён файлов бинарных пакетов (бинарный-двоичный файл), предназначенные для распространения и установки программного обеспечения в ОС Debia n, и других, использующих систему управления пакетами dpkg , таких, например, как Ubuntu, Linux Mint .

Как правило в Ubuntu/Linux Mint все установочные .deb-пакеты приложений, загруженные пользователем, устанавливаются затем по умолчанию графическими программами, такими как Менеджер программ :


Либо GDebi :



Но в Менеджер программ не всегда можно установить бинарный пакет загруженный пользователем, потому что он не устанавливает необходимые зависимости для .deb-пакета .
А установка в GDebi не всегда срабатывает, несмотря на то, что GDebi подтягивает перед установкой пакета необходимые зависимости/библиотеки.

В этом случае .deb-пакет можно установить посредством терминала.

Давайте более подробно рассмотрим терминальный вариант установки .deb-пакета .
Это не сложно. Достаточно один раз повторить данную инструкцию, а затем вы будете выполнять установку .deb-пакетов в терминале "с закрытыми глазами".

Итак. Для примера я выбрал "безобидный" .deb-пакет для установки значков Suru , которые разрабатываются в настоящее время для Ubuntu 18.10 . А "безобидный" этот пакет потому, что даже если вы его установите в системы Ubuntu/Linux Mint и производные, то повредить он ни чему не может в системе.

1. Перейдите по следующей ссылке: https://ubuntu.pkgs.org/suru-icon-theme/all.deb.html и загрузите бинарный пакет, как показано на снимке:



2. Как правило, все загруженные файлы из интернета сохраняются в папке Загрузки файлового менеджера.


Теперь откройте терминал (Ctrl+Alt+T) и в терминале необходимо перейти в папку Загрузки .

Выполните в терминале команду ls , которая отобразит все папки в Домашнем каталоге :


Примечание . Команда ls (dir, vdir) — делает стандартный вывод содержимого каталогов.

Далее выполняем непосредственный переход в папку Загрузки . Для этого вводим в терминал команду cd (c hange d irectory - изменить директорию/папку), через пробел копипастим название папки, в которую хотим перейти и нажимаем клавишу Ввод :



3. После того как мы перешли в папку Загрузки , нам необходимо посмотреть её содержимое. Вновь введите и выполните (выполнить - нажать клавишу Ввод) команду ls .


Как видно на снимке, в терминале отобразился наш искомый .deb-файл с значками Suru .

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

Для установки загруженного .deb-файла , необходимо в этом же терминале ввести команду sudo dpkg -i , через пробел скопипастить название файла и нажать клавишу Ввод :


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


5. После нажатия клавиши Ввод , .deb-пакет будет установлен:


Примечание . Можно также устанавливать несколько пакетов за раз, передавая их все как аргументы команде sudo dpkg -i через пробел (sudo dpkg -i .deb-пакет1 .deb-пакет2 и так далее).

6. К сожалению, программа dpkg не умеет разрешать и скачивать необходимые зависимости из репозиториев. Если вы попали в такую ситуацию, когда терминал после выполнения команды sudo dpkg -i .deb-пакет сообщает о неудовлетворённых зависимостях, выполните в этом же терминале команду sudo apt install -f , которая используется для устранения сбоев в базе пакетов вызванных нарушенными зависимостями.

7. По окончании установки .deb-пакета с значками Suru , вы можете использовать их в своём дистрибутиве (Внешний вид/Тема - Значки).

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

Например, если вы пробуете установить пакет под названием webmin используя dpkg на свежую Ubuntu, dpkg потерпит неудачу или проблем с зависимостями.

$ sudo dpkg -i webmin_1.620_all.deb dpkg: dependency problems prevent configuration of webmin: webmin depends on libnet-ssleay-perl; however: Package libnet-ssleay-perl is not installed. webmin depends on libauthen-pam-perl; however: Package libauthen-pam-perl is not installed. webmin depends on apt-show-versions; however: Package apt-show-versions is not installed. dpkg: error processing webmin (--install): dependency problems - leaving unconfigured Processing triggers for ureadahead ... Errors were encountered while processing: webmin

Когда дело доходит до зависимостей.deb файлов, инструмент Linux под названием gdebi — это благословение. С gdebi вы можете установить.deb файлы с автоматическим решением неудовлетворённых зависимостей.

Утилита gdebi имеет два компонента gdebi для инструмента командной строки и gdebi-gtk с графическим интерфейсом. В зависимости от того, вы на настольном компьютере Linux или на «безголовом» сервере, вы можете установить только инструментом командной строки или полной графической версией.

Установка.deb файла с зависимостями на безголовый сервер

Для установки gdebi в консоли на Debian, Ubuntu или Linux Mint, проделайте следующее.

$ sudo apt-get install gdebi-core

Сейчас просто запустите gdebi с целевым.deb файлом для установки и обработки зависимостей. Любые обязательные пакеты будут установлены автоматически.

$ sudo gdebi webmin_1.620_all.deb

Установка.deb файла с зависимостями в среде рабочего стола

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

$ sudo apt-get install gdebi

Затем наберите эту команду для установки.deb файла.

$ sudo gdebi-gtk webmin_1.620_all.deb

Вы увидите графический интерфейс установщика пакетов, как показано на скриншоте ниже.

Если есть какие-либо зависимости, статус в окне покажет вам эти зависимости и вы сможете проверить их кликнув на «Детали» как показано ниже.

Наконец, просто нажмите «Установить пакет» для процесса установки.deb.