Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
Gentoo Update Skript
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Sun Oct 20, 2024 10:07 am    Post subject: Gentoo Update Skript Reply with quote

Moin moin,

ich habe mir eine Update Skript für die routinemäßigen Updates gebastelt. Das möchte ich hier mal vorstellen. Vielleicht findet der eine oder andere das ja gut und möchte es haben. In meinem Fall heißt es "worldupdate":

Code:

#!/bin/bash

# Fehlerfunktion für einheitliche Fehlerbehandlung
error_exit() {
    local message="$1"
    telegram "Beim Worldupdate auf Kellerkind ist ein Fehler aufgetreten: $message"
    exit 1
}

# Funktion für das World-Update
do_world_update() {
    if [[ $1 != "nosync" ]]; then
        emaint sync -a || error_exit "emaint sync fehlgeschlagen"
    fi
   
    emerge -avuDN --with-bdeps=y @world && \
    emerge @preserved-rebuild && \
    emerge -a --depclean && \
    revdep-rebuild -p && \
    eix-update || error_exit "Ein Schritt des World-Updates ist fehlgeschlagen"
}

# Funktion für fstrim
do_fstrim() {
    if fstrimcount; then
        echo "fstrimcount erreicht, führe fstrim aus..."
        fstrim -v /tmp && fstrim -v /var/tmp || error_exit "fstrim ist fehlgeschlagen"
    else
        echo "fstrimcount nicht erreicht, überspringe fstrim"
    fi
}

# Hauptfunktion
main() {
    do_world_update "$1" && \
    do_fstrim && \
    (
        echo "eclean distfiles in 5s. Ctrl-c to interrupt .."
        sleep 5
        eclean distfiles
    ) || error_exit "Ein Schritt des Hauptprozesses ist fehlgeschlagen"
}

# Skript ausführen
main "$1"


Die Kommentare sind jetzt in deutsch, darüber kann man streiten und/oder es ändern. Das Kommando "telegram" sendet eine Nachricht auf meinen Telegram Bot, falls was schief gelaufen ist.


Das verwendete Skrip "fstrimdount", welches hier aufgerufen wird, sorgt dafür, dass fstrim nur bei jedem 20zigsten Update auf die SSDs, die unter /tmp und /var/tmp liegen ausgeführt wird. Für die root Platte mache ich das ab und wann manuelle, aber da spielt ja weniger Musik. Daher ist das selten nötig.

fstrimdount:

Code:

#!/bin/bash

# Konfigurationsvariablen
CONFIG_DIR="$HOME/.config/counter"
COUNTER_FILE="$CONFIG_DIR/fstrimcount"
MAX_COUNT=19

# Funktion zum Erstellen des Konfigurationsverzeichnisses, falls es nicht existiert
create_config_dir() {
    if [[ ! -d "$CONFIG_DIR" ]]; then
        mkdir -p "$CONFIG_DIR" || { echo "Fehler: Konnte Verzeichnis $CONFIG_DIR nicht erstellen" >&2; exit 1; }
    fi
}

# Funktion zum Lesen des Zählerstands
read_counter() {
    if [[ ! -f "$COUNTER_FILE" ]]; then
        echo 0 > "$COUNTER_FILE"
    fi
    COUNTER=$(cat "$COUNTER_FILE")
    if ! [[ "$COUNTER" =~ ^[0-9]+$ ]]; then
        echo "Fehler: Ungültiger Zählerstand in $COUNTER_FILE" >&2
        exit 1
    fi
}

# Funktion zum Aktualisieren des Zählerstands
update_counter() {
    COUNTER=$((COUNTER + 1))
    if [[ $COUNTER -gt $MAX_COUNT ]]; then
        COUNTER=0
        echo "fstrim wird ausgeführt .."
        echo "$COUNTER" > "$COUNTER_FILE"
        return 0
    else
        echo "Kein fstrim!"
        echo "$COUNTER" > "$COUNTER_FILE"
        return 1
    fi
}

# Hauptfunktion
main() {
    create_config_dir
    read_counter
    echo "Aktueller fstrim count: $COUNTER"
    update_counter
    exit $?
}

# Skript ausführen
main



Was haltet Ihr davon?
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
firefly
Watchman
Watchman


Joined: 31 Oct 2002
Posts: 5312

PostPosted: Sun Oct 20, 2024 10:30 am    Post subject: Reply with quote

Das eix-update direkt aufrufen kannst man sich sparen.
das eix paket liefert ein script mit was man als postsync aktion aktivieren kann.
Das script heißt "/usr/bin/eix-postsync"
Und wenn man das script als symlink unter "/etc/portage/postsync.d" verlinkt (z.b. mit namen 50-eix-postsync) dann wird die eix datenbank direkt nach dem sync via emaint/portage aktualisiert.

