* [devel-distro] tar2fs: добавлена поддержка grub-efi
@ 2019-12-18 20:24 Антон Мидюков
2019-12-19 21:54 ` Leonid Krivoshein
2020-01-15 13:55 ` Антон Мидюков
0 siblings, 2 replies; 7+ messages in thread
From: Антон Мидюков @ 2019-12-18 20:24 UTC (permalink / raw)
To: devel-distro
[-- Attachment #1: Type: text/plain, Size: 1867 bytes --]
Доброго времени суток!
Пару дней назад добавил в tar2fs из комплекта mkimage-profiles поддержку
grub-efi. До этого она была в зачаточном состоянии.
Для того, чтобы собрать vm/target.img с grub-efi, необходимо вызвать
цель /use/efi/grub. которая установит EFI_BOOTLOADER в grub-efi.
Изменения:
1. tar2fs для BOOTLOADER=grub-efi создаёт таблицу разделов GPT. Но,
оказывается, можно и msdos оставить, тоже должно грузиться
2. Создаётся раздел EFI размером 256 МБ
3. Для того, чтобы грузилось без записей в nvram, установка производится
командой:
grub-install --target=<target> --removable
4. Для x86_64 устанавливается ещё и 32-битный EFI загрузчик
5. sed'ом исправляется initrd16 на inirdefi для grub-efi и наоборот для
grub-pc. Это изменение необходимо, чтобы получать рабочий конфиг для
grub-pc на системах с EFI и для grub-efi на системах без EFI.
6. Можно собирать также и для aarch64. Моя сборка зависла на этапе
загрузки initrd, так что grub, вероятно, получился рабочий. А x86_64
сборки успешно грузятся в режиме EFI.
Во вложении как патч, так и сам tar2fs, так как tar2fs может
использоваться и отдельно от mkimage-profiles.
--
С уважением, Антон Мидюков <antohami@altlinux.org>
[-- Attachment #2: 0001-tar2fs-add-support-efi.patch --]
[-- Type: text/x-patch, Size: 5888 bytes --]
>From bf7b18bbfc96943b3b777d6a9553528792dbeca6 Mon Sep 17 00:00:00 2001
From: Anton Midyukov <antohami@altlinux.org>
Date: Tue, 17 Dec 2019 15:03:11 +0700
Subject: [PATCH] tar2fs: add support efi
---
bin/tar2fs | 91 ++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 81 insertions(+), 10 deletions(-)
diff --git a/bin/tar2fs b/bin/tar2fs
index 8436ee20c2..d110bc6579 100755
--- a/bin/tar2fs
+++ b/bin/tar2fs
@@ -30,6 +30,8 @@ CUR_BOUNDARY=0 # align first partition at 1MB for performance (+1)
BOOTFSTYPE=
BOOTPART=
+EFIPARTFSTYPE=
+EFIPART=
BOOTLOADER="$5"
@@ -50,7 +52,14 @@ ppc*)
ROOTPART="2"
;;
*)
- ROOTPART="1"
+ if [ "$BOOTLOADER" == grub-efi ]; then
+ EFIPART="1"
+ EFIPARTSIZEM="256"
+ EFIPARTFSTYPE="fat"
+ ROOTPART="2"
+ else
+ ROOTPART="1"
+ fi
BLOCKDEV="/dev/sda"
;;
esac
@@ -82,9 +91,14 @@ mkpart() {
CUR_BOUNDARY="$(($start + $1))"
local end="$CUR_BOUNDARY"MiB
else
- local end="-1s" # last sector of the image
+ local end="$OFFSET"MiB # last sector of the image
fi
- parting mkpart primary ext2 "$start"MiB "$end"
+ if [ -n "$2" ]; then
+ CUR_FS="$2"
+ else
+ CUR_FS=ext2
+ fi
+ parting mkpart primary "$CUR_FS" "$start"MiB "$end"
}
# a tarball containing chroot with a kernel
@@ -118,7 +132,8 @@ ROOTFSTYPE="${4:-ext4}"
ROOTDEV="$BLOCKDEV$ROOTPART"
# last preparations...
-MKFS="mkfs.$ROOTFSTYPE ${BOOTFSTYPE:+mkfs.$BOOTFSTYPE}"
+MKFS="mkfs.$ROOTFSTYPE ${BOOTFSTYPE:+mkfs.$BOOTFSTYPE} \
+ ${EFIPARTFSTYPE:+mkfs.$EFIPARTFSTYPE}"
for i in losetup sfdisk parted kpartx $MKFS; do
if ! type -t "$i" >&/dev/null; then
fatal "$i required but not found in host system"
@@ -129,15 +144,20 @@ LOOPDEV="$(losetup --find)" # would be sad about non-binary megabytes too
ROOTFS="$WORKDIR/chroot"
BOOTFS=
+EFIPARTFS=
if [ -n "$BOOTPART" ]; then
BOOTFS="$ROOTFS/boot"
fi
+if [ -n "$EFIPART" ]; then
+ EFIPARTFS="$ROOTFS/boot/efi"
+fi
exit_handler() {
rc=$?
cd /
if [ -n "$ROOTFS" ]; then
- umount ${BOOTFS:+"$BOOTFS"} "$ROOTFS"{/dev,/proc,/sys,}
+ umount ${EFIPARTFS:+"$EFIPARTFS"} ${BOOTFS:+"$BOOTFS"} \
+ "$ROOTFS"{/dev,/proc,/sys,}
if [ -n "$LOOPDEV" ]; then
kpartx -d -s "$LOOPDEV" || {
@@ -157,12 +177,15 @@ trap exit_handler EXIT ERR
# prepare disk image and a filesystem inside it
rm -f -- "$IMG"
-
-OFFSET="$(($CUR_BOUNDARY + $BOOTLOADERPARTSIZEM + $BOOTSIZEM + $ROOTSIZEM - 1))"
+OFFSET="$(($CUR_BOUNDARY + $EFIPARTSIZEM + $BOOTLOADERPARTSIZEM + $BOOTSIZEM + $ROOTSIZEM - 1))"
dd if=/dev/zero of="$IMG" conv=notrunc bs=$MB count=1 seek="$OFFSET"
losetup "$LOOPDEV" "$IMG"
-parting mklabel msdos
+if [ "$BOOTLOADER" == grub-efi ]; then
+ parting mklabel gpt
+else
+ parting mklabel msdos
+fi
if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then
case "$ARCH" in
@@ -175,6 +198,14 @@ if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then
esac
fi
+if [ -n "$EFIPART" ]; then
+ EFIDEV="$EFIDEV$EFIPART"
+ parting mkpart fat32 2048s ${EFIPARTSIZEM}M
+ CUR_BOUNDARY="$(($CUR_BOUNDARY + $EFIPARTSIZEM))"
+ parting set 1 boot on
+ parting set 1 esp on
+fi
+
if [ -n "$BOOTPART" ]; then
BOOTDEV="$BLOCKDEV$BOOTPART"
mkpart "$BOOTSIZEM"
@@ -197,6 +228,11 @@ if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then
LOOPBOOTLOADER="/dev/mapper/$(basename "$LOOPDEV")p$BOOTLOADERPART"
fi
+if [ -n "$EFIPART" ]; then
+ LOOPEFI="/dev/mapper/$(basename "$LOOPDEV")p$EFIPART"
+ mkfs.fat -F32 "$LOOPEFI"
+fi
+
ROOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPROOT")"
if [ -n "$ROOTUUID" ]; then
ROOTDEV="UUID=$ROOTUUID"
@@ -206,11 +242,18 @@ fi
if [ -n "$BOOTPART" ]; then
BOOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPBOOT")"
- if [ -n "$ROOTUUID" ]; then
+ if [ -n "$BOOTUUID" ]; then
BOOTDEV="UUID=$BOOTUUID"
fi
fi
+if [ -n "$EFIPART" ]; then
+ EFIUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPEFI")"
+ if [ -n "$EFIUUID" ]; then
+ EFIDEV="UUID=$EFIUUID"
+ fi
+fi
+
# mount and populate it
mkdir -pm755 "$ROOTFS"
mount "$LOOPROOT" "$ROOTFS"
@@ -220,6 +263,11 @@ if [ -n "$BOOTPART" ]; then
mount "$LOOPBOOT" "$BOOTFS"
fi
+if [ -n "$EFIPART" ]; then
+ mkdir -pm751 "$EFIPARTFS"
+ mount "$LOOPEFI" "$EFIPARTFS"
+fi
+
tar -C "$ROOTFS" --numeric-owner -xf "$TAR"
for i in /dev /proc /sys; do mount --bind "$i" "$ROOTFS$i"; done
@@ -234,6 +282,9 @@ fi
if [ -n "$BOOTPART" ]; then
echo "$BOOTDEV /boot $BOOTFSTYPE defaults 1 2" >> "$ROOTFS/etc/fstab"
fi
+if [ -n "$EFIPART" ]; then
+ echo "$EFIDEV /boot/efi vfat umask=0,quiet,showexec,iocharset=utf8,codepage=866 1 2" >> "$ROOTFS/etc/fstab"
+fi
# Query ARCH in chroot and redefine arch-dependent variable
ARCH="$(chroot "$ROOTFS" rpm --eval '%_host_cpu')"
@@ -323,13 +374,33 @@ image=/boot/vmlinuz
;;
grub-efi)
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg
- chroot "$ROOTFS" grub-install
+ case "$ARCH" in
+ *86)
+ chroot "$ROOTFS" grub-install --target=i386-efi --removable
+ sed -i 's/initrd16/initrdefi/g' "$ROOTFS/boot/grub/grub.cfg"
+ sed -i 's/linux16/linuxefi/g' "$ROOTFS/boot/grub/grub.cfg"
+ ;;
+ x86_64)
+ chroot "$ROOTFS" grub-install --target=i386-efi --removable
+ chroot "$ROOTFS" grub-install --target=x86_64-efi --removable
+ sed -i 's/initrd16/initrdefi/g' "$ROOTFS/boot/grub/grub.cfg"
+ sed -i 's/linux16/linuxefi/g' "$ROOTFS/boot/grub/grub.cfg"
+ ;;
+ aarch64)
+ chroot "$ROOTFS" grub-install --target=arm64-efi --removable
+ ;;
+ armh)
+ chroot "$ROOTFS" grub-install --target=arm-efi --removable
+ ;;
+ esac
;;
grub)
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg
case "$ARCH" in
*86*)
chroot "$ROOTFS" grub-install --target=i386-pc "$LOOPDEV"
+ sed -i 's/initrdefi/initrd16/g' "$ROOTFS/boot/grub/grub.cfg"
+ sed -i 's/linuxefi/linux16/g' "$ROOTFS/boot/grub/grub.cfg"
;;
ppc*)
[ -z "$LOOPBOOTLOADER" ] ||
--
2.24.1
[-- Attachment #3: tar2fs --]
[-- Type: text/plain, Size: 10545 bytes --]
#!/bin/bash -ex
# usage:
# tar2fs chroot.tar image.raw [size_in_bytes [fstype]]
. shell-error
export LANG=C
if [ $# -lt 2 ]; then
fatal "error: tar2fs needs at least two arguments"
fi
# this needs env_keep sudo setup to actually work
if [ -n "$GLOBAL_BUILDDIR" ]; then
WORKDIR="$GLOBAL_BUILDDIR/vmroot"
else
WORKDIR="$(mktemp --tmpdir -d vmroot-XXXXX)"
fi
[ -n "$WORKDIR" ] || fatal "couldn't come up with suitable WORKDIR"
[ -n "$GLOBAL_DEBUG" ] || message "WORKDIR: $WORKDIR"
MB=1048576 # a parted's "megabyte" in bytes is *broken*
SIZE_FACTOR=2 # multiply the sizes found by this value
BOOT_SIZE_FACTOR=2 # multiply /boot size by this value additionally
BOOTLOADERPARTSIZEM=0 # PReP partition size (ppc*)
CUR_BOUNDARY=0 # align first partition at 1MB for performance (+1)
BOOTFSTYPE=
BOOTPART=
EFIPARTFSTYPE=
EFIPART=
BOOTLOADER="$5"
ARCH="$(arch)" # NB: sudo => no GLOBAL_ will do either; mind qemu-*
case "$ARCH" in
e2k)
BOOTFSTYPE="ext2" # firmware knows it
BLOCKDEV="/dev/sda" # ...hopefully...
BOOTPART="1"
ROOTPART="2"
;;
ppc*)
BOOTFSTYPE="ext4"
BLOCKDEV="/dev/sda"
BOOTLOADERPART="1"
BOOTLOADERPARTSIZEM="8"
ROOTPART="2"
;;
*)
if [ "$BOOTLOADER" == grub-efi ]; then
EFIPART="1"
EFIPARTSIZEM="256"
EFIPARTFSTYPE="fat"
ROOTPART="2"
else
ROOTPART="1"
fi
BLOCKDEV="/dev/sda"
;;
esac
# figure out the part taken by /boot in the given tarball
boot_size() {
if [ -n "$BOOTPART" ]; then
tar tvf "$1" \
| awk ' \
BEGIN { sum=0 }
/^-.* \.\/boot\// { sum=sum+$3 }
END { print sum }'
else
echo "0"
fi
}
# parted wrapper for convenience
parting() { parted "$LOOPDEV" --align optimal --script -- "$@"; }
# unfortunately parted is insane enough to lump alignment controls
# into unit controls so creating adjacent partitions sized in MiB
# is not as straightforward as it might be... thus "+1" padding;
# see also http://www.gnu.org/software/parted/manual/parted.html#unit
mkpart() {
# a bit different start/end semantics to handle end of device too
local start="$(($CUR_BOUNDARY + 1))" # yes, we lose a megabyte
if [ -n "$1" ]; then
CUR_BOUNDARY="$(($start + $1))"
local end="$CUR_BOUNDARY"MiB
else
local end="$OFFSET"MiB # last sector of the image
fi
if [ -n "$2" ]; then
CUR_FS="$2"
else
CUR_FS=ext2
fi
parting mkpart primary "$CUR_FS" "$start"MiB "$end"
}
# a tarball containing chroot with a kernel
TAR="$1"
[ -s "$TAR" ] || fatal "source tarball doesn't really exist"
# a path to the image to be generated
IMG="$2"
[ -d "$(dirname "$IMG")" ] || fatal "target directory doesn't exist"
# 0 means auto; if a value is specified it holds (no /boot subtracted)
ROOTSIZE="$3"
[ -n "$ROOTSIZE" -a "$ROOTSIZE" != 0 ] || unset ROOTSIZE
# image size in bytes
TARSIZE="$(stat -Lc %s "$TAR")"
# /boot size in that tarball
BOOTSIZE="$(boot_size "$TAR")"
DEFSIZE="$(($SIZE_FACTOR * ($TARSIZE - $BOOTSIZE)))" # (exact sizes)
ROOTSIZE="$((${ROOTSIZE:-$DEFSIZE} + $MB - 1))" # for ceil rounding to MB
# image and /boot sizes in megabytes
ROOTSIZEM="$(($ROOTSIZE / $MB))"
BOOTSIZEM="$((($SIZE_FACTOR * $BOOT_SIZE_FACTOR * $BOOTSIZE + $MB - 1) / $MB))"
# tested to work: ext[234], jfs
# NB: xfs doesn't have a spare sector for the bootloader
ROOTFSTYPE="${4:-ext4}"
# single root partition hardwired so far,
# add another image for home/data/swap if needed
ROOTDEV="$BLOCKDEV$ROOTPART"
# last preparations...
MKFS="mkfs.$ROOTFSTYPE ${BOOTFSTYPE:+mkfs.$BOOTFSTYPE} \
${EFIPARTFSTYPE:+mkfs.$EFIPARTFSTYPE}"
for i in losetup sfdisk parted kpartx $MKFS; do
if ! type -t "$i" >&/dev/null; then
fatal "$i required but not found in host system"
fi
done
LOOPDEV="$(losetup --find)" # would be sad about non-binary megabytes too
ROOTFS="$WORKDIR/chroot"
BOOTFS=
EFIPARTFS=
if [ -n "$BOOTPART" ]; then
BOOTFS="$ROOTFS/boot"
fi
if [ -n "$EFIPART" ]; then
EFIPARTFS="$ROOTFS/boot/efi"
fi
exit_handler() {
rc=$?
cd /
if [ -n "$ROOTFS" ]; then
umount ${EFIPARTFS:+"$EFIPARTFS"} ${BOOTFS:+"$BOOTFS"} \
"$ROOTFS"{/dev,/proc,/sys,}
if [ -n "$LOOPDEV" ]; then
kpartx -d -s "$LOOPDEV" || {
sleep 10
kpartx -d -s -v "$LOOPDEV"
}
losetup --detach "$LOOPDEV"
fi
rm -r -- "$ROOTFS"
rmdir -- "$WORKDIR"
fi
exit $rc
}
# handle -e in shebang as well
trap exit_handler EXIT ERR
# prepare disk image and a filesystem inside it
rm -f -- "$IMG"
OFFSET="$(($CUR_BOUNDARY + $EFIPARTSIZEM + $BOOTLOADERPARTSIZEM + $BOOTSIZEM + $ROOTSIZEM - 1))"
dd if=/dev/zero of="$IMG" conv=notrunc bs=$MB count=1 seek="$OFFSET"
losetup "$LOOPDEV" "$IMG"
if [ "$BOOTLOADER" == grub-efi ]; then
parting mklabel gpt
else
parting mklabel msdos
fi
if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then
case "$ARCH" in
ppc*)
parting mkpart primary ext2 2048s ${BOOTLOADERPARTSIZEM}M
CUR_BOUNDARY="$(($CUR_BOUNDARY + $BOOTLOADERPARTSIZEM))"
parting set 1 prep on
parting set 1 boot on
;;
esac
fi
if [ -n "$EFIPART" ]; then
EFIDEV="$EFIDEV$EFIPART"
parting mkpart fat32 2048s ${EFIPARTSIZEM}M
CUR_BOUNDARY="$(($CUR_BOUNDARY + $EFIPARTSIZEM))"
parting set 1 boot on
parting set 1 esp on
fi
if [ -n "$BOOTPART" ]; then
BOOTDEV="$BLOCKDEV$BOOTPART"
mkpart "$BOOTSIZEM"
fi
# not ROOTSIZEM but "the rest"; somewhat non-trivial arithmetics lurk in parted
mkpart
kpartx -a -s "$LOOPDEV"
LOOPROOT="/dev/mapper/$(basename "$LOOPDEV")p$ROOTPART"
mkfs."$ROOTFSTYPE" "$LOOPROOT"
if [ -n "$BOOTPART" ]; then
LOOPBOOT="/dev/mapper/$(basename "$LOOPDEV")p$BOOTPART"
mkfs."$BOOTFSTYPE" "$LOOPBOOT"
fi
if [ -n "$BOOTLOADERPART" ] && [ -n "$BOOTLOADERPARTSIZEM" ]; then
LOOPBOOTLOADER="/dev/mapper/$(basename "$LOOPDEV")p$BOOTLOADERPART"
fi
if [ -n "$EFIPART" ]; then
LOOPEFI="/dev/mapper/$(basename "$LOOPDEV")p$EFIPART"
mkfs.fat -F32 "$LOOPEFI"
fi
ROOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPROOT")"
if [ -n "$ROOTUUID" ]; then
ROOTDEV="UUID=$ROOTUUID"
else
ROOTDEV="$LOOPROOT"
fi
if [ -n "$BOOTPART" ]; then
BOOTUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPBOOT")"
if [ -n "$BOOTUUID" ]; then
BOOTDEV="UUID=$BOOTUUID"
fi
fi
if [ -n "$EFIPART" ]; then
EFIUUID="$(blkid -s UUID -o value -c /dev/null "$LOOPEFI")"
if [ -n "$EFIUUID" ]; then
EFIDEV="UUID=$EFIUUID"
fi
fi
# mount and populate it
mkdir -pm755 "$ROOTFS"
mount "$LOOPROOT" "$ROOTFS"
if [ -n "$BOOTPART" ]; then
mkdir -pm700 "$BOOTFS"
mount "$LOOPBOOT" "$BOOTFS"
fi
if [ -n "$EFIPART" ]; then
mkdir -pm751 "$EFIPARTFS"
mount "$LOOPEFI" "$EFIPARTFS"
fi
tar -C "$ROOTFS" --numeric-owner -xf "$TAR"
for i in /dev /proc /sys; do mount --bind "$i" "$ROOTFS$i"; done
# loop device so lilo could work...
if grep -qe "[[:space:]]/[[:space:]]" "$ROOTFS/etc/fstab"; then \
sed -i "s/LABEL=ROOT/$ROOTDEV/" "$ROOTFS/etc/fstab"
else
echo "$ROOTDEV / $ROOTFSTYPE relatime 1 1" >> "$ROOTFS/etc/fstab"
fi
# target device at once
if [ -n "$BOOTPART" ]; then
echo "$BOOTDEV /boot $BOOTFSTYPE defaults 1 2" >> "$ROOTFS/etc/fstab"
fi
if [ -n "$EFIPART" ]; then
echo "$EFIDEV /boot/efi vfat umask=0,quiet,showexec,iocharset=utf8,codepage=866 1 2" >> "$ROOTFS/etc/fstab"
fi
# Query ARCH in chroot and redefine arch-dependent variable
ARCH="$(chroot "$ROOTFS" rpm --eval '%_host_cpu')"
# NB: don't stick BOOTFS here, it has slightly different semantics
pushd $ROOTFS/boot
# 4.9.76-elbrus-def-alt1.11.1 -> def
get_label() { echo "${1# *}" | sed -r 's,.*elbrus-([0-9a-z]+)-.*$,\1,'; }
KVERSIONS=
KVERSIONS="$(chroot "$ROOTFS" rpm -qa 'kernel-image*' \
--qf '%{installtime} %{version}-%{name}-%{release}\n' \
| sort -n \
| cut -f 2 -d ' ' \
| sed 's/kernel-image-//')"
[ -n "$KVERSIONS" ] || fatal "unable to deduce kernel version"
rm -f .origver
# clean fstab
sed -i "/LABEL=ROOT/d" "$ROOTFS/etc/fstab"
# ...target device too
sed -i "s,$LOOPROOT,$ROOTDEV," "$ROOTFS/etc/fstab"
echo "** KVERSIONS=[$KVERSIONS]" >&2
if [ "`echo $KVERSIONS | wc -w`" = 1 ]; then # 2+ labels
echo -e "default=`get_label $KVERSIONS`\n" >> boot.conf
fi
# FIXME: relies on particular (current) kernel package naming scheme
for v in $KVERSIONS; do
l="`get_label "$v"`"
cat >> boot.conf <<EOF
label=$l
partition=0
image=/image-$v
initrd=/initrd-$v.img
cmdline=console=ttyS0,115200 console=tty0 consoleblank=0 hardreset root=UUID=$ROOTUUID
EOF
done
echo "** start of boot.conf"
cat boot.conf
echo "** end of boot.conf"
popd
# Setup bootloader
case "$BOOTLOADER" in
uboot)
EXTLINUX_CONF="$ROOTFS/boot/extlinux/extlinux.conf"
sed -i "s/LABEL=ROOT/$ROOTDEV/g" "$EXTLINUX_CONF"
;;
lilo)
# configure and install bootloader
REGEXP='^.*: ([0-9]+) cylinders, ([0-9]+) heads, ([0-9]+) sectors/track*$'
set -- $(sfdisk -g "$LOOPDEV" | grep -E "$REGEXP" | sed -r "s@$REGEXP@\1 \2 \3@")
LILO_COMMON="lba32
delay=1
vga=0
image=/boot/vmlinuz
initrd=/boot/initrd.img
append=\"root=$ROOTDEV rootdelay=3 console=tty1 console=ttyS0,115200n8\"
label=linux"
cat > "$ROOTFS"/etc/lilo-loop.conf <<-EOF
boot=$LOOPDEV
disk=$LOOPDEV
bios=0x80
cylinders=$1
heads=$2
sectors=$3
partition=$LOOPROOT
start=63
$LILO_COMMON
EOF
chroot "$ROOTFS" lilo -C /etc/lilo-loop.conf
cat > "$ROOTFS"/etc/lilo.conf <<-EOF
boot=$BLOCKDEV
$LILO_COMMON
EOF
;;
grub-efi)
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg
case "$ARCH" in
*86)
chroot "$ROOTFS" grub-install --target=i386-efi --removable
sed -i 's/initrd16/initrdefi/g' "$ROOTFS/boot/grub/grub.cfg"
sed -i 's/linux16/linuxefi/g' "$ROOTFS/boot/grub/grub.cfg"
;;
x86_64)
chroot "$ROOTFS" grub-install --target=i386-efi --removable
chroot "$ROOTFS" grub-install --target=x86_64-efi --removable
sed -i 's/initrd16/initrdefi/g' "$ROOTFS/boot/grub/grub.cfg"
sed -i 's/linux16/linuxefi/g' "$ROOTFS/boot/grub/grub.cfg"
;;
aarch64)
chroot "$ROOTFS" grub-install --target=arm64-efi --removable
;;
armh)
chroot "$ROOTFS" grub-install --target=arm-efi --removable
;;
esac
;;
grub)
chroot "$ROOTFS" grub-mkconfig -o /boot/grub/grub.cfg
case "$ARCH" in
*86*)
chroot "$ROOTFS" grub-install --target=i386-pc "$LOOPDEV"
sed -i 's/initrdefi/initrd16/g' "$ROOTFS/boot/grub/grub.cfg"
sed -i 's/linuxefi/linux16/g' "$ROOTFS/boot/grub/grub.cfg"
;;
ppc*)
[ -z "$LOOPBOOTLOADER" ] ||
chroot "$ROOTFS" grub-install --target=powerpc-ieee1275 \
--no-nvram "$LOOPBOOTLOADER"
;;
esac
;;
esac
if [ -n "$SUDO_USER" ]; then
chown "$SUDO_USER:$(id -g "$SUDO_USER")" "$IMG" ||:
fi
# maybe qemu interpreter was copied to chroot;
# this is no longer necessary, remove
rm -rf "$ROOTFS"/.host ||:
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2019-12-18 20:24 [devel-distro] tar2fs: добавлена поддержка grub-efi Антон Мидюков
@ 2019-12-19 21:54 ` Leonid Krivoshein
2019-12-20 3:52 ` Антон Мидюков
2020-01-15 13:55 ` Антон Мидюков
1 sibling, 1 reply; 7+ messages in thread
From: Leonid Krivoshein @ 2019-12-19 21:54 UTC (permalink / raw)
To: devel-distro
Привет!
18.12.2019 23:24, Антон Мидюков пишет:
> 3. Для того, чтобы грузилось без записей в nvram, установка
> производится командой:
>
> grub-install --target=<target> --removable
--no-nvram
don't update the `boot-device'/`Boot*' NVRAM variables.
This option is only available on EFI and IEEE1275 targets.
--removable
the installation device is removable. This option is only
available on EFI.
--
Best regards,
Leonid Krivoshein.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2019-12-19 21:54 ` Leonid Krivoshein
@ 2019-12-20 3:52 ` Антон Мидюков
2019-12-20 16:24 ` Leonid Krivoshein
0 siblings, 1 reply; 7+ messages in thread
From: Антон Мидюков @ 2019-12-20 3:52 UTC (permalink / raw)
To: devel-distro
20.12.2019 4:54, Leonid Krivoshein пишет:
>
> 18.12.2019 23:24, Антон Мидюков пишет:
>> 3. Для того, чтобы грузилось без записей в nvram, установка
>> производится командой:
>>
>> grub-install --target=<target> --removable
>
>
> --no-nvram
> don't update the `boot-device'/`Boot*' NVRAM variables.
> This option is only available on EFI and IEEE1275 targets.
Используя --no-nvram, придётся прописывать в nvram или выбирать руками
загрузчик при загрузке.
>
> --removable
> the installation device is removable. This option is
> only available on EFI.
>
а с --removable ничего больше делать не надо :-) Но это для случая,
когда на носителе будет лишь одна ОС.
--
С уважением, Антон Мидюков <antohami@altlinux.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2019-12-20 3:52 ` Антон Мидюков
@ 2019-12-20 16:24 ` Leonid Krivoshein
2019-12-20 16:47 ` Антон Мидюков
0 siblings, 1 reply; 7+ messages in thread
From: Leonid Krivoshein @ 2019-12-20 16:24 UTC (permalink / raw)
To: devel-distro
20.12.2019 6:52, Антон Мидюков пишет:
> 20.12.2019 4:54, Leonid Krivoshein пишет:
>>
>> 18.12.2019 23:24, Антон Мидюков пишет:
>>> 3. Для того, чтобы грузилось без записей в nvram, установка
>>> производится командой:
>>>
>>> grub-install --target=<target> --removable
>>
>>
>> --no-nvram
>> don't update the `boot-device'/`Boot*' NVRAM variables.
>> This option is only available on EFI and IEEE1275 targets.
> Используя --no-nvram, придётся прописывать в nvram или выбирать руками
> загрузчик при загрузке.
>>
>> --removable
>> the installation device is removable. This option is
>> only available on EFI.
>>
> а с --removable ничего больше делать не надо :-) Но это для случая,
> когда на носителе будет лишь одна ОС.
>
Да, он просто кладёт загрузчик под именем
/boot/efi/EFI/BOOT/bootx64.efi, а не grubx64.efi. Просто с --removable и
список GRUB'овских модулей может быть другой, хотя и не уверен.
--
Best regards,
Leonid Krivoshein.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2019-12-20 16:24 ` Leonid Krivoshein
@ 2019-12-20 16:47 ` Антон Мидюков
0 siblings, 0 replies; 7+ messages in thread
From: Антон Мидюков @ 2019-12-20 16:47 UTC (permalink / raw)
To: devel-distro
20.12.2019 23:24, Leonid Krivoshein пишет:
>
> 20.12.2019 6:52, Антон Мидюков пишет:
>> 20.12.2019 4:54, Leonid Krivoshein пишет:
>>>
>>> 18.12.2019 23:24, Антон Мидюков пишет:
>>>> 3. Для того, чтобы грузилось без записей в nvram, установка
>>>> производится командой:
>>>>
>>>> grub-install --target=<target> --removable
>>>
>>>
>>> --no-nvram
>>> don't update the `boot-device'/`Boot*' NVRAM
>>> variables. This option is only available on EFI and IEEE1275 targets.
>> Используя --no-nvram, придётся прописывать в nvram или выбирать
>> руками загрузчик при загрузке.
>>>
>>> --removable
>>> the installation device is removable. This option is
>>> only available on EFI.
>>>
>> а с --removable ничего больше делать не надо :-) Но это для случая,
>> когда на носителе будет лишь одна ОС.
>>
>
> Да, он просто кладёт загрузчик под именем
> /boot/efi/EFI/BOOT/bootx64.efi, а не grubx64.efi. Просто с --removable
> и список GRUB'овских модулей может быть другой, хотя и не уверен.
>
Надо будет сравнить, значит.
--
С уважением, Антон Мидюков <antohami@altlinux.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2019-12-18 20:24 [devel-distro] tar2fs: добавлена поддержка grub-efi Антон Мидюков
2019-12-19 21:54 ` Leonid Krivoshein
@ 2020-01-15 13:55 ` Антон Мидюков
2020-01-15 13:57 ` Антон Мидюков
1 sibling, 1 reply; 7+ messages in thread
From: Антон Мидюков @ 2020-01-15 13:55 UTC (permalink / raw)
To: devel-distro
19.12.2019 3:24, Антон Мидюков пишет:
>
> 3. Для того, чтобы грузилось без записей в nvram, установка
> производится командой:
>
> grub-install --target=<target> --removable
>
Выяснил интересный момент. Если устанавливать одновременно с опциями
--removable и --uefi-secure-boot, то не грузится. Погуглил, не только у
нас так не работает. Похоже, так делать нельзя.
А в текущем виде подходит только для небезопасной загрузки, что впрочем
для виртуальных машин вполне нормально.
И всё же у меня вопрос, что лучше:
1. Как сейчас, чтобы из коробки грузилось, но только с отключенным
secure boot?
2. или же устанавливать с параметрами --uefi-secure-boot --no-nvram?
Тогда придётся руками прописывать в nvram, но и с включенным secure boot
должно грузиться.
3. Или попробовать реализовать сборку подписанного загрузчика, как это
делается в mkimage-profiles?
> 5. sed'ом исправляется initrd16 на inirdefi для grub-efi и наоборот
> для grub-pc. Это изменение необходимо, чтобы получать рабочий конфиг
> для grub-pc на системах с EFI и для grub-efi на системах без EFI.
Тут нужно добавить, что если собирать на системе без EFI не добавляется
пункт System setup, и наоборот при сборке на системе с EFI этот пункт
добавляется для grub-pc. Также при сборке для aarch64 этот пункт не
добавляется всегда, так как сборка проходит в qemu без EFI. Вот такие
вот недостатки, однако.
--
С уважением, Антон Мидюков <antohami@altlinux.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [devel-distro] tar2fs: добавлена поддержка grub-efi
2020-01-15 13:55 ` Антон Мидюков
@ 2020-01-15 13:57 ` Антон Мидюков
0 siblings, 0 replies; 7+ messages in thread
From: Антон Мидюков @ 2020-01-15 13:57 UTC (permalink / raw)
To: devel-distro
15.01.2020 20:55, Антон Мидюков пишет:
>
> 3. Или попробовать реализовать сборку подписанного загрузчика, как это
> делается в mkimage-profiles?
В mkimage, конечно же, в tools/mki-copy-efiboot
--
С уважением, Антон Мидюков <antohami@altlinux.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-01-15 13:57 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-18 20:24 [devel-distro] tar2fs: добавлена поддержка grub-efi Антон Мидюков
2019-12-19 21:54 ` Leonid Krivoshein
2019-12-20 3:52 ` Антон Мидюков
2019-12-20 16:24 ` Leonid Krivoshein
2019-12-20 16:47 ` Антон Мидюков
2020-01-15 13:55 ` Антон Мидюков
2020-01-15 13:57 ` Антон Мидюков
ALT Linux Distributions development
This inbox may be cloned and mirrored by anyone:
git clone --mirror http://lore.altlinux.org/devel-distro/0 devel-distro/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 devel-distro devel-distro/ http://lore.altlinux.org/devel-distro \
devel-distro@lists.altlinux.org devel-distro@lists.altlinux.ru devel-distro@lists.altlinux.com
public-inbox-index devel-distro
Example config snippet for mirrors.
Newsgroup available over NNTP:
nntp://lore.altlinux.org/org.altlinux.lists.devel-distro
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git