TGViewer
ServerAdmin.ru ServerAdmin.ru @srv_admin · 32.6K subscribers
Post #2715 8.01K
​​В выступлении с 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 <ik@mbk-lab.ru>"
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
setcap CAP_NET_BIND_SERVICE=+eip /opt/tegu/sbin/tegu
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
  • 👍 80
  • 👎 3
More from @srv_admin
  1. Sep 23, 2026Очередная подборка статей авторов, которые согласились в ней участвовать. Кто не понимает,…
  2. Sep 23, 2026Контейнеры в одном инструменте, виртуалки — в другом, частное облако — вообще отдельная ис…
  3. Sep 23, 2026Расскажу тем, кто не знает, и напомню тем, кто забыл, как я. Не надо в Proxmox в LXC конте…
  4. Sep 22, 2026Недавно случайно заметил любопытную информацию на тему Proxmox VE и новой функциональности…
  5. Sep 22, 2026✔️ Сети для всех — сообщество для тех, кто развивается в сетевом и системном администриров…
  6. Sep 22, 2026Я ранее уже рассказывал, что приобрёл себе домой полноценную серверную платформу на базе S…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →