Создание и редактирование deb пакетов

x-debian-packageХотел бы навести маленькую статью заметку о том, как можно редактировать (вносить изменения) deb пакеты. Рано или поздно каждый администратор сталкивается с нуждой сборки или редактирования установочных пакетов. К примеру, мы используем pound в роли фронт-енда для https. По умолчанию, он пишет все логи в syslog.log, и для того, чтобы он писал в свой собственный файл, нужно внести изменения не только в pound, но и в syslog конфигурацию. Плюс нужно добавить ротейт логов. Чтобы каждый раз не проделывать все изменения после установки, мы можем добавить все нужные файлы конфигураций и папки в deb-пакет pound-а, и уже устанавливать его вместо репозиторного.
Будем редактировать pound под дистрибутивом Ubuntu 16.04.

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

root@dpkg:~# apt download pound

После этого, у нас в рабочей директории появиться пакет pound.

root@dpkg:~# ls -l pound_2.6-6.1_amd64.deb 
-rw-r--r-- 1 root root 92604 May  7  2015 pound_2.6-6.1_amd64.deb

Посмотрим из каких файлов состоит этот пакет.

root@dpkg:~# dpkg -c pound_2.6-6.1_amd64.deb 
drwxr-xr-x root/root         0 2015-05-07 00:26 ./
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/sbin/
-rwxr-xr-x root/root     14560 2015-05-07 00:26 ./usr/sbin/poundctl
-rwxr-xr-x root/root    103456 2015-05-07 00:26 ./usr/sbin/pound
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/pound/
-rw-r--r-- root/root      1272 2015-05-07 00:26 ./usr/share/doc/pound/changelog.Debian.gz
-rw-r--r-- root/root      5782 2011-12-28 15:57 ./usr/share/doc/pound/FAQ.gz
-rw-r--r-- root/root       681 2014-10-20 00:11 ./usr/share/doc/pound/copyright
-rw-r--r-- root/root     12826 2011-12-28 15:57 ./usr/share/doc/pound/README.gz
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/pound/examples/
-rw-r--r-- root/root      7068 2011-12-28 15:57 ./usr/share/doc/pound/examples/z2_2_5_1.py.gz
-rw-r--r-- root/root      9166 2011-12-28 15:57 ./usr/share/doc/pound/examples/z2_2_6_1.py.gz
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/man/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/man/man8/
-rw-r--r-- root/root     11133 2015-05-07 00:26 ./usr/share/man/man8/pound.8.gz
-rw-r--r-- root/root      1024 2015-05-07 00:26 ./usr/share/man/man8/poundctl.8.gz
drwxr-xr-x root/root         0 2015-05-07 00:26 ./etc/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./etc/init.d/
-rwxr-xr-x root/root      2061 2014-10-20 00:20 ./etc/init.d/pound
drwxr-xr-x root/root         0 2015-05-07 00:26 ./etc/pound/
-rw-r--r-- root/root       927 2015-05-07 00:26 ./etc/pound/pound.cfg

Мы хотим, чтобы pound писал логи в папку /var/log/pound. Также нужно сразу добавить logrotate для этой папки, чтобы лог-файлы не росли до заоблачных размеров.
Следовательно, нам нужно добавить в deb пакет папку с логфайлом, конфигурацию для logrotat-а и конфигурацию для syslog.
Распакуем deb пакет.

root@dpkg:~# dpkg-deb -x pound_2.6-6.1_amd64.deb pound_folder/
root@dpkg:~# ls pound_folder/
etc  usr

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

root@dpkg:~# cd pound_folder/

root@dpkg:~/pound_folder# mkdir -pv var/log/pound
mkdir: created directory 'var'
mkdir: created directory 'var/log'
mkdir: created directory 'var/log/pound'

root@dpkg:~/pound_folder# touch var/log/pound/pound.log

Далее добавляем конфигурацию для logrotate.

root@dpkg:~/pound_folder# mkdir -pv etc/logrotate.d
mkdir: created directory 'etc/logrotate.d'

