Как собрать deb пакет

Deb пакет Nginx — сборка из исходников

Как собрать deb пакет

Статья описывает сборку deb пакета Nginx из исходных кодов. Я буду собирать сервер с дополнительными модулями: GeoIP, PageSpeed и ModSecurity. Кроме того, в сборку будут входить библиотеки OpenSSL версии 1.1.0g, для поддержки алгоритмов шифрования CHACHA20 и Poly1305. В качестве операционной системы используется Ubuntu Server 16.04.

Собственные deb пакеты имеют множество плюсов по сравнению со стандартными пакетами и программами установленными из исходников. Собственные пакеты можно собрать с нужными опциями, после чего установить как обычный пакет. Но в отличии от make install, deb пакеты устанавливаются пакетным менеджером и им же удаляются, не оставляя после себя мусора в системе.

Пакеты можно пересобирать, обновлять версии исходников, добавлять нужные опции и т.д. В состав deb пакета могут входить не только стандартные файлы программы, но и любые другие. Например, конфигурационные файлы из каталога /etc/nginx, таким образом после установки пакета можно получить уже настроенный сервер.

Хочу заметить что статья является напоминанием для себя и приводится в качестве примера для сборки пакета. Поэтому я не буду подробно описывать настройку модулей и прочих моментов, я рассказываю только про то, как собрать deb пакет. Собирать пакеты лучше всего на виртуальной машине, а готовый и протестированный пакет устанавливать на рабочую машину.

Необходимый софт

Для удобства я разделил весь необходимый софт на группы и расписал что для чего нужно.

Для сборки deb пакетов.

apt-get install dh-make quilt lsb-release debhelper dpkg-dev dh-systemd -y

Для сборки из исходников.

apt-get install build-essential autoconf automake pkg-config libtool -y

Для сборки самого Nginx.

apt-get install libpcre++-dev libssl-dev -y

Для сборки модуля ModSecurity.

apt-get install apache2-dev libxml2-dev libcurl4-gnutls-dev -y

Для сборки Nginx с GeoIP-модулем.

apt-get install libgeoip-dev -y

Каталоги, исходники, файлы deb пакета

Для сборки deb пакета необходимо создать каталог в котором будут находиться исходники и выполняться дальнейшая работа по сборке пакета. Я создаю каталог nginx в /root, все дальнейшие действия будут описаны относительно этого размещения.

Создаем каталог и переходим в него.

mkdir ~/nginx && cd ~/nginx

Теперь нужно скачать исходники последней версии Nginx, на момент написания статьи таковой является 1.13.9.

wget http://nginx.org/download/nginx-1.13.9.tar.gz

Распакуем архив с исходниками.

tar -zxvf nginx-1.13.9.tar.gz

Если продолжать делать по фэн-шую, точнее по руководству начинающего разработчика Debian, то на этом этапе нужно перейти в каталог с исходниками сервера и с помощью dh_make создать начальный пакет. В каталоге с исходниками появится каталог debian, внутри которого будут файлы заготовки файлов, которые нужно править писать с нуля под свои нужды.

Можно поступить проще и скачать готовый архив из репозиториев Nginx. Поскольку я буду собирать пакет со своей конфигурацией сервера, то править файлы все равно придется, но не в таких объемах как если бы писать их с нуля.

Переходим в каталог с исходниками Nginx.

cd nginx-1.13.9

Идем в репозиторий Nginx и ищем подходящий архив (версия сервера + версия системы) — nginx_1.13.9-1~xenial.debian.tar.xz, название архива заканчивается на debian.tar.xz.

wget http://nginx.org/packages/mainline/ubuntu/pool/nginx/n/nginx/nginx_1.13.9-1~xenial.debian.tar.xz

Распакуем архив и удалим его.

tar -xpvJf nginx_1.13.9-1~xenial.debian.tar.xz && rm nginx_1.13.9-1~xenial.debian.tar.xz

В итоге мы получим каталог debian с нужными для сборки deb пакета файлами. Каталог debian обязательно должен находиться внутри каталога с исходниками.

Копирование конфигурационных файлов Nginx

Поскольку после установки я хочу получить уже настроенный сервер, то я добавляю свои конфигурационные файлы, которые при установке пакета распакуются на свои места.

Перейдем в каталог с исходниками Nginx.

cd ~/nginx/nginx-1.13.9

Файлы нужно разместить также, как они размещены в системе. Представим что каталог в котором мы сейчас находимся это корень диска. Например, если nginx.conf располагается в /etc/nginx/nginx.conf, то и здесь он должен располагаться также.

Я создаю каталог etc.

mkdir etc

В etc я копирую каталог nginx со всем его содержимым.

