Blame kernel-obs-build.spec

Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# spec file for package kernel-obs-build
Bernhard M. Wiedemann 6ebc4a
#
bbef0d
# Copyright (c) 2023 SUSE LLC
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# All modifications and additions to the file contributed by third parties
Bernhard M. Wiedemann 6ebc4a
# remain the property of their copyright owners, unless otherwise agreed
Bernhard M. Wiedemann 6ebc4a
# upon. The license for this file, and modifications and additions to the
Bernhard M. Wiedemann 6ebc4a
# file, is the same license as for the pristine package itself (unless the
Bernhard M. Wiedemann 6ebc4a
# license for the pristine package is not an Open Source License, in which
Bernhard M. Wiedemann 6ebc4a
# case the license is the MIT License). An "Open Source License" is a
Bernhard M. Wiedemann 6ebc4a
# license that conforms to the Open Source Definition (Version 1.9)
Bernhard M. Wiedemann 6ebc4a
# published by the Open Source Initiative.
Bernhard M. Wiedemann 6ebc4a
57a832
# Please submit bugfixes or comments via https://bugs.opensuse.org/
Bernhard M. Wiedemann 6ebc4a
#
Bernhard M. Wiedemann 6ebc4a
# needsrootforbuild
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
#!BuildIgnore: post-build-checks
Bernhard M. Wiedemann 6ebc4a
dee876
%define patchversion 6.1.8
Bernhard M. Wiedemann 6ebc4a
%define variant %{nil}
Bernhard M. Wiedemann 6ebc4a
%define vanilla_only 0
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%include %_sourcedir/kernel-spec-macros
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
Name:           kernel-obs-build
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  coreutils
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  device-mapper
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  util-linux
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%if 0%{?suse_version}
Bernhard M. Wiedemann 6ebc4a
%if %vanilla_only
Bernhard M. Wiedemann 6ebc4a
%define kernel_flavor -vanilla
Bernhard M. Wiedemann 6ebc4a
%else
Bernhard M. Wiedemann 6ebc4a
%ifarch %ix86
Bernhard M. Wiedemann 6ebc4a
%define kernel_flavor -pae
Bernhard M. Wiedemann 6ebc4a
%else
Bernhard M. Wiedemann 6ebc4a
%ifarch armv7l armv7hl
Bernhard M. Wiedemann 6ebc4a
%define kernel_flavor -lpae
Bernhard M. Wiedemann 6ebc4a
%else
Bernhard M. Wiedemann 6ebc4a
%define kernel_flavor -default
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
%endif
dee876
BuildRequires:  kernel%kernel_flavor-srchash-baebfe0ef3d47efabc570a82bd54611798a920a9
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%if 0%{?rhel_version}
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  kernel
Bernhard M. Wiedemann 6ebc4a
%define kernel_flavor ""
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
5c5b33
ExclusiveArch:  aarch64 armv6hl armv7hl ppc64 ppc64le riscv64 s390x x86_64
Bernhard M. Wiedemann 6ebc4a
%if 0%{?suse_version} < 1315
Bernhard M. Wiedemann 86a379
# For SLE 11
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  mkinitrd
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  perl-Bootloader
Bernhard M. Wiedemann 6ebc4a
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
Bernhard M. Wiedemann 6ebc4a
%else
Bernhard M. Wiedemann 6ebc4a
BuildRequires:  dracut
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
Summary:        package kernel and initrd for OBS VM builds
9a48dc
License:        GPL-2.0-only
Bernhard M. Wiedemann 6ebc4a
Group:          SLES
dee876
Version:        6.1.8
Bernhard M. Wiedemann 6ebc4a
%if 0%{?is_kotd}
dee876
Release:        <RELEASE>.gbaebfe0
Bernhard M. Wiedemann 6ebc4a
%else
Bernhard M. Wiedemann 6ebc4a
Release:        0
Bernhard M. Wiedemann 6ebc4a
%endif
576ef8
%if 0%{?suse_version} > 1550 || 0%{?sle_version} > 150200
576ef8
BuildRequires:  zstd
576ef8
%endif
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%description
Bernhard M. Wiedemann 6ebc4a
This package is repackaging already compiled kernels to make them usable
Bernhard M. Wiedemann 6ebc4a
inside of Open Build Service (OBS) VM builds. An initrd with some basic
Bernhard M. Wiedemann 86a379
kernel modules is generated as well, but further kernel modules can be
Bernhard M. Wiedemann 6ebc4a
loaded during build when installing the kernel package.
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%prep
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%build
c69a94
# set 'date of last password change' to a static value (bsc#1189305)
c69a94
sed -i 's/^\(root:\*:\)[1-9][0-9]*\(::::::\)/\142\2/' /etc/shadow
Bernhard M. Wiedemann 6ebc4a
mkdir -p /usr/lib/dracut/modules.d/80obs
Bernhard M. Wiedemann 6ebc4a
cat > /usr/lib/dracut/modules.d/80obs/module-setup.sh <
Bernhard M. Wiedemann 6ebc4a
#!/bin/bash
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# called by dracut
Bernhard M. Wiedemann 6ebc4a
check() {
Bernhard M. Wiedemann 6ebc4a
    return 0
Bernhard M. Wiedemann 6ebc4a
}
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# called by dracut
Bernhard M. Wiedemann 6ebc4a
installkernel() {
Bernhard M. Wiedemann 6ebc4a
    hostonly='' instmods obs
Bernhard M. Wiedemann 6ebc4a
}
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# called by dracut
Bernhard M. Wiedemann 6ebc4a
install() {
Bernhard M. Wiedemann 6ebc4a
    inst_hook pre-udev 10 "\$moddir"/setup_obs.sh
Bernhard M. Wiedemann 6ebc4a
}
Bernhard M. Wiedemann 6ebc4a
EOF
Bernhard M. Wiedemann 6ebc4a
chmod a+rx /usr/lib/dracut/modules.d/80obs/module-setup.sh
Bernhard M. Wiedemann 6ebc4a
cat > /usr/lib/dracut/modules.d/80obs/setup_obs.sh <
Bernhard M. Wiedemann 6ebc4a
#!/bin/sh
Bernhard M. Wiedemann 6ebc4a
info "Loading kernel modules for OBS"
Bernhard M. Wiedemann 6ebc4a
info "  Loop..."
145813
modprobe -q loop max_loop=64
Bernhard M. Wiedemann 6ebc4a
info "  binfmt misc..."
5c5b33
modprobe -q binfmt_misc
Bernhard M. Wiedemann 6ebc4a
EOF
Bernhard M. Wiedemann 6ebc4a
chmod a+rx /usr/lib/dracut/modules.d/80obs/setup_obs.sh
Bernhard M. Wiedemann 6ebc4a
# Configure systemd in kernel-obs-build's initrd not to limit TasksMax,
Bernhard M. Wiedemann 6ebc4a
# we run with build as PID 1 (boo#965564)
Bernhard M. Wiedemann 6ebc4a
echo "DefaultTasksMax=infinity" >> /etc/systemd/system.conf
Bernhard M. Wiedemann 6ebc4a
echo "DefaultTasksAccounting=no" >> /etc/systemd/system.conf
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# a longer list to have them also available for qemu cross builds where x86_64 kernel runs in eg. arm env.
Bernhard M. Wiedemann 6ebc4a
# this list of modules where available on build workers of build.opensuse.org, so we stay compatible.
0af339
export KERNEL_MODULES="loop dm-crypt essiv dm-mod dm-snapshot binfmt-misc fuse kqemu squashfs ext2 ext3 ext4 reiserfs btrfs xfs nf_conntrack_ipv6 binfmt_misc virtio_pci virtio_mmio virtio_blk virtio_rng fat vfat nls_cp437 nls_iso8859-1 ibmvscsi sd_mod e1000 ibmveth overlay 9p 9pnet_virtio qemu_fw_cfg"
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
# manually load all modules to make sure they're available
Bernhard M. Wiedemann 6ebc4a
for i in $KERNEL_MODULES; do
Bernhard M. Wiedemann 6ebc4a
(
Bernhard M. Wiedemann 6ebc4a
  echo "info '  $i'"
5c5b33
  echo "modprobe -q $i"
Bernhard M. Wiedemann 6ebc4a
) >> /usr/lib/dracut/modules.d/80obs/setup_obs.sh
Bernhard M. Wiedemann 6ebc4a
done
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
ROOT=""
Bernhard M. Wiedemann 6ebc4a
[ -e "/dev/vda" ] && ROOT="-d /dev/vda"
Bernhard M. Wiedemann 6ebc4a
[ -e /dev/hda1 ] && ROOT="-d /dev/hda1" # for xen builds
Bernhard M. Wiedemann 6ebc4a
%define kernel_name vmlinu?
Bernhard M. Wiedemann 6ebc4a
%ifarch s390 s390x
Bernhard M. Wiedemann 6ebc4a
%define kernel_name image
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
%ifarch %arm
Bernhard M. Wiedemann 6ebc4a
%define kernel_name zImage
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 61f3f9
%ifarch aarch64 riscv64
Bernhard M. Wiedemann 6ebc4a
%define kernel_name Image
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%if 0%{?suse_version} && 0%{?suse_version} < 1315
Bernhard M. Wiedemann 86a379
# For SLE 11
Bernhard M. Wiedemann 6ebc4a
/sbin/mkinitrd $ROOT \
Bernhard M. Wiedemann 6ebc4a
               -m "$KERNEL_MODULES" \
