[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