cp -r /etc/nginx ~/nginx/nginx-1.13.9/etc

Позже, при редактировании файла nginx.install, я включу скопированные файлы в состав deb пакета Nginx.

Подготовка модулей Nginx

В рамках данной статьи я не буду подробно описывать установку и настройку каждого модуля, а только опишу порядок действий. Тем более что у меня и так уже все настроено. Подробнее о настройке модулей можно прочитать пройдя по ссылкам приведенным в начале статьи.

Перейдем в каталог с исходниками Nginx.

cd ~/nginx/nginx-1.13.9

Создадим каталог modules внутри каталога debian. В этом каталоге будут находиться исходники модулей и библиотеки OpenSSL.

mkdir debian/modules

Перейдем в каталог modules.

cd debian/modules

OpenSSL

Скачиваем последнюю версию OpenSSL.

wget https://www.openssl.org/source/latest.tar.gz -O openssl-1.1.0.tar.gz

Распаковываем архив и удаляем его.

tar -zxvf openssl-1.1.0.tar.gz && rm -r openssl-1.1.0.tar.gz

ModSecurity

Клонируем исходники ModSecurity с GitHub.

git clone https://github.com/SpiderLabs/ModSecurity.git modsecurity

Переходим в каталог modsecurity.

cd modsecurity

Запускаем скрипт ./autogen.sh.

./autogen.sh

Собираем ModSecurity как отдельный модуль.

./configure —enable-standalone-module

Компилируем.

make

PageSpeed

Возвращаемся в каталог modules.

cd ~/nginx/nginx-1.13.9/debian/modules

Скачиваем архив с PageSpeed.

Источник: https://techlist.top/nginx-deb-package-from-source/

Как собрать .deb пакет

Как собрать deb пакет

В любом дистрибутиве GNU/Linux, имеющем на борту пакетный менеджер, приветствуется установка программного обеспечения строго из пакетов.

В какой-то момент может возникнуть ситуация, что проще собрать пакет, чем компилировать и устанавливать классическим методом «.

/configure && make && sudo make install», например, если некоторая программа необходима нескольким коллегам, среди которых не каждый в состоянии понять почему сборка из сорцов не удалась.

Если Вы намереваетесь создавать пакеты, которые могу/будут входить в официальный репозиторий Debian, то для начала стоит ознакомится со следующими материалами:

Но, если Вам просто нужно понять, как собрать .deb пакет, здесь и сейчас, то добро пожаловать под кат.

GPG ключ

Первое, что необходимо, это сгенерировать gpg ключ, если его еще нет, так как пакет, при создании, будет подписан этим ключом:

Важно помнить, что на дальнейших этапах необходимо будет использовать те же самые имя и email, что использовались при создании ключа.

Для того, что бы использовать данный ключ для подписи делаем следующее:

gpg -a —output ~/.gnupg/YOUR_NAME.gpg —export 'YOUR NAME'

После чего:

gpg —import ~/.gnupg/YOUR_NAME.gpg

Все, ключ готов.

Подготовка окружения

Установим необходимые для сборки пакеты:

sudo apt-get install build-essential autoconf automake \autotools-dev dh-make debhelper devscripts fakeroot \

xutils lintian pbuilder

Получение и подготовка исходников

Разархивируем исходники и переименуем директорию в формат имя-версия, важно, что бы название директории было в нижнем регистре. После этого, на одном уровне с этой директорией необходимо разместить архив с исходниками, например, в формате tar.gz (можно просто создать архив с директорией, которую только что создали).

Пример:

mkdir -p ~/build/memcached/1.4.17
cd ~/build/memcached/1.4.17
wget -c http://www.memcached.org/files/memcached-1.4.17.tar.gz
tar -xzf memcached-1.4.17

Подготовка к сборке

Первое что мы сделаем — подготовим структуру и информацию о нашем пакете.

cd ~/build/memcached/1.4.17/memcached-1.4.17
dh_make -e youremail@address -f ../memcached-1.4.17.tar.gz

Не забываем, что необходимо использовать тот же email, что использовался при генерации ключа. После выполнения данной команды в терминале появится следующее приглашение:

Type of package: single binary, indep binary, multiple binary,  library, kernel module, kernel patch?

[s/i/m/l/k/n/b]

Выберем пока самый простой вариант — s

В нашей директории появилась новая поддиректория — debian, которая содержит файлы, необходимые для дальнейшей сборки. Теперь отредактируем информацию о нашем пакете.

Файл «control»

Source: memcachedSection: unknownPriority: optional

Maintainer: YOUR NAME

Build-Depends: debhelper (>= 8.0.0), autotools-devStandards-Version: 3.9.4

