[arch-releng] Fwd: [RFC] [PATCH] [archiso] Add support to mount iso in loopback mode.

Gerardo Exequiel Pozzi vmlinuz386 at yahoo.com.ar
Tue Dec 7 06:01:20 CET 2010


On 12/07/2010 01:43 AM, Baurzhan Muftakhidinov wrote:
> 2010/12/1 Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>:
>> Add two parameters:
>>
>> img_dev=/dev/sdNM
>>    where /dev/sdNM is the device where .iso is located.
>> img_loop=/path/to/arch.iso
>>    where /path/to/arch.iso is the full path of the .iso in the device img_dev.
>>
>> Original idea from Baurzhan Muftakhidinov.
>>
>> Signed-off-by: Gerardo Exequiel Pozzi<vmlinuz386 at yahoo.com.ar>
>> ---
>>   archiso/Makefile                     |    2 ++
>>   archiso/hooks/archiso_loop_mnt       |   33 +++++++++++++++++++++++++++++++++
>>   archiso/install/archiso_loop_mnt     |   18 ++++++++++++++++++
>>   configs/syslinux-iso/mkinitcpio.conf |    2 +-
>>   4 files changed, 54 insertions(+), 1 deletions(-)
>>   create mode 100644 archiso/hooks/archiso_loop_mnt
>>   create mode 100644 archiso/install/archiso_loop_mnt
>>
>> diff --git a/archiso/Makefile b/archiso/Makefile
>> index 688eb1b..93d68af 100644
>> --- a/archiso/Makefile
>> +++ b/archiso/Makefile
>> @@ -10,6 +10,8 @@ install: all
>>         install -D -m 644 install/archiso $(DESTDIR)/lib/initcpio/install/archiso
>>         install -D -m 644 hooks/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/hooks/archiso_pxe_nbd
>>         install -D -m 644 install/archiso_pxe_nbd $(DESTDIR)/lib/initcpio/install/archiso_pxe_nbd
>> +       install -D -m 644 hooks/archiso_loop_mnt $(DESTDIR)/lib/initcpio/hooks/archiso_loop_mnt
>> +       install -D -m 644 install/archiso_loop_mnt $(DESTDIR)/lib/initcpio/install/archiso_loop_mnt
>>         # install docs and examples
>>         install -d -m 755 $(DESTDIR)/usr/share/archiso/
>>         cp -r ../configs $(DESTDIR)/usr/share/archiso/configs
>> diff --git a/archiso/hooks/archiso_loop_mnt b/archiso/hooks/archiso_loop_mnt
>> new file mode 100644
>> index 0000000..0d5eba7
>> --- /dev/null
>> +++ b/archiso/hooks/archiso_loop_mnt
>> @@ -0,0 +1,33 @@
>> +# vim: set ft=sh:
>> +
>> +run_hook () {
>> +    if [ -n "${img_dev}" ]&&  [ -n "${img_loop}" ]; then
>> +        mount_handler="archiso_loop_mount_handler"
>> +    fi
>> +}
>> +
>> +archiso_loop_mount_handler () {
>> +    newroot="${1}"
>> +
>> +    while [ ! -b "${img_dev}" ]; do
>> +        sleep 1
>> +    done
>> +
>> +    msg "::: Setup a loop device from ${img_loop} located at device ${img_dev}"
>> +    FSTYPE=$(blkid -o value -s TYPE -p ${img_dev} 2>  /dev/null)
>> +    if [ -n "${FSTYPE}" ]; then
>> +        if mount -r -t "${FSTYPE}" ${img_dev} /img_dev>  /dev/null 2>&1; then
>> +            _dev_loop=$(losetup -f)
>> +            losetup ${_dev_loop} /img_dev/${img_loop}
>> +        fi
>> +    fi
>> +
>> +    archiso_mount_handler ${newroot}
>> +
>> +    if [ "${copytoram}" = "y" ]; then
>> +        msg "::: Deataching loop device ${_dev_loop}"
>> +        losetup -d ${_dev_loop}
>> +        msg "::: Unmounting ${img_dev}"
>> +        umount ${img_dev}
>> +    fi
>> +}
>> diff --git a/archiso/install/archiso_loop_mnt b/archiso/install/archiso_loop_mnt
>> new file mode 100644
>> index 0000000..c0d21a6
>> --- /dev/null
>> +++ b/archiso/install/archiso_loop_mnt
>> @@ -0,0 +1,18 @@
>> +# vim: set ft=sh:
>> +
>> +install ()
>> +{
>> +    MODULES=""
>> +
>> +    BINARIES=""
>> +    FILES=""
>> +    add_dir /img_dev
>> +    SCRIPT="archiso_loop_mnt"
>> +}
>> +
>> +help ()
>> +{
>> +cat<<HELPEOF
>> +  This hook loads the necessary modules for boot via loop device.
>> +HELPEOF
>> +}
>> diff --git a/configs/syslinux-iso/mkinitcpio.conf b/configs/syslinux-iso/mkinitcpio.conf
>> index 15097c0..f5f8c79 100644
>> --- a/configs/syslinux-iso/mkinitcpio.conf
>> +++ b/configs/syslinux-iso/mkinitcpio.conf
>> @@ -2,5 +2,5 @@
>>   MODULES=""
>>   BINARIES=""
>>   FILES=""
>> -HOOKS="base udev memdisk archiso archiso_pxe_nbd pata scsi sata usb fw pcmcia filesystems usbinput"
>> +HOOKS="base udev memdisk archiso archiso_pxe_nbd archiso_loop_mnt pata scsi sata usb fw pcmcia filesystems usbinput"
>>   COMPRESSION="lzma"
>> --
>> 1.7.3.2
>>
>>
> Hi
>
> This method does not work for me. I used Qemu to test it.
>
> The boot process hangs at
> 'Waiting 30 seconds for device /dev/disk/by-name/' Thats it.
> Which device should poll the archiso_mount_handler function? Is it USB
> media, or ISO image?
>
> Normal boot process as 'qemu -cdrom arch.iso' works fine.
>
how you started qemu?

should be something like:

qemu-kvm -m 512 -kernel vmlinuz26 -initrd archiso.img -append 
"archisolabel=ARCH_201012 img_dev=/dev/sda1 img_loop=/arch.iso" -hda 
arch.img

where arch.img has one or more partitions with supported filesystem, and 
inside there is an "arch.iso" file.




-- 
Gerardo Exequiel Pozzi
\cos^2\alpha + \sin^2\alpha = 1



More information about the arch-releng mailing list