]> Freerunner's - usr_local_sbin.git/commitdiff
Initial commit main
authorAndre Ramnitz <andre.ramnitz@mail.de>
Fri, 13 Nov 2026 06:52:25 +0000 (07:52 +0100)
committerAndre Ramnitz <andre.ramnitz@mail.de>
Fri, 13 Nov 2026 06:52:25 +0000 (07:52 +0100)
gamemode_disable.sh [new file with mode: 0755]
gamemode_enable.sh [new file with mode: 0755]
ipv6-toggle.sh [new file with mode: 0755]
irq-affinity [new file with mode: 0755]
pam-session-envs [new file with mode: 0755]
pin-greetd-session [new file with mode: 0755]
pin-sddm-session [new file with mode: 0755]
upgrayyedd [new file with mode: 0755]

diff --git a/gamemode_disable.sh b/gamemode_disable.sh
new file mode 100755 (executable)
index 0000000..6888458
--- /dev/null
@@ -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 (executable)
index 0000000..cea66f5
--- /dev/null
@@ -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 (executable)
index 0000000..c2ef0bf
--- /dev/null
@@ -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 (executable)
index 0000000..355139f
--- /dev/null
@@ -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 (executable)
index 0000000..e5fd66e
--- /dev/null
@@ -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 (executable)
index 0000000..2784964
--- /dev/null
@@ -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 (executable)
index 0000000..78b7068
--- /dev/null
@@ -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 (executable)
index 0000000..0522fa3
--- /dev/null
@@ -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