mirror of
https://abf.rosa.ru/djam/kernel.git
synced 2025-02-24 08:42:53 +00:00
DKMS operations should be tied to kernel-<...>-devel packages
Before this commit, DKMS was called to build and install the external kernel modules when kernel-<flavour> packages were installed, and only if the development files were also available. This is error-prone because there is no guarantee the -devel package creates the necessary files before. As a result, some proprietary drivers could not be built when the kernel is updated. This is an attempt to fix the problem. Because kernel-<flavour>-devel package is enough to build kernel modules with DKMS, I moved these build and install operations to kernel-<flavour>-devel from kernel-<flavour>. Some of the related code was simplified as well.
This commit is contained in:
parent
c0342f35bc
commit
3e9fece6bd
1 changed files with 43 additions and 80 deletions
123
kernel.spec
123
kernel.spec
|
@ -355,7 +355,7 @@ Source51: cpupower.config
|
|||
Source52: cpupower-start.sh
|
||||
Source53: cpupower.path
|
||||
|
||||
# Our patch tarball,
|
||||
# Our patch tarball,
|
||||
# see https://abf.rosalinux.ru/soft/kernel-patches-and-configs/
|
||||
Source100: kernel-patches-and-configs-%{kversion}.tar.xz
|
||||
|
||||
|
@ -375,8 +375,8 @@ Patch2: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/stable-review
|
|||
Source11: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/stable-review/patch-%{kversion}-%{kpatch}.sign
|
||||
%else
|
||||
Patch1: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/testing/patch-%{kernelversion}.%{patchlevel}-%{kpatch}.xz
|
||||
Source10: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/testing/patch-%{kernelversion}.%{patchlevel}-%{kpatch}.sign
|
||||
%endif
|
||||
Source10: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/testing/patch-%{kernelversion}.%{patchlevel}-%{kpatch}.sign
|
||||
%endif
|
||||
%endif
|
||||
%if %kgit
|
||||
Patch2: ftp://ftp.kernel.org/pub/linux/kernel/v%{kernelversion}.x/snapshots/patch-%{kernelversion}.%{patchlevel}-%{kpatch}-git%{kgit}.xz
|
||||
|
@ -532,7 +532,9 @@ Group: System/Kernel and hardware \
|
|||
Version: %{fakever} \
|
||||
Release: %{fakerel} \
|
||||
Requires: glibc-devel ncurses-devel make gcc perl \
|
||||
Summary: The kernel-devel files for %{kname}-%{1}-%{buildrel} \
|
||||
Requires(post): dkms \
|
||||
Requires(preun): dkms \
|
||||
Summary: Development files for %{kname}-%{1}-%{buildrel} \
|
||||
Group: Development/Kernel \
|
||||
Provides: %{kname}-devel = %{kverrel} \
|
||||
Provides: %{kname}-%{1}-devel \
|
||||
|
@ -603,7 +605,6 @@ latest %{kname}-%{1}-devel installed... \
|
|||
%endif \
|
||||
\
|
||||
%post -n %{kname}-%{1}-%{buildrel} -f kernel_files.%{1}-post \
|
||||
%posttrans -n %{kname}-%{1}-%{buildrel} -f kernel_files.%{1}-posttrans \
|
||||
%preun -n %{kname}-%{1}-%{buildrel} -f kernel_files.%{1}-preun \
|
||||
%postun -n %{kname}-%{1}-%{buildrel} -f kernel_files.%{1}-postun \
|
||||
\
|
||||
|
@ -908,7 +909,7 @@ full preempt, rcu boost, CFS cpu scheduler and BFQ i/o scheduler.
|
|||
#
|
||||
%ifarch %{ix86}
|
||||
#
|
||||
# kernel-nrj-desktop-core2: nrj, Intel Core 2 and newer, smp-alternatives, 4 GB
|
||||
# kernel-nrj-desktop-core2: nrj, Intel Core 2 and newer, smp-alternatives, 4 GB
|
||||
#
|
||||
%if %build_nrj_desktop_core2
|
||||
%define summary_nrj_desktop_core2 Linux Kernel for desktop use with i686 & 4GB RAM
|
||||
|
@ -1178,7 +1179,7 @@ PrepareKernel() {
|
|||
config_dir=arch/arm64/configs
|
||||
%endif
|
||||
echo "Make config for kernel $extension"
|
||||
|
||||
|
||||
pushd 3rdparty
|
||||
perl mkbuild.pl
|
||||
popd
|
||||
|
@ -1237,7 +1238,7 @@ BuildKernel() {
|
|||
install -d %{temp_modules}/$KernelVer
|
||||
%smake INSTALL_MOD_PATH=%{temp_root} KERNELRELEASE=$KernelVer modules_install
|
||||
|
||||
# headers
|
||||
# headers
|
||||
%make INSTALL_HDR_PATH=%{temp_root}%{_prefix} KERNELRELEASE=$KernelVer headers_install
|
||||
find %{temp_root}%{_prefix} -name .install -or -name ..install.cmd | %kxargs rm -f
|
||||
|
||||
|
@ -1248,7 +1249,8 @@ BuildKernel() {
|
|||
SaveDevel() {
|
||||
devel_flavour=$1
|
||||
|
||||
DevelRoot=/usr/src/linux-%{kversion}-$devel_flavour-%{buildrpmrel}
|
||||
KernelVer=%{kversion}-$devel_flavour-%{buildrpmrel}
|
||||
DevelRoot=/usr/src/linux-$KernelVer
|
||||
TempDevelRoot=%{temp_root}$DevelRoot
|
||||
|
||||
mkdir -p $TempDevelRoot
|
||||
|
@ -1328,6 +1330,12 @@ SaveDevel() {
|
|||
# disable mrproper in -devel rpms
|
||||
patch -p1 --fuzz=0 -d $TempDevelRoot -i %{SOURCE2}
|
||||
|
||||
# Create the symlinks needed by DKMS
|
||||
ModulesRoot=%{temp_modules}/$KernelVer
|
||||
mkdir -p $ModulesRoot
|
||||
ln -sf $DevelRoot $ModulesRoot/build
|
||||
ln -sf $DevelRoot $ModulesRoot/source
|
||||
|
||||
kernel_devel_files=../kernel_devel_files.$devel_flavour
|
||||
|
||||
|
||||
|
@ -1398,33 +1406,31 @@ $DevelRoot/Makefile
|
|||
$DevelRoot/Module.symvers
|
||||
$DevelRoot/arch/Kconfig
|
||||
%doc README.kernel-sources
|
||||
%{_modulesdir}/$KernelVer/build
|
||||
%{_modulesdir}/$KernelVer/source
|
||||
EOF
|
||||
|
||||
|
||||
### Create -devel Post script on the fly
|
||||
cat > $kernel_devel_files-post <<EOF
|
||||
if [ -d /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel} ]; then
|
||||
rm -f /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/{build,source}
|
||||
ln -sf $DevelRoot /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/build
|
||||
ln -sf $DevelRoot /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/source
|
||||
fi
|
||||
/usr/sbin/dkms_autoinstaller start $KernelVer
|
||||
EOF
|
||||
|
||||
|
||||
### Create -devel Preun script on the fly
|
||||
cat > $kernel_devel_files-preun <<EOF
|
||||
if [ -L /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/build ]; then
|
||||
rm -f /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/build
|
||||
fi
|
||||
if [ -L /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/source ]; then
|
||||
rm -f /lib/modules/%{kversion}-$devel_flavour-%{buildrpmrel}/source
|
||||
fi
|
||||
exit 0
|
||||
for ii in \$(/usr/sbin/dkms status -k $KernelVer); do
|
||||
mod=\$(echo \$ii | awk -v FS=' ,' '{ print \$1; }')
|
||||
ver=\$(echo \$ii | awk -v FS=' ,' '{ print \$2; }')
|
||||
/usr/sbin/dkms --rpm_safe_upgrade remove -m \$mod -v \$ver -k $KernelVer || true
|
||||
done
|
||||
EOF
|
||||
|
||||
### Create -devel Postun script on the fly
|
||||
cat > $kernel_devel_files-postun <<EOF
|
||||
rm -rf /usr/src/linux-%{kversion}-$devel_flavour-%{buildrpmrel} >/dev/null
|
||||
rm -rf /usr/src/linux-$KernelVer >/dev/null
|
||||
# Remove the dir if it is already empty.
|
||||
find /lib/modules/$KernelVer -maxdepth 0 -empty -exec rm -rf {} \;
|
||||
EOF
|
||||
}
|
||||
|
||||
|
@ -1460,6 +1466,7 @@ SaveDebug() {
|
|||
|
||||
CreateFiles() {
|
||||
kernel_flavour=$1
|
||||
KernelVer=%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
|
||||
kernel_files=../kernel_files.$kernel_flavour
|
||||
|
||||
|
@ -1469,13 +1476,12 @@ if [ "$kernel_flavour" = "kirkwood" ]; then
|
|||
fi
|
||||
### Create the kernel_files.*
|
||||
cat > $kernel_files <<EOF
|
||||
%{_bootdir}/System.map-%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
%{_bootdir}/symvers-%{kversion}-$kernel_flavour-%{buildrpmrel}.xz
|
||||
%{_bootdir}/config-%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
%{_bootdir}/$ker-%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
%dir %{_modulesdir}/%{kversion}-$kernel_flavour-%{buildrpmrel}/
|
||||
%{_modulesdir}/%{kversion}-$kernel_flavour-%{buildrpmrel}/kernel
|
||||
%{_modulesdir}/%{kversion}-$kernel_flavour-%{buildrpmrel}/modules.*
|
||||
%{_bootdir}/System.map-$KernelVer
|
||||
%{_bootdir}/symvers-$KernelVer.xz
|
||||
%{_bootdir}/config-$KernelVer
|
||||
%{_bootdir}/$ker-$KernelVer
|
||||
%{_modulesdir}/$KernelVer/kernel
|
||||
%{_modulesdir}/$KernelVer/modules.*
|
||||
%doc README.kernel-sources
|
||||
EOF
|
||||
|
||||
|
@ -1485,11 +1491,10 @@ EOF
|
|||
|
||||
### Create kernel Post script
|
||||
cat > $kernel_files-post <<EOF
|
||||
KVER=%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
INITRD=/boot/initrd-\${KVER}.img
|
||||
INITRD=/boot/initrd-$KernelVer.img
|
||||
|
||||
if [ ! -e \${INITRD} ]; then
|
||||
/sbin/dracut \${INITRD} \${KVER}
|
||||
/sbin/dracut \${INITRD} $KernelVer
|
||||
else
|
||||
printf "WARNING: Initrd image \${INITRD} already exists and will not be replaced.\n"
|
||||
fi
|
||||
|
@ -1499,41 +1504,22 @@ pushd /boot > /dev/null
|
|||
if [ -L vmlinuz-$kernel_flavour ]; then
|
||||
rm -f vmlinuz-$kernel_flavour
|
||||
fi
|
||||
#ln -sf vmlinuz-\${KVER} vmlinuz-$kernel_flavour
|
||||
if [ -L initrd-$kernel_flavour.img ]; then
|
||||
rm -f initrd-$kernel_flavour.img
|
||||
fi
|
||||
#ln -sf initrd-\${KVER}.img initrd-$kernel_flavour.img
|
||||
popd > /dev/null
|
||||
|
||||
%if %build_devel
|
||||
# create kernel-devel symlinks if matching -devel- rpm is installed
|
||||
if [ -d /usr/src/linux-\${KVER} ]; then
|
||||
rm -f /lib/modules/\${KVER}/{build,source}
|
||||
ln -sf /usr/src/linux-\${KVER} /lib/modules/\${KVER}/build
|
||||
ln -sf /usr/src/linux-\${KVER} /lib/modules/\${KVER}/source
|
||||
fi
|
||||
%endif
|
||||
EOF
|
||||
|
||||
### Create kernel Posttrans script
|
||||
cat > $kernel_files-posttrans <<EOF
|
||||
if [ -x /usr/sbin/dkms_autoinstaller -a -d /usr/src/linux-%{kversion}-$kernel_flavour-%{buildrpmrel} ]; then
|
||||
/usr/sbin/dkms_autoinstaller start %{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
fi
|
||||
EOF
|
||||
|
||||
### Create kernel Preun script on the fly
|
||||
cat > $kernel_files-preun <<EOF
|
||||
KVER=%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
pushd /boot > /dev/null
|
||||
if [ -L vmlinuz-$kernel_flavour ]; then
|
||||
if [ "\$(readlink vmlinuz-$kernel_flavour)" = "vmlinuz-\${KVER}" ]; then
|
||||
if [ "\$(readlink vmlinuz-$kernel_flavour)" = "vmlinuz-$KernelVer" ]; then
|
||||
rm -f vmlinuz-$kernel_flavour
|
||||
fi
|
||||
fi
|
||||
if [ -L initrd-$kernel_flavour.img ]; then
|
||||
if [ "\$(readlink initrd-$kernel_flavour.img)" = "initrd-\${KVER}.img" ]; then
|
||||
if [ "\$(readlink initrd-$kernel_flavour.img)" = "initrd-$KernelVer.img" ]; then
|
||||
rm -f initrd-$kernel_flavour.img
|
||||
fi
|
||||
fi
|
||||
|
@ -1541,35 +1527,18 @@ fi
|
|||
/usr/sbin/update-grub2
|
||||
|
||||
popd > /dev/null
|
||||
%if %build_devel
|
||||
if [ -L /lib/modules/\${KVER}/build ]; then
|
||||
rm -f /lib/modules/\${KVER}/build
|
||||
fi
|
||||
if [ -L /lib/modules/\${KVER}/source ]; then
|
||||
rm -f /lib/modules/\${KVER}/source
|
||||
fi
|
||||
%endif
|
||||
exit 0
|
||||
EOF
|
||||
|
||||
|
||||
### Create kernel Postun script on the fly
|
||||
cat > $kernel_files-postun <<EOF
|
||||
KVER=%{kversion}-$kernel_flavour-%{buildrpmrel}
|
||||
KVER_DEVEL=%{kversion}-$devel_flavour-%{buildrpmrel}
|
||||
rm -f /boot/initrd-\${KVER}.img
|
||||
rm -f /boot/initrd-\${KVER}_old.img
|
||||
rm -rf /lib/modules/\${KVER} >/dev/null
|
||||
if [ -d /var/lib/dkms ]; then
|
||||
rm -f /var/lib/dkms/*/kernel-\${KVER_DEVEL}-%{_target_cpu} >/dev/null
|
||||
rm -rf /var/lib/dkms/*/*/\${KVER_DEVEL} >/dev/null
|
||||
rm -f /var/lib/dkms-binary/*/kernel-\${KVER_DEVEL}-%{_target_cpu} >/dev/null
|
||||
rm -rf /var/lib/dkms-binary/*/*/\${KVER_DEVEL} >/dev/null
|
||||
fi
|
||||
rm -f /boot/initrd-$KernelVer.img
|
||||
rm -f /boot/initrd-$KernelVer_old.img
|
||||
# Remove /lib/modules/<...>/ if it is empty (-devel uses it too).
|
||||
find /lib/modules/$KernelVer -maxdepth 0 -empty -exec rm -rf {} \;
|
||||
EOF
|
||||
}
|
||||
|
||||
|
||||
CreateKernel() {
|
||||
flavour=$1
|
||||
|
||||
|
@ -1800,12 +1769,6 @@ find %{target_modules} -name "*.ko" | %kxargs xz -6e
|
|||
find %{target_modules} -name "*.ko" | %kxargs gzip -9
|
||||
%endif
|
||||
|
||||
# We used to have a copy of PrepareKernel here
|
||||
# Now, we make sure that the thing in the linux dir is what we want it to be
|
||||
for i in %{target_modules}/*; do
|
||||
rm -f $i/build $i/source
|
||||
done
|
||||
|
||||
# sniff, if we compressed all the modules, we change the stamp :(
|
||||
# we really need the depmod -ae here
|
||||
pushd %{target_modules}
|
||||
|
|
Loading…
Add table
Reference in a new issue