Comments
Patch
@@ -1,6 +1,15 @@
# Makefile for the different targets used to generate full packages of a kernel
# It uses the generic clean infrastructure of kbuild
+# How to acquire (fake) root privileges
+ifndef KBUILD_PKG_ROOTCMD
+ifneq ($(shell id -u),0)
+ifeq ($(shell which fakeroot >/dev/null 2>&1 && echo found),found)
+KBUILD_PKG_ROOTCMD := fakeroot -u
+endif
+endif
+endif
+
# RPM target
# ---------------------------------------------------------------------------
# The rpm target generates two rpm files:
Unless already running as root, use fakeroot to ensure the files in the generated binary packages are owned by root. Without this change, you have to set KBUILD_PKG_ROOTCMD or become root yourself to run "make foo-pkg". With this patch applied, you can run "make oldconfig rpm-pkg" as an ordinary user to build a binary package for an updated kernel tree and it should just work. fakeroot is a bit too zealous by default in pretending files are owned by root. Unless directed otherwise, its wrapped stat() and lstat() set st_uid and st_gid to 0 for all files. This slows down the Linux build with CONFIG_LOCALVERSION_AUTO a lot, since git notices that the owners have changed and has to reread the entire kernel tree to learn that the content has not changed. Since "make modules_install" and "scripts/package/foo" run within the same fakeroot session, we are free to avoid this by telling fakeroot to use the actual owner and group for preexisting files, by passing it the -u option. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> --- Changes from v1: - rename ROOTCMD variable to KBUILD_PKG_ROOTCMD scripts/package/Makefile | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-)