Образ: меню загрузки по-русски в оформлении Bridge&Join (GRUB в графическом режиме, тема grub-theme/; без графики — те же пункты по-английски), в BIOS пункт «Загрузиться с жёсткого диска»; экран установки на консоли вместо журнала установщика Ubuntu — этапы по-русски и полоса хода (bj-install-progress из early-commands; при ошибке или сбое экрана возвращается стандартный экран Ubuntu); quiet при загрузке установщика
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -28,6 +28,7 @@ mkdir -p "$WORK/bj/bundle" "$WORK/bj/validata" "$WORK/nocloud" "$WORK/grub"
|
||||
|
||||
install -m 0755 "$INSTALLER" "$WORK/bj/bj-installer"
|
||||
install -m 0755 "$HERE/bj-firstboot" "$WORK/bj/bj-firstboot"
|
||||
install -m 0755 "$HERE/bj-install-progress" "$WORK/bj/bj-install-progress" # экран установки на консоли
|
||||
cp "$HERE/bj-firstboot.service" "$WORK/bj/"
|
||||
install -m 0755 "$HERE/../linux/sbin/bj-welcome" "$WORK/bj/bj-welcome"
|
||||
install -m 0755 "$HERE/../linux/sbin/bj-network" "$WORK/bj/bj-network"
|
||||
@@ -91,21 +92,53 @@ HASH=$(openssl passwd -6 "$(head -c 32 /dev/urandom | base64)")
|
||||
sed "s#@@PASSHASH@@#$HASH#" "$HERE/ubuntu/user-data.tmpl" > "$WORK/nocloud/user-data"
|
||||
: > "$WORK/nocloud/meta-data"
|
||||
|
||||
# меню загрузки: первый пункт — установка Bridge&Join
|
||||
# меню загрузки: первый пункт — установка Bridge&Join. В графическом режиме — по-русски, с оформлением
|
||||
# grub-theme/ (в текстовом режиме GRUB кириллицы нет — тогда те же пункты по-английски).
|
||||
xorriso -osirrox on -indev "$SRC" -extract /boot/grub/grub.cfg "$WORK/grub/grub.orig" >/dev/null 2>&1
|
||||
mkdir -p "$WORK/boot/grub/themes/bj"
|
||||
cp "$HERE"/grub-theme/theme.txt "$HERE"/grub-theme/*.pf2 "$HERE"/grub-theme/*.png "$WORK/boot/grub/themes/bj/"
|
||||
# пункты меню: $1 — ru|en
|
||||
menu() {
|
||||
if [ "$1" = ru ]; then
|
||||
T1="Установить Bridge&Join $VERSION — стирает весь диск"; T2="Установить Ubuntu Server вручную, без Bridge&Join"
|
||||
T3="Загрузиться со следующего диска"; T4="Настройки UEFI"; T5="Проверка памяти"; T6="Загрузиться с жёсткого диска"
|
||||
else
|
||||
T1="Install Bridge&Join $VERSION - ERASES THE WHOLE DISK"; T2="Try or Install Ubuntu Server"
|
||||
T3="Boot from next volume"; T4="UEFI Firmware Settings"; T5="Test memory"; T6="Boot from first hard disk"
|
||||
fi
|
||||
echo "menuentry --hotkey=b '$T1' {"
|
||||
echo " set gfxpayload=keep"
|
||||
echo " linux /casper/vmlinuz quiet autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---"
|
||||
echo " initrd /casper/initrd"
|
||||
echo "}"
|
||||
# прочие пункты образа Ubuntu — кроме ядра HWE (его файлы из образа удаляются); в BIOS ещё «с жёсткого
|
||||
# диска» — если образ остался подключённым после установки (в UEFI для этого есть «со следующего диска»)
|
||||
sed '/^set timeout/d;/^loadfont/d;/^set menu_color/d' "$WORK/grub/grub.orig" \
|
||||
| awk '/^menuentry "Ubuntu Server with the HWE kernel"/{skip=1} skip&&/^}/{skip=0;next} !skip' \
|
||||
| sed "s|^menuentry \"Try or Install Ubuntu Server\"|menuentry '$(sedrepl "$T2")'|;s|^menuentry 'Boot from next volume'|menuentry '$(sedrepl "$T3")'|;s|^menuentry 'UEFI Firmware Settings'|menuentry '$(sedrepl "$T4")'|;s|^menuentry 'Test memory'|menuentry '$(sedrepl "$T6")' {\\n\\tset root=(hd0)\\n\\tchainloader +1\\n}\\nmenuentry '$(sedrepl "$T5")'|"
|
||||
}
|
||||
# текст для правой части s|…|…| в sed: & и | — буквально
|
||||
sedrepl() { printf '%s' "$1" | sed 's/[&|\\]/\\&/g'; }
|
||||
{
|
||||
echo "set default=0"
|
||||
# меню ждёт выбора: выбор пункта установки и есть подтверждение стирания диска (без таймера образ,
|
||||
# случайно оставленный подключённым, не переустановит систему сам)
|
||||
echo "set timeout=-1"
|
||||
echo "loadfont unicode"
|
||||
echo "menuentry --hotkey=b 'Install Bridge&Join $VERSION - ERASES THE WHOLE DISK' {"
|
||||
echo " set gfxpayload=keep"
|
||||
echo " linux /casper/vmlinuz autoinstall ds=nocloud\;s=/cdrom/nocloud/ ---"
|
||||
echo " initrd /casper/initrd"
|
||||
echo "}"
|
||||
# пункт с ядром HWE убираем — его файлы из образа удаляются
|
||||
sed '/^set timeout/d;/^loadfont/d' "$WORK/grub/grub.orig" | awk '/^menuentry "Ubuntu Server with the HWE kernel"/{skip=1} skip&&/^}/{skip=0;next} !skip'
|
||||
echo "set menu_color_normal=white/black"
|
||||
echo "set menu_color_highlight=black/light-gray"
|
||||
echo "insmod all_video"
|
||||
echo "insmod gfxterm"
|
||||
echo "insmod gfxmenu"
|
||||
echo "insmod png"
|
||||
echo "set gfxmode=1024x768,auto"
|
||||
echo "if terminal_output gfxterm; then"
|
||||
for f in "$WORK"/boot/grub/themes/bj/*.pf2; do echo " loadfont /boot/grub/themes/bj/$(basename "$f")"; done
|
||||
echo " set theme=/boot/grub/themes/bj/theme.txt"
|
||||
menu ru
|
||||
echo "else"
|
||||
menu en
|
||||
echo "fi"
|
||||
} > "$WORK/grub/grub.cfg"
|
||||
|
||||
# md5sum.txt: установщик Ubuntu при загрузке сверяет файлы образа по этому списку (casper-md5check);
|
||||
@@ -121,14 +154,14 @@ xorriso -osirrox on -indev "$SRC" -extract /md5sum.txt "$WORK/md5.orig" >/dev/nu
|
||||
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)
|
||||
(cd "$WORK" && find bj nocloud boot/grub/themes -type f | sort | while read -r f; do echo "$(md5sum < "$f" | cut -d' ' -f1) ./$f"; done)
|
||||
} > "$WORK/md5sum.txt"
|
||||
|
||||
rm -f "$OUT"
|
||||
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/grub/grub.cfg" /boot/grub/grub.cfg -map "$WORK/boot/grub/themes" /boot/grub/themes \
|
||||
-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; }
|
||||
|
||||
Reference in New Issue
Block a user