mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-05-05 07:41:31 +00:00
Use losetup instead of kpartx to resolve race conditions in riscv64 image builds.
This commit is contained in:
parent
786eb7dc4c
commit
582c081675
7
debian/changelog
vendored
7
debian/changelog
vendored
@ -1,3 +1,10 @@
|
|||||||
|
livecd-rootfs (2.765.32) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Use losetup instead of kpartx to resolve race conditions in riscv64
|
||||||
|
image builds.
|
||||||
|
|
||||||
|
-- Steve Langasek <steve.langasek@ubuntu.com> Sun, 03 Dec 2023 22:03:36 -0800
|
||||||
|
|
||||||
livecd-rootfs (2.765.31) jammy; urgency=medium
|
livecd-rootfs (2.765.31) jammy; urgency=medium
|
||||||
|
|
||||||
[ John Chittum ]
|
[ John Chittum ]
|
||||||
|
1
debian/control
vendored
1
debian/control
vendored
@ -27,6 +27,7 @@ Depends: ${misc:Depends},
|
|||||||
lsb-release,
|
lsb-release,
|
||||||
lzma,
|
lzma,
|
||||||
make,
|
make,
|
||||||
|
mount,
|
||||||
parted,
|
parted,
|
||||||
procps,
|
procps,
|
||||||
python3,
|
python3,
|
||||||
|
@ -41,7 +41,7 @@ create_partitions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_and_mount_uefi_partition() {
|
create_and_mount_uefi_partition() {
|
||||||
uefi_dev="/dev/mapper${loop_device///dev/}p15"
|
uefi_dev="${loop_device}p15"
|
||||||
mountpoint="$1"
|
mountpoint="$1"
|
||||||
mkfs.vfat -F 32 -n UEFI "${uefi_dev}"
|
mkfs.vfat -F 32 -n UEFI "${uefi_dev}"
|
||||||
|
|
||||||
|
@ -10,16 +10,13 @@ loop_raw=
|
|||||||
backing_img=
|
backing_img=
|
||||||
|
|
||||||
clean_loops() {
|
clean_loops() {
|
||||||
local kpartx_ret
|
if [ -n "${loop_device}" ]; then
|
||||||
local kpartx_stdout
|
|
||||||
|
|
||||||
if [ -n "${backing_img}" ]; then
|
|
||||||
# If something just finished writing to the device or a
|
# If something just finished writing to the device or a
|
||||||
# partition (e.g. the zerofree in umount_partition) udev might
|
# partition (e.g. the zerofree in umount_partition) udev might
|
||||||
# still be processing the device.
|
# still be processing the device.
|
||||||
udevadm settle
|
udevadm settle
|
||||||
sync
|
sync
|
||||||
kpartx -v -d "${backing_img}"
|
losetup -v -d "${loop_device}"
|
||||||
unset backing_img
|
unset backing_img
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -63,18 +60,15 @@ mount_image() {
|
|||||||
trap clean_loops EXIT
|
trap clean_loops EXIT
|
||||||
backing_img="$1"
|
backing_img="$1"
|
||||||
local rootpart="$2"
|
local rootpart="$2"
|
||||||
kpartx_mapping="$(kpartx -s -v -a ${backing_img})"
|
loop_device=$(losetup --show -f -P -v ${backing_img})
|
||||||
|
|
||||||
# Find the loop device
|
|
||||||
loop_p1="$(echo -e ${kpartx_mapping} | head -n1 | awk '{print$3}')"
|
|
||||||
loop_device="/dev/${loop_p1%p[0-9]*}"
|
|
||||||
if [ ! -b ${loop_device} ]; then
|
if [ ! -b ${loop_device} ]; then
|
||||||
echo "unable to find loop device for ${backing_img}"
|
echo "unable to find loop device for ${backing_img}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Find the rootfs location
|
# Find the rootfs location
|
||||||
rootfs_dev_mapper="/dev/mapper/${loop_p1%%[0-9]}${rootpart}"
|
rootfs_dev_mapper="${loop_device}p${rootpart}"
|
||||||
if [ ! -b "${rootfs_dev_mapper}" ]; then
|
if [ ! -b "${rootfs_dev_mapper}" ]; then
|
||||||
echo "${rootfs_dev_mapper} is not a block device";
|
echo "${rootfs_dev_mapper} is not a block device";
|
||||||
exit 1
|
exit 1
|
||||||
@ -211,7 +205,7 @@ mount_disk_image() {
|
|||||||
mount_image ${disk_image} 1
|
mount_image ${disk_image} 1
|
||||||
mount_partition "${rootfs_dev_mapper}" $mountpoint
|
mount_partition "${rootfs_dev_mapper}" $mountpoint
|
||||||
|
|
||||||
local uefi_dev="/dev/mapper${loop_device///dev/}p15"
|
local uefi_dev="${loop_device}p15"
|
||||||
if [ -b ${uefi_dev} -a -e $mountpoint/boot/efi ]; then
|
if [ -b ${uefi_dev} -a -e $mountpoint/boot/efi ]; then
|
||||||
mount "${uefi_dev}" $mountpoint/boot/efi
|
mount "${uefi_dev}" $mountpoint/boot/efi
|
||||||
fi
|
fi
|
||||||
@ -252,7 +246,7 @@ umount_partition() {
|
|||||||
umount_disk_image() {
|
umount_disk_image() {
|
||||||
mountpoint="$1"
|
mountpoint="$1"
|
||||||
|
|
||||||
local uefi_dev="/dev/mapper${loop_device///dev/}p15"
|
local uefi_dev="${loop_device}p15"
|
||||||
if [ -e "$mountpoint/boot/efi" -a -b "$uefi_dev" ]; then
|
if [ -e "$mountpoint/boot/efi" -a -b "$uefi_dev" ]; then
|
||||||
# zero fill free space in UEFI partition
|
# zero fill free space in UEFI partition
|
||||||
cat < /dev/zero > "$mountpoint/boot/efi/bloat_file" 2> /dev/null || true
|
cat < /dev/zero > "$mountpoint/boot/efi/bloat_file" 2> /dev/null || true
|
||||||
|
@ -49,7 +49,7 @@ GRUB_TIMEOUT=0
|
|||||||
# Set the default commandline
|
# Set the default commandline
|
||||||
GRUB_CMDLINE_LINUX_DEFAULT="console=hvc0 earlyprintk"
|
GRUB_CMDLINE_LINUX_DEFAULT="console=hvc0 earlyprintk"
|
||||||
EOF
|
EOF
|
||||||
prep_partition="/dev/mapper${loop_device///dev/}p2"
|
prep_partition="${loop_device}p2"
|
||||||
chroot mountpoint grub-install "${prep_partition}" \
|
chroot mountpoint grub-install "${prep_partition}" \
|
||||||
--no-nvram \
|
--no-nvram \
|
||||||
--boot-directory=/boot \
|
--boot-directory=/boot \
|
||||||
|
@ -166,7 +166,7 @@ create_partitions() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
create_and_mount_uefi_partition() {
|
create_and_mount_uefi_partition() {
|
||||||
uefi_dev="/dev/mapper${loop_device///dev/}p15"
|
uefi_dev="${loop_device}p15"
|
||||||
mountpoint="$1"
|
mountpoint="$1"
|
||||||
mkfs.vfat -F 32 -n UEFI "${uefi_dev}"
|
mkfs.vfat -F 32 -n UEFI "${uefi_dev}"
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ install_grub() {
|
|||||||
# Server preinstalled image
|
# Server preinstalled image
|
||||||
# Setup cidata sample data & nocloud fallback
|
# Setup cidata sample data & nocloud fallback
|
||||||
# Allows login on first boot with or without metadata
|
# Allows login on first boot with or without metadata
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p14"
|
cidata_dev="${loop_device}p14"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
setup_cinocloud mountpoint
|
setup_cinocloud mountpoint
|
||||||
fi
|
fi
|
||||||
@ -215,7 +215,7 @@ install_grub() {
|
|||||||
# Server preinstalled image
|
# Server preinstalled image
|
||||||
# Setup cidata sample data & nocloud fallback
|
# Setup cidata sample data & nocloud fallback
|
||||||
# Allows login on first boot with or without metadata
|
# Allows login on first boot with or without metadata
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p14"
|
cidata_dev="${loop_device}p14"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
setup_cinocloud mountpoint
|
setup_cinocloud mountpoint
|
||||||
fi
|
fi
|
||||||
@ -227,7 +227,7 @@ install_grub() {
|
|||||||
# Server preinstalled image
|
# Server preinstalled image
|
||||||
# Setup cidata sample data & nocloud fallback
|
# Setup cidata sample data & nocloud fallback
|
||||||
# Allows login on first boot with or without metadata
|
# Allows login on first boot with or without metadata
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p13"
|
cidata_dev="${loop_device}p13"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
setup_cinocloud mountpoint
|
setup_cinocloud mountpoint
|
||||||
fi
|
fi
|
||||||
@ -253,10 +253,10 @@ install_grub() {
|
|||||||
efi_target=riscv64-efi
|
efi_target=riscv64-efi
|
||||||
# The real U-Boot
|
# The real U-Boot
|
||||||
chroot mountpoint apt-get install -qqy u-boot-microchip
|
chroot mountpoint apt-get install -qqy u-boot-microchip
|
||||||
loader="/dev/mapper${loop_device///dev/}p13"
|
loader="${loop_device}p13"
|
||||||
dd if=mountpoint/usr/lib/u-boot/microchip_icicle/u-boot.payload of=$loader
|
dd if=mountpoint/usr/lib/u-boot/microchip_icicle/u-boot.payload of=$loader
|
||||||
# Provide end-user modifyable CIDATA
|
# Provide end-user modifyable CIDATA
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p12"
|
cidata_dev="${loop_device}p12"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
# Provide stock nocloud datasource
|
# Provide stock nocloud datasource
|
||||||
# Allow interactive login on baremetal board,
|
# Allow interactive login on baremetal board,
|
||||||
@ -297,15 +297,15 @@ install_grub() {
|
|||||||
# nezha-boot0 is actually compatible with the LicheeRV boards (and probably other D1-based boards)
|
# nezha-boot0 is actually compatible with the LicheeRV boards (and probably other D1-based boards)
|
||||||
chroot mountpoint apt-get install -qqy nezha-boot0
|
chroot mountpoint apt-get install -qqy nezha-boot0
|
||||||
# FSBL, which gets U-Boot SPL
|
# FSBL, which gets U-Boot SPL
|
||||||
loader1="/dev/mapper${loop_device///dev/}p13"
|
loader1="${loop_device}p13"
|
||||||
dd if=mountpoint/usr/lib/u-boot/nezha/boot0_sdcard_sun20iw1p1.bin of=$loader1
|
dd if=mountpoint/usr/lib/u-boot/nezha/boot0_sdcard_sun20iw1p1.bin of=$loader1
|
||||||
# The real U-Boot
|
# The real U-Boot
|
||||||
# u-boot-nezha actually contains both the LicheeRV and the Nezha boards support
|
# u-boot-nezha actually contains both the LicheeRV and the Nezha boards support
|
||||||
chroot mountpoint apt-get install -qqy u-boot-nezha
|
chroot mountpoint apt-get install -qqy u-boot-nezha
|
||||||
loader2="/dev/mapper${loop_device///dev/}p14"
|
loader2="${loop_device}p14"
|
||||||
dd if=mountpoint/usr/lib/u-boot/${SUBARCH}/u-boot.toc1 of=$loader2
|
dd if=mountpoint/usr/lib/u-boot/${SUBARCH}/u-boot.toc1 of=$loader2
|
||||||
# Provide end-user modifyable CIDATA
|
# Provide end-user modifyable CIDATA
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p12"
|
cidata_dev="${loop_device}p12"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
# Provide stock nocloud datasource
|
# Provide stock nocloud datasource
|
||||||
# Allow interactive login on baremetal SiFive board,
|
# Allow interactive login on baremetal SiFive board,
|
||||||
@ -331,7 +331,7 @@ install_grub() {
|
|||||||
efi_target=riscv64-efi
|
efi_target=riscv64-efi
|
||||||
|
|
||||||
# factory u-boot requires a p3 partition with /boot/uEnv.txt file
|
# factory u-boot requires a p3 partition with /boot/uEnv.txt file
|
||||||
uenv_dev="/dev/mapper${loop_device///dev/}p3"
|
uenv_dev="${loop_device}p3"
|
||||||
mkfs.ext4 "${uenv_dev}"
|
mkfs.ext4 "${uenv_dev}"
|
||||||
uenv_mnt_dir=`mktemp -d uenvXXX`
|
uenv_mnt_dir=`mktemp -d uenvXXX`
|
||||||
mount "${uenv_dev}" "${uenv_mnt_dir}"
|
mount "${uenv_dev}" "${uenv_mnt_dir}"
|
||||||
@ -359,7 +359,7 @@ EOF
|
|||||||
umount "${uenv_mnt_dir}"
|
umount "${uenv_mnt_dir}"
|
||||||
rmdir "${uenv_mnt_dir}"
|
rmdir "${uenv_mnt_dir}"
|
||||||
# Provide end-user modifyable CIDATA
|
# Provide end-user modifyable CIDATA
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p12"
|
cidata_dev="${loop_device}p12"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
# Provide stock nocloud datasource
|
# Provide stock nocloud datasource
|
||||||
# Allow interactive login on baremetal SiFive board,
|
# Allow interactive login on baremetal SiFive board,
|
||||||
@ -376,13 +376,13 @@ EOF
|
|||||||
fi
|
fi
|
||||||
chroot mountpoint apt-get install -qqy u-boot-sifive
|
chroot mountpoint apt-get install -qqy u-boot-sifive
|
||||||
# FSBL, which gets U-Boot SPL
|
# FSBL, which gets U-Boot SPL
|
||||||
loader1="/dev/mapper${loop_device///dev/}p13"
|
loader1="${loop_device}p13"
|
||||||
# The real U-Boot
|
# The real U-Boot
|
||||||
loader2="/dev/mapper${loop_device///dev/}p14"
|
loader2="${loop_device}p14"
|
||||||
dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot-spl.bin of=$loader1
|
dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot-spl.bin of=$loader1
|
||||||
dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot.itb of=$loader2
|
dd if=mountpoint/usr/lib/u-boot/${u_boot_arch}/u-boot.itb of=$loader2
|
||||||
# Provide end-user modifyable CIDATA
|
# Provide end-user modifyable CIDATA
|
||||||
cidata_dev="/dev/mapper${loop_device///dev/}p12"
|
cidata_dev="${loop_device}p12"
|
||||||
setup_cidata "${cidata_dev}"
|
setup_cidata "${cidata_dev}"
|
||||||
# Provide stock nocloud datasource
|
# Provide stock nocloud datasource
|
||||||
# Allow interactive login on baremetal SiFive board,
|
# Allow interactive login on baremetal SiFive board,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user