2010/12/7 Gerardo Exequiel Pozzi <[email protected]>: > On 12/07/2010 01:43 AM, Baurzhan Muftakhidinov wrote: >> >> 2010/12/1 Gerardo Exequiel Pozzi<[email protected]>: >>> >>> 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<[email protected]> >>> --- >>> 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.
