Adrian Schröter e9cfd5
#
Adrian Schröter e9cfd5
# spec file for package kernel-obs-build
Adrian Schröter e9cfd5
#
Takashi Iwai 39a1fc
# Copyright (c) @YEAR@ SUSE LLC
Adrian Schröter e9cfd5
#
Adrian Schröter e9cfd5
# All modifications and additions to the file contributed by third parties
Adrian Schröter e9cfd5
# remain the property of their copyright owners, unless otherwise agreed
Adrian Schröter e9cfd5
# upon. The license for this file, and modifications and additions to the
Adrian Schröter e9cfd5
# file, is the same license as for the pristine package itself (unless the
Adrian Schröter e9cfd5
# license for the pristine package is not an Open Source License, in which
Adrian Schröter e9cfd5
# case the license is the MIT License). An "Open Source License" is a
Adrian Schröter e9cfd5
# license that conforms to the Open Source Definition (Version 1.9)
Adrian Schröter e9cfd5
# published by the Open Source Initiative.
Adrian Schröter e9cfd5
77b5f8
# Please submit bugfixes or comments via https://bugs.opensuse.org/
Adrian Schröter e9cfd5
#
Adrian Schröter e9cfd5
# needsrootforbuild
Adrian Schröter e9cfd5
Michal Marek 0b9e9a
Adrian Schröter e9cfd5
#!BuildIgnore: post-build-checks
Adrian Schröter e9cfd5
Michal Marek b2e5f7
%define patchversion @PATCHVERSION@
Michal Marek b2e5f7
%define variant @VARIANT@%{nil}
Michal Marek 022e5f
%define vanilla_only @VANILLA_ONLY@
Michal Marek b2e5f7
Michal Marek b2e5f7
%include %_sourcedir/kernel-spec-macros
Michal Marek b2e5f7
Michal Marek 0b9e9a
Name:           kernel-obs-build
Michal Marek 0b9e9a
BuildRequires:  coreutils
Michal Marek 0b9e9a
BuildRequires:  device-mapper
Michal Marek 0b9e9a
BuildRequires:  util-linux
Adrian Schröter e9cfd5
Dinar Valeev a010d5
%if 0%{?suse_version}
Michal Marek 45e176
%if %vanilla_only
Michal Marek 022e5f
%define kernel_flavor -vanilla
Michal Marek 022e5f
%else
Michal Suchanek 1ac194
%ifarch %ix86
Michal Suchanek 1ac194
%define kernel_flavor -pae
Michal Suchanek 1ac194
%else
Michal Suchanek 1ac194
%ifarch armv7l armv7hl
Michal Suchanek 1ac194
%define kernel_flavor -lpae
Michal Suchanek 1ac194
%else
Dinar Valeev a010d5
%define kernel_flavor -default
Dinar Valeev a010d5
%endif
Michal Marek 022e5f
%endif
Michal Suchanek 1ac194
%endif
Michal Suchanek 1ac194
%endif
Michal Suchanek 219bce
BuildRequires:  kernel%kernel_flavor-srchash-@COMMIT_FULL@
Dinar Valeev a010d5
Dinar Valeev a010d5
%if 0%{?rhel_version}
Dinar Valeev a010d5
BuildRequires:  kernel
Dinar Valeev a010d5
%define kernel_flavor ""
Dinar Valeev a010d5
%endif
Dinar Valeev a010d5
Michal Marek b2e5f7
ExclusiveArch:  @ARCHS@
Adrian Schröter e9868b
BuildRequires:  dracut
Michal Marek 0b9e9a
Summary:        package kernel and initrd for OBS VM builds
Michal Kubecek f888e0
License:        GPL-2.0-only
Michal Marek 0b9e9a
Group:          SLES
Michal Marek b2e5f7
Version:        @RPMVERSION@
Michal Marek b2e5f7
%if 0%{?is_kotd}
Michal Marek b2e5f7
Release:        <RELEASE>.g@COMMIT@
Michal Marek b2e5f7
%else
Michal Marek b2e5f7
Release:        @RELEASE@
Michal Marek b2e5f7
%endif
3d53a5
%if 0%{?suse_version} > 1550 || 0%{?sle_version} > 150200
3d53a5
BuildRequires:  zstd
3d53a5
%endif
Adrian Schröter e9cfd5
Adrian Schröter e9cfd5
%description
Adrian Schröter e9cfd5
This package is repackaging already compiled kernels to make them usable
Adrian Schröter e9cfd5
inside of Open Build Service (OBS) VM builds. An initrd with some basic
7cf5b9
kernel modules is generated as well, but further kernel modules can be
Adrian Schröter e9cfd5
loaded during build when installing the kernel package.
Adrian Schröter e9cfd5
Adrian Schröter e9cfd5
%prep
Adrian Schröter e9cfd5
Adrian Schröter e9cfd5
%build
Jiri Slaby 7f9ade
# set 'date of last password change' to a static value (bsc#1189305)
Jiri Slaby 7f9ade
sed -i 's/^\(root:\*:\)[1-9][0-9]*\(::::::\)/\142\2/' /etc/shadow
Adrian Schröter e9868b
mkdir -p /usr/lib/dracut/modules.d/80obs
Adrian Schröter e9868b
cat > /usr/lib/dracut/modules.d/80obs/module-setup.sh <
Adrian Schröter e9868b
#!/bin/bash
Adrian Schröter e9868b
Adrian Schröter e9868b
# called by dracut
Adrian Schröter e9868b
check() {
Adrian Schröter e9868b
    return 0
Adrian Schröter e9868b
}
Adrian Schröter e9868b
Adrian Schröter e9868b
# called by dracut
Adrian Schröter e9868b
installkernel() {
Adrian Schröter e9868b
    hostonly='' instmods obs
Adrian Schröter e9868b
}
Adrian Schröter e9868b
Adrian Schröter e9868b
# called by dracut
Adrian Schröter e9868b
install() {
Adrian Schröter e9868b
    inst_hook pre-udev 10 "\$moddir"/setup_obs.sh
Adrian Schröter e9868b
}
Adrian Schröter e9868b
EOF
Adrian Schröter e9868b
chmod a+rx /usr/lib/dracut/modules.d/80obs/module-setup.sh
Adrian Schröter e9868b
cat > /usr/lib/dracut/modules.d/80obs/setup_obs.sh <
Adrian Schröter e9868b
#!/bin/sh
Adrian Schröter e9868b
info "Loading kernel modules for OBS"
Adrian Schröter e9868b
info "  Loop..."
972c69
modprobe -q loop max_loop=64
Adrian Schröter e9868b
info "  binfmt misc..."
Takashi Iwai 33ded4
modprobe -q binfmt_misc
Adrian Schröter e9868b
EOF
Adrian Schröter e9868b
chmod a+rx /usr/lib/dracut/modules.d/80obs/setup_obs.sh
Jiri Slaby 39b708
# Configure systemd in kernel-obs-build's initrd not to limit TasksMax,
Jiri Slaby 39b708
# we run with build as PID 1 (boo#965564)
Jiri Slaby 39b708
echo "DefaultTasksMax=infinity" >> /etc/systemd/system.conf
Jiri Slaby 39b708
echo "DefaultTasksAccounting=no" >> /etc/systemd/system.conf
Adrian Schröter e9868b
Adrian Schröter e9cfd5
# a longer list to have them also available for qemu cross builds where x86_64 kernel runs in eg. arm env.
Adrian Schröter e9cfd5
# this list of modules where available on build workers of build.opensuse.org, so we stay compatible.
e2263d
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"
Alexander Graf 9a27fc
Alexander Graf 9a27fc
# manually load all modules to make sure they're available
Alexander Graf 9a27fc
for i in $KERNEL_MODULES; do
Alexander Graf 9a27fc
(
Alexander Graf 9a27fc
  echo "info '  $i'"
Takashi Iwai 33ded4
  echo "modprobe -q $i"
Alexander Graf 9a27fc
) >> /usr/lib/dracut/modules.d/80obs/setup_obs.sh
Alexander Graf 9a27fc
done
Alexander Graf 9a27fc
Ruediger Oertel 57e89b
ROOT=""
Ruediger Oertel 57e89b
[ -e "/dev/vda" ] && ROOT="-d /dev/vda"
Ruediger Oertel 57e89b
[ -e /dev/hda1 ] && ROOT="-d /dev/hda1" # for xen builds
Adrian Schröter 3ea39a
%define kernel_name vmlinu?
Adrian Schröter 3ea39a
%ifarch s390 s390x
Adrian Schröter 3ea39a
%define kernel_name image
Adrian Schröter 3ea39a
%endif
Alexander Graf 3ccdab
%ifarch %arm
Alexander Graf 3ccdab
%define kernel_name zImage
Alexander Graf 3ccdab
%endif
Andreas Schwab c2885e
%ifarch aarch64 riscv64
Andreas Schwab 6024dc
%define kernel_name Image
Andreas Schwab 6024dc
%endif
Adrian Schröter e9868b
d9a821
# --host-only mode is needed for unlimited TasksMax workaround (boo#965564)
Jiri Slaby 7f9ade
dracut --reproducible --host-only --no-hostonly-cmdline \
c72c6f
	--no-early-microcode --nofscks --strip --hardlink \
Jiri Slaby 7f9ade
	--drivers="$KERNEL_MODULES" --force /tmp/initrd.kvm \
ea7682
%if 0%{?suse_version} > 1550
5d4e32
	--modules="obs qemu base rootfs-block dracut-systemd terminfo" \
ea7682
%endif
ea7682
%if 0%{?suse_version} > 1550 || 0%{?sle_version} > 150200
3d53a5
	--compress "zstd -19 -T0" \
3d53a5
%endif
87ca1f
	$(echo /boot/%{kernel_name}-*%{kernel_flavor} | sed -n -e 's,[^-]*-\(.*'%{kernel_flavor}'\),\1,p')
Adrian Schröter e9868b
Adrian Schröter e9868b
#cleanup
Adrian Schröter e9868b
rm -rf /usr/lib/dracut/modules.d/80obs
Adrian Schröter e9cfd5
Adrian Schröter e9cfd5
%install
e2f602
install -d -m 0755 %{buildroot}
e2f602
cp -v /boot/%{kernel_name}-*%{kernel_flavor} %{buildroot}/.build.kernel.kvm
e2f602
cp -v /tmp/initrd.kvm %{buildroot}/.build.initrd.kvm
Adrian Schröter e9cfd5
a63124
# inform worker kernel parameters to invoke
972c69
CMDLINE="elevator=noop nmi_watchdog=0 rw"
a63124
%if 0%{?suse_version} && 0%{?suse_version} < 1315
a63124
# kvmclock has always been disabled for old kernels, keep it for historic compatibility
a63124
CMDLINE+=" no-kvmclock"
a63124
%endif
a63124
echo "$CMDLINE" > %{buildroot}/.build.cmdline.kvm
a63124
301a3a
# inform worker about availability of virtio-serial
301a3a
touch %{buildroot}/.build.console.kvm
301a3a
if grep -qx CONFIG_VIRTIO_CONSOLE=y /boot/config-*%{kernel_flavor} ; then
301a3a
    echo "virtio" > %{buildroot}/.build.console.kvm
301a3a
fi
301a3a
Dinar Valeev e5d9da
#inform worker about arch
Dinar Valeev e5d9da
#see obs-build commit e47399d738e51
e2f602
uname -m > %{buildroot}/.build.hostarch.kvm
Dinar Valeev e5d9da
Adrian Schröter e9cfd5
%files
a63124
/.build.cmdline.*
301a3a
/.build.console.*
a63124
/.build.hostarch.*
a63124
/.build.initrd.*
a63124
/.build.kernel.*
Adrian Schröter e9cfd5
Michal Marek 0b9e9a
%changelog