В выступлении с DevOpsConf, про которое выйдет заметка вечером, увидел упоминание очень любопытной программы nfpm, с помощью которой можно собирать свои deb или rpm пакеты. Я посмотрел и нашёл её современной, простой и полезной. Сразу же попробовал на реальном примере. Результатом делюсь с вами.
Я не стал ничего придумывать, а взял бинарники от Tegu и упаковал их в deb пакет, чтобы максимально упросить установку. Видел, что кто-то docker контейнер собирает для этого. Но как по мне докер тут вообще не нужен. Задача полностью решается обычным пакетным менеджером.
Итак, ставим nfpm:
Готовим для него конфиг nfpm.yaml:
Для простоты и демонстрации возможностей nfpm некоторые вещи упростил и поместил в скрипты. Те же права доступа и создание каталогов можно сделать сразу в конфигурации nfpm, а не в скриптах.
Файлы
preinstall.sh:
postinstall.sh:
Собираем пакет:
Пакет собран. Можно установить:
Подобная сборка легко автоматизируется. Было бы неплохо, если бы разработчики сразу собирали свои пакеты. Это гораздо удобнее и для пользователей, и для разработчиков, так как не надо писать подробную инструкцию.
⇨ Сайт / Исходники
#linux #debian #apt #tegu
Я не стал ничего придумывать, а взял бинарники от 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
Последнее время регулярно сталкиваюсь со следующей проблемой. Помимо того, что многие репозитории заблокированы для IP адресов из РФ, так ещё и скорость загрузки с открытых репозиториев падает иногда до 30-50 кБ/c. Причём не понятно наверняка, где и кто режет скорость. Помогает отмена загрузки или обновления и новый запуск. Иногда с первой, иногда со второй попытки скорость восстанавливается до более приемлемых значений.
Сталкивался во время стандартных обновлений Debian из её базовых реп, с установкой Zabbix, с загрузкой через wget софта с github. Заметил, что конкретно с Debian часто спотыкаешься на загрузке ядра.
Один из вариантов решения данной проблемы - использовать репозитории, которые гарантированно не режут тебе скорость и не блокируют запросы. Могу предложить 2 репозитория, которые закроют практически все потребности:
▪️ https://mirror.yandex.ru
▪️ https://mirrors.huaweicloud.com
Единственный момент, я не понял, где в этих копиях репозиториев искать ключи, которыми подписаны пакеты, если они не лежат в самих репозиториях. Можно сходить на оригинальный репозиторий и скопировать оттуда, но это лишние хлопоты. Так что показываю пример, как подключать их в Debian, без проверки подписи и с ней, используя скачанный оригинальный ключ. Сделать это можно с любой машины, которая имеет к ним доступ.
Проверяем:
Есть пакет свежей версии из подключенного репозитория.
Если для вас вариант с
Теперь никаких предупреждений и проблем с безопасностью быть не должно. Вы точно будете уверены, что устанавливаете оригинальные пакеты.
У Яндекса не увидел зеркала Zabbix, поэтому подключим его зеркало из huaweicloud, используя оригинальный ключ:
По аналогии можно подключать любые другие репозитории. Может знаете ещё какие-то публичные репозитории, с которыми нет проблем?
#apt
Сталкивался во время стандартных обновлений Debian из её базовых реп, с установкой Zabbix, с загрузкой через wget софта с github. Заметил, что конкретно с Debian часто спотыкаешься на загрузке ядра.
Один из вариантов решения данной проблемы - использовать репозитории, которые гарантированно не режут тебе скорость и не блокируют запросы. Могу предложить 2 репозитория, которые закроют практически все потребности:
▪️ https://mirror.yandex.ru
▪️ https://mirrors.huaweicloud.com
Единственный момент, я не понял, где в этих копиях репозиториев искать ключи, которыми подписаны пакеты, если они не лежат в самих репозиториях. Можно сходить на оригинальный репозиторий и скопировать оттуда, но это лишние хлопоты. Так что показываю пример, как подключать их в Debian, без проверки подписи и с ней, используя скачанный оригинальный ключ. Сделать это можно с любой машины, которая имеет к ним доступ.
# echo "deb [trusted=yes] https://mirror.yandex.ru/mirrors/elastic/8/ stable main" > /etc/apt/sources.list.d/elastic.list
Проверяем:
# apt update
# apt search --names-only ^elasticsearch
# apt show elasticsearch
Есть пакет свежей версии из подключенного репозитория.
Если для вас вариант с
trusted=yes
неприемлем, то вручную качаем файл https://artifacts.elastic.co/GPG-KEY-elasticsearch и копируем на целевые машины. Далее конвертируем его в бинарник под современный формат и используем:# gpg --dearmor < GPG-KEY-elasticsearch > /etc/apt/keyrings/GPG-KEY-elasticsearch.gpg
# echo "deb [signed-by=/etc/apt/keyrings/GPG-KEY-elasticsearch.gpg] https://mirror.yandex.ru/mirrors/elastic/8/ stable main" > /etc/apt/sources.list.d/elastic.list
Теперь никаких предупреждений и проблем с безопасностью быть не должно. Вы точно будете уверены, что устанавливаете оригинальные пакеты.
У Яндекса не увидел зеркала Zabbix, поэтому подключим его зеркало из huaweicloud, используя оригинальный ключ:
# wget https://repo.zabbix.com/zabbix-official-repo-apr2024.gpg
# gpg --dearmor < zabbix-official-repo-apr2024.gpg > /etc/apt/keyrings/GPG-KEY-zabbix
# echo "deb [signed-by=/etc/apt/keyrings/GPG-KEY-zabbix] https://mirrors.huaweicloud.com/zabbix/zabbix/7.0/debian bookworm main" > /etc/apt/sources.list.d/zabbix.list
По аналогии можно подключать любые другие репозитории. Может знаете ещё какие-то публичные репозитории, с которыми нет проблем?
#apt