From: Andre Ramnitz Date: Sun, 18 Oct 2026 07:47:47 +0000 (+0200) Subject: scripts: add some X-Git-Url: https://git.ramnitz.eu/?a=commitdiff_plain;h=650fec3ba54a8301ef0c9e0b90647c82c6b5c59b;p=dotfiles.git scripts: add some --- diff --git a/dot-local/bin/check-ram-pressure.sh b/dot-local/bin/check-ram-pressure.sh new file mode 100755 index 0000000..87d4d07 --- /dev/null +++ b/dot-local/bin/check-ram-pressure.sh @@ -0,0 +1,30 @@ +#!/bin/bash +clear +echo "free:" +free +printf '\n' +echo "grep -i zswap /proc/meminfo:" +grep -i zswap /proc/meminfo +printf '\n' +echo "grep -E '^zswp' /proc/vmstat:" +grep -E '^zswp' /proc/vmstat +printf '\n' +echo "grep -E '^(zswap|zswapped|zswpin|zswpout|zswpwb) ' /sys/fs/cgroup/memory.stat:" +grep -E '^(zswap|zswapped|zswpin|zswpout|zswpwb) ' /sys/fs/cgroup/memory.stat +printf '\n' +echo "grep -E '^(pswpin|pswpout) ' /proc/vmstat:" +grep -E '^(pswpin|pswpout) ' /proc/vmstat +printf '\n' +echo "ps -eLo pid,tid,psr,cls,rtprio,ni,pcpu,comm --sort=-pcpu | head -n 27:" +ps -eLo pid,tid,psr,cls,rtprio,ni,pcpu,comm --sort=-pcpu | head -n 27 + printf '\n' +if [[ -d "/proc/pressure" ]]; then + echo "PSI - Pressure Stall Information" + printf '\n' + echo "cat /proc/pressure/cpu" + cat /proc/pressure/cpu + printf '\n' + echo "cat /proc/pressure/memory" + cat /proc/pressure/memory +fi + diff --git a/dot-local/bin/ipv6-toggle.sh b/dot-local/bin/ipv6-toggle.sh new file mode 100755 index 0000000..c2ef0bf --- /dev/null +++ b/dot-local/bin/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/dot-local/bin/kak-theme-sync b/dot-local/bin/kak-theme-sync new file mode 100755 index 0000000..702a3b6 --- /dev/null +++ b/dot-local/bin/kak-theme-sync @@ -0,0 +1,19 @@ +#!/bin/bash + +case "$NOCTALIA_THEME_MODE" in + dark) + theme="dabruin" + ;; + light) + theme="dabruin-light" + ;; + *) + exit 0 + ;; +esac + +kak -l | while IFS= read -r session; do + printf 'colorscheme %s\n' "$theme" | + kak -p "$session" 2>/dev/null +done + diff --git a/dot-local/bin/log-ram-pressure.sh b/dot-local/bin/log-ram-pressure.sh new file mode 100755 index 0000000..468f18c --- /dev/null +++ b/dot-local/bin/log-ram-pressure.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +while sleep 2; + do + date '+--- %F %T ---'; + grep -E '^(MemAvailable|SwapFree|Zswap|Zswapped):' /proc/meminfo; + grep -E '^(zswpin|zswpout|zswpwb|pswpin|pswpout) ' /proc/vmstat; + grep -E '^(some|full) ' /proc/pressure/memory; + done > ~/memory-pressure.log diff --git a/dot-local/bin/upgrayyedd b/dot-local/bin/upgrayyedd deleted file mode 100755 index 25b1c94..0000000 --- a/dot-local/bin/upgrayyedd +++ /dev/null @@ -1,264 +0,0 @@ -#!/bin/bash - -PORTAGE_CPUS="8-15,24-31" -BUILD_CGROUP="/sys/fs/cgroup/openrc.portage-cgroup" - -# make sure we're root -root_check(){ - if [ "$(id -u)" -ne 0 ];then - echo "" - echo "You have to run this script with sudo" - exit 0 - fi -} - -pin_to_ccd() { - taskset -pc "$PORTAGE_CPUS" $$ >/dev/null || { - echo "CPU affinity konnte nicht gesetzt werden" - exit 1 - } -} - -ccd_emerge() { - taskset -c "$PORTAGE_CPUS" /usr/bin/emerge "$@" -} - -ccd_make() { - taskset -c "$PORTAGE_CPUS" schedtool -D -e make "$@" -} - -run_in_portage_cgroup () { - ( - echo "$BASHPID" > "$BUILD_CGROUP/cgroup.procs" || exit 1 - exec "$@" - ) -} - -# make sure we're running gentoo -grep -i gentoo /etc/os-release || { echo "Dieses System basiert nicht auf Gentoo" && exit 1; } - -numcores="$(echo ""$(nproc)"" /2 | bc)" - -cd_to_src(){ - readlink -f "/usr/src/linux" || { echo "Symlink /usr/src/linux nicht gesetzt oder fehlerhaft" && exit 2; } - cd "/usr/src/linux" || { echo "Verzeichniswechsel fehlgeschlagen" && exit 2; } -} - -clean_builddir(){ - make mrproper -} - -call_makejobs(){ - # pin_to_ccd - ccd_make oldconfig - ccd_make modules_prepare - ccd_make -j"$numcores" || exit 2 - ccd_make modules_install - ccd_make install - run_in_portage_cgroup schedtool -D -e emerge -avuDNg @module-rebuild -} - -build_kernel_in_cgroup(){ - ( - echo "$BASHPID" > "$BUILD_CGROUP/cgroup.procs" || exit 1 - make oldconfig - make modules_prepare - make -j"$numcores" || exit 2 - make modules_install - make install - run_in_portage_cgroup schedtool -D -e emerge -avuDNg @module-rebuild - ) -} - -prepare_config(){ - cp "/usr/src/config-$1" ".config" - test -f "./.config" || { echo "Kopieren der config fehlgeschlagen" && exit 2; } -} - -print_version(){ - echo "Building version:" - head -n5 Makefile - echo "" -} - -build_timeout(){ - unset key - read -n 1 -s -r -p "Press any key to continue" key -} - -case "$1" in - check) - emerge -puDNg @world - ;; - sync|ref|refresh) - root_check - emaint sync -A - ;; - world|dup) - root_check - run_in_portage_cgroup schedtool -D -e emerge -avuDNg @world "${@:2}" - exit 0 - ;; - wbdeps|wbd) - root_check - run_in_portage_cgroup schedtool -D -e emerge -avuDNg --with-bdeps=y --binpkg-changed-deps=y @world "${@:2}" - exit 0 - ;; - daily|all) - root_check - emaint sync -A - run_in_portage_cgroup schedtool -D -e emerge -avuDNg @world "${@:2}" - exit 0 - ;; - pkg|in) - root_check - run_in_portage_cgroup schedtool -D -e emerge -avg "${@:2}" - exit 0 - ;; - skipkernel) - root_check - /usr/bin/emerge -avuDNg @world --exclude=dist-kernel --exclude=gentoo-kernel --exclude=gentoo-sources --exclude=git-sources "${@:2}" - exit 0 - ;; - preserved) - root_check - run_in_portage_cgroup schedtool -D -e emerge -av @preserved-rebuild - exit 0 - ;; - wholeworld) - PORTAGE_CPUS=32 - root_check - 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" - exit 0 - ;; - search|se) - root_check - /usr/bin/emerge --search "${@:2}" - exit 0 - ;; - clean|rm) - root_check - /usr/bin/emerge -a --depclean "${@:2}" - exit 0 - ;; - checkclean) - /usr/bin/emerge -apv --depclean "${@:2}" - exit 0 - ;; - live) - root_check - /usr/bin/emerge -av @live-rebuild - ;; - flatpaks) - flatpak update - ;; - kernel-live) - root_check - cd_to_src - test -f "./.config" || exit 2 - print_version - build_timeout - build_kernel_in_cgroup - # call_makejobs - cd - - exit 0 - ;; - kernel-gentoo) - root_check - cd "/usr/src/linux" || exit 2 - clean_builddir - prepare_config "gentoo" - print_version - build_timeout - call_makejobs - echo "Build completed. Remember to upgrayyedd /usr/src/config-* if necessary." - exit 0 - ;; - kernel-llvm) - root_check - cd "/usr/src/linux" || exit 2 - clean_builddir - prepare_config "llvm" - print_version - build_timeout - call_makejobs - echo "Build completed. Remember to upgrayyedd /usr/src/config-* if necessary." - exit 0 - ;; - kernel-git) - root_check - cd "/usr/src/linux" || exit 2 - clean_builddir - prepare_config "git" - print_version - build_timeout - call_makejobs - echo "Build completed. Remember to upgrayyedd /usr/src/config-* if necessary." - exit 0 - ;; - kernel-server) - root_check - cd "/usr/src/linux" || exit 2 - clean_builddir - prepare_config "server" - print_version - build_timeout - call_makejobs - echo "Build completed. Remember to upgrayyedd /usr/src/config-* if necessary." - exit 0 - ;; - clean-kernels) - root_check - echo "Relevant files in /boot:" - echo "" - command ls -1 --hide='*/' /boot/System.map* /boot/initramfs* /boot/vmlinuz* - eclean-kernel -aA -L std - ;; - log) - grep -i --color=auto "completed" /var/log/emerge.log - echo "note: use 'date -d @[unixtime]' to convert the timestamp" - ;; - unlog) - grep -i --color=auto "unmerging" /var/log/emerge.log - echo "note: use 'date -d @[unixtime]' to convert the timestamp" - ;; - testify) - run_in_portage_cgroup bash -c ' - echo "PID: $$" - echo "cgroup:" - cat /proc/$$/cgroup - echo "allowed CPUs:" - grep Cpus_allowed_list /proc/$$/status - ' - ;; - *) - printf '\nCurrently available commands:\n\n' - printf '%s\t%s\n' \ - 'sync ' 'synchronize repos' \ - 'check ' 'check for updates' \ - 'search | se ' 'search packages' \ - 'refresh | ref ' 'sync and update world' \ - ' ' ' ' \ - 'livebuilds ' 'update all live packages' \ - 'flatpaks ' 'update flatpaks' \ - 'world | dup ' 'update world' \ - ' ' ' ' \ - 'wholeworld ' 'rebuild everything from scratch' \ - ' ' ' ' \ - '-- ' 'install packages given as argument' \ - ' ' ' ' \ - '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 ' 'clean orphaned packages' \ - 'preserved ' 'clean-up old libraries' \ - 'clean-kernels ' 'remove old kernels' \ - ' ' ' ' \ - 'log ' 'view recently emerged files' \ - 'unlog ' 'view recently unmerged files' \ - ' ' ' ' - ;; -esac diff --git a/dot-local/bin/upgrayyeddv2 b/dot-local/bin/upgrayyeddv2 new file mode 100755 index 0000000..b756955 --- /dev/null +++ b/dot-local/bin/upgrayyeddv2 @@ -0,0 +1,354 @@ +#!/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_auto() { + emaint sync -a +} + +update_world() { + emerge_build -avuDNg @world "$@" +} + +daily_update() { + sync_repos_auto && 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 -avuDNg @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}" + ;; + + 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 --color=auto "completed" /var/log/emerge.log + echo "note: use 'date -d @[unixtime]' to convert the timestamp" + ;; + + unlog) + grep -i --color=auto "unmerging" /var/log/emerge.log + echo "note: use 'date -d @[unixtime]' to convert the timestamp" + ;; + + 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