Образ Ubuntu: слой обновлений (full-upgrade + ядро) и пакеты bj на диске — установка почти не качает из сети

- deploy/iso/build-ubuntu-updates-layer.sh: слой ubuntu-server-minimal.ubuntu-server.bj.squashfs поверх
  «Ubuntu Server» (оригинальные слои и среда установщика не меняются) + debs/ для bj-installer;
- build-iso-ubuntu.sh LAYER=<каталог>: слой — источник установки по умолчанию, старые ядро HWE и прошивки
  из репозитория образа убираются;
- bj-installer: пакеты из /var/lib/bj/debs ставятся с диска, иначе — из репозитория.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-24 19:46:04 +03:00
parent 76c11b7247
commit d7d7e2105f
4 changed files with 128 additions and 4 deletions
+43 -4
View File
@@ -3,6 +3,9 @@
#
# deploy/iso/build-iso-ubuntu.sh <ubuntu-22.04.x-live-server-amd64.iso> <bj-installer> <версия> <каталог релиза> <каталог Валидаты> [канал] [выходной.iso]
#
# LAYER=<каталог> — слой обновлений Ubuntu и пакеты bj из build-ubuntu-updates-layer.sh: установка
# ставит систему уже с обновлениями и не качает PostgreSQL/Java из сети. Без LAYER — как в Ubuntu 22.04.5.
#
# Каталог релиза — dist с подписанным manifest.json (в образ кладётся ядро bj: установка без ключа продукта).
# Каталог Валидаты — zpki/zsdk (ПК «Валидата Клиент L» для Linux, fs.moex.com ClientL_Other.zip)
# и libldap-2.4-2 из Ubuntu 20.04 (нужна zpki, в 22.04 её нет). Ubuntu 22.04 — ОС, на которой
@@ -35,6 +38,36 @@ FILES=$(python3 -c 'import json,sys,base64;s=json.load(open(sys.argv[1]));m=json
[ -n "$FILES" ] || { echo "в релизе нет компонентов ядра"; exit 1; }
for f in $FILES; do cp "$BUNDLE/$f" "$WORK/bj/bundle/"; done
# слой обновлений Ubuntu (необязательно)
LAYER=${LAYER:-}
LNAME=ubuntu-server-minimal.ubuntu-server.bj
LMAP=""
LRM=""
if [ -n "$LAYER" ]; then
for f in $LNAME.squashfs $LNAME.size $LNAME.manifest; do [ -s "$LAYER/$f" ] || { echo "в $LAYER нет $f"; exit 1; }; done
mkdir -p "$WORK/bj/debs"; cp "$LAYER"/debs/*.deb "$WORK/bj/debs/"
# источник установки «Ubuntu Server + обновления Bridge&Join» — по умолчанию; слои minimal и
# ubuntu-server под ним установщик подключает сам по цепочке имён
xorriso -osirrox on -indev "$SRC" -extract /casper/install-sources.yaml "$WORK/is.orig" >/dev/null 2>&1
{ sed 's/^ default: true$/ default: false/;s/^- default: true$/- default: false/' "$WORK/is.orig"
echo "- default: true"
echo " description:"
echo " en: Ubuntu Server with updates applied when the Bridge&Join image was built."
echo " id: ubuntu-server-bj"
echo " locale_support: locale-only"
echo " name:"
echo " en: Ubuntu Server (Bridge&Join, updated)"
echo " path: $LNAME.squashfs"
echo " size: $(( $(cat "$LAYER/$LNAME.size") + $(awk '/path: ubuntu-server-minimal.ubuntu-server.squashfs/{f=1} f&&/size:/{print $2; exit}' "$WORK/is.orig") ))"
echo " type: fsimage-layered"
echo " variant: server"
} > "$WORK/install-sources.yaml"
# Ядро и прошивки новее — в слое; их старые копии в репозитории образа (и ядро HWE, которое
# мы не ставим) не нужны: установка не будет их брать, пакет linux-generic уже стоит в слое.
LRM="/pool/main/l/linux-firmware /pool/main/l/linux-hwe-6.8 /pool/main/l/linux-meta-hwe-6.8"
LMAP="-map $LAYER/$LNAME.squashfs /casper/$LNAME.squashfs -map $LAYER/$LNAME.size /casper/$LNAME.size -map $LAYER/$LNAME.manifest /casper/$LNAME.manifest -map $WORK/install-sources.yaml /casper/install-sources.yaml"
fi
# Валидата
n=0; for p in zpki zsdk libldap-2.4-2; do
f=$(ls "$VALIDATA"/${p}_*.deb "$VALIDATA"/${p}-*.deb 2>/dev/null | grep -E 'amd64\.deb$' | head -1 || true)
@@ -67,7 +100,13 @@ xorriso -osirrox on -indev "$SRC" -extract /boot/grub/grub.cfg "$WORK/grub/grub.
# пересчитываем изменённые и добавляем наши.
xorriso -osirrox on -indev "$SRC" -extract /md5sum.txt "$WORK/md5.orig" >/dev/null 2>&1
{
grep -vE '\./casper/(hwe-vmlinuz|hwe-initrd|ubuntu-server-minimal\.ubuntu-server\.installer\.generic-hwe\.squashfs)$|\./boot/grub/grub\.cfg$' "$WORK/md5.orig"
grep -vE '\./pool/main/l/linux-(firmware|hwe-6\.8|meta-hwe-6\.8)/' "$WORK/md5.orig" | grep -vE '\./casper/(hwe-vmlinuz|hwe-initrd|ubuntu-server-minimal\.ubuntu-server\.installer\.generic-hwe\.squashfs|install-sources\.yaml)$|\./boot/grub/grub\.cfg$'
if [ -n "$LAYER" ]; then
echo "$(md5sum < "$WORK/install-sources.yaml" | cut -d' ' -f1) ./casper/install-sources.yaml"
for f in $LNAME.squashfs $LNAME.size $LNAME.manifest; do echo "$(md5sum < "$LAYER/$f" | cut -d' ' -f1) ./casper/$f"; done
else
grep -E '\./casper/install-sources\.yaml$' "$WORK/md5.orig"
fi
echo "$(md5sum < "$WORK/grub/grub.cfg" | cut -d' ' -f1) ./boot/grub/grub.cfg"
(cd "$WORK" && find bj nocloud -type f | sort | while read -r f; do echo "$(md5sum < "$f" | cut -d' ' -f1) ./$f"; done)
} > "$WORK/md5sum.txt"
@@ -77,7 +116,7 @@ xorriso -indev "$SRC" -outdev "$OUT" -boot_image any replay \
-volid "BJ_UBUNTU22" \
-map "$WORK/bj" /bj -map "$WORK/nocloud" /nocloud \
-map "$WORK/grub/grub.cfg" /boot/grub/grub.cfg \
-map "$WORK/md5sum.txt" /md5sum.txt \
-rm /casper/hwe-vmlinuz /casper/hwe-initrd /casper/ubuntu-server-minimal.ubuntu-server.installer.generic-hwe.squashfs -- \
-map "$WORK/md5sum.txt" /md5sum.txt $LMAP \
-rm_r /casper/hwe-vmlinuz /casper/hwe-initrd /casper/ubuntu-server-minimal.ubuntu-server.installer.generic-hwe.squashfs $LRM -- \
-end >/dev/null 2>"$WORK/xorriso.log" || { cat "$WORK/xorriso.log"; exit 1; }
echo "Образ собран: $OUT ($(du -h "$OUT" | cut -f1)), канал $CHANNEL; ядро: $FILES; Валидата: $n пакета"
echo "Образ собран: $OUT ($(du -h "$OUT" | cut -f1)), канал $CHANNEL; ядро: $FILES; Валидата: $n пакета; слой обновлений: ${LAYER:-нет}"