В этой статье описывается простой способ создать домашний пакет Debian и включить его в локальный репозиторий пакетов.
Хотя мы могли бы использовать существующий пакет Debian / Ubuntu, мы начнем с нуля, создав и упаковав наше собственное тривиальное приложение.
Как только наш пакет будет готов, мы включим его в наш локальный репозиторий пакетов.
Эта статья иллюстрирует очень упрощенный подход, однако он может служить шаблоном во многих различных сценариях.
В этом уроке вы узнаете:
- Как создать простой пакет Debian
- Как создать локальный репозиторий Debian
- Как добавить репозиторий в список программных источников
Создание двоичного исполняемого файла
Первое, что нам нужно сделать, это создать простую программу на C ++, скомпилировать ее и протестировать.
Наша программа больше ничего не делает, просто печатает «itsecforu.ru» на экране.
Вот код:
#include <iostream>
int main() {
using namespace std;
cout << "itsecforu.ru\n";
}
Сохраните приведенный выше код как itsecforu.cc.
Для компиляции программы нам нужен компилятор g ++, который предоставляется пакетом build-essential.
Мы можем установить его, запустив:
$ sudo apt-get install build-essential
Для компиляции кода мы используем следующую команду linux:
$ g++ itsecforu.cc -o itsecforu
$ ./itsecforu
itsecforu.org
Все выглядит хорошо.
На этом этапе у нас должен быть исполняемый файл itsecforu, который выводит некоторую строку на экран.
Создание пакета Debian
Теперь, когда у нас есть небольшая программа, готовая в виде исполняемого двоичного файла, мы можем создать пакет debian.
Для этого мы используем инструмент dpkg-deb
Прежде всего, нам нужно создать структуру пакета debian.
Единственные файлы, необходимые для сборки пакета debian:
- DEBIAN/control
- пользовательские файлы, которые будут частью пакета (не обязательно)
Сначала создайте каталог с именем itsecforu.
Этот каталог будет содержать все необходимые файлы пакета:
$ mkdir itsecforu
Затем создайте каталог DEBIAN и управляющий файл:
$ mkdir itsecforu/DEBIAN
$ vi itsecforu/DEBIAN/control
Внутри файла control мы вводим следующую информацию:
Package: itsecforu.ru
Version: 1.0
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer:itsecforu.ru
Description: Вывод itsecforu.ru на экран
Отлично, единственное, чего не хватает, так это нашей программы itsecforu.
Внутри каталога itsecforu мы создаем дерево каталогов, которое представляет путь, по которому наша программа будет установлена в системе, и копируем в него исполняемый файл:
$ mkdir -p itsecforu/usr/bin/
$ cp /path/to/itsecforu itsecforu/usr/bin/
На данный момент мы готовы создать пакет:
$ dpkg-deb --build itsecforu
dpkg-deb: building package `itsecforu' in `itsecforu.deb'. $ ls itsecforu itsecforu.deb
Возможно, вы захотите изменить имя пакета, чтобы оно включало версию программы и архитектуру пакета. Например:
$ mv itsecforu.deb itsecforu-1.0_amd64.deb
Все сделано ! Наш пакет готов! (ПРИМЕЧАНИЕ: это всего лишь пример, создание официальных пакетов требует намного больше работы).
Настройка локального репозитория пакетов
В этом случае мы будем предполагать использование Apache с настройками по умолчанию.
Чтобы установить веб-сервер Apache, все, что нам нужно сделать, это запустить:
$ sudo apt-get install apache2
После установки, чтобы убедиться, что веб-сервер работает, мы можем перейти к IP-адресу машины (или к «http://localhost», если запущен браузер на самой машине), который в нашем случае является http://10.1.1.4. Мы должны увидеть знаменитое сообщение от Apache.
Программное обеспечение веб-сервера работает, но контент еще не добавлен.
DocumentRoot Apache VirtualHost по умолчанию – / var / www / html: здесь мы создадим наш репозиторий.
Давайте создадим каталог «debian» внутри /var/www/html и скопируем в него пакет linuxconfig-1.0_amd64.deb:
$ sudo mkdir /var/www/html/debian
$ sudo cp /path/to/linuxconfig-1.0_amd64.deb /var/www/html/debian/
Следующий шаг заключается в создании списка пакетов.
Мы переходим в каталог debian и используем утилиту dpkg-scanpackages для выполнения этой задачи.
Вам может потребоваться установить пакет dpkg-dev на случай, если команда dpkg-scanpackages отсутствует:
$ dpkg-scanpackages . | gzip -c9 > Packages.gz
dpkg-scanpackages: info: Wrote 1 entries to output Packages file.
Наш локальный репозиторий уже готов.
Добавление репозитория к программным источникам
На этом этапе, чтобы иметь возможность установить наш пакет из локального репозитория, который мы создали, нам нужно отредактировать файл /etc/apt/sources.list, добавить запись относительно него (измените IP-адрес, чтобы он соответствовал адресу вашего компьютера), и синхронизировать репозитории:
echo "deb [trusted=yes] http://10.1.1.4/debian ./" | tee -a /etc/apt/sources.list > /dev/null
Обязательно добавьте выше [trust = yes], чтобы избежать следующего сообщения об ошибке:
Release' does not have a Release file. N: Updating from such a repository can't be done securely, and is therefore disabled by default.
Синхронизируйте репозитории:
$ sudo apt-get update Ign:1 http://10.1.1.4/debian ./ InRelease Ign:2 http://10.1.1.4/debian ./ Release Ign:3 http://10.1.1.4/debian ./ Packages Ign:3 http://10.1.1.4/debian ./ Packages Ign:3 http://10.1.1.4/debian ./ Packages Get:3 http://10.1.1.4/debian ./ Packages [303 B]
Чтобы установить наш пакет, теперь мы можем использовать инструмент apt-get:
$ sudo apt-get install linuxconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
linuxconfig
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 3174 B of archives.
After this operation, 1,049 kB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
linuxconfig
Install these packages without verification [y/N]? y
Выполните:
$ itsecforu
itsecforu.ru
Чтобы удалить пакет из системы, просто запустите:
$ sudo apt-get remove linuxconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linuxconfig
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
After this operation, 1049 kB disk space will be freed.
Do you want to continue? [Y/n] y