Homepage:

Package: memcachedArchitecture: any

Depends: ${shlibs:Depends}, ${misc:Depends}

Description:
 

Добавим зависимости и описание пакета

# Смотрим зависимости
dpkg-depcheck -d ./configure

В терминале видем следующее:

Packages needed:  mime-support  libsigsegv2:amd64  gawk

  libevent-dev

Теперь изменим файл debian/control, учитывая эти зависимости и добавим необходимую информацию:

Source: memcachedSection: webPriority: optional

Maintainer: YOUR NAME

Build-Depends: debhelper (>= 8.0.0), autotools-dev,
 mime-support, libsigsegv2, gawk, libevent-devStandards-Version: 3.9.4

Homepage: http://memcached.org/

Package: memcachedArchitecture: any

Depends: ${shlibs:Depends}, ${misc:Depends}

Description: High-performance, distributed memory object caching system

  Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects)

from results of database calls, API calls, or page rendering.

Тут размещаем правовую информацию, в частности, можно разместить текст лицензии, под которой распространяется исходный код программы.

Файл «changelog»

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

Сборка

dpkg-buildpackage -rfakeroot

Если не было допущено ошибок на предыдущих этапах, то в процессе сборки будет получено приглашение ввести пароль от gpg-ключа, после ввода которого в директории на уровень выше появятся файлы:

  • memcached_1.4.17-1_amd64.changes
  • memcached_1.4.17-1_amd64.deb
  • memcached_1.4.17-1.dsc
  • memcached_1.4.17-1.debian.tar.xz
  • memcached_1.4.17.orig.tar.gz

Как видите, сборка производилась на платформе x86_64. Нужна другая платформа — не проблема.

Сборка под другую платформу

Для сборки, например, под платформу i386 нам понадобится pbuilder — система автоматической сборки, работающая в chroot.

sudo pbuilder —create —architecture i386
sudo pbuilder —update
sudo pbuilder —build ../memcached_1.4.17-1.dsc

Готовый пакет можно будет забрать из директории /var/cache/pbuilder/result

Пересборка пакета

Если в дальнейшем необходимо будет изменить сожержимое пакета, то после внесения изменений необходимо выполнить:

dpkg-buildpackage -rfakeroot -b

Источник: http://gwinn.ru/kak-sobrat-deb-paket/

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

Как собрать deb пакет

Сборка пакета для Debian может быть необходима при разработке собственного программного обеспечения, либо при установке программного обеспечения, отсутствующего в репозиториях. В операционных системах на базе ядра Linux из исходных кодов не рекомендуется устанавливать программы при помощи команды «make install».

Причины очевидны — если вы удалите Makefile, то уже не сможете удалить всё, что устанавливается при выполнении этой команды. Кроме того, обновлять установленное программное обеспечение таким образом тоже очень неудобно. Рекомендуемый способ установки программ — сборка пакета с последующей установкой этого пакета при помощи пакетного менеджера.

Давайте посмотрим, как быстро создать свой собственный deb-пакет с программным обеспечением.

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

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

helloworld.c

#include void main(){ printf(«Hello, world!»); }

Теперь можно писать 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 \» \ —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 ] 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!

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

Источник: https://mnorin.com/sborka-paketa-dlya-debian-by-stry-j-sposob.html

4gophers

Как собрать deb пакет

Go прекрасный язык. Одна из его супер-сил — это возможность собирать все в один бинарник. А это очень удобно, вы можете везде таскать этот файл и использовать на любой машине. Но хочется иметь возможность устанавливать нашу программу простым способом.

С помощью deb пакетов довольно просто можно организовать деплой на ваши сервера. При этом у вас будет версионирование и все такое. Я чаще всего использую ubuntu, поэтому речь будет именно о deb пакетах, которые можно установить/удалить с помощью утилит apt.

Что же нужно сделать, для создания своего репозитория с пакетами? Можно воспользоваться тем же launchpad.net, например. Но, последнее время, он не очень развивается и выглядит ненадежно. К тому же, его удобно использовать для своих не коммерческих разработок, но использовать его для дистрибуции корпоративного ПО будет проблематично.

Подойдем к проблеме с другой стороны. Во первых, нам нужно собирать deb пакеты, а это очень просто сделать самим с помощью утилиты dpkg-deb. Во-вторых, нам нужно где-то эти пакеты размещать, и для этого мы воспользуемся супер простым сервером apt репозиториев deb-simple

Сборка пакетов

Для всех своих проектов я использую gb. Структура проекта выглядит примерно так:

project/ |- bin/ | |- project |- src/ | |- github.com/ | |- 4gophers/ | |- project/ | |- main.go |- vendor/

