RE: [PATCH, resend] build: fix broken kernel RPM source symlink

From: Espen Carlsen
Date: Thu Jul 09 2015 - 05:30:18 EST


> From: Paul Bolle [mailto:pebolle@xxxxxxxxxx]
> [I resisted looking into the flood of info you included in this message.
> But this part could turn out to be interesting.]
> On ma, 2015-07-06 at 21:37 +0200, Espen Carlsen wrote:
> > This is the how BUILDROOT looks after rpmbuild -bi kernel-4.1.0.spec
> > on an Ubuntu system, notice that on Ubuntu, there are already a
> > 'build' and 'source' symlink before the ln -sf commands are issued,
> > CentOS however doesn't have those links on the same step.
> > user@build-ubuntu:/srv/user/rpmbuild$ rpmbuild -bi
> > SPECS/kernel-4.1.0.spec
> That is outside the realm of "make rpm".
> I assume kernel-4.1.0.spec was a copy, somehow made, of kernel.spec as
> was created by "make rpm". Does it matter, for the issue you ran into,
> whether "make rpm" or "rpmbuild -bb SPECS/kernel.spec" is involved?

During "make rpm", I copied the tar.gz and kernel.spec files, so I could debug.
The reason for using "rpmbuild -bb" instead is that it goes faster to get to the same point than
"make rpm". But I can reproduce the issue both with "make rpm" and "rpmbuild -bb".

> > user@build-ubuntu:/srv/user/rpmbuild/BUILDROOT/kernel-4.1.0-1.x86_64/lib/modules/4.1.0$ ls -gG total 64
> > lrwxrwxrwx 1 35 Jul 6 18:56 build -> /srv/user/rpmbuild/BUILD/kernel-4.1.0
> > [...]
> > lrwxrwxrwx 1 35 Jul 6 19:00 source -> /srv/user/rpmbuild/BUILD/kernel-4.1.0
> These two links are, I think, generated in this snippet from the main
> Makefile:
> _modinst_:
> @rm -rf $(MODLIB)/kernel
> @rm -f $(MODLIB)/source
> @mkdir -p $(MODLIB)/kernel
> @ln -s `cd $(srctree) && /bin/pwd` $(MODLIB)/source
> @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
> rm -f $(MODLIB)/build ; \
> ln -s $(CURDIR) $(MODLIB)/build ; \
> fi
> @cp -f $(objtree)/modules.order $(MODLIB)/
> @cp -f $(objtree)/modules.builtin $(MODLIB)/
> $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modinst
> I wonder why you don't see similar links when building on CentOS. I saw
> similar links in rpm's BUILDROOT when building on Fedora 22.

I just did my test on Fedora 22.
As I stated in the example email, you have to comment out or remove:
ln -sf /usr/src/kernels/4.1.0 build
ln -sf /usr/src/kernels/4.1.0 source
from the %install section of the .spec file.

Without them, you'll notice that on Fedora 22 Server, when compiling the kernel, the "build" and "source" links aren't there.
That's what those two lines in the spec file are for, to add the "build" and "source" symlinks.
On an Ubuntu system however, the links are there, so the ln -sf lines will not overwrite the existing ones, instead there will be created a new symlink inside the directory that build and source points to named "4.1.0" pointing to /usr/src/kernels/4.1.0 (look at the example mail).
Changing the lines:
ln -sf /usr/src/kernels/4.1.0 build
ln -sf /usr/src/kernels/4.1.0 source
to:
ln -sfT /usr/src/kernels/4.1.0 build
ln -sfT /usr/src/kernels/4.1.0 source
Will change the spec script to overwrite the existing links on the Ubuntu type systems so it will be correct.

Espen

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/