Bernhard M. Wiedemann 6ebc4a
               -k /boot/%{kernel_name}-*-default -M /boot/System.map-*-default -i /tmp/initrd.kvm -B
Bernhard M. Wiedemann 6ebc4a
%else
5d1286
# --host-only mode is needed for unlimited TasksMax workaround (boo#965564)
c69a94
dracut --reproducible --host-only --no-hostonly-cmdline \
8506f9
	--no-early-microcode --nofscks --strip --hardlink \
c69a94
	--drivers="$KERNEL_MODULES" --force /tmp/initrd.kvm \
576ef8
%if 0%{?suse_version} > 1550 || 0%{?sle_version} > 150200
576ef8
	--compress "zstd -19 -T0" \
576ef8
%endif
5c34fe
	$(echo /boot/%{kernel_name}-*%{kernel_flavor} | sed -n -e 's,[^-]*-\(.*'%{kernel_flavor}'\),\1,p')
Bernhard M. Wiedemann 6ebc4a
%endif
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
#cleanup
Bernhard M. Wiedemann 6ebc4a
rm -rf /usr/lib/dracut/modules.d/80obs
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%install
576ef8
install -d -m 0755 %{buildroot}
576ef8
cp -v /boot/%{kernel_name}-*%{kernel_flavor} %{buildroot}/.build.kernel.kvm
576ef8
cp -v /tmp/initrd.kvm %{buildroot}/.build.initrd.kvm
576ef8
576ef8
# inform worker kernel parameters to invoke
145813
CMDLINE="elevator=noop nmi_watchdog=0 rw"
576ef8
%if 0%{?suse_version} && 0%{?suse_version} < 1315
576ef8
# kvmclock has always been disabled for old kernels, keep it for historic compatibility
576ef8
CMDLINE+=" no-kvmclock"
576ef8
%endif
576ef8
echo "$CMDLINE" > %{buildroot}/.build.cmdline.kvm
576ef8
576ef8
# inform worker about availability of virtio-serial
576ef8
touch %{buildroot}/.build.console.kvm
576ef8
if grep -qx CONFIG_VIRTIO_CONSOLE=y /boot/config-*%{kernel_flavor} ; then
576ef8
    echo "virtio" > %{buildroot}/.build.console.kvm
576ef8
fi
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
#inform worker about arch
Bernhard M. Wiedemann 6ebc4a
#see obs-build commit e47399d738e51
576ef8
uname -m > %{buildroot}/.build.hostarch.kvm
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%files
576ef8
/.build.cmdline.*
576ef8
/.build.console.*
Bernhard M. Wiedemann 6ebc4a
/.build.hostarch.*
576ef8
/.build.initrd.*
576ef8
/.build.kernel.*
Bernhard M. Wiedemann 6ebc4a
Bernhard M. Wiedemann 6ebc4a
%changelog