From: Andre Ramnitz Date: Fri, 13 Nov 2026 06:52:25 +0000 (+0100) Subject: Initial commit X-Git-Url: https://git.ramnitz.eu/?a=commitdiff_plain;h=refs%2Fheads%2Fmain;p=usr_local_sbin.git Initial commit --- 6b2ecdc0ae39ea83087a4e46d5215f0beda1002a diff --git a/gamemode_disable.sh b/gamemode_disable.sh new file mode 100755 index 0000000..6888458 --- /dev/null +++ b/gamemode_disable.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +echo "on" | sudo tee -i /sys/devices/system/cpu/smt/control +echo "madvise" | sudo tee -i /sys/kernel/mm/transparent_hugepage/enabled +echo "20" | sudo tee -i /proc/sys/vm/compaction_proactiveness +echo "1" | sudo tee -i /sys/kernel/mm/transparent_hugepage/khugepaged/defrag +echo "5" | sudo tee -i /proc/sys/vm/page_lock_unfairness + diff --git a/gamemode_enable.sh b/gamemode_enable.sh new file mode 100755 index 0000000..cea66f5 --- /dev/null +++ b/gamemode_enable.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +echo "off" | sudo tee -i /sys/devices/system/cpu/smt/control +echo "always" | sudo tee -i /sys/kernel/mm/transparent_hugepage/enabled +echo "0" | sudo tee -i /proc/sys/vm/compaction_proactiveness +echo "0" | sudo tee -i /sys/kernel/mm/transparent_hugepage/khugepaged/defrag +echo "1" | sudo tee -i /proc/sys/vm/page_lock_unfairness + diff --git a/ipv6-toggle.sh b/ipv6-toggle.sh new file mode 100755 index 0000000..c2ef0bf --- /dev/null +++ b/ipv6-toggle.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +INTERFACE="enp16s0" +SYSCTL="net.ipv6.conf.${INTERFACE}.disable_ipv6" + +if [[ $(sysctl -n "$SYSCTL") == 0 ]]; then + sudo sysctl -w "$SYSCTL=1" + echo "IPv6 auf $INTERFACE deaktiviert." +else + sudo sysctl -w "$SYSCTL=0" + echo "IPv6 auf $INTERFACE aktiviert." +fi + diff --git a/irq-affinity b/irq-affinity new file mode 100755 index 0000000..355139f --- /dev/null +++ b/irq-affinity @@ -0,0 +1,92 @@ +#!/bin/bash + +# IRQ affinity configuration + +log() +{ + logger -t irq-affinity -- "$*" +} + +set_pci_irq_affinity() +{ + local pci="$1" + local cpus="$2" + local dev="/sys/bus/pci/devices/$pci" + local irq irqpath + local found=0 + + if [[ ! -d "$dev" ]]; then + log "WARNING: PCI device $pci not found" + return 1 + fi + + if [[ -d "$dev/msi_irqs" ]]; then + for irqpath in "$dev"/msi_irqs/*; do + [[ -e "$irqpath" ]] || continue + + irq="${irqpath##*/}" + + if [[ -w "/proc/irq/$irq/smp_affinity_list" ]]; then + echo "$cpus" > "/proc/irq/$irq/smp_affinity_list" + + log "$pci IRQ $irq -> CPUs $cpus" + found=1 + fi + done + fi + + # Fallback for devices without MSI/MSI-X + if (( ! found )) && [[ -r "$dev/irq" ]]; then + irq="$(<"$dev/irq")" + + if [[ "$irq" =~ ^[0-9]+$ ]] && + (( irq > 0 )) && + [[ -w "/proc/irq/$irq/smp_affinity_list" ]]; then + + echo "$cpus" > "/proc/irq/$irq/smp_affinity_list" + + log "$pci IRQ $irq -> CPUs $cpus (legacy IRQ)" + found=1 + fi + fi + + (( found )) +} + +wait_and_set_pci_irq_affinity() +{ + local pci="$1" + local cpus="$2" + local tries="${3:-50}" + local delay="${4:-0.1}" + + while (( tries-- > 0 )); do + if compgen -G "/sys/bus/pci/devices/$pci/msi_irqs/*" > /dev/null; then + set_pci_irq_affinity "$pci" "$cpus" + return $? + fi + + sleep "$delay" + done + + log "WARNING: no MSI IRQ appeared for $pci" + return 1 +} + + +# +# IRQ assignments +# + +# AMDGPU – IRQ may appear slightly later during boot/resume +wait_and_set_pci_irq_affinity "0000:03:00.0" "6" + +# USB/xHCI – audio +set_pci_irq_affinity "0000:17:00.0" "7" + +# Bluetooth xHCI – allow all CPUs on CCD0 +set_pci_irq_affinity "0000:15:00.0" "0-7,16-23" + +# MediaTek WiFi – allow all CPUs on CCD0 +set_pci_irq_affinity "0000:0f:00.0" "0-7,16-23" + diff --git a/pam-session-envs b/pam-session-envs new file mode 100755 index 0000000..e5fd66e --- /dev/null +++ b/pam-session-envs @@ -0,0 +1,5 @@ +#!/bin/sh + +env > /tmp/pin-greetd-env.log +exit 0 + diff --git a/pin-greetd-session b/pin-greetd-session new file mode 100755 index 0000000..2784964 --- /dev/null +++ b/pin-greetd-session @@ -0,0 +1,30 @@ +#!/bin/sh + +echo "PAM_TYPE=$PAM_TYPE PAM_SERVICE=$PAM_SERVICE PAM_USER=$PAM_USER XDG_SESSION_ID=$XDG_SESSION_ID" \ + >> /tmp/pin-greetd-session.log + +CPUSET="0-7,16-23" +MEMS="0" +MEMLOW="12G" + +# Nur beim Öffnen einer PAM-Session +[ "$PAM_TYPE" = "open_session" ] || exit 0 + +# XDG_SESSION_ID sollte von pam_elogind bereits gesetzt worden sein +[ -n "$XDG_SESSION_ID" ] || exit 0 + +CG="/sys/fs/cgroup/$XDG_SESSION_ID" +[ -d "$CG" ] || exit 0 + +CLASS="$(loginctl show-session "$XDG_SESSION_ID" -p Class --value 2>/dev/null)" +SEAT="$(loginctl show-session "$XDG_SESSION_ID" -p Seat --value 2>/dev/null)" + +[ "$CLASS" = "user" ] || exit 0 +[ "$SEAT" = "seat0" ] || exit 0 + +printf '%s\n' "$CPUSET" > "$CG/cpuset.cpus" || exit 1 +printf '%s\n' "$MEMS" > "$CG/cpuset.mems" || exit 1 +printf '%s\n' "$MEMLOW" > "$CG/memory.low" || exit 1 + +exit 0 + diff --git a/pin-sddm-session b/pin-sddm-session new file mode 100755 index 0000000..78b7068 --- /dev/null +++ b/pin-sddm-session @@ -0,0 +1,30 @@ +#!/bin/sh + +echo "PAM_TYPE=$PAM_TYPE PAM_SERVICE=$PAM_SERVICE PAM_USER=$PAM_USER XDG_SESSION_ID=$XDG_SESSION_ID" \ + >> /tmp/pin-sddm-session.log + +CPUSET="0-7,16-23" +MEMS="0" +MEMLOW="12G" + +# Nur beim Öffnen einer PAM-Session +[ "$PAM_TYPE" = "open_session" ] || exit 0 + +# XDG_SESSION_ID sollte von pam_elogind bereits gesetzt worden sein +[ -n "$XDG_SESSION_ID" ] || exit 0 + +CG="/sys/fs/cgroup/$XDG_SESSION_ID" +[ -d "$CG" ] || exit 0 + +CLASS="$(loginctl show-session "$XDG_SESSION_ID" -p Class --value 2>/dev/null)" +SEAT="$(loginctl show-session "$XDG_SESSION_ID" -p Seat --value 2>/dev/null)" + +[ "$CLASS" = "user" ] || exit 0 +[ "$SEAT" = "seat0" ] || exit 0 + +printf '%s\n' "$CPUSET" > "$CG/cpuset.cpus" || exit 1 +printf '%s\n' "$MEMS" > "$CG/cpuset.mems" || exit 1 +printf '%s\n' "$MEMLOW" > "$CG/memory.low" || exit 1 + +exit 0 + diff --git a/upgrayyedd b/upgrayyedd new file mode 100755 index 0000000..0522fa3 --- /dev/null +++ b/upgrayyedd @@ -0,0 +1,366 @@ +#!/usr/bin/env bash + +BUILD_CGROUP="/sys/fs/cgroup/openrc.portage-cgroup" +KERNEL_SRC="/usr/src/linux" + +# ----- generic helpers ------------------------------------------------------- + +die() { + echo "Error: $*" >&2 + exit 1 +} + +root_check() { + (( EUID == 0 )) || die "You have to run this script with sudo" +} + +require_gentoo() { + grep -qi 'gentoo' /etc/os-release || + die "Dieses System basiert nicht auf Gentoo" +} + +# ----- build cgroup ---------------------------------------------------------- + +check_build_cgroup() { + [[ -d "$BUILD_CGROUP" ]] || + die "Build cgroup does not exist: $BUILD_CGROUP" + + [[ -w "$BUILD_CGROUP/cgroup.procs" ]] || + die "Cannot write to $BUILD_CGROUP/cgroup.procs" +} + +enter_build_cgroup() { + check_build_cgroup + + echo "$BASHPID" > "$BUILD_CGROUP/cgroup.procs" || + die "Could not enter build cgroup" +} + +run_in_build_cgroup() { + ( + enter_build_cgroup + exec "$@" + ) +} + +emerge_build() { + run_in_build_cgroup \ + schedtool -D -e \ + /usr/bin/emerge "$@" +} + +# ----- portage operations --------------------------------------------------- + +sync_all_repos() { + emaint sync -A +} + +sync_repos() { + emaint sync -a +} + +update_world() { + emerge_build -avuDNg @world "$@" +} + +resume_operations() { + emerge -av --resume +} + +daily_update() { + sync_repos && update_world "$@" +} + +update_world_with_bdeps() { + emerge_build \ + -avuDNg \ + --with-bdeps=y \ + --binpkg-changed-deps=y \ + @world "$@" +} + +# ----- kernel build --------------------------------------------------------- + +cd_to_src() { + [[ -L "$KERNEL_SRC" ]] || + die "Symlink $KERNEL_SRC ist nicht gesetzt" + + [[ -f "$KERNEL_SRC/Makefile" ]] || + die "$KERNEL_SRC zeigt nicht auf einen gueltigen Kernel-Quellbaum" + + cd "$KERNEL_SRC" || + die "Verzeichniswechsel nach $KERNEL_SRC fehlgeschlagen" +} + +prepare_config() { + local flavor=$1 + local config="/usr/src/config-$flavor" + + [[ -f "$config" ]] || + die "Kernel config does not exist: $config" + + cp -- "$config" .config || + die "Kopieren von $config nach .config fehlgeschlagen" +} + +print_version() { + echo + echo "Building version:" + head -n 5 Makefile + echo +} + +build_timeout() { + local key + read -n 1 -s -r -p "Press any key to continue" key + echo +} + +build_kernel_in_cgroup() { + ( + # Enter the build cgroup once. All make processes and their children + # inherit the cpuset/resource limits from here on. + enter_build_cgroup + + local jobs + jobs=$(nproc) || exit 2 + + echo "Using $jobs build jobs from the cgroup CPU set." + echo + + schedtool -D -e make oldconfig || exit 2 + schedtool -D -e make modules_prepare || exit 2 + schedtool -D -e make -j"$jobs" || exit 2 + schedtool -D -e make modules_install || exit 2 + schedtool -D -e make install || exit 2 + ) +} + +kernel_build() { + local flavor=${1:-live} + + root_check + cd_to_src + + if [[ "$flavor" == "live" ]]; then + [[ -f .config ]] || + die "No .config found in $KERNEL_SRC" + else + make mrproper || + die "make mrproper failed" + + prepare_config "$flavor" + fi + + print_version + build_timeout + + build_kernel_in_cgroup || + die "Kernel build failed" + + emerge_build @module-rebuild || + die "Module rebuild failed" + + echo + echo "Build completed." + + if [[ "$flavor" != "live" ]]; then + echo "Remember to upgrayyedd /usr/src/config-* if necessary." + fi +} + +# ----- main ----------------------------------------------------------------- + +require_gentoo + +case "${1:-}" in + check) + /usr/bin/emerge -puDNg @world + ;; + + sync|ref|refresh) + root_check + sync_all_repos + ;; + + daily|all) + root_check + daily_update "${@:2}" + ;; + + world|dup) + root_check + update_world "${@:2}" + ;; + + wbdeps|wbd) + root_check + update_world_with_bdeps "${@:2}" + ;; + + pkg|in) + root_check + emerge_build -avg "${@:2}" + ;; + + resume) + root_check + resume_operations "${@:2}" + ;; + + skipkernel) + root_check + emerge_build \ + -avuDNg \ + @world \ + --exclude=dist-kernel \ + --exclude=gentoo-kernel \ + --exclude=gentoo-sources \ + --exclude=git-sources \ + "${@:2}" + ;; + + preserved) + root_check + emerge_build -av @preserved-rebuild + ;; + + wholeworld) + root_check + + # Intentional exception: this is the only build path outside the + # Portage cgroup. A full world rebuild may use all CPUs because the + # machine is expected to be otherwise idle / running only TTYs. + schedtool -B -e /usr/bin/emerge \ + -avuDeg \ + --with-bdeps=y \ + --usepkg=n \ + --binpkg-changed-deps=n \ + --keep-going=y \ + @world \ + --exclude="acct-group/* acct-user/* virtual/* app-eselect/* sys-kernel/* sys-firmware/* dev-python/* dev-java/* dev-ruby/* dev-perl/* dev-lua/* dev-php/* dev-tex/* dev-texlive/* x11-themes/* */*-bin" + ;; + + search|se) + /usr/bin/emerge --search "${@:2}" + ;; + + clean|rm) + root_check + /usr/bin/emerge -a --depclean "${@:2}" + ;; + + checkclean) + /usr/bin/emerge -apv --depclean "${@:2}" + ;; + + live) + root_check + emerge_build -av @live-rebuild + ;; + + flatpaks) + flatpak update + ;; + + kernel-live) + kernel_build live + ;; + + kernel-gentoo) + kernel_build gentoo + ;; + + kernel-llvm) + kernel_build llvm + ;; + + kernel-git) + kernel_build git + ;; + + kernel-server) + kernel_build server + ;; + + clean-kernels) + root_check + + echo "Relevant files in /boot:" + echo + + command ls -1 \ + /boot/System.map* \ + /boot/initramfs* \ + /boot/vmlinuz* 2>/dev/null + + eclean-kernel -aA -L std + ;; + + log) + grep -i "completed" /var/log/emerge.log | + while IFS=' ' read -r ts rest; do + printf '%s %s\n' "$(date -d "@${ts%:}" '+%Y-%m-%d %H:%M:%S')" "$rest" + done + ;; + unlog) + grep -i "unmerging" /var/log/emerge.log | + while IFS=' ' read -r ts rest; do + printf '%s %s\n' "$(date -d "@${ts%:}" '+%Y-%m-%d %H:%M:%S')" "$rest" + done + ;; + + testify) + root_check + + run_in_build_cgroup bash -c ' + echo "PID: $$" + echo + echo "cgroup:" + cat /proc/$$/cgroup + echo + echo "allowed CPUs:" + grep Cpus_allowed_list /proc/$$/status + echo + echo "nproc:" + nproc + ' + ;; + + *) + cat <<'HELP' + +Currently available commands: + +sync | ref | refresh forcibly synchronize all repositories +check check for updates +search | se search packages +all | daily sync enabled repositories and update world +world | dup update world without repository sync +wbdeps | wbd update world including build dependencies +pkg | in install packages given as arguments +skipkernel update world except kernel packages + +live update all live packages +flatpaks update flatpaks + +wholeworld rebuild everything from scratch using all CPUs + +kernel-live build current kernel tree/config +kernel-gentoo build kernel flavor: gentoo +kernel-llvm build kernel flavor: llvm +kernel-git build kernel flavor: git +kernel-server build kernel flavor: server + +checkclean check for orphans +clean | rm clean orphaned packages +preserved rebuild preserved libraries +clean-kernels remove old kernels + +log view recently emerged files +unlog view recently unmerged files +testify show build cgroup placement + +HELP + ;; +esac