Хотел бы навести маленькую статью заметку о том, как можно редактировать (вносить изменения) 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
Все отлично, лог заротейтился, потом мы проверили или пишется лог в новый файл – все ок.
На этом все. Как создавать пакет с новым названием для поддержки мультиверсионности можно почитать здесь