Re: [PATCH v7] kbuild: add script and target to generate pacman package

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2024-07-21 22:42:12+0000, Masahiro Yamada wrote:
> On Sun, Jul 21, 2024 at 9:11 PM Nathan Chancellor <nathan@xxxxxxxxxx> wrote:
> >
> > Hi Masahiro,
> >
> > On Sun, Jul 21, 2024 at 03:58:49PM +0900, Masahiro Yamada wrote:
> > > On Sun, Jul 21, 2024 at 12:32 PM Nathan Chancellor <nathan@xxxxxxxxxx> wrote:
> > > > On Sat, Jul 20, 2024 at 11:18:12AM +0200, Thomas Weißschuh wrote:
> > > > > pacman is the package manager used by Arch Linux and its derivates.
> > > > > Creating native packages from the kernel tree has multiple advantages:
> > > > >
> > > > > * The package triggers the correct hooks for initramfs generation and
> > > > >   bootloader configuration
> > > > > * Uninstallation is complete and also invokes the relevant hooks
> > > > > * New UAPI headers can be installed without any manual bookkeeping
> > > > >
> > > > > The PKGBUILD file is a modified version of the one used for the
> > > > > downstream Arch Linux "linux" package.
> > > > > Extra steps that should not be necessary for a development kernel have
> > > > > been removed and an UAPI header package has been added.
> > > > >
> > > > > Signed-off-by: Thomas Weißschuh <linux@xxxxxxxxxxxxxx>
> > > > > ---
> > > >
> > > > I think this looks really solid now, thanks again for the PACMAN_PKGBASE
> > > > addition.
> > > >
> > > > I tested building Arch Linux's configuration for x86_64 and booting it
> > > > in a VM. I built Fedora's configuration for aarch64 just to test the
> > > > cross building aspect and making sure the result of various bits that we
> > > > added that would not affect x86 (such as the dtb installation) looked
> > > > reasonable.
> > > >
> > > > Reviewed-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> > > > Tested-by: Nathan Chancellor <nathan@xxxxxxxxxx>
> > >
> > > I believe this is a separate issue, but
> > > Debian/Ubuntu provides a 'makepkg' package, which fails
> > > with 'User defined signal 1' error.
> > >
> > > After 'sudo apt install makepkg',
> > >
> > > masahiro@zoe:~/ref/linux-next((HEAD detached from origin/master))$ cat
> > > /etc/os-release
> > > PRETTY_NAME="Ubuntu 24.04 LTS"
> > > NAME="Ubuntu"
> > > VERSION_ID="24.04"
> > > VERSION="24.04 LTS (Noble Numbat)"
> > > VERSION_CODENAME=noble
> > > ID=ubuntu
> > > ID_LIKE=debian
> > > HOME_URL="https://www.ubuntu.com/";
> > > SUPPORT_URL="https://help.ubuntu.com/";
> > > BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/";
> > > PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy";
> > > UBUNTU_CODENAME=noble
> > > LOGO=ubuntu-logo
> > > masahiro@zoe:~/ref/linux-next((HEAD detached from origin/master))$
> > > makepkg --version
> > > makepkg (pacman) 6.0.2
> > > Copyright (c) 2006-2021 Pacman Development Team <pacman-dev@xxxxxxxxxxxxx>.
> > > Copyright (C) 2002-2006 Judd Vinet <jvinet@xxxxxxxxxxxx>.
> > >
> > > This is free software; see the source for copying conditions.
> > > There is NO WARRANTY, to the extent permitted by law.
> > > masahiro@zoe:~/ref/linux-next((HEAD detached from origin/master))$ git
> > > log --oneline -2
> > > 5dcaebb67ad9 (HEAD) kbuild: add script and target to generate pacman package
> > > 41c196e567fb (tag: next-20240719, origin/master, origin/HEAD) Add
> > > linux-next specific files for 20240719
> > > masahiro@zoe:~/ref/linux-next((HEAD detached from origin/master))$
> > > make defconfig  pacman-pkg
> > > *** Default configuration is based on 'x86_64_defconfig'
> > > #
> > > # No change to .config
> > > #
> > > objtree="/home/masahiro/ref/linux-next" \
> > > BUILDDIR="" \
> >
> > It is not related to this issue but I don't think this should be empty.
> > 'realpath pacman' does not appear to work here, I was able to fix this
> > with the following diff:
> >
> > diff --git a/scripts/Makefile.package b/scripts/Makefile.package
> > index 94357f47d2fa..b0fd44a40075 100644
> > --- a/scripts/Makefile.package
> > +++ b/scripts/Makefile.package
> > @@ -148,7 +148,7 @@ PHONY += pacman-pkg
> >  pacman-pkg:
> >         @ln -srf $(srctree)/scripts/package/PKGBUILD $(objtree)/PKGBUILD
> >         +objtree="$(realpath $(objtree))" \
> > -               BUILDDIR="$(realpath pacman)" \
> > +               BUILDDIR="$(realpath $(objtree))/pacman" \
> 
> 
> Right.
> 
> $(realpath pacman) expands to empty
> if 'pacman' does not exist yet.
> Your fix is correct.

