|
Revision tags: v6.15, v6.15-rc7, v6.15-rc6, v6.15-rc5, v6.15-rc4, v6.15-rc3, v6.15-rc2, v6.15-rc1 |
|
| #
a7c699d0 |
| 31-Mar-2025 |
Uday Shankar <[email protected]> |
kbuild: rpm-pkg: build a debuginfo RPM
The rpm-pkg make target currently suffers from a few issues related to debuginfo: 1. debuginfo for things built into the kernel (vmlinux) is not available i
kbuild: rpm-pkg: build a debuginfo RPM
The rpm-pkg make target currently suffers from a few issues related to debuginfo: 1. debuginfo for things built into the kernel (vmlinux) is not available in any RPM produced by make rpm-pkg. This makes using tools like systemtap against a make rpm-pkg kernel impossible. 2. debug source for the kernel is not available. This means that commands like 'disas /s' in gdb, which display source intermixed with assembly, can only print file names/line numbers which then must be painstakingly resolved to actual source in a separate editor. 3. debuginfo for modules is available, but it remains bundled with the .ko files that contain module code, in the main kernel RPM. This is a waste of space for users who do not need to debug the kernel (i.e. most users).
Address all of these issues by additionally building a debuginfo RPM when the kernel configuration allows for it, in line with standard patterns followed by RPM distributors. With these changes: 1. systemtap now works (when these changes are backported to 6.11, since systemtap lags a bit behind in compatibility), as verified by the following simple test script:
# stap -e 'probe kernel.function("do_sys_open").call { printf("%s\n", $$parms); }' dfd=0xffffffffffffff9c filename=0x7fe18800b160 flags=0x88800 mode=0x0 ...
2. disas /s works correctly in gdb, with source and disassembly interspersed:
# gdb vmlinux --batch -ex 'disas /s blk_op_str' Dump of assembler code for function blk_op_str: block/blk-core.c: 125 { 0xffffffff814c8740 <+0>: endbr64
127 128 if (op < ARRAY_SIZE(blk_op_name) && blk_op_name[op]) 0xffffffff814c8744 <+4>: mov $0xffffffff824a7378,%rax 0xffffffff814c874b <+11>: cmp $0x23,%edi 0xffffffff814c874e <+14>: ja 0xffffffff814c8768 <blk_op_str+40> 0xffffffff814c8750 <+16>: mov %edi,%edi
126 const char *op_str = "UNKNOWN"; 0xffffffff814c8752 <+18>: mov $0xffffffff824a7378,%rdx
127 128 if (op < ARRAY_SIZE(blk_op_name) && blk_op_name[op]) 0xffffffff814c8759 <+25>: mov -0x7dfa0160(,%rdi,8),%rax
126 const char *op_str = "UNKNOWN"; 0xffffffff814c8761 <+33>: test %rax,%rax 0xffffffff814c8764 <+36>: cmove %rdx,%rax
129 op_str = blk_op_name[op]; 130 131 return op_str; 132 } 0xffffffff814c8768 <+40>: jmp 0xffffffff81d01360 <__x86_return_thunk> End of assembler dump.
3. The size of the main kernel package goes down substantially, especially if many modules are built (quite typical). Here is a comparison of installed size of the kernel package (configured with allmodconfig, dwarf4 debuginfo, and module compression turned off) before and after this patch:
# rpm -qi kernel-6.13* | grep -E '^(Version|Size)' Version : 6.13.0postpatch+ Size : 1382874089 Version : 6.13.0prepatch+ Size : 17870795887
This is a ~92% size reduction.
Note that a debuginfo package can only be produced if the following configs are set: - CONFIG_DEBUG_INFO=y - CONFIG_MODULE_COMPRESS=n - CONFIG_DEBUG_INFO_SPLIT=n
The first of these is obvious - we can't produce debuginfo if the build does not generate it. The second two requirements can in principle be removed, but doing so is difficult with the current approach, which uses a generic rpmbuild script find-debuginfo.sh that processes all packaged executables. If we want to remove those requirements the best path forward is likely to add some debuginfo extraction/installation logic to the modules_install target (controllable by flags). That way, it's easier to operate on modules before they're compressed, and the logic can be reused by all packaging targets.
Signed-off-by: Uday Shankar <[email protected]> Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
|
Revision tags: v6.14, v6.14-rc7, v6.14-rc6, v6.14-rc5, v6.14-rc4, v6.14-rc3, v6.14-rc2, v6.14-rc1, v6.13, v6.13-rc7, v6.13-rc6, v6.13-rc5, v6.13-rc4, v6.13-rc3, v6.13-rc2, v6.13-rc1, v6.12, v6.12-rc7, v6.12-rc6, v6.12-rc5, v6.12-rc4, v6.12-rc3, v6.12-rc2, v6.12-rc1, v6.11, v6.11-rc7, v6.11-rc6, v6.11-rc5, v6.11-rc4, v6.11-rc3, v6.11-rc2, v6.11-rc1 |
|
| #
ba6c6640 |
| 24-Jul-2024 |
Petr Vorel <[email protected]> |
kbuild: rpm-pkg: Fix C locale setup
semicolon separation in LC_ALL is wrong. Either variable needs to be exported before as a separate commit or set as part of the commit in the beginning. Used seco
kbuild: rpm-pkg: Fix C locale setup
semicolon separation in LC_ALL is wrong. Either variable needs to be exported before as a separate commit or set as part of the commit in the beginning. Used second variant.
This fixes broken build on user's locale setup which makes 'date' binary to produce invalid characters in rpm changelog (e.g. cs_CZ.UTF-8 'čec'):
$ make binrpm-pkg GEN rpmbuild/SPECS/kernel.spec rpmbuild -bb rpmbuild/SPECS/kernel.spec --define='_topdirlinux/rpmbuild' \ --target x86_64-linux --build-in-place --noprep --define='_smp_mflags \ %{nil}' $(rpm -q rpm >/dev/null 2>&1 || echo --nodeps) Building target platforms: x86_64-linux Building for target x86_64-linux error: bad date in %changelog: St čec 24 2024 user <user@somehost> make[2]: *** [scripts/Makefile.package:71: binrpm-pkg] Error 1 make[1]: *** [linux/Makefile:1546: binrpm-pkg] Error 2 make: *** [Makefile:224: __sub-make] Error 2
Fixes: 301c10908e42 ("kbuild: rpm-pkg: introduce a simple changelog section for kernel.spec") Signed-off-by: Petr Vorel <[email protected]> Reviewed-by: Miguel Ojeda <[email protected]> Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
301c1090 |
| 16-Jul-2024 |
Rafael Aquini <[email protected]> |
kbuild: rpm-pkg: introduce a simple changelog section for kernel.spec
Fix the following rpmbuild warning:
$ make srcrpm-pkg ... RPM build warnings: source_date_epoch_from_changelog set
kbuild: rpm-pkg: introduce a simple changelog section for kernel.spec
Fix the following rpmbuild warning:
$ make srcrpm-pkg ... RPM build warnings: source_date_epoch_from_changelog set but %changelog is missing
Signed-off-by: Rafael Aquini <[email protected]> Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
|
Revision tags: v6.10, v6.10-rc7 |
|
| #
c0414419 |
| 02-Jul-2024 |
Masahiro Yamada <[email protected]> |
kbuild: package: add -e and -u options to some shell scripts
Set -e to make these scripts fail on the first error.
Set -u because these scripts are invoked by Makefile, and do not work properly wit
kbuild: package: add -e and -u options to some shell scripts
Set -e to make these scripts fail on the first error.
Set -u because these scripts are invoked by Makefile, and do not work properly without necessary variables defined.
I tweaked mkdebian to cope with optional environment variables.
Remove the explicit "test -n ..." from install-extmod-build.
Both options are described in POSIX. [1]
[1]: https://pubs.opengroup.org/onlinepubs/009604499/utilities/set.html
Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Nicolas Schier <[email protected]>
show more ...
|
|
Revision tags: v6.10-rc6, v6.10-rc5, v6.10-rc4 |
|
| #
ae4c4cee |
| 11-Jun-2024 |
Masahiro Yamada <[email protected]> |
kbuild: move init/build-version to scripts/
At first, I thought this script would be needed only in init/Makefile.
However, commit 5db8face97f8 ("kbuild: Restore .version auto-increment behaviour f
kbuild: move init/build-version to scripts/
At first, I thought this script would be needed only in init/Makefile.
However, commit 5db8face97f8 ("kbuild: Restore .version auto-increment behaviour for Debian packages") and commit 1789fc912541 ("kbuild: rpm-pkg: invoke the kernel build from rpmbuild for binrpm-pkg") revealed that it was actually needed for scripts/package/mk* as well.
After all, scripts/ is a better place for it.
Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Nathan Chancellor <[email protected]>
show more ...
|
|
Revision tags: v6.10-rc3, v6.10-rc2, v6.10-rc1, v6.9, v6.9-rc7, v6.9-rc6, v6.9-rc5, v6.9-rc4, v6.9-rc3, v6.9-rc2, v6.9-rc1, v6.8, v6.8-rc7, v6.8-rc6, v6.8-rc5, v6.8-rc4, v6.8-rc3, v6.8-rc2, v6.8-rc1, v6.7, v6.7-rc8, v6.7-rc7, v6.7-rc6, v6.7-rc5, v6.7-rc4, v6.7-rc3, v6.7-rc2, v6.7-rc1, v6.6, v6.6-rc7, v6.6-rc6, v6.6-rc5, v6.6-rc4 |
|
| #
ffa46bbc |
| 30-Sep-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: generate kernel.spec in rpmbuild/SPECS/
kernel.spec is the last piece that resides outside the rpmbuild/ directory. Move all the RPM-related files to rpmbuild/ consistently.
Signed
kbuild: rpm-pkg: generate kernel.spec in rpmbuild/SPECS/
kernel.spec is the last piece that resides outside the rpmbuild/ directory. Move all the RPM-related files to rpmbuild/ consistently.
Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Nathan Chancellor <[email protected]> Tested-by: Nathan Chancellor <[email protected]>
show more ...
|
|
Revision tags: v6.6-rc3, v6.6-rc2, v6.6-rc1, v6.5, v6.5-rc7, v6.5-rc6, v6.5-rc5, v6.5-rc4, v6.5-rc3 |
|
| #
37477496 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: refactor *rpm-pkg targets
Merge the similar build targets.
Also, make the output location consistent.
Previously, source packages were created in the build directory, while binary
kbuild: rpm-pkg: refactor *rpm-pkg targets
Merge the similar build targets.
Also, make the output location consistent.
Previously, source packages were created in the build directory, while binary packages under ~/rpmbuild/RPMS/.
Now, Kbuild creates the rpmbuild/ directory in the build directory, and saves all packages under it.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
49c803cd |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: split out the body of spec file
Most of the lines in the spec file are independent of any build condition.
Split the body of the spec file into scripts/package/kernel.spec. scripts
kbuild: rpm-pkg: split out the body of spec file
Most of the lines in the spec file are independent of any build condition.
Split the body of the spec file into scripts/package/kernel.spec. scripts/package/mkspec will prepend some env-dependent variables.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
2a291fc3 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: introduce %{with_devel} switch to select devel package
scripts/package/mkspec preprocesses the spec file by sed, but it is unreadable. This commit removes the last portion of the se
kbuild: rpm-pkg: introduce %{with_devel} switch to select devel package
scripts/package/mkspec preprocesses the spec file by sed, but it is unreadable. This commit removes the last portion of the sed scripting.
Remove the $S$M prefixes from the conditionally generated lines. Instead, surround the code with %if %{with_devel} ... %endif.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
b537925f |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: run modules_install for non-modular kernel
For the same reason as commit 4243afdb9326 ("kbuild: builddeb: always make modules_install, to install modules.builtin*"), run modules_ins
kbuild: rpm-pkg: run modules_install for non-modular kernel
For the same reason as commit 4243afdb9326 ("kbuild: builddeb: always make modules_install, to install modules.builtin*"), run modules_install even when CONFIG_MODULES=n to install modules.builtin*.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
1789fc91 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: invoke the kernel build from rpmbuild for binrpm-pkg
To reduce the preprocess of the spec file, invoke the kernel build from rpmbuild.
Run init/build-version to increment the relea
kbuild: rpm-pkg: invoke the kernel build from rpmbuild for binrpm-pkg
To reduce the preprocess of the spec file, invoke the kernel build from rpmbuild.
Run init/build-version to increment the release number not only for binrpm-pkg but also for srcrpm-pkg and rpm-pkg.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
d4f65127 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: use a dummy string for _arch when undefined
If this affects only %{buildroot}, it should be enough to use a fixed string for _arch when it is undefined.
Signed-off-by: Masahiro Yam
kbuild: rpm-pkg: use a dummy string for _arch when undefined
If this affects only %{buildroot}, it should be enough to use a fixed string for _arch when it is undefined.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
d5d2d4cc |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: derive the Version from %{KERNELRELEASE}
Avoid hard-coding the Version field in the generated spec file.
Signed-off-by: Masahiro Yamada <[email protected]>
|
| #
fe66b5d2 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: refactor kernel-devel RPM package and linux-headers Deb package
The kernel-devel RPM package and the linux-headers Debian package provide headers and scripts needed for building external mod
kbuild: refactor kernel-devel RPM package and linux-headers Deb package
The kernel-devel RPM package and the linux-headers Debian package provide headers and scripts needed for building external modules.
They copy the necessary files in slightly different ways - the RPM copies almost everything except some exclude patterns, while the Debian copies less number of files. There is no need to maintain different code to do the same thing.
Split the Debian code out to scripts/package/install-extmod-build, which is called from both of the packages.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
93ed5605 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: replace $KERNELRELEASE in spec file with %{KERNELRELEASE}
Avoid hard-coding the value of KERNELRELEASE in the generated spec file.
Signed-off-by: Masahiro Yamada <masahiroy@kernel.
kbuild: rpm-pkg: replace $KERNELRELEASE in spec file with %{KERNELRELEASE}
Avoid hard-coding the value of KERNELRELEASE in the generated spec file.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
5d8e41b5 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: replace $__KERNELRELEASE in spec file with %{version}
${version} will be replaced with the value of the Version field.
Signed-off-by: Masahiro Yamada <[email protected]>
|
| #
a06d9ef8 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: record ARCH option in spec file
Currently, we rely on the top Makefile defining ARCH option when we run 'make rpm-pkg' or 'make binrpm-pkg'.
It does not apply when we run 'make src
kbuild: rpm-pkg: record ARCH option in spec file
Currently, we rely on the top Makefile defining ARCH option when we run 'make rpm-pkg' or 'make binrpm-pkg'.
It does not apply when we run 'make srcrpm-pkg', and separately run 'rpmbuild' for the generated SRPM. This is a problem for cross-build.
Just like the Debian package, save the value of ARCH in the spec file.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
fe809b82 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: use %{makeflags} to pass common Make options
This is useful to pass more common Make options.
Signed-off-by: Masahiro Yamada <[email protected]>
|
| #
19286825 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: do not hard-code $MAKE in spec file
Currently, $MAKE will expand to the GNU Make program that created the source RPM. This is problematic if you carry it to a different build host t
kbuild: rpm-pkg: do not hard-code $MAKE in spec file
Currently, $MAKE will expand to the GNU Make program that created the source RPM. This is problematic if you carry it to a different build host to run 'rpmbuild' there.
Consider this command:
$ /path/to/my/custom/make srcrpm-pkg
The spec file in the SRPM will record '/path/to/my/custom/make', which exists only on that build environment.
To create a portable SRPM, the spec file should avoid hard-coding $MAKE.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
61eca933 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: remove unneeded '-f $srctree/Makefile' in spec file
This is unneeded because the Makefile in the output directory wraps the top-level Makefile in the srctree.
Just run $MAKE irresp
kbuild: rpm-pkg: remove unneeded '-f $srctree/Makefile' in spec file
This is unneeded because the Makefile in the output directory wraps the top-level Makefile in the srctree.
Just run $MAKE irrespective of the build location.
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
233046a2 |
| 22-Jul-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: define _arch conditionally
Commit 3089b2be0cce ("kbuild: rpm-pkg: fix build error when _arch is undefined") does not work as intended; _arch is always defined as $UTS_MACHINE.
The
kbuild: rpm-pkg: define _arch conditionally
Commit 3089b2be0cce ("kbuild: rpm-pkg: fix build error when _arch is undefined") does not work as intended; _arch is always defined as $UTS_MACHINE.
The intention was to define _arch to $UTS_MACHINE only when it is not defined.
Fixes: 3089b2be0cce ("kbuild: rpm-pkg: fix build error when _arch is undefined") Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
|
Revision tags: v6.5-rc2, v6.5-rc1, v6.4, v6.4-rc7, v6.4-rc6, v6.4-rc5, v6.4-rc4, v6.4-rc3, v6.4-rc2, v6.4-rc1, v6.3 |
|
| #
c90b3bbf |
| 17-Apr-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: remove kernel-drm PROVIDES
This code was added more than 20 years ago. [1]
I checked the kernel spec files in Fedora and OpenSUSE, but did not see 'kernel-drm'. I do not know if th
kbuild: rpm-pkg: remove kernel-drm PROVIDES
This code was added more than 20 years ago. [1]
I checked the kernel spec files in Fedora and OpenSUSE, but did not see 'kernel-drm'. I do not know if there exists a distro that uses it in RPM dependency.
Remove this, and let's see if somebody complains about it.
[1]: https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/commit/?id=6d956df7d6b716b28c910c4f5b360c4d44d96c4d
Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Nathan Chancellor <[email protected]>
show more ...
|
|
Revision tags: v6.3-rc7 |
|
| #
aa7d233f |
| 10-Apr-2023 |
Masahiro Yamada <[email protected]> |
kbuild: give up untracked files for source package builds
When the source tree is dirty and contains untracked files, package builds may fail, for example, when a broken symlink exists, a file path
kbuild: give up untracked files for source package builds
When the source tree is dirty and contains untracked files, package builds may fail, for example, when a broken symlink exists, a file path contains whitespaces, etc.
Since commit 05e96e96a315 ("kbuild: use git-archive for source package creation"), the source tarball only contains committed files because it is created by 'git archive'. scripts/package/gen-diff-patch tries to address the diff from HEAD, but including untracked files by the hand-crafted script introduces more complexity. I wrote a patch [1] to make it work in most cases, but still wonder if this is what we should aim for.
To simplify the code, this patch just gives up untracked files. Going forward, it is your responsibility to do 'git add' for what you want in the source package. The script shows a warning just in case you forgot to do so. It should be checked only when building source packages.
[1]: https://lore.kernel.org/all/CAK7LNAShbZ56gSh9PrbLnBDYKnjtTkHMoCXeGrhcxMvqXGq9=g@mail.gmail.com/2-0001-kbuild-make-package-builds-more-robust.patch
Fixes: 05e96e96a315 ("kbuild: use git-archive for source package creation") Signed-off-by: Masahiro Yamada <[email protected]> Reviewed-by: Nicolas Schier <[email protected]>
show more ...
|
|
Revision tags: v6.3-rc6, v6.3-rc5, v6.3-rc4, v6.3-rc3 |
|
| #
05e96e96 |
| 15-Mar-2023 |
Masahiro Yamada <[email protected]> |
kbuild: use git-archive for source package creation
Commit 5c3d1d0abb12 ("kbuild: add a tool to list files ignored by git") added a new tool, scripts/list-gitignored. My intention was to create sour
kbuild: use git-archive for source package creation
Commit 5c3d1d0abb12 ("kbuild: add a tool to list files ignored by git") added a new tool, scripts/list-gitignored. My intention was to create source packages without cleaning the source tree, without relying on git.
Linus strongly objected to it, and suggested using 'git archive' instead. [1] [2] [3]
This commit goes in that direction - Remove scripts/list-gitignored.c and rewrites Makefiles and scripts to use 'git archive' for building Debian and RPM source packages. It also makes 'make perf-tar*-src-pkg' use 'git archive' again.
Going forward, building source packages is only possible in a git-managed tree. Building binary packages does not require git.
[1]: https://lore.kernel.org/lkml/CAHk-=wi49sMaC7vY1yMagk7eqLK=1jHeHQ=yZ_k45P=xBccnmA@mail.gmail.com/ [2]: https://lore.kernel.org/lkml/CAHk-=wh5AixGsLeT0qH2oZHKq0FLUTbyTw4qY921L=PwYgoGVw@mail.gmail.com/ [3]: https://lore.kernel.org/lkml/CAHk-=wgM-W6Fu==EoAVCabxyX8eYBz9kNC88-tm9ExRQwA79UQ@mail.gmail.com/
Fixes: 5c3d1d0abb12 ("kbuild: add a tool to list files ignored by git") Fixes: e0ca16749ac3 ("kbuild: make perf-tar*-src-pkg work without relying on git") Suggested-by: Linus Torvalds <[email protected]> Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|
| #
81f59a26 |
| 15-Mar-2023 |
Masahiro Yamada <[email protected]> |
kbuild: rpm-pkg: move source components to rpmbuild/SOURCES
Prepare to add more files to the source RPM.
Also, fix the build error when KCONFIG_CONFIG is set: error: Bad file: ./.config: No such
kbuild: rpm-pkg: move source components to rpmbuild/SOURCES
Prepare to add more files to the source RPM.
Also, fix the build error when KCONFIG_CONFIG is set: error: Bad file: ./.config: No such file or directory
Signed-off-by: Masahiro Yamada <[email protected]>
show more ...
|