diff --git a/CHANGELOG.md b/CHANGELOG.md index b7e5819..018d795 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.1.6 – 2026-10-25 + +A page for Host Settings, and the versions of today. + +- **New project page** in English and German for Host Settings, the Cockpit add-on that sends a + message through ntfy, e-mail or both when an Azentrius add-on on a server needs attention: what + it does, when a message comes, security, installation and questions, with screenshots from its + repository, which show only made-up example data. The page describes what 0.1.0 does; one + question says what comes with the release after it. The projects page, the start page and the + links between project pages include it; Status Board and Cron Jobs point to it. +- **Versions:** Host Settings 0.1.0, Image Update Monitor 0.26.0 and Stellwerk 0.7.0. + ## 0.1.5 – 2026-10-23 Pages for Update Gaps, Security Monitor, Status Board and Sharewerk, and the versions of today. diff --git a/package-lock.json b/package-lock.json index 47f876b..28fcffe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "azentrius-website", - "version": "0.1.5", + "version": "0.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "azentrius-website", - "version": "0.1.5", + "version": "0.1.6", "license": "Apache-2.0", "dependencies": { "@astrojs/sitemap": "3.7.4", diff --git a/package.json b/package.json index e2e0019..475d7c8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azentrius-website", - "version": "0.1.5", + "version": "0.1.6", "private": true, "description": "The website azentrius.com: project pages for the Azentrius tools, in English and German.", "license": "Apache-2.0", diff --git a/scripts/versions.mjs b/scripts/versions.mjs index 385fd9b..c143288 100644 --- a/scripts/versions.mjs +++ b/scripts/versions.mjs @@ -11,6 +11,7 @@ const REPOS = { "cockpit-update-gaps": "Azentrius/cockpit-update-gaps", "cockpit-security-monitor": "Azentrius/cockpit-security-monitor", "cockpit-status-board": "Azentrius/cockpit-status-board", + "cockpit-host-settings": "Azentrius/cockpit-host-settings", stellwerk: "Azentrius/stellwerk", lautwerk: "Azentrius/lautwerk", sharewerk: "Azentrius/sharewerk", diff --git a/src/assets/screenshots/cockpit-host-settings/addons.png b/src/assets/screenshots/cockpit-host-settings/addons.png new file mode 100644 index 0000000..74d76a6 Binary files /dev/null and b/src/assets/screenshots/cockpit-host-settings/addons.png differ diff --git a/src/assets/screenshots/cockpit-host-settings/check-dialog.png b/src/assets/screenshots/cockpit-host-settings/check-dialog.png new file mode 100644 index 0000000..ff2f116 Binary files /dev/null and b/src/assets/screenshots/cockpit-host-settings/check-dialog.png differ diff --git a/src/assets/screenshots/cockpit-host-settings/ntfy.png b/src/assets/screenshots/cockpit-host-settings/ntfy.png new file mode 100644 index 0000000..adfc5b3 Binary files /dev/null and b/src/assets/screenshots/cockpit-host-settings/ntfy.png differ diff --git a/src/assets/screenshots/cockpit-host-settings/overview-dark.png b/src/assets/screenshots/cockpit-host-settings/overview-dark.png new file mode 100644 index 0000000..1508756 Binary files /dev/null and b/src/assets/screenshots/cockpit-host-settings/overview-dark.png differ diff --git a/src/assets/screenshots/cockpit-host-settings/overview.png b/src/assets/screenshots/cockpit-host-settings/overview.png new file mode 100644 index 0000000..6907d07 Binary files /dev/null and b/src/assets/screenshots/cockpit-host-settings/overview.png differ diff --git a/src/components/ProjectsPage.astro b/src/components/ProjectsPage.astro index d2a4f30..4d9048b 100644 --- a/src/components/ProjectsPage.astro +++ b/src/components/ProjectsPage.astro @@ -38,6 +38,7 @@ const text = { "cockpit-update-gaps": "Package repository (Debian, Ubuntu), release", "cockpit-security-monitor": "Package repository (Debian, Ubuntu), release", "cockpit-status-board": "Package repository, release", + "cockpit-host-settings": "Package repository, release", stellwerk: "Release", lautwerk: "Build from source", sharewerk: "Docker Compose", @@ -64,6 +65,7 @@ const text = { "cockpit-update-gaps": "Paketquelle (Debian, Ubuntu), Release", "cockpit-security-monitor": "Paketquelle (Debian, Ubuntu), Release", "cockpit-status-board": "Paketquelle, Release", + "cockpit-host-settings": "Paketquelle, Release", stellwerk: "Release", lautwerk: "Aus dem Quellcode", sharewerk: "Docker Compose", diff --git a/src/content.config.ts b/src/content.config.ts index aa45da7..3157d86 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -25,6 +25,7 @@ const tools = defineCollection({ "cockpit-update-gaps", "cockpit-security-monitor", "cockpit-status-board", + "cockpit-host-settings", "stellwerk", "lautwerk", "sharewerk", diff --git a/src/content/tools/de/cockpit-host-settings.md b/src/content/tools/de/cockpit-host-settings.md new file mode 100644 index 0000000..4fb533b --- /dev/null +++ b/src/content/tools/de/cockpit-host-settings.md @@ -0,0 +1,117 @@ +--- +slug: cockpit-host-settings +lang: de +title: "Host Settings: Nachricht bei Warnung oder Gefahr (Cockpit)" +description: "Cockpit-Add-on je Server: eine Nachricht per ntfy, E-Mail oder beidem, wenn ein Azentrius-Add-on eine Warnung oder Gefahr findet und wenn sie behoben ist." +eyebrow: Cockpit-Add-on +h1: Eine Nachricht, wenn ein Add-on auf einem Server Aufmerksamkeit braucht +lead: "Was Cron Jobs, Image Update Monitor, Update Gaps, Security Monitor und andere Add-ons mit Status-Vertrag auf demselben Server melden, bewertet Host Settings wie das Status Board und schickt eine Nachricht per ntfy, E-Mail oder beidem, wenn ein Befund zur Warnung oder Gefahr wird und wenn er wieder in Ordnung ist." +summary: Eine Nachricht per ntfy, E-Mail oder beidem, wenn ein Befund eines Azentrius-Add-ons zur Warnung oder Gefahr wird und wenn er wieder in Ordnung ist. +platforms: ["Cockpit", "Debian & Ubuntu", "Fedora & RHEL"] +problemTitle: Eine Seite hilft nur, solange jemand hinsieht. +problem: + - "Jedes Add-on zeigt seine Befunde auf seiner eigenen Seite. Das Status Board bringt sie auf eine Seite, lädt aber nur, solange seine Seite offen ist, und benachrichtigt niemanden." + - "Eine Nachricht für jeden Zustand wäre nur Rauschen. Wichtig ist die Änderung: ein Befund, der zur Warnung oder Gefahr wird, und der Moment, in dem er wieder in Ordnung ist." + - "Ein ntfy-Topic, das ohne Anmeldung offen ist, lässt jeden, der seinen Namen kennt, mitlesen, was auf deinem Server nicht stimmt." +features: + - title: Änderungen, keine Zustände + text: "Eine Nachricht, wenn ein Befund zur Warnung oder Gefahr wird, wenn aus einer Gefahr eine Warnung wird und wenn er wieder in Ordnung ist oder nicht mehr gemeldet wird. Auch ein zweiter Befund in einem Add-on, das schon eine Warnung zeigt, wird gemeldet." + - title: Ruhe, wenn sich nichts ändert + text: "Dieselbe Änderung desselben Befunds kommt höchstens einmal pro Stunde, und mehrere Änderungen eines Laufs kommen als eine Nachricht. Der erste Lauf nach dem Einrichten schickt eine Zusammenfassung dessen, was die Add-ons dann melden." + - title: ntfy, E-Mail oder beides + text: "Jeder ntfy-Server, mit Token oder ohne: Eine Gefahr kommt mit hoher Priorität, eine Warnung mit der normalen, „wieder in Ordnung“ mit niedriger. E-Mails gehen an den eigenen Mailserver des Servers auf localhost:25." + - title: Verbindung prüfen + text: "Die Seite prüft den Weg zu ntfy: Der Server antwortet, die Verbindung ist verschlüsselt, das Token darf senden, und das Topic ist für jeden ohne Anmeldung gesperrt, zum Lesen und auf Wunsch auch zum Senden." + - title: Befehle für den ntfy-Server + text: "Der Benutzer, sein Schreibrecht auf das Topic und das Token, das dieser Server braucht, fertig zum Kopieren. Den ntfy-Server selbst richtet Host Settings nicht ein." + - title: Der eigene Zustand im Status Board + text: "Ob Nachrichten eingerichtet sind, ob die letzte hinausging, ob das Topic gesperrt ist und wann der Notifier zuletzt lief: Das Status Board zeigt es, das Menü von Cockpit als Symbol." +explainer: + title: Wann eine Nachricht kommt + intro: "Host Settings prüft selbst nichts: Es meldet nur, was die Add-ons auf seinem Server berichten, alle 5 Minuten. Als Problem zählen nur Warnungen und Gefahren." + head: ["Was passiert", "Nachricht"] + rows: + - ["Ein Befund wird zur Warnung oder Gefahr", "Ja; bei ntfy kommt eine Gefahr mit hoher Priorität"] + - ["Aus einer Gefahr wird eine Warnung", "Ja"] + - ["Ein Befund ist wieder in Ordnung oder wird nicht mehr gemeldet", "Ja, „wieder in Ordnung“, bei ntfy mit niedriger Priorität"] + - ["Ein Eintrag ist älter, als sein Add-on erlaubt", "Ja: Er zählt als Warnung"] + - ["Der Status eines Add-ons lässt sich nicht lesen", "Ja: Das Add-on selbst zählt als Warnung"] + - ["Dieselbe Änderung desselben Befunds innerhalb einer Stunde", "Nein, nicht vor Ablauf der Stunde"] + - ["Der erste Lauf nach dem Einrichten", "Eine Zusammenfassung dessen, was die Add-ons dann melden"] +security: + - "Der Notifier läuft nie als root: Er läuft als eigener Systembenutzer, von systemd gehärtet, und darf nur seinen Zustand schreiben." + - "Ein Status-Befehl läuft nur, wenn er unter /usr/lib/cockpit-NAME/ liegt und er und seine Ordner root gehören und niemand sonst sie ändern kann." + - "Das ntfy-Token geht von der Seite über die Standardeingabe an das Hilfsprogramm, liegt in einer Datei, die nur root lesen kann, und erreicht den Notifier als systemd-Credential. Den Server verlässt es nur als Header einer Anfrage an den eingerichteten ntfy-Server; Weiterleitungen werden nicht verfolgt. Die Seite zeigt es nie." + - "Eine Nachricht enthält nur, was die Add-ons melden, ihre Namen und den Namen des Servers. Was ein Add-on meldet, erreicht die Seite und die Nachrichten als Text, gekürzt und von Steuer- und Richtungszeichen bereinigt." + - "Die Seite ändert nur über ihre Dialoge etwas, mit Administratorrechten. Senden ohne Anmeldung wird nur versucht, wenn du auf „Verbindung prüfen“ klickst; nimmt das Topic es an, ist genau diese Nachricht die Warnung." + - "Die Seite lädt nichts aus dem Netz: Schriften und Symbole bringt sie selbst mit." +requirements: + - "Cockpit 264 oder neuer" + - "Python 3.8 oder neuer, systemd 247 oder neuer und ss (iproute2)" + - "Für E-Mail: ein Mailserver, der auf localhost:25 Mail annimmt, etwa postfix oder exim" + - "Für ntfy: ein ntfy-Server, den dieser Server erreicht" + - "Add-ons mit Status-Vertrag, etwa Cron Jobs, Image Update Monitor, Update Gaps und Security Monitor" +faq: + - q: Prüft es den Server selbst? + a: "Nein. Es meldet nur, was die Add-ons auf seinem eigenen Server berichten, bewertet wie im Status Board. Einstellungen der anderen Add-ons hält es nicht; jedes behält seine eigenen." + - q: Brauche ich es auf jedem Server? + a: "Auf jedem Server, der Nachrichten schicken soll: Es liest nur die Add-ons seines eigenen Servers." + - q: Richtet es den ntfy-Server ein? + a: "Nein. Die Seite zeigt die Befehle, die der ntfy-Server für Benutzer, Topic und Token dieses Servers braucht; du führst sie dort aus. Mit auth-default-access: deny-all auf diesem Server und einem Token für den Benutzer dieses Servers kann niemand sonst sein Topic lesen oder dorthin senden." + - q: Was, wenn der Server aus ist oder ntfy nicht erreicht? + a: "Solange der Server aus ist, kommt nichts, und solange er den ntfy-Server oder seinen Mailserver nicht erreicht, nichts auf diesem Weg. Eine Nachricht, die über keinen Kanal hinausging, wird beim nächsten Lauf erneut geschickt, und das Status Board auf dem Host, der die anderen erreicht, zeigt einen Server, der nicht antwortet, als nicht erreichbar. Ging eine Nachricht nicht hinaus, sagt das der eigene Eintrag von Host Settings im Status Board." + - q: Warum braucht E-Mail einen Mailserver auf localhost:25? + a: "Der Notifier übergibt seine Mail an den eigenen Mailserver des Servers, etwa postfix oder exim, der sie zustellt oder weiterleitet. Ein sendmail-Befehl allein (nullmailer, msmtp, dma) wird nicht genutzt: Die Sandbox des Notifiers ignoriert das setgid-Bit, das postdrop von postfix braucht." + - q: Wird jeder offene Port einzeln gemeldet? + a: "In 0.1.0 nicht: Es vergleicht jeden Eintrag eines Add-ons als Ganzes, ein weiterer zum Internet offener Port gibt also keine neue Nachricht, solange dieser Eintrag schon eine Gefahr ist. Ab dem Release nach 0.1.0 wird jeder Befund, den ein Add-on hinter einem Eintrag auflistet, etwa jeder aus dem Internet erreichbare Port, einzeln gemeldet, und erneut, wenn er wiederkommt." + - q: Was ist mit den Einstellungen von Cockpit selbst? + a: "Host Settings hat bisher einen Reiter, Benachrichtigungen. Ein zweiter für die Einstellungen von Cockpit in /etc/cockpit/cockpit.conf ist geplant." +compare: "Das Status Board zeigt den Zustand aller Hosts, solange seine Seite offen ist, und benachrichtigt niemanden. Host Settings läuft auf jedem Server, auch wenn niemand hinsieht, und meldet die Änderungen über ntfy oder E-Mail. Es prüft selbst nichts: Was es meldet, kommt von Cron Jobs, Image Update Monitor, Update Gaps, Security Monitor und den anderen Add-ons mit Status-Vertrag." +alt: + overview: "Host Settings in Cockpit: die regelmäßige Prüfung, der letzte Lauf und die letzte Nachricht, verschickt per E-Mail und ntfy, darunter ntfy mit der letzten Prüfung der Verbindung" + ntfy: "ntfy: Server, Topic und Token, die letzte Prüfung der Verbindung und die Befehle, die der ntfy-Server für diesen Server braucht" + check-dialog: "Verbindung prüfen: erreichbar, verschlüsselt, die Testnachricht angenommen, gesperrt für Lesen und Senden ohne Anmeldung, das Token darf nur schreiben" + addons: "Die Add-ons des Servers, wie der Notifier sie zuletzt gelesen hat: eine Gefahr bei Cron Jobs, eine Warnung bei Update Gaps, ein Status, der sich nicht lesen lässt" +primaryAction: + label: Host Settings installieren + href: "#install" +updated: 2026-10-25 +--- + +Installiere es auf jedem Server, der Nachrichten schicken soll. + +### Aus der Azentrius-Paketquelle + +Für Debian, Ubuntu, Fedora und RHEL. Richte die Paketquelle einmal ein: + +```sh +# Debian und Ubuntu +curl -fsSLO https://packages.azentrius.com/azentrius-repository.deb +sudo apt install ./azentrius-repository.deb +sudo apt update + +# Fedora und RHEL +sudo rpm --import https://packages.azentrius.com/azentrius.asc +sudo dnf install https://packages.azentrius.com/azentrius-repository.rpm +``` + +Installiere dann **Host Settings** in Cockpit unter **Anwendungen** oder auf der Konsole: + +```sh +sudo apt install cockpit-host-settings # Debian, Ubuntu +sudo dnf install cockpit-host-settings # Fedora, RHEL +``` + +Die Updates deines Systems halten es aktuell. Die regelmäßige Prüfung bleibt aus, bis sie eingerichtet ist: Öffne die Seite mit Administratorrechten, richte ntfy, E-Mail oder beides ein, dann die regelmäßige Prüfung. Ihr erster Lauf schickt die Zusammenfassung. + +### Aus den Dateien eines Releases + +Jedes [Release](https://github.com/Azentrius/cockpit-host-settings/releases) enthält `.deb`, `.rpm`, `SHA256SUMS` und einen signierten Build-Nachweis. Prüfe beides vor der Installation: + +```sh +sha256sum --ignore-missing -c SHA256SUMS +gh attestation verify cockpit-host-settings_X.Y.Z-1_all.deb --repo Azentrius/cockpit-host-settings +sudo apt install ./cockpit-host-settings_X.Y.Z-1_all.deb # oder: sudo dnf install ./cockpit-host-settings-X.Y.Z-1.noarch.rpm +``` + +ntfy Schritt für Schritt einrichten, Fehlersuche und Deinstallation: siehe [README](https://github.com/Azentrius/cockpit-host-settings#setting-up). diff --git a/src/content/tools/en/cockpit-host-settings.md b/src/content/tools/en/cockpit-host-settings.md new file mode 100644 index 0000000..a7d73f2 --- /dev/null +++ b/src/content/tools/en/cockpit-host-settings.md @@ -0,0 +1,117 @@ +--- +slug: cockpit-host-settings +lang: en +title: "Host Settings: a message when an add-on needs you (Cockpit)" +description: "Cockpit add-on for each server: a message through ntfy, e-mail or both when an Azentrius add-on finds a warning or a danger, and when it is OK again." +eyebrow: Cockpit add-on +h1: A message when an add-on on a server needs attention +lead: "Host Settings reads what Cron Jobs, Image Update Monitor, Update Gaps, Security Monitor and any other add-on with the status contract report on the same server, judged as Status Board judges them, and sends a message through ntfy, e-mail or both when a finding turns to a warning or a danger, and when it is OK again." +summary: A message through ntfy, e-mail or both when an Azentrius add-on on a server finds a warning or a danger, and when it is OK again. +platforms: ["Cockpit", "Debian & Ubuntu", "Fedora & RHEL"] +problemTitle: A page only helps while someone looks at it. +problem: + - "Every add-on shows its findings on its own page. Status Board puts them on one page, but it loads only while that page is open and notifies no one." + - "A message for every state would be noise. What matters is the change: a finding that turns to a warning or a danger, and the moment it is OK again." + - "An ntfy topic that is open without a login lets anyone who knows its name read what is wrong with your server." +features: + - title: Changes, not states + text: "A message when a finding turns to a warning or a danger, when a danger becomes a warning, and when it is OK again or no longer reported. A second finding in an add-on that is already a warning is told as well." + - title: Quiet when nothing changes + text: "The same change of the same finding comes at most once an hour, and several changes of one run come as one message. The first run after setting up sends a summary of what the add-ons report then." + - title: ntfy, e-mail or both + text: "Any ntfy server, with a token or without: a danger comes with a high priority, a warning with the default one, OK again with a low one. E-mail goes to the server's own mail server on localhost:25." + - title: Check connection + text: "The page checks the way to ntfy: the server answers, the connection is encrypted, the token may publish, and the topic is closed to anyone without a login, for reading and, on request, for sending." + - title: Commands for the ntfy server + text: "The user, its write access to the topic and the token this server needs, ready to copy. Host Settings does not set up the ntfy server itself." + - title: Its own state on Status Board + text: "Whether messages are set up, whether the last one went out, whether the topic is closed and when the notifier last ran: Status Board shows it, Cockpit's menu shows it as an icon." +explainer: + title: When a message comes + intro: "Host Settings makes no checks of its own: it tells only what the add-ons on its server report, every 5 minutes. Only warnings and dangers count as problems." + head: ["What happens", "Message"] + rows: + - ["A finding turns to a warning or a danger", "Yes; on ntfy a danger comes with a high priority"] + - ["A danger becomes a warning", "Yes"] + - ["A finding is OK again or no longer reported", "Yes, “OK again”, on ntfy with a low priority"] + - ["An entry is older than its add-on allows", "Yes: it counts as a warning"] + - ["An add-on's status cannot be read", "Yes: the add-on itself counts as a warning"] + - ["The same change of the same finding within an hour", "No, not before the hour is over"] + - ["The first run after setting up", "A summary of what the add-ons report then"] +security: + - "The notifier never runs as root: it runs as a system user of its own, hardened by systemd, and may write only its state." + - "A status command runs only when it lies below /usr/lib/cockpit-NAME/ and it and its folders belong to root and nobody else can change them." + - "The ntfy token goes from the page to the helper on standard input, lies in a file only root can read and reaches the notifier as a systemd credential. It leaves the server only as the header of a request to the ntfy server set up; redirects are not followed. The page never shows it." + - "A message holds only what the add-ons report, their names and the server's name. What an add-on reports reaches the page and the messages as text, cut and cleaned of control and bidirectional characters." + - "The page changes something only through its dialogs, with administrative access. Sending without a login is tried only when you press Check connection; should the topic accept it, that message itself is the warning." + - "The page loads nothing from the network: it brings its own fonts and icons." +requirements: + - "Cockpit 264 or newer" + - "Python 3.8 or newer, systemd 247 or newer and ss (iproute2)" + - "For e-mail: a mail server that accepts mail on localhost:25, such as postfix or exim" + - "For ntfy: an ntfy server this server can reach" + - "Add-ons with the status contract, such as Cron Jobs, Image Update Monitor, Update Gaps and Security Monitor" +faq: + - q: Does it check the server itself? + a: "No. It tells only what the add-ons on its own server report, judged as Status Board judges them. It holds no settings of the other add-ons; each keeps its own." + - q: Do I need it on every server? + a: "On every server that should send messages: it reads only the add-ons of its own server." + - q: Does it set up the ntfy server? + a: "No. The page shows the commands the ntfy server needs for this server's user, topic and token; you run them there. With auth-default-access: deny-all on that server and a token for this server's user, nobody else can read or send to its topic." + - q: What if the server is off or cannot reach ntfy? + a: "While the server is off, nothing comes, and while it cannot reach the ntfy server or its mail server, nothing comes that way. A message that could not go out on any channel is sent again on the next run, and Status Board on the host that reaches the others shows a server that does not answer as unreachable. When a message did not go out, Host Settings' own entry on Status Board says so." + - q: Why does e-mail need a mail server on localhost:25? + a: "The notifier hands its mail to the server's own mail server, such as postfix or exim, which delivers or relays it. A sendmail command alone (nullmailer, msmtp, dma) is not used: the notifier's sandbox ignores the setgid bit postfix' postdrop needs." + - q: Is every open port told on its own? + a: "Not in 0.1.0: it compares each entry of an add-on as a whole, so a further port open to the internet while that entry is a danger already gives no new message. From the release after 0.1.0, each finding an add-on lists behind an entry, such as each port reachable from the internet, is told on its own, and again if it comes back." + - q: What about Cockpit's own settings? + a: "Host Settings has one tab so far, Notifications. A second one for Cockpit's own settings in /etc/cockpit/cockpit.conf is planned." +compare: "Status Board shows the state of every host while its page is open and notifies no one. Host Settings runs on each server, also when nobody looks, and tells the changes through ntfy or e-mail. It makes no checks of its own: what it tells comes from Cron Jobs, Image Update Monitor, Update Gaps, Security Monitor and the other add-ons with the status contract." +alt: + overview: "Host Settings in Cockpit: the regular check, the last run and the last message, sent through e-mail and ntfy, below it ntfy with the last check of the connection" + ntfy: "ntfy: server, topic and token, the last check of the connection, and the commands the ntfy server needs for this server" + check-dialog: "Check connection: reachable, encrypted, the test message accepted, closed to reading and sending without a login, the token may only write" + addons: "The add-ons of the server as the notifier last read them: a danger in Cron Jobs, a warning in Update Gaps, a status that cannot be read" +primaryAction: + label: Install Host Settings + href: "#install" +updated: 2026-10-25 +--- + +Install it on every server that should send messages. + +### From the Azentrius package repository + +For Debian, Ubuntu, Fedora and RHEL. Set up the repository once: + +```sh +# Debian and Ubuntu +curl -fsSLO https://packages.azentrius.com/azentrius-repository.deb +sudo apt install ./azentrius-repository.deb +sudo apt update + +# Fedora and RHEL +sudo rpm --import https://packages.azentrius.com/azentrius.asc +sudo dnf install https://packages.azentrius.com/azentrius-repository.rpm +``` + +Then install **Host Settings** in Cockpit under **Applications**, or on the console: + +```sh +sudo apt install cockpit-host-settings # Debian, Ubuntu +sudo dnf install cockpit-host-settings # Fedora, RHEL +``` + +The system's updates keep it current. The regular check stays off until it is set up: open the page with administrative access, set up ntfy, e-mail or both, then the regular check. Its first run sends the summary. + +### From the files of a release + +Every [release](https://github.com/Azentrius/cockpit-host-settings/releases) has the `.deb`, the `.rpm`, `SHA256SUMS` and a signed build provenance. Check both before you install: + +```sh +sha256sum --ignore-missing -c SHA256SUMS +gh attestation verify cockpit-host-settings_X.Y.Z-1_all.deb --repo Azentrius/cockpit-host-settings +sudo apt install ./cockpit-host-settings_X.Y.Z-1_all.deb # or: sudo dnf install ./cockpit-host-settings-X.Y.Z-1.noarch.rpm +``` + +Setting up ntfy step by step, troubleshooting and uninstalling: see the [README](https://github.com/Azentrius/cockpit-host-settings#setting-up). diff --git a/src/data/related.ts b/src/data/related.ts index d997360..b49238c 100644 --- a/src/data/related.ts +++ b/src/data/related.ts @@ -3,11 +3,12 @@ import type { CollectionEntry } from "astro:content"; const PAIRS: Record = { - "cockpit-cronjobs": ["cockpit-image-update-monitor", "cockpit-status-board"], + "cockpit-cronjobs": ["cockpit-image-update-monitor", "cockpit-status-board", "cockpit-host-settings"], "cockpit-image-update-monitor": ["cockpit-update-gaps", "cockpit-cronjobs"], "cockpit-update-gaps": ["cockpit-security-monitor", "cockpit-image-update-monitor", "cockpit-status-board"], "cockpit-security-monitor": ["cockpit-update-gaps", "cockpit-image-update-monitor", "cockpit-status-board"], - "cockpit-status-board": ["cockpit-update-gaps", "cockpit-security-monitor", "cockpit-cronjobs"], + "cockpit-status-board": ["cockpit-host-settings", "cockpit-update-gaps", "cockpit-security-monitor"], + "cockpit-host-settings": ["cockpit-status-board", "cockpit-security-monitor", "cockpit-update-gaps"], stellwerk: ["lautwerk", "cockpit-cronjobs"], lautwerk: ["stellwerk", "sharewerk"], sharewerk: ["lautwerk", "stellwerk"], diff --git a/src/data/routes.mjs b/src/data/routes.mjs index 490a7c4..2b44f07 100644 --- a/src/data/routes.mjs +++ b/src/data/routes.mjs @@ -10,6 +10,7 @@ export const TOOL_SLUGS = [ "cockpit-update-gaps", "cockpit-security-monitor", "cockpit-status-board", + "cockpit-host-settings", "stellwerk", "lautwerk", "sharewerk", diff --git a/src/data/tools.ts b/src/data/tools.ts index c59de8b..46ce523 100644 --- a/src/data/tools.ts +++ b/src/data/tools.ts @@ -24,6 +24,11 @@ import secExposureDark from "../assets/screenshots/cockpit-security-monitor/expo import secSsh from "../assets/screenshots/cockpit-security-monitor/ssh.png"; import secContainers from "../assets/screenshots/cockpit-security-monitor/containers.png"; import secMarkDialog from "../assets/screenshots/cockpit-security-monitor/mark-dialog.png"; +import hostOverview from "../assets/screenshots/cockpit-host-settings/overview.png"; +import hostOverviewDark from "../assets/screenshots/cockpit-host-settings/overview-dark.png"; +import hostNtfy from "../assets/screenshots/cockpit-host-settings/ntfy.png"; +import hostCheck from "../assets/screenshots/cockpit-host-settings/check-dialog.png"; +import hostAddons from "../assets/screenshots/cockpit-host-settings/addons.png"; import stellwerkDisplay from "../assets/screenshots/stellwerk/display.png"; import themeLight from "../assets/screenshots/home-assistant-theme/light.png"; import themeDark from "../assets/screenshots/home-assistant-theme/dark.png"; @@ -38,6 +43,7 @@ export type ToolSlug = | "cockpit-update-gaps" | "cockpit-security-monitor" | "cockpit-status-board" + | "cockpit-host-settings" | "stellwerk" | "lautwerk" | "sharewerk" @@ -155,6 +161,23 @@ export const TOOLS: Tool[] = [ gallery: [], docs: { changelog: true, roadmap: false, security: true }, }, + { + slug: "cockpit-host-settings", + repo: "Azentrius/cockpit-host-settings", + name: { base: "Host Settings", dot: true }, + plainName: "Host Settings", + category: "cockpit", + status: "stable", + license: "Apache-2.0", + package: "cockpit-host-settings", + hero: { key: "overview", image: hostOverview, dark: hostOverviewDark }, + gallery: [ + { key: "ntfy", image: hostNtfy }, + { key: "check-dialog", image: hostCheck }, + { key: "addons", image: hostAddons }, + ], + docs: { changelog: true, roadmap: false, security: true }, + }, { slug: "stellwerk", repo: "Azentrius/stellwerk", diff --git a/src/data/versions.json b/src/data/versions.json index d7839b3..0accdbf 100644 --- a/src/data/versions.json +++ b/src/data/versions.json @@ -4,8 +4,8 @@ "date": "2026-10-23" }, "cockpit-image-update-monitor": { - "version": "0.25.1", - "date": "2026-10-23" + "version": "0.26.0", + "date": "2026-10-25" }, "cockpit-update-gaps": { "version": "0.7.1", @@ -19,10 +19,14 @@ "version": "0.2.3", "date": "2026-10-22" }, - "stellwerk": { - "version": "0.6.4", + "cockpit-host-settings": { + "version": "0.1.0", "date": "2026-10-23" }, + "stellwerk": { + "version": "0.7.0", + "date": "2026-10-25" + }, "lautwerk": null, "sharewerk": { "version": "0.1.1",