Linux Audio

Check our new training course

In-person Linux kernel drivers training

Jun 16-20, 2025
Register
Loading...
v3.1
  1#!/bin/sh
  2#
  3#	Output a simple RPM spec file that uses no fancy features requiring
  4#	RPM v4. This is intended to work with any RPM distro.
  5#
  6#	The only gothic bit here is redefining install_post to avoid
  7#	stripping the symbols from files in the kernel which we want
  8#
  9#	Patched for non-x86 by Opencon (L) 2002 <opencon@rio.skydome.net>
 10#
 11
 12# how we were called determines which rpms we build and how we build them
 13if [ "$1" = "prebuilt" ]; then
 14	PREBUILT=true
 15else
 16	PREBUILT=false
 17fi
 18
 19# starting to output the spec
 20if [ "`grep CONFIG_DRM=y .config | cut -f2 -d\=`" = "y" ]; then
 21	PROVIDES=kernel-drm
 22fi
 23
 24PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
 25__KERNELRELEASE=`echo $KERNELRELEASE | sed -e "s/-/_/g"`
 26
 27echo "Name: kernel"
 28echo "Summary: The Linux Kernel"
 29echo "Version: $__KERNELRELEASE"
 30# we need to determine the NEXT version number so that uname and
 31# rpm -q will agree
 32echo "Release: `. $srctree/scripts/mkversion`"
 33echo "License: GPL"
 34echo "Group: System Environment/Kernel"
 35echo "Vendor: The Linux Community"
 36echo "URL: http://www.kernel.org"
 37
 38if ! $PREBUILT; then
 39echo "Source: kernel-$__KERNELRELEASE.tar.gz"
 40fi
 41
 42echo "BuildRoot: %{_tmppath}/%{name}-%{PACKAGE_VERSION}-root"
 43echo "Provides: $PROVIDES"
 44echo "%define __spec_install_post /usr/lib/rpm/brp-compress || :"
 45echo "%define debug_package %{nil}"
 46echo ""
 47echo "%description"
 48echo "The Linux Kernel, the operating system core itself"
 49echo ""
 50echo "%package headers"
 51echo "Summary: Header files for the Linux kernel for use by glibc"
 52echo "Group: Development/System"
 53echo "Obsoletes: kernel-headers"
 54echo "Provides: kernel-headers = %{version}"
 55echo "%description headers"
 56echo "Kernel-headers includes the C header files that specify the interface"
 57echo "between the Linux kernel and userspace libraries and programs.  The"
 58echo "header files define structures and constants that are needed for"
 59echo "building most standard programs and are also needed for rebuilding the"
 60echo "glibc package."
 61echo ""
 62
 63if ! $PREBUILT; then
 64echo "%prep"
 65echo "%setup -q"
 66echo ""
 67fi
 68
 69echo "%build"
 70
 71if ! $PREBUILT; then
 72echo "make clean && make %{?_smp_mflags}"
 73echo ""
 74fi
 75
 76echo "%install"
 77echo "%ifarch ia64"
 78echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
 79echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
 80echo "%else"
 81echo 'mkdir -p $RPM_BUILD_ROOT/boot $RPM_BUILD_ROOT/lib/modules'
 82echo 'mkdir -p $RPM_BUILD_ROOT/lib/firmware'
 83echo "%endif"
 84
 85echo 'INSTALL_MOD_PATH=$RPM_BUILD_ROOT make %{?_smp_mflags} KBUILD_SRC= modules_install'
 86echo "%ifarch ia64"
 87echo 'cp $KBUILD_IMAGE $RPM_BUILD_ROOT'"/boot/efi/vmlinuz-$KERNELRELEASE"
 88echo 'ln -s '"efi/vmlinuz-$KERNELRELEASE" '$RPM_BUILD_ROOT'"/boot/"
 89echo "%else"
 90echo "%ifarch ppc64"
 91echo "cp vmlinux arch/powerpc/boot"
 92echo "cp arch/powerpc/boot/"'$KBUILD_IMAGE $RPM_BUILD_ROOT'"/boot/vmlinuz-$KERNELRELEASE"
 93echo "%else"
 94echo 'cp $KBUILD_IMAGE $RPM_BUILD_ROOT'"/boot/vmlinuz-$KERNELRELEASE"
 95echo "%endif"
 96echo "%endif"
 97
 98echo 'make %{?_smp_mflags} INSTALL_HDR_PATH=$RPM_BUILD_ROOT/usr headers_install'
 99echo 'cp System.map $RPM_BUILD_ROOT'"/boot/System.map-$KERNELRELEASE"
