On 07/13/2015 04:19 AM, Gerardo Exequiel Pozzi wrote:
On 07/12/2015 09:19 AM, Adam Purkrt wrote:
On 07/12/2015 02:29 AM, Gerardo Exequiel Pozzi wrote:
On 07/11/2015 04:00 PM, Adam Purkrt wrote:
I would like to suggest the patch below, to archiso_loop_mnt hook.
Currently, when booting loopmounted iso file, it is necessary to specify not only img_dev and img_loop (which should be sufficient), but also archisolabel or archisodevice. With the patch, archisodevice is directly populated with the correct loop device, and it is not necessary to specify the label when booting from loopmounted iso, which makes for leaner and cleaner grub.cfg.
The kernel command line in grub.cfg currently needed:
linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=ARCH_201507 img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
after the patch:
linux (loop)/arch/boot/x86_64/vmlinuz img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
You are right!
Please also update the README.altbootmethods ;)
PS: "earlymodules=loop": Is like a copy&paste hurricane from old age. It was a temporal workaround (2011.08.19), but spread across all places.
Thanks.
It's good that "earlymodules=loop" is not necessary, thanks for pointing it out.
Updated the README.altbootmethods, using uuid over label. Overall the patch is:
diff --git a/archiso/initcpio/hooks/archiso_loop_mnt b/archiso/initcpio/hooks/archiso_loop_mnt index 46338e5..f95a47d 100644 --- a/archiso/initcpio/hooks/archiso_loop_mnt +++ b/archiso/initcpio/hooks/archiso_loop_mnt @@ -18,7 +18,9 @@ archiso_loop_mount_handler () { echo $(readlink -f ${img_dev}) >> /run/archiso/used_block_devices fi
- if ! _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then + if _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then + archisodevice="${_dev_loop}" + else echo "ERROR: Setting loopback device for file '/run/archiso/img_dev/${img_loop}'" launch_interactive_shell fi diff --git a/docs/README.altbootmethods b/docs/README.altbootmethods index 3c07e03..cbfada4 100644 --- a/docs/README.altbootmethods +++ b/docs/README.altbootmethods @@ -25,20 +25,23 @@ Where:
Note: Described method is for using with GRUB2. GRUB2 is installed on target media and archlinux-<YYYY>.<MM>.<DD>-dual.iso - is at path <TARGET-PATH> on disk <D> and partition <P>, - where filesystem is labeled as <TARGET-FS-LABEL>. + is at path <TARGET-PATH> on disk <D> and partition <P>.
menuentry "Arch Linux (x86_64)" { + set isopartition=hd<D>,<P> set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-dual.iso" - loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile + loopback loop ($isopartition)$isofile + probe -u $isopartition --set=isouuid + linux (loop)/arch/boot/x86_64/vmlinuz img_dev=/dev/disk/by-uuid/$isouuid img_loop=$isofile initrd (loop)/arch/boot/x86_64/archiso.img }
menuentry "Arch Linux (i686)" { + set isopartition=hd<D>,<P> set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-dual.iso" - loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/i686/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile + loopback loop ($isopartition)$isofile + probe -u $isopartition --set=isouuid + linux (loop)/arch/boot/i686/vmlinuz img_dev=/dev/disk/by-uuid/$isouuid img_loop=$isofile initrd (loop)/arch/boot/i686/archiso.img }
One more thing - I would vote for deprecating "img_label" parameter and (sooner or later) removing it, i.e.
/archiso/initcpio/hooks/archiso_loop_mnt - [[ -n "${img_label}" ]] && img_dev="/dev/disk/by-label/${img_label}"
/docs/README.bootparams -* img_label= Set the filesystem label where archiso-image.iso. - Default: (unset) * img_dev= Device where archiso-image.iso reside. - Default: (unset) or "/dev/disk/by-label/${img_label}" + Default: (unset)
since: 1) it is more reliable to refer to a partition by uuid 2) there is no "img_uuid" - and I don't think there should be, "img_dev=/dev/disk/by-uuid/[uuid]" is perfectly fine 3) it would be still possible to address by label using "img_dev=/dev/disk/by-label/[label]"
Not sure how much upheaval the abolition of img_label would cause, though.
Please do one logic change at time. Wheel, I never used loopback method other than just for test it per user request when it was implemented. Why remove img_label= it does look good for keep thing easy to reference, sure archisolabel= can also be removed...
Perhaps the following change is more acceptable. Admittedly, in many situations, using label can be quite practical. Booting from iso, in general, comes in handy; you don't need to overwrite a whole flash. On efi systems it is sufficient to simply copy /EFI/ and /boot/ directory from some distro with grub, then copy the iso file to /boot/iso/, tailor /boot/grub/grub.cfg and you have an (efi) bootable flash, without a need to overwrite the flashdrive. diff --git a/archiso/initcpio/hooks/archiso_loop_mnt b/archiso/initcpio/hooks/archiso_loop_mnt index 46338e5..f95a47d 100644 --- a/archiso/initcpio/hooks/archiso_loop_mnt +++ b/archiso/initcpio/hooks/archiso_loop_mnt @@ -18,7 +18,9 @@ archiso_loop_mount_handler () { echo $(readlink -f ${img_dev}) >> /run/archiso/used_block_devices fi - if ! _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then + if _dev_loop=$(losetup --find --show --read-only "/run/archiso/img_dev/${img_loop}"); then + archisodevice="${_dev_loop}" + else echo "ERROR: Setting loopback device for file '/run/archiso/img_dev/${img_loop}'" launch_interactive_shell fi diff --git a/docs/README.altbootmethods b/docs/README.altbootmethods index 3c07e03..9df20ef 100644 --- a/docs/README.altbootmethods +++ b/docs/README.altbootmethods @@ -31,14 +31,14 @@ Note: Described method is for using with GRUB2. menuentry "Arch Linux (x86_64)" { set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-dual.iso" loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/x86_64/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile + linux (loop)/arch/boot/x86_64/vmlinuz img_label=<TARGET-FS-LABEL> img_loop=$isofile initrd (loop)/arch/boot/x86_64/archiso.img } menuentry "Arch Linux (i686)" { set isofile="/<TARGET-PATH>/archlinux-<YYYY>.<MM>.<DD>-dual.iso" loopback loop (hd<D>,<P>)$isofile - linux (loop)/arch/boot/i686/vmlinuz archisolabel=<FS-LABEL> img_label=<TARGET-FS-LABEL> img_loop=$isofile + linux (loop)/arch/boot/i686/vmlinuz img_label=<TARGET-FS-LABEL> img_loop=$isofile initrd (loop)/arch/boot/i686/archiso.img } diff --git a/docs/README.bootparams b/docs/README.bootparams index 356375d..48a1c3a 100644 --- a/docs/README.bootparams +++ b/docs/README.bootparams @@ -20,6 +20,9 @@ INDEX * archisolabel= Set the filesystem label where archiso files reside. Default: (unset) * archisodevice= Set the device node where archiso medium is located. + Upon successful mount of the iso image specified by + img_dev and img_loop, it is automatically set to the + appropriate loop device. Default: "/dev/disk/by-label/${archisolabel}" * archisobasedir= Set the base directory where all files reside. Default: "arch"