root@dpkg:~/pound_folder# vim etc/logrotate.d/pound
…
/var/log/pound/pound.log {
    daily
    dateext
    dateformat .%Y-%m-%d
    rotate 30
    notifempty
    missingok
    compress
    create 0644 syslog adm
    copytruncate
…

Теперь добавим конфигурацию для syslog (чтобы pound писал в свой файлик).

root@dpkg:~/pound_folder# mkdir -pv etc/rsyslog.d
mkdir: created directory 'etc/rsyslog.d'

root@dpkg:~/pound_folder# vim etc/rsyslog.d/pound.conf 
…
local0.*                        -/var/log/pound/pound.log
…

Осталось только подправить конфигурация самого pound-а.

root@dpkg:~/pound_folder#  vim etc/pound/pound.cfg
…
LogFacility local0
…

На этом приготовления завершены. Теперь нужно добавить описание для нашего пакета (control-information есть обязательным для всех deb пакетов). Его можно извлечь из скаченного пакета и обязательно поместить в нашу с именем DEBIAN.

root@dpkg:~/pound_folder# dpkg-deb -e ../pound_2.6-6.1_amd64.deb ./DEBIAN

root@dpkg:~/pound_folder# tree DEBIAN/
DEBIAN/
├── conffiles
├── control
├── md5sums
├── postinst
├── postrm
└── prerm

Также, извлечь информацию о пакете и дерево файлов можно было одной командой:

root@dpkg:~# dpkg-deb -R pound_2.6-6.1_amd64.deb pound_folder/

Теперь редактируем DEBIAN/control файл.

root@dpkg:~/pound_folder# vim DEBIAN/control 
…
Package: my-pound
Version: 2.6-6.1
Architecture: amd64
Maintainer: alex
Original-Maintainer: Brett Parker <iDunno@sommitrealweird.co.uk>
Installed-Size: 232
Depends: libc6 (>= 2.14), libpcre3, libssl1.0.0 (>= 1.0.0)
Section: net
Priority: extra
Homepage: http://www.apsis.ch/pound/
Description: reverse proxy, load balancer and HTTPS front-end for Web servers
 Pound was developed to enable distributing the load among several Web-servers
 and to allow for a convenient SSL wrapper for those Web servers that do not
 offer it natively.
…

Также добавим m5sum каждого добавленного файла.

root@dpkg:~/pound_folder# md5sum etc/logrotate.d/pound >> DEBIAN/md5sums 
root@dpkg:~/pound_folder# md5sum etc/rsyslog.d/pound.conf >> DEBIAN/md5sums 
root@dpkg:~/pound_folder# md5sum var/log/pound/pound.log >> DEBIAN/md5sums 

root@dpkg:~/pound_folder# tail -5 DEBIAN/md5sums 
aabd8125f84d54348ecacb3db49b8e7c  usr/share/man/man8/pound.8.gz
3f28a8e93815524fd805c8be51aaa29c  usr/share/man/man8/poundctl.8.gz
a5412406ce20f98671b4b8876da6aa29  etc/logrotate.d/pound
a326a3e96bfdb8921e48e1b13ca57477  etc/rsyslog.d/pound.conf
d41d8cd98f00b204e9800998ecf8427e  var/log/pound/pound.log

Теперь осталось собрать новый пакет (название пакета я изменил просто для примера).

root@dpkg:~/pound_folder# dpkg-deb -b ../pound_folder ../my-pound_2.6-6.1_amd64.deb
dpkg-deb: building package 'my-pound' in '../my-pound_2.6-6.1_amd64.deb'

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

root@dpkg:~# dpkg -c my-pound_2.6-6.1_amd64.deb 
drwxr-xr-x root/root         0 2016-10-30 15:35 ./
drwxr-xr-x root/root         0 2016-10-30 15:14 ./etc/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./etc/init.d/
-rwxr-xr-x root/root      2061 2014-10-20 00:20 ./etc/init.d/pound
drwxr-xr-x root/root         0 2016-10-30 15:11 ./etc/logrotate.d/
-rw-r--r-- root/root       174 2016-10-30 15:11 ./etc/logrotate.d/pound
drwxr-xr-x root/root         0 2016-10-30 15:16 ./etc/pound/
-rw-r--r-- root/root       946 2016-10-30 15:16 ./etc/pound/pound.cfg
drwxr-xr-x root/root         0 2016-10-30 15:18 ./etc/rsyslog.d/
-rw-r--r-- root/root        58 2016-10-30 15:18 ./etc/rsyslog.d/pound.conf
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/sbin/
-rwxr-xr-x root/root     14560 2015-05-07 00:26 ./usr/sbin/poundctl
-rwxr-xr-x root/root    103456 2015-05-07 00:26 ./usr/sbin/pound
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/pound/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/doc/pound/examples/
-rw-r--r-- root/root      7068 2011-12-28 15:57 ./usr/share/doc/pound/examples/z2_2_5_1.py.gz
-rw-r--r-- root/root      9166 2011-12-28 15:57 ./usr/share/doc/pound/examples/z2_2_6_1.py.gz
-rw-r--r-- root/root     12826 2011-12-28 15:57 ./usr/share/doc/pound/README.gz
-rw-r--r-- root/root       681 2014-10-20 00:11 ./usr/share/doc/pound/copyright
-rw-r--r-- root/root      5782 2011-12-28 15:57 ./usr/share/doc/pound/FAQ.gz
-rw-r--r-- root/root      1272 2015-05-07 00:26 ./usr/share/doc/pound/changelog.Debian.gz
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/man/
drwxr-xr-x root/root         0 2015-05-07 00:26 ./usr/share/man/man8/
-rw-r--r-- root/root      1024 2015-05-07 00:26 ./usr/share/man/man8/poundctl.8.gz
-rw-r--r-- root/root     11133 2015-05-07 00:26 ./usr/share/man/man8/pound.8.gz
drwxr-xr-x root/root         0 2016-10-30 14:55 ./var/
drwxr-xr-x root/root         0 2016-10-30 14:55 ./var/log/
drwxr-xr-x root/root         0 2016-10-30 15:08 ./var/log/pound/
-rw-r--r-- root/root         0 2016-10-30 15:08 ./var/log/pound/pound.log

Как видим, все наши файлы есть в сборке.
Теперь можно установить новый пакет.

root@dpkg:~# dpkg -i my-pound_2.6-6.1_amd64.deb 
Selecting previously unselected package my-pound.
(Reading database ... 92007 files and directories currently installed.)
Preparing to unpack my-pound_2.6-6.1_amd64.deb ...
Unpacking my-pound (2.6-6.1) ...
Setting up my-pound (2.6-6.1) ...
Processing triggers for systemd (229-4ubuntu11) ...
Processing triggers for ureadahead (0.100.0-19) ...
Processing triggers for man-db (2.7.5-1) ...

root@dpkg:~# dpkg -l | grep pound
ii  my-pound                           2.6-6.1                           amd64        reverse proxy, load balancer and HTTPS front-end for Web servers

Теперь внесем пару изменений и стартуем pound

root@dpkg:~# vim /etc/default/pound
…
startup=1
…

root@dpkg:~# chown syslog:adm /var/log/pound/pound.log
root@dpkg:~# /etc/init.d/rsyslog restart
root@dpkg:~# /etc/init.d/pound start

Проверяем 443 порт.

root@dpkg:~# curl https://localhost   
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

root@dpkg:~# ls -l /var/log/pound/  
total 4
-rw-r--r-- 1 syslog adm 198 Oct 30 16:00 pound.log 

Как видим, pound не настроен, поэтому выдал ошибку и залогировал ее в свой лог файл.
Осталось проверить logrotate.

root@dpkg:~# logrotate -v -f /etc/logrotate.d/pound 
reading config file /etc/logrotate.d/pound
Handling 1 logs
rotating pattern: /var/log/pound/pound.log  forced from command line (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/pound/pound.log
  log needs rotating
rotating log /var/log/pound/pound.log, log->rotateCount is 30
Converted ' .%Y-%m-%d' -> '.%Y-%m-%d'
dateext suffix '.2016-10-30'
glob pattern '.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]'
glob finding old rotated logs failed
copying /var/log/pound/pound.log to /var/log/pound/pound.log.2016-10-30
truncating /var/log/pound/pound.log
compressing log with: /bin/gzip

root@dpkg:~# ls -l /var/log/pound/
total 4
-rw-r--r-- 1 syslog adm   0 Oct 30 16:02 pound.log
-rw-r--r-- 1 syslog adm 136 Oct 30 16:00 pound.log.2016-10-30.gz

root@dpkg:~# curl https://localhost                 
curl: (35) gnutls_handshake() failed: An unexpected TLS packet was received.

root@dpkg:~# ls -l /var/log/pound/ 
total 8
-rw-r--r-- 1 syslog adm  78 Oct 30 16:02 pound.log
-rw-r--r-- 1 syslog adm 136 Oct 30 16:00 pound.log.2016-10-30.gz

Все отлично, лог заротейтился, потом мы проверили или пишется лог в новый файл – все ок.
На этом все. Как создавать пакет с новым названием для поддержки мультиверсионности можно почитать здесь

Автор: admin, 30 октября 2016
Рубрики: Linux
Метки:

Написать комментарий

Последние статьи

Яндекс.Метрика
?>