Ist bei dir /tmp auf einem Datenträger abgelegt? Meist ist das als tmpfs im RAM gemounted. Wobei man das im falle von systemd nicht selbst machen muss AFAIK aber wenn man openrc nutzt. (https://wiki.gentoo.org/wiki/Tmpfs)

Was ist dein gedanke dabei fstrim nur bei jedem 20. Update laufen zu lassen?
Es häufiger laufen zu lassen ist kein Problem für eine SSD. Da ich systemd nutze kann ich da jetzt nur davon reden wie es dort gelöst ist.
Für systemd gibt es einen timer (von sys-apps/util-linux bereitgestellt), welcher fstrim einmal pro woche laufen lässt.
Und hier wird fstrim für alle Dateisysteme, welcher in der fstab in "/proc/self/mountinfo" aufgeführt sind.
_________________
Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn.
Back to top
View user's profile Send private message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Sun Oct 20, 2024 11:02 am    Post subject: Reply with quote

Angeblich sollen SSDs bei zu häufigem fstrim schneller verschleißen. Evtl. ist diese Info ja falsch. Bis jetzt dachte ich es wäre so. /var/tmp und /tmp sind bei mir auf separaten SSDs gemountet.
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
firefly
Watchman
Watchman


Joined: 31 Oct 2002
Posts: 5312

PostPosted: Sun Oct 20, 2024 3:10 pm    Post subject: Reply with quote

Erdie wrote:
Angeblich sollen SSDs bei zu häufigem fstrim schneller verschleißen. Evtl. ist diese Info ja falsch. Bis jetzt dachte ich es wäre so. /var/tmp und /tmp sind bei mir auf separaten SSDs gemountet.

Nach meinem Kenntnisstand ist das nicht der fall. Nur kontinuierliches trimming (quasi bei jeder schreibaktion) wird nicht empfohlen.
z.b. aus der arch wiki seite:
https://wiki.archlinux.org/title/Solid_state_drive#TRIM

Bezüglich das Trim schlecht wäre hab ich nichts auf die schnelle gefunden. Aber ein paar Erklärung von SSD Herstellern selbst was Trim genau macht (heir crucial bzw. kingston):
https://www.crucial.com/articles/about-ssd/what-is-trim
https://www.kingston.com/en/blog/pc-performance/ssd-garbage-collection-trim-explained
_________________
Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn.
Back to top
View user's profile Send private message
sMueggli
Guru
Guru


Joined: 03 Sep 2022
Posts: 477

PostPosted: Mon Oct 21, 2024 8:43 am    Post subject: Reply with quote

Fstrim würde ich auch nicht in ein Skript packen. Bei Dir würde Fstrim nur ausgeführt, falls vorher kein Fehler auftritt.

Ohne Systemd wäre ein CronJob wohl das einfachste: https://wiki.gentoo.org/wiki/SSD#Periodic_fstrim_jobs

Man sollte durchgehende Grossschreibung nur für System- und Umgebungsvariablen nutzen. Wenn Du für deine Skripte keine Syntaxhervorhebung nutzt, bist Du selber schuld. Und falls Du Syntaxhervorhebung nutzt, dann brauchst du die "GROSSSCHREIBUNG" der lokalen Variablen nicht, da Variablen farblich hervorgehoben werden.

Funktioniert "update_counter()" so wie erwartet?

Du definierst MAX_COUNT als Variable, aber vielleicht solltest/möchtest Du eine Konstante setzen? Dadurch wäre die Variable vor Veränderungen geschützt, ergo nicht mehr variabel, sondern konstant. Eine Möglichkeit ist am Schluss von https://openbook.rheinwerk-verlag.de/shell_programmierung/shell_004_000.htm zu finden.

Je nach System hast Du schon eine passende XDG_* Variable gesetzt und könntest dir "CONFIG_DIR" einsparen.
Back to top
View user's profile Send private message
Josef.95
Advocate
Advocate


Joined: 03 Sep 2007
Posts: 4664
Location: Germany

PostPosted: Mon Oct 21, 2024 9:27 am    Post subject: Reply with quote

Vorschlag bezüglich
Code:
    emerge -avuDN --with-bdeps=y @world && \
    emerge @preserved-rebuild && \
    emerge -a --depclean && \
    revdep-rebuild -p && \
Nimm beim @world Update statt --newuse, -N besser --changed-use, -U
das spart viele unnötige rebuilds.
Und, --depclean sollte immer vorm @reserved-rebuild ausgeführt werden (nicht hinterher).
revdep-rebuild braucht man idR nicht mehr.
Back to top
View user's profile Send private message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Wed Oct 23, 2024 6:15 pm    Post subject: Reply with quote

alles klar, ich werde das ändern! Danke fürs Feedback.
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Wed Oct 23, 2024 6:26 pm    Post subject: Reply with quote

sMueggli wrote:


Funktioniert "update_counter()" so wie erwartet?



Ja, an sich schon, sollte es etwa nicht bzw. stimmt daran etwas nicht?
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Thu Oct 24, 2024 8:19 am    Post subject: Reply with quote

sMueggli wrote:
Fstrim würde ich auch nicht in ein Skript packen. Bei Dir würde Fstrim nur ausgeführt, falls vorher kein Fehler auftritt.


Das ist meine volle Absicht. fstrim ist ja, sagen wir mal, nice to have. Wenn man es nicht ausführt, machte es auch nichts. Ich habe es in den Skript gepackt, damit es gelegentlich ab und zu mal läuft weil ich es sonst vergesse. Eine Cronjob wäre eine Alternative. In diesem Fall wird es bei jedem 20zigsten wordupdate ausgeführt. Im Prinzip hängt ja die Notwendigkeit fstrim auszurführen von den Intensittät der Plattennutzung ab und da die Updates mit Abstand den größten IO machen, hängt hier nun die fstrim -Nutzung unmittelbar von der Frequenz der Updates ab, was ich nicht ganz falsch finde. Klar, man kann das auch anders machen, keine Frage.

Danke fürs Feedback.
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
sMueggli
Guru
Guru


Joined: 03 Sep 2022
Posts: 477

PostPosted: Thu Oct 24, 2024 8:21 am    Post subject: Reply with quote

Erdie wrote:
sMueggli wrote:


Funktioniert "update_counter()" so wie erwartet?



Ja, an sich schon, sollte es etwa nicht?


Ja, funktioniert. Ich war verwirrt wegen

Code:
echo "$COUNTER" > "$COUNTER_FILE"


und hatte das mit
Code:
echo "$COUNTER > $COUNTER_FILE"
verwechselt.
Back to top
View user's profile Send private message
krelh
n00b
n00b


Joined: 05 Jun 2024
Posts: 21

PostPosted: Fri Oct 25, 2024 8:05 am    Post subject: Reply with quote

Hat es einen Grund, dass Du den Sync mit emaint und nicht mit eix-Sync machst? Damit würdest Du Dir doch einen Schritt sparen oder? Sorry, ich bin noch recht frisch bei Gentoo… Es wundert mich allerdings, wie viele Sync Befehle es gibt:

emerge-websync
emerge —sync
eix-sync
emaint sync -a
Back to top
View user's profile Send private message
firefly
Watchman
Watchman


Joined: 31 Oct 2002
Posts: 5312

PostPosted: Fri Oct 25, 2024 9:53 am    Post subject: Reply with quote

krelh wrote:
Hat es einen Grund, dass Du den Sync mit emaint und nicht mit eix-Sync machst? Damit würdest Du Dir doch einen Schritt sparen oder? Sorry, ich bin noch recht frisch bei Gentoo… Es wundert mich allerdings, wie viele Sync Befehle es gibt:

emerge-websync
emerge —sync
eix-sync
emaint sync -a

emerge —sync und emaint sync sind das gleiche. AFAIK wird bei emerge --sync intern emaint sync aufgerufen.
eix-sync braucht man nicht wenn man die entsprechenden postsync skripte, welche eix mitliefert, konfiguriert (wie ich schon geschrieben habe)
_________________
Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn.
Back to top
View user's profile Send private message
Erdie
Advocate
Advocate


Joined: 20 May 2004
Posts: 2642
Location: Heidelberg - Germany

PostPosted: Fri Oct 25, 2024 5:04 pm    Post subject: Reply with quote

Anbei das Skript, welches die Nachticht auf den Telegram Bot sendet:

Code:

#!/bin/bash

# Check, if a parameter ist given
if [ -z "$1" ]; then
  echo "Please provide a message as parameter"
  exit 1
fi

# Bot-Token and Chat-ID
BOT_TOKEN="<MeinToken>"
CHAT_ID="<MeineBotId>"

# Message to be sent
MESSAGE="$1"

# API-URL
API_URL="https://api.telegram.org/bot$BOT_TOKEN/sendMessage"

# Sending the message
curl -s -X POST -H 'Content-Type: application/json' -d "{\"chat_id\": \"$CHAT_ID\", \"text\": \"$MESSAGE\", \"disable_notification\": false}" $API_URL

echo "Fertig!"



Das könnte ja auch von Interesse sein.
_________________
Desktop AMD Ryzen 9 5900X 32GB RAM, Asus GF GTX 1060.
Notebook Tuxedo Pulse 15 Gen1 AMD Ryzen 7 4800H mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum