[arch-releng] [PATCH 11/12] [archiso] Update archiso_shutdown hook
Dave Reisner
d at falconindy.com
Thu Feb 23 09:55:47 EST 2012
On Thu, Feb 23, 2012 at 12:30:50AM -0300, Gerardo Exequiel Pozzi wrote:
> * Add libraries from /usr/lib and /sbin/losetup.
> * Use used_block_devices to detach loop devices.
>
> Signed-off-by: Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>
> ---
> archiso/archiso_shutdown | 13 +++++--------
> archiso/hooks/archiso_shutdown | 10 +++++-----
> 2 files changed, 10 insertions(+), 13 deletions(-)
>
> diff --git a/archiso/archiso_shutdown b/archiso/archiso_shutdown
> index 26220a6..c430014 100644
> --- a/archiso/archiso_shutdown
> +++ b/archiso/archiso_shutdown
> @@ -10,10 +10,8 @@ umount $(mount | awk '$3 ~/^\/oldroot/ {print $3}' | sort -r)
> # Remove all dm-snapshot devices.
> dmsetup remove_all
>
> -# Remove all loopback devices made for dm-snapshots devices
> -# other misc loops like used for pure squashfs images
> -# and unmount/detach *.fs.sfs images.
> -for _lup in $(ls -r /dev/loop[1-9][0-9][0-9]); do
> +# Remove all loopback devices.
> +for _lup in $(grep ^/dev/loop /oldrun/archiso/used_block_devices | tac); do
Eek. Please don't do this. I have bad experiences with tac, particularly
in initscripts on shutdown, because there was nowhere for tac to write
to (it creates a temporary file when it reads from a pipe). "for" is no
way to iterate over lines of output, either. It's a little more long
winded, but I'm always in favor of doing this "correctly":
mapfile -t loopdevs </oldrun/archiso/used_block_devices
for (( i=${loopdevs[*]}-1; i>=0; i-- )); do
if [[ ${loopdevs[i]} = /dev/loop* ]] && ! loosetup -d "${loopdevs[i]}" 2>/dev/null; then
umount -d "${loopdevs[i]}"
fi
done
unset loopdevs i
> if ! losetup -d ${_lup} 2> /dev/null; then
> umount -d ${_lup}
> fi
> @@ -24,11 +22,10 @@ umount /oldrun/archiso/cowspace
>
> # Unmount boot device if needed (no copytoram=y used)
> if [[ ! -d /oldrun/archiso/copytoram ]]; then
> - umount /oldrun/archiso/bootmnt
> - # Detach img_loop= and unmount img_dev= (archiso_loop_mnt hook)
> - if [[ -f /oldrun/archiso/img_dev_loop ]]; then
> - losetup -d $(cat /oldrun/archiso/img_dev_loop)
> + if [[ -d /oldrun/archiso/img_dev ]]; then
> umount /oldrun/archiso/img_dev
> + else
> + umount /oldrun/archiso/bootmnt
> fi
> if [[ -f /oldrun/archiso/nbd_client.pid ]]; then
> nbd-client -d /dev/nbd0
> diff --git a/archiso/hooks/archiso_shutdown b/archiso/hooks/archiso_shutdown
> index 1cc6e0e..1b2689b 100644
> --- a/archiso/hooks/archiso_shutdown
> +++ b/archiso/hooks/archiso_shutdown
> @@ -2,15 +2,15 @@ run_hook ()
> {
> msg -n ":: Creating shutdown ramfs..."
>
> - mkdir -p /run/initramfs/usr/bin
> - mkdir /run/initramfs/usr/sbin
> - mkdir /run/initramfs/bin
> - mkdir /run/initramfs/sbin
> - mkdir /run/initramfs/lib
> + for _dir in bin lib sbin usr/bin usr/lib usr/sbin; do
> + mkdir -p /run/initramfs/${_dir}
> + done
> cp /bin/busybox /run/initramfs/bin/
> cp /lib/ld-* /run/initramfs/lib/
> cp /lib/lib* /run/initramfs/lib/
> + cp /usr/lib/lib* /run/initramfs/usr/lib/
> cp /sbin/dmsetup /run/initramfs/sbin/
> + cp /sbin/losetup /run/initramfs/sbin/
> if [[ -x /bin/nbd-client ]]; then
> cp /bin/nbd-client /run/initramfs/bin/
> fi
> --
> 1.7.9.1
>
More information about the arch-releng
mailing list