Как то понадобилось установить 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
Комментарии ()