I'm wondering how it worked for me, as I specifically tested this case.
But I'm fine with the proposal.

Shouldn't it be "$(realpath ./pacman)" though?

> 
> >                 CARCH="$(UTS_MACHINE)" \
> >                 KBUILD_MAKEFLAGS="$(MAKEFLAGS)" \
> >                 KBUILD_REVISION="$(shell $(srctree)/scripts/build-version)" \
> >
> >
> > > CARCH="x86_64" \
> > > KBUILD_MAKEFLAGS="rR --no-print-directory" \
> > > KBUILD_REVISION="4" \
> > > makepkg
> > >
> > > ==> ERROR: An unknown error has occurred. Exiting...
> > > User defined signal 1
> > > make[3]: *** [scripts/Makefile.package:150: pacman-pkg] Error 138
> > > make[2]: *** [Makefile:1538: pacman-pkg] Error 2
> > > make[1]: *** [/home/masahiro/ref/linux-next/Makefile:347:
> > > __build_one_by_one] Error 2
> > > make: *** [Makefile:224: __sub-make] Error 2
> > >
> > > Do you know anything?
> >
> > Adding '-x' to the interpreter line in /usr/bin/makepkg shows that
> > pacman is implicitly required for makepkg to function, so you'll need to
> > install pacman-package-manager as well. However, even with it installed,
> > the build will fail because you will be unable to perform the dependency
> > checking (since pacman won't be managing the packages).

It seems very weird that there is no dependency, not even a soft one,
from makepkg to pacman.

> > I think the traditional solution for this situation (building a
> > distribution's package on a distribution other than the one the package
> > is being built for) is using an OPTS variable to allow the user to pass
> > in the dependency checking skip flag (that's what I do for RPM builds on
> > Arch Linux), so perhaps MAKEPKGOPTS so that you can use MAKEPKGOPTS=-d?
> > With this diff and that variable value, the build starts within makepkg
> > for me.
> >
> > diff --git a/scripts/Makefile.package b/scripts/Makefile.package
> > index b0fd44a40075..4a80584ec771 100644
> > --- a/scripts/Makefile.package
> > +++ b/scripts/Makefile.package
> > @@ -152,7 +152,7 @@ pacman-pkg:
> >                 CARCH="$(UTS_MACHINE)" \
> >                 KBUILD_MAKEFLAGS="$(MAKEFLAGS)" \
> >                 KBUILD_REVISION="$(shell $(srctree)/scripts/build-version)" \
> > -               makepkg
> > +               makepkg $(MAKEPKGOPTS)
> 
> 
> Thank you for delving into this!

Thanks to both of you!

> With -d option, I was able to compile it.
> 
> I previously compile-tested it in an Arch Linux Docker container,
> but this is more convenient.
> 
> 
> Thomas, will you send v8 with Nathan's suggestion?
> 
> Or, I can offer to fold the diff if Thomas agrees.

If you are fine with folding the diff, please do!


Thanks,
Thomas




[Index of Archives]     [Linux&nblp;USB Development]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite Secrets]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux