Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users Deutsches Forum (German) Diskussionsforum
  • Search

Gentoo Update Skript

Unterhaltung über Gentoo und andere Themen: Alles was nicht in ein Support-Forum gehört.
Post Reply
  • Print view
Advanced search
13 posts • Page 1 of 1
Author
Message
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

Gentoo Update Skript

  • Quote

Post by Erdie » Sun Oct 20, 2024 10:07 am

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: Select all

#!/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: Select all

#!/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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
firefly
Watchman
Watchman
Posts: 5385
Joined: Thu Oct 31, 2002 8:24 pm

  • Quote

Post by firefly » Sun Oct 20, 2024 10:30 am

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.
Top
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

  • Quote

Post by Erdie » Sun Oct 20, 2024 11:02 am

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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
firefly
Watchman
Watchman
Posts: 5385
Joined: Thu Oct 31, 2002 8:24 pm

  • Quote

Post by firefly » Sun Oct 20, 2024 3:10 pm

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-per ... -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.
Top
sMueggli
l33t
l33t
Posts: 627
Joined: Sat Sep 03, 2022 9:22 am

  • Quote

Post by sMueggli » Mon Oct 21, 2024 8:43 am

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/sh ... 04_000.htm zu finden.

Je nach System hast Du schon eine passende XDG_* Variable gesetzt und könntest dir "CONFIG_DIR" einsparen.
Top
Josef.95
Advocate
Advocate
Posts: 4857
Joined: Mon Sep 03, 2007 9:46 am
Location: Germany

  • Quote

Post by Josef.95 » Mon Oct 21, 2024 9:27 am

Vorschlag bezüglich

Code: Select all

    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.
Top
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

  • Quote

Post by Erdie » Wed Oct 23, 2024 6:15 pm

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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

  • Quote

Post by Erdie » Wed Oct 23, 2024 6:26 pm

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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

  • Quote

Post by Erdie » Thu Oct 24, 2024 8:19 am

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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
sMueggli
l33t
l33t
Posts: 627
Joined: Sat Sep 03, 2022 9:22 am

  • Quote

Post by sMueggli » Thu Oct 24, 2024 8:21 am

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: Select all

echo "$COUNTER" > "$COUNTER_FILE"
und hatte das mit

Code: Select all

echo "$COUNTER > $COUNTER_FILE"
verwechselt.
Top
krelh
n00b
n00b
Posts: 32
Joined: Wed Jun 05, 2024 6:01 am

  • Quote

Post by krelh » Fri Oct 25, 2024 8:05 am

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
Top
firefly
Watchman
Watchman
Posts: 5385
Joined: Thu Oct 31, 2002 8:24 pm

  • Quote

Post by firefly » Fri Oct 25, 2024 9:53 am

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.
Top
Erdie
Advocate
Advocate
User avatar
Posts: 2706
Joined: Thu May 20, 2004 5:08 pm
Location: Heidelberg - Germany
Contact:
Contact Erdie
Website

  • Quote

Post by Erdie » Fri Oct 25, 2024 5:04 pm

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

Code: Select all

#!/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 64GB RAM mit Radeon Vega 7
Raspberry Pi 1 + 2 + 3B+ + Zero W
Top
Post Reply
  • Print view

13 posts • Page 1 of 1

Return to “Diskussionsforum”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic