Your message dated Tue, 4 Jun 2019 20:24:10 +0200 with message-id <9fdf493e-9903-d67b-b213-4f8bd205cb5f@debian.org> and subject line Re: Bug#929486: unblock: debootstick/2.3 has caused the Debian Bug report #929486, regarding unblock: debootstick/2.3 to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 929486: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=929486 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: Debian Bug Tracking System <submit@bugs.debian.org>
- Subject: unblock: debootstick/2.3
- From: Etienne Dublé <etienne.duble@gmail.com>
- Date: Fri, 24 May 2019 14:20:54 +0000
- Message-id: <155870765495.786.10043145949733658417.reportbug@vm-debian>
Package: release.debian.org Severity: normal User: release.debian.org@packages.debian.org Usertags: unblock Please unblock package debootstick Package 2.3 of debootstick was just uploaded to experimental by my sponsor (Vincent Danjean). If you accept this unblock request, he will upload it to unstable. This release compiles three bug fixes I hope buster users can get: 1- Bug#928080 - A fix about migration mode (long timeouts on LVM commands, was mostly unusable) 2- Bug#929355 - A fix about sporadic failures with LVM commands 3- Bug#929356 - A fix for debootstick to work with a chroot based on Ubuntu >= 18.04 Severity of bugs 1 and 2 is "important". Bug 3 was reported with severity "normal". However, fixing it just meant updating two constant values (see attachment "fix-3.diff"), and it improves significantly the usability of the software. So I hope this fix can be included. If not, I can rebuild the package. The debdiff is attached. For clarity, I also attached a separate diff file showing code changes related to each of the 3 fixes. Thanks. unblock debootstick/2.3 -- System Information: Debian Release: 10.0 APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 4.19.0-5-amd64 (SMP w/1 CPU core) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), LANGUAGE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enableddiff -Nru debootstick-2.2/debian/changelog debootstick-2.3/debian/changelog --- debootstick-2.2/debian/changelog 2019-03-08 12:48:40.000000000 +0000 +++ debootstick-2.3/debian/changelog 2019-05-22 12:03:47.000000000 +0000 @@ -1,3 +1,11 @@ +debootstick (2.3) unstable; urgency=medium + + * Fix new LVM versions hanging in migration procedure (closes: Bug#928080). + * Fix migration script sometimes failing (closes: Bug#929355). + * Fix handling of chroots based on Ubuntu >= 18.04 (closes: Bug#929356). + + -- Etienne Dublé <etienne.duble@gmail.com> Wed, 22 May 2019 13:56:42 +0000 + debootstick (2.2) unstable; urgency=medium * Fix new LVM versions hanging in chroot (closes: Bug#923852). diff -Nru debootstick-2.2/debootstick debootstick-2.3/debootstick --- debootstick-2.2/debootstick 2019-03-08 12:40:46.000000000 +0000 +++ debootstick-2.3/debootstick 2019-05-22 12:03:47.000000000 +0000 @@ -5,7 +5,7 @@ IMAGE_SIZE_MARGIN_KB=0 # fs size estimation is enough pessimistic MKSQUASHFS_OPTS="-b 1M -comp xz" ONE_GIGABYTE_KB=$((1024*1024)) -MAX_WORK_IMAGE_OVERHEAD_KB=$ONE_GIGABYTE_KB +MAX_WORK_IMAGE_OVERHEAD_KB=$((2*ONE_GIGABYTE_KB)) DEBUG=0 DD="dd status=none" DBSTCK_DIR="/usr/share/debootstick" @@ -290,8 +290,8 @@ echo done release_image draft # not needed anymore -# add the dbstck.conf file -cat > $final_rootfs_mountpoint/dbstck.conf << EOF +# complete the dbstck.conf file +cat >> $final_rootfs_mountpoint/dbstck.conf << EOF STICK_OS_ID=$STICK_OS_ID USE_LVM=$(target_use_lvm) SYSTEM_TYPE=$system_type diff -Nru debootstick-2.2/scripts/create-image/common/finalize debootstick-2.3/scripts/create-image/common/finalize --- debootstick-2.2/scripts/create-image/common/finalize 2018-03-15 08:56:17.000000000 +0000 +++ debootstick-2.3/scripts/create-image/common/finalize 2019-05-22 11:50:39.000000000 +0000 @@ -9,8 +9,9 @@ rm -rf proc/* sys/* dev/* tmp/* \ $(find run -type f) var/cache/* var/lock - # move the existing init - mv sbin/init sbin/init.orig - cd sbin - ln -s /opt/debootstick/live/init/first-init.sh init + # install debootstick init hook on getty command + getty_command="$(realpath --relative-to . "$(readlink -f sbin/getty)")" + mv "$getty_command" "${getty_command}.orig" + ln -s /opt/debootstick/live/init/getty-hook.sh "$getty_command" + echo "GETTY_COMMAND=$getty_command" >> dbstck.conf } diff -Nru debootstick-2.2/scripts/create-image/target/pc/packages debootstick-2.3/scripts/create-image/target/pc/packages --- debootstick-2.2/scripts/create-image/target/pc/packages 2018-03-15 08:56:17.000000000 +0000 +++ debootstick-2.3/scripts/create-image/target/pc/packages 2019-05-22 12:03:47.000000000 +0000 @@ -2,7 +2,7 @@ custom_packages() { - echo grub-pc + echo grub-pc initramfs-tools } kernel_default_package() diff -Nru debootstick-2.2/scripts/live/init/first-init.sh debootstick-2.3/scripts/live/init/first-init.sh --- debootstick-2.2/scripts/live/init/first-init.sh 2018-03-15 08:56:17.000000000 +0000 +++ debootstick-2.3/scripts/live/init/first-init.sh 2019-05-22 11:50:39.000000000 +0000 @@ -8,17 +8,8 @@ # if error, run a shell trap '[ "$?" -eq 0 ] || fallback_sh' EXIT -# we will need /proc and /sys -[ -e /proc/self ] || mount_proc=1 -[ -e /sys/class ] || mount_sys=1 -[ "$mount_proc" = "1" ] && mount -t proc none /proc -[ "$mount_sys" = "1" ] && mount -t sysfs none /sys - -# remount / read-write -mount -o remount,rw / - -# lvm may need this directory to run properly -mkdir -p /run/lock +# this script is now called at the end of the OS bootup procedure, +# (getty hook), no need to mount/umount filesystems # ask and set the root password if needed if [ "$ASK_ROOT_PASSWORD_ON_FIRST_BOOT" = "1" ] @@ -37,13 +28,3 @@ # restore the lvm config as it was in the # initial chroot environment restore_lvm_conf - -# cleanup -[ "$mount_proc" = "1" ] && umount /proc -[ "$mount_sys" = "1" ] && umount /sys - -# restore and start the usual init -rm /sbin/init -mv /sbin/init.orig /sbin/init -exec /sbin/init $* - diff -Nru debootstick-2.2/scripts/live/init/getty-hook.sh debootstick-2.3/scripts/live/init/getty-hook.sh --- debootstick-2.2/scripts/live/init/getty-hook.sh 1970-01-01 00:00:00.000000000 +0000 +++ debootstick-2.3/scripts/live/init/getty-hook.sh 2019-05-22 11:50:39.000000000 +0000 @@ -0,0 +1,28 @@ +#!/bin/bash +. /dbstck.conf # get GETTY_COMMAND + +first_init() +{ + # - we will talk to the console + # - since we were called as a subprocess, + # we can avoid leaking the lock fd + exec 0</dev/console 1>/dev/console 2>&1 200>&- + # run debootstick init procedure + /opt/debootstick/live/init/first-init.sh +} + +# several getty processes will be spawned concurrently, +# we have to use a lock +{ + flock 200 + if [ -f "${GETTY_COMMAND}.orig" ] + then + # original getty not restored yet + # => this means we are first, we will do the job. + (first_init) # execute in a sub-shell + # restore original getty + mv "${GETTY_COMMAND}.orig" "$GETTY_COMMAND" + fi +} 200>/var/lib/debootstick-init.lock + +exec "$GETTY_COMMAND" "$@" diff -Nru debootstick-2.2/scripts/live/init/migrate-to-disk.sh debootstick-2.3/scripts/live/init/migrate-to-disk.sh --- debootstick-2.2/scripts/live/init/migrate-to-disk.sh 2018-03-15 08:56:17.000000000 +0000 +++ debootstick-2.3/scripts/live/init/migrate-to-disk.sh 2019-05-22 12:03:29.000000000 +0000 @@ -70,7 +70,27 @@ read -t 10 -n 1 && { echo "Aborted!"; exit 1; } echo "** Going on." +enforce_lvm_cmd() { + udevadm settle; sync; sync + while true; do + # handle rare failures + "$@" 2>/dev/null && break || sleep 1 + done +} + { + echo MSG making sure ${TARGET} is not used... + pvs --no-headings -o pv_name | while read pv_name + do + [ "$(part_to_disk $pv_name)" == "$TARGET" ] || continue + vg=$(vgs --select "pv_name = $pv_name" --noheadings | awk '{print $1}') + if [ -n "$vg" ]; then + enforce_lvm_cmd vgchange -an "$vg" + enforce_lvm_cmd vgremove -ff -y "$vg" + fi + enforce_lvm_cmd pvremove -ff -y $pv_name + done + echo MSG copying the partition scheme... sgdisk -Z ${TARGET} sgdisk -R ${TARGET} $ORIGIN @@ -95,14 +115,14 @@ echo MSG moving the lvm volume content on ${TARGET}... part_origin=$(get_part_device ${ORIGIN} $pv_part_num) part_target=$(get_part_device ${TARGET} $pv_part_num) - yes | pvcreate -ff $part_target - vgextend $LVM_VG $part_target + enforce_lvm_cmd pvcreate -ff -y $part_target + enforce_lvm_cmd vgextend $LVM_VG $part_target pvchange -x n $part_origin pvmove -i 1 $part_origin | while read pv action percent do echo REFRESHING_MSG "$percent" done - vgreduce $LVM_VG $part_origin + enforce_lvm_cmd vgreduce $LVM_VG $part_origin echo REFRESHING_DONE echo MSG filling the space available... @@ -113,9 +133,8 @@ $BOOTLOADER_INSTALL ${TARGET} echo MSG making sure ${ORIGIN} is not used anymore... - pvremove $part_origin - sync; sync - partx -d ${ORIGIN} + enforce_lvm_cmd pvremove -ff -y $part_origin + enforce_lvm_cmd partx -d ${ORIGIN} echo RETURN 0 } | filter_quietdiff --git a/debootstick b/debootstick index 2bfbf36..2a9bc9c 100755 --- a/debootstick +++ b/debootstick @@ -290,8 +290,8 @@ cp -a $draft_rootfs_mountpoint/* $final_rootfs_mountpoint/ echo done release_image draft # not needed anymore -# add the dbstck.conf file -cat > $final_rootfs_mountpoint/dbstck.conf << EOF +# complete the dbstck.conf file +cat >> $final_rootfs_mountpoint/dbstck.conf << EOF STICK_OS_ID=$STICK_OS_ID USE_LVM=$(target_use_lvm) SYSTEM_TYPE=$system_type diff --git a/scripts/create-image/common/finalize b/scripts/create-image/common/finalize index e2b50fb..c87c9fe 100644 --- a/scripts/create-image/common/finalize +++ b/scripts/create-image/common/finalize @@ -9,8 +9,9 @@ finalize_fs() rm -rf proc/* sys/* dev/* tmp/* \ $(find run -type f) var/cache/* var/lock - # move the existing init - mv sbin/init sbin/init.orig - cd sbin - ln -s /opt/debootstick/live/init/first-init.sh init + # install debootstick init hook on getty command + getty_command="$(realpath --relative-to . "$(readlink -f sbin/getty)")" + mv "$getty_command" "${getty_command}.orig" + ln -s /opt/debootstick/live/init/getty-hook.sh "$getty_command" + echo "GETTY_COMMAND=$getty_command" >> dbstck.conf } diff --git a/scripts/live/init/first-init.sh b/scripts/live/init/first-init.sh index bbde19b..3a006db 100755 --- a/scripts/live/init/first-init.sh +++ b/scripts/live/init/first-init.sh @@ -8,17 +8,8 @@ INIT_SCRIPTS_DIR=/opt/debootstick/live/init # if error, run a shell trap '[ "$?" -eq 0 ] || fallback_sh' EXIT -# we will need /proc and /sys -[ -e /proc/self ] || mount_proc=1 -[ -e /sys/class ] || mount_sys=1 -[ "$mount_proc" = "1" ] && mount -t proc none /proc -[ "$mount_sys" = "1" ] && mount -t sysfs none /sys - -# remount / read-write -mount -o remount,rw / - -# lvm may need this directory to run properly -mkdir -p /run/lock +# this script is now called at the end of the OS bootup procedure, +# (getty hook), no need to mount/umount filesystems # ask and set the root password if needed if [ "$ASK_ROOT_PASSWORD_ON_FIRST_BOOT" = "1" ] @@ -37,13 +28,3 @@ fi # restore the lvm config as it was in the # initial chroot environment restore_lvm_conf - -# cleanup -[ "$mount_proc" = "1" ] && umount /proc -[ "$mount_sys" = "1" ] && umount /sys - -# restore and start the usual init -rm /sbin/init -mv /sbin/init.orig /sbin/init -exec /sbin/init $* - diff --git a/scripts/live/init/getty-hook.sh b/scripts/live/init/getty-hook.sh new file mode 100755 index 0000000..efcb0b9 --- /dev/null +++ b/scripts/live/init/getty-hook.sh @@ -0,0 +1,28 @@ +#!/bin/bash +. /dbstck.conf # get GETTY_COMMAND + +first_init() +{ + # - we will talk to the console + # - since we were called as a subprocess, + # we can avoid leaking the lock fd + exec 0</dev/console 1>/dev/console 2>&1 200>&- + # run debootstick init procedure + /opt/debootstick/live/init/first-init.sh +} + +# several getty processes will be spawned concurrently, +# we have to use a lock +{ + flock 200 + if [ -f "${GETTY_COMMAND}.orig" ] + then + # original getty not restored yet + # => this means we are first, we will do the job. + (first_init) # execute in a sub-shell + # restore original getty + mv "${GETTY_COMMAND}.orig" "$GETTY_COMMAND" + fi +} 200>/var/lib/debootstick-init.lock + +exec "$GETTY_COMMAND" "$@"diff --git a/scripts/live/init/migrate-to-disk.sh b/scripts/live/init/migrate-to-disk.sh index ec95b9d..013e1f1 100755 --- a/scripts/live/init/migrate-to-disk.sh +++ b/scripts/live/init/migrate-to-disk.sh @@ -70,7 +70,27 @@ echo "** WARNING: Press any key NOW to cancel this process." read -t 10 -n 1 && { echo "Aborted!"; exit 1; } echo "** Going on." +enforce_lvm_cmd() { + udevadm settle; sync; sync + while true; do + # handle rare failures + "$@" 2>/dev/null && break || sleep 1 + done +} + { + echo MSG making sure ${TARGET} is not used... + pvs --no-headings -o pv_name | while read pv_name + do + [ "$(part_to_disk $pv_name)" == "$TARGET" ] || continue + vg=$(vgs --select "pv_name = $pv_name" --noheadings | awk '{print $1}') + if [ -n "$vg" ]; then + enforce_lvm_cmd vgchange -an "$vg" + enforce_lvm_cmd vgremove -ff -y "$vg" + fi + enforce_lvm_cmd pvremove -ff -y $pv_name + done + echo MSG copying the partition scheme... sgdisk -Z ${TARGET} sgdisk -R ${TARGET} $ORIGIN @@ -95,14 +115,14 @@ echo "** Going on." echo MSG moving the lvm volume content on ${TARGET}... part_origin=$(get_part_device ${ORIGIN} $pv_part_num) part_target=$(get_part_device ${TARGET} $pv_part_num) - yes | pvcreate -ff $part_target - vgextend $LVM_VG $part_target + enforce_lvm_cmd pvcreate -ff -y $part_target + enforce_lvm_cmd vgextend $LVM_VG $part_target pvchange -x n $part_origin pvmove -i 1 $part_origin | while read pv action percent do echo REFRESHING_MSG "$percent" done - vgreduce $LVM_VG $part_origin + enforce_lvm_cmd vgreduce $LVM_VG $part_origin echo REFRESHING_DONE echo MSG filling the space available... @@ -113,9 +133,8 @@ echo "** Going on." $BOOTLOADER_INSTALL ${TARGET} echo MSG making sure ${ORIGIN} is not used anymore... - pvremove $part_origin - sync; sync - partx -d ${ORIGIN} + enforce_lvm_cmd pvremove -ff -y $part_origin + enforce_lvm_cmd partx -d ${ORIGIN} echo RETURN 0 } | filter_quietdiff --git a/debootstick b/debootstick index 2a9bc9c..e26c07e 100755 --- a/debootstick +++ b/debootstick @@ -5,7 +5,7 @@ VERSION='@VERSION@' # updated at install time IMAGE_SIZE_MARGIN_KB=0 # fs size estimation is enough pessimistic MKSQUASHFS_OPTS="-b 1M -comp xz" ONE_GIGABYTE_KB=$((1024*1024)) -MAX_WORK_IMAGE_OVERHEAD_KB=$ONE_GIGABYTE_KB +MAX_WORK_IMAGE_OVERHEAD_KB=$((2*ONE_GIGABYTE_KB)) DEBUG=0 DD="dd status=none" DBSTCK_DIR="/usr/share/debootstick" diff --git a/scripts/create-image/target/pc/packages b/scripts/create-image/target/pc/packages index 844dde6..ee05ce3 100644 --- a/scripts/create-image/target/pc/packages +++ b/scripts/create-image/target/pc/packages @@ -2,7 +2,7 @@ custom_packages() { - echo grub-pc + echo grub-pc initramfs-tools } kernel_default_package()
--- End Message ---
--- Begin Message ---
- To: Etienne Dublé <etienne.duble@gmail.com>, 929486-done@bugs.debian.org
- Cc: Vincent Danjean <Vincent.Danjean@imag.fr>
- Subject: Re: Bug#929486: unblock: debootstick/2.3
- From: Paul Gevers <elbrus@debian.org>
- Date: Tue, 4 Jun 2019 20:24:10 +0200
- Message-id: <9fdf493e-9903-d67b-b213-4f8bd205cb5f@debian.org>
- In-reply-to: <[🔎] 89f5b1c3-e268-c27d-c43c-497d47f56b0a@gmail.com>
- References: <155870765495.786.10043145949733658417.reportbug@vm-debian> <155870765495.786.10043145949733658417.reportbug@vm-debian> <22632fcf-9291-0a67-180c-89206cc88d88@debian.org> <[🔎] 89f5b1c3-e268-c27d-c43c-497d47f56b0a@gmail.com>
Hi, On 03-06-2019 11:05, Etienne Dublé wrote: > The package has been uploaded to unstable, with version increased to > 2.4. It obviously has the same content as v2.3, except the appropriate > changelog entry. Unblocked, thanks. PaulAttachment: signature.asc
Description: OpenPGP digital signature
--- End Message ---