Сборка пакета для Debian (быстрый способ)

Сборка пакета для Debian (быстрый способ)Сборка пакета для Debian может быть необходима при разработке собственного программного обеспечения, либо при установке программного обеспечения, отсутствующего в репозиториях. В операционных системах на базе ядра Linux из исходных кодов не рекомендуется устанавливать программы при помощи команды «make install». Причины очевидны — если вы удалите Makefile, то уже не сможете удалить всё, что устанавливается при выполнении этой команды. Кроме того, обновлять установленное программное обеспечение таким образом тоже очень неудобно. Рекомендуемый способ установки программ — сборка пакета с последующей установкой этого пакета при помощи пакетного менеджера. Давайте посмотрим, как быстро создать свой собственный deb-пакет с программным обеспечением.

Написание программы

Напишем программу, которую будем устанавливать в систему. Пусть это будет простая программа, в общем, это не самая главная часть.

helloworld.c

#include <stdio.h>

void main(){
  printf("Hello, world!\n");
}

Теперь можно писать Makefile для компиляции и установки программы

Написанием Makefile’а

Теперь создадим Makefile для компиляции и установки нашей программы.

Makefile

build:
 gcc helloworld.c -o helloworld
 strip helloworld

clean:
 rm helloworld

install: build
 cp helloworld /usr/bin

uninstall:
 rm -f /usr/bin/helloworld

Здесь мы описываем 4 цели:

build Непосредственно компиляция программы из исходного кода и удаление отладочной информации
clean Удаление бинарного файла
install Установка программы
uninstall Деинсталляция программы

Для установки достаточно дать команду «make install», по зависимостям будет вызвана цель build, которая скомпилирует программу и удалит отладочную информацию. Если дать команду «make» без аргументов, будет вызвана цель «build».

Сборка пакета для Debian

Для сборки пакета воспользуемся программой checkinstall. Сначала ее нужно установить:

apt-get install checkinstall

После установки можно приступать к сборке пакета. Для сборки нам потребуются некоторые параметры, которые есть у этой программы.

—pkgname Название пакета
—pkgversion Версия пакета
—pkglicense Лицензия, под которой распространяется пакет
—pkggroup Группа, в которую входит пакет
—maintainer
—nodoc Не включать в пакет документацию. Вы можете включить документацию, если она у вас есть
—strip Удалить отладочную информацию для всех бинарных файлов в пакете. Эта опция нужна, если удаление отладочной информации не включается в Makefile

Создадим файл с описанием пакета с названием «description-pak», чтобы каждый раз не вводить руками описание при сборке. Внутри должно быть описание и пустая строка в конце:

Simple package that shows how to create debian package fast

Теперь создадим небольшой shell-скрипт, в который включим вызов checkinstall со всеми необходимыми параметрами

#!/bin/bash

sudo checkinstall \
--pkgname helloworld \
--pkgversion 1.0.0 \
--pkglicense GPLv2 \
--pkggroup utils \
--maintainer "Maxim Norin \<mnorin@mnorin.com\>" \
--nodoc \
--install \
-y

Теперь запускаем этот файл на выполнение. Вы должны увидеть такой результат:

$ ./makepkg.sh

checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran
         Эта программа распространяется на условиях GNU GPL



*****************************************
**** Debian package creation selected ***
*****************************************

Этот пакет был создан с использованием данных значений: 

0 -  Maintainer: [ Maxim Norin <mnorin@mnorin.com> ]
1 -  Summary: [ Simple package that shows how to create debian package fast ]
2 -  Name:    [ helloworld ]
3 -  Version: [ 1.0.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPLv2 ]
6 -  Group:   [ utils ]
7 -  Architecture: [ amd64 ]
8 -  Source location: [ make_package ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ helloworld ]
12 - Conflicts: [  ]
13 - Replaces: [  ]

Введите номер для изменения параметра или нажмите ВВОД для продолжения: 

Installing with make install...

========================= Результаты установки ===========================
gcc helloworld.c -o helloworld
strip helloworld
cp helloworld /usr/bin

======================== Установка успешно завершена ======================

Файлы копируются во временный каталог...OK

Stripping ELF binaries and libraries...OK

Сжимаются страницы руководства...OK

Построение списка файлов...OK

Собирается Debian-пакет...OK

Устанавливается Debian-пакет...OK

Удаляются временные файлы...OK

Записывается пакет с резервной копией...OK
OK

Удаляется временный каталог...OK


**********************************************************************

 Done. The new package has been installed and saved to

 /home/mnorin/Temp/make_package/helloworld_1.0.0-1_amd64.deb

 You can remove it from your system anytime using: 

      dpkg -r helloworld

**********************************************************************

В результат пакет собран и он находится в текущей директории. Кроме того, он установлен в системе. Это можно проверить так:

$ dpkg -l | grep helloworld
ii  helloworld    1.0.0-1    amd64     Simple package that shows how to create debian package fast

И осталось только проверить, работает ли сама программа:

$ helloworld
Hello, world!

Работает. Теперь пакет из текущей директории можно размещать на сервере, чтобы его могли скачивать другие.