Sorry, you have been blocked
This website is using a security service to protect itself from online attacks. The action you just performed triggered the security solution. There are several actions that could trigger this block including submitting a certain word or phrase, a SQL command or malformed data.
What can I do to resolve this?
You can email the site owner to let them know you were blocked. Please include what you were doing when this page came up and the Cloudflare Ray ID found at the bottom of this page.
Cloudflare Ray ID: 7a29175f3ed62313 • Your IP: Click to reveal 88.135.219.175 • Performance & security by Cloudflare
K210.ORG

Краеугольный камень пакетной системы Debian — это deb-пакет (см. deb(5)), представляющий из себя архив формата ar, внутри которого содержится три файла:
1. debian-binary — текстовый файл, содержащий версию формата deb-пакета, в данный момент это 2.0. Программы, работающие с deb-пакетами, должны читать только первую строку этого файла и не падать, если минорная версия вдруг поменяется (например, станет 2.1).
2. control.tar.gz — служебная информация о пакете, скрипты, вспомогательные файлы (см deb-control(5)). Должен содержать только файлы, единственная папка, которая может присутствовать — «.» (текущая директория). В этот архив обязательно должен входить файл control, его минимальное содержимое рассмотрим чуть ниже.
3. data.tar — собственно файлы, устанавливаемые в систему. Чаще всего этот файл сжат каким-нибудь архиватором (поддерживаются расширения .gz, .xz, .bz2, .lzma), чаще всего в архивах встречается data.tar.gz.
Указанный порядок следования файлов в архиве обязателен. Если в этом архиве требуется разместить еще какие-нибудь файлы (не представляю, зачем это может кому-нибудь понадобиться), они должны находиться перед data.tar.gz, т.е. последний файл в архиве всегда data.tar. Но если сообщество когда-нибудь решит добавить в формат deb еще файлы, они будут помещены после data.tar.
Файл control в архиве control.tar.gz описывает назначение, версию и зависимости пакета, его формат более-менее подробно описан в deb-control(5). Пересказывать всю справку сейчас не буду, опишу лишь минимальное содержимое, необходимое для взаимодействия с инфраструктурой dpkg:
Работа с пакетами средствами ar
Теоретически данной информации должно быть достаточно, чтобы собрать простейший пакет «на коленке» и установить его в систему. Пусть наш пакет (назовем его test) просто добавляет в систему файл /usr/share/example-content/test со строчкой «test». Сделаем архив data.tar.gz со структурой папок и единственным файлом, а также файлик debian-binary:
Создадим файл control со следующим содержанием:
Теперь соберем все воедино:
В текущем каталоге должен появиться файл test-1.0.deb . Его «физическое» содержимое можно просмотреть с помощью следующей команды:
Посмотреть файл debian-binary:
Посмотреть список файлов в пакете:
Посмотреть содержимое файла control:
Можно установить этот пакет и убедиться, что файл /usr/share/example-content/test успешно создан, но лучше этого не делать, поскольку из-за недостатка информации в control в пакетной системе может появиться мусор:
Работа с пакетами средствами dpkg-deb
Все вышеописанное позволяет управляться с deb-пакетами на самом низком уровне, не имея под рукой ничего, кроме стандартных средств Unix (доподлинно известно, что программа ar входила в состав первых Unix 1970х годов). Однако, как несложно догадаться, есть и более высокоуровневые способы создания пакетов и изучения их содержимого. В частности, если уж так необходимо поковыряться с пакетом на низком уровне, все вышеописанные действия настоятельно рекомендуется выполнять с помощью утилиты dpkg-deb(1).
Создание пакета средствами dpkg-deb
Минимальный формат вызова команды dpkg-deb для построения пакета следующий:
Все, что находится в исходной папке, кроме директории DEBIAN, помещается в data.tar.gz. Содержимое DEBIAN будет использовано для создания control.tar.gz, в частности, будет прочитан и проанализирован файл control и в случае каких-либо ошибок (отсутствует одно из необходимых полей или эти поля имеют неправильные значения) пакет просто не будет создан. Процесс создания нашего тестового пакета с нуля теперь выглядит так (в последней команде предполагается, что в текущей папке остался файл control от сборки пакета средствами ar):
Попытаемся собрать пакет:
Несмотря на отсутствие важного, но не необходимого поля Architecture, был создан пакет test-1.1.deb. Добавим поле и пересоздадим пакет:
Еще одна немаловажная деталь. Как правило, в названии файла пакета указывается его архитектура, а команда dpkg-deb -b назвала файл по имени папки, из которой он был создан. Если бы папка называлась ololo, то мы получили бы ololo.deb. Чтобы файл пакета автоматически именовался в формате имя-версия-архитектура, при вызове dpkg -b необходимо указывать папку, куда будет положен итоговый архив, например, текущую. Тогда все компоненты имени файла будут извлечены из control:
Теперь всё относительно нормально, продолжаем изучение возможностей dpkg-deb на примере нового пакета.
Получение информации о пакете
Узнать версию формата deb, размер пакета и содержимое файла control:
Список файлов, устанавливаемых в систему (кроме служебных):
Обратите внимание на владельца устанавливаемых файлов и каталогов: это не root, а некий пользователь. Чтобы исправить эту проблему, можно собирать пакеты из-под root’а, либо воспользоваться специальной утилитой fakeroot из одноименного пакета. Она перехватывает системные вызовы chmod(2) и stat(2) для файлов, и возвращает значения, как если бы файл принадлежал пользователю root. Небольшой пример:
Думаю, принцип понятен. Пересоберем пакет еще более правильно:
Теперь наконец ок.
Можно получаить информацию о пакете в заданном формате:
Список полей, которые можно указать в –showformat, можно узнать из вывода команды dpkg-deb -I
Подать на STDOUT архив data.tar.gz из пакета (уже «разжатый»), может быть полезно для извлечения только некоторых файлов:
Перепаковка пакета
Пожалуй, теперь наступил момент применить свежеполученные знания на практике 🙂 Часто возникает следующая проблема: из некоего источника поступил пакет с некорректными зависимостями, например, требуется устаревший пакет, отсутствующий в системе и всех репозиториях, но доподлинно известно, что другой, уже установленный пакет предоставляет нужную функциональность. В скачанном пакете требуется изменить файл control, убрав или исправив зависимость. Правильно было бы скачать и распаковать исходник пакета (apt-get source), произвести необходимые изменения в скриптах сборки, установить все необходимые для пересборки библиотеки и окружение и т.д. и т.п., но для частного использования (т.е. без распространения по репозиториям) достаточно просто распаковать пакет, изменить необходимые файлы и запаковать обратно. Проиллюстрирую последовательность действий на примере невинного пакета hello:
Пакет собран. Убедиться, в том, что в нем нет ошибок из-за немного нетрадиционного способа сборки, можно с помощью программы lintian:
Об установке пакетов в систему, механизме зависимостей, структуре репозиториев и еще более правильных способах сборки пакетов читайте в следующих статьях 🙂
Сборка пакетов deb пакетов
Deb-пакет это обычный архив файлов, содержащий файлы, предназначенные для установки в систему, а так же некоторые служебные файлы, необходимые для того чтобы эту установку сделать гибкой.
Поскольку содержимое пакета может в будущем измениться (будет новый номер версии в debian-binary), то собирать deb-пакет при помощи программ tar, gzip, ar не рекомендуется и этот вариант в статье рассматриваться не будет.
Собирается пакет программой dpkg из специально подготовленной структуры каталогов:
Создание пакета Geany (A fast and lightweight IDE)
Geany IDE — A fast and lightweight IDE
configure
Команда configure запущенная с ключем –help выводит список параметров, которые можно передать ей.
Просматриваем вывод команды, если в конце строки "no" это означает, что в системе нет необходимых для компиляции данной программы вспомогательных программ и библиотек. Вывод малоинформативен -нет явного соответствия между ошибкой и пакетом который требуется до установить. Зная, что в Ubuntu часто пакеты с библиотеками бывают разбиты на два типа:
Устанавливаем требуемые пакеты.
Проверяем. Снова запускаем ./configure.
Ошибка. Требует пакет gtk+-2.0. Как показали поиски на английских форумах — пакет все же называется libgtk2.0-dev. Ставим. Как показывает вывод ниже — лучше найти УЖЕ скомпилированный DEB пакет — благо на это есть реальные шансы.
Проверяем. Снова запускаем ./configure. И видим ниже счастье:) Команда выполнилась успешно.
Компилируем в бинарные файлы
Установка пакета (2 способа)
Так как сборку пакета производим под Хостинг VPS/VDS на Ubuntu -нас интересуют ключи:
Полная последовательность команд:
Пакет geany_0.17-1_i386.deb собран и готов к установке.
Создание пакета Eric Python IDE
Создаем пакет Eric IDE с поддержкой русского языка. Скачиваем и распаковываем исходники и русификацию. Перед компиляцией установим необходимые для запуска Eric пакеты.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Create packages for Linux distros with extremely simple way. This software is supposed to be used to distribute the small CLI application which has only one executable file. If the application includes multiple libraries, executable commands, you should use another way.
This software is distributed as docker container. Pull following docker containers.
(1). Prepare yaml file
.tar2package.yml
(2). Create tar file
Following files should be placed on the current directory. lib and man directories are optional.
(3). Convert it to package files (deb/rpm)
- With yum
- With dpkg
You can additionally specify following parameters.
Path of library directory. Commonly the path is /usr/lib but /usr/lib64/ is used instead in some Linux distros with x86_64 environment. With this option, library directory is unified to specified path.