Subject: [alpine-devel] Fw: [alpine-aports] [Patch] mkinitfs - Support for root_type and root_options

From: Natanael Copa <[email-masked]>
Date: Mon, 16 Mar 2015 11:36:51 +0100

I am forwarding a patch for mkinitfs from alpine-aports mailing list
for discussion.

I agree that we want support mounting p9 as root file system from
initramfs.

I would like to avoid to introduce 2 new boot options: root_type and
root_options.

Questions:

Can we implement this without introducing new boot options?

If not, how does other distros handle this? Do they have other boot
options for it?

Are we happy with introducing root_type and root_options as boot
options?

I am open for ideas.

-nc

Begin forwarded message:

Date: Wed, 11 Mar 2015 17:34:33 +0200
From: Olivier Mauras <[email-masked]>
To: <[email-masked]>
Subject: Re: [alpine-aports] [Patch] mkinitfs - Support for root_type and root_options

As per the discussion with ncopa on IRC, i redid the patch fixing the 
tab issue
 From e1d6dd700b01003f23725bb7143c7fa7a25b96fc Mon Sep 17 00:00:00 2001
 From: Olivier Mauras <[email-masked]>
Date: Mon, 2 Mar 2015 11:30:17 +0100
Subject: Add support for two new options in the cmdline.
  - root_type: Let's you specify the type of filesystem for the root fs
  - root_options: Let's you specify mount options for the root fs - If 
specified, "ro" flag won't be added by default

This has primarily been setup to be able to boot Alpine guests from a 
9P virtio share and make it easy to change mount options from 
libvirt/qemu

diff --git a/initramfs-init.in b/initramfs-init.in
index fd3e510..9c90406 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -387,8 +387,8 @@ eval set -- `cat /proc/cmdline`

  myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm 
debug_init
  	dma init_args keep_apk_new modules ovl_dev pkgs quiet root_size root
-	usbdelay ip alpine_repo apkovl alpine_start splash blacklist
-	overlaytmpfs"
+	root_type root_options usbdelay ip alpine_repo apkovl alpine_start
+	splash blacklist overlaytmpfs"

  for opt; do
  	case "$opt" in
@@ -551,8 +551,20 @@ if [ -n "$KOPT_root" ]; then
  		mount -t tmpfs root-tmpfs /media/root-rw
  		mkdir -p /media/root-rw/work /media/root-rw/root
  		mount -t overlay -o 
lowerdir=/media/root-ro,upperdir=/media/root-rw/root,workdir=/media/root-rw/work 
overlayfs $sysroot
+	elif [ -n $KOPT_root_type ]; then
+		if [ -n $KOPT_root_options ]; then
+			root_options="$KOPT_root_options"
+		else
+			root_options="ro"
+		fi
+		retry_mount -t $KOPT_root_type -o $root_options $KOPT_root $sysroot 
2>/dev/null  
  	else
-		retry_mount -o ro $KOPT_root $sysroot 2>/dev/null
+		if [ -n $KOPT_root_options ]; then
+			root_options="$KOPT_root_options"
+		else
+			root_options="ro"
+		fi
+		retry_mount -o $root_options $KOPT_root $sysroot 2>/dev/null
  	fi

  	eend $?
-- 
cgit v0.10.1
---
Available here if scrambled: 
http://git.mauras.ch/mkinitfs/patch/?id=e1d6dd700b01003f23725bb7143c7fa7a25b96fc

Regards,
Olivier

---
Unsubscribe:  [email-masked]
Help:         [email-masked]
---

---

From: Olivier Mauras <[email-masked]>
Date: Mon, 16 Mar 2015 14:20:00 +0200

On 2015-03-16 12:36, Natanael Copa wrote: 

> I am forwarding a
patch for mkinitfs from alpine-aports mailing list

initramfs.
> If not, how does other
distros handle this? Do they have other boot
> Are
we happy with introducing root_type and root_options as boot
options?
> Begin forwarded
> To: <[email-masked]>
Subject: Re: [alpine-aports] [Patch] mkinitfs - Support for root_type
and root_options
> From
e1d6dd700b01003f23725bb7143c7fa7a25b96fc Mon Sep 17 00:00:00 2001
> This has
primarily been setup to be able to boot Alpine guests from a 
> 9P
virtio share and make it easy to change mount options from 
libvirt/qemu
> +++
b/initramfs-init.in
> + root_type
root_options usbdelay ip alpine_repo apkovl alpine_start
mount -t overlay -o 

> +
else
> +
root_options="ro"
Available here if scrambled: 

> Unsubscribe:
[email-masked]
> Help:
[email-masked]

FWIW, RHEL7 implements it
in dracut with "root=virtfs:9p_name"
I just felt that having the options
could be more useful - beyond 9p but i agree, is it needed ? - than
hardcoding 9p support :)

Olivier

---

From: Natanael Copa <[email-masked]>
Date: Mon, 16 Mar 2015 16:14:19 +0100

On Mon, 16 Mar 2015 14:20:00 +0200

> we happy with introducing root_type and root_options as boot
...
> in dracut with "root=virtfs:9p_name"

ok, this is an option we should consider.

> could be more useful - beyond 9p but i agree, is it needed ? - than

we have root_size for tmpfs root which would correspond to
root_options="-s ..."

I agree it would be nice to avoid hardcoding every supported root type.

anyone know what debian, ubuntu, arch and gentoo does for 9p as root?

If the majority use root=virtfs:9p_name then we should maybe follow
that.

---

---

From: Isaac Dunham <[email-masked]>
Date: Mon, 16 Mar 2015 17:39:48 +0000

> If the majority use root=virtfs:9p_name then we should maybe follow

Here's something about adding 9p support to an initramfs applicable to
Debian, if I understand correctly [1]:

Add the 9p modules to the host initramfs (that's the easiest way albeit not the cleanest, to have an initrd with the needed modules): 
printf '%s\n' 9p 9pnet 9pnet_virtio | sudo tee -a /etc/initramfs-tools/modules
sudo update-initramfs -u 

qemu -kernel "/boot/vmlinuz-$(uname -r)" \
   -initrd "/boot/initrd.img-$(uname -r)" \
   -fsdev local,id=r,path=/,security_model=none \
   -device virtio-9p-pci,fsdev=r,mount_tag=r \
   -nographic \
   -append 'root=r ro rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh'

[1] http://unix.stackexchange.com/questions/90423/can-virtfs-9p-be-used-as-root-file-system

---

---

From: Natanael Copa <[email-masked]>
Date: Mon, 16 Mar 2015 21:08:25 +0100

On Mon, 16 Mar 2015 17:39:48 +0000

>    -append 'root=r ro rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/bin/sh'

so, rootfstype and rootflags. I think we can use those instead of
root_type and root_options?

Thank you very much!

---

---

From: Olivier Mauras <[email-masked]>
Date: Mon, 16 Mar 2015 21:30:58 +0100

> Help:         [email-masked]

Want me to fix the patch with these ?

---

From: Natanael Copa <[email-masked]>
Date: Mon, 16 Mar 2015 22:18:58 +0100

On Mon, 16 Mar 2015 21:30:58 +0100

> Want me to fix the patch with these ?

Would be nice. thanks

-nc

---

---

From: Olivier Mauras <[email-masked]>
Date: Tue, 17 Mar 2015 08:36:26 +0200

Please find the update patch below:

 From acda031c6cc79f427b90d4395b95b3472b6c587d Mon Sep 17 00:00:00 2001
 From: Olivier Mauras <[email-masked]>
Date: Mon, 2 Mar 2015 11:30:17 +0100
Subject: Add support for two new options in the cmdline.
  - rootfstype: Let's you specify the type of filesystem for the root fs
  - rootflags: Let's you specify mount options for the root fs - If 
specified, "ro" flag won't be added by default

diff --git a/initramfs-init.in b/initramfs-init.in
index fd3e510..10116f9 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -387,8 +387,8 @@ eval set -- `cat /proc/cmdline`

+	rootfstype rootflags usbdelay ip alpine_repo apkovl alpine_start

  for opt; do
  	case "$opt" in
@@ -551,8 +551,20 @@ if [ -n "$KOPT_root" ]; then
  		mount -t tmpfs root-tmpfs /media/root-rw
  		mkdir -p /media/root-rw/work /media/root-rw/root
  		mount -t overlay -o 
lowerdir=/media/root-ro,upperdir=/media/root-rw/root,workdir=/media/root-rw/work 
overlayfs $sysroot
+	elif [ -n $KOPT_rootfstype ]; then
+		if [ -n $KOPT_rootflags ]; then
+			rootflags="$KOPT_rootflags"
+		else
+			rootflags="ro"
+		fi
+		retry_mount -t $KOPT_rootfstype -o $rootflags $KOPT_root $sysroot 
2>/dev/null
  	else
-		retry_mount -o ro $KOPT_root $sysroot 2>/dev/null
+		if [ -n $KOPT_rootflags ]; then
+			rootflags="$KOPT_rootflags"
+		else
+			rootflags="ro"
+		fi
+		retry_mount -o $rootflags $KOPT_root $sysroot 2>/dev/null
  	fi

  	eend $?
-- 
cgit v0.10.1
---
Direct link if needed 
http://git.mauras.ch/mkinitfs/patch/?id=acda031c6cc79f427b90d4395b95b3472b6c587d

---

---

From: Natanael Copa <[email-masked]>
Date: Wed, 8 Apr 2015 14:38:13 +0200

On Tue, 17 Mar 2015 08:36:26 +0200

> +		retry_mount -o $rootflags $KOPT_root $sysroot 2>/dev/null

Sorry for late answer.
To avoid if/else spagetti i suggest this instead, which should do exactly the same:
diff --git a/initramfs-init.in b/initramfs-init.in
index d687e64..42ee63f 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -388,7 +388,7 @@ eval set -- `cat /proc/cmdline`
 myopts="alpine_dev autodetect autoraid chart cryptroot cryptdm debug_init
        dma init_args keep_apk_new modules ovl_dev pkgs quiet root_size root
        usbdelay ip alpine_repo apkovl alpine_start splash blacklist
-       overlaytmpfs"
+       overlaytmpfs rootfstype rootflags"
 
 for opt; do
        case "$opt" in
@@ -552,7 +552,9 @@ if [ -n "$KOPT_root" ]; then
                mkdir -p /media/root-rw/work /media/root-rw/root
                mount -t overlay -o lowerdir=/media/root-ro,upperdir=/media/root-rw/root,workdir=/media/root-rw/work overlayfs $sysroot
        else
-               retry_mount -o ro $KOPT_root $sysroot 2>/dev/null
+               retry_mount ${KOPT_rootfstype:+-t} ${KOPT_rootfstype} \
+                       -o ${KOPT_rootflags:-ro} \
+                       $KOPT_root $sysroot 2>/dev/null
        fi
 
        eend $?

Do you think you could test it?

While at it i think I will replace the root_size boot opt with the new
rootflags.

-nc

---