summaryrefslogtreecommitdiff
path: root/raveos-calamares-theme/etc/calamares/modules/calamares-microcode-fix.sh
blob: 9915bc6cd83791c2231ca15c5af02032a41c5e7a (plain)
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
#!/bin/bash
set -e

echo ">>> [microcode-fix] Running INSIDE target system"

VENDOR=$(awk -F: '/vendor_id/ {print $2; exit}' /proc/cpuinfo | xargs)
echo ">>> [microcode-fix] Detected CPU vendor: ${VENDOR}"

if [[ "${VENDOR}" == "GenuineIntel" ]]; then
  PKG="intel-ucode"
  UCODE_IMG="/boot/intel-ucode.img"
  UCODE_LINE="initrd  /intel-ucode.img"
elif [[ "${VENDOR}" == "AuthenticAMD" ]]; then
  PKG="amd-ucode"
  UCODE_IMG="/boot/amd-ucode.img"
  UCODE_LINE="initrd  /amd-ucode.img"
else
  echo ">>> [microcode-fix] Unknown vendor, skipping."
  exit 0
fi

echo ">>> [microcode-fix] Installing microcode package: ${PKG}"
pacman -Sy --noconfirm "${PKG}" || true

if [[ "${VENDOR}" == "AuthenticAMD" ]]; then
  echo ">>> [microcode-fix] Installing zenpower5-dkms-git + deps..."

  pacman -Syy --noconfirm || true

  pacman -S --noconfirm dkms linux-cachyos-headers zenpower5-dkms-git || true

  echo ">>> [microcode-fix] Enabling zenpower module autoload..."
  mkdir -p /etc/modules-load.d
  echo "zenpower" > /etc/modules-load.d/zenpower.conf

  echo ">>> [microcode-fix] DKMS autoinstall..."
  dkms autoinstall || true

  echo ">>> [microcode-fix] Rebuilding initramfs..."
  mkinitcpio -P || true

  echo ">>> [microcode-fix] zenpower package check:"
  pacman -Q zenpower5-dkms-git 2>/dev/null && echo ">>> zenpower OK" || echo ">>> zenpower MISSING"
fi


if [ ! -f "${UCODE_IMG}" ]; then
  echo ">>> [microcode-fix] Missing ${UCODE_IMG}, skipping entry patch."
  exit 0
fi

ENTRYDIR="/boot/loader/entries"
echo ">>> [microcode-fix] Entry dir: ${ENTRYDIR}"

[ -d "${ENTRYDIR}" ] || exit 0

for f in "${ENTRYDIR}"/*.conf; do
  [ -f "$f" ] || continue
  echo ">>> [microcode-fix] Patching: $f"

  if grep -qE '^initrd[[:space:]]+/amd-ucode\.img$' "$f" || grep -qE '^initrd[[:space:]]+/intel-ucode\.img$' "$f"; then
    echo ">>> [microcode-fix] Already has microcode initrd, skipping: $f"
    continue
  fi

  tmp="$(mktemp)"
  {
    echo "${UCODE_LINE}"
    cat "$f"
  } > "$tmp"
  cat "$tmp" > "$f"
  rm -f "$tmp"
done

echo ">>> [microcode-fix] Done."