100
101echo 'cp .config $RPM_BUILD_ROOT'"/boot/config-$KERNELRELEASE"
102
103echo "%ifnarch ppc64"
104echo 'cp vmlinux vmlinux.orig'
105echo 'bzip2 -9 vmlinux'
106echo 'mv vmlinux.bz2 $RPM_BUILD_ROOT'"/boot/vmlinux-$KERNELRELEASE.bz2"
107echo 'mv vmlinux.orig vmlinux'
108echo "%endif"
109
110echo ""
111echo "%clean"
112echo 'rm -rf $RPM_BUILD_ROOT'
113echo ""
114echo "%files"
115echo '%defattr (-, root, root)'
116echo "%dir /lib/modules"
117echo "/lib/modules/$KERNELRELEASE"
118echo "/lib/firmware"
119echo "/boot/*"
120echo ""
121echo "%files headers"
122echo '%defattr (-, root, root)'
123echo "/usr/include"
124echo ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
v4.17
  1#!/bin/sh
  2#
  3#	Output a simple RPM spec file.
  4#	This version assumes a minimum of RPM 4.0.3.
  5#
  6#	The only gothic bit here is redefining install_post to avoid
  7#	stripping the symbols from files in the kernel which we want
  8#
  9#	Patched for non-x86 by Opencon (L) 2002 <opencon@rio.skydome.net>
 10#
 11
 12# how we were called determines which rpms we build and how we build them
 13if [ "$1" = prebuilt ]; then
 14	S=DEL
 15else
 16	S=
 17fi
 18
 19if grep -q CONFIG_MODULES=y .config; then
 20	M=
 21else
 22	M=DEL
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 23fi
 24
 25if grep -q CONFIG_DRM=y .config; then
 26	PROVIDES=kernel-drm
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 27fi
 28
 29PROVIDES="$PROVIDES kernel-$KERNELRELEASE"
 30__KERNELRELEASE=$(echo $KERNELRELEASE | sed -e "s/-/_/g")
 31EXCLUDES="$RCS_TAR_IGNORE --exclude=.tmp_versions --exclude=*vmlinux* \
 32--exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation \
 33--exclude=.config.old --exclude=.missing-syscalls.d"
 
 34
 35# We can label the here-doc lines for conditional output to the spec file
 36#
 37# Labels:
 38#  $S: this line is enabled only when building source package
 39#  $M: this line is enabled only when CONFIG_MODULES is enabled
 40sed -e '/^DEL/d' -e 's/^\t*//' <<EOF
 41	Name: kernel
 42	Summary: The Linux Kernel
 43	Version: $__KERNELRELEASE
 44	Release: $(cat .version 2>/dev/null || echo 1)
 45	License: GPL
 46	Group: System Environment/Kernel
 47	Vendor: The Linux Community
 48	URL: http://www.kernel.org
 49$S	Source: kernel-$__KERNELRELEASE.tar.gz
 50	Provides: $PROVIDES
 51	%define __spec_install_post /usr/lib/rpm/brp-compress || :
 52	%define debug_package %{nil}
 53
 54	%description
 55	The Linux Kernel, the operating system core itself
 56
 57	%package headers
 58	Summary: Header files for the Linux kernel for use by glibc
 59	Group: Development/System
 60	Obsoletes: kernel-headers
 61	Provides: kernel-headers = %{version}
 62	%description headers
 63	Kernel-headers includes the C header files that specify the interface
 64	between the Linux kernel and userspace libraries and programs.  The
 65	header files define structures and constants that are needed for
 66	building most standard programs and are also needed for rebuilding the
 67	glibc package.
 68
 69$S$M	%package devel
 70$S$M	Summary: Development package for building kernel modules to match the $__KERNELRELEASE kernel
 71$S$M	Group: System Environment/Kernel
 72$S$M	AutoReqProv: no
 73$S$M	%description -n kernel-devel
 74$S$M	This package provides kernel headers and makefiles sufficient to build modules
 75$S$M	against the $__KERNELRELEASE kernel package.
 76$S$M
 77$S	%prep
 78$S	%setup -q
 79$S
 80$S	%build
 81$S	make %{?_smp_mflags} KBUILD_BUILD_VERSION=%{release}
 82$S
 83	%install
 84	mkdir -p %{buildroot}/boot
 85	%ifarch ia64
 86	mkdir -p %{buildroot}/boot/efi
 87	cp \$(make image_name) %{buildroot}/boot/efi/vmlinuz-$KERNELRELEASE
 88	ln -s efi/vmlinuz-$KERNELRELEASE %{buildroot}/boot/
 89	%else
 90	cp \$(make image_name) %{buildroot}/boot/vmlinuz-$KERNELRELEASE
 91	%endif
 92$M	make %{?_smp_mflags} INSTALL_MOD_PATH=%{buildroot} KBUILD_SRC= modules_install
 93	make %{?_smp_mflags} INSTALL_HDR_PATH=%{buildroot}/usr KBUILD_SRC= headers_install
 94	cp System.map %{buildroot}/boot/System.map-$KERNELRELEASE
 95	cp .config %{buildroot}/boot/config-$KERNELRELEASE
 96	bzip2 -9 --keep vmlinux
 97	mv vmlinux.bz2 %{buildroot}/boot/vmlinux-$KERNELRELEASE.bz2
 98$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/build
 99$S$M	rm -f %{buildroot}/lib/modules/$KERNELRELEASE/source
100$S$M	mkdir -p %{buildroot}/usr/src/kernels/$KERNELRELEASE
101$S$M	tar cf - $EXCLUDES . | tar xf - -C %{buildroot}/usr/src/kernels/$KERNELRELEASE
102$S$M	cd %{buildroot}/lib/modules/$KERNELRELEASE
103$S$M	ln -sf /usr/src/kernels/$KERNELRELEASE build
104$S$M	ln -sf /usr/src/kernels/$KERNELRELEASE source
105
106	%clean
107	rm -rf %{buildroot}
108
109	%post
110	if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then
111	cp /boot/vmlinuz-$KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm
112	cp /boot/System.map-$KERNELRELEASE /boot/.System.map-$KERNELRELEASE-rpm
113	rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE
114	/sbin/installkernel $KERNELRELEASE /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
115	rm -f /boot/.vmlinuz-$KERNELRELEASE-rpm /boot/.System.map-$KERNELRELEASE-rpm
116	fi
117
118	%preun
119	if [ -x /sbin/new-kernel-pkg ]; then
120	new-kernel-pkg --remove $KERNELRELEASE --rminitrd --initrdfile=/boot/initramfs-$KERNELRELEASE.img
121	elif [ -x /usr/bin/kernel-install ]; then
122	kernel-install remove $KERNELRELEASE
123	fi
124
125	%postun
126	if [ -x /sbin/update-bootloader ]; then
127	/sbin/update-bootloader --remove $KERNELRELEASE
128	fi
129
130	%files
131	%defattr (-, root, root)
132$M	/lib/modules/$KERNELRELEASE
133$M	%exclude /lib/modules/$KERNELRELEASE/build
134$M	%exclude /lib/modules/$KERNELRELEASE/source
135	/boot/*
136
137	%files headers
138	%defattr (-, root, root)
139	/usr/include
140$S$M
141$S$M	%files devel
142$S$M	%defattr (-, root, root)
143$S$M	/usr/src/kernels/$KERNELRELEASE
144$S$M	/lib/modules/$KERNELRELEASE/build
145$S$M	/lib/modules/$KERNELRELEASE/source
146EOF