-
-
Notifications
You must be signed in to change notification settings - Fork 257
Expand file tree
/
Copy path03-install-kernel-akmods.sh
More file actions
executable file
·129 lines (111 loc) · 5.21 KB
/
Copy path03-install-kernel-akmods.sh
File metadata and controls
executable file
·129 lines (111 loc) · 5.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/bash
echo "::group:: ===$(basename "$0")==="
set -eoux pipefail
# Beta Updates Testing Repo...
if [[ "${UBLUE_IMAGE_TAG}" == "beta" ]]; then
dnf5 config-manager setopt updates-testing.enabled=1
fi
# Remove Existing Kernel
for pkg in kernel kernel-core kernel-modules kernel-modules-core kernel-modules-extra; do
rpm --erase $pkg --nodeps
done
# Fetch Common AKMODS & Kernel RPMS
skopeo copy --retry-times 3 docker://ghcr.io/ublue-os/akmods:"${AKMODS_FLAVOR}"-"$(rpm -E %fedora)"-"${KERNEL}" dir:/tmp/akmods
AKMODS_TARGZ=$(jq -r '.layers[].digest' </tmp/akmods/manifest.json | cut -d : -f 2)
tar -xvzf /tmp/akmods/"$AKMODS_TARGZ" -C /tmp/
mv /tmp/rpms/* /tmp/akmods/
# NOTE: kernel-rpms should auto-extract into correct location
# Install Kernel
dnf5 -y install \
/tmp/kernel-rpms/kernel-[0-9]*.rpm \
/tmp/kernel-rpms/kernel-core-*.rpm \
/tmp/kernel-rpms/kernel-modules-*.rpm
# TODO: Figure out why akmods cache is pulling in akmods/kernel-devel
dnf5 -y install \
/tmp/kernel-rpms/kernel-devel-*.rpm
dnf5 versionlock add kernel kernel-devel kernel-devel-matched kernel-core kernel-modules kernel-modules-core kernel-modules-extra
# Everyone
# NOTE: we won't use dnf5 copr plugin for ublue-os/akmods until our upstream provides the COPR standard naming
sed -i 's@enabled=0@enabled=1@g' /etc/yum.repos.d/_copr_ublue-os-akmods.repo
# RPMFUSION Dependent AKMODS
if [[ "${UBLUE_IMAGE_TAG}" == "beta" ]]; then
dnf5 -y install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-"$(rpm -E %fedora)".noarch.rpm || true
dnf5 -y install \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-"$(rpm -E %fedora)".noarch.rpm || true
dnf5 -y install \
v4l2loopback /tmp/akmods/kmods/*v4l2loopback*.rpm || true
dnf5 -y remove rpmfusion-free-release || true
dnf5 -y remove rpmfusion-nonfree-release || true
else
dnf5 -y install \
https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-"$(rpm -E %fedora)".noarch.rpm \
https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-"$(rpm -E %fedora)".noarch.rpm
dnf5 -y install \
v4l2loopback /tmp/akmods/kmods/*v4l2loopback*.rpm
dnf5 -y remove rpmfusion-free-release rpmfusion-nonfree-release
fi
# Nvidia AKMODS
if [[ "${IMAGE_NAME}" =~ nvidia ]]; then
# Fetch Nvidia RPMs
skopeo copy --retry-times 3 docker://ghcr.io/ublue-os/akmods-nvidia-open:"${AKMODS_FLAVOR}"-"$(rpm -E %fedora)"-"${KERNEL}" dir:/tmp/akmods-rpms
NVIDIA_TARGZ=$(jq -r '.layers[].digest' </tmp/akmods-rpms/manifest.json | cut -d : -f 2)
tar -xvzf /tmp/akmods-rpms/"$NVIDIA_TARGZ" -C /tmp/
mv /tmp/rpms/* /tmp/akmods-rpms/
# Exclude the Golang Nvidia Container Toolkit in Fedora Repo
# Exclude for non-beta.... doesn't appear to exist for F42 yet?
if [[ "${UBLUE_IMAGE_TAG}" != "beta" ]]; then
dnf5 config-manager setopt excludepkgs=golang-github-nvidia-container-toolkit
else
# Monkey patch right now...
if ! grep -q negativo17 <(rpm -qi mesa-dri-drivers); then
dnf5 -y swap --repo=updates-testing \
mesa-dri-drivers mesa-dri-drivers
fi
fi
# Install Nvidia RPMs
IMAGE_NAME="${BASE_IMAGE_NAME}" AKMODNV_PATH="/tmp/akmods-rpms" MULTILIB=0 /tmp/akmods-rpms/ublue-os/nvidia-install.sh
rm -f /usr/share/vulkan/icd.d/nouveau_icd.*.json
ln -sf libnvidia-ml.so.1 /usr/lib64/libnvidia-ml.so
tee /usr/lib/bootc/kargs.d/00-nvidia.toml <<EOF
kargs = ["rd.driver.blacklist=nouveau", "modprobe.blacklist=nouveau", "nvidia-drm.modeset=1", "initcall_blacklist=simpledrm_platform_driver_init"]
EOF
# Drop AMD GPU drivers/firmware unused on Nvidia systems. Keep i915/xe for Nvidia+Intel hybrid laptops.
mkdir -p /usr/lib/dracut/dracut.conf.d
sed -i 's/ amdgpu / /g; s/ radeon / /g; s/ nouveau / /g' \
/usr/lib/dracut/dracut.conf.d/99-nvidia.conf
tee /usr/lib/dracut/dracut.conf.d/zz-nvidia-slim.conf <<EOF
omit_drivers+=" amdgpu radeon nouveau "
EOF
else
# Drop Nvidia drivers/firmware on non-nvidia images.
mkdir -p /usr/lib/dracut/dracut.conf.d
tee /usr/lib/dracut/dracut.conf.d/zz-non-nvidia-slim.conf <<EOF
omit_drivers+=" nvidia nvidia_drm nvidia_modeset nvidia_peermem nvidia_uvm nouveau "
EOF
fi
# ZFS for stable
if [[ ${AKMODS_FLAVOR} =~ coreos ]]; then
# Fetch ZFS RPMs
skopeo copy --retry-times 3 docker://ghcr.io/ublue-os/akmods-zfs:"${AKMODS_FLAVOR}"-"$(rpm -E %fedora)"-"${KERNEL}" dir:/tmp/akmods-zfs
ZFS_TARGZ=$(jq -r '.layers[].digest' </tmp/akmods-zfs/manifest.json | cut -d : -f 2)
tar -xvzf /tmp/akmods-zfs/"$ZFS_TARGZ" -C /tmp/
mv /tmp/rpms/* /tmp/akmods-zfs/
# Declare ZFS RPMs
ZFS_RPMS=(
/tmp/akmods-zfs/kmods/zfs/kmod-zfs-"${KERNEL}"-*.rpm
/tmp/akmods-zfs/kmods/zfs/libnvpair[0-9]-*.rpm
/tmp/akmods-zfs/kmods/zfs/libuutil[0-9]-*.rpm
/tmp/akmods-zfs/kmods/zfs/libzfs[0-9]-*.rpm
/tmp/akmods-zfs/kmods/zfs/libzpool[0-9]-*.rpm
/tmp/akmods-zfs/kmods/zfs/python3-pyzfs-*.rpm
/tmp/akmods-zfs/kmods/zfs/zfs-*.rpm
pv
)
# Install
dnf5 -y install "${ZFS_RPMS[@]}"
# Depmod and autoload
depmod -a -v "${KERNEL}"
echo "zfs" >/usr/lib/modules-load.d/zfs.conf
fi
echo "::endgroup::"