The kernel passes arguments from /proc/cmdline as a single string like
foo=bar baz="something with spaces". In the latter case, with the added
single quotes the actual value of ${KOPT_baz} would contain these quotes
as well, which is not the intention.
---
initramfs-init.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/initramfs-init.in b/initramfs-init.in
index 78bcbe4..9aa1d3f 100755
--- a/initramfs-init.in+++ b/initramfs-init.in
@@ -279,7 +279,7 @@ for opt; do
for i in $myopts; do
case "$opt" in
- $i=*) eval "KOPT_${i}='${opt#*=}'";;+ $i=*) eval "KOPT_${i}=${opt#*=}";; $i) eval "KOPT_${i}=yes";;
no$i) eval "KOPT_${i}=no";;
esac
--
2.10.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
This fixes various issues in later boot procedures if relying on localhost
to work properly and if no further networking configuration is done.
---
initramfs-init.in | 3 +++
1 file changed, 3 insertions(+)
diff --git a/initramfs-init.in b/initramfs-init.in
index 9aa1d3f..b8ce2f1 100755
--- a/initramfs-init.in+++ b/initramfs-init.in
@@ -313,6 +313,9 @@ if [ "$KOPT_dma" = no ]; then
modprobe libata dma=0
fi
+# setup loopback interface+ip_set lo 127.0.0.1 255.0.0.0+# The following values are supported:
# alpine_repo=auto -- default, search for .boot_repository
# alpine_repo=http://... -- network repository
--
2.10.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
On Thu, 17 Nov 2016 02:52:52 +0100
Shiz <hi@shiz.me> wrote:
> This fixes various issues in later boot procedures if relying on localhost> to work properly and if no further networking configuration is done.
Hi,
I'm just curious what those issues are?
I know that if you for example use /etc/init.d/dhcpcd instead
of /etc/init.d/networking then you'll have your lo interface
unconfigured. (which I work around by having lo only in networking and
enable both services)
I also think that you may have the same issues in LXC for example,
unless you explicitly configure lo during boot. and LXC does not use
initramfs at all.
So I wonder if this is the correct place to fix it.
-nc
> ---> initramfs-init.in | 3 +++> 1 file changed, 3 insertions(+)> > diff --git a/initramfs-init.in b/initramfs-init.in> index 9aa1d3f..b8ce2f1 100755> --- a/initramfs-init.in> +++ b/initramfs-init.in> @@ -313,6 +313,9 @@ if [ "$KOPT_dma" = no ]; then> modprobe libata dma=0> fi> > +# setup loopback interface> +ip_set lo 127.0.0.1 255.0.0.0> +> # The following values are supported:> # alpine_repo=auto -- default, search for .boot_repository> # alpine_repo=http://... -- network repository
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
> On 28 Nov 2016, at 20:33, Natanael Copa <ncopa@alpinelinux.org> wrote:> > On Thu, 17 Nov 2016 02:52:52 +0100> Shiz <hi@shiz.me> wrote:> >> This fixes various issues in later boot procedures if relying on localhost>> to work properly and if no further networking configuration is done.> > Hi,> > I'm just curious what those issues are?> > I know that if you for example use /etc/init.d/dhcpcd instead> of /etc/init.d/networking then you'll have your lo interface> unconfigured. (which I work around by having lo only in networking and> enable both services)> > I also think that you may have the same issues in LXC for example,> unless you explicitly configure lo during boot. and LXC does not use> initramfs at all.> > So I wonder if this is the correct place to fix it.> > -nc
Hi,
You’re probably correct - I was lead to that approach perhaps more
because the initramfs already does configure the eth0 interface correctly.
Adding /etc/network/interfaces and the networking service is probably
the better approach, yes. Feel free to disregard this patch.
I do wonder to what extent applications rely on lo to work without
explicitly needing networking as such, but if that hasn’t been an issue
until now, no reason to further dig into it.
- Shiz
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---
---- On Thu, 17 Nov 2016 02:52:51 +0100 Shiz <hi@shiz.me> wrote ----
> The kernel passes arguments from /proc/cmdline as a single string like
> foo=bar baz="something with spaces". In the latter case, with the added
> single quotes the actual value of ${KOPT_baz} would contain these quotes
> as well, which is not the intention.
Description is a bit wrong. Kernel provides arguments used during boot
via /proc/cmdline as a single text line.
The problem is that
set -- $(cat /proc/cmdline)
doesn't do what you think it does (or at least what your patch assumes).
There is even a comment earlier:
# read the kernel options. we need surve things like:
# acpi_osi="!Windows 2006" xen-pciback.hide=(01:00.0)
to hint that it's not an easy matter.
If you'd perform in POSIX sh:
./script acpi_osi="!Windows 2006" xen-pciback.hide='(01:00.0)'
Then $1 would be equal to 'acpi_osi=!Windows 2006'
and $2 would be queal to 'xen-pciback.hide=(01:00.0)'
(single-quoting around value of xen-pciback.hide in ./script call was
necessary to avoid interpreting of parenthesis and raising error).
Both without the single-quotes, of course.
(Actually in bash you'd have to change double-quoting in first argument
to single-quoting too, because otherwise ! is interpreted and you get
error.)
But if you do:
echo 'acpi_osi="!Windows 2006" xen-pciback.hide=(01:00.0)' >cmdline
./script $(cat cmdline)
then:
$1 = 'acpi_osi="!Windows'
$2 = '2006"'
$3 = 'xen-pciback.hide=(01:00.0)'
All without the single-quotes, of course.
so it's not what we want.
We don't have information about real argument boundaries.
What we need is to reassemble arguments. Something akin to recreating
"$@" from $*. It's quite hard to do in POSIX sh. I spend some time
yesterday and I came up with:
https://gist.github.com/przemoc/168ecd5a263e1e498ee6d2ee4278e4ae
It's not perfect, it's not a beauty, but I think it's very good
approximation of what we need and it works (it handles many cases, but
obviously not all of them - doing it in shell is more than cumbersome).
The code (w/o show current arguments part) should be put after
set -- $(cat /proc/cmdline), and then your patch should be reverted
(i.e. single-quoting in eval KOPT_${i} assignment should be restored).
I hoped to provide such patch, but it's already so late, that I won't do
it today and I am merely informing about the problem.
I'm also starting to doubt that ncopa will happily include additional
150 lines in initramfs-init.in, even if they work, so it may be better
to get some kind of half-ACK at least before preparing the patch.
Regards,
Przemek
> ---
> initramfs-init.in | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/initramfs-init.in b/initramfs-init.in
> index 78bcbe4..9aa1d3f 100755
> --- a/initramfs-init.in
> +++ b/initramfs-init.in
> @@ -279,7 +279,7 @@ for opt; do
>
> for i in $myopts; do
> case "$opt" in
> - $i=*) eval "KOPT_${i}='${opt#*=}'";;
> + $i=*) eval "KOPT_${i}=${opt#*=}";;
> $i) eval "KOPT_${i}=yes";;
> no$i) eval "KOPT_${i}=no";;
> esac
> --
> 2.10.0
---
Unsubscribe: alpine-devel+unsubscribe@lists.alpinelinux.org
Help: alpine-devel+help@lists.alpinelinux.org
---