~alpine/devel

3

[alpine-devel] mkinitfs initramfs-init questions

Евгений 'Rush' Непомнящий <rush.zlo@gmail.com>
Details
Message ID
<CA+=xjkCj-ggSWtSUGrXVUiDNYAXw-V63z9d_=4Zscwg1Zg01qw@mail.gmail.com>
Sender timestamp
1361868689
DKIM signature
missing
Download raw message
There are some magic when parsing kernel command line (at the end of message):

1. Which reason for doing sed 's: :_:g' ? What command line will be
affected this for example?
2. Syslinux (5.x) pass kernel path as the first arg (twice in my
case). This code run with errors "/init: eval: line 1:
KOPT_/boot/datacom=yes: not found". This a bug or feature?
3. I've passed console=tty0 console=ttyS1,115200 for my Ubuntu kernels
on Dell servers with IPMI SOL to see kernel output both on IP KVM and
IPMI SOL (because not everywhere I have both). I think tty0 must not
be placed in inittab, because it is "current console". Seems like a
bug?
4. Code looks overcomplicated because there are
  a) not many options to be parsed by initramfs-init
  b) not all kernel options must be parsed by initramfs-init, unknown
options must be skipped (and errors as in #2 will not be raised in the
future)

8<------------------------------------------------------------------------------------------->8
# read the kernel options. We use eval set so we can handle things like
# acpi_osi="!Windows 2006"
eval set -- `cat /proc/cmdline`

while [ $# -gt 0 ]; do
        case "$1" in
                s|single|1)
                        SINGLEMODE=yes ;;
                console=*)
                        CONSOLE="$CONSOLE ${1#console=}";;
                *=*)    eval "KOPT_${1%%=*}='${1#*=}'" ;;
                no*)    eval "KOPT_$(echo ${1#no} | sed 's: :_:g')=no" ;;
                *)      eval "KOPT_$(echo $1 | sed 's: :_:g')=yes" ;;
        esac
        shift
done
8<------------------------------------------------------------------------------------------->8

/ # cat /proc/cmdline
/boot/datacom /boot/datacom initrd=/boot/datacom.gz
alpine_dev=usbdisk:vfat modules=loop,squashfs,sd-mod,usb-storage
nomodeset console=tty0 console=ttyS1,115200

--
Cogito ergo sum


---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---
Natanael Copa <ncopa@alpinelinux.org>
Details
Message ID
<20130226214549.3e82b644@ncopa-laptop.res.nor.wtbts.net>
In-Reply-To
<CA+=xjkCj-ggSWtSUGrXVUiDNYAXw-V63z9d_=4Zscwg1Zg01qw@mail.gmail.com> (view parent)
Sender timestamp
1361911549
DKIM signature
missing
Download raw message
On Tue, 26 Feb 2013 12:51:29 +0400
Евгений 'Rush' Непомнящий <rush.zlo@gmail.com> wrote:

> There are some magic when parsing kernel command line (at the end of
> message):
> 
> 1. Which reason for doing sed 's: :_:g' ? What command line will be
> affected this for example?

git blame pointed me to this commit:
http://git.alpinelinux.org/cgit/mkinitfs/commit/?id=bcc5a38b9849411a880d8b65771b30042aa7ce62

I had an issue with parsning acpi_osi="!Windows 2006". While there I
probably added the sed 's: :_:g' out of paranoia, in case kernel or
anything would have a param with spaces.

  somenewopt:"arg with space"

I doubt there are anything current that actually needs it. It was more
for future, unexpected things.

> 2. Syslinux (5.x) pass kernel path as the first arg (twice in my
> case). This code run with errors "/init: eval: line 1:
> KOPT_/boot/datacom=yes: not found". This a bug or feature?

Bug/regression due to new syslinux behaviour. I have similar issue on
my computer too. Just not had time to actually fix it.

> 3. I've passed console=tty0 console=ttyS1,115200 for my Ubuntu kernels
> on Dell servers with IPMI SOL to see kernel output both on IP KVM and
> IPMI SOL (because not everywhere I have both). I think tty0 must not
> be placed in inittab, because it is "current console". Seems like a
> bug?

Yeah. this sounds like bug.

> 4. Code looks overcomplicated because there are
>   a) not many options to be parsed by initramfs-init
>   b) not all kernel options must be parsed by initramfs-init, unknown
> options must be skipped (and errors as in #2 will not be raised in the
> future)

Agree. We should only fish out the options we actually use and don't
bother about the rest. I have one more example where current code will
break things:

  cirrus.modeset=0

> 
> 8<------------------------------------------------------------------------------------------->8
> # read the kernel options. We use eval set so we can handle things
> like # acpi_osi="!Windows 2006"
> eval set -- `cat /proc/cmdline`
> 
> while [ $# -gt 0 ]; do
>         case "$1" in
>                 s|single|1)
>                         SINGLEMODE=yes ;;
>                 console=*)
>                         CONSOLE="$CONSOLE ${1#console=}";;
>                 *=*)    eval "KOPT_${1%%=*}='${1#*=}'" ;;
>                 no*)    eval "KOPT_$(echo ${1#no} | sed
> 's: :_:g')=no" ;; *)      eval "KOPT_$(echo $1 | sed
> 's: :_:g')=yes" ;; esac
>         shift
> done
> 8<------------------------------------------------------------------------------------------->8
> 
> / # cat /proc/cmdline
> /boot/datacom /boot/datacom initrd=/boot/datacom.gz
> alpine_dev=usbdisk:vfat modules=loop,squashfs,sd-mod,usb-storage
> nomodeset console=tty0 console=ttyS1,115200


