Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

3 года назад
Открыть в
​​В выступлении с DevOpsConf, про которое выйдет заметка вечером, увидел упоминание очень любопытной программы nfpm, с помощью которой можно собирать свои deb или rpm пакеты. Я посмотрел и нашёл её современной, простой и полезной. Сразу же попробовал на реальном примере. Результатом делюсь с вами. Я не стал ничего придумывать, а взял бинарники от Tegu и упаковал их в deb пакет, чтобы максимально упросить установку. Видел, что кто-то docker контейнер собирает для этого. Но как по мне докер тут вообще не нужен. Задача полностью решается обычным пакетным менеджером. Итак, ставим nfpm: # echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | tee /etc/apt/sources.list.d/goreleaser.list # apt update # apt install nfpm Готовим для него конфиг nfpm.yaml: name: "tegu" arch: "amd64" platform: "linux" version: "v1.27.0" section: "default" priority: "optional" conflicts:  - exim4  - postfix maintainer: "Kalmetov Igor <[email protected]>" description: |  Tegu is the free mailserver. vendor: "mbk-lab.ru" homepage: "https://project.mbk-lab.ru" contents: - src: ~/tegu/bin/teguctl  dst: /opt/tegu/bin/ - src: ~/tegu/sbin/tegu  dst: /opt/tegu/sbin/ - src: ~/tegu/tegu.conf  dst: /etc/tegu.conf  type: config - src: ~/tegu/tegu.service  dst: /etc/systemd/system/tegu.service  type: config overrides:  deb:   scripts:    preinstall: /root/tegu/preinstall.sh    postinstall: /root/tegu/postinstall.sh Для простоты и демонстрации возможностей nfpm некоторые вещи упростил и поместил в скрипты. Те же права доступа и создание каталогов можно сделать сразу в конфигурации nfpm, а не в скриптах. Файлы tegu.service и tegu.conf взял из документации. Добавил свои скрипты для выполнения некоторых действий. preinstall.sh: #!/bin/bash mkdir /opt/tegu mkdir /opt/tegu/{bin,sbin,data,certs} chown -R mail. /opt/tegu/{data,certs} chgrp -R mail /opt/tegu/{bin,sbin} chmod 750 /opt/tegu/{data,certs} chmod -R 750 /opt/tegu/sbin chmod -R 750 /opt/tegu/bin postinstall.sh: chown root.mail /etc/tegu.conf chmod 640 /etc/tegu.conf systemctl enable tegu.service systemctl start tegu.service Собираем пакет: # nfpm pkg --packager deb --target ~/ using deb packager... created package: ~/tegu_1.27.0_amd64.deb Пакет собран. Можно установить: # dpkg -i ~/tegu_1.27.0_amd64.deb Подобная сборка легко автоматизируется. Было бы неплохо, если бы разработчики сразу собирали свои пакеты. Это гораздо удобнее и для пользователей, и для разработчиков, так как не надо писать подробную инструкцию. ⇨ Сайт / Исходники #linux #debian #apt #tegu