how to avoid that install.sh goes mad, if I am not root?
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi folks,
I am trying to build my own custom Debian kernel package. Problem:
If the kernel is supposed to be installed in a temporary package build directory, then it dies with
:
:
make[1]: Entering directory `/var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37'
sh /var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37/arch/x86/boot/install.sh 2.6.37 arch/x86/boot/bzImage \
System.map "/var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot"
run-parts: executing /etc/kernel/postinst.d/dkms 2.6.37 /var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37
dkms: running auto installation service for kernel 2.6.37:
nvidia-current (260.19.29)...done.
vboxhost (3.2.12)...done.run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.37 /var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37
run-parts: executing /etc/kernel/postinst.d/pm-utils 2.6.37 /var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37
touch: cannot touch `/var/run/do-not-hibernate': Permission denied
run-parts: /etc/kernel/postinst.d/pm-utils exited with return code 1
make[3]: *** [install] Error 1
make[2]: *** [install] Error 2
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37'
AFAICS this happens because the arch/x86/boot/install.sh script calls /sbin/installkernel, which in turn runs all the scripts delivered by various other packages. This is fine for a regular kernel install as well as for an installation of the final kernel package, but for a non-root install in a package build directory /sbin/installkernel and all the run-parts scripts should not be run. installkernel doesn't even know the redefined install directory.
Would it be possible to avoid that /sbin/installkernel is run by install,sh, e.g. if the install directory has been redefined, or if UID != 0?
Any helpful comment would be highly appreciated
Harri
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk04igIACgkQUTlbRTxpHjcO3wCcCXsb6ma4ypqQliWi8XYyFcUE 6PYAnA1JP78Bw2uZM4eyr4FHO9uBi0Ex
=zAFX
-----END PGP SIGNATURE-----
Quoted 36 lines · Harald Dunkel
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Hi folks,
I am trying to build my own custom Debian kernel package. Problem:
If the kernel is supposed to be installed in a temporary package build directory, then it dies with:
:
make[1]: Entering directory `/var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37'sh /var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37/arch/x86/boot/install.sh 2.6.37 arch/x86/boot/bzImage \ System.map "/var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot" run-parts: executing /etc/kernel/postinst.d/dkms 2.6.37 /var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37 dkms: running auto installation service for kernel 2.6.37: nvidia-current (260.19.29)...done. vboxhost (3.2.12)...done.run-parts: executing
/etc/kernel/postinst.d/initramfs-tools2.6.37/var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37
run-parts: executing/etc/kernel/postinst.d/pm-utils2.6.37/var/tmp/build_kernel/raw-kernel-2.6.37/debian/raw-kernel-2.6.37/boot/vmlinuz-2.6.37
touch: cannot touch `/var/run/do-not-hibernate': Permission denied
run-parts:/etc/kernel/postinst.d/pm-utilsexited with return code 1
make[3]: *** [install] Error 1
make[2]: *** [install] Error 2
make[1]: *** [sub-make] Error 2
make[1]: Leaving directory `/var/tmp/build_kernel/raw-kernel-2.6.37/linux-2.6.37'AFAICS this happens because the
arch/x86/boot/install.shscript calls/sbin/installkernel, which in turn runs all the scripts delivered by various other packages. This is fine for a regular kernel install as well as for an installation of the final kernel package, but for a non-root install in a package build directory/sbin/installkerneland all the run-parts scripts should not be run. installkernel doesn't even know the redefined install directory.
Quoted 6 lines
Would it be possible to avoid that
/sbin/installkernelis run by install,sh, e.g. if the install directory has been redefined, or if UID != 0?Any helpful comment would be highly appreciated
First, at least on x86, the kernel will look for the 'installkernel' executable first in your own ~/bin/, so if you have that then it will override /sbin/installkernel.
Second, you don't have to let the kernel choose; just run /path/to/myinstallkernel $kernelversion path/to/boot/image System.map (Disadvantage: path/to/boot/image varies depending on arch.)
Quoted 5 lines · Mikael Pettersson
First, at least on x86, the kernel will look for the 'installkernel' executable first in your own ~/bin/, so if you have that then it will override
/sbin/installkernel.
That still doesn't look like a good solution.
/me is thinking if we should have a new Kconfig for this, e.g. CONFIG_INSTALL_KERNEL whose default value is "/sbin/installkernel".
Cheers.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Quoted 9 lines · WANG Cong
Quoted 5 lines · Mikael Pettersson
First, at least on x86, the kernel will look for the 'installkernel' executable first in your own ~/bin/, so if you have that then it will override
/sbin/installkernel.That still doesn't look like a good solution.
Same for me.
Obviously running /sbin/installkernel is not reasonable for UID != 0 (or if $FAKEROOTKEY is set), so I would suggest to skip /sbin/installkernel and the default Lilo setup in install.sh for this case.
Only a suggestion, of course.
Regards
Harri
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk06A8oACgkQUTlbRTxpHjeuVwCeJjTgyjcIqvqrUTqxoGgAJngd iwkAn2U/qiekItqItRBmpeEqk/dH0FKZ
=LgO3
-----END PGP SIGNATURE-----
PATCH 1/1 make installkernel configurable from command line (was Re: how to avoid that install.sh goes mad, if I am not root?)
Quoted 14 lines · Harald Dunkel
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Quoted 9 lines · WANG Cong
Quoted 5 lines · Mikael Pettersson
First, at least on x86, the kernel will look for the 'installkernel' executable first in your own ~/bin/, so if you have that then it will override
/sbin/installkernel.That still doesn't look like a good solution.
Quoted 7 lines
Same for me.
Obviously running
/sbin/installkernelis not reasonable for UID != 0 (or if $FAKEROOTKEY is set), so I would suggest to skip/sbin/installkerneland the default Lilo setup ininstall.shfor this case.
Will the patch below work for you?
With this patch, you should be able to specify your own installkernel by "make INSTALLKERNEL=/your/installkernel install".
---
Makefile +1 -1
@@ -327,7 +327,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms -INSTALLKERNEL := installkernel +INSTALLKERNEL ?= /sbin/installkernel DEPMOD = /sbin/depmod KALLSYMS = scripts/kallsyms PERL = perl
arch/x86/boot/install.sh +1 -2
@@ -33,8 +33,7 @@ verify "$3" # User may have a custom install script -if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi -if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi +if [ -x "${INSTALLKERNEL}" ]; then exec "${INSTALLKERNEL}" "$@"; fi # Default install - same as make zlilo
Re: [Patch] make installkernel configurable from command line (was Re: how to avoid that install.sh goes mad, if I am not root?)
Quoted 49 lines · =?utf-8?Q?Am=C3=A9rico?= Wang writes:
Quoted 14 lines · Harald Dunkel
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1Quoted 9 lines · WANG Cong
Quoted 5 lines · Mikael Pettersson
First, at least on x86, the kernel will look for the 'installkernel' executable first in your own ~/bin/, so if you have that then it will override
/sbin/installkernel.That still doesn't look like a good solution.
Quoted 7 lines
Same for me.
Obviously running
/sbin/installkernelis not reasonable for UID != 0 (or if $FAKEROOTKEY is set), so I would suggest to skip/sbin/installkerneland the default Lilo setup ininstall.shfor this case.Will the patch below work for you?
With this patch, you should be able to specify your own installkernel by "make INSTALLKERNEL=/your/installkernel install".
Signed-off-by WANG Cong <[email protected]>---
Makefile +1
-1@@ -327,7 +327,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms -INSTALLKERNEL := installkernel +INSTALLKERNEL ?= /sbin/installkernel DEPMOD = /sbin/depmod KALLSYMS = scripts/kallsyms PERL = perlarch/x86/boot/install.sh +0
-0
arch/x86/boot/install.sh verify "$3" · line 36
Quoted 6 lines
arch/x86/boot/install.sh +1
-2@@ -33,8 +33,7 @@ verify "$3" # User may have a custom install script -if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi -if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi +if [ -x "${INSTALLKERNEL}" ]; then exec "${INSTALLKERNEL}" "$@"; fi
NAK -- this breaks existing setups which rely on /root/bin/installkernel being picked up automatically.
Can you handle 'make INSTALLKERNEL=...' without breaking that please?
Re: [Patch] make installkernel configurable from command line (was Re: how to avoid that install.sh goes mad, if I am not root?)
Quoted 4 lines · Mikael Pettersson
NAK -- this breaks existing setups which rely on
/root/bin/installkernelbeing picked up automatically.Can you handle 'make INSTALLKERNEL=...' without breaking that please?
Yes, here we go.
--------->
---
Makefile +1 -1
@@ -327,7 +327,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms -INSTALLKERNEL := installkernel +INSTALLKERNEL ?= /sbin/installkernel DEPMOD = /sbin/depmod KALLSYMS = scripts/kallsyms PERL = perl
arch/x86/boot/install.sh +2 -2
@@ -33,8 +33,8 @@ verify "$3" # User may have a custom install script -if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi -if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi +if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi +if [ -x "${INSTALLKERNEL}" ]; then exec "${INSTALLKERNEL}" "$@"; fi # Default install - same as make zlilo
Re: [Patch] make installkernel configurable from command line (was Re: how to avoid that install.sh goes mad, if I am not root?)
[cc: linux-kbuild's address corrected]
Quoted 31 lines · =?utf-8?Q?Am=C3=A9rico?= Wang writes:
Quoted 4 lines · Mikael Pettersson
NAK -- this breaks existing setups which rely on
/root/bin/installkernelbeing picked up automatically.Can you handle 'make INSTALLKERNEL=...' without breaking that please?
Yes, here we go.
--------->
Signed-off-by WANG Cong <[email protected]>---
Makefile +1
-1@@ -327,7 +327,7 @@ OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump AWK = awk GENKSYMS = scripts/genksyms/genksyms -INSTALLKERNEL := installkernel +INSTALLKERNEL ?= /sbin/installkernel DEPMOD = /sbin/depmod KALLSYMS = scripts/kallsyms PERL = perlarch/x86/boot/install.sh +0
-0
arch/x86/boot/install.sh verify "$3" · line 39
Quoted 9 lines
arch/x86/boot/install.sh +2
-2@@ -33,8 +33,8 @@ verify "$3" # User may have a custom install script -if [ -x ~/bin/${INSTALLKERNEL} ]; then exec ~/bin/${INSTALLKERNEL} "$@"; fi -if [ -x /sbin/${INSTALLKERNEL} ]; then exec /sbin/${INSTALLKERNEL} "$@"; fi +if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi +if [ -x "${INSTALLKERNEL}" ]; then exec "${INSTALLKERNEL}" "$@"; fi # Default install - same as make zlilo
Tested. This works as far as not overriding root's ~/bin/installkernel if it exists, but it fails to give precedence to an explicit command-line INSTALLKERNEL=... over the built-in fallbacks. I don't see an easy way to fix that without first consolidating all archs' INSTALLKERNEL handling into the top-level Makefile.
Not using make install and just invoking your own install script directly works, so I'm not sure this is worth the trouble (unless you can unify all archs' INSTALLKERNEL handling as a side-effect / cleanup).
Re: [Patch] make installkernel configurable from command line (was Re: how to avoid that install.sh goes mad, if I am not root?)
Quoted 6 lines · Mikael Pettersson
Tested. This works as far as not overriding root's ~/bin/installkernel if it exists, but it fails to give precedence to an explicit command-line INSTALLKERNEL=... over the built-in fallbacks. I don't see an easy way to fix that without first consolidating all archs' INSTALLKERNEL handling into the top-level
Makefile.
Yes, exactly, I can expect this.
Quoted 4 lines
Not using make install and just invoking your own install script directly works, so I'm not sure this is worth the trouble (unless you can unify all archs' INSTALLKERNEL handling as a side-effect / cleanup).
Agreed, I will have a try.
Thanks!