Когда я запускаю gb build, то все бинарники собираются в папке bin. Таким образом, все что нам нужно — это просто добавить спецификацию нашего будущего deb пакета прям в папку с проектом:

mkdir project/DEBIANtouch project/DEBIAN/control

В результате будет такая структура:

project/ |- DEBIAN/ | |- control |- bin/ | |- project |- src/ |- vendor/

В файле control нужно указать информацию о нашем пакете. Не забывайте про пустую последнюю строку:

Package: projectPriority: optionalSection: develInstalled-Size: 100Maintainer: Ivan Ivanov Architecture: i386Version: 1.0Depends: libc6 (>= 2.1)Description: Short description here Long description here

  • Package — имя вашего пакета
  • Priority — приоритет пакета (optional, extra, standard, important, required) для обычных программ лучше ставить optional
  • Section — раздел к которому относится данный пакет (admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome, graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-free, oldlibs, otherosfs, perl, python, science, shells, sound, tex, text, utils, web, x11)
  • Installed-Size — размер файлов пакета в килобайтах
  • Maintainer — имя и email создателя пакета
  • Architecture — архитектура процессора, для которой предназначен пакет (i386, amd64, all, source, all)
  • Version — версия пакета
  • Depends — в данном поле необходимо указать имена пакетов, от которых зависит ваш пакет (например, библиотеки)
  • Description — в первой строке пишем короткое описание пакета, в остальных более подробно

Все что находится в папке project попадет в пакет. И папка bin тоже. В этой папке лежит наш бинарный файл, который нужно установить. Чтобы ваши файлы оказались в нужной директории на компьютере пользователя, нужно создать соответствующую структуру каталогов внутри вашей папки с проектом.

Стоит отметить, что такой подход к созданию deb пакетов не самый правильный.

Конечно, в нашем случае мы осознанно идем на этот шаг, но вам нужно понимать, что в deb пакет попадет все содержимое папки project, в том числе папки src, vendor и так далее.

Конечно, можно скопировать файлы в другую папку, и даже написать скрипт для этого, но все уже придумано до нас. Более правильный способ — это использовать утилиты dh_make и dpkg-buildpackage.

Теперь можно собирать пакет. Для этого на уровень выше выполним команду:

dpkg-deb -z8 -Zgzip —build project

На уровень выше будет создан файл project.deb, который можно устанавливать с помощью команды:

sudo dpkg -i project.deb

Больше информации о правильной сборке deb пакетов можно узнать в официальной документации.

Свой репозиторий пакетов

Теперь переходим к самому интересному. Как же нам распространять наши пакеты? Запустим свой сервер репозиториев, конечно же. А для этого воспользуемся сервером apt репозиториев deb-simple.

Это действительно простой сервер, который устанавливается всего одной командой:

go get github.com/esell/deb-simple

Если go не установлен на той машине, где вы собираетесь запустить сервер с репозиториями, то вы можете собрать бинарник локально и просто скопировать его. Кроме этого, можно использовать docker.

Затем нужно запустить сервер. Это можно сделать с помощью docker, но мне больше нравится использовать supervisord. Вот пример моей конфигурации сервиса:

[program:deb-simple]command=/home/user/go1.5/bin/deb-simpledirectory=/home/user/deb-simple/autorestart=truestdout_logfile=none

Тут важно указать путь к бинарнику(command) и рабочую папку(directory), в которой мы разместим наш конфиг.

Сервер deb-simple поддерживает https, но пока нам это не нужно. Для репозиториев нужно создать папку repo. Наш конфиг conf.json будет выглядит так:

{ «listenPort» : «9090», «rootRepoPath» : «/home/user/deb-simple/repo», «supportedArch» : [«all»,»i386″,»amd64″], «enableSSL» : false, «SSLcert» : «server.crt», «SSLkey» : «server.key»}

Чтобы загрузить пакет в свой репозиторий, нужно воспользоваться HTTP API самого сервиса:

curl -XPOST 'http://localhost:9090/upload?arch=amd64' -F «file=@project.deb»

Точно так же для удаления:

curl -XDELETE 'http://localhost:9090/delete' -d '{«filename»:»project.deb»,»arch»:»amd64″}'

Нам осталось добавить наш сервер репозиториев к списку в /etc/apt/source.list.d/. Можно создать отдельный файл с содержимым:

deb http://my-hostname:9090/ stable main

Теперь запускайте sudo apt-get update и устанавливайте свои программы сколько душе угодно.

15 февраль 2016

Источник: https://4gophers.ru/articles/gotovim-deb-iz-nashih-binarnikov/

Создайте свои собственные пакеты DEB и RPM

Как собрать deb пакет

