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

Baurzhan Muftakhidinov baurthefirst at gmail.com
Tue Dec 7 06:16:30 CET 2010


2010/12/7 Gerardo Exequiel Pozzi <vmlinuz386 at yahoo.com.ar>:
> 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
>
>

Thanks, Gerardo, it helped

I forgot about 'archisolabel=ARCH_201012' parameter ;)

Now it works as it should.


More information about the arch-releng mailing list