|
| 1 | +#!/bin/bash |
| 2 | + |
1 | 3 | # ,-. |
2 | 4 | # ,--, ,-.----. ,--/ /| |
3 | 5 | # ,'_ /| ,---, \ / \ ,--. :/ | |
|
34 | 36 | # ./__; ; \ |
35 | 37 | # | :/\ \ ; |
36 | 38 | # `---' `--` |
| 39 | + |
| 40 | +set -euo pipefail |
| 41 | + |
| 42 | +TMPFILE="/tmp/xanmod-cpu.hacker" |
| 43 | +GITHUB_RAW="https://raw.githubusercontent.com/HackerOS-Linux-System/Hacker-Lang/main/hacker-packages/xanmod-cpu.hacker" |
| 44 | +LOGPREFIX="[liquorix-installer]" |
| 45 | + |
| 46 | +echo "${LOGPREFIX} Start" |
| 47 | + |
| 48 | +# 1) Pobierz plik |
| 49 | +echo "${LOGPREFIX} Pobieram plik z GitHub: ${GITHUB_RAW} -> ${TMPFILE}" |
| 50 | +if ! command -v curl >/dev/null 2>&1; then |
| 51 | + echo "${LOGPREFIX} curl nieznalezione, instaluję curl..." |
| 52 | + sudo apt update |
| 53 | + sudo apt install -y curl |
| 54 | +fi |
| 55 | + |
| 56 | +if ! curl -fsSL -o "${TMPFILE}" "${GITHUB_RAW}"; then |
| 57 | + echo "${LOGPREFIX} Błąd pobierania pliku z GitHub." |
| 58 | + exit 1 |
| 59 | +fi |
| 60 | +echo "${LOGPREFIX} Plik pobrany." |
| 61 | + |
| 62 | +# 2) Parse patterns |
| 63 | +mapfile -t mappings < <(sed -e 's/^\s*//;s/\s*$//' "${TMPFILE}" \ |
| 64 | + | sed '/^\s*$/d' \ |
| 65 | + | sed '/^\s*#/d' \ |
| 66 | + | sed 's/^\[\(.*\)\]$/\1/' \ |
| 67 | + | awk -F'>' '/>/{gsub(/^[ \t]+|[ \t]+$/,"",$1); gsub(/^[ \t]+|[ \t]+$/,"",$2); print $1 "###" $2 }') |
| 68 | + |
| 69 | +if [ ${#mappings[@]} -eq 0 ]; then |
| 70 | + echo "${LOGPREFIX} Brak poprawnych mapowań." |
| 71 | + exit 1 |
| 72 | +fi |
| 73 | + |
| 74 | +declare -a patterns |
| 75 | +declare -a targets |
| 76 | + |
| 77 | +tmp_sort="$(mktemp)" |
| 78 | +for m in "${mappings[@]}"; do |
| 79 | + pat="${m%%###*}" |
| 80 | + tar="${m##*###}" |
| 81 | + printf '%s\t%s\n' "${pat}" "${tar}" >> "${tmp_sort}" |
| 82 | +done |
| 83 | + |
| 84 | +mapfile -t sorted_pairs < <( |
| 85 | + awk -F'\t' '{print length($1) "\t" $0}' "${tmp_sort}" \ |
| 86 | + | sort -rn \ |
| 87 | + | cut -f2- \ |
| 88 | + | awk -F'\t' '{print $1 "###" $2 }' |
| 89 | +) |
| 90 | +rm -f "${tmp_sort}" |
| 91 | + |
| 92 | +patterns=() |
| 93 | +targets=() |
| 94 | +for sp in "${sorted_pairs[@]}"; do |
| 95 | + patterns+=("${sp%%###*}") |
| 96 | + targets+=("${sp##*###}") |
| 97 | +done |
| 98 | + |
| 99 | +# 3) CPU INFO |
| 100 | +CPU_INFO="$(lscpu 2>/dev/null || true)" |
| 101 | +CPU_MODEL="$(awk -F: '/Model name/ {print $2; exit}' /proc/cpuinfo 2>/dev/null || true)" |
| 102 | +CPU_VENDOR="$(awk -F: '/Vendor ID/ {print $2; exit}' /proc/cpuinfo 2>/dev/null || true)" |
| 103 | +CPU_TEXT="${CPU_MODEL} ${CPU_VENDOR} ${CPU_INFO}" |
| 104 | +CPU_TEXT="$(echo "${CPU_TEXT}" | tr '[:upper:]' '[:lower:]')" |
| 105 | + |
| 106 | +echo "${LOGPREFIX} Wykryty CPU:" |
| 107 | +echo "${LOGPREFIX} ${CPU_MODEL}" |
| 108 | + |
| 109 | +# 4) Pattern match |
| 110 | +SELECTED_TARGET="" |
| 111 | +SELECTED_PATTERN="" |
| 112 | + |
| 113 | +for i in "${!patterns[@]}"; do |
| 114 | + pat="$(echo "${patterns[$i]}" | tr '[:upper:]' '[:lower:]')" |
| 115 | + tar="${targets[$i]}" |
| 116 | + if [ -n "${pat}" ] && echo "${CPU_TEXT}" | grep -F -i -q "${pat}"; then |
| 117 | + SELECTED_TARGET="${tar}" |
| 118 | + SELECTED_PATTERN="${patterns[$i]}" |
| 119 | + break |
| 120 | + fi |
| 121 | +done |
| 122 | + |
| 123 | +if [ -z "${SELECTED_TARGET}" ]; then |
| 124 | + for i in "${!patterns[@]}"; do |
| 125 | + if echo "${patterns[$i]}" | tr '[:upper:]' '[:lower:]' | grep -q "all x86-64"; then |
| 126 | + SELECTED_TARGET="${targets[$i]}" |
| 127 | + SELECTED_PATTERN="${patterns[$i]}" |
| 128 | + break |
| 129 | + fi |
| 130 | + done |
| 131 | +fi |
| 132 | + |
| 133 | +if [ -z "${SELECTED_TARGET}" ]; then |
| 134 | + echo "${LOGPREFIX} Brak dopasowania — używam domyślnego x86-64" |
| 135 | + SELECTED_TARGET="x86-64" |
| 136 | + SELECTED_PATTERN="(default x86-64)" |
| 137 | +fi |
| 138 | + |
| 139 | +echo "${LOGPREFIX} Dopasowano: '${SELECTED_PATTERN}' -> '${SELECTED_TARGET}'" |
| 140 | + |
| 141 | +# 5) Wybór wariantu – zostaje, choć Liquorix tego nie używa |
| 142 | +if echo "${SELECTED_TARGET}" | grep -q "v3"; then |
| 143 | + CPU_VARIANT="x64v3" |
| 144 | +elif echo "${SELECTED_TARGET}" | grep -q "v2"; then |
| 145 | + CPU_VARIANT="x64v2" |
| 146 | +else |
| 147 | + CPU_VARIANT="x64v1" |
| 148 | +fi |
| 149 | + |
| 150 | +echo "${LOGPREFIX} Wariant CPU: ${CPU_VARIANT}" |
| 151 | + |
| 152 | +# 6) Instalacja Liquorix zamiast Xanmod |
| 153 | +echo "${LOGPREFIX} Instaluję jądro Liquorix..." |
| 154 | + |
| 155 | +if ! curl -s 'https://liquorix.net/install-liquorix.sh' | sudo bash; then |
| 156 | + echo "${LOGPREFIX} Błąd instalacji Liquorix!" |
| 157 | + exit 1 |
| 158 | +fi |
| 159 | + |
| 160 | +echo "${LOGPREFIX} Jądro Liquorix zainstalowane." |
| 161 | + |
| 162 | +# 7) NVIDIA |
| 163 | +echo "${LOGPREFIX} Sprawdzam NVIDIA..." |
| 164 | +HAS_NVIDIA=0 |
| 165 | + |
| 166 | +if command -v lspci >/dev/null 2>&1; then |
| 167 | + if lspci -nnk | grep -i -E "nvidia|nvidia corporation" >/dev/null 2>&1; then |
| 168 | + HAS_NVIDIA=1 |
| 169 | + fi |
| 170 | +else |
| 171 | + echo "${LOGPREFIX} Instaluję pciutils..." |
| 172 | + sudo apt update |
| 173 | + sudo apt install -y pciutils |
| 174 | + if lspci -nnk | grep -i "nvidia" >/dev/null 2>&1; then |
| 175 | + HAS_NVIDIA=1 |
| 176 | + fi |
| 177 | +fi |
| 178 | + |
| 179 | +if [ "${HAS_NVIDIA}" -eq 1 ]; then |
| 180 | + echo "${LOGPREFIX} Wykryto NVIDIA — instaluję sterowniki." |
| 181 | + sudo apt update |
| 182 | + sudo apt install -y nvidia-driver nvidia-kernel-dkms nvidia-smi libnvidia-ml1 nvidia-settings nvidia-cuda-mps || { |
| 183 | + echo "${LOGPREFIX} Błąd instalacji sterowników NVIDIA." |
| 184 | + } |
| 185 | +else |
| 186 | + echo "${LOGPREFIX} Nie wykryto NVIDIA." |
| 187 | +fi |
| 188 | + |
| 189 | +echo "${LOGPREFIX} GOTOWE. Zrestartuj system, aby włączyć jądro Liquorix." |
0 commit comments