Библиотека сайта rus-linux.net

Оригинал: Make your own DEB and RPM packages Michael Reed 4 января 2014 г. Перевод: Н.Ромоданов

Дата перевода: июнь 2014 г.

Мы расскажем вам, как создавать два наиболее распространенных типа пакетов Linux для распространения программного обеспечения, и вы сможете сами распространять свои собственные пакеты.

Мы собираемся провести вас через процесс создания пакетов программ для двух самых популярных систем пакетов DEB и RPM. Вы можете использовать эти методы, чтобы создавать пакеты вашего собственного программного обеспечение или даже сопровождать пакеты для того программного обеспечения, которое, как вы считаете, остается незамеченным.

Мы начнем с руководство по созданию файлов DEB ((.deb) для дистрибутивов, производных от Debian — для этого мы качестве нашей базы используем Xubuntu.

После этого мы подробно опишем методы, необходимые для создания пакетов RPM для использования в дистрибутивах, производных от Red Hat, и для этого мы будем использовать Fedora.

Часто можно создать пакет на одном дистрибутиве, а затем установить его на родственном дистрибутиве (например, Ubuntu>Debian), но если это важно, то вам, может быть, стоит попробовать это самостоятельно.

Что касается программы, мы собираемся в качестве примера пакета, собираемого из исходного кода, использовать легковесный веб-браузер Dillo.

Когда сборка выполняется из исходных текстов, в случае, если сборка не идет так, как надо, вы можете, как и обычно, поискать решения в сети интернете. Например, в случае Dillo 3.0.

3, нам из-за недосмотра в архиве исходного кода пришлось для того, чтобы команды работали, перед командами сборки добавить 'LIBS =-lX11' .

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

Ресурсы

Инсталляция (или виртуальная машина) Ubuntu и Fedora

Пошаговое описание

Шаг 01: Использование виртуальной машины

Использование средств виртуализации, таких как VirtualBox или Vmware, часто является лучшим подходом к созданию пакетов для других систем. С одной стороны, этот подход позволяет поддерживать сравнительно чистую базовую инсталляцию, сравнимой с настройками, с которыми вероятно, будут работать другие.

Это также означает, что вы, используя различные дистрибутивы, можете получить коллекцию целевых систем.

Кроме того, большинство средств виртуализации позволяют эмулировать различные архитектуры, и, следовательно, на 32-разрядной платформе можно запускать 64-разрядные ОС, хотя будет страдать производительность.

Шаг 02: Начинаем с нуля

Если в Ubuntu или Fedora что-то идет не так, то можно совершенно безопасно просто удалить исходный каталог и начать все заново. Обратите внимание, что инструментальные средства Debian изменяют исходный архив, так что вам придется начать с новой копии.

Часть 1: Debian

Шаг 03: Установите среду сборки

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

$ sudo apt-get install build-essential autoconf automake autotools-dev

Теперь мы должны установить инструменты, которые используются для работы с пакетами DEB. Сделайте это с помощью следующей команды …

$ sudo apt-get install dh-make debhelper devscripts fakeroot xutils lintian pbuilder

Шаг 04: Создайте ключ GPG

Если вы еще в прошлом не создали открытый ключ GPG, его необходимо создать прямо сейчас для того, чтобы можно было подписать пакеты. Вначале вводите текст gpg –gen-key.

Выберите значения, устанавливаемые по умолчанию, и при запросе введите свое настоящее имя и контактные данные. Аккуратно запишите все данные, поскольку позднее нам в конфигурационном файле потребуется их точное соответствие. После этого наберите команду ls ~/.

gnupg для того, чтобы убедиться, что новый ключ существует (это файл имя_фамилия.gpg). Из него создайте открытый ключ:

gpg -a —output ~/.gnupg/[your key].gpg —export '[ваше имя]'

Импортируйте его с помощью:

gpg —import ~/.gnupg/[your key].gpg

Шаг 05: Скачайте пакет

В этом примере мы собираемся скачать и собрать самую последнюю версию веб-браузера Dillo. Перейдите на сайт Dillo (www.dillo.org) и загрузить самый свежий архив .tar.bz. С помощью команды mkdir ~/srcand создайте каталог для исходного кода и переместите в него архив.

Шаг 06: Распакуйте архив

Распакуйте архив с помощью команды tar -xjvf [имя архива].tar.bz2. Обратите внимание, что соблюдение договоренностей об именовании каталога (имяпакета-версия) является важным для наших целей, и, к счастью, пакет Dillo соответствует им. Также важно, чтобы архив с исходным кодом находится на один уровень выше каталога с исходным кодом.

Шаг 07: Настраиваем под Debian

Переместите в только что распакованный каталог скрипт dh_make, который позаботится о большей части работы — добавит конфигурационный файл и создаст структуру каталогов, и который входит в состав интруменртария разработчика, который мы добавили ранее.

dh_make -e [your email address] -c licence -f ../

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

dh_make -c gpl3 -e example@example.com -f ../dillo-3.0.3.tar.bz2

При появлении запроса выберите один двоичный файл. Скрипт-помощник скрипт должен в каталоге с исходным кодом создать каталог с именем Debian.

Шаг 08: Откройте управляющий файл

Откройте в текстовом редакторе управляющий файл в подкаталоге Debian. Заполните раздел «Домашняя страница» (используйте Google для заполнения списка разделов программ Debian) и поля описания этого файла.

Шаг 09: Изучите имеющиеся зависимости

Вы можете изучить, какие зависимости необходимы для запуска программы, поставляемой в виде пакета. Перейдите в каталог с исходными кодами и наберите в терминале команду dpkg-depcheck -d ./configure. Если так сделать, то будут выданы ошибки, указывающие какой отсутствует пакет, необходимый для сборки программы (поставляемой отдельно).

Вы можете открыть этот пакет, набрав sudo apt-get build-dep [имя пакета], и это должно помочь, если в репозитарии дистрибутива этот пакет поддерживается. Если он не поддерживается, то вам придется неоднократно запустить команду dpkg-depcheck -d ./configur и добавлять пакеты вручную, набирая команду рsudo apt-get install [имя пакета].

Шаг 10: Добавьте зависимости в управляющий файл

Когда все действия из предыдущего шага будут завершены, у вас должен быть список всех необходимых пакетов. Добавьте этот список зависимостей в раздел depends: управляющего файла. Элемент в списке должны быть разделены запятой и пробелом.

Шаг 11: Отредактируйте файл авторских прав

Попробуйте выполнить этот шаг настолько полно, насколько вы сможете, и не пропускайте его. Source: — это обычно главная страница проекта. В разделе Files: * замените информацию об авторских правах именами авторов проекта.

Пример заполнения вы можете увидеть в разделе Files: debian/*, в который должна быть занесена соответствующая информация. Возможно, вам придется немного побыть детективом, чтобы найти необходимую вам информацию.

Ищите в каталоге с исходными кодами файлы, такие как AUTHORS и COPYING.

Шаг 12: Отредактируйте файл журнала изменений

Откройте файл журнала изменений и убедитесь, что имя и адрес электронной почты совпадают с теми, которые вы ввели при создании ключа GPG. Обычно скрипт-помощник может добавить в файл имя пользователя, а не ваше настоящее имя. Как с файлом авторских прав, не пропускайте этот раздел, поскольку из-за этого процесс создания пакета может остановиться или может быть создан неправильный пакет.

Шаг 13: Создайте пакет

Если все настроено правильно, мы можем, наконец, собрать пакет DEB. Перейдите в каталог с исходным кодом и для того, чтобы собрать пакет, , который будет помещен в каталог ~/src/, наберите команду dpkg-buildpackage -b. Например, создайте пакет с помощью команды dpkg -I [пакет].

Для того, чтобы проверить на соответствие политики Debian, с помощью команды lintian [пакет] запустите программу Lintian. Обратите внимание, что этот инструмент, как известно, строгий, и ваше дело решать, допустимы ли для вас некоторые незначительные предупреждения о несоблюдения.

Наконец, установите пакт с помощью команды sudo dpgk -i [пакет].

Часть 2: Создание пакетов RPM в Fedora

Шаг 14: Откройте управляющий файл

Перейдите в режим пользователя root, набрав для этого su.

Начните с инсталляционной группы Development Tools (Инструменты разработки) в yum, а затем с помощью yum установите упаковщик gcc-c++ fedora-.

Наберите команду usermod -a -G mock для того, чтобы добавить вашего пользователя в группу mock. Это позволяет нам выполнять процедуру сборки без необходимости перехода в роль пользователя root.

Шаг 15: Создайте среду сборки

Нажмите Ctrl + D для того, чтобы выйти из роли root. Введите rpmdev-setuptree для того, чтобы создать дерево каталогов (под ~/rpmbuild), которое нам необходимо.

Шаг 16: Скачайте архив и переместите его в нужное место

Скачайте пакет Dillo с вебсайта Dillo и переместите архив в соответствующий каталог — наберите команду mv [имя архива] ~/rpmbuild/SOURCES.

Шаг 17: Создайте файл .spec

Дистрибутивы, созданные на основе Red Hat, такие как Fedora, используют файлы .spec для задания процесса сборки. Перейдите в каталог, в котором находятся такие файлы, с помощью команды cd ~/rpmbuild/SPECS/andcreateablank.spec и создайте пустой файл .spec с помощью команды rpmdev-newspec dillo.

Шаг 18: Отредактируйте файл .spec

Наберите команду gedit dillo.spec. Заполните поля Version (Версия), Summary (Краткое содержание) Licence (Лицензия) (в данном случае — GPLv3+).В URL указывается домашняя страница проекта; в Source0 указывается адрес исходного кода. Укажите комментарии в полях BuildRequires (Требования к сборке) и Requires (Требования). Добавьте полное описание в область %description.

Шаг 19: Выполните сборку исходного кода

Если пакет вообще поддерживается в системе, запустите команду yum-builddep [имя пакета]. В противном случае, вам придется повторять команду сборки для того, чтобы получать сообщения об ошибках, или поискать документацию в архиве с исходным кодом. В каталоге SPEC наберите команду rpmbuild -ba[название пакета].spec.

Если эта сборка завершится неудачно и будут выданы сообщения о дополнительных не распакованных файлах, выделите и скопируйте этот список файлов в раздел %files файла .spec и повторите команду сборки. Теперь пакет будет находиться в каталоге RPMS. Наберите команду rpm -ivh [пакет] для того, чтобы его установить.

Наберите команду rpm -qa | grep [пакет] для того, чтобы убедиться, что он установлен.

Если вам понравилась статья, поделитесь ею с друзьями:

Источник: http://rus-linux.net/MyLDP/po/packages.html

Создание RPM или DEB пакетов с Checkinstall в Linux

Как собрать deb пакет

Если вы установили программу Linux с исходного кода, запустив «make install»,  установка не сильно сложная, но это становится действительно сложным при удалении данной программы, если автор программы не обеспечил удаления в файле Makefile. Вам придется сравнивать полный список файлов в вашей системе до и после установки программы из исходников, и вручную удалить все файлы, которые были добавлены во время установки.

CheckInstall отслеживает все файлы, созданные или измененные с помощью установки командной строки (например, «make install» «make install_modules», и т.д.), и собирает стандартный бинарный пакет, давая вам возможность установливать или удалять его с вашего дистрибутива.

В этой статье «Создание RPM или DEB пакетов с Checkinstall в Linux» я расскажу как это делается  только основанных на RedHat’s и Debian’s дистрибутивов и покажу как собрать RPM или DEB пакет с исходного кода, используя Checkinstall.

Установка CheckInstall on Linux

Чтобы установить Checkinstall на Debian/Ubuntu и остальных debian-оподобных ОС, выполните:

# aptitude install checkinstall

Чтобы установить Checkinstall в дистрибутивах основанных на Red Hat, вам нужно будет скачать встроенных .rpm в Checkinstall, можете использовать мой.

Для начала пробуем его найти в ОС:

# yum search checkinstall

Если покажет что есть пакет, то его можно установить:

# yum install checkinstall

Или качаем пакет:

Для x64:

# cd /usr/local/src && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/x86_64/checkinstall-1.6.2-3.el6.1.x86_64.rpm

Для x86:

# cd /usr/local/src && wget ftp://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/ikoinoba/CentOS_CentOS-6/i686/checkinstall-1.6.2-3.el6.1.i686.rpm

Выполняем установку:

# yum install checkinstall-1.6.2-3.el6.1.x86_64.rpm

ИЛИ

# yum install checkinstall-1.6.2-3.el6.1.i686.rpm

После установки Checkinstall, вы можете использовать следующий формат чтобы собрать пакет для конкретной ОС:

# checkinstall

Без данного  аргумента,по умолчанию checkinstall выполнит команду «make install».

# checkinstall make install_packages # checkinstall make modules_install # checkinstall install.sh # checkinstall setup # checkinstall rpm -i my-package-1.0.i386-1.rpm

Сборка RPM или DEB пакета с CheckInstall

В этом примере, я покажу как можно собрать пакет Htop — это интерактивная, текстовая утилита для просмотра процессов для Unix/Linux (аналог top. Но Htop лучше — лично мои соображения).

Первое что нужно сделать, так это скачать исходный код с официального сайта. Я привык сохранять все архивы в /usr/local/src. Скачиваем исходный код программы и распаковываем ее, и переходим в папку с кодом для дальнейших действий:

# cd /usr/local/src && wget http://hisham.hm/htop/releases/1.0.3/htop-1.0.3.tar.gz # tar xzf htop-1.0.3.tar.gz && cd htop-1.0.3

Следующее что необходимо сделать- это сконфигурировать htop, после конфигурирования, обычно выполняют команду ‘make install’, но для checkinstall — это не нужно.

# ./configure # make install

Поэтому, чтобы собрать Htop пакет, мы можем ссылаться на Checkinstall без каких-либо аргументов, которые будут использовать команду «make install ‘, чтобы построить пакет. В процессе сборки пакета, команда Checkinstall задаст вам ряд вопросов.

Вот команды, чтобы собрать пакет Htop:

# ./configure # checkinstall

1. Ответьте ‘Y’, на вопрос «Должен ли я создать набор пакетов документации по умолчанию?»

2. Вы можете ввести краткое описание пакета, а затем нажмите Enter два раза.

3. Введите число, чтобы изменить какой-либо из следующих значений или введите «enter» чтобы продолжить:

checkInstall Unix/Linux пример

После чего Checkinstall создаст .rpm или .deb пакет автоматически, в зависимости от вашей системы Linux.

На CentOS 7 выглядит это так:

CheckInstall CentOS/RedHat/Fedora

На  Debian 7 выглядит это так:

CheckInstall Debian/Ubuntu

Опции Checkinstall

# checkinstall [options] [command [command arguments]]

*Выбор тип пакета*

-t,—type=
Выбор ОС для сборки пакета.

-S
Собрать пакет для Slackware.

-R
Собрать пакет для RPM’s ОС.

-D
Собрать пакет для Debian’s  ОС.

*Опции для установки собранных пакетов*

—install=
Выполнить или не выполнять установку после сборки пакета.

—fstrans=
Enable (включить)/disable (выключить) код перевода файловой системы.

*Опции для скриптов*

-y, —default
Принять ответы на все вопросы, по умолчанию.

—pkgname=
Установить имя.

—pkgversion=
Установить версию.

-A, —arch, —pkgarch=
Установить архитектуру.

—pkgrelease=
Установить release.

—pkglicense=
Установить лицензию.

—pkggroup=
Установить software group

—pkgsource=
Установить местоположение сорсов (исходного кода).

—pkgaltsource=
Установить альтернативное местоположение сорсов (исходного кода).

—pakdir=
Новый пакет будет сохранен здесь (указать путь).

—maintainer=
Пакет maintainer (.deb).

—provides=
Особенности данного пакета (.rpm).

—requires=
Особенности требуемые этому пакету (.rpm).

—rpmflags=
Передайте эти флаги в rpm установщику.

—rpmi
Используйте опцию «-i» для rpm при установке .rpm.

—rpmu
Используйте опцию «-U» для rpm при установке .rpm.

—dpkgflags=
Передайте эти флаги dpkg установщику (deb ОС).

—spec=
Местоположение файла .spec.

—nodoc
Не включать файлы документации.

*Опции выводимой информации*

-d
Установить уровни для debug.

-si
Запустить интерактивную установку команды.

—showinstall=
Переключиться на интерактивную установку команды(Да\Нет).

-ss
Запустите интерактивный скрипт установки для Slackware.

—showslack=
Переключиться на интерактивную установку команды(Да\Нет) для Slackware.

* Параметры настройки пакета *

—autodoinst=
Переключать создание скрипта doinst.sh

—strip=
Снимите любые ELF бинарники, найденные внутри пакета

—stripso=
Снимите любые ELF бинарные библиотеки (.so файлы)

—addso=
Искать любые shared libs и добавить их в /etc/ld.so.conf

—reset-uids=
Сбросить привелегии для всех файлов/папок на 755 и владельца/группу для всех директорий на root.root

—gzman=
Сжатие любые страницы man-ы, найденные в пакете

—docdir=
Путь для размещения файла с документацией

—umask=
Установите значение umask

—exclude=
Исключить эти файлы/ каталоги из пакета

—include=
Принудительно включить в пакет файлы/директории, перечисленных в «listfile»

—inspect
Проверить список файлов пакета в

—review-spec
Просмотрить файл spec до создания .rpm

—review-control
Просмотрить файл управления до создания .deb

—newslack
Использовать новый  (8.1+) Slackware описание формата («—newslack» implies «-S»)

—with-tar=/path/to/tar
Вручную установите путь к tar binary в этой системе.

* Параметры очистки *

—deldoc=
Удалить doc-pak по окончании.

—deldesc=
Удалить файлы description-pak по окончании.

—delspec=
Удалить файл spec по окончании.

—bk
Резервное копирование любых замененных файлов.

—backup=
Переключить резервного копирования.

*О CheckInstall*

—help, -h
Показать это сообщение.

—copyright
Показать Copyright информацию.

—version
Показать версию программы.

ВСЕ!

Источник: https://linux-notes.org/sozdanie-rpm-ili-deb-paketov-s-checkinstall-v-linux/

Делаем просто
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: