Собираем puppet-agent для armhf debian 11 и debian 12

Как то понадобилось установить puppet-agent 8.x на архитектуру armhf на debian 11 и какого было разочарование, в том что это не так просто сделать.
Нигде не смогли найти пакет нужной версии, в официальном репозитории нет пакетов для armhf, в репозитории debian лишь 5 версия для bullseye (oldstable), 7 для bookworm (stable) и 8 для trixie (testing)


Погрустили, подумали, нашли github puppet-agent и инструкции как можно самому собрать пакет.
Осталось придумать где его собирать. Варианты были устройство(orangepi pc)/qemu-system-arm/docker

orangepi pc очень медленное и перегревается
qemu-system-arm — хороший вариант, но геморрой с запуском, если кому интересно, запустить можно так:
qemu-system-arm \
    -M virt \
    -m 2048 \
    -smp 8 \
    -device virtio-blk-device,drive=disk \
    -drive file=./Armbian.img,if=none,index=0,media=disk,id=disk,format=raw \
    -kernel ./boot/vmlinuz-5.10.0-33-armmp-lpae \
    -initrd ./boot/initrd.img-5.10.0-33-armmp-lpae \
    -append "root=/dev/vda1 rootfstype=ext4 ro console=ttyAMA0" \
    -netdev tap,id=qemu0,ifname=qemu0,script=no,downscript=no -device virtio-net-device,netdev=qemu0 
vmlinuz-5.10.0-33-armmp-lpae
initrd.img-5.10.0-33-armmp-lpae
Образ Armbian_23.02.2_Orangepipc_bullseye_current_5.15.93.img.xz, что бы его распаковать
xz -d Armbian_23.02.2_Orangepipc_bullseye_current_5.15.93.img.xz
mv Armbian_23.02.2_Orangepipc_bullseye_current_5.15.93.img Armbian.img
Сеть, создаете бридж и добавляете nat… при запуске armbian настроите сеть, пропишите статический IP и route через ваш host
sudo ip tuntap add qemu0 mode tap user `whoami`
sudo ip link set qemu0 up
sudo ip link add br0 type bridge
sudo ip link set dev qemu0 master br0
sudo ip a add dev br0 192.168.10.1/24
sudo ip link set dev br0 up
sudo iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -o wlan0 -j MASQUERADE

Но мы будем собирать при помощи docker, самое простой и быстрый вариант.
Для заметки, я буду собирать для debian 12, для debian 11 я уже собрал и приложу уже собранный пакет.

1. Добавим поддержку разных архитектур, данная команда Устанавливает эмуляторы QEMU в системе хоста + Регистрирует эмуляторы QEMU с помощью binfmt_misc
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
Наличие архитектур можно проверить
ls -1 /proc/sys/fs/binfmt_misc/
python3.12
qemu-aarch64
qemu-aarch64_be
qemu-alpha
qemu-arm
qemu-armeb
qemu-hexagon
qemu-hppa
qemu-m68k
qemu-microblaze
qemu-microblazeel
qemu-mips
qemu-mips64
qemu-mips64el
qemu-mipsel
qemu-mipsn32
qemu-mipsn32el
qemu-or1k
qemu-ppc
qemu-ppc64
qemu-ppc64le
qemu-riscv32
qemu-riscv64
qemu-s390x
qemu-sh4
qemu-sh4eb
qemu-sparc
qemu-sparc32plus
qemu-sparc64
qemu-xtensa
qemu-xtensaeb
register
status
2. Создаем контейнер, выделим каталог в который будем складывать артефакты, допустим puppet, в домашнем каталоге
mkdir $HOME/puppet
docker run -it --rm --platform linux/arm/v7 -v $HOME/puppet:/puppet debian:12 bash
3. Устанавливаем в контейнере необходимые пакеты для сборки
apt update
apt install -y curl wget git build-essential sudo
4. Собираем ruby… займет ~50 минут, в зависимости от производительности
cd /puppet
git clone https://github.com/postmodern/ruby-install.git
cd ruby-install
bash setup.sh
# если установка не началась или прервалась, можно запустить
# ruby-install ruby
....
/opt/rubies/ruby-3.3.5/bin/ruby --version
ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [armv7l-linux-eabihf]
export PATH=/opt/rubies/ruby-3.3.5/bin/:$PATH
5. Архивируем артефакт ruby, вдруг случайно удалим
tar -czf /puppet/ruby.tar.gz /opt/rubies/
6. Собираем puppet-runtime
cd /puppet
git clone https://github.com/puppetlabs/puppet-runtime
git checkout 202411040
bundle install
7. Надо кое-что пропатчить иначе у нас не сможет собраться boost 1.73, для этого применим patch и обновим boost до 1.76
Сборка займет 2-3 часа
wget https://clsv.ru/uploads/116/boost.patch
git apply boost.patch
mkdir /tmp/puppet-runtime/
bundle exec build agent-runtime-main debian-12-armhf -e local --workdir /tmp/puppet-runtime/
и у нас в output должен появиться собранный puppet-runtime
ls -la /puppet/puppet-runtime/output/agent-runtime-main-202411040.debian-12-armhf.tar.gz
-rw-r--r-- 1 root root 39181052 Nov  5 23:22 /puppet/puppet-runtime/output/agent-runtime-main-202411040.debian-12-armhf.tar.gz
перенесем output в /puppet
cp -r /puppet/puppet-runtime/output/ /puppet/output/
8. Так же сохраняем артефакт /opt/puppetlabs/
tar -czf /puppet/puppetlabs.tar.gz /opt/puppetlabs/
9. Подготавливаем puppet agent
git clone https://github.com/puppetlabs/puppet-agent
cd puppet-agent
git checkout 8.10.0
bundle install
10. Нужно отредактировать configs/components/puppet-runtime.json, поправить откуда подтягивать репозитории, и аргументы распаковки runtime
wget https://clsv.ru/uploads/116/agent.patch
git apply agent.patch
13. Запускаем сборку
cd /puppet/puppet-agent
export NO_PXP_AGENT=true
mkdir /tmp/puppet-agent
# если будете собирать для debian 11, установите hocon
# /opt/puppetlabs/puppet/bin/gem install hocon
bundle exec build puppet-agent debian-12-armhf -e local --workdir /tmp/puppet-agent/
14. Готовый пакет
ls -lash /puppet/puppet-agent/output/deb/bookworm/puppet8/puppet-agent_8.10.0-1bookworm_armhf.deb 
25M -rw-r--r-- 1 root root 25M Nov  6 09:53 /puppet/puppet-agent/output/deb/bookworm/puppet8/puppet-agent_8.10.0-1bookworm_armhf.deb
Ссылки на собранные пакеты:
puppet-agent_8.10.0-1bullseye_armhf.deb — puppet-agent debian 11(bullseye) armhf
puppet-agent_8.10.0-1bookworm_armhf.deb — puppet-agent debian 12(bullseye) armhf

Так же все артефакты для debian 11 и debian 12 можно найти тут https://disk.yandex.ru/d/FuU_UPI0Kk5y-g

Комментарии ()

    Авторизация

    GitHubGoogleVkontakteYandex
    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    cloudsv 26 октября 2024, 11:31
    MySQL Workbench падает при подключении 4
    Diego mont 25 мая 2023, 07:04
    Полезные боты в Telegram 2
    cloudsv 24 апреля 2023, 17:56
    Обновление Scala Rider G4 52
    cloudsv 12 ноября 2022, 19:16
    Установка и настройка minidlna 3
    cloudsv 03 ноября 2022, 03:42
    Настройка прокси mtproto для Telegram 52
    cloudsv 03 января 2022, 10:50
    Let's Encrypt это легко и просто 4
    cloudsv 05 августа 2020, 11:57
    Мне вчера стукнуло 34 4
    cloudsv 05 октября 2024, 14:14
    Linux Отключение gvfs wsdd (Web Service Discovery) 0
    cloudsv 07 августа 2023, 22:56
    Linux Asus ROG x13 flow 2022 GV301RE и Linux 0
    cloudsv 15 апреля 2023, 16:23
    Linux Уведомление о смены workspace в X11 Linux 0
    cloudsv 17 октября 2020, 09:55
    Linux Отключить DHCP IPv6 в systemd 0
    cloudsv 30 июля 2020, 21:54
    О жизни Мне вчера стукнуло 34 4
    cloudsv 15 апреля 2020, 15:45
    Linux Основные hotkeys редактора Vim 0
    cloudsv 01 октября 2019, 08:00
    Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 16:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 30 июля 2019, 21:34
    О жизни 33 year old 0