Thanks for your feedback, and sorry for the breakages due to syslinux-5.

-nc


---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---
Natanael Copa <ncopa@alpinelinux.org>
Details
Message ID
<20130226222040.16f2a4a4@ncopa-laptop.res.nor.wtbts.net>
In-Reply-To
<20130226214549.3e82b644@ncopa-laptop.res.nor.wtbts.net> (view parent)
Sender timestamp
1361913640
DKIM signature
missing
Download raw message
Patch: +14 -13
On Tue, 26 Feb 2013 21:45:49 +0100
Natanael Copa <ncopa@alpinelinux.org> wrote:
 
> > 4. Code looks overcomplicated because there are
> >   a) not many options to be parsed by initramfs-init
> >   b) not all kernel options must be parsed by initramfs-init,
> > unknown options must be skipped (and errors as in #2 will not be
> > raised in the future)
> 
> Agree. We should only fish out the options we actually use and don't
> bother about the rest.

How about this:
diff --git a/initramfs-init.in b/initramfs-init.in
index 6e1ebc1..60a0255 100755
--- a/initramfs-init.in
+++ b/initramfs-init.in
@@ -283,22 +283,23 @@ echo "Alpine Init $VERSION"
# acpi_osi="!Windows 2006"
eval set -- `cat /proc/cmdline`

while [ $# -gt 0 ]; do
	case "$1" in
		s|single|1)
			SINGLEMODE=yes ;;
		console=*)
			CONSOLE="$CONSOLE ${1#console=}";;
		*=*)    eval "KOPT_${1%%=*}='${1#*=}'" ;;
		no*)    eval "KOPT_$(echo ${1#no} | sed 's: :_:g')=no" ;;
		*)      eval "KOPT_$(echo $1 | sed 's: :_:g')=yes" ;;
for opt in "$@"; do
	case "$opt" in
	s|single|1)
		SINGLEMODE=yes ;;
	console=*)
		CONSOLE="$CONSOLE ${opt#console=}";;
	debug_init)
		set -x;;
	alpine_dev|autodetect|autoraid|chart|cryptroot|debug_init|dma|init_args|keep_apk_new|modules|ovl_dev|pkgs|quiet|root_size|root|usbdelay)
		case "$opt" in
		*=*)    eval "KOPT_${opt%%=*}='${opt#*=}'";;
		no*)    eval "KOPT_${opt#no}=no";;
		*)      eval "KOPT_$opt=yes";;
		esac
	esac
	shift
done

# enable debugging if requested
[ -n "$KOPT_debug_init" ] && set -x

# pick first keymap if found
for map in /etc/keymap/*; do
	if [ -f "$map" ]; then



nc


---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---
Natanael Copa <ncopa@alpinelinux.org>
Details
Message ID
<20130227114328.37822965@ncopa-desktop.alpinelinux.org>
In-Reply-To
<20130226222040.16f2a4a4@ncopa-laptop.res.nor.wtbts.net> (view parent)
Sender timestamp
1361961808
DKIM signature
missing
Download raw message
On Tue, 26 Feb 2013 22:20:40 +0100
Natanael Copa <ncopa@alpinelinux.org> wrote:

> On Tue, 26 Feb 2013 21:45:49 +0100
> Natanael Copa <ncopa@alpinelinux.org> wrote:
>  
> > > 4. Code looks overcomplicated because there are
> > >   a) not many options to be parsed by initramfs-init
> > >   b) not all kernel options must be parsed by initramfs-init,
> > > unknown options must be skipped (and errors as in #2 will not be
> > > raised in the future)
> > 
> > Agree. We should only fish out the options we actually use and don't
> > bother about the rest.
> 
> How about this:
> diff --git a/initramfs-init.in b/initramfs-init.in
> index 6e1ebc1..60a0255 100755
> --- a/initramfs-init.in
> +++ b/initramfs-init.in
> @@ -283,22 +283,23 @@ echo "Alpine Init $VERSION"
>  # acpi_osi="!Windows 2006"
>  eval set -- `cat /proc/cmdline`
>  
> -while [ $# -gt 0 ]; do
> -	case "$1" in
> -		s|single|1)
> -			SINGLEMODE=yes ;;
> -		console=*)
> -			CONSOLE="$CONSOLE ${1#console=}";;
> -		*=*)    eval "KOPT_${1%%=*}='${1#*=}'" ;;
> -		no*)    eval "KOPT_$(echo ${1#no} | sed 's: :_:g')=no" ;;
> -		*)      eval "KOPT_$(echo $1 | sed 's: :_:g')=yes" ;;
> +for opt in "$@"; do
> +	case "$opt" in
> +	s|single|1)
> +		SINGLEMODE=yes ;;
> +	console=*)
> +		CONSOLE="$CONSOLE ${opt#console=}";;
> +	debug_init)
> +		set -x;;
> +	alpine_dev|autodetect|autoraid|chart|cryptroot|debug_init|dma|init_args|keep_apk_new|modules|ovl_dev|pkgs|quiet|root_size|root|usbdelay)
> +		case "$opt" in
> +		*=*)    eval "KOPT_${opt%%=*}='${opt#*=}'";;
> +		no*)    eval "KOPT_${opt#no}=no";;
> +		*)      eval "KOPT_$opt=yes";;
> +		esac
>  	esac
> -	shift
>  done

Will not work due to things like nochart noquiet. :-/

Anyone have better ideas?

-nc


---
Unsubscribe:  alpine-devel+unsubscribe@lists.alpinelinux.org
Help:         alpine-devel+help@lists.alpinelinux.org
---
Reply to thread Export thread (mbox)