Merge remote-tracking branch 'origin/develop' into HEAD

# Conflicts:
#	web/messages/es/docs/backup-restore/cross-kernel.json
#	web/messages/es/docs/backup-restore/destinations/pbs.json
This commit is contained in:
MacRimi
2026-10-18 13:49:35 +02:00
315 changed files with 37740 additions and 1079 deletions
@@ -0,0 +1,13 @@
{
"meta": {
"title": "Uppförandekod | ProxMenux-dokumentation",
"description": "ProxMenux uppförandekod och rekommenderade arbetssätt för bidragsgivare, testare och användare.",
"ogTitle": "Uppförandekod | ProxMenux-dokumentation",
"ogDescription": "Förväntningar på ansvar för koden, rapportering av säkerhetsbrister och omfattningen av PR:ar i ProxMenux-projektet."
},
"errors": {
"notFound": "Fel: CODE_OF_CONDUCT.md-filen hittades inte.",
"loadFailed": "Fel: Det går inte att läsa in uppförandekodens innehåll."
},
"contentMarkdown": "# 📝 Uppförandekod och rekommendationer\n\nDetta dokument fastställer **principer och riktlinjer** för användningen av **ProxMenux**, för att främja **respekt, samarbete och säkerhet** i utvecklingen.\n\n## 📌 1. Källangivelser och erkännande\n\n- Om **skript, kodavsnitt eller idéer** från andra kodarkiv eller utvecklare används ska den ursprungliga upphovspersonen alltid anges.\n- En kommentar i koden eller dokumentationen ska ange källan och om möjligt länka till det ursprungliga kodarkivet.\n- Vid användning av kod med en viss **licens** måste dess villkor följas.\n\n### ✅ Exempel på korrekt källangivelse i koden:\n\n```bash\n# Skript baserat på arbetet av [Upphovsperson] i [Länk till kodarkiv]\n```\n\n## 🔒 2. Säkerhet och ansvar för koden\n\n- All kod i detta arkiv följer rekommenderade arbetssätt för säker utveckling.\n- Bidrag som avsiktligt inför sårbarheter eller osäkra arbetssätt tillåts inte.\n- Skript får aldrig äventyra systemsäkerheten eller användarnas data.\n- Bidrag bör granskas med avseende på säkerhet och stabilitet före införandet.\n\n### ⚠️ Ansvarsfull rapportering av sårbarheter\n\nOm du upptäcker en säkerhetssårbarhet ska du INTE rapportera den i offentliga ärenden eller forum.\n\nRapportera den i stället privat via e-post:\n\n📧 proxmenux@macrimi.pro\n\nLäs vår [säkerhetspolicy](./SECURITY.md) för mer information om sårbarheter och hur de rapporteras.\n\n## 🤝 3. Gemenskapens riktlinjer\n\nAlla användare måste följa dessa riktlinjer för att upprätthålla en respektfull och professionell miljö:\n\n- ✅ Var respektfull och konstruktiv i diskussioner.\n- ❌ Trakasserier, hatretorik och stötande beteende tolereras inte.\n- ✅ Ge återkoppling professionellt och undvik personangrepp.\n- ❌ Överträdelser kan leda till varningar eller avstängningar beroende på allvarlighetsgrad.\n\n##\n\nDetta dokument främjar etisk kodanvändning, säkerhetsmedvetenhet och en respektfull gemenskap.\n\n📢 Låt oss bygga något fantastiskt tillsammans!\n"
}
@@ -0,0 +1,293 @@
{
"meta": {
"title": "Bidra till ProxMenux | ProxMenux Dokumentation",
"description": "Så bidrar du till ProxMenux: grenmodell (main / develop / feature/*), pull request-flöde, skripthuvud med författare och valfri stödlänk, gränssnitt i två faser, meddelandefunktioner och vägen till en stabil utgåva.",
"ogTitle": "Bidra till ProxMenux",
"ogDescription": "Grenmodell, arbetsflöde, författarangivelse i skripthuvudet och regler för gränssnitt i två faser som bidragsgivare ska följa."
},
"header": {
"title": "Bidra till ProxMenux",
"description": "ProxMenux välkomnar bidrag från gemenskapen: nya skript, rättningar, förbättrade dialogrutor, översättningar och integrationer. Sidan beskriver arkivets struktur, grenmodellen, pull request-flödet, skripthuvudet med författare och valfri stödlänk samt de designregler varje bidrag ska följa.",
"section": "Om"
},
"twoPagesCallout": {
"title": "Två relaterade sidor, ett projekt",
"body": "Förväxla inte sidan med <contributorsLink>Bidragsgivare</contributorsLink>, som uppmärksammar dem som redan bidrar: testare, granskare och utvecklare. Den här sidan är för <em>dig</em> som vill börja bidra och förklarar hur du förbereder en pull request för sammanslagning."
},
"branching": {
"heading": "Grenmodell",
"intro": "ProxMenux använder en grenmodell med tre nivåer:",
"headerBranch": "Gren",
"headerPurpose": "syfte",
"rows": [
{
"branch": "main",
"purposeRich": "Stabil kod som är klar för produktion. Bara ändringar som är klara för utgivning slås samman här. Det är den version slutanvändare får vid en vanlig installation av ProxMenux."
},
{
"branch": "develop",
"purposeRich": "Aktiv utvecklingsgren. Allt nytt arbete tas först in här; det är betakanalen. När en stabil utgåva är klar förs den härifrån till <code>main</code>."
},
{
"branch": "feature/*",
"purposeRich": "Kortlivade grenar per funktion, fix eller förbättring. Skapad från <code>develop</code>, fusioneras tillbaka till <code>develop</code> via en Pull begäran efter granskning."
}
],
"calloutTitle": "Vad detta innebär för användare",
"calloutBody": "Slutanvändare som spårar <code>main</code> får testade releaser. Användare som vill ha de senaste funktionerna tidigt - och inte har något emot enstaka grova kanter - kan följa <code>develop</code>. Nya funktioner passerar alltid genom <code>develop</code> först; ingenting når <code>main</code> utan att gå igenom den cykeln."
},
"workflow": {
"heading": "Arbetsflöde för pull requests",
"intro": "Från idé till fusion i fem steg:",
"step1Lead": "<strong>Skapa en funktionsgren från <code>develop</code></strong>:",
"step1Code": "git clone https://github.com/MacRimi/ProxMenux.git\ncd ProxMenux\ngit checkout develop\ngit pull origin develop\ngit checkout -b feature/your-feature-name",
"step1Trail": "Använd ett beskrivande grennamn: <code>feature/zfs-arc-tuning</code>, <code>feature/fix-iommu-detection</code>, <code>feature/add-tailscale-script</code>.",
"step2Lead": "<strong>Arbeta med ändringarna och skicka upp grenen:</strong>",
"step2Code": "# Make your changes, then:\ngit add scripts/...\ngit commit -m \"Add ZFS ARC tuning script\"\ngit push -u origin feature/your-feature-name",
"step3": "<strong>Öppna en pull request mot <code>develop</code></strong>, inte mot <code>main</code>. Kontrollera på GitHub att basgrenen är <code>develop</code>. Beskriv vad skriptet gör och ändrar och vilka Proxmox VE-versioner det testats på.",
"step4": "<strong>Efter granskning slås ändringarna samman i <code>develop</code>.</strong> En underhållare granskar kodkvalitet, skripthuvud och gränssnittets två faser. Om ändringar begärs skickar du fler incheckningar till samma gren; PR:n uppdateras automatiskt.",
"step5": "<strong>Stabila utgåvor förs från <code>develop</code> till <code>main</code>.</strong> Vid utgivning flyttas <code>main</code> fram till <code>develop</code> med fast-forward och taggas. Ditt bidrag ingår i nästa stabila version."
},
"scriptHeader": {
"heading": "Skripthuvud: metadata och beskrivning",
"intro": "Varje ProxMenux-skript börjar med två intilliggande kommentarsblock som bildar skripthuvudet. <strong>Båda krävs</strong>: de anger författare och syfte utan att läsaren behöver gå igenom själva koden.",
"bullets": [
"<strong>Övre blocket: metadata.</strong> Författare, valfria GitHub-/stödlänkar, underhållare, upphovsrätt, licens, version och uppdateringsdatum. Här ges också <em>erkännande åt bidragsgivare</em>: för ett nytt skript anger du ditt namn och valfritt GitHub-sida och stödprofil, till exempel Ko-fi, GitHub Sponsors eller Buy Me a Coffee.",
"<strong>Nedre blocket: beskrivning.</strong> Ett kort stycke på enkel engelska förklarar skriptet. Det läses <em>före</em> koden och ska på egen hand klargöra syfte, huvudåtgärder, berörda resurser och förutsättningar."
],
"licenseCalloutTitle": "Licenslinjen är fast - GPL-3.0",
"licenseCalloutBody": "ProxMenux ges ut under <strong>GNU General Public License v3.0</strong>. Alla skript har samma licens. Raden <code>License</code> i skripthuvudet ska alltid ha GPL-3.0-hänvisningen i exemplet nedan; den väljs inte per skript. Genom att bidra godkänner du GPL-3.0: alla får läsa, ändra och sprida skriptet och ändringarna med samma licens. Fullständig text: <licenseLink>MacRimi/ProxMenux/LICENSE</licenseLink>.",
"templateCode": "#!/bin/bash\n\n# ==========================================================\n# ProxMenux - A menu-driven script for Proxmox VE management\n# ==========================================================\n# Author : Your Name\n# GitHub : github.com/yourhandle\n# Sponsor : ko-fi.com/yourhandle\n# Maintainer : MacRimi\n# Copyright : (c) 2026 MacRimi & contributors\n# License : (GPL-3.0) (https://github.com/MacRimi/ProxMenux/blob/main/LICENSE)\n# Version : 1.0\n# Last Updated: DD/MM/YYYY\n# ==========================================================\n# Description:\n# Short paragraph explaining what the script does.\n# Mention the main actions (e.g. \"creates a ZFS pool\",\n# \"configures IOMMU and reboots\", \"imports an ISO into a VM\"),\n# the resources it touches, and any prerequisites the user\n# should be aware of before running it.\n# ==========================================================",
"optionalNote": "Raderna <code>GitHub</code> och <code>Sponsor</code> är valfria. Utelämna dem om du inte vill publicera dem. Allt annat krävs.",
"whyCalloutTitle": "Varför detta är viktigt",
"whyCalloutBody": "Bidrag till öppen källkod är frivilligt arbete. Namn och eventuell stödlänk direkt i källkoden ger författaren synligt erkännande vid varje läsning, i stället för att döljas bakom projektet. Beskrivningen har ett annat syfte: den är det första en framtida underhållare eller nyfiken användare läser. En tydlig beskrivning avgör ofta om skriptet inger förtroende eller undviks."
},
"structure": {
"heading": "Projektstruktur",
"intro": "Var olika typer av skript finns i arkivet:",
"treeCode": "scripts/\n├── menus/ # Top-level menu scripts (entry points)\n├── storage/ # Disk, storage and passthrough scripts\n├── share/ # NFS, Samba, local share scripts\n├── vm/ # VM creation and configuration scripts\n├── gpu_tpu/ # GPU / TPU passthrough scripts\n├── post_install/ # Post-install automation scripts\n├── backup_restore/ # Backup and restore scripts\n├── utilities/ # System utility scripts\n├── global/ # Shared helper libraries (sourced by other scripts)\n├── utils.sh # Shared utility functions and message helpers\n└── help_info_menu.sh # Interactive help and command reference",
"outro": "Varje skript läser in <code>utils.sh</code> vid start med source för att få meddelandefunktioner, väntindikator, färgvariabler och översättningssystem. Gemensamma hjälpbibliotek i <code>scripts/global/</code> läses uttryckligen in av de skript som behöver dem."
},
"twoPhase": {
"heading": "Regler för gränssnitt i två faser",
"intro": "Detta är den viktigaste regeln i ProxMenux och den som oftast leder till ändringskrav i PR:er. Varje skript delas in i <strong>exakt två faser</strong>:",
"headerPhase": "Fas",
"headerPurpose": "syfte",
"headerScreen": "Skärmtillstånd",
"rows": [
{
"phaseRich": "<strong>Fas 1 — Urval</strong>",
"purposeRich": "Samla varje användarbeslut. Kör något förberedande arbete som behövs (sonder, skanningar, kontroller).",
"screenRich": "<code>dialog</code>-överlägg. Om en kontroll mellan två menyer tar mer än någon sekund, visa en <code>msg_info</code>-väntindikator så att användaren ser att skriptet inte hängt sig. Anropa sedan <code>stop_spinner</code> direkt före nästa dialogruta."
},
{
"phaseRich": "<strong>Fas 2 - Utförande</strong>",
"purposeRich": "Utför varje operation. Visa hela framstegshistorien som ackumuleras på skärmen.",
"screenRich": "Synliga <code>msg_info</code>/<code>msg_ok</code>-meddelanden; aldrig <code>dialog</code>."
}
],
"principle": "Principen är <strong>samla alla val först och kör sedan allt</strong>. Användaren ser först ordnade dialogmenyer (fas 1), sedan en loggliknande körningsvy (fas 2). Faserna blandas inte: inga dialogrutor mitt i körningen och inga förloppsmeddelanden under valet.",
"phase1Heading": "Fas 1 - typiskt mönster",
"phase1Code": "# Silent preparatory work between dialogs\nmsg_info \"$(translate \"Checking disk assignments...\")\"\nASSIGNED_TO=$(check_assignments \"$DISK\")\nstop_spinner # ← clears line silently, result saved in variable\n\n# Next dialog can now use ASSIGNED_TO\nif [ -n \"$ASSIGNED_TO\" ]; then\n dialog --yesno \"$(translate \"Disk already assigned. Continue?\")\" $UI_YESNO_H $UI_YESNO_W\nfi\n\n# Collect multiple decisions per item with parallel arrays\ndeclare -a DISK_LIST=()\ndeclare -a DISK_FORMAT_TYPES=()\ndeclare -a DISK_MOUNT_POINTS=()\nfor DISK in $SELECTED; do\n msg_info \"$(translate \"Analyzing disk...\")\"\n CURRENT_FS=$(lsblk -no FSTYPE \"$DISK\" | xargs)\n stop_spinner\n\n FORMAT=$(dialog --backtitle \"$BACKTITLE\" \\\n --title \"$(translate \"Select Filesystem\")\" \\\n --menu \"...\" $UI_SHORT_MENU_H $UI_SHORT_MENU_W $UI_SHORT_MENU_LIST_H \\\n \"ext4\" \"...\" \"xfs\" \"...\" \"btrfs\" \"...\" \\\n 2>&1 >/dev/tty)\n [ -z \"$FORMAT\" ] && continue\n\n DISK_LIST+=(\"$DISK\")\n DISK_FORMAT_TYPES+=(\"$FORMAT\")\ndone",
"phase1RulesIntro": "<strong>Regler för fas 1:</strong>",
"phase1Rules": [
"Om en <code>msg_info</code>-väntindikator körs och du ska öppna en <code>dialog</code>- eller <code>whiptail</code>-meny, anropa först <code>stop_spinner</code>. Indikatorn kan inte samexistera med verktygens överlägg. Om ingen indikator är aktiv behövs inget anrop.",
"Använd <code>show_proxmenux_logo</code> + <code>msg_title</code> + <code>msg_info</code> för att ge visuellt sammanhang åt längre åtgärder i fas 1, exempelvis en kontroll som tar minst fem sekunder. Funktionen rensar redan skärmen; anropa inte <code>clear</code> före den.",
"Anropa inte <code>show_proxmenux_logo</code> mellan dialogmenyer när det saknas något att visa. Att rensa skärmen för en tom terminal ger bara visuellt brus.",
"Lagra alla val och kontrollresultat i variabler eller parallella arrayer. Sammanfattningen visas i början av fas 2, inte i fas 1."
],
"phase2Heading": "Fas 2 - typiskt mönster",
"phase2Code": "# ── PHASE 2 — EXECUTION ─────────────────────────────\nshow_proxmenux_logo\nmsg_title \"$(translate \"My Script Title\")\"\n\n# Recap Phase 1 preparatory results — show what was already done\nmsg_ok \"$(translate \"CT $CTID selected.\")\"\nmsg_ok \"$(translate \"Repositories verified.\")\"\nmsg_ok \"$(translate \"Disks to process: ${#DISK_LIST[@]}\")\"\n\n# Now execute operations\nfor i in \"${!DISK_LIST[@]}\"; do\n DISK=\"${DISK_LIST[$i]}\"\n FORMAT=\"${DISK_FORMAT_TYPES[$i]}\"\n\n msg_info \"$(translate \"Formatting\") $DISK $(translate \"as\") $FORMAT...\"\n mkfs.\"$FORMAT\" \"$DISK\" >/dev/null 2>&1\n msg_ok \"$(translate \"Formatted.\")\"\ndone\n\nmsg_ok \"$(translate \"Completed. ${#DISK_LIST[@]} disk(s) processed.\")\"\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r",
"phase2Rules": "<strong>Regler för fas 2:</strong> börja med <code>show_proxmenux_logo + msg_title</code> och sammanfatta genast fas 1 som <code>msg_ok</code>-rader. Anropa aldrig <code>show_proxmenux_logo</code> igen, eftersom det raderar förloppshistoriken. Använd inte <code>dialog</code>; om ett val under körningen är oundvikligt, använd <code>whiptail</code> enligt nästa avsnitt."
},
"dialogVsWhiptail": {
"headingRich": "När du ska använda <code>dialog</code> vs <code>whiptail</code>",
"intro": "Båda verktygen ritar textbaserade gränssnitt men beter sig olika på skärmen. ProxMenux använder dem därför i två skilda faser.",
"headerTool": "Verktyg",
"headerWhen": "När du ska använda den",
"headerEffect": "Effekt på skärmen",
"rows": [
{
"toolRich": "<strong><code>dialog</code></strong>",
"whenRich": "<strong>Alltid i fas 1.</strong> Alla interaktiva val, som VM, disk, filsystem eller bekräftelse av en åtgärd, använder <code>dialog</code>. Det är ProxMenux standardverktyg för gränssnitt.",
"effectRich": "Tar över terminalen, rensar skärmen, ritar sitt överlägg och återställer föregående tillstånd när den stängs. Det fungerar i fas 1 eftersom inga användbara resultat visas ännu."
},
{
"toolRich": "<strong><code>whiptail</code></strong>",
"whenRich": "<strong>Bara i fas 2, när det är oundvikligt.</strong> Ett typiskt fall är en omstartsfråga när körningen är klar. Använd inte <code>whiptail</code> för att fråga ”fortsätt?” mitt i körningen; det beslutet skulle ha fattats i fas 1.",
"effectRich": "Ett lättare överlägg som <em>inte</em> rensar terminalens innehåll. Historiken från <code>msg_ok</code>/<code>msg_info</code> i fas 2 syns bakom dialogrutan. Därför passar det när förlopp redan visas på skärmen."
}
],
"calloutTitle": "Varför uppdelningen är viktig",
"calloutBody": "Om du anropar <code>dialog</code> mitt i fas 2 försvinner alla <code>msg_ok</code>-rader användaren har följt. Det synliga händelseförloppet raderas. <code>whiptail</code> undviker det. Regeln bevarar alltså användarens bild av vad skriptet hittills har gjort.",
"rebootHeading": "Omstartsfråga: det typiska whiptail-fallet i fas 2",
"rebootIntro": "Om ett skript kan kräva omstart efter exempelvis aktivering av IOMMU eller ändrade kärnparametrar använder slutfrågan i fas 2 <code>whiptail</code>. Ha alltid en Nej-gren som säger att den berörda resursen inte ska användas före omstart:",
"rebootCode": "if [[ \"$HOST_REBOOT_REQUIRED\" == \"yes\" ]]; then\n echo \"\"\n if whiptail --title \"$(translate \"Reboot Required\")\" --yesno \\\n \"\\n$(translate \"A host reboot is required before starting the VM. Reboot now?\")\" \\\n 13 78; then\n msg_warn \"$(translate \"Rebooting the system...\")\"\n reboot\n else\n echo \"\"\n msg_info2 \"$(translate \"Do not start the VM until the system has been rebooted.\")\"\n fi\nfi\n\nmsg_success \"$(translate \"Press Enter to return to menu...\")\"\nread -r"
},
"messageFunctions": {
"heading": "Referens för meddelandefunktioner",
"intro": "Alla finns i <code>utils.sh</code>. Använd dem som standard för synlig utdata så att skripten får ett enhetligt utseende. Om en ny funktion behövs, till exempel en allvarlighetsnivå eller layouthjälpare, föreslå den i din pull request. Den granskas och läggs till i <code>utils.sh</code> om den är användbar för fler skript.",
"headerFunction": "Funktion",
"headerWhen": "När man ska använda",
"headerSpinner": "Förloppsindikator",
"rows": [
{
"function": "msg_info \"text\"",
"whenRich": "Operation pågår.",
"spinner": "Börjar"
},
{
"function": "stop_spinner",
"whenRich": "Slutet av tyst förberedande arbete i fas 1 - dödar spinner, rensar linjen.",
"spinner": "Stopp"
},
{
"function": "msg_ok \"text\"",
"whenRich": "Operationen lyckades. Använd också för \"funktion aktiverad\" även när en omstart krävs.",
"spinner": "Stopp"
},
{
"function": "msg_warn \"text\"",
"whenRich": "Faktisk varning eller nedbrutet tillstånd.",
"spinner": "Stopp"
},
{
"function": "msg_error \"text\"",
"whenRich": "Allvarligt fel.",
"spinner": "Stopp"
},
{
"function": "msg_info2 \"text\"",
"whenRich": "Icke blockerande upplysning på en cyan informationsrad.",
"spinner": "Stopp"
},
{
"function": "msg_success \"text\"",
"whenRich": "Avslutande frågan ”Tryck Enter för att återgå” i slutet av fas 2.",
"spinner": "Stopp"
},
{
"function": "msg_title \"text\"",
"whenRich": "Fet rubrik med inbyggda mellanrum. Används i början av fas 2.",
"spinner": "—"
},
{
"function": "show_proxmenux_logo",
"whenRich": "Rensar skärmen och visar logotypen. Anropas <em>en gång</em> i början av fas 2.",
"spinner": "—"
}
]
},
"dialogConventions": {
"heading": "dialogkonventioner",
"bullets": [
"Skicka alltid <code>--backtitle \"$BACKTITLE\"</code> till varje <code>dialog</code>- och <code>whiptail</code>-anrop. <code>$BACKTITLE</code> är alltid <code>\"ProxMenux\"</code>, satt en gång i skripthuvudet och aldrig överskrivet. Användaren ska alltid se projektnamnet som ram, inte skriptets egen titel.",
"Omslut alltid rubriker och meddelanden med <code>$(translate \"...\")</code>.",
"Omdirigera alltid <code>dialog</code>-utgången med <code>2&gt;&amp;1 &gt;/dev/tty</code> - den fångade stdouten blir användarens val, medan dialogrutan själv drar på terminalen.",
"Använd standard UI dimension variabler (<code>$UI_MENU_H</code>, <code>$UI_MSG_W</code>, etc.) för konsekvent storlek över skript.",
"Kontrollera alltid tomma eller avbrutna val och hantera dem korrekt."
],
"exampleIntro": "Fullständigt exempel: skapa en VM-valmeny och hantera avbrott.",
"exampleCode": "# 1) Build the list of VMs as alternating \"ID NAME\" pairs.\n# dialog --menu expects this exact shape: tag1 description1 tag2 description2 ...\nVM_LIST=\"\"\nfor vmid in $(qm list | awk 'NR>1 {print $1}'); do\n vm_name=$(qm config \"$vmid\" | awk -F': ' '/^name:/ {print $2}')\n VM_LIST=\"$VM_LIST $vmid \\\"$vm_name\\\"\"\ndone\n\n# 2) Show the dialog. Captured stdout is the user's selection (the VMID).\nVMID=$(eval \"dialog --backtitle \\\"\\$BACKTITLE\\\" \\\n --title \\\"\\$(translate \\\"Select VM\\\")\\\" \\\n --menu \\\"\\$(translate \\\"Choose a VM from the list:\\\")\\\" \\\n \\$UI_MENU_H \\$UI_MENU_W \\$UI_MENU_LIST_H \\\n $VM_LIST \\\n 2>&1 >/dev/tty\")\n\n# 3) Empty result means the user pressed Cancel or Esc — exit silently.\nif [ -z \"$VMID\" ]; then\n exit 0\nfi\n\n# 4) Continue with the rest of Phase 1, knowing VMID is now set.\necho \"User selected VMID=$VMID\""
},
"translation": {
"heading": "Översättningspolicy",
"intro": "Alla användarsynliga strängar måste inslagas med funktionen <code>translate</code>. ProxMenux översätter dem automatiskt till alla språk - du skriver engelska, användaren läser sitt modersmål.",
"code": "msg_ok \"$(translate \"Operation completed successfully.\")\"\nmsg_error \"$(translate \"Failed to start container\") $CTID.\"\ndialog --title \"$(translate \"Select Storage\")\" ...",
"bullets": [
"Skriv strängar på engelska - översättning hanteras automatiskt av bygget.",
"Håll strängar koncis. Undvik inbäddningsvariabler inom långa meningar där det är möjligt.",
"Översätt <strong>inte</strong> variabelnamn, sökvägar eller tekniska identifierare."
]
},
"variableStyle": {
"heading": "Regler för variabler och stil",
"bullets": [
"Använd <code>UPPER_CASE</code> för script-nivå variabler.",
"Använd <code>lower_case</code> för lokala funktionsvariabler (deklarera med <code>local</code>).",
"Sätt alla variabelexpansioner inom citattecken: <code>\"$VAR\"</code>, inte <code>$VAR</code>.",
"Använd <code>[[ ]]</code> för villkor, inte <code>[ ]</code> (förutom där POSIX krävs).",
"<code>show_proxmenux_logo</code> är det avsedda sättet att rensa skärmen: den rensar och visar projektlogotypen för att ge visuellt sammanhang. Anropa den en gång i början av fas 2, och valfritt före ett längre block med väntindikator i fas 1."
],
"standardNamesIntro": "Standardvariabla namn över hela projektet:",
"standardNamesCode": "CTID # container ID\nVMID # virtual machine ID\nDISK # device path (e.g. /dev/sdb)\nPARTITION # partition path (e.g. /dev/sdb1)\nSTORAGE # Proxmox storage name\nMOUNT_POINT # filesystem mount path",
"redirectHeading": "Omdirigera verktygsutgång under fas 2",
"redirectIntro": "Fas 2 visar en logg med <code>msg_info → msg_ok</code>-rader. Om ett anropat verktyg, som apt, mkfs, qm, pct eller dd, skriver till stdout/stderr rullar dess utdata förbi meddelandena och stör överblicken. Användaren kan inte längre skilja skriptets förlopp från verktygets detaljer.",
"withoutRedirectIntro": "<strong> Utan omdirigering</strong> - vad användaren ser om du inte hanterar ljudet:",
"withoutRedirectCode": "ℹ Installing kernel package...\nReading package lists... Done\nBuilding dependency tree... Done\nReading state information... Done\nThe following NEW packages will be installed:\n proxmox-kernel-6.5\n0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\nNeed to get 12.5 MB of archives.\nAfter this operation, 47.2 MB of additional disk space will be used.\nGet:1 http://download.proxmox.com/debian/pve trixie/pve-no-subscription amd64 ...\n... [200+ more lines of dpkg output] ...\n✓ Kernel installed.",
"withRedirectIntro": "<strong> Med omdirigering</strong> - hur samma operation ser ut när buller skickas någon annanstans:",
"withRedirectCode": "ℹ Installing kernel package...\n✓ Kernel installed.\nℹ Configuring kernel command line...\n✓ Configured.\nℹ Refreshing boot loader...\n✓ Boot loader updated.",
"twoPatternsIntro": "Två mönster att välja mellan:",
"discardLead": "<strong>Kasta utdata</strong> när de inte behövs: snabbast och enklast.",
"discardCode": "DEBIAN_FRONTEND=noninteractive apt-get install -y \"$package\" >/dev/null 2>&1",
"logLead": "<strong>Skicka utdata till en loggfil</strong> när de kan behöva granskas senare, exempelvis vid en misslyckad installation eller för att se vad dpkg gjorde. Det är det föredragna mönstret för apt-åtgärder:",
"logCode": "apt-get install -y \"$package\" >> \"$log_file\" 2>&1",
"referenceOutro": "Skriptet <code>scripts/global/update-pve9_2.sh</code> är ett referensimplementering - varje <code>apt-get</code>-samtal skickar ut till en loggfil så att användaren bara ser det rena <code>msg_info → msg_ok</code>-flödet, medan loggen på disken låter dig rekonstruera exakt vad apt gjorde om något går fel."
},
"dosAndDonts": {
"heading": "Do's och Don'ts",
"doHeading": "✅ Gör",
"doBullets": [
"<code>stop_spinner</code> före en <code>dialog</code> i fas 1 endast när en <code>msg_info</code> spinner körs för närvarande.",
"Fas 2 börjar med <code>show_proxmenux_logo + msg_title + msg_ok</code> för att sammanfatta resultaten från fas 1.",
"Använd <code>msg_ok</code> för framgångsrikt aktiverade funktioner - även om en omstart krävs.",
"Använd <code>whiptail</code> (inte <code>dialog</code>) för någon post-exekveringsprompt som måste visas i Fas 2.",
"Ha alltid en Nej-gren i omstartsfrågor som säger att den berörda resursen inte ska startas före omstart.",
"Bevakning VM-bara logik genom att kontrollera <code>[[ -f \"/etc/pve/qemu-server/$'{'vmid'}'.conf\" ]]</code> - controllers och NVMe PCIe kan inte läggas till LXC containrar.",
"Använd <code>ensure_repositories</code> från <code>utils-install-functions.sh</code> istället för ovillkorlig <code>apt-get update</code>.",
"Använd parallella arrayer i Fas 1 när varje objekt behöver flera dialoger."
],
"dontHeading": "❌ Gör inte",
"dontBullets": [
"Anropa <code>dialog</code> medan en väntindikator är aktiv.",
"Hoppa över fas 1 recap i början av fas 2.",
"Anropa <code>show_proxmenux_logo</code> en andra gång; det raderar allt fas 2 har visat.",
"Använd <code>dialog</code> i Fas 2 (använd <code>whiptail</code> för det sällsynta oundvikliga fallet).",
"Använda enbart <code>clear</code>.",
"Omge <code>msg_title</code> med tomma <code>echo \"\"</code>-rader; mellanrum ingår redan.",
"Använd <code>msg_warn</code> för att rapportera en framgångsrikt aktiverad funktion - det är en <code>msg_ok</code>.",
"Kör ovillkorlig <code>apt-get update</code> - använd <code>ensure_repositories</code>."
]
},
"submitting": {
"heading": "Skicka in ditt bidrag",
"steps": [
"Skapa en fork av <code>MacRimi/ProxMenux</code> på GitHub och klona din fork.",
"Skapa en <code>feature/*</code>-gren från <code>develop</code> (se <em>Grenmodell</em> ovan).",
"Följ denna guide för nya eller modifierade skript. Skriv rubriken med ditt namn; lägg till den valfria sponsorlinjen om du vill.",
"Testa ditt manus på en riktig Proxmox VE-instans - både Fas 1 (varje dialogruta) och Fas 2 (varje operation lyckas och rullar tillbaka rent på fel).",
"Öppna en pull request <strong>mot <code>develop</code></strong> med en tydlig beskrivning: skriptets syfte, ändringar och den Proxmox VE-version som användes för tester.",
"Se till att ditt bidrag respekterar <cocLink>Uppförandekod</cocLink>."
],
"securityOutro": "För säkerhetskänsliga problem följer du rapporteringsprocessen i <securityLink>SECURITY.md</securityLink> i stället för att öppna ett offentligt ärende."
},
"whereNext": {
"heading": "Nästa steg",
"items": [
{
"kind": "external",
"url": "https://github.com/MacRimi/ProxMenux/blob/main/CONTRIBUTING.md",
"label": "CONTRIBUTING.md (fullständig guide)",
"tail": " — källan till sanning för varje konvention, inklusive avancerade hårdvarumönster."
},
{
"kind": "internal",
"href": "/docs/about/contributors",
"label": "Bidragsgivare",
"tail": " — personerna vars arbete har format ProxMenux-utgåvor. Detta är en annan sida."
},
{
"kind": "internal",
"href": "/docs/about/code-of-conduct",
"label": "Uppförandekod",
"tail": " - standarderna varje bidragsgivare går med på att följa."
},
{
"kind": "external",
"url": "https://github.com/MacRimi/ProxMenux/discussions",
"label": "GitHub Discussions",
"tail": " - fråga innan du bygger om du inte är säker på om en idé passar, eller att hitta medarbetare på en större funktion."
}
]
}
}
@@ -0,0 +1,38 @@
{
"meta": {
"title": "Bidragsgivare | ProxMenux-dokumentation",
"description": "Ett erkännande till dem som gör ProxMenux möjligt: testare, granskare och utvecklare som bidrar till varje version.",
"ogTitle": "Bidragsgivare | ProxMenux-dokumentation",
"ogDescription": "Möt bidragsgivarna bakom ProxMenux."
},
"header": {
"title": "Bidragsgivare",
"description": "ProxMenux växer tack vare sina bidragsgivare. Den här sidan uppmärksammar deras arbete: att testa versioner före publicering, hitta regressioner, granska PR:ar och påverka utvecklingen av nya funktioner.",
"section": "Om"
},
"beyond": {
"title": "Utöver denna lista",
"body": "Många fler bidrar genom felrapporter, funktionsförslag i Discussions, betatestning och översättningar. Den fullständiga listan över kodbidragsgivare finns i <extlink>GitHubs bidragsgivargraf</extlink>. Den här sidan lyfter fram dem som är mest aktiva med att testa och granska ProxMenux-versioner."
},
"testers": {
"heading": "Testare och granskare",
"intro": "De här personerna var bland de första att bidra till projektet. Deras tester, felrapporter och förbättringsförslag hjälpte ProxMenux att bli vad det är i dag.",
"roles": {
"testing": "Testning",
"testingReviewer": "Testning och granskning"
},
"youtube": "YouTube"
},
"contribute": {
"heading": "Vill du bidra?",
"intro": "Alla bidrag är välkomna - kod, testning, design, dokumentation eller bara dela dina idéer:",
"tester": "<strong>Testare</strong> — prova <beta>betakanalen</beta> och rapportera vad som fungerar och vad som inte fungerar före de stabila versionerna.",
"developer": "<strong>Utvecklare</strong> — Bash, Next.js (TypeScript) och lite Python för översättningens virtuella miljö (venv). PR:ar välkomnas på <gh>GitHub</gh>.",
"designer": "<strong>Designer</strong> — UI förbättringar, ikoner, skärmdumpar för dokumentation.",
"ideas": "<strong>Idéer</strong> — öppna en tråd i <disc>GitHub Discussions</disc> innan du skapar ett ärende med ett funktionsförslag."
},
"coc": {
"title": "Läs uppförandekoden först",
"body": "Läs <coclink>uppförandekoden och rekommenderade arbetssätt</coclink> innan du skickar in kod eller rapporterar problem. Där beskrivs förväntningar på kodansvar, rapportering av säkerhetsbrister och omfattningen av PR:ar."
}
}
+94
View File
@@ -0,0 +1,94 @@
{
"meta": {
"title": "Vanliga frågor | ProxMenux-dokumentation",
"description": "Vanliga frågor om ProxMenux: funktioner, installation, kompatibilitet från PVE 8, anpassning, uppdateringar, säkerhet, produktionsanvändning, systemfiler, bidrag och avinstallation.",
"ogTitle": "Vanliga frågor | ProxMenux-dokumentation",
"ogDescription": "Vanliga frågor om ProxMenux installation, kompatibilitet, säkerhet och hur du kan bidra."
},
"header": {
"title": "Vanliga frågor",
"description": "Vanliga frågor om ProxMenux: vad det är, vem det passar, installation, uppdatering, avinstallation, kompatibilitet, anpassning, säkerhet och bidrag. Om din fråga saknas, titta i GitHub Discussions eller skapa ett ärende.",
"section": "Om"
},
"quickLinks": {
"title": "Snabba länkar",
"installationLabel": "Installation",
"installationSuffix": " — installationskommandot på en rad och dess beroenden.",
"introductionLabel": "Introduktion",
"introductionSuffix": " — vad ProxMenux gör, på fem minuter.",
"uninstallLabel": "Avinstallera",
"uninstallSuffix": " — ren borttagning.",
"issuesLabel": "GitHub Issues",
"discussionsLabel": "Diskussioner"
},
"q1": {
"question": "Vad är ProxMenux, och vad används det för?",
"p1Rich": "<strong>ProxMenux</strong> är ett interaktivt menystyrt verktyg som gör <strong>Proxmox VE</strong> tillgängligt oavsett teknisk erfarenhet. Det förenklar körningen av kommandon och låter dig hantera systemet utan avancerade Linux-kunskaper.",
"p2": "Mindre erfarna användare kan köra kommandon via strukturerade menyer och behöver skriva mindre i terminalen. Erfarna administratörer sparar steg i återkommande uppgifter som härdning efter installation, GPU-passthrough, import av OVF-VM:ar och rotation av ZFS-snapshots.",
"p3": "Proxmox VE används ofta för:",
"items": [
"Virtualisering i företagsklass",
"HomeLab och personliga molnlösningar",
"Multimedieservrar, automatisering och mycket mer"
]
},
"q2": {
"question": "Hur installerar jag ProxMenux?",
"p1Rich": "Följ <installlink>installationsguiden</installlink>. Kortfattat:",
"stableInstall": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"",
"p2": "När installationen är klar startar du verktyget med:",
"menuCmd": "menu"
},
"q3": {
"question": "Är ProxMenux kompatibel med alla Proxmox-versioner?",
"bodyRich": "<strong>Nej — ProxMenux kräver Proxmox VE 8 eller senare.</strong> PVE 7 och äldre stöds inte. Uppgradera först PVE 7 till 8.x enligt Proxmox officiella anvisningar. Därefter kan ProxMenux hantera steget från 8 till 9 via <upgradelink>Verktyg → Uppgradera PVE 8 till PVE 9</upgradelink>."
},
"q4": {
"question": "Kan jag anpassa ProxMenux?",
"p1Rich": "Uppdateringar kan skriva över lokala ändringar i huvudskripten, så undvik att redigera dessa filer direkt. Det här <em>kan</em> du anpassa:",
"items": [
"Konsolens välkomstbanner med verktyget <strong>FastFetch</strong> i menyn för efterinstallation.",
"Vilka valfria komponenter installeras (Monitor, Fail2Ban, Lynis ...) - välj under installation eller via den relevanta menyn senare."
]
},
"q5": {
"question": "Hur uppdaterar jag ProxMenux?",
"p1Rich": "När en ny version finns upptäcker ProxMenux den nästa gång du kör <code>menu</code> och erbjuder en uppdatering. Om du accepterar ersätts verktygets filer och konfiguration i den befintliga installationen. Du behöver inte ladda ned något manuellt.",
"p2Rich": "Användare av den stabila versionen får stabila uppdateringar, och betaanvändare får betauppdateringar. När en stabil version släpps meddelar betan det nästa gång menyn öppnas och erbjuder automatiskt byte. Läs mer om <betalink>betaprogrammet</betalink>."
},
"q6": {
"question": "Var kan jag rapportera problem eller föreslå funktioner?",
"p1Rich": "Rapportera buggar i <issueslink>GitHub Issues</issueslink>. Beskriv stegen för att återskapa felet, felmeddelandet och vid behov Monitor-utdata från <code>journalctl -u proxmenux-monitor -n 50</code>.",
"p2Rich": "För <strong>säkerhetsproblem</strong>: <strong>publicera inte detaljerna</strong>. Följ rutinen för ansvarsfull rapportering i <coclink>uppförandekoden och rekommendationerna</coclink>."
},
"q7": {
"question": "Kan jag bidra till ProxMenux?",
"p1Rich": "<strong>Absolut.</strong> ProxMenux är ett samarbetsprojekt med öppen källkod. Du kan bidra med kod (Bash, Next.js/TypeScript och översättningsverktyg i Python), tester, dokumentation, design eller idéer.",
"item1Rich": "Diskutera idéer i <discusslink>GitHub Discussions</discusslink> innan du skapar en funktionsförfrågan.",
"item2Rich": "Läs <coclink>uppförandekoden och rekommendationerna</coclink> innan du skickar en pull request.",
"item3Rich": "På <contriblink>sidan för medverkande</contriblink> ser du vilka som för närvarande testar och granskar projektet."
},
"q8": {
"question": "Ändrar ProxMenux kritiska systemfiler?",
"p1Rich": "<strong>Installationen av ProxMenux lägger till följande komponenter.</strong>",
"item1Rich": "Beroenden via apt: <code>dialog</code>, <code>curl</code>, <code>jq</code> och <code>git</code>. Översättningarna använder färdiga JSON-kataloger. Installationsprogrammet lägger inte till någon virtuell översättningsmiljö på värden.",
"item2Rich": "Skriptträdet på <code>/usr/local/share/proxmenux/</code>.",
"item3Rich": "Startkommandot i <code>/usr/local/bin/menu</code>.",
"item4Rich": "Valfritt: Monitors systemd-tjänst <code>proxmenux-monitor.service</code>.",
"p2Rich": "ProxMenux ändrar <em>inte</em> Proxmox centrala konfiguration om du inte uttryckligen begär det via en särskild meny. Nätverksreparationen redigerar till exempel <code>/etc/network/interfaces</code>, men först efter din bekräftelse och efter att en säkerhetskopia har skapats."
},
"q9": {
"question": "Är det säkert att använda ProxMenux i produktion?",
"bodyRich": "<strong>Ja.</strong> Eftersom ProxMenux bara ändrar Proxmox centrala filer på uttrycklig begäran kan det användas i produktionsmiljöer. Som med all automatisering bör du först testa i en kontrollerad miljö och ha säkerhetskopior innan du kör destruktiva åtgärder, till exempel uppgradering från PVE 8 till 9, diskformatering eller borttagning av en VM."
},
"q10": {
"question": "Hur avinstallerar jag ProxMenux?",
"p1Rich": "I ProxMenux: <strong>Inställningar → Avinstallera ProxMenux</strong>. Avinstallationen tar bort skriptträdet, startkommandot och Monitor-tjänsten samt, om du väljer det, utvalda beroenden. Den återställer <code>/root/.bashrc</code> och <code>/etc/motd</code> från säkerhetskopiorna som skapades vid installationen, om de finns.",
"p2Rich": "Fullständiga instruktioner: <uninstalllink>Avinstallera ProxMenux</uninstalllink>."
},
"q11": {
"question": "VirusTotal flaggar installationsadressen — är den säker?",
"p1Rich": "Resultatet 1/95 från <em>Chong Lua Dao</em>, som rapporterades i ärende #162, bedömdes av projektansvarig som ett falsklarm. Installationsprogrammet använder mönstret <code>curl | bash</code> och kan ladda ned <code>jq</code> från dess officiella GitHub-utgåva. Detta <em>beteende</em> kan utlösa heuristiska skannrar. Den historiska rapporten säger inget avgörande om alla framtida nedladdningar.",
"p2Rich": "ProxMenux har helt öppen källkod och du kan granska installationsskriptet rad för rad: <scriptlink>install_proxmenux.sh</scriptlink>. Mer bakgrund finns i <issuelink>ärende #162</issuelink>."
}
}
+67
View File
@@ -0,0 +1,67 @@
{
"meta": {
"title": "Om projektet | ProxMenux-dokumentation",
"description": "Om ProxMenux: projektmål, bidragsgivare, vanliga frågor och uppförandekod. Ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+, utvecklat och underhållet av MacRimi tillsammans med en liten grupp testare och bidragsgivare.",
"ogTitle": "Om projektet | ProxMenux-dokumentation",
"ogDescription": "Om ProxMenux — ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+."
},
"header": {
"title": "Om",
"description": "Projektinformation, vanliga frågor, bidragsgivare och uppförandekod. ProxMenux är ett menystyrt hanteringsverktyg med öppen källkod för Proxmox VE 8+, utvecklat och underhållet av MacRimi med hjälp av en liten grupp testare och bidragsgivare.",
"section": "Om"
},
"callout": {
"title": "Öppen källkod, utvecklad av gemenskapen",
"body": "ProxMenux har GPL-3.0-licens och utvecklas öppet på GitHub. Varje skript kan granskas och varje ändring spåras. Felrapporter, idéer, kod och testning välkomnas."
},
"section": {
"heading": "I detta avsnitt",
"options": [
{
"icon": "HelpCircle",
"href": "/docs/about/faq",
"title": "FAQ",
"description": "Vanliga frågor: vad ProxMenux är, installation, kompatibilitet, anpassning, uppdateringar, säkerhet, användning i produktion och avinstallation."
},
{
"icon": "Users",
"href": "/docs/about/contributors",
"title": "Bidragsgivare",
"description": "Ett erkännande till dem som gör ProxMenux möjligt: testare, granskare och utvecklare som bidrar till varje version."
},
{
"icon": "ScrollText",
"href": "/docs/about/code-of-conduct",
"title": "Uppförandekod",
"description": "Projektvärden, kodansvarsförväntningar och bidragsriktlinjer. Obligatorisk läsning innan du öppnar en PR eller rapport."
}
]
},
"involved": {
"heading": "Bli involverad",
"intro": "Tre ställen att engagera sig i projektet:",
"cards": [
{
"href": "https://github.com/MacRimi/ProxMenux/issues/new",
"title": "🐛 Rapportera en bugg",
"description": "GitHub Issues — bifoga loggar och steg för att återskapa problemet."
},
{
"href": "https://github.com/MacRimi/ProxMenux/discussions",
"title": "💡 Föreslå en funktion",
"description": "GitHub Discussions — dela idéer innan du öppnar en PR."
},
{
"href": "https://github.com/MacRimi/ProxMenux/pulls",
"title": "🔀 Skicka en PR",
"description": "GitHub Pull Requests - läs uppförandekoden först."
}
]
},
"support": {
"heading": "Stöd projektet",
"introRich": "Om ProxMenux sparar tid åt dig är det enklaste sättet att hjälpa andra hitta det att <starlink>ge förrådet en ⭐ på GitHub</starlink>. Om du vill göra mer:",
"kofiLabel": "Stöd på Ko-fi",
"kofiOutro": " — Köper underhållaren en kaffe och håller utvecklingen på gång."
}
}
@@ -0,0 +1,110 @@
{
"meta": {
"title": "Säkerhetskopiering och omstart av gränssnitt | ProxMenux-dokumentation",
"description": "Ta manuella ögonblicksbilder, bläddra bland och återställ säkerhetskopior av /etc/network/interfaces som lagras i /var/backups/proxmenux/. Inkluderar omstart av nätverkstjänsten med bekräftelse och en snabbvy av den aktuella konfigurationen.",
"ogTitle": "Säkerhetskopiering och omstart av gränssnitt | ProxMenux-dokumentation",
"ogDescription": "Ta en ögonblicksbild och återställ Proxmox nätverkskonfiguration; starta om nätverkstjänsten med bekräftelse."
},
"header": {
"title": "Säkerhetskopiering och omstart av gränssnitt",
"description": "Fyra verktyg för /etc/network/interfaces: ta en manuell ögonblicksbild, visa aktuell konfiguration, återställa en tidigare säkerhetskopia med valfri förhandsvisning och starta om nätverkstjänsten med uttryckligt samtycke. Samma katalog för säkerhetskopior används av de guidade reparationerna.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "Hanterar samma katalog för säkerhetskopior som de guidade reparationerna (<code>/var/backups/proxmenux/</code>). Du kan ta en extra ögonblicksbild före manuella ändringar, bläddra bland alla befintliga säkerhetskopior och återställa vilken som helst — alltid med en ny automatisk säkerhetskopia före återställningen som ett andra skydd."
},
"shared": {
"heading": "Den gemensamma katalogen för säkerhetskopior",
"intro": "Varje säkerhetskopia som tas någonstans i nätverksmenyn landar på samma ställe:",
"outro": "Filnamnen är tidsstämplade och sorterade efter datum, och filerna skrivs aldrig över. Katalogen skapas vid första användningen."
},
"show": {
"heading": "Visa nätverkskonfigurationsfil",
"body": "Skriver ut <code>/etc/network/interfaces</code> oförändrad i terminalen. Skrivskyddat. Användbart som kontroll före säkerhetskopiering eller efter återställning. Det finns inget separat verktyg för att jämföra med föregående säkerhetskopia, så att granska den aktuella filen är det enklaste sättet att kontrollera innehållet."
},
"create": {
"heading": "Skapa nätverksbackup",
"body": "Kopierar den nuvarande <code>/etc/network/interfaces</code> i backupkatalogen med en ny tidsstämpel. Det är det - ingen analys, inga prompts, bara en ögonblicksbild.",
"whenTitle": "När man tar en manuell backup",
"whenBody": "Innan du redigerar <code>/etc/network/interfaces</code> för hand, installerar ett paket som kan ändra nätverksstacken (till exempel NetworkManager eller Open vSwitch) eller gör en maskinvaruändring. De guidade reparationerna tar redan ögonblicksbilder automatiskt — det här alternativet är för <em>manuella</em> ingrepp."
},
"restore": {
"heading": "Återställ nätverkssäkerhetskopia",
"intro": "Listar alla säkerhetskopior i <code>/var/backups/proxmenux/</code> från nyast till äldst och vägleder genom en återställning med skyddsåtgärder:",
"steps": [
{
"title": "1. Välj en backup",
"body": "En meny listar varje säkerhetskopia med dess tidsstämpel. Om det inte finns några säkerhetskopior avslutas flödet med ett tydligt meddelande.",
"tone": "blue"
},
{
"title": "2. Valfri förhandsvisning",
"body": "Erbjuder att öppna den valda säkerhetskopian i en rullningsbar vy innan återställningen bekräftas. Ja är standardvalet — hoppa inte över detta på en fjärransluten värd.",
"tone": "blue"
},
{
"title": "3. Säkerhetskopiering före återställning",
"body": "Tar <strong>ytterligare en</strong> säkerhetskopia av det aktuella tillståndet innan <code>/etc/network/interfaces</code> skrivs över. Återställning är i sig en destruktiv åtgärd, så den nya ögonblicksbilden före återställningen gör att du kan gå tillbaka om du valde fel säkerhetskopia.",
"tone": "amber"
},
{
"title": "4. Applicera återställningen",
"body": "Skriver den valda säkerhetskopian över <code>/etc/network/interfaces</code>. Filen har ändrats på disk, men kärnans aktuella tillstånd speglar fortfarande den tidigare konfigurationen.",
"tone": "amber"
},
{
"title": "5. Valfri omstart",
"body": "Frågar om <code>systemctl restart networking</code> ska köras nu. Avböj för att skjuta upp ändringen till nästa omstart.",
"tone": "emerald"
}
],
"autoBackupTitle": "En återställning tar sin egen backup automatiskt",
"autoBackupBody": "När du väljer <em>Återställ nätverkssäkerhetskopia</em> tas alltid en ny ögonblicksbild av den <em>aktuella</em> konfigurationen innan den skrivs över. Om du återställer fel säkerhetskopia innehåller den senaste filen i <code>/var/backups/proxmenux/</code> tillståndet du hade före återställningen."
},
"restart": {
"heading": "Starta om nätverkstjänsten",
"body": "Kör <code>systemctl restart networking</code> efter en ja/nej-bekräftelse. Rapporterar resultatet med <code>msg_ok</code> / <code>msg_error</code>. De flesta flöden i menyn erbjuder redan en omstart i slutet. Detta alternativ används efter en manuell ändring eller om du tidigare avböjt den erbjudna omstarten.",
"warnTitle": "Kort frånkoppling garanteras; permanent frånkoppling är möjlig",
"warnBody": "Omstart av <code>networking</code> tar ned och konfigurerar om alla gränssnitt som deklareras i <code>/etc/network/interfaces</code>. SSH-sessioner via dessa gränssnitt bryts. Om den nya konfigurationen är ogiltig kommer nätverket inte tillbaka. Kör endast detta när:",
"warnItems": [
"Du har konsolåtkomst / IPMI / iKVM redo, <em>eller</em>",
"Du befinner dig fysiskt bredvid maskinen, <em>eller</em>",
"Du har precis återställt en konfiguration som du vet fungerar och vill tillämpa den."
]
},
"manualRollback": {
"heading": "Manuell återgång från en konsol",
"intro": "Om du inte kan nå menyn (ingen SSH, dialog kraschar, ...) men kan nå en konsol, är återgång två kommandon:",
"outro": "Det är <em>samma</em> åtgärd som menyn utför, bara inmatad för hand. Om <code>networking</code> fortfarande inte startar, kontrollera <code>journalctl -u networking -b</code> för att hitta det bakomliggande syntax- eller drivrutinsfelet."
},
"troubleshoot": {
"heading": "Felsökning",
"noneTitle": "”Inga säkerhetskopior hittades” vid återställning",
"noneBody": "Katalogen <code>/var/backups/proxmenux/</code> finns inte eller innehåller inga <code>interfaces_backup_*</code>-filer. Kör <em>Skapa nätverksbackup</em> minst en gång eller en guidad reparation som tar en säkerhetskopia automatiskt. Bekräfta med <code>ls /var/backups/proxmenux/</code>.",
"unreachTitle": "Omstart av nätverket lyckas men värden är fortfarande onåbar",
"unreachBody": "Den nya konfigurationen är fel eller tilldelar inte din IP-adress för administration. Återställ från konsolen (se ovan). Använd sedan <bridgeLink>brygganalys</bridgeLink> och <configLink>konfigurationsanalys</configLink> för att förstå felet innan du tillämpar den igen.",
"emptyTitle": "Förhandsvisningen för återställning visar en tom fil",
"emptyBody": "Säkerhetskopian är tom (0 byte). Det händer om en kopiering misslyckats utan felmeddelande under en tidigare körning. Välj en äldre säkerhetskopia eller kör <em>Skapa nätverksbackup</em> igen nu om den aktuella konfigurationen fungerar."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Brygganalys och guidad reparation",
"href": "/docs/network/bridge-analysis",
"tail": " — Den vanligaste orsaken till att en säkerhetskopia hamnar här."
},
{
"label": "Konfigurationsanalys och guidad rensning",
"href": "/docs/network/config-analysis",
"tailRich": " - skriver också till <code>/var/backups/proxmenux/</code> automatiskt."
},
{
"label": "Diagnostik",
"href": "/docs/network/diagnostics",
"tail": " — för att verifiera det aktuella tillståndet efter en återställning."
}
]
}
}
@@ -0,0 +1,132 @@
{
"meta": {
"title": "Brygganalys och guidad reparation | ProxMenux-dokumentation",
"description": "Upptäcker vmbrX-bryggor med saknade eller ogiltiga fysiska portar, vanligen efter omnumrering av PCI-enheter. Rapporterar dem med föreslagna skalkommandon och erbjuder guidad reparation i 5 steg med obligatorisk säkerhetskopia.",
"ogTitle": "Brygganalys och guidad reparation | ProxMenux-dokumentation",
"ogDescription": "Granska och reparera Proxmox bryggportar efter maskinvaruändringar med ett guidat flöde som ger säker återställning."
},
"header": {
"title": "Brygganalys och guidad reparation",
"description": "Granskar varje vmbrX-brygga i /etc/network/interfaces, kontrollerar att dess fysiska portar finns och erbjuder stegvis reparation om de saknas. Analysen är skrivskyddad; reparationen kräver godkännande, visar en förhandsvisning och tar en säkerhetskopia.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "Läser varje brygga i <code>/etc/network/interfaces</code>, granskar dess <code>bridge-ports</code>-rad och kontrollerar att varje deklarerad port, till exempel <code>enp3s0</code>, finns på värden. Om en port saknas föreslås en ersättning och ändringen tillämpas med uttryckligt samtycke i flödet <strong>säkerhetskopiera, förhandsvisa, tillämpa, verifiera</strong>."
},
"when": {
"heading": "När du behöver detta",
"intro": "Linux tilldelar förutsägbara gränssnittsnamn från PCI topologi och slot order. Flera händelser blandar dem och lämnar <code>/etc/network/interfaces</code> med hänvisning till namn som inte längre finns:",
"items": [
"Lägga till eller ta bort ett PCIe-kort (en NIC, en GPU, en HBA, en NVMe-bärare).",
"Flytta ett befintligt kort till en annan PCIe slot.",
"BIOS-/UEFI-uppdateringar som numrerar om PCI-enheter.",
"Flytta startdisken till annan maskinvara."
],
"outro": "Efter nästa start försöker bryggan ansluta till en port som inte längre finns. Den kan inte aktiveras och värden förlorar nätverksanslutningen. <link>Beständiga gränssnittsnamn</link> förhindrar att detta händer igen. Om du redan är utelåst visar den här sidan hur du återställer åtkomsten."
},
"bigPicture": {
"heading": "Överblick",
"diagram1": {
"arrowLabel": "Steg 1",
"nodes": {
"sourceLabel": "/etc/network/interfaces",
"sourceDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports enp3s0",
"bridgeLabel": "Analysera (skrivskyddat)",
"bridgeDetail": "ip link show enp3s0\n→ finns inte",
"targetLabel": "Rapport + förslag",
"targetDetail": "❌ enp3s0: HITTADES INTE\nErsätt med: eno1\n(inga ändringar ännu)"
}
},
"diagram2": {
"arrowLabel": "tillämpa med säkerhetskopia",
"nodes": {
"sourceLabel": "Guidad reparation",
"sourceDetail": "1. Säkerhetskopiera\n2. Visa aktuell konfiguration\n3. Förhandsvisa ändringar\n4. Tillämpa\n5. Verifiera",
"targetLabel": "/etc/network/interfaces (ny)",
"targetDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports eno1"
}
}
},
"step1": {
"heading": "Steg 1: analys (skrivskyddad)",
"intro": "När du väljer <strong>Analysera bryggkonfiguration</strong> avbryts verktyget direkt om värden inte använder den klassiska Debian/Proxmox-stacken. Annars granskas varje brygga och följande rapporteras:",
"items": [
"Bryggnamn, aktuell status (UP / DOWN), tilldelad IP.",
"Varje deklarerad port och om den för närvarande finns (<code>ip link show &lt;port&gt;</code>).",
"För varje ogiltig port: en föreslagen ersättning (det första tillgängliga fysiska gränssnittet) och det exakta <code>sed</code>-kommandot för att tillämpa ändringen manuellt.",
"Broar utan <code>bridge-ports</code> alls och föräldralösa <code>auto</code>-poster (ingen matchande <code>iface</code>-block)."
],
"readonlyTitle": "Garanti för skrivskyddad analys",
"readonlyBody": "Fram till denna punkt har skriptet inte kört ett enda kommando som ändrar systemet. Du kan lämna analysen öppen, kopiera de föreslagna <code>sed</code>-kommandona och tillämpa dem manuellt om du vill, eller godkänna nästa fråga för att gå vidare till den guidade reparationen."
},
"step2": {
"heading": "Steg 2: guidad reparation (5 steg)",
"intro": "Startas bara om du godkänner frågan i slutet av analysen. Varje steg visar vad som kommer att ske och ber om bekräftelse innan flödet fortsätter.",
"steps": [
{
"title": "1. Säkerhetskopia",
"body": "Kopierar <code>/etc/network/interfaces</code> till <code>/var/backups/proxmenux/interfaces_backup_&lt;TIMESTAMP&gt;</code>. Den exakta sökvägen visas före och efter kopieringen, tillsammans med återställningskommandot.",
"tone": "blue"
},
{
"title": "2. Granska nuvarande konfiguration",
"body": "Öppnar live <code>/etc/network/interfaces</code> i en rullningsbar dialog så att du kan se exakt vad som ska ändras.",
"tone": "blue"
},
{
"title": "3. Förhandsgranska föreslagna ändringar",
"body": "Listar exakt vilka bryggor som berörs och vilka portbyten som planeras. Om ingen reparation längre behövs eftersom porten har dykt upp igen mellan kontrollerna avslutas flödet med <em>”Inga ändringar behövs.”</em>",
"tone": "blue"
},
{
"title": "4. Tillämpa ändringarna",
"body": "För varje drabbad bro kör <code>sed -i \"/iface $bridge/,/bridge-ports/ s/bridge-ports.*/bridge-ports $new_ports/\"</code> mot <code>/etc/network/interfaces</code>. Om en bro inte hade någon giltig ersättning tillgänglig, är ersättningen hoppad och rapporterad i steg 5.",
"tone": "amber"
},
{
"title": "5. Verifiering",
"body": "Läser filen igen och bekräftar att varje bryggas nya port finns. Skriver ut återställningskommandot (<code>cp &lt;backup&gt; /etc/network/interfaces</code>). Erbjuder slutligen <strong>Starta om nätverket</strong> — godkänn bara om du har konsolåtkomst som reserv.",
"tone": "emerald"
}
],
"restartTitle": "Omstart av nätverket ≠ riskfri återställning",
"restartBody": "Reparationen skrivs till disk oavsett om du startar om tjänsten. <code>systemctl restart networking</code> tillämpar ändringen <em>nu</em>, vilket kan bryta SSH-sessionen om den nya porten är fel. Om du avböjer börjar ändringen ändå gälla vid nästa omstart — kontrollera först den nya konfigurationen eller återställ med det utskrivna kommandot."
},
"edits": {
"heading": "Vad blir redigerat (exakt)",
"body": "Endast <code>bridge-ports</code>-raden för varje berörd brygga. Andra direktiv (<code>address</code>, <code>netmask</code>, <code>gateway</code>, <code>bridge-stp</code>, …) lämnas orörda. Skriptet skapar eller tar aldrig bort <code>iface</code>-block i detta flöde — det sköts av <link>konfigurationsanalys &amp; rensning</link>."
},
"troubleshoot": {
"heading": "Felsökning",
"unsupportedTitle": "Analysen avbryts med ”Nätverksstacken stöds inte”",
"unsupportedBody": "Värden kör netplan, systemd-networkd eller NetworkManager. Verktyget stöder endast <code>/etc/network/interfaces</code>. Byt först till den klassiska stacken eller redigera konfigurationen med nätverkshanterarens egna verktyg, till exempel <code>netplan apply</code>.",
"noSuggestTitle": "Inget förslag trycks för en ogiltig port",
"noSuggestBody": "Värden har noll fria fysiska gränssnitt (allt är antingen redan i en annan bro eller inte existerar). Analysen faller tillbaka för att föreslå <code>bridge-ports none</code> så att bron åtminstone kan komma upp utan en port. Lägg till en NIC eller migrera portar mellan broar manuellt innan du kör.",
"stillDownTitle": "Reparationen slutförs men bron är fortfarande DOWN",
"stillDownBody": "<code>sed</code> uppdaterade filen men <code>systemctl restart networking</code> avböjdes. Kör kommandot manuellt när den nya konfigurationen har kontrollerats eller starta om. Om omstarten godkändes och bryggan fortfarande är DOWN, kör <code>ip link show</code> för att kontrollera att den nya porten finns och granska sedan <code>journalctl -u networking</code> för det verkliga felet: urkopplad kabel, länk som inte förhandlats fram eller port som redan tillhör en annan brygga.",
"lostSshTitle": "Jag förlorade SSH-åtkomst direkt efter att ha startat om nätverk",
"lostSshIntro": "Använd konsol / IPMI / iKVM för att nå värden. Återställ backup:",
"lostSshOutro": "Kör sedan analysen igen från konsolen för att ta reda på varför förslaget inte fungerade, oftast för att ersättningsporten inte är ansluten."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Beständiga gränssnittsnamn",
"href": "/docs/network/persistent-names",
"tail": " — binder namn till MAC-adresser så att problemet inte återkommer."
},
{
"label": "Konfigurationsanalys och guidad rensning",
"href": "/docs/network/config-analysis",
"tailRich": " — för föräldralösa <code>iface</code> block (den andra hälften av samma problem)."
},
{
"label": "Säkerhetskopiering och omstart av gränssnitt",
"href": "/docs/network/backup-restore",
"tail": " — manuella ögonblicksbilder och bläddring bland säkerhetskopior för återställning."
}
]
}
}
@@ -0,0 +1,122 @@
{
"meta": {
"title": "Konfigurationsanalys och guidad rensning | ProxMenux-dokumentation",
"description": "Upptäcker iface-block i /etc/network/interfaces som refererar till fysiska nätverkskort som inte längre finns på värden. Rapporterar dem och erbjuder guidad borttagning i 5 steg med obligatorisk säkerhetskopiering och förhandsvisning av varje block.",
"ogTitle": "Konfigurationsanalys och guidad rensning | ProxMenux-dokumentation",
"ogDescription": "Hitta och ta bort föräldralösa gränssnittsblock kvar av hårdvaruförändringar, med full förhandsgranskning och återgång."
},
"header": {
"title": "Konfigurationsanalys och guidad rensning",
"description": "Går igenom varje iface-block i /etc/network/interfaces och kontrollerar att det underliggande fysiska nätverkskortet finns kvar. Rapporterar överblivna block efter maskinvaruändringar och erbjuder guidad borttagning med säkerhetskopia, förhandsvisning och bekräftelse för varje block.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "Identifierar <code>iface</code>-deklarationer vars stödjande NIC inte längre finns på värden (vanligtvis efter att ett nätverkskort har bytts ut eller tagits bort). Erbjuder sedan en guidad rensning som <em>endast</em> tar bort de föräldralösa blocken, med en säkerhetskopia, en förhandsgranskning per sektion och en explicit slutlig bekräftelse."
},
"differs": {
"heading": "Hur det skiljer sig från brygganalys",
"headerAspect": "Aspekt",
"headerBridge": "Brygganalys",
"headerConfig": "Konfigurationsanalys",
"rows": [
{
"aspect": "Granskar",
"bridge": "Bryggor (<code>vmbrX</code>) och deras <code>bridge-ports</code> linje",
"config": "Varje <code>iface</code>-block utom loopback, bryggor och bondgränssnitt"
},
{
"aspect": "Detekterar",
"bridge": "Bryggor som refererar till en port som inte finns",
"config": "Fristående gränssnittsblock för nätverkskort som inte finns"
},
{
"aspect": "Reparationsåtgärder",
"bridge": "Ersätter portnamnet i <code>bridge-ports</code>",
"config": "Ta bort hela <code>iface</code>-blocket"
},
{
"aspect": "Exkluderar",
"bridge": "Ingenting – varje bro analyseras",
"config": "Bryggor (<code>vmbrX</code>) och bondgränssnitt (<code>bondX</code>) behålls alltid eftersom de är virtuella och det kan vara normalt att de saknas under start"
}
],
"outro": "I praktiken kör du ofta båda i denna ordning: först <strong>konfigurationsanalys</strong> för att ta bort överblivna block, sedan <link>brygganalys</link> för att ändra portkopplingen för bryggor som använde det borttagna gränssnittet."
},
"step1": {
"heading": "Steg 1: analys (skrivskyddad)",
"intro": "Avbryter omedelbart om värden inte använder den klassiska stacken. Annars listas alla konfigurerade gränssnitt utom loopback med sina tillstånd:",
"virtTitle": "Virtuella gränssnitt skyddas",
"virtBody": "Bryggor (<code>vmbrX</code>) och bondgränssnitt (<code>bondX</code>) är virtuella konstruktioner. De kan av giltiga skäl saknas vid inspektionen, till exempel en brygga som ännu saknar portar. Analysen föreslår därför aldrig att de tas bort, bara fysiska nätverkskort."
},
"step2": {
"heading": "Steg 2: guidad rensning (5 steg)",
"intro": "Startas bara om du godkänner frågan i slutet av analysen. Varje steg kräver bekräftelse; om du avbryter avslutas flödet utan att skriva.",
"steps": [
{
"title": "1. Säkerhetskopia",
"body": "Kopierar <code>/etc/network/interfaces</code> till <code>/var/backups/proxmenux/interfaces_backup_&lt;TIMESTAMP&gt;</code>. Sökvägen visas före och efter.",
"tone": "blue"
},
{
"title": "2. Bekräfta borttagningslistan",
"body": "Listar exakt vilka fysiska gränssnittsblock som ska tas bort. Om nätverkskorten har dykt upp igen mellan analys och rensning, till exempel efter att ett kort satts i igen, avslutas flödet med <em>”Ingen rensning behövs.”</em>",
"tone": "blue"
},
{
"title": "3. Förhandsvisa de exakta blocken",
"body": "Öppnar en rullningsbar vy av varje <code>iface</code>-block som skulle raderas, exakt som det står i filen. Här kan du till exempel upptäcka en viktig <code>up</code>-hook som du vill behålla.",
"tone": "blue"
},
{
"title": "4. Tillämpa borttagningen",
"body": "För varje föräldralös gränssnitt, kör <code>sed -i \"/^iface $iface/,/^$/d\" /etc/network/interfaces</code>. Det tar bort från matchande <code>iface</code> linje upp till nästa tomma rad.",
"tone": "amber"
},
{
"title": "5. Verifiering",
"body": "Läser filen igen, listar det som togs bort och kontrollerar återstående gränssnitt. Skriver ut återställningskommandot. Startar <strong>inte</strong> om nätverket automatiskt — borttagning av ett oanvänt block kan säkert tillämpas vid nästa omstart utan att ändra det aktuella tillståndet.",
"tone": "emerald"
}
],
"noRestartTitle": "Startar inte om nätverket automatiskt",
"noRestartBody": "Till skillnad från bryggreparation erbjuder rensningen ingen omstart av tjänsten. Att ta bort ett oanvänt gränssnittsblock påverkar inte den aktiva konfigurationen direkt, så en omstart är onödig och skulle innebära en onödig risk för anslutningen. Ändringen börjar gälla vid nästa manuella <code>systemctl restart networking</code> eller vid nästa systemomstart."
},
"caveats": {
"heading": "Viktiga förbehåll",
"boundaryTitle": "Blockgränsen är den första tomma linjen",
"boundaryBody": "<code>sed</code>-mönstret raderar från <code>iface &lt;name&gt;</code> till nästa tomma rad. Om <code>/etc/network/interfaces</code> saknar tomma rader mellan block, vilket är ovanligt men möjligt efter manuell redigering, kan även nästa block tas bort. Därför är <strong>steg 3 obligatoriskt</strong>: granska förhandsvisningen innan du bekräftar.",
"tandemTitle": "Ett överblivet iface-block som används av en brygga upptäcks här, inte i brygganalysen",
"tandemBody": "Om <code>vmbr0</code> deklarerar <code>bridge-ports enp3s0</code> och <code>enp3s0</code> också har ett eget block <code>iface enp3s0 inet manual</code> lämnar borttagning av <code>enp3s0</code> en ogiltig referens i <code>vmbr0</code>. Kör <link>brygganalys</link> efter rensningen för att ändra eller ta bort bryggporten. De två flödena är avsedda att användas tillsammans."
},
"troubleshoot": {
"heading": "Felsökning",
"notFoundTitle": "Analysen visar mitt nya nätverkskort som ”HITTADES INTE”",
"notFoundBody": "Kärnan ser enheten under ett annat namn än det som står i filen. Kör <code>ip link show</code> för att se det verkliga namnet. Det här är precis ett sådant fall där <link>beständiga gränssnittsnamn</link> skulle förhindra problemet framöver.",
"tooMuchTitle": "Städningen tog bort för mycket (ett block jag ville behålla)",
"tooMuchBody": "Återställ från backupen tryckt i steg 5:",
"tooMuchOutro": "Redigera filen för hand för att lägga till en tydlig tom linje mellan block innan du kör rengöring, eller ta bort problematiskt block manuellt.",
"bridgeBreakTitle": "En bro slutar fungera efter rengöring",
"bridgeBreakBody": "Bryggan använde en port vars <code>iface</code>-block just togs bort. Kör <link>brygganalys</link> så föreslås ett befintligt fysiskt gränssnitt för bryggan."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Brygganalys och guidad reparation",
"href": "/docs/network/bridge-analysis",
"tail": " — Den naturliga uppföljningen efter en rengöring."
},
{
"label": "Beständiga gränssnittsnamn",
"href": "/docs/network/persistent-names",
"tail": " — stoppar föräldralösa block från att ackumulera efter varje hårdvaruförändring."
},
{
"label": "Säkerhetskopiering och omstart av gränssnitt",
"href": "/docs/network/backup-restore",
"tail": " — manuella ögonblicksbilder och bläddring bland säkerhetskopior för återställning."
}
]
}
}
@@ -0,0 +1,94 @@
{
"meta": {
"title": "Diagnostik | ProxMenux Dokumentation",
"description": "Tre enstaka skrivskyddade diagnostikkontroller: Visa routningstabell, Testa anslutning och Avancerad diagnostik. Ren inspektion — skriver aldrig till /etc/network/interfaces och kör aldrig kommandon som ändrar systemet, med ett uttryckligt undantag: fullständig borttagning av NetworkManager, om det upptäcks, kräver ditt samtycke.",
"ogTitle": "Diagnostik | ProxMenux Dokumentation",
"ogDescription": "Skrivskyddad nätverksdiagnostik för Proxmox-värden: routning, nåbarhet och avancerad statistik."
},
"header": {
"title": "Diagnostik",
"description": "Tre enstaka skrivskyddade kontroller av nätverkets aktuella tillstånd: routningstabell, anslutningstest och avancerad statistik. Ingen skriver till /etc/network/interfaces — säkra att använda när som helst, även via SSH. För interaktiv övervakning i realtid, se Övervakningsverktyg i realtid.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "Visar information om routning, nåbarhet och samlad statistik <strong>utan att ändra något</strong>. Använd verktyget för att kontrollera att nätverket fungerar eller identifiera dubbla IP-adresser. För kontinuerlig trafikövervakning, se <monitoringLink>Övervakningsverktyg i realtid</monitoringLink>; för att visa den obearbetade konfigurationsfilen, se <backupLink>Säkerhetskopiering och omstart av gränssnitt</backupLink>."
},
"routing": {
"heading": "Visa routningstabell",
"body": "Listar alla rutter som kärnan använder för tillfället (<code>ip route show</code>) och markerar standardgatewayen. Användbart för att kontrollera att internettrafiken går genom rätt gränssnitt och att inga kvarvarande gamla rutter har företräde."
},
"connectivity": {
"heading": "Testa anslutning",
"intro": "Skickar två ICMP-sonder till vart och ett av tre mål i tur och ordning och rapporterar resultatet för varje mål. Kör sedan <code>nslookup google.com</code> för att verifiera DNS-uppslagning oberoende av ICMP.",
"headerTest": "Test",
"headerTarget": "Mål",
"headerConfirms": "Vad den bekräftar",
"rows": [
{
"test": "Google DNS",
"target": "8.8.8.8",
"confirms": "Extern nåbarhet via en välkänd anycast-IP-adress"
},
{
"test": "Cloudflare DNS",
"target": "1.1.1.1",
"confirms": "Oberoende andra åsikt om Google blockerar ICMP"
},
{
"test": "Gateway",
"target": "(standardrutt)",
"confirms": "L2 / L3-anslutning till den lokala routern"
},
{
"test": "DNS-upplösning",
"target": "google.com",
"confirms": "DNS server är tillgänglig och svarar"
}
],
"readingTitle": "Läsa resultatet",
"readingBody": "Om gatewaytestet lyckas men de offentliga DNS-målen inte svarar har du lokal anslutning men inget internet — kontrollera gatewayens anslutning uppströms. Om DNS-uppslagning misslyckas men ping till <code>8.8.8.8</code> fungerar ligger problemet i DNS-resolvern, inte i nätverket: kontrollera <code>/etc/resolv.conf</code>."
},
"advanced": {
"heading": "Avancerad diagnostik",
"intro": "Sammanställer statistik för hela nätverket och utför en serie kontroller av vanliga problem. Rapporterar antalet aktiva anslutningar, lyssnande portar och totalt antal gränssnitt samt pekar uttryckligen ut två problematiska konfigurationer:",
"items": [
"<strong>NetworkManager körs på en Proxmox-värd.</strong> NetworkManager och Proxmox <code>ifupdown</code> står i konflikt: båda försöker hantera gränssnitten, vilket gör att bryggor växlar mellan aktivt och inaktivt tillstånd eller inte kan aktiveras. Om NetworkManager upptäcks erbjuder verktyget en interaktiv bekräftelse för att stoppa, inaktivera och ta bort det helt (detta är den <em>enda</em> diagnostik som kan ändra systemet, och bara efter uttryckligt samtycke).",
"<strong>Dubbla IP-adresser på olika gränssnitt.</strong> Två gränssnitt med samma IPv4-adress orsakar intermittenta anslutningsproblem som är mycket svåra att felsöka inifrån en VM. Upptäcks via <code>ip -4 addr show | sort | uniq -d</code>."
],
"nmTitle": "NetworkManager-prompten är den enda modifierande åtgärden här",
"nmBody": "Alla andra kontroller i Avancerad diagnostik är skrivskyddade. Borttagning av NetworkManager kräver en ja/nej-bekräftelse och kör <code>systemctl stop / disable</code> + <code>apt-get purge -y network-manager</code>. Om du avböjer ändras ingenting."
},
"troubleshoot": {
"heading": "Felsökning",
"gwTitle": "Testa anslutning rapporterar ett gatewayfel men värden har internetåtkomst",
"gwBody": "Vissa routrar svarar inte på ICMP via sitt interna gränssnitt även om de vidarebefordrar trafiken korrekt. Testa med <code>traceroute 8.8.8.8</code> från en konsol: om det andra hoppet är din internetleverantör och det offentliga DNS-testet lyckades fungerar gatewayen trots att ping misslyckades.",
"dupTitle": "Avancerad diagnostik fortsätter att rapportera dubbla IP-adresser efter att jag tagit bort en",
"dupBody": "Kontrollen granskar kärnans aktuella tillstånd, inte konfigurationsfilen. Kör <code>ip -4 addr show</code> för att kontrollera. Om dubbletten finns kvar har ett gränssnitt fortfarande adressen. Använd <code>ip addr del &lt;IP&gt;/&lt;mask&gt; dev &lt;iface&gt;</code> för att ta bort den från det aktuella tillståndet och redigera sedan <code>/etc/network/interfaces</code> om den också är beständigt konfigurerad."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Övervakningsverktyg i realtid",
"href": "/docs/network/monitoring",
"tail": " — interaktiva iftop / iptraf-ng / iperf3-startare."
},
{
"label": "Brygganalys och guidad reparation",
"href": "/docs/network/bridge-analysis",
"tail": " — när en vmbrX saknar sin fysiska port."
},
{
"label": "Konfigurationsanalys och guidad rensning",
"href": "/docs/network/config-analysis",
"tail": " — när ett gammalt nätverkskort fortfarande deklareras men inte längre finns."
},
{
"label": "Säkerhetskopiering och omstart av gränssnitt",
"href": "/docs/network/backup-restore",
"tail": " — för att ta en ögonblicksbild av konfigurationen före varje ändring."
}
]
}
}
+107
View File
@@ -0,0 +1,107 @@
{
"meta": {
"title": "Nätverkshantering i Proxmox — Bryggor, bondning, diagnostik, reparation | ProxMenux",
"description": "Skrivskyddad diagnostik, analyser med efterföljande förslag och guidade reparationer för nätverksstacken i Debian / Proxmox (/etc/network/interfaces). Inspektera bryggor och bondgränssnitt, starta övervakningsverktyg i realtid, ge gränssnitt beständiga namn, säkerhetskopiera och starta om nätverket säkert — med obligatoriska säkerhetskopior och förhandsvisning steg för steg.",
"ogTitle": "Nätverkshantering i Proxmox — Bryggor, bondning, diagnostik, reparation",
"ogDescription": "Diagnostik, analys och guidade reparationer för Proxmox nätverksstack med obligatoriska säkerhetskopior och förhandsvisning steg för steg.",
"twitterTitle": "Nätverkshantering i Proxmox | ProxMenux",
"twitterDescription": "Bryggor, bondning, diagnostik och guidade reparationer för Proxmox nätverksstack med obligatoriska säkerhetskopior."
},
"header": {
"title": "Nätverkshantering",
"description": "Skrivskyddad diagnostik, analysrapporter med efterföljande förslag och guidade reparationer för den klassiska nätverksstacken i Debian/Proxmox. Varje destruktiv åtgärd tar först en säkerhetskopia och visar de exakta ändringarna innan de tillämpas.",
"section": "Nätverk"
},
"intro": {
"title": "Vad menyn används till",
"body": "Inspektera, diagnostisera och vid behov reparera Proxmox-värdens nätverkskonfiguration utan att förlora fjärråtkomsten. Verktygen följer en princip: <strong>läs först, föreslå sedan och tillämpa endast med uttryckligt samtycke och en säkerhetskopia</strong>. Det finns ingen knapp som automatiskt åtgärdar allt."
},
"openingMenu": {
"heading": "Öppna menyn",
"intro": "Välj <strong>Nätverk</strong> i ProxMenux huvudmeny. Då visas följande:",
"imageAlt": "Nätverkshanteringsmenyn med alternativ för diagnostik, övervakning, analys, reparation, beständiga namn och säkerhetskopiering"
},
"safety": {
"heading": "Säkerhetsmodellen",
"body": "Att redigera nätverkskonfigurationen på en fjärransluten Proxmox-värd är ett av de enklaste sätten att låsa sig ute. ProxMenux tar hänsyn till det vid varje åtgärd. Verktygen delas in i tre nivåer efter hur de fungerar — välj det kort som motsvarar ditt mål:"
},
"tiers": {
"readOnly": {
"title": "Skrivskyddad",
"body": "Ren inspektion. Kan inte ändra systemet under några omständigheter.",
"items": [
"Routningstabell, anslutningstester, avancerad statistik",
"Trafikövervakning i realtid (iftop, iptraf-ng)",
"Bandbreddstest (iperf3)"
]
},
"analyze": {
"title": "Analysera, sedan föreslå",
"body": "Upptäcker problem, skriver ut en rapport med föreslagna skalkommandon och stannar sedan. Du avgör om du vill gå vidare till den guidade reparationen.",
"items": [
"Analys av bryggkonfiguration",
"Nätverkskonfigurationsanalys"
]
},
"apply": {
"title": "Tillämpa med säkerhetskopia",
"body": "Ändrar systemet. Tar alltid först en tidsstämplad säkerhetskopia av den berörda filen och visar en förhandsvisning innan den skriver.",
"items": [
"Beständiga gränssnittsnamn (.link-filer)",
"Manuell säkerhetskopiering, återställning och omstart av tjänsten"
]
}
},
"classicTitle": "Endast den klassiska stacken",
"classicBody": "Varje analys- och reparationsfunktion kontrollerar den aktiva nätverkshanteraren innan något ändras. Om värden kör <strong>netplan</strong>, <strong>systemd-networkd</strong> eller <strong>NetworkManager</strong> avbryts verktyget omedelbart med ett tydligt meddelande — menyn stöder endast den klassiska Debian/Proxmox-stacken i <code>/etc/network/interfaces</code>. Det är avsiktligt: att redigera en netplan-fil enligt regler för <code>ifupdown</code> skulle skada konfigurationen utan att det märks.",
"backups": {
"heading": "Var säkerhetskopiorna sparas",
"intro": "Varje guidad reparation, återställning eller manuell säkerhetskopia skriver en tidsstämplad kopia av <code>/etc/network/interfaces</code> till <code>/var/backups/proxmenux/</code>:",
"rollbackIntro": "Så återställer du manuellt från en konsol:"
},
"readOnlySection": {
"heading": "Skrivskyddad inspektion",
"body": "Börja här när något verkar fel. Ren inspektion — skriver aldrig till <code>/etc/network/interfaces</code> och kör aldrig kommandon som ändrar systemet, med ett uttryckligt undantag: fullständig borttagning av NetworkManager, om det upptäcks, kräver ditt samtycke. Kan användas säkert via SSH när som helst.",
"options": [
{
"title": "Diagnostik",
"description": "Tre enstaka skrivskyddade kontroller: Visa routningstabell, Testa anslutning och Avancerad diagnostik. Ren inspektion — skriver aldrig till systemet."
},
{
"title": "Övervakningsverktyg i realtid",
"description": "Tre interaktiva verktygsstartare: iftop (bandbredd i realtid per värdpar), iptraf-ng (trafikövervakning med flera lägen) och iperf3 (bandbreddstest i server- eller klientläge)."
}
]
},
"analyzeSection": {
"heading": "Analysera, sedan föreslå",
"body": "Används när en inspektion eller ett verkligt avbrott pekar på ett konfigurationsproblem. Varje verktyg granskar den relevanta delen av <code>/etc/network/interfaces</code>, skriver ut en detaljerad rapport med det exakta skalkommando som skulle åtgärda varje problem och <strong>stannar</strong>. Om du därefter godkänner den valfria guidade reparationen säkerhetskopieras och förhandsvisas varje ändring innan den skrivs.",
"options": [
{
"title": "Brygganalys och guidad reparation",
"description": "Upptäcker vmbrX-bryggor med saknade eller ogiltiga portar, vilket är vanligt efter omnumrering av PCI-enheter. Visar först en rapport och reparerar endast om du godkänner det guidade flödet med 5 steg."
},
{
"title": "Konfigurationsanalys och guidad rensning",
"description": "Hittar fysiska gränssnitt som deklareras i /etc/network/interfaces men inte längre finns, alltså överblivna konfigurationer efter maskinvaruändringar. Rapporterar dem och erbjuder guidad borttagning."
}
]
},
"applySection": {
"heading": "Tillämpa med säkerhetskopia",
"body": "Dessa verktyg är avsedda att skriva till disk. Varje verktyg tar först en tidsstämplad säkerhetskopia av den berörda filen, och destruktiva alternativ som återställning och omstart kräver ett uttryckligt ja/nej-svar. <em>Beständiga gränssnittsnamn</em> börjar gälla vid nästa omstart, inte omedelbart, så inställningen kan planeras säkert även på en fjärransluten värd.",
"options": [
{
"title": "Beständiga gränssnittsnamn",
"description": "Binder gränssnittsnamn (eno1, enp3s0, …) till MAC-adresser via systemds .link-filer. Namnen består när PCI-kort byter plats, kärnan uppgraderas och andra nätverkskort läggs till eller tas bort."
},
{
"title": "Säkerhetskopiering och omstart av gränssnitt",
"description": "Ta en manuell ögonblicksbild av /etc/network/interfaces, bläddra bland och återställ tidigare säkerhetskopior, visa den aktuella konfigurationen och starta om nätverkstjänsten vid behov."
}
]
},
"consoleTitle": "Ha konsolåtkomst redo",
"consoleSubTitle": "Före varje reparation på en fjärransluten värd",
"consoleBody": "Om du är ansluten via SSH och bara har en åtkomstväg till värden bör du ha en reservväg redo innan du ändrar nätverket: fysisk konsol / IPMI / iKVM eller en annan dator i samma LAN. De guidade reparationerna är säkra och erbjuder alltid ett kommando för att återställa ändringarna, men en felkonfigurerad brygga eller en bruten länk kan ändå låsa dig ute tills du kommer åt konsolen."
}
@@ -0,0 +1,136 @@
{
"meta": {
"title": "Övervakningsverktyg i realtid | ProxMenux-dokumentation",
"description": "Tre interaktiva startare för nätverksverktyg: iftop (bandbredd i realtid per värdpar), iptraf-ng (trafikövervakning med flera lägen) och iperf3 (bandbreddstest i server- eller klientläge). Varje verktyg installeras vid första användningen.",
"ogTitle": "Övervakningsverktyg i realtid | ProxMenux-dokumentation",
"ogDescription": "Interaktiv nätverksövervakning och bandbreddstestning för Proxmox värd: iftop, iptraf-ng, iperf3."
},
"header": {
"title": "Övervakningsverktyg i realtid",
"description": "Tre interaktiva verktygsstartare för nätverksövervakning i realtid och bandbreddsmätning: iftop, iptraf-ng och iperf3. Varje verktyg installeras automatiskt via apt vid första användningen, körs i förgrunden och avslutas med den angivna tangenten. De ändrar inte värdens nätverkskonfiguration; iperf3 genererar testtrafik.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "Tre interaktiva övervakningsverktyg, var och en bakom sin egen meny. Första gången du startar ett installeras paketet tyst via <code>apt-get</code>. Efterföljande lanseringar börjar omedelbart. Inget av dessa verktyg ändrar värdnätverkskonfigurationen."
},
"when": {
"heading": "När du ska använda vilken",
"headerQuestion": "Fråga",
"headerUse": "Använd",
"rows": [
{
"question": "Vem mättar länken <em>just nu</em>?",
"use": "iftop"
},
{
"question": "Hur ser fördelningen per protokoll, paketstorlekarna och TCP-flödena ut?",
"use": "iptraf-ng"
},
{
"question": "Hur mycket bandbredd är faktiskt tillgänglig mellan två värdar?",
"use": "iperf3"
}
]
},
"iftop": {
"heading": "Nätverksanvändning i realtid (iftop)",
"body": "Bandbredd i realtid per värdpar (källa ↔ destination) — som <code>top</code> för trafik. Visar de största flödena överst med glidande medelvärden över 2/10/40 sekunder. Bästa verktyget för frågan <em>”Varför är min upplänk mättad?”</em>.",
"exit": "<strong>Avsluta:</strong> tryck på <kbd>q</kbd>. ProxMenux visar en påminnelse före start.",
"keysTitle": "Användbara tangenter i iftop",
"keysBody": "<kbd>n</kbd> växlar DNS-uppslagning, <kbd>p</kbd> visar portnummer, <kbd>P</kbd> pausar visningen, <kbd>t</kbd> växlar radens riktning (skickat / mottaget / båda), <kbd>1</kbd>/<kbd>2</kbd>/<kbd>3</kbd> sorterar efter medelvärdet över 2 s / 10 s / 40 s. Se <code>man iftop</code> för hela listan."
},
"iptraf": {
"heading": "Nätverksövervakningsverktyg (iptraf-ng)",
"intro": "En menystyrd trafikövervakare med flera lägen. iftop svarar på <em>”vem”</em>, medan iptraf-ng svarar på <em>”vad”</em>: antal byte och paket per protokoll, spårning av TCP-anslutningars tillstånd, histogram över paketstorlekar och LAN-aktivitet per station.",
"menuIntro": "Vid start visas en meny med fem alternativ:",
"headerMode": "Läge",
"headerUseFor": "Använd den för",
"rows": [
{
"mode": "IP traffic monitor",
"useFor": "Lista i realtid över TCP-/UDP-/ICMP-/övriga IP-flöden med byteräknare och anslutningstillstånd"
},
{
"mode": "General interface stats",
"useFor": "Samlat antal IPv4-/IPv6-/TCP-/UDP-/ICMP-/icke-IP-paket per nätverkskort"
},
{
"mode": "Detailed interface stats",
"useFor": "Samma som ovan men för ett gränssnitt, med paketstorlek och hastighetsdetalj"
},
{
"mode": "Statistical breakdowns",
"useFor": "Histogram över paketstorleksfördelningen per TCP-/UDP-port"
},
{
"mode": "LAN station monitor",
"useFor": "Per-MAC trafikstatistik för den lokala sändningsdomänen"
}
],
"exit": "<strong>Avsluta:</strong> tryck på <kbd>x</kbd> i valfri vy eller <kbd>Q</kbd> i huvudmenyn. ProxMenux visar en påminnelse före start.",
"logTitle": "Logga insamlade data till fil",
"logBody": "Varje läge erbjuder loggning av insamlad statistik till <code>/var/log/iptraf-ng/</code>. Om du behöver dokumentera en trafikspik kan du låta verktyget köra, logga till fil och granska filen efteråt i stället för att försöka läsa skärmen i realtid."
},
"iperf3": {
"heading": "Bandbreddstest (iperf3)",
"intro1": "Mäter den faktiska TCP-genomströmningen mellan två värdar. Till skillnad från iftop / iptraf-ng, som observerar befintlig trafik, genererar iperf3 syntetisk trafik för att belastningstesta länken. Oumbärligt för frågor som <em>”Når min 10 GbE-länk verkligen 10 GbE?”</em> eller <em>”Är nätverkskortet, switchen eller lagringen flaskhalsen?”</em>.",
"intro2": "iperf3 är ett <strong>verktyg för två värdar</strong>: den ena kör som server och lyssnar på TCP-port 5201, den andra som klient som ansluter, skickar data och skriver ut hastigheten. ProxMenux-startaren frågar vilket läge du vill använda:",
"headerMode": "Läge",
"headerBehaviour": "Beteende",
"headerCli": "Motsvarande CLI-kommando",
"rows": [
{
"mode": "Server",
"behaviour": "Lyssnar på TCP 5201 och skriver ut resultat för varje inkommande test. Slutar på Ctrl+C.",
"cli": "iperf3 -s"
},
{
"mode": "Klient",
"behaviour": "Frågar efter serverns IP-adress eller värdnamn, ansluter, kör standardtestet på 10 sekunder och skriver ut rapporten.",
"cli": "iperf3 -c <target>"
}
],
"workflowIntro": "Typiskt arbetsflöde för att testa en 10 GbE länk mellan två Proxmox värdar:",
"workflow": [
"Öppna nätverksmenyn på värd A → <em>Bandbreddstest (iperf3)</em> → välj <strong>Server</strong>.",
"Öppna samma menyalternativ på värd B → välj <strong>Klient</strong> → ange IP-adressen för värd A.",
"Vänta 10 sekunder. Jämför den rapporterade hastigheten med länkens teoretiska maximum."
],
"sample": "Exempel på klientutdata:",
"flagsTitle": "Användbara manuella flaggor (kör från ett skal)",
"flagsBody": "<code>-t 60</code> längre test (60 s i stället för 10 s), <code>-P 4</code> 4 parallella strömmar (mättar länken snabbare), <code>-R</code> omvänd riktning (server → klient), <code>-u -b 100M</code> UDP-test med 100 Mbit/s (mätning av jitter och paketförlust), <code>-p 5202</code> annan port (flera tester parallellt). Se <code>man iperf3</code> för hela listan.",
"firewallTitle": "Öppna brandväggsporten på servern",
"firewallBody": "Servern lyssnar på TCP <strong>5201</strong> som standard. Om du kör servern i en Proxmox-värd med en strikt brandvägg (datacenter eller värdnivå), låt inkommande TCP 5201 från klientens IP för testets varaktighet, stäng sedan den igen. Samma gäller för <code>nftables</code> / <code>iptables</code> på bara värdar."
},
"install": {
"heading": "Första lanseringen installerar paketet",
"body": "Alla tre startare kontrollerar om programmet finns och kör annars <code>apt-get update -qq &amp;&amp; apt-get install -y &lt;pkg&gt;</code>. Installationen sker utan utdata: menyn kan verka frusen i 10–30 sekunder första gången. Senare starter sker omedelbart."
},
"troubleshoot": {
"heading": "Felsökning",
"hangTitle": "Installationen fastnar vid första start",
"hangBody": "Värden har inget internet eller apt repos är oåtkomliga. Avbryt med <kbd>Ctrl</kbd>+<kbd>C</kbd>, kör <code>apt-get update</code> manuellt för att se det faktiska felet (DNS, repo signatur, proxy ...), sedan komma tillbaka till menyn.",
"refusedTitle": "iperf3-klient: ”unable to connect to server: Connection refused”",
"refusedBody": "Antingen körs inte servern eller så blockerar dess brandvägg TCP 5201. Kontrollera på servern med <code>ss -tlnp | grep 5201</code> — det ska visa att iperf3 lyssnar. Om den lyssnar men klienten fortfarande misslyckas, kontrollera brandväggarna på vägen mellan de två värdarna.",
"slowTitle": "iperf3 rapporterar mycket lägre hastighet än förväntat för länken",
"slowBody": "Vanliga orsaker i sannolikhetsordning: (1) en av värdarnas CPU begränsar hastigheten — prova <code>iperf3 -c &lt;target&gt; -P 4</code> för att använda flera kärnor; (2) trafiken passerar en långsammare länk, till exempel en gigabitswitch mellan två 10 GbE-kort; (3) olika MTU — kontrollera <code>ip link show</code> i båda ändarna; (4) avstängd NIC offloading — se communityskriptet <em>Disable NIC Offloading</em> om du har ett Intel e1000e-kort.",
"noTrafficTitle": "iftop / iptraf-ng visar ingen trafik för en upptagen värd",
"noTrafficBody": "Standardfångst är på det första upptäckta gränssnittet. Ange rätt från skalet: <code>iftop -i vmbr0</code> eller <code>iptraf-ng -i vmbr0</code>. Menyn launcher använder standarden; för icke-standardgränssnitt, kör från en konsol."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Diagnostik",
"href": "/docs/network/diagnostics",
"tail": " — de enstaka skrivskyddade kontrollerna (routning, anslutning och avancerad statistik)."
},
{
"label": "Brygganalys och guidad reparation",
"href": "/docs/network/bridge-analysis",
"tail": " — när övervakningen visar att ett gränssnitt eller en brygga inte fungerar som det ska."
}
]
}
}
@@ -0,0 +1,130 @@
{
"meta": {
"title": "Beständiga gränssnittsnamn | ProxMenux-dokumentation",
"description": "Bind Proxmox-gränssnittsnamn (eno1, enp3s0, …) till MAC-adresser via systemds .link-filer så att namnen består vid omnumrering av PCI-enheter, kärnuppgraderingar och när andra nätverkskort läggs till eller tas bort.",
"ogTitle": "Beständiga gränssnittsnamn | ProxMenux-dokumentation",
"ogDescription": "Förhindra att Proxmox gränssnittsnamn ändras när du ändrar maskinvaran. Använder systemds .link-filer med matchning på MAC-adress."
},
"header": {
"title": "Beständiga gränssnittsnamn",
"description": "Skapar en .link-fil för systemd per fysiskt nätverkskort som binder det kärntilldelade namnet till kortets MAC-adress. När detta tillämpats efter nästa omstart förblir gränssnittsnamnen stabila när du lägger till, tar bort eller flyttar PCIe-kort.",
"section": "Nätverk"
},
"intro": {
"title": "Vad detta gör",
"body": "För varje fysisk NIC på värden, skriver en liten fil under <code>/etc/systemd/network/10-&lt;iface&gt;.link</code> som säger: <em> \"enheten med denna MAC måste alltid kallas detta namn\" </em>. systemd-udevd tillämpar regeln vid varje start, innan <code>ifupdown</code> läser <code>/etc/network/interfaces</code>."
},
"problem": {
"heading": "Problemet detta löser",
"intro": "Linux härleder standardnamn för gränssnitt från PCI-topologin — <code>eno1</code> = inbyggt nätverkskort, <code>enp3s0</code> = kortet på PCI-buss 3, plats 0 osv. Namnschemat är deterministiskt <em>vid samma maskinvaruplacering</em>. Ändras placeringen kan namnen ändras:",
"items": [
"Lägg till en GPU före ett befintligt nätverkskort → nätverkskortets bussnummer kan ändras → namnet ändras.",
"Flytta ett kort till en annan PCIe slot → namnändringar.",
"BIOS-/UEFI-uppdatering som numrerar om enheter → namnen kan ändras.",
"Ersätt ett felaktigt kort med samma modell i en annan slot → namnändringar."
],
"outro": "Efter en sådan ändring refererar <code>/etc/network/interfaces</code> fortfarande till det <em>gamla</em> namnet. Bryggan kan inte aktiveras och värden förlorar nätverksanslutningen. Beständiga namn förhindrar att detta händer igen."
},
"howWorks": {
"heading": "Hur det fungerar",
"arrowLabel": "per nätverkskort",
"nodes": {
"detectLabel": "Identifiera fysiska nätverkskort",
"detectDetail": "ls /sys/class/net/\nuteslut vmbr / bond /\ndocker / veth / wireguard …",
"readLabel": "Läs varje MAC",
"readDetail": "cat /sys/class/net/\n '<'iface'>'/address",
"writeLabel": "Skriv .link-fil",
"writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link"
},
"minimalIntro": "Varje genererad fil är avsiktligt minimal:",
"minimalOutro": "Vid start matchar systemd-udevd enheten på MAC-adress och tilldelar det begärda namnet <em>innan</em> andra komponenter (ifupdown, kärnans standardnamngivning) kommer åt den. Filprefixet <code>10-</code> ser till att reglerna läses in tidigt, före standardfilen <code>99-default.link</code>."
},
"scope": {
"heading": "Vad som skrivs och vad som hoppas över",
"headerType": "Typ",
"headerBehaviour": "Beteende",
"headerWhy": "Varför",
"rows": [
{
"type": "Inbyggt nätverkskort / PCIe-nätverkskort",
"behaviour": "<code>.link</code>-fil skrivs",
"why": "Motsvarar en verklig PCI-enhet — det fall verktyget är avsett för"
},
{
"type": "Wi-Fi (phy80211)",
"behaviour": "<code>.link</code>-fil skrivs",
"why": "Har en verklig MAC-adress och gynnas av ett stabilt namn"
},
{
"type": "Bryggor (vmbrX)",
"behaviour": "Överhoppad",
"why": "Virtuell; namn kommer från <code>/etc/network/interfaces</code>"
},
{
"type": "Bondgränssnitt (bondX)",
"behaviour": "Överhoppad",
"why": "Virtuellt; bondgränssnittets namn anges av ifupdown"
},
{
"type": "veth / docker0 / br-XXXX",
"behaviour": "Överhoppad",
"why": "Skapas vid behov av Docker / LXC — ingen beständig maskinvara"
},
{
"type": "tap / fwpr / fwln",
"behaviour": "Överhoppad",
"why": "Skapas vid behov av Proxmox för varje VM/CT"
},
{
"type": "WireGuard / Cilium / Tailscale",
"behaviour": "Överhoppad",
"why": "Programvarugränssnitt som hanteras av sina egna daemoner"
}
]
},
"safety": {
"heading": "Säkerhetsnät: tidigare .link-filer backas upp",
"intro": "Om <code>/etc/systemd/network/</code> redan innehåller <code>.link</code>-filer från en tidigare körning eller andra verktyg kopieras de till en tidsstämplad säkerhetskopieringskatalog innan de nya skapas:",
"outro": "För att rulla tillbaka: kopiera filerna tillbaka från backupkatalogen och starta om.",
"rebootTitle": "Börjar gälla vid nästa omstart, inte omedelbart",
"rebootBody": "Ändringar i <code>.link</code>-filer tillämpas endast vid start, när udev räknar upp enheterna på nytt. Därför rapporterar verktyget <em>”Ändringarna tillämpas efter omstart”</em>. Namnbyte på ett aktivt gränssnitt är riskabelt och försöks inte: en aktiv <code>vmbr0</code> med medlemsgränssnitt skulle behöva konfigureras om atomärt. Åtgärden skjuts därför upp till nästa rena start."
},
"afterReboot": {
"heading": "Efter omstarten",
"intro": "När namnen är beständigt bundna är arbetsflödet för framtida maskinvaruändringar enkelt:",
"items": [
"Stäng av, ändra maskinvaran (lägg till kort, byt plats, …) och starta.",
"Varje NIC håller sitt tidigare namn eftersom dess MAC matchar en <code>.link</code>-fil.",
"Om ett nätverkskort ersätts med ett som har en annan MAC-adress får det ett standardnamn från kärnan (<code>enp&lt;bus&gt;s&lt;slot&gt;</code>). Kör menyn igen för att lägga till en <code>.link</code>-post för det nya kortets MAC-adress."
]
},
"troubleshoot": {
"heading": "Felsökning",
"emptyTitle": "\"Inga fysiska gränssnitt hittades\" efter att ha kört verktyget",
"emptyBody": "Kärnan ser inga gränssnitt som bygger på PCI / phy80211 på värden. Kontrollera med <code>ls -l /sys/class/net/</code> — varje post ska ha antingen en symbolisk länk <code>device</code> (PCI) eller en post <code>phy80211</code> (Wi-Fi). Om båda saknas för ett verkligt nätverkskort är drivrutinen inte inläst.",
"noChangeTitle": "Efter omstarten ändrades inte namnen som förväntat.",
"noChangeBody": "Kontrollera att filen finns och är korrekt formaterad: <code>cat /etc/systemd/network/10-&lt;iface&gt;.link</code>. Kontrollera sedan udev-loggarna: <code>journalctl -u systemd-udevd -b | grep -i link</code>. En vanlig orsak är en kvarvarande kärnparameter <code>net.ifnames=0</code> som helt inaktiverar förutsägbara namn — ta bort den från <code>/etc/default/grub</code>, kör <code>update-grub</code> och starta om.",
"undoTitle": "Jag vill ångra beständig namngivning",
"undoBody": "Radera antingen <code>.link</code>-filerna (<code>rm /etc/systemd/network/10-*.link</code>) eller återställ dem från säkerhetskopieringskatalogen som skapades vid föregående körning. Starta om för att tillämpa ändringen."
},
"related": {
"heading": "Relaterat",
"items": [
{
"label": "Brygganalys och guidad reparation",
"href": "/docs/network/bridge-analysis",
"tailRich": " — återställningsvägen när namnen <em>redan</em> har ändrats."
},
{
"label": "Konfigurationsanalys och guidad rensning",
"href": "/docs/network/config-analysis",
"tail": " — för att ta bort föräldralösa block kvar efter namnskiften."
},
{
"label": "Diagnostik",
"href": "/docs/network/diagnostics",
"tailRich": " — bekräfta de nya namnen med <em>Visa routningstabell</em> efter omstart."
}
]
}
}
@@ -0,0 +1,171 @@
{
"meta": {
"title": "Så anpassas en OCI-avbildning | ProxMenux",
"description": "Från avbildningens arkiv och Compose-fil till en granskningsbar mall, en distributionsplan och en LXC direkt i Proxmox VE, utan Docker i containern."
},
"header": {
"title": "Så anpassas en OCI-avbildning",
"description": "Från avbildningens arkiv och Compose-fil till en granskningsbar mall, en distributionsplan och en LXC direkt i Proxmox VE, utan att installera Docker i containern.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "pipeline",
"title": "Anpassningsflödet",
"blocks": [
{
"mermaid": {
"chartCode": "flowchart LR\n A[\"{{repo}}\"] --> B[\"Compose + README\"]\n B --> C[\"{{converter}}\"]\n C --> D[\"{{template}}\"]\n D --> E{\"{{blockers}}\"}\n E -- \"{{no}}\" --> F[\"{{review}}\"]\n F --> D\n E -- \"{{yes}}\" --> G[\"{{plan}}\"]\n G --> H[\"pct create\"]\n H --> I[\"{{lxc}}\"]",
"labels": {
"repo": "Avbildningens arkiv",
"converter": "Konverterare",
"template": "JSON-mall",
"blockers": "Inga hinder?",
"no": "Nej",
"yes": "Ja",
"review": "Granskning / overlay",
"plan": "Distributionsplan",
"lxc": "LXC direkt i Proxmox VE"
}
}
},
{
"p": "Konverteraren läser avbildningen och Compose-filen som projektet publicerar och skapar en JSON-mall. Om krav ännu inte har kunnat anpassas och hindrar installationen granskas mallen innan den publiceras i katalogen. En fil med granskade anpassningar, en så kallad overlay, löser dessa hinder. Bara mallar utan kvarstående hinder erbjuds för installation."
}
]
},
{
"id": "template",
"title": "Vad mallen bevarar",
"blocks": [
{
"cards": {
"items": [
{
"icon": "archive",
"title": "Avbildningens identitet",
"body": "Arkiv, löpande uppdaterad tagg, arkitektur, fastställd digest och källrevision."
},
{
"icon": "braces",
"title": "Containerkontrakt",
"body": "Entrypoint, Cmd, miljö, användare, arbetskatalog, stoppsignal, portar och volymer."
},
{
"icon": "layers",
"title": "Anpassning till Proxmox VE",
"body": "Resurser, säkerhet, monteringspunkter, enheter, sysctls, hälsokontroller och de anpassningar som behövs för var och en, med motivering."
},
{
"icon": "shield",
"title": "Kompatibilitet",
"body": "Nycklar som stöds, krav som ännu inte anpassats och hindrar installationen samt status för varje validering."
}
]
}
}
]
},
{
"id": "sources",
"title": "OCI anger processen, Compose anger miljön",
"blocks": [
{
"table": {
"headers": [
"Källa",
"Exempel",
"Resultat i Proxmox VE"
],
"rows": [
[
"OCI-metadata",
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>",
"Proxmox VE importerar dem när CT:n skapas"
],
[
"Docker Compose",
"<code>environment</code>, <code>volumes</code>, <code>devices</code>",
"Miljöposter för LXC, <code>mpN</code> och <code>devN</code>"
],
[
"ProxMenux-profil",
"GPU, hälsokontroll, inloggningsuppgifter",
"Frågor och granskade anpassningar"
],
[
"Användare",
"VMID, lagring, nätverk",
"Instanskontraktet"
]
]
}
}
]
},
{
"id": "install",
"title": "Vad som händer under installationen",
"blocks": [
{
"steps": {
"items": [
{
"title": "Fastställ avbildningen",
"body": "Registret frågas, värdens arkitektur väljs och den exakta digest som den löpande uppdaterade taggen pekar på fastställs."
},
{
"title": "Hämta och verifiera",
"body": "Skopeo hämtar avbildningen som ett OCI-arkiv. Innan något skapas kontrolleras varje lager mot sin digest och packas upp. Om hämtningen är skadad görs ett nytt försök innan installationen avbryts."
},
{
"title": "Skapa filsystemet",
"body": "<code>pct create</code> skapar rootfs från arkivet och bevarar avbildningens officiella processmetadata."
},
{
"title": "Anslut resurserna",
"body": "Deklarerade volymer, nätverk, miljö, enheter och säkerhetsprofiler kopplas in."
},
{
"title": "Konsol",
"body": "Containerns konsolutdata sparas på värden. Konsolen i Proxmox VE öppnar ett skal om avbildningen innehåller ett."
},
{
"title": "Kontrollera",
"body": "Vid första starten väntar installationen på en adress och på att tjänsten ska svara. Ett misslyckande rapporteras inte som en lyckad installation."
},
{
"title": "Registrera konfigurationen",
"body": "Den faktiska konfigurationen sparas i instanskontraktet som används vid uppdateringar och återskapande."
}
]
}
}
]
},
{
"id": "example",
"title": "Exempel: en avbildning med /config och /downloads",
"intro": "En vanlig Compose-definition och den Proxmox VE-konfiguration som den omvandlas till. Sökvägarna som programmet förväntar sig ändras inte.",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Docker Compose",
"code": "image: lscr.io/linuxserver/example:latest\nenvironment:\n - PUID=1000\n - PGID=1000\nvolumes:\n - config:/config\n - /srv/downloads:/downloads\nports:\n - 8080:8080"
},
{
"title": "/etc/pve/lxc/VMID.conf (utdrag)",
"code": "entrypoint: /init\nmp0: local-lvm:vm-VMID-disk-1,mp=/config,backup=1,size=8G\nmp1: /srv/downloads,mp=/downloads\nnet0: name=eth0,bridge=vmbr0,ip=dhcp,type=veth\nlxc.environment.runtime: PUID=1000\nlxc.environment.runtime: PGID=1000"
}
]
}
},
{
"p": "<code>mp0</code> är en andra disk som tillhör containern och heter <code>vm-VMID-disk-N</code> på den valda lagringen. Den monteras på <code>/config</code> och ingår i containerns säkerhetskopia med <code>backup=1</code>. <code>mp1</code> skapar ingen disk: värdens katalog <code>/srv/downloads</code> monteras på <code>/downloads</code> i LXC-containern. Port 8080 mappas inte: LXC-containern har en egen adress där tjänsten svarar."
}
]
}
]
}
@@ -0,0 +1,278 @@
{
"meta": {
"title": "Installera en avbildning utanför katalogen | ProxMenux",
"description": "Anpassa en OCI-avbildning från en Compose-fil, en URL, ett docker run-kommando eller en avbildningsreferens och granska vad ProxMenux kan återskapa före installationen."
},
"header": {
"title": "Installera en avbildning utanför katalogen",
"description": "Din avbildning anpassas från sin Compose-fil, ett docker run-kommando eller enbart referensen. Resultatet visas för granskning innan någon LXC-container skapas.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Samma konverterare och installationsflöde",
"body": "Alternativet <strong>Installera en avbildning utanför katalogen</strong> använder samma konverterare och installationsflöde som katalogmallarna. Skillnaden är att kontraktet skapas vid det tillfället från den angivna definitionen och valideras innan någon LXC-container skapas."
}
}
]
},
{
"id": "sources",
"title": "Så beskrivs avbildningen",
"intro": "Första vyn frågar hur avbildningen beskrivs. Fyra alternativ läser en definition som anpassas, ett femte använder bara avbildningens namn och tre andra läser en färdig oci-compose-fil.",
"blocks": [
{
"table": {
"headers": [
"Alternativ",
"Vad som läses"
],
"rows": [
[
"Klistra in Compose-filen i terminalen",
"Klistra in YAML-innehållet i terminalen och avsluta med Ctrl+D."
],
[
"Läs Compose-filen från värden",
"En sökväg på noden, som standard <code>/root/docker-compose.yml</code>. Filen måste finnas och får vara högst 256 KiB."
],
[
"Hämta Compose-filen från en adress",
"En <code>http://</code>- eller <code>https://</code>-adress som tillhandahåller rå YAML. Högst 256 KiB hämtas."
],
[
"Klistra in docker run-kommandot i terminalen",
"Kommandot som projektet publicerar. Portar, miljö, volymer, enheter, capabilities, användare, delat minne och andra alternativ som stöds anpassas."
],
[
"Bara avbildningsreferensen, utan Compose-fil",
"En referens som <code>ghcr.io/user/application:latest</code>. Registret frågas och avbildningens OCI-metadata bevaras."
],
[
"Klistra in en oci-compose i terminalen",
"Klistra in JSON-innehållet i terminalen och avsluta med Ctrl+D. Det konverteras inte utan kontrolleras och installeras som det är skrivet."
],
[
"Läs en oci-compose-fil från värden",
"En JSON-fil på noden, som standard <code>/root/oci-compose.json</code>, på högst 2 MiB."
],
[
"Hämta en oci-compose från en adress",
"En <code>http://</code>- eller <code>https://</code>-adress som tillhandahåller JSON-filen. Högst 2 MiB hämtas."
]
]
}
},
{
"figure": {
"src": "/oci-manager/custom-source-menu.png",
"alt": "Meny för att välja hur en avbildning utanför katalogen ska beskrivas",
"caption": "Olika sätt att beskriva en avbildning utanför katalogen."
}
}
]
},
{
"id": "reference-only",
"title": "Vad enbart avbildningsreferensen ger",
"intro": "Avbildningen innehåller processens metadata, men inte allt som en Compose-fil brukar lägga till runt den.",
"blocks": [
{
"table": {
"headers": [
"Läses från avbildningen",
"Finns inte i avbildningen",
"Konsekvens"
],
"rows": [
[
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>, <code>WorkingDir</code> och den inbyggda miljön",
"Variabler som bara finns i dokumentationen",
"Läggs till under installationen eller via Ändra"
],
[
"Volymer som avbildningen deklarerar",
"Kataloger på värden som bara anges i Compose-filen",
"Ytterligare sökvägar läggs till före installationen"
],
[
"<code>EXPOSE</code>-portar",
"URL, protokoll eller funktionell hälsokontroll",
"Porten och sättet att kontrollera tjänsten bekräftas"
],
[
"Arkitekturer och digest i registret",
"Enheter, privilegier eller externa beroenden",
"Aktiveras inte utan en definition som begär dem"
]
]
}
}
]
},
{
"id": "review",
"title": "Granska före installationen",
"intro": "Efter att definitionen anpassats visar ProxMenux hur den har tolkats, innan VMID, resurser eller lagring efterfrågas.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Analysera",
"body": "Tjänster, avbildning, portar, sökvägar, miljö, enheter, säkerhet och hälsokontroll läses in."
},
{
"title": "Fråga registret",
"body": "Avbildningen måste finnas i registret och de publicerade arkitekturerna listas. Ett privat register läses med kontot som sparats för det."
},
{
"title": "Lista det som inte tillämpas",
"body": "Etiketter, Docker-nätverk, Swarm-inställningar och andra nycklar som inte påverkar en LXC-container listas."
},
{
"title": "Blockera alternativ utan säker motsvarighet",
"body": "Nycklar utan säker motsvarighet visas under <strong>Alternativ utan motsvarighet</strong> och installationen fortsätter inte. Inget ignoreras utan besked."
},
{
"title": "Fråga efter hemliga uppgifter",
"body": "Variabler vars namn tyder på lösenord, token eller nyckel efterfrågas som känsliga uppgifter under installationen."
}
]
}
},
{
"figure": {
"src": "/oci-manager/custom-review.png",
"alt": "Sammanfattning av hur ProxMenux har tolkat Compose-filen",
"caption": "Sammanfattningen som visas innan installationen frågar efter VMID och resurser."
}
},
{
"p": "Efter att sammanfattningen godkänts följer samma flöde som i katalogen: namn, standardläge eller avancerat läge, VMID, CPU, minne, nätverk, start med noden, beständiga och extra sökvägar, kompatibla enheter och en slutlig sammanfattning."
}
]
},
{
"id": "examples",
"title": "Exempel på indata",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Compose",
"code": "services:\n app:\n image: ghcr.io/example/app:latest\n ports:\n - \"8080:8080\"\n volumes:\n - ./config:/config\n - /srv/media:/media\n environment:\n TZ: Europe/Madrid"
},
{
"title": "docker run",
"code": "docker run -d \\\n --name app \\\n -p 8080:8080 \\\n -e TZ=Europe/Madrid \\\n -v app-config:/config \\\n -v /srv/media:/media \\\n ghcr.io/example/app:latest"
}
]
}
}
]
},
{
"id": "oci-compose",
"title": "En oci-compose skriven för hand",
"intro": "En oci-compose är JSON-filen som ett program installeras från. Katalogen innehåller en sådan fil per program. Samma format kan skrivas för hand och installeras med det här alternativet.",
"blocks": [
{
"p": "I en handskriven fil bestämmer författaren avbildning, portar, variabler, volymer och installationsfrågor. ProxMenux kompletterar resten när filen läses. Formatet kan ange sådant som Compose inte kan: frågetexter, ett lösenord som skapas under installationen, en GPU-profil, ägaren till varje volym, kontrollen vid första starten eller inloggningsuppgifterna som visas till sist."
},
{
"steps": {
"items": [
{
"title": "Kontrollera",
"body": "En fil med fel installeras inte. Varje fel anger vilket fält det gäller; vid ogiltig JSON visas rad och kolumn."
},
{
"title": "Granska",
"body": "En giltig fil visar vad den installerar: avbildning, webbadress, portar, beständiga sökvägar, variabler som efterfrågas och filer som skrivs."
},
{
"title": "Installera",
"body": "Installationen är densamma som för katalogens program, med standardinställningar eller avancerade inställningar."
}
]
}
},
{
"calloutWarning": {
"title": "En fil som bestämmer privilegierna",
"body": "En oci-compose bestämmer vad som monteras i containern och med vilka privilegier. Granskningen visar detta före installationen: installera bara filer från betrodda källor."
}
},
{
"p": "Formatet beskrivs block för block med två fullständiga exempel i <readmeLink>OCI-motorns README</readmeLink>. Även en installationspost kan läsas på samma sätt: bara den ursprungliga mallen används, inga av svaren från den installationen."
}
]
},
{
"id": "private-registries",
"title": "Avbildningar i privata register",
"intro": "En avbildning i ett privat register, till exempel ett privat GitHub-paket eller ett privat Docker Hub-arkiv, läses med ett konto som sparats i ProxMenux.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Registret nekar åtkomst till avbildningen",
"body": "Om registret svarar att avbildningen kräver ett konto erbjuder granskningen inloggning och läser sedan avbildningen igen."
},
{
"title": "Logga in",
"body": "Ett användarnamn och ett lösenord eller en token som får hämta avbildningen. Registret kontrollerar uppgifterna och de sparas bara om de godkänns."
},
{
"title": "Installera och håll uppdaterat",
"body": "Kontot används för att hämta avbildningen under installationen och även vid uppdatering, Ändra, Återskapa, watchdog och Monitors uppdateringskontroll, på alla noder i klustret."
}
]
}
},
{
"p": "<strong>Registerkonton</strong> i huvudmenyn för OCI manager Apps visar sparade konton per register och användare, aldrig deras hemliga uppgifter. Från varje konto kan du kontrollera, hämta eller installera en avbildning samt uppdatera eller ta bort inloggningsuppgifterna."
},
{
"list": {
"items": [
"GitHub (<code>ghcr.io</code>): användaren är GitHub-kontot och lösenordet en personlig åtkomsttoken med behörigheten <code>read:packages</code>.",
"Docker Hub (<code>docker.io</code>): användaren är Docker Hub-kontot och lösenordet en åtkomsttoken med läsbehörighet.",
"Andra register, även med egen port som <code>registry.example.com:5000</code>: användarnamn och lösenord eller token som registret tillhandahåller."
]
}
},
{
"calloutInfo": {
"title": "Var kontona sparas",
"body": "I <code>/etc/pve/priv/proxmenux/registry-auth.json</code>, läsbar bara av root, i samma mapp där Proxmox sparar lagringslösenord. <code>/etc/pve</code> delas mellan alla noder i klustret, så ett konto som läggs till på en nod används på alla. Värdens säkerhetskopia innehåller filen och avinstallation av ProxMenux tar bort den från alla noder."
}
}
]
},
{
"id": "limits",
"title": "Definitioner som inte installeras",
"blocks": [
{
"list": {
"items": [
"En Dockerfile utan publicerad avbildning: avbildningen måste först byggas och publiceras i ett OCI-register.",
"En Compose-fil med flera tjänster blockeras eftersom det här alternativet installerar en tjänst i en container, även om flera tjänster använder samma avbildning.",
"<code>configs</code>, externa hemligheter eller enhetsformat som inte kan anpassas entydigt.",
"Skalsubstitutioner som <code>$(command)</code>: ange det resulterande värdet direkt i stället.",
"Okända <code>docker run</code>-alternativ och <code>--env-file</code>: använd en Compose-fil med uttryckliga värden i stället."
]
}
}
]
}
]
}
@@ -0,0 +1,392 @@
{
"meta": {
"title": "Enheter och acceleration | ProxMenux",
"description": "Hur OCI manager Apps ger en OCI-container tillgång till GPU, NVIDIA, Coral, USB, FUSE och andra enheter som validerade inbyggda Proxmox VE-resurser."
},
"header": {
"title": "Enheter och acceleration",
"description": "GPU, NVIDIA, Coral, USB, FUSE och blockenheter blir validerade inbyggda Proxmox VE-resurser för containern.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "principle",
"title": "Enheten som programmet behöver, inte hela värden",
"blocks": [
{
"p": "En enhet som begärs av Compose-filen eller av applikationsprofilen blir en konkret <code>devN</code>-post eller LXC-montering. Be om en GPU, en USB-enhet eller en Coral gör inte containern privilegierad."
},
{
"flow": {
"nodes": [
{
"label": "Värdinventering",
"detail": "/dev/dri/renderD128\nGID 993 · Intel"
},
{
"label": "ProxMenux",
"detail": "tillverkare och\nbehörigheter kontrollerade"
},
{
"label": "LXC",
"detail": "samma enhet\neffektiv GID"
}
]
}
}
]
},
{
"id": "origin",
"title": "Varifrån enhetsbegäran kommer",
"blocks": [
{
"table": {
"headers": [
"Källa",
"Vad läses",
"Vad installationsprogrammet gör"
],
"rows": [
[
"Docker Compose",
"<code>devices</code>, <code>group_add</code>, <code>deploy.resources</code> och NVIDIA förfrågningar",
"Varje krav blir en begäran om enhet som visas för granskning"
],
[
"Katalogprofil",
"Programmets faktiska stöd för GPU, Coral, OpenCL, USB eller FUSE",
"Endast de alternativ som valideras för den avbildningen erbjuds"
],
[
"Avbildningens metadata och dokumentation",
"VA-API, Selkies, LinuxServer mods eller NVIDIA runtime",
"Dokumenterade variabler och förberedelser läggs till"
],
[
"Användarval",
"CPU endast, Intel/AMD, OpenCL, NVIDIA eller en valfri enhet",
"Urvalet lagras i instansavtalet"
]
]
}
},
{
"calloutWarning": {
"title": "Upptäckta enheter ansluts inte automatiskt",
"body": "Värden är inventerad, men endast enheter som deklareras av Compose-filen eller av en kompatibel profil erbjuds och bifogas. En GPU, USB-dongel eller Coral närvarande på värden är inte utsatt för varje LXC."
}
}
]
},
{
"id": "identify",
"title": "Hur värdenheten identifieras",
"intro": "Innan LXC modifieras läses enheten på värden och matchas mot den valda profilen.",
"blocks": [
{
"table": {
"headers": [
"Typ",
"Identitet",
"Validering"
],
"rows": [
[
"Intel/AMD DRM",
"<code>/dev/dri/renderD*</code> och <code>/sys/class/drm/NODE/device/vendor</code>",
"En teckenenhet med leverantör <code>0x8086</code> (Intel) eller <code>0x1002</code> (AMD)"
],
[
"AMD OpenCL",
"Rendernoden plus <code>/dev/kfd</code> när profilen behöver den",
"Existens, typ, leverantör, behörigheter och förklarad kompatibilitet"
],
[
"AMD ROCm",
"Rendernoden, <code>/dev/kfd</code> och generationen som beräkningsdrivrutinen rapporterar i <code>/sys/class/kfd/kfd/topology/nodes/*/properties</code>",
"En generation som programmets ROCm-avbildning innehåller beräkningskärnor för — de namngivna RDNA2-GPU:erna och nyare — erbjuds utan anpassning. Andra GPU:er i dessa familjer, till exempel Radeon 680M och 780M, erbjuds som experimentella och väljs aldrig som föreslaget alternativ: ROCm stöder dem inte officiellt, programmet presenterar dem som familjens generation (<code>HSA_OVERRIDE_GFX_VERSION</code>) och installeraren begär bekräftelse innan den större avbildningen hämtas. Äldre GPU:er, till exempel den integrerade grafiken i Ryzen 5000U, erbjuds inte och Immich fortsätter köra igenkänningen på CPU:n."
],
[
"NVIDIA",
"<code>nvidia-smi</code> och <code>nvidia-container-cli</code>",
"GPU, UUID, PCI buss, drivrutinsversion, Toolkit, <code>/dev/nvidia*</code> noder, binärer och bibliotek"
],
[
"Coral PCIe/M.2",
"<code>/dev/apex_N</code> och dess länk i <code>/sys/dev/char/MAJOR:MINOR</code>",
"Teckenenhetsnod, major/minor-nummer, ägare, GID och behörigheter"
],
[
"USB och seriell",
"<code>/dev/ttyUSB*</code>, <code>/dev/ttyACM*</code> eller <code>/dev/bus/usb/BBB/DDD</code>",
"Teckenenhetsnod; för USB även tillverkare, produkt och serienummer när sysfs publicerar dem"
],
[
"KVM, TUN, FUSE, video och generisk SCSI",
"<code>/dev/kvm</code>, <code>/dev/net/tun</code>, <code>/dev/fuse</code>, <code>/dev/videoN</code> eller <code>/dev/sgN</code>",
"Sökväg som stöds, nodtyp och effektiva behörigheter"
],
[
"Optisk enhet",
"<code>/dev/srN</code>",
"En blockenhet"
]
]
}
}
]
},
{
"id": "install",
"title": "Vad händer under installationen",
"blocks": [
{
"steps": {
"items": [
{
"title": "Mallen erbjuder sina profiler",
"body": "Till exempel CPU endast, Intel/AMD VA-API, AMD OpenCL, Intel OpenCL eller NVIDIA. Alternativen hör till avbildningen, inte till en vanlig meny."
},
{
"title": "En profil väljs",
"body": "Den anger enhetsnoder, miljö, moddar eller den körmiljö som programmet behöver."
},
{
"title": "En väg föreslås",
"body": "För DRM, <code>/dev/dri/renderD128</code>, som kan ändras på en värd med flera rendernoder. För USB eller seriell, är den specifika noden vald."
},
{
"title": "Validering",
"body": "Existens, typ, tillåten leverantör, behörigheter och GID kontrolleras. En missmatchning stoppar operationen."
},
{
"title": "Kontraktet är skrivet",
"body": "Sökväg, läge, GID, skrivåtkomst och profil sparas för uppdateringar och när containern skapas om."
},
{
"title": "Anslut och testa",
"body": "<code>pct set</code> lägger till <code>devN</code> inträde och åtkomst kontrolleras sedan inuti LXC. LinuxServer avbildningar kontrolleras också som användare <code>abc</code>."
}
]
}
}
]
},
{
"id": "config",
"title": "Hur det visas i LXC-konfigurationen",
"intro": "Exempelvärden: <code>dev0</code> och <code>dev1</code> är lediga platser som Proxmox VE tilldelar, och <code>renderD128</code>, <code>apex_0</code> samt GID beror på nodens maskinvara.",
"blocks": [
{
"codeGrid": {
"items": [
{
"title": "Intel/AMD VA-API",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=993,deny-write=0"
},
{
"title": "Coral PCIe/M.2",
"code": "dev0: path=/dev/apex_0,mode=0660,gid=GID,deny-write=0"
},
{
"title": "En specifik USB-enhet",
"code": "dev0: path=/dev/bus/usb/003/004,mode=0660,gid=GID,deny-write=0"
},
{
"title": "AMD OpenCL",
"code": "dev0: path=/dev/dri/renderD128,mode=0660,gid=GID,deny-write=0\ndev1: path=/dev/kfd,mode=0660,gid=GID,deny-write=0"
}
]
}
},
{
"p": "GID läses med <code>stat</code> på värden och skrivs till <code>devN</code>-posten; <code>render</code> och <code>video</code>-grupper antas inte ha ett fast nummer. Enheten håller samma <code>/dev</code>-väg inuti LXC, där programmets egna mekanismer letar efter det."
}
]
},
{
"id": "profiles",
"title": "Profiler en avbildning kan erbjuda",
"blocks": [
{
"table": {
"headers": [
"Profil",
"Resulterande konfiguration",
"Erbjuds när"
],
"rows": [
[
"Intel/AMD VA-API",
"Rendernod i <code>/dev/dri</code>",
"Applikationen stöder videoacceleration"
],
[
"OpenCL",
"Rendernod, <code>/dev/kfd</code> vid behov och den officiella modden",
"Avbildningen eller profilen dokumenterar den"
],
[
"NVIDIA",
"Värdens drivrutinsenheter och bibliotek",
"Värden har en fungerande drivrutin och NVIDIA Container Toolkit"
],
[
"Coral",
"<code>/dev/apex_0</code> eller USB buss",
"Profilen förklarar Coral Support (Frigate)"
],
[
"USB, seriell, FUSE",
"En enhet, ett validerat träd eller en LXC-funktion",
"Kontraktet begär det"
]
]
}
}
]
},
{
"id": "nvidia",
"title": "NVIDIA",
"blocks": [
{
"calloutWarning": {
"title": "Nodkrav: NVIDIA Container Toolkit",
"body": "En fungerande drivrutin på Proxmox VE är inte tillräckligt för att ge en NVIDIA GPU till en OCI-avbildning. OCI Manager Apps använder <code>nvidia-container-cli</code>, från NVIDIA Container Toolkit, för att identifiera enheterna och för att få binärer och bibliotek som matchar den laddade drivrutinen."
}
},
{
"p": "<nvidiaLink>ProxMenux NVIDIA-installerare</nvidiaLink> installerar NVIDIA Container Toolkit från NVIDIAs officiella arkiv tillsammans med drivrutinen. Den kontrollerar dess fyra paket, validerar <code>nvidia-container-cli</code> och registrerar resultatet i ändringsloggen för <auditLink>Audit & Report</auditLink>."
},
{
"p": "Dessa två kommandon på värden visar om drivrutinen och Toolkit är tillgängliga:"
},
{
"shell": {
"code": "nvidia-smi -L\nnvidia-container-cli --version"
}
},
{
"p": "På en värd där drivrutinen installerades på annat sätt installeras Toolkit från det officiella stabila förvaret:"
},
{
"shell": {
"code": "apt-get update\napt-get install -y --no-install-recommends ca-certificates curl gnupg2\n\ncurl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \\\n | gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg\n\ncurl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \\\n | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \\\n > /etc/apt/sources.list.d/nvidia-container-toolkit.list\n\napt-get update\napt-get install -y nvidia-container-toolkit libnvidia-container-tools"
}
},
{
"p": "Inventeringen OCI Manager Apps använder är utdata av:"
},
{
"shell": {
"code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs"
}
},
{
"calloutInfo": {
"title": "Docker runtime konfiguration är inte involverad",
"body": "Containrarna är inbyggda LXC:er utan Docker-demon, så <code>nvidia-ctk runtime configure --runtime=docker</code> ingår inte: ProxMenux frågar <code>nvidia-container-cli</code> direkt och skriver LXC-enheter och monteringar. Kommandon och plattformar som stöds underhålls i <toolkitLink>installationsguiden för NVIDIA Container Toolkit</toolkitLink>."
}
},
{
"cards": {
"items": [
{
"icon": "cpu",
"title": "Inventering från drivrutinen",
"body": "<code>nvidia-container-cli</code> listar enhetsnoder, binärer, firmware och bibliotek av den installerade drivrutinen."
},
{
"icon": "refresh",
"title": "Ingen fast version",
"body": "Mallen anger inga biblioteksfilnamn. Profilen genereras från den aktuella värden."
},
{
"icon": "shield",
"title": "Skrivskyddade monteringar",
"body": "Värdens bibliotek monteras skrivskyddat i stället för att kopieras till containern."
},
{
"icon": "hardDrive",
"title": "Ändringar av drivrutin",
"body": "Efter en drivrutinsändring genereras inventeringen på nytt innan berörda LXC:er startar."
}
]
}
},
{
"code": {
"title": "NVIDIA resultat (förenklad)",
"code": "devN: path=/dev/nvidia0,...\ndevN: path=/dev/nvidiactl,...\ndevN: path=/dev/nvidia-uvm,...\nlxc.mount.entry: HOST_LIBRARY CONTAINER_LIBRARY none ro,bind,create=file 0 0"
}
},
{
"p": "Att bara ge tillgång till <code>/dev/nvidia0</code> räcker inte. Den laddade drivrutinens användarkomponenter monteras skrivskyddat, och <code>nvidia-smi</code> körs sedan i LXC:n för att jämföra GPU, UUID, PCI-buss och version med värdens inventering."
}
]
},
{
"id": "usb",
"title": "USB, seriell och USB Coral",
"blocks": [
{
"calloutWarning": {
"title": "USB-nummer kan ändra",
"body": "En väg som <code>/dev/bus/usb/003/004</code> kan ändras när enheten är återansluten eller värden startar om. Profilen registrerar tillverkaren, produkten och serienumret när de är tillgängliga, men en ny bussadress mappas om inte automatiskt."
}
},
{
"p": "En kringutrustning anges med sin specifika nod: <code>/dev/ttyUSB0</code>, <code>/dev/ttyACM0</code>, <code>/dev/apex_0</code> eller <code>/dev/bus/usb/BBB/DDD</code>. Att passera hela <code>/dev</code> accepteras inte. Coral erbjuds endast program vars profil anger det."
}
]
},
{
"id": "trees",
"title": "Enhetsträd och LXC-funktioner",
"blocks": [
{
"table": {
"headers": [
"Begäran",
"Resulterande konfiguration",
"Omfattning"
],
"rows": [
[
"<code>/dev/dvb</code>, <code>/dev/snd</code> eller <code>/dev/bus/usb</code>",
"Varje teckenenhetsnod i trädet får en egen <code>devN</code>-post med värdens läge och GID",
"Endast det begärda trädet, inte resten av <code>/dev</code>"
],
[
"<code>/dev/fuse</code>",
"Noden och när profilen behöver den, funktionen <code>fuse=1</code>",
"FUSE offentliggör inte fästen till andra LXCs"
],
[
"<code>/dev/net/tun</code>",
"En <code>devN</code>-post med samma sökväg inuti LXC:n",
"VPN- eller nätverkskonfigurationen stannar i programmet"
],
[
"<code>/dev/kvm</code>",
"En validerad <code>devN</code>-post",
"Erbjuds endast när kontraktet begär det"
]
]
}
}
]
},
{
"id": "security",
"title": "Bekräftelser av risknivå",
"blocks": [
{
"p": "Konkreta enheter, valfri privilegiering, krävs privilegier, AppArmor eller seccomp avslappning och tillgång till värd PID-namnrymden behandlas som separata fall, inte under en generisk privilegierad etikett. Varje alternativ med en risk förklaras och bekräftas under installationen."
}
]
}
]
}
+213
View File
@@ -0,0 +1,213 @@
{
"meta": {
"title": "OCI manager Apps | ProxMenux",
"description": "Kör officiella OCI-avbildningar som LXC-containrar direkt i Proxmox VE, med beständiga data, enhetsåtkomst, program med flera containrar och transaktionsbaserade uppdateringar."
},
"header": {
"title": "OCI manager Apps",
"description": "Officiella OCI-avbildningar körs som inbyggda LXC-containrar i Proxmox VE. Avbildningen är fortfarande den som underhållaren publicerar; ProxMenux återskapar miljön som Docker Compose annars skulle ha skapat runt den.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "model",
"blocks": [
{
"calloutInfo": {
"title": "En OCI-avbildning, en LXC direkt i Proxmox VE",
"body": "Ingen Docker Engine körs i containrarna. Proxmox VE importerar avbildningens filsystem och OCI-metadata. Programmet blir huvudprocessen i en inbyggd LXC-container som hanteras med samma verktyg som övriga containrar på noden."
}
},
{
"flow": {
"nodes": [
{
"label": "Källa",
"detail": "OCI-avbildning\nCompose och dokumentation"
},
{
"label": "ProxMenux",
"detail": "JSON-kontrakt\nvalidering och planering"
},
{
"label": "Proxmox VE",
"detail": "LXC direkt i Proxmox VE\nvolymer och enheter"
}
],
"caption": "Programmet byggs inte om. Dess miljö beskrivs deklarativt och återskapas."
}
}
]
},
{
"id": "where",
"title": "Var du hittar det",
"intro": "Öppna <strong>OCI manager Apps (Technology Preview)</strong> i ProxMenux huvudmeny på Proxmox-noden som root. Den första vyn erbjuder:",
"blocks": [
{
"list": {
"items": [
"<strong>Sök program</strong> – sök efter namn i hela katalogen.",
"<strong>Alla program</strong> – visa hela katalogen och antalet program.",
"<strong>Hantera installerade OCI-program</strong> – uppdatera, ändra, ta bort eller återställ befintliga installationer.",
"<strong>Registerkonton</strong> – hantera konton för att installera och uppdatera avbildningar från privata register.",
"<strong>Installera en avbildning utanför katalogen</strong> – anpassa en Compose-fil, ett <code>docker run</code>-kommando eller en avbildningsreferens.",
"Katalogens kategorier, var och en med sitt antal program."
]
}
},
{
"figure": {
"src": "/oci-manager/main-menu.png",
"alt": "Huvudvyn i OCI manager Apps med sökning, hela katalogen, programhantering, avbildningar utanför katalogen och kategorier.",
"caption": "Huvudvyn i OCI manager Apps."
}
},
{
"p": "När du väljer ett program visas dess beskrivning, avbildningen som används och två installationslägen. <strong>Installera med standardinställningar</strong> frågar bara efter grundvalen: lagring, dataplacering, adress och start. <strong>Installera med avancerade inställningar</strong> går igenom alla val i ordning: VMID och resurser, lagring för varje sökväg, nätverksbrygga och enheter."
},
{
"p": "Program som faktiskt har testats visas som <strong>Verifierad</strong> i den här vyn och markeras med ✓ i listorna, oavsett om testet gjordes i ProxMenux labb eller av användargemenskapen."
}
]
},
{
"id": "beta",
"title": "Varför beteckningen Technology Preview används",
"blocks": [
{
"p": "OCI manager Apps behåller beteckningen <strong>Technology Preview</strong> som Proxmox VE använder för programcontainrar skapade från OCI-avbildningar. Stödet infördes i Proxmox VE 9.1. Beteckningen gäller tekniken som OCI manager Apps bygger på, inte ProxMenux-motorn: containrarnas beteende kan fortfarande ändras mellan Proxmox VE-versioner. Beteckningen behålls tills Proxmox VE bedömer att stödet är stabilt."
},
{
"p": "Funktionerna i OCI manager Apps testas i ProxMenux labb: installation, uppdatering, ändringar, återskapande, säkerhetskopiering, återställning, migrering och watchdog. Varje program testas separat. De som faktiskt har testats visas som <strong>Verifierad</strong> och markeras med ✓ i listorna."
}
]
},
{
"id": "translation",
"title": "Så beskriver Docker kraven och så omsätter OCI manager Apps dem",
"blocks": [
{
"table": {
"headers": [
"Krav",
"Så uttrycks det i Docker",
"Så omsätts det i OCI manager Apps"
],
"rows": [
[
"Kör programmet",
"<code>image</code>, <code>entrypoint</code>, <code>command</code>",
"OCI-avbildningens rootfs och LXC-containerns huvudprocess"
],
[
"Bevara konfigurationen",
"<code>volumes: /config</code>",
"En beständig <code>mpN</code>-volym som tas med i säkerhetskopian, eller en katalog på värden."
],
[
"Gör tjänsten tillgänglig",
"<code>ports</code>",
"En egen adress för LXC-containern och tjänstens åtkomst-URL."
],
[
"Använd maskinvara",
"<code>devices</code>, <code>group_add</code>",
"<code>devN</code>-poster med värdens effektiva grupp-ID (GID) och en validerad profil."
],
[
"Koppla ihop beroenden",
"<code>networks</code>, <code>depends_on</code>",
"En privat nätverksbrygga, fasta adresser, startordning och hälsokontroller."
],
[
"Uppdatera",
"Hämta med <code>pull</code> och återskapa",
"Ett nytt rootfs med samma kontrakt för beständiga data."
]
]
}
}
]
},
{
"id": "kept",
"title": "Vad som bevaras och vad som ändras",
"blocks": [
{
"cards": {
"items": [
{
"icon": "archive",
"title": "Bevaras",
"body": "Den officiella avbildningen, dess interna sökvägar, miljö, startprocess och användardokumentation."
},
{
"icon": "boxes",
"title": "Anpassas",
"body": "Körmiljön: nätverk, beständiga data, enheter, behörigheter och beroenden använder de inbyggda LXC-funktionerna i Proxmox VE."
},
{
"icon": "shield",
"title": "Utan motsvarighet",
"body": "Ett Compose-alternativ utan en säker motsvarighet markeras som ett hinder för installationen. Mallar med sådana hinder erbjuds inte för installation, och känsliga alternativ måste bekräftas i installationsguiden."
},
{
"icon": "refresh",
"title": "Sparas",
"body": "Avbildningens digest, resurser, sökvägar, nätverk, enheter och tillhörighet till en stack sparas i instanskontraktet. Uppdateringar och återskapande följer samma kontrakt."
}
]
}
}
]
},
{
"id": "pages",
"title": "Sidor i det här avsnittet",
"blocks": [
{
"next": {
"items": [
{
"label": "Så anpassas en OCI-avbildning",
"href": "/docs/oci-manager/architecture",
"tail": "Från avbildningen och dess Compose-fil till en LXC direkt i Proxmox VE."
},
{
"label": "Installera en avbildning utanför katalogen",
"href": "/docs/oci-manager/custom-image",
"tail": "En Compose-fil, ett docker run-kommando eller en avbildningsreferens."
},
{
"label": "Data, sökvägar och nätverk",
"href": "/docs/oci-manager/storage-network",
"tail": "Containervolymer, kataloger på värden, rclone-monteringar och adresser."
},
{
"label": "Enheter och acceleration",
"href": "/docs/oci-manager/hardware",
"tail": "GPU, NVIDIA, Coral, USB och andra enheter."
},
{
"label": "Program med flera containrar",
"href": "/docs/oci-manager/stacks",
"tail": "Program, databas och cache i samordnade LXC-containrar."
},
{
"label": "Installera, uppdatera och ändra",
"href": "/docs/oci-manager/lifecycle",
"tail": "Instanskontraktet och dess åtgärder."
},
{
"label": "I ProxMenux Monitor",
"href": "/docs/oci-manager/monitor",
"tail": "Versioner, uppdateringar, konsolutdata och terminal."
}
]
}
}
]
}
]
}
@@ -0,0 +1,499 @@
{
"meta": {
"title": "Installera, uppdatera och ändra | ProxMenux",
"description": "Instanskontraktet för en OCI-container och de åtgärder som använder det: uppdatering, ändring, borttagning, återupptagning av en avbruten åtgärd och återställning av driften efter en återläsning på denna eller en annan värd."
},
"header": {
"title": "Installera, uppdatera och modifiera",
"description": "Varje instans behåller ett reproducerbart kontrakt, så att dess rootfs kan ersättas utan att konfiguration eller beständiga data går förlorade.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "contract",
"title": "Instanskontraktet",
"blocks": [
{
"p": "Efter installationen sparas den faktiska konfigurationen i <code>/usr/local/share/proxmenux/oci/instances/VMID/oci-compose.json</code>. Det är inte en kopia av den ursprungliga Compose-filen, utan ett reproducerbart kontrakt för den LXC som finns på värden."
},
{
"code": {
"code": "instances/\n└── 105/\n └── oci-compose.json\n ├── image and resolved digest\n ├── resources and network\n ├── environment (secrets protected)\n ├── container disks and host directories\n ├── hardware profile and devices\n ├── console log and terminal mode\n └── stack membership and lifecycle"
}
},
{
"p": "En kopia av kontraktet finns i containern under <code>/.proxmenux/oci-record.json</code> och kan bara läsas av containerns root-användare. En säkerhetskopia av containern innehåller därför alltid det kontrakt som gällde då. En andra kopia sparas i <code>/etc/pve/priv/proxmenux/oci</code>, som delas av alla noder i klustret och bara kan läsas av värdens root-användare. Båda kopiorna skrivs efter varje installation, uppdatering och ändring."
}
]
},
{
"id": "manage",
"title": "Hantera installerade OCI-program",
"intro": "Det här alternativet på huvudskärmen listar registrerade instanser med tillhörande program och avbildning. Varje instans kontrolleras mot sitt kontrakt före varje åtgärd. En CT som inte längre stämmer med sin post varken ändras eller tas bort. Samma uppdatering och editor finns på fliken Uppdateringar i <monitorLink>ProxMenux Monitor</monitorLink>.",
"blocks": [
{
"table": {
"headers": [
"Alternativ",
"Vad ändras",
"Vad bevaras"
],
"rows": [
[
"Uppdatera avbildningen med sparad konfiguration",
"Rootfs ersätts med den avbildning som den sparade kanalen publicerar för närvarande",
"Kontrakt, containerdiskar, värdkataloger, nätverk och enheter"
],
[
"Ändra: redigera resurser, nätverk, sökvägar och GPU",
"Editorn öppnas med det aktuella kontraktet; CT:n byggs om med ändringarna",
"Data på containerdiskar och i värdkataloger"
],
[
"Watchdog: starta om programmet när det kraschar",
"Om programmet ska startas igen när det stannar av sig självt. Ingenting byggs om",
"Hela installationen; endast valet sparas i kontraktet"
],
[
"Ta bort: ta bort programmet och dess containrar",
"LXC, eller varje medlem i en stack, och deras kontrakt raderas",
"Värdkataloger, med deras innehåll"
]
]
}
},
{
"p": "För ett program med flera containrar erbjuder menyn <strong>Uppdatera alla programmets containrar</strong>, <strong>Ändra extra sökvägar och enheter</strong>, <strong>Återskapa alla containrar med sparad konfiguration</strong>, watchdog och borttagning. Ändra lägger till eller tar bort extra sökvägar och enheter i programcontainern utan att bygga om något och ändrar i Immich vad som kör igenkänningen. Återskapa bygger om varje container från den avbildning som användes vid installationen utan att söka efter en nyare."
},
{
"figure": {
"src": "/oci-manager/manage-menu.png",
"alt": "Lista över installerade OCI-program med alternativ för att uppdatera, ändra och ta bort",
"caption": "Hantera installerade OCI-program."
}
}
]
},
{
"id": "update",
"title": "En transaktionell uppdatering",
"blocks": [
{
"mermaid": {
"chartCode": "sequenceDiagram\n participant U as {{user}}\n participant P as ProxMenux\n participant R as {{registry}}\n participant X as Proxmox VE\n U->>P: {{update}}\n P->>R: {{resolve}}\n R-->>P: digest\n P->>P: {{verify}}\n P->>X: {{backup}}\n P->>X: {{import}}\n P->>X: {{reapply}}\n X-->>P: healthcheck\n alt {{healthy}}\n P-->>U: {{commit}}\n else {{failure}}\n P->>X: Rollback\n P-->>U: {{restored}}\n end",
"labels": {
"user": "Användare",
"registry": "OCI-registret",
"update": "Uppdatera instans",
"resolve": "Slå upp taggen",
"verify": "Verifiera arkivet och kör förkontroller",
"backup": "Stoppa och säkerhetskopiera CT:n",
"import": "Importera det nya rootfs",
"reapply": "Applicera kontraktet igen",
"healthy": "frisk",
"failure": "misslyckande",
"commit": "Kontraktet publiceras med den nya digesten",
"restored": "Tidigare instans återställd"
}
}
},
{
"list": {
"items": [
"Om registret fortfarande tillhandahåller den installerade digesten laddas ingenting ned och instansen lämnas orörd.",
"Den nya avbildningen verifieras lager för lager innan CT:n stoppas. En skadad nedladdning hämtas en andra gång; en redan cachad avbildning som inte klarar kontrollen laddas ned igen.",
"Inställningar som ändrats i Proxmox VE efter installationen (minne, swap, kärnor, CPU-gräns, CPU-prioritet och start med noden) bevaras och förs över till det nya kontraktet.",
"LAN-gränssnittet som Arr-sviten och multi-container-applikationerna lägger till (<code>net1</code>) och startordern (<code>startup</code>) ges tillbaka till den nya containern som de är.",
"Alla andra skillnader mellan CT och dess kontrakt stoppar uppdateringen innan CT stoppas."
]
}
},
{
"flow": {
"nodes": [
{
"label": "Före",
"detail": "rootfs A\n/config mp0\n/media värdkatalog"
},
{
"label": "Uppdatering",
"detail": "ersätter endast\nrootfs"
},
{
"label": "Efter",
"detail": "rootfs B\n/config mp0\n/media värdkatalog"
}
]
}
},
{
"p": "Innan något stoppas kontrolleras att det finns plats för säkerhetskopian: använda data på de volymer som ingår, plus en marginal. Den skrivs intill programmets post på värdens systemdisk. Om utrymmet inte räcker ber menyn om en annan lagring på värden som stöder säkerhetskopior. Kopian skapas där och tas bort när åtgärden är klar. Valet sparas för programmet, även för schemalagda uppdateringar. Om ingen lagring har tillräckligt med plats avvisas åtgärden och programmet förblir oförändrat. Utrymmet för den nya avbildningen kontrolleras på samma sätt före nedladdningen."
}
]
},
{
"id": "recovery",
"title": "Återställa en avbruten operation",
"intro": "En uppdatering och en förändring använder en ihållande transaktion. Om processen, terminalen eller noden avbryts efter CT-stoppen, är operationen inte färdig.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Markör för väntande åtgärd",
"body": "När Hantera installerade OCI-program öppnas visar det sparade tillståndet att ersättningen aldrig publicerades."
},
{
"title": "Visa status",
"body": "Visar den fas som uppnåddes utan att ändra containrar eller data."
},
{
"title": "Återställ den tidigare installationen",
"body": "Återläser den verifierade säkerhetskopia i plattformens eget format som togs före ersättningen samt det tidigare kontraktet."
},
{
"title": "Stackar som en enhet",
"body": "För en multicontainer-applikation återhämtas varje medlem från samma transaktionspunkt, inte bara den valda."
}
]
}
},
{
"calloutWarning": {
"title": "Värdkataloger ingår inte i återställningen",
"body": "Säkerhetskopian omfattar rootfs och de containerdiskar som ingår i den. En värdkatalog återställs inte till sitt tidigare tillstånd, eftersom andra LXC-containrar kan använda dess data."
}
}
]
},
{
"id": "watchdog",
"title": "Watchdog: starta om ett program som stannar",
"intro": "Proxmox har ingen omstartspolicy: när processen i en programcontainer avslutas förblir containern stoppad. Med watchdog aktiverad startas ett program som stannar av sig självt igen. För ett OCI-program gör den vad <code>restart: unless-stopped</code> gör i en Compose-fil.",
"blocks": [
{
"table": {
"headers": [
"Vad händer",
"Med Watchdog på"
],
"rows": [
[
"Programmet kraschar eller dess process avslutas",
"Containern startas igen inom några sekunder"
],
[
"Det stoppas eller stängs av från Proxmox, från Monitor eller med <code>pct</code>",
"Den förblir stoppad tills någon startar den"
],
[
"En backup, en migration eller en ProxMenux-operation arbetar med den",
"Ingenting görs förrän det slutar"
],
[
"Den var redan stoppad när värden startade",
"Den förblir stoppad; detta styrs av <strong>Starta med Proxmox</strong>"
],
[
"Den stannar upprepade gånger direkt efter start",
"För ett program som stannar inom några sekunder efter start, eller inte startar alls, görs fem startförsök med 30 sekunders, 1, 2 och 5 minuters väntan mellan försöken. Därefter lämnas det stoppat och en avisering skickas"
]
]
}
},
{
"p": "Installationsprogrammet frågar om detta i båda installationslägena och föreslår värdet från programmets recept. Inställningen kan senare ändras under <strong>Hantera installerade OCI-program</strong> eller med containerns <strong>Watchdog</strong>-reglage i <monitorLink>ProxMenux Monitor</monitorLink> och gäller alla containrar i ett program med flera containrar. En enda tjänst på värden, <code>proxmenux-oci-watchdog.service</code>, övervakar alla program som begärt det. Installationen visas på fliken Ändringar i Audit & Report."
},
{
"calloutInfo": {
"title": "Vad värden inte kan avgöra",
"body": "Programmets slutkod når inte värden, så ett normalt avslut och en krasch ser likadana ut och leder båda till omstart, som <code>always</code> och <code>unless-stopped</code> i Docker. Ett stopp som begärs utanför Proxmox med <code>lxc-stop</code> eller <code>systemctl</code> lämnar ingen stoppuppgift och tolkas som att programmet stannade av sig självt."
}
}
]
},
{
"id": "restore",
"title": "Backup, restaurering och en annan värd",
"intro": "En säkerhetskopia som görs med vzdump eller Proxmox Backup Server innehåller containern, de containerdiskar som valts för säkerhetskopiering och kopian av dess kontrakt. Det som installationen sparar på värden ingår inte. <strong>Hantera installerade OCI-program</strong> upptäcker containrar som återlästs på en värd utan deras kontrakt, efter en ny Proxmox-installation eller på en annan värd, och erbjuder att registrera dem igen.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Återställ containrarna i Proxmox",
"body": "Från säkerhetskopieringslagringen, med det ursprungliga ID:t eller ett annat ledigt ID. Ett program med flera containrar behöver samtliga sina containrar."
},
{
"title": "Öppna Hantera installerade OCI-program",
"body": "De återlästa containrarna listas och återställning erbjuds. Knappen <strong>Återställ</strong> på fliken Uppdateringar i <monitorLink>ProxMenux Monitor</monitorLink> öppnar samma återställning."
},
{
"title": "Kontrollera innan du ändrar",
"body": "Återställningen kontrollerar att värden har allt som varje program behöver. Ett program som inte kan återställas i sin helhet lämnas oförändrat och orsaken anges."
},
{
"title": "Registrera och starta",
"body": "Kontraktet registreras på den här värden och det som installationen sparade där skrivs på nytt. Om programmen ska startas är en separat fråga. Svara Nej om de ursprungliga containrarna fortfarande körs på en annan värd."
}
]
}
},
{
"figure": {
"src": "/oci-manager/restore-offer.png",
"alt": "Dialog som listar de restaurerade containrarna och erbjuder att återställa dem",
"caption": "Återställningen som erbjuds när Hantera installerade OCI-program öppnas."
}
},
{
"table": {
"headers": [
"Vad värden sparade",
"Efter återhämtningen"
],
"rows": [
[
"Instanskontrakt",
"Registreras från kopian i containern, som kontrolleras mot den konfiguration som Proxmox återläste"
],
[
"Privat nätverk av en multi-container-applikation",
"Skapad igen med samma bro och undernät; de fasta adresserna i containrarna ändras inte"
],
[
"Startorder för en multicontainer-applikation",
"Beroende hookscript och dess kontrakt installeras igen; snippets är aktiverade på <code>local</code> lagring när ingen lagring accepterar dem"
],
[
"Nätverks-sysctl och fil för värdövervakning",
"Skriven igen i <code>/etc/pve/proxmenux</code>"
],
[
"NVIDIA-körmiljö",
"Hooken för en oprivilegierad container installeras på nytt. En privilegierad container får den här värdens drivrutinsfiler i stället för filerna från ursprungsvärden"
],
[
"Rclone montering",
"Hookscriptet och de program som gör monteringen tillgänglig skrivs på nytt, med samma vyer på värden"
],
[
"Brandväggsregel på värden för en värdmonitor",
"Efterfrågas igen för dess webbport och bryggans undernät på den här värden"
],
[
"<code>lost+found</code> av varje återställd disk",
"Tas bort om den är tom; en återläsning skapar den och vissa program kan inte starta om den finns bland deras data"
],
[
"Diskar som återlästs till annan lagring",
"Kontraktet uppdateras till lagringen de är på nu"
]
]
}
},
{
"p": "En container som återlästs med ett annat ID behåller sitt program. Kontraktet, konsolloggen, nätverksparametrarna för sysctl, hookscriptet för en Rclone-montering och startordningen för ett program med flera containrar registreras med de ID:n som containrarna har på den här värden."
},
{
"table": {
"headers": [
"Vad hindrar en återställning",
"Vad du gör"
],
"rows": [
[
"En container av en multicontainer-applikation saknas",
"Återläs den också; programmet återställs i sin helhet"
],
[
"Det privata undernätet används redan på den här värden",
"Återhämtningen avbryts och ingenting ändras: adresserna till containrarna är fasta och flyttas inte till ett annat undernät."
],
[
"En värdkatalog finns inte",
"Montera eller skapa den med dess data; en säkerhetskopia av containern inkluderar inte värdkataloger"
],
[
"En enhet finns inte på denna värd",
"Anslut den eller ta bort den från containern i Proxmox"
],
[
"Ett program med NVIDIA på en värd utan drivrutinen",
"Installera NVIDIA-drivrutinen och Container Toolkit"
],
[
"Backupen gjordes innan kopian av kontraktet fanns",
"Containern stannar som en vanlig LXC och erbjuds inte igen"
]
]
}
},
{
"calloutInfo": {
"title": "En container som kommer tillbaka",
"body": "En container som återlästs över sig själv från en äldre säkerhetskopia, återställts till en ögonblicksbild eller återvänt från en annan nod bär kontraktet för sitt nuvarande tillstånd. Om den väljs för en åtgärd och dess kontrakt skiljer sig från värdens startar åtgärden inte, och containern erbjuds för återställning."
}
},
{
"figure": {
"src": "/oci-manager/restore-result.png",
"alt": "Resultatet av återhämtningen med det privata nätverket, startordern och de registrerade containrarna",
"caption": "Resultatet av en återhämtning steg för steg."
}
}
]
},
{
"id": "remove",
"title": "Ta bort en OCI-applikation",
"blocks": [
{
"p": "Före bekräftelsen skapas en sammanfattning utifrån den faktiska konfigurationen: containrarna som tas bort, data som raderas med dem, det privata nätverket som frigörs och värdkatalogerna som bevaras. Bekräftelsen är förvald till <strong>Nej</strong>, eftersom data på raderade diskar inte kan återställas efteråt."
},
{
"table": {
"headers": [
"Resurs",
"Vid borttagning",
"Orsak"
],
"rows": [
[
"rootfs och containerdiskar",
"Raderas",
"De tillhör endast containern"
],
[
"Värdkatalog",
"Bevaras med sitt innehåll",
"Andra applikationer kan använda den"
],
[
"Containerns filer på värden",
"Raderas",
"Dess konsollogg, nätverkssysctls, Rclone montering hookscript och dess registrering i App-fliken ProxMenux Monitor tjänar ingen annan container"
],
[
"Filer som delas av flera installationer",
"Tas bort när den sista installationen som använder dem tas bort",
"Värdmonitorfilen och hookscriptet för beroenden i program med flera containrar"
],
[
"Instanskontrakt",
"Tas bort efter en framgångsrik borttagning",
"Ingen CT är associerad med den mer"
],
[
"Privat brygga för en stack",
"Frigörs med stacken",
"Det har inga medlemmar kvar att ansluta"
],
[
"Nätverk som delas av Arr-paketet",
"Frigörs när det sista programmet i sviten tas bort",
"Varje program i sviten är oberoende och tas bort separat"
],
[
"En enda medlem av en stack",
"Tas inte bort separat",
"Hela applikationen tas bort, så ingen stack lämnas ofullständig"
],
[
"En container på en annan nod av klustret",
"Inte borttagen",
"Dess rekord och värdfiler är på noden där den installerades: den tas bort där, efter att ha migrerat den tillbaka."
]
]
}
},
{
"figure": {
"src": "/oci-manager/remove-summary.png",
"alt": "Sammanfattning av borttagningen med berörda containrar, data och värdkataloger",
"caption": "Sammanfattningen av borttagningen, skapad utifrån den faktiska konfigurationen."
}
}
]
},
{
"id": "archives",
"title": "Nedladdade avbildningar och utrymme på värden",
"blocks": [
{
"p": "OCI-arkivet används för att bygga rootfs; den körande CT:n läser det inte. Efter en installation eller uppdatering listas de arkiv som laddades ned under åtgärden med sina storlekar, och borttagning erbjuds. Att ta bort dem frigör utrymme utan att påverka containern eller dess data."
},
{
"calloutInfo": {
"title": "Uppdateringar behöver inte arkivet",
"body": "Utan arkivet slår en uppdatering upp den sparade kanalen och laddar ned den nya digesten. Om arkivet finns återanvänds det bara när dess referens och integritet motsvarar det som begärs."
}
}
]
},
{
"id": "registry",
"title": "Register och rensning",
"blocks": [
{
"p": "När <strong>Hantera installerade OCI-program</strong> öppnas tas först rester bort efter containrar som inte längre finns på någon nod i klustret: posten som sparats som historik efter borttagning via Proxmox-gränssnittet och värdfiler som lämnats kvar efter en borttagning. En post med en halvfärdig åtgärd behålls eftersom säkerhetskopian fortfarande kan behövas. Volymer och värdkataloger raderas aldrig utifrån antaganden."
}
]
},
{
"id": "cluster",
"title": "I ett kluster: migration och hög tillgänglighet",
"intro": "En OCI-container är en vanlig Proxmox-LXC: den kan migreras eller hanteras av HA som andra containrar, med samma begränsningar. Det som behövs för att starta den sparas där alla noder i klustret kan hitta det.",
"blocks": [
{
"table": {
"headers": [
"Delar",
"På en annan nod av klustret"
],
"rows": [
[
"Konsollogg",
"Containern skapar <code>/var/log/proxmenux/oci</code> före start på den nod som kör den. Varje nod sparar loggen för de starter som utförts där."
],
[
"Nätverks-sysctl och värdmonitor",
"Sparas i <code>/etc/pve/proxmenux</code>, som delas av alla noder i klustret, så att en migrerad container hittar dem."
],
[
"Containerdiskar",
"Proxmox flyttar dem med containern. HA behöver ha deras data tillgängliga på målnoden via delad lagring eller en replikering som stöds."
],
[
"Värdkataloger och enheter",
"Samma regler som alla LXC: en värdkatalog måste finnas på målnoden och markeras som delad, och en GPU, Coral eller NPU måste finnas där."
],
[
"ProxMenux-post",
"Kontraktet stannar på noden där programmet installerades, och varje nod läser kopian i <code>/etc/pve/priv/proxmenux/oci</code>. Ett program med en enda container som migreras registreras på målnoden när <strong>Hantera installerade OCI-program</strong> öppnas eller en åtgärd startas för programmet. Ett program med flera containrar erbjuds för återställning där eftersom dess privata nätverk måste skapas på den noden."
]
]
}
},
{
"calloutWarning": {
"title": "Inte för hög tillgänglighet",
"body": "En multi-container-applikation når sina medlemmar genom en privat bro av noden som den installerades på, så dess medlemmar stannar på den noden. En värdmonitor, såsom Glances i värdläge eller Netdata, övervakar den nod som den körs på; flytta den skulle övervaka en annan nod."
}
},
{
"p": "När programmet återställs får en säkerhetskopia som återlästs utanför klustret de filer från <code>/etc/pve/proxmenux</code> som containern använder."
}
]
},
{
"id": "channel",
"title": "En rullande tag är inte en obevakad uppdatering",
"blocks": [
{
"p": "Katalogen installerar den rullande tagg som underhållaren publicerar, men den faktiska digesten slås upp och sparas och ändras bara genom en uttrycklig uppdatering med förkontroller och återställning. <monitorLink>ProxMenux Monitor</monitorLink> jämför den installerade digesten med den som registret publicerar och visar och aviserar när en ny avbildning är tillgänglig."
}
]
}
]
}
@@ -0,0 +1,213 @@
{
"meta": {
"title": "OCI-behållare i ProxMenux Monitor | ProxMenux",
"description": "Vad ProxMenux Monitor visar för en container installerad av OCI Manager Apps: applikations- och avbildningsversioner, nya avbildningar, konsolutdata och Proxmox VE-terminalen."
},
"header": {
"title": "I ProxMenux Monitor",
"description": "En container installerad av OCI Manager Apps visas i VMs & LXCs som alla andra LXC. Dess modal läser installationsposten: applikations- och avbildningsversioner, nya avbildningar, konsolutdata och terminal.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Posten är källan",
"body": "OCI Manager Apps vet vad den installerade och var den kom ifrån. Monitorn läser det installationsrekordet istället för att prova containern, så data är detsamma om containern körs eller stoppas."
}
},
{
"table": {
"headers": [
"Flik",
"Vilka förändringar för en OCI container"
],
"rows": [
[
"Status",
"En <strong>Watchdog</strong>-brytare under Start vid start: programmet startas igen när det stannar på egen hand."
],
[
"App",
"Programmet identifieras från posten och uppdateringar spåras av avbildning"
],
[
"Uppdateringar",
"Avbildningen uppdateras eller programmet ändras, med samma flöde som OCI-menyn"
],
[
"Monteringar",
"Container diskar och värd kataloger, med deras användning"
],
[
"Loggar",
"Endast för OCI-containrar: programmets konsolutdata"
]
]
}
}
]
},
{
"id": "app",
"title": "App",
"intro": "<appLink>App</appLink>-fliken erbjuder den installerade applikationen som en detektering, med namnet, logotypen, porten och schemat för posten. När den registreras öppnas redigeraren med metoden <strong>OCI-avbildning (installerad av ProxMenux) </strong>, som inte behöver någon konfiguration.",
"blocks": [
{
"cards": {
"items": [
{
"icon": "boxes",
"title": "Program",
"body": "Versionen av applikationen i avbildningen, läs från själva avbildningen: dess miljö eller <code>org.opencontainers.image.version</code>-etiketten. Det är informativt."
},
{
"icon": "archive",
"title": "Avbildning",
"body": "Byggdatum och digest för den installerade avbildningen. Uppdateringen avgörs här: installerad digest jämförs med den som registret publicerar för samma tagg i dag."
}
]
}
},
{
"list": {
"items": [
"När registret publicerar en ny digest visar kortet <strong>Ny avbildning</strong> med datum och digest, även om programversionen inuti inte ändrats: en ombyggnad på en uppdaterad bas är en uppdatering.",
"När digestvärdena matchar visar kortet <strong>Version</strong>.",
"Kortet länkar till bildförvaret: dess GitHub-projekt, eller dess Docker Hub-sida för en officiell avbildning.",
"Tillgångslänken använder containerns LAN-adress, även för huvudmedlemmen i en multi-container-applikation, som har en andra adress på sitt privata nätverk.",
"Knappen <strong>Uppdatera data</strong> läser installationsposten och avbildningsregistret igen. Alternativen för att söka efter eller registrera andra program visas inte: containern innehåller exakt det program som anges i posten."
]
}
},
{
"figure": {
"src": "/oci-manager/monitor-app-tab.png",
"alt": "App-fliken för en OCI-behållare med applikationsversionen, avbildningen och förvaringslänken",
"caption": "App-fliken för en container installerad av OCI Manager Apps."
}
},
{
"p": "Kontrollen körs en gång om dagen med uppdateringskontrollerna av Monitor, och <strong>Uppdatera data</strong> kör den omedelbart. En ny avbildning skickas som ett meddelande via de kanaler som konfigureras i <notificationsLink>Aviseringar</notificationsLink>. Uppdateringen tillämpas från fliken Uppdateringar."
}
]
},
{
"id": "updates",
"title": "Uppdateringar",
"intro": "För en container installerad av OCI Manager Apps visar fliken Uppdateringar programmet med sin installerade avbildning och när registret publicerar en, den nya avbildningen, i samma format som alla andra program. Paket- och programuppdaterarna för en vanlig LXC visas inte.",
"blocks": [
{
"table": {
"headers": [
"Knapp",
"Vad det öppnar"
],
"rows": [
[
"Uppdatering",
"Uppdateringen från <lifecycleLink>Hantera installerade OCI-program</lifecycleLink> för denna container i Monitors terminal. Den kan köras med eller utan ny avbildning; utan en ny avbildning ändras ingenting. I ett program med flera containrar uppdateras alla medlemmar."
],
[
"Ändra",
"Redigeraren för programmet (resurser, nätverk, vägar och GPU). I en multi-container-applikation lägger den till eller tar bort de extra vägarna och enheterna i applikationsbehållaren och i Immich ändrar det som kör igenkänning."
],
[
"Återställ",
"Ersätter uppdatering när en operation på containern avbröts och öppnar sin återhämtning."
],
[
"Återställ (återställd container)",
"Visas för en container återställd från säkerhetskopia som saknar kontrakt på denna värd, under <strong>Återställt OCI-program</strong>. Öppnar <lifecycleLink>återställningen</lifecycleLink> i Monitors terminal; Uppdatera och Ändra visas när den har registrerats."
]
]
}
},
{
"p": "Externa förändringar, värdkataloger och multi-container-applikationer hanteras som i OCI-menyn. I en multi-container-applikation visas knapparna och alternativen endast på huvudbehållaren; de andra medlemmarna visar sin avbildning, en anteckning om att de uppdateras från huvudbehållaren och en knapp som öppnar den. När terminalen stängs läses avbildningen, posten och monteringarna igen."
},
{
"table": {
"headers": [
"Alternativ",
"Beteende"
],
"rows": [
[
"Behåll säkerhetskopian som tas före uppdateringen",
"Varje uppdatering backar upp containern för att återställa den om uppdateringen misslyckas. Med det här alternativet hålls samma säkerhetskopiering i den valda lagringen och visas bland säkerhetskopiorna i CT; på Proxmox Backup Server skrivs en säkerhetskopia före uppdateringen."
],
[
"Schemalagda uppdateringar",
"Avbildningen uppdateras vid vald tid bara om registret publicerar en ny, med möjlighet att vänta tills den är 1, 3, 7 eller 14 dagar gammal. En container med ändringar gjorda utanför ProxMenux hoppas över och rapporteras."
]
]
}
}
]
},
{
"id": "logs",
"title": "Loggar",
"intro": "Logs-fliken visas bara för containrar installerade av OCI manager Apps, mellan Monteringar och Säkerhetskopior. Den visar standardutdata och standardfel från avbildningens huvudprocess, samma utdata som <code>docker logs</code> visar för en Docker-container.",
"blocks": [
{
"list": {
"items": [
"Utdata sparas på värden i <code>/var/log/proxmenux/oci/VMID.console.log</code> (läge 0600), från första starten och över omstarter, så att de kan läsas när containern är stoppad.",
"Filen roteras på 10 MB och håller tre komprimerade kopior (<code>/etc/logrotate.d/proxmenux-oci</code>).",
"Varje start av containern är markerad i utgången. Fliken visar utgången sedan den sista starten som standard; <strong>Full historia</strong> visar också de tidigare.",
"När programmet tas bort tas även dess utdata bort.",
"De senaste 100, 500 eller 1000 raderna visas. När containern körs följs nya rader i realtid; om du rullar upp pausas följningen och <strong>Följ</strong> återupptar den.",
"Ett filter visar endast linjer som innehåller en text, och <strong>Ladda ner</strong> sparar linjerna laddade.",
"Färgkoder tas bort och en rad som ritas om av en förloppsindikator visas i sitt slutliga tillstånd.",
"Fliken läser filen varje gång den öppnas; den mellanlagras inte."
]
}
},
{
"calloutInfo": {
"title": "Inloggningsuppgifter vid första starten",
"body": "Avbildningar som skriver ut ett genererat lösenord på sin första start lämnar det i denna utgång, som <code>docker logs</code> gör. Installatören läser den därifrån för att visa den i sin sammanfattning."
}
},
{
"figure": {
"src": "/oci-manager/monitor-logs-tab.png",
"alt": "Logs-fliken med konsolutgången av en OCI-behållare, linjeväljaren, filtret och följknappen",
"caption": "Konsolutgång av en OCI-behållare."
}
}
]
},
{
"id": "terminal",
"title": "Proxmox VE konsol",
"blocks": [
{
"p": "En OCI-bild kör sin egen process som PID 1 och ingen inloggningstjänst, så standardkonsolen för en LXC skulle öppna en terminal där inget svarar. Containers installerade av OCI Manager Apps skapas med <code>cmode: shell</code>: Proxmox VE-konsolen öppnar ett skal med <code>lxc-attach</code>, motsvarande <code>docker exec</code>, med den löpande applikationen orörd."
},
{
"list": {
"items": [
"Skalet är det som <code>/etc/passwd</code> anger för root i avbildningen. Om root saknar skal eller avbildningen inte innehåller något behålls standardkonsolen.",
"Skalet körs som root i containern, utan ett lösenord. Vem kan öppna det beslutas av <code>VM.Console</code> tillstånd av Proxmox VE.",
"Monitorns terminal går in i containern med <code>pct enter</code>, som fungerar på samma sätt."
]
}
}
]
},
{
"id": "mounts",
"title": "Monteringar",
"blocks": [
{
"p": "<mountsLink>Monteringar</mountsLink>-fliken listar containerns diskar och värdkataloger. Användningen av en containerdisk på blocklagring som LVM-thin läses från diskens filsystem, som bara är monterat inuti containern."
}
]
}
]
}
@@ -0,0 +1,404 @@
{
"meta": {
"title": "Multi-container applikationer | ProxMenux",
"description": "Hur OCI Manager Apps förvandlar en applikation med sin databas och cache till samordnade inbyggda LXC:er: plan, privat nätverk, beroendehook, validering och transaktionsuppdateringar."
},
"header": {
"title": "Program med flera containrar",
"description": "En applikation med sin databas, cache och andra tjänster blir flera samordnade inbyggda LXC:er, installerade och uppdaterade som en.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "En applikation för användaren, flera LXCs för Proxmox VE",
"body": "En multi-container definition är en post av katalogen. Installationsprogrammet skapar en inbyggd LXC per tjänst och håller sina beroenden explicit. Immich, Nextcloud, Paperless-ngx och Tandoor installeras på detta sätt."
}
},
{
"mermaid": {
"chartCode": "flowchart LR\n C[\"Docker Compose\"] --> O[\"{{plan}}\"]\n O --> A[\"{{app}}<br/>{{appNet}}\"]\n O --> D[\"{{db}}<br/>{{private}}\"]\n O --> R[\"{{cache}}<br/>{{private}}\"]\n V1[(\"config\")] --> A\n V2[(\"database\")] --> D\n V3[(\"cache\")] --> R\n D --> A\n R --> A",
"labels": {
"plan": "Stackplan",
"app": "Programmets LXC",
"appNet": "LAN + privat",
"db": "PostgreSQL LXC",
"cache": "Valkey LXC",
"private": "privat"
}
}
}
]
},
{
"id": "plan",
"title": "1. Planen, innan någon container finns",
"blocks": [
{
"p": "Inget LXC skapas medan Compose definitionen tolkas. En komplett plan kommer först, med varje medlem, avbildning, VMID, nätverk, väg, hemlighet, ordning och hälsokontroll. Om planen inte är konsekvent startar installationen inte."
},
{
"table": {
"headers": [
"Planelement",
"Innehåll",
"Kontrolleras innan du skapar något"
],
"rows": [
[
"Medlemmar",
"Huvudapplikation, databas, cache, maskininlärning och andra beroenden",
"Unika VMID, kända roller och exakt en huvudmedlem"
],
[
"Avbilder",
"Rullande referens, arkitektur och fastställd digest för varje tjänst",
"Alla finns, stöder arkitekturen och klarar OCI-integritetskontrollen"
],
[
"Nätverk",
"Privat bro, subnet, en fast adress per tjänst och LAN-åtkomst för huvudmedlemmen",
"Ingen kollision med befintliga broar eller undernät och ingen upprepad adress"
],
[
"Persistens",
"Container diskar, värdkataloger, ägare och backup",
"Inga överlappande vägar, lagring tillgängliga och deklarerade behörigheter"
],
[
"Hemligheter",
"Databaslösenord, applikationsnycklar och inledande inloggningsuppgifter",
"Genereras en gång och ges endast till de medlemmar som använder dem"
],
[
"Livscykel",
"Startorder, stopporder och hälsokontroll per medlem",
"Huvudapplikationen börjar sist och stoppar först"
]
]
}
}
]
},
{
"id": "create",
"title": "2. Skapa en medlem i taget",
"blocks": [
{
"steps": {
"items": [
{
"title": "Reservera varje VMID",
"body": "Proxmox VE-inventeringen och instansregistret kontrolleras. En befintlig CT tas inte över och ett kontrakt som fortfarande tillhör en annan instans återanvänds inte."
},
{
"title": "Förbered varje avbildning",
"body": "Alla avbildningar löses, laddas ner och verifieras innan den första containern skapas."
},
{
"title": "Skapa varje rootfs",
"body": "Den officiella OCI-metadatan importeras och ProxMenux-instansidentiteten och medlemsrollen läggs till."
},
{
"title": "Privat nätverk",
"body": "En bro och undernät skapas och varje medlem får sin fasta adress; endast huvudmedlemmen får också LAN-gränssnittet."
},
{
"title": "Persistens",
"body": "Varje databas och konfiguration får sin egen containerdisk; endast data avsedda att delas använder värdkataloger."
},
{
"title": "Miljö",
"body": "Interna slutpunkter, delade hemligheter och servicevariabler skrivs. Programmet når sina beroenden på deras reserverade privata adresser."
},
{
"title": "Post",
"body": "Varje medlem registrerar sin inbyggda konfiguration, de rootfs-ändringar som uppdateringar måste återskapa och sin relation till stacken."
}
]
}
}
]
},
{
"id": "checks",
"title": "3. Börja och kontrollera varje container",
"intro": "En skapad LXC betyder inte att tjänsten är redo. Beroendena startar i ordning och varje tjänst genomgår en egen kontroll.",
"blocks": [
{
"table": {
"headers": [
"Tjänst",
"Kontroll",
"Vad det visar"
],
"rows": [
[
"PostgreSQL",
"<code>pg_isready</code> i CT med förväntad värd, användare och databas",
"Servern accepterar anslutningar för den konfigurerade databasen"
],
[
"Redis / Valkey",
"<code>redis-cli</code> eller <code>valkey-cli</code> <code>PING</code> mot sin privata adress",
"Brokern lyssnar och svarar"
],
[
"Immich maskininlärning",
"HTTP <code>GET /ping</code>, plus en kontroll av den valda GPU runtime",
"Tjänsten svarar och den begärda accelerationen har inte fallit tillbaka till CPU"
],
[
"Nextcloud",
"<code>GET /status.php</code> med <code>installed=true</code>, <code>maintenance=false</code> och <code>needsDbUpgrade=false</code>",
"Initieringen är klar utan väntande migrering"
],
[
"Paperless-ngx / Tandoor",
"HTTP på LAN-adressen och tjänstens faktiska port",
"Frontend och dess beroenden tillhandahåller programmet"
],
[
"Huvudapplikation",
"Slutpunkten för dess mall, till exempel <code>/api/server/ping</code> i Immich",
"Hela stacken fungerar genom programmet som använder beroenden"
]
]
}
},
{
"calloutWarning": {
"title": "Körs betyder inte att allt fungerar",
"body": "Det löpande tillståndet säger bara att LXC-processen existerar. Där tjänsten erbjuder en bättre check, en exec eller HTTP check med en timeout används. Om en medlem slutar eller misslyckas med sin kontroll, deklareras inte stacken installerad."
}
}
]
},
{
"id": "hook",
"title": "4. Beroende hook",
"blocks": [
{
"p": "Kroken är endast inställd på huvudbehållaren av en beroende stack. Proxmox VE håller manuset som en snippet och kör det som <code>hookscript</code> av den CT. Receptet är inte skrivet i manuset: det lever i ett separat privat kontrakt."
},
{
"codeGrid": {
"items": [
{
"title": "Huvud CT konfiguration",
"code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh"
},
{
"title": "Privat kontrakt (exempel)",
"code": "/etc/pve/priv/proxmenux-stack-VMID.json\n{\n \"schema\": 1,\n \"stack\": \"immich\",\n \"dependencies\": [\n {\"vmid\": 107, \"label\": \"PostgreSQL\", \"healthcheck\": {...}},\n {\"vmid\": 108, \"label\": \"Valkey\", \"healthcheck\": {...}},\n {\"vmid\": 106, \"label\": \"Machine Learning\", \"healthcheck\": {...}}\n ]\n}"
}
]
}
},
{
"snippet": {
"summary": "Fullständig källa till proxmenux-stack-dependencies.sh",
"pathCode": "local:snippets/proxmenux-stack-dependencies.sh",
"snippetCode": "stackDependencyHook"
}
},
{
"p": "Skriptet är detsamma för varje stack. VMID, namn, checktyper och timeouts kommer från det privata kontraktet <code>/etc/pve/priv/proxmenux-stack-VMID.json</code> av varje stack."
},
{
"steps": {
"items": [
{
"title": "Proxmox VE anropar pre-start",
"body": "Innan CT startar körs kroken med sin VMID och livscykelfasen."
},
{
"title": "Ett lås per stack",
"body": "<code>flock</code> på <code>/run/lock/proxmenux-stack-VMID.lock</code> förhindrar två startsekvenser samtidigt."
},
{
"title": "Kontraktet läses och valideras",
"body": "Ett känt schema, numeriska beroenden, etiketter, en exec, http eller kör kontroll och en positiv timeout krävs."
},
{
"title": "Beroende i ordning",
"body": "Varje CT måste finnas; en stoppad startas och en som redan körs inte startas om."
},
{
"title": "Vänta tills tjänsten är redo",
"body": "Kontrollen körs vartannat sekund, och CT bekräftas också vara igång."
},
{
"title": "Huvud CT startar",
"body": "När alla beroenden är redo avslutas pre-start och Proxmox VE startar programmet."
}
]
}
},
{
"calloutInfo": {
"title": "Kroken stoppar inte beroenden",
"body": "Faserna post-start, pre-stop och post-stop gör ingenting. Om huvud-CT:n stoppas fortsätter PostgreSQL, Redis, Valkey eller maskininlärningen att köras. Hooken ordnar starten; den gör inte flera LXC:er till en process."
}
},
{
"table": {
"headers": [
"Typ",
"Exempel",
"Senare starter"
],
"rows": [
[
"Beroende stack",
"Immich, Nextcloud, applikation med PostgreSQL",
"Huvud-CT:ns hook startar beroendena och väntar på dem"
],
[
"Applikationssvit",
"Arr-programsviten",
"Ingen huvudmedlem: varje LXC följer sin egen <code>onboot</code>"
],
[
"Enskilt program",
"Jellyfin",
"Proxmox VE startar den LXC:n direkt"
]
]
}
}
]
},
{
"id": "stack-checks",
"title": "5. Kontroller på stacken som helhet",
"blocks": [
{
"list": {
"items": [
"Varje VMID finns, är unik och håller den förväntade instansidentiteten.",
"Varje kontrakt tillhör samma stack och behåller sin roll och registrerade inbyggda konfiguration.",
"Huvudmedlemmen är senast i <code>start_order</code> och först i <code>stop_order</code>.",
"Ingen medlem, volym eller rootfs anpassning saknas.",
"Kroken pekar på den officiella snippet, dess innehåll är oförändrat och dess kontrakt matchar stack receptet.",
"De observerade avbildningarna och digestvärdena matchar de förberedda OCI-arkiven.",
"Enheter, GPU-profiler, monteringar, hemligheter och ändpunkter matchar fortfarande kontrakten.",
"När alla beroenden har klarat kontrollerna verifierar huvudprogrammets ändpunkt integrationen mellan medlemmarna."
]
}
}
]
},
{
"id": "manage",
"title": "Hantera en installerad stack",
"intro": "Under <strong>Hantera installerade OCI-program</strong> leder varje medlem till hela stacken. Menyn erbjuder <strong>Uppdatera alla programmets containrar</strong>, <strong>Ändra extra sökvägar och enheter</strong>, <strong>Återskapa alla containrar med sparad konfiguration</strong> och <strong>Ta bort: radera programmet och dess containrar</strong>. Återskapa bygger om varje container från dess ursprungliga avbildning med sparad digest, utan att leta efter en nyare. Samma steg som vid en uppdatering används; alternativet erbjuds för stackar som kan uppdateras.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Alla medlemmar",
"body": "Medlemmens kontrakt anger huvud-VMID och den fullständiga listan över medlemmar."
},
{
"title": "Stacken är reproducerbar",
"body": "Identiteter, kontrakt, krok, anpassningar och en samordnad replay för det receptet valideras."
},
{
"title": "Avbildningar först",
"body": "Programmet stoppas inte förrän varje digest har fastställts, hämtats och verifierats."
},
{
"title": "Stoppa och backa upp setet",
"body": "Verifierade inbyggda säkerhetskopior tas när stacken är stoppad, så att program och databaser motsvarar samma tidpunkt."
},
{
"title": "Uppdatera och kontrollera varje medlem",
"body": "Anpassning, nätverk, fästen, hemligheter och enheter appliceras igen innan hälsokontrollen av varje medlem."
},
{
"title": "Publicera eller återställa allt",
"body": "De nya kontrakten publiceras endast när varje medlem passerar. Om man misslyckas återställs varje medlem."
}
]
}
},
{
"table": {
"headers": [
"Ändra",
"Vilka förändringar",
"Vad som behålls"
],
"rows": [
[
"Extra sökvägar och enheter",
"De läggs till eller tas bort från applikationsbehållaren, som startar om. Ingenting byggs om",
"Uppgifterna för programmet, dess databas och andra containrar"
],
[
"Vad som kör igenkänningen (Immich)",
"Maskininlärningsbehållaren tar avbildningen och enheterna i CPU eller en GPU av värden. Hela programmet stoppas och uppdateras, som i en uppdatering",
"Modellcachen, biblioteket och databasen. Om något misslyckas, återställs tidigare containrar och tidigare val"
]
]
}
},
{
"calloutWarning": {
"title": "En stack utan samordnad replay uppdateras inte",
"body": "Om beredningen av en stack inte kan reproduceras vägras uppdateringen innan stacken stoppas. Applikationen fortsätter att fungera som det är."
}
}
]
},
{
"id": "failure",
"title": "6. När något misslyckas",
"blocks": [
{
"p": "Under en installation stannar ett fel och tar bort de ofullständiga containrarna som skapats och den privata broen om operationen skapade den. En stack publiceras inte som giltig tills hela sekvensen avslutas."
},
{
"p": "En uppdatering är transaktionell: alla avbildningar är förberedda först, sedan stacken stannar, varje medlem backas upp och backup verifieras, och först då är varje rootfs ersatt. Medlemmar startar en efter en med sin hälsokontroll; om man misslyckas återställs varje medlem från samma uppsättning säkerhetskopior, så databasen och programmet hör aldrig till olika ögonblick."
},
{
"mermaid": {
"chartCode": "flowchart LR\n P[\"{{prepare}}\"] --> S[\"{{stop}}\"]\n S --> B[\"{{backup}}\"]\n B --> R[\"{{replace}}\"]\n R --> H{\"{{healthy}}\"}\n H -- \"{{yes}}\" --> C[\"{{commit}}\"]\n H -- \"{{no}}\" --> X[\"{{rollback}}\"]",
"labels": {
"prepare": "Förbered varje avbildning",
"stop": "Sluta, huvudmedlem först",
"backup": "Verifierad säkerhetskopia av varje CT",
"replace": "Ersätt rootfs",
"healthy": "Fungerar alla?",
"yes": "Ja",
"no": "Nej",
"commit": "Publicera avtal",
"rollback": "Återställ varje medlem"
}
}
}
]
},
{
"id": "not-assumed",
"title": "Vad en stack inte inkluderar",
"blocks": [
{
"list": {
"items": [
"En svit installerad i ett flöde, till exempel Arr-sviten, är inte en beroende stack: dess containrar har ingen startordning mellan dem.",
"Det privata nätverket ersätter inte autentisering, TLS eller konfigurationen av varje applikation.",
"Säkerhetskopieringen av en LXC innehåller inte bron, kroken eller kontrakten i resten av stacken.",
"Prowlarr, Sonarr eller Radarr får inga indexerare, profiler eller leverantörer från ProxMenux."
]
}
}
]
}
]
}
@@ -0,0 +1,305 @@
{
"meta": {
"title": "Data, sökvägar och nätverk | ProxMenux",
"description": "Så bevarar OCI manager Apps data i en OCI-container: containerdiskar, kataloger på värden, rclone-monteringar, adresser och privata nätverk."
},
"header": {
"title": "Data, sökvägar och nätverk",
"description": "Vad som finns i rootfs, vad som bevaras när det ersätts, hur data delas mellan containrar och hur varje container får sin adress.",
"section": "OCI manager Apps"
},
"sections": [
{
"id": "intro",
"blocks": [
{
"calloutInfo": {
"title": "Beständig lagring bestäms innan LXC-containern skapas",
"body": "Volymerna som deklareras av avbildningen och dess Compose-fil läses innan containern skapas. Varje sökväg som måste bevaras vid en uppdatering blir en monteringspunkt som är oberoende av rootfs. Därmed innehåller rootfs bara det som tillhör avbildningen och kan ersättas."
}
}
]
},
{
"id": "questions",
"title": "Vad installationsguiden frågar efter",
"intro": "Mallen anger de sökvägar som programmet behöver. Var och en placeras på en containerdisk eller i en katalog på värden. Fler sökvägar kan läggas till före sammanfattningen.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Nödvändiga sökvägar",
"body": "<code>/config</code>, <code>/data</code>, bibliotek, hämtningar och alla volymer som programmet deklarerar listas."
},
{
"title": "Plats",
"body": "Varje sökväg placeras på en containerdisk eller i en befintlig katalog på värden."
},
{
"title": "Lagring och storlek",
"body": "En containerdisk skapas på en Proxmox VE-lagring med den angivna storleken. Standardinstallationen använder <code>local-lvm</code>. Den avancerade installationen frågar efter lagring för varje sökväg strax före storleken och föreslår lagringen för rootfs. Disken visas som <code>vm-VMID-disk-N</code> och ansluts som <code>mpN</code>."
},
{
"title": "Katalog på värden",
"body": "Katalogen på värden anges med sin sökväg. Om den inte finns skapas den med den värdanvändare som containeranvändaren mappas till som ägare."
},
{
"title": "Ytterligare sökvägar",
"body": "Före installationen kan fler kopplingar läggas till mellan en sökväg eller volym på värden och en sökväg i containern."
},
{
"title": "Sammanfattning",
"body": "Hela sökvägsmappningen visas innan CT:n skapas och sparas i instanskontraktet."
}
]
}
}
]
},
{
"id": "options",
"title": "De två platserna för beständig lagring",
"blocks": [
{
"table": {
"headers": [
"Egenskap",
"Containerdisk",
"Katalog på värden"
],
"rows": [
[
"I konfigurationen",
"<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>",
"<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"
],
[
"Containerns säkerhetskopia (vzdump)",
"Ingår med <code>backup=1</code>",
"Ingår inte"
],
[
"Storlek",
"Fast; kan utökas genom att ändra monteringspunktens storlek",
"Det lediga utrymmet i värdens filsystem eller dataset"
],
[
"Andra containrar",
"Monteras bara av den container som den tillhör",
"Samma katalog kan monteras i flera containrar"
],
[
"Ögonblicksbilder och återställning",
"Hanteras av Proxmox VE tillsammans med CT:n",
"Hanteras på värdens lagring"
],
[
"När programmet tas bort",
"Tas bort med containern",
"Bevaras med sitt innehåll"
],
[
"När CT:n flyttas till en annan nod",
"Flyttas med CT:n",
"Samma sökväg måste finnas på den andra noden"
]
]
}
},
{
"p": "Rootfs är reserverat för binärfilerna och avbildningens innehåll. En uppdatering eller ett återskapande ersätter det utan att röra någon av de två typerna av monteringspunkt."
}
]
},
{
"id": "example",
"title": "Exempel: en container med båda platserna",
"blocks": [
{
"code": {
"title": "Jellyfin installerat som CT 151 på local-lvm (utdrag)",
"code": "rootfs: local-lvm:vm-151-disk-0,size=8G\n# Container disk, part of the CT backup\nmp0: local-lvm:vm-151-disk-1,mp=/config,backup=1,size=16G\n\n# Host directory, outside the CT backup\nmp1: /mnt/oci-shared/media,mp=/data/media"
}
},
{
"p": "En uppdatering eller ett återskapande ersätter bara rootfs: <code>mp0</code> bevarar användare, bibliotek och inställningar, och <code>mp1</code> visar fortfarande samma medier. När CT:ns säkerhetskopia återställs kommer <code>/config</code> tillbaka. Mediekatalogen återställs vid behov från säkerhetskopian av värdens lagring."
},
{
"flow": {
"nodes": [
{
"label": "Kontrakt",
"detail": "/config"
},
{
"label": "Plats",
"detail": "Containerdisk\neller katalog på värden"
},
{
"label": "LXC",
"detail": "Alltid /config\nför programmet"
}
],
"caption": "Programmet ser sökvägen som avbildningen anger. Bara lagringsplatsen ändras."
}
}
]
},
{
"id": "shared",
"title": "En katalog på värden, flera containrar",
"blocks": [
{
"mermaid": {
"chartCode": "flowchart TB\n H[\"{{host}}<br/>/mnt/oci-shared/media\"]\n H --> Q[\"qBittorrent<br/>/data\"]\n H --> J[\"Jellyfin<br/>/data\"]\n H --> R[\"Radarr / Sonarr<br/>/data\"]\n Q -. \"{{config}}\" .-> QV[(\"/config mpN\")]\n J -. \"{{config}}\" .-> JV[(\"/config mpN\")]\n R -. \"{{config}}\" .-> RV[(\"/config mpN\")]",
"labels": {
"host": "Katalog på värden",
"config": "Egen konfiguration"
}
}
},
{
"p": "Varje container sparar sin konfiguration på sin egen disk. Biblioteket eller hämtningarna ligger i en enda katalog på värden som monteras på samma interna sökväg i alla containrar. Därmed är sökvägen som ett program skriver till samma sökväg som ett annat läser från."
}
]
},
{
"id": "rclone",
"title": "Molnlagring via programmet rclone",
"intro": "Utöver installation erbjuder rclone-posten i katalogen <strong>Aktivera en montering i en befintlig OCI-container med rclone</strong>. En fjärrlagring som redan skapats och auktoriserats i rclones webbgränssnitt monteras och görs tillgänglig på värden. Andra containrar kan använda den som en katalog på värden.",
"blocks": [
{
"steps": {
"items": [
{
"title": "Container och fjärrlagring",
"body": "VMID för rclone-containern, fjärrlagringens exakta namn och, valfritt, en sökväg i den."
},
{
"title": "Monteringens namn och cache",
"body": "Monteringens namn och VFS-cacheläget: <code>off</code>, <code>minimal</code>, <code>writes</code> eller <code>full</code> (standard)."
},
{
"title": "Tillgängliga vyer",
"body": "En gemensam rot, som standard <code>/mnt/oci-shared</code>, innehåller en läs- och skrivbar vy i <code>/mnt/oci-shared/remotes/NAME</code> och en skrivskyddad vy i <code>/mnt/oci-shared/remotes-ro/NAME</code>."
},
{
"title": "Aktivering",
"body": "Efter bekräftelsen stoppas CT:n, dess startkommando och ett Proxmox VE-hookscript konfigureras, och den startas igen. Åtgärden väntar tills båda vyerna är monterade på värden."
}
]
}
},
{
"calloutInfo": {
"title": "Om monteringen inte aktiveras",
"body": "Containerns tidigare konfiguration återställs och containern startas igen. En misslyckad aktivering lämnar därmed rclone som det var."
}
}
]
},
{
"id": "network",
"title": "Adresser och nätverk",
"intro": "Ett program med en enda container behöver en adress. Ett program med flera containrar behöver också ett stabilt nätverk mellan sina delar.",
"blocks": [
{
"cards": {
"items": [
{
"icon": "network",
"title": "Program med en container",
"body": "En nätverksbrygga väljs tillsammans med DHCP eller en fast adress i CIDR-format. LXC-containern har en egen adress och sammanfattningen visar tjänsternas fullständiga URL:er."
},
{
"icon": "waypoints",
"title": "Program med flera containrar",
"body": "Ett ledigt subnät hittas och en beständig privat brygga skapas. Varje del – program, databas och cache – får en fast adress på nätverket."
}
]
}
},
{
"flow": {
"nodes": [
{
"label": "LAN",
"detail": "Nåbar adress\nbara huvudtjänsten"
},
{
"label": "Huvud-LXC",
"detail": "Webb / API\nLAN + privat nätverk"
},
{
"label": "Privat nätverk",
"detail": "PostgreSQL · Valkey · ML\nfasta adresser"
}
],
"caption": "Beroenden kommunicerar över det privata nätverket och har ingen adress på LAN:et."
}
},
{
"p": "Stackkontraktet sparar brygga, subnät, adresser och relationerna mellan tjänsterna. När programmet uppdateras återanvänds samma topologi för alla delar. ProxMenux Monitor öppnar huvudcontainern på dess LAN-adress, inte dess adress på det privata nätverket."
}
]
},
{
"id": "ownership",
"title": "Ägarskap för filer och kataloger",
"blocks": [
{
"list": {
"items": [
"Nya kataloger skapas med de UID och GID som den oprivilegierade LXC-containern mappas till.",
"Ägarskapet för befintliga kataloger ändras inte rekursivt.",
"Socklar, systemfiler och känsliga sökvägar erbjuds inte som vanliga kataloger på värden."
]
}
}
]
},
{
"id": "backup",
"title": "Vad en säkerhetskopia av containern innehåller",
"blocks": [
{
"table": {
"headers": [
"Del",
"I CT:ns vzdump-säkerhetskopia",
"Var det sparas"
],
"rows": [
[
"OCI-rootfs",
"Ja",
"I CT:ns säkerhetskopia; kan också återskapas från avbildningen och kontraktet"
],
[
"Containerdisk med <code>backup=1</code>",
"Ja",
"CT:ns säkerhetskopia"
],
[
"Katalog på värden",
"Nej",
"Säkerhetskopian av värdens lagring"
],
[
"Instanskontrakt",
"Ja, kopian som finns i CT:n",
"<code>/.proxmenux/oci-record.json</code> i CT:n; ytterligare kopior på värden och i klustret sparas separat"
],
[
"Program med flera containrar",
"Varje del i sin egen säkerhetskopia",
"Säkerhetskopiorna av alla delar samt stackkontraktet och dess nätverksbrygga på värden"
]
]
}
}
]
}
]
}
+152
View File
@@ -0,0 +1,152 @@
{
"meta": {
"title": "Fail2Ban | ProxMenux-dokumentation",
"description": "Installera Fail2Ban med tre jails inställd för Proxmox (SSH aggressiv, Proxmox UI 8006, ProxMenux Monitor 8008). Inkluderar journald MaxLevelStore fix, anpassade loggtjänster för tillförlitlighet, automatiskt upptäckta nftables/iptables backend och SSH MaxAuthTries härdning.",
"ogTitle": "Fail2Ban | ProxMenux-dokumentation",
"ogDescription": "Skydd mot lösenordsattacker för SSH och Proxmox webbgränssnitt, med Proxmox-specifika korrigeringar av journald och backend."
},
"header": {
"title": "Fail2Ban",
"description": "Installerar Fail2Ban för Proxmox: tre jails (aggressivt SSH, Proxmox-gränssnitt på 8006, ProxMenux Monitor på 8008 och omvänd proxy), journald-korrigering för att spara SSH-händelser, två tjänster som kopierar journalen till filer för att kringgå ett känt systemd-backendproblem, automatisk brandväggsbackend och SSH-härdning med MaxAuthTries.",
"section": "Säkerhet"
},
"intro": {
"title": "Vad detta gör",
"body": "Installerar Fail2Ban från Debians paketförråd och skapar en Proxmox-konfiguration som direkt skyddar SSH, Proxmox webbgränssnitt och ProxMenux Monitor. En befintlig installation upptäcks och ger i stället en hanteringsmeny för ominstallation eller borttagning."
},
"firstLaunch": {
"heading": "Första lanseringen dialog",
"body": "Om Fail2Ban saknas visar skriptet en bekräftelse med vad som ska installeras och konfigureras. Avbryt avslutar utan ändringar; bekräftelse startar installationen.",
"imageAlt": "Installationsbekräftelse för Fail2Ban med tre jails, journald-korrigering och SSH-härdning"
},
"jails": {
"heading": "De tre jails",
"headerJail": "Jail",
"headerProtects": "Skyddar",
"headerRetries": "Försök / Tidsfönster",
"headerBan": "Blockeringstid",
"rows": [
{
"jail": "[sshd]",
"protects": "SSH (aggressivt läge — omfattar ddos, mode, normal)",
"retries": "2 / 60 min",
"ban": "9 timmar"
},
{
"jail": "[proxmox]",
"protects": "Proxmox webb UI (port 8006)",
"retries": "3 / 10 min",
"ban": "1 timme"
},
{
"jail": "[proxmenux]",
"protects": "ProxMenux Monitor (port 8008 + http / https omvänd proxy)",
"retries": "3 / 10 min",
"ban": "1 timme"
}
],
"outro": "Globala standardinställningar från <code>jail.local</code>: <code>ignoreip = 127.0.0.1/8 ::1</code>, <code>ignoreself = true</code>,<code> bantime = 86400</code> (24h reserv för jails som inte åsidosätter det), <code>maxretry = 2</code>, <code>findtime = 1800</code>."
},
"journald": {
"heading": "Varför journald-korrigeringen är viktig",
"intro": "Proxmox levererar <code>/etc/systemd/journald.conf</code> med <codeNw>MaxLevelStore=warning</codeNw>. journald kastar meddelanden på nivåer <em>under</em> warning innan de lagras. SSH och PAM rapporterar autentiseringsfel på nivåerna <em>info</em> / <em>notice</em>, så:",
"diagram": {
"sshLabel": "SSH / PAM",
"sshDetail": "autentiseringsfel\n(nivå info / notice)",
"journaldLabel": "journald",
"journaldDetail": "MaxLevelStore=warning\n→ händelsen kastas utan varning",
"fail2banLabel": "Fail2Ban",
"fail2banDetail": "ser ingenting\naldrig förbjuder något",
"arrowLabel": "Standard Proxmox"
},
"afterDiagram": "Installatören upptäcker detta och skriver en drop-in på <codeXs>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</codeXs> höja både <code>MaxLevelStore</code> och <code>MaxLevelSyslog</code> till <code>info</code>:",
"code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info",
"outro": "Startar sedan om <code>systemd-journald</code>. Vid avinstallation tas tillägget bort och Proxmox ursprungliga standardvärde återställs."
},
"loggers": {
"heading": "Varför två anpassade loggertjänster",
"intro1": "Fail2Ban kan läsa systemd-journalen direkt (<code>backend = systemd</code>), men på Proxmox har denna backend kända problem med arbetsprocesser i <code>pvedaemon</code>: autentiseringshändelser syns i journalen men upptäcks inte alltid. Även <code>sshd</code> berörs ibland.",
"intro2": "ProxMenux skapar två små systemd-tjänster som följer berörda enheter med <code>journalctl -f</code> och lägger till varje rad i en fil. Fail2Ban läser filerna med tillförlitliga <code>backend = auto</code> (filläge):",
"headerService": "Tjänst",
"headerSource": "Källenhet",
"headerOutput": "Utdatafil",
"rows": [
{
"service": "proxmox-auth-logger.service",
"source": "pvedaemon.service",
"output": "/var/log/proxmox-auth.log"
},
{
"service": "ssh-auth-logger.service",
"source": "ssh.service",
"output": "/var/log/ssh-auth.log"
}
],
"outro": "Båda tjänsterna är deklarerade <code>PartOf=fail2ban.service</code> så de startar om med Fail2Ban och slutar med det. Läget 640 som ägs av <code>root:adm</code> på loggfilerna. Den tredje loggen som används av <code>[proxmenux]</code> jail (<code>/var/log/proxmenux-auth.log</code>) skrivs direkt av appen ProxMenux Monitor Flask – ingen loggertjänst behövs för den."
},
"backend": {
"heading": "Automatisk identifiering av brandväggsbackend",
"intro": "Installationsproberar värden: om <code>nft list ruleset</code> fungerar, väljer den <code>nftables</code> som förbudsåtgärden. Annars faller det tillbaka till <code>iptables-multiport</code> / <code>iptables-allports</code>. Valet är skrivet i <code>jail.local</code>:",
"code": "# nftables host\nbanaction = nftables\nbanaction_allports = nftables[type=allports]\n\n# iptables host (fallback)\nbanaction = iptables-multiport\nbanaction_allports = iptables-allports"
},
"hardening": {
"heading": "SSH-härdning: MaxAuthTries",
"intro": "Lynis-kontrollen <strong>SSH-7408</strong> rekommenderar <code>MaxAuthTries 3</code> i <code>sshd_config</code>. SSH-jailen använder <code>maxretry = 2</code> för blockering efter upprepade fel; MaxAuthTries begränsar försök inom samma anslutning. SSH-inställningen ger ett extra skyddslager även när Fail2Ban stoppats för underhåll.",
"installerIntro": "Installationsprogrammet:",
"items": [
"Läser det aktuella <code>MaxAuthTries</code>-värdet (eller standarder till 6 om det saknas).",
"Spara det till <code>/usr/local/share/proxmenux/sshd_maxauthtries_backup</code>.",
"Redigerar <code>sshd_config</code> direkt: ersätter befintlig rad, avkommenterar en kommenterad rad eller lägger till en ny.",
"Laddar om <code>sshd</code> utan omstart så att befintliga sessioner behålls."
],
"outro": "Vid avinstallation återställs det sparade ursprungliga värdet och <code>sshd</code> laddas om igen."
},
"manage": {
"heading": "Hantera en befintlig installation",
"intro": "Om Fail2Ban redan är installerad när du öppnar menyn upptäcker manuset den och visar en meny istället för att köra om installationsprogrammet:",
"headerAction": "Handling",
"headerWhat": "Vad det gör",
"rows": [
{
"action": "Reinstallera",
"what": "Kör hela installationen igen och skriver om alla jails med aktuella ProxMenux-standardvärden. Använd när en uppdatering ändrar rekommendationerna."
},
{
"action": "Ta bort",
"what": "Stoppar fail2ban och de två loggertjänsterna, rensar apt-paketet, tar bort alla jail / filtrera filer, tar bort journald drop-in (återställer Proxmox standard) och återställer originalet SSH MaxAuthTries."
}
]
},
"verify": {
"heading": "Verifiera att det fungerar",
"intro": "Efter installation, användbara kommandon från värden:",
"code": "# Service status and version\nsystemctl status fail2ban\nfail2ban-client --version\n\n# All active jails\nfail2ban-client status\n\n# Detail on one jail\nfail2ban-client status sshd\nfail2ban-client status proxmox\nfail2ban-client status proxmenux\n\n# Currently banned IPs in a jail\nfail2ban-client status sshd | grep \"Banned IP\"\n\n# Manually unban an IP (use this if you ban yourself)\nfail2ban-client unban 192.0.2.10\n\n# Tail the auth logs Fail2Ban watches\ntail -f /var/log/ssh-auth.log\ntail -f /var/log/proxmox-auth.log\ntail -f /var/log/fail2ban.log"
},
"troubleshoot": {
"heading": "Felsökning",
"neverBansTitle": "Fail2Ban körs men förbjuder aldrig något",
"neverBansBody": "Kontrollera att <code>tail -f /var/log/ssh-auth.log</code> får en post efter ett SSH-försök med fel lösenord från en annan dator. Om filen är tom granskar du <code>systemctl status ssh-auth-logger.service</code>. Om loggern körs visar du aktuella händelser med <code>journalctl -u ssh.service -n 50 --no-pager -p info</code> och kontrollerar att journald-tillägget tillåter nivån <em>info</em>.",
"monitorEmptyTitle": "ProxMenux Monitor jail har inga poster även efter misslyckade inloggningar",
"monitorEmptyBody": "Jailen <code>[proxmenux]</code> läser <code>/var/log/proxmenux-auth.log</code>, som skrivs av Flask-appen ProxMenux Monitor, inte av en journald-logger. Utan Monitor förblir filen tom och jailen utlöses inte. Det är väntat och konfigurationen är ofarlig. Om Monitor körs men loggen är tom kontrollerar du loggningskonfigurationen i Flask.",
"selfBanTitle": "Jag har blockerat min egen åtkomst",
"selfBanIntro": "Från en konsol / IPMI / iKVM (eller annan vitlistad IP):",
"selfBanCode": "fail2ban-client unban '<'YOUR_IP'>'\n\n# To prevent it next time, edit /etc/fail2ban/jail.local and add your IP:\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42\n\n# Then reload\nfail2ban-client reload",
"aptFailTitle": "apt-get misslyckas: ''Unable to locate package fail2ban''",
"aptFailBody": "Värden saknas Debian repos (gemensamt på barebones Proxmox installationer). Installatören upptäcker detta och skriver <code>/etc/apt/sources.list.d/debian.sources</code> med rätt kodnamn (<code>bookworm</code> / <code>trixie</code>) innan du går tillbaka. Om det fortfarande misslyckas, kontrollera <code>/etc/os-release</code> för <code>VERSION_CODENAME</code> och bekräfta att repo URL är tillgänglig.",
"lockoutTitle": "SSH låser mig efter installation",
"lockoutBody": "Installationsprogrammet sätter <code>MaxAuthTries=3</code>. Om din lösenordshanterare / agent har flera nycklar kan du överstiga det på ett enda anslutningsförsök. Begränsa nycklarna som erbjuds: <code>ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host</code>. Eller tillfälligt höja <code>MaxAuthTries</code> i <code>sshd_config</code> medan du debug."
},
"files": {
"heading": "Filer skrivna",
"code": "/etc/fail2ban/jail.local # global defaults + [sshd]\n/etc/fail2ban/jail.d/proxmox.conf # [proxmox]\n/etc/fail2ban/jail.d/proxmenux.conf # [proxmenux]\n/etc/fail2ban/filter.d/proxmox.conf # auth-failure regex for pvedaemon\n/etc/fail2ban/filter.d/proxmenux.conf # auth-failure regex for Monitor\n/etc/systemd/system/proxmox-auth-logger.service # journal → file (pvedaemon)\n/etc/systemd/system/ssh-auth-logger.service # journal → file (sshd)\n/etc/systemd/journald.conf.d/proxmenux-loglevel.conf # MaxLevelStore=info\n/etc/ssh/sshd_config # MaxAuthTries=3 (in-place edit)\n/var/log/proxmox-auth.log # written by logger service\n/var/log/ssh-auth.log # written by logger service\n/var/log/proxmenux-auth.log # written by Monitor Flask app\n/usr/local/share/proxmenux/sshd_maxauthtries_backup # for restore on uninstall"
},
"related": {
"heading": "Relaterad",
"monitorLabel": "ProxMenux Monitor → Säkerhetsflik",
"monitorTail": " — installation via panelen, aktuell jail-status, blockerade IP-adresser och inställning av försök och blockeringstid per jail i webbläsaren.",
"lynisLabel": "Lynis",
"lynisTail": " — kör en säkerhetsgranskning före och efter för att bekräfta att kontrollen SSH-7408 uppfylls.",
"securityLabel": "Säkerhetsöversikt",
"securityTail": " - tillbaka till avsnittsöversikten."
}
}
+70
View File
@@ -0,0 +1,70 @@
{
"meta": {
"title": "Proxmox-säkerhet — Fail2Ban och härdningsgranskning med Lynis | ProxMenux",
"description": "Två säkerhetsverktyg för Proxmox VE: Fail2Ban (intrångsskydd för SSH, Proxmox webbgränssnitt och ProxMenux Monitor) och Lynis (säkerhets- och härdningsgranskning installerad från det officiella GitHub-arkivet).",
"ogTitle": "Proxmox-säkerhet — Fail2Ban och härdningsgranskning med Lynis",
"ogDescription": "Fail2Ban och Lynis för Proxmox VE: intrångsskydd och härdningsgranskning, installerade och hanterade av ProxMenux.",
"twitterTitle": "Proxmox säkerhet | ProxMenux",
"twitterDescription": "Fail2Ban och Lynis för Proxmox VE: intrångsskydd och härdningsgranskning."
},
"header": {
"title": "Säkerhet",
"description": "Två kompletterande verktyg för Proxmox VE: aktivt skydd (Fail2Ban blockerar IP-adresser som angriper SSH eller webbgränssnitt) och lokal granskning (Lynis söker härdningsbrister och ger 0–100 poäng). Varje verktyg har en egen installations- och hanteringsmeny som upptäcker befintliga installationer före varje åtgärd.",
"section": "Säkerhet"
},
"intro": {
"title": "Aktivt skydd och lokal granskning",
"body": "De besvarar olika frågor. <strong>Fail2Ban</strong> svarar på <em>”Angrips vi just nu?”</em> genom att bevaka autentiseringsloggar och blockera angripande IP-adresser. <strong>Lynis</strong> svarar på <em>”Hur väl härdad är värden?”</em> med en engångsgranskning och konkreta rekommendationer. Använd båda: Lynis visar vad som bör förbättras och Fail2Ban hanterar pågående angrepp."
},
"opening": {
"heading": "Öppna menyn",
"body": "Välj <strong>Säkerhet</strong> i ProxMenux huvudmeny. Du får se följande:",
"imageAlt": "Säkerhetsmeny med Fail2Ban och Lynis alternativ"
},
"pick": {
"heading": "Välj ditt verktyg",
"body": "Verktygen är oberoende: installera ett, båda eller inget. Varje kort nedan leder till avsnittet som förklarar verktyget i detalj."
},
"cards": {
"fail2ban": {
"title": "Fail2Ban",
"body": "Aktivt intrångsskydd. Bevakar autentiseringsloggar för SSH och webbgränssnitt och blockerar IP-adresser efter upprepade fel.",
"bullets": [
"Tre jails: SSH, Proxmox UI (8006), ProxMenux Monitor (8008)",
"Korrigerar Proxmox standardinställningar för journald som blockerar autentiseringsloggar",
"Upptäcker nftables / iptables automatiskt",
"SSH härdning: MaxAuthTries=3 (Lynis rekommendation)"
]
},
"lynis": {
"title": "Lynis",
"body": "Lokal säkerhetsgranskare. Skannar värden och visar härdningspoäng samt konkreta åtgärdsförslag.",
"bullets": [
"Installerat från CISOfys officiella GitHub-arkiv (senaste versionen)",
"Härdningspoäng 0–100 och lista över varningar och förslag",
"Granskning och uppdatering via menyn",
"Utformat för enbart läsning: ändrar aldrig systemet"
]
}
},
"workflowTip": {
"title": "Arbetsflöde som använder båda",
"body": "Kör först Lynis för att se startpoäng och viktigaste rekommendationer. Genomför önskade åtgärder. Installera sedan Fail2Ban: det inför automatiskt SSH-skydd mot lösenordsattacker och anpassar <code>MaxAuthTries</code> i <code>sshd_config</code> till kontrollen SSH-7408. Kör Lynis igen för att bekräfta förbättringen."
},
"fail2banSection": {
"heading": "Fail2Ban",
"body": "ProxMenux installerar Fail2Ban med en konfiguration för Proxmox. Utöver standardjailen för SSH skyddas Proxmox webbgränssnitt och ProxMenux Monitor. Två specifika problem hanteras: en standardinställning i journald som släpper autentiseringshändelser och ett problem i systemd-backend som hindrar tillförlitlig läsning av vissa journalkällor. Detaljsidan beskriver installationen, de tre jails, journald-korrigeringen, SSH-härdningen och felsökningen.",
"optionTitle": "Fail2Ban – installera och hantera",
"optionDescription": "Tre förkonfigurerade jails (aggressivt sshd, Proxmox-gränssnitt på 8006, ProxMenux Monitor på 8008 och omvänd proxy), automatisk nftables/iptables-detektering, journald-korrigering och SSH-härdning med MaxAuthTries."
},
"lynisSection": {
"heading": "Lynis",
"body": "ProxMenux klonar Lynis från <code>github.com/CISOfy/lynis</code> till <code>/opt/lynis</code> och gör det tillgängligt som <code>/usr/local/bin/lynis</code>. Debianpaketet undviks avsiktligt eftersom det ligger flera huvudversioner efter originalprojektet. Detaljsidan beskriver installation, granskning, uppdatering, avinstallation, rapportläsning och åtgärder utifrån resultaten.",
"optionTitle": "Lynis — installera, granska och hantera",
"optionDescription": "Installerar den senaste Lynis från den officiella CISOfy GitHub repo (inte det äldre Debian-paketet), kör systemrevisioner med härdningspoäng och uppdateringar via git pull."
},
"componentStatus": {
"heading": "Komponentstatus",
"body": "Båda installatörerna registrerar sitt tillstånd i <code>/usr/local/share/proxmenux/components_status.json</code> under kategorin <code>security</code>. ProxMenux använder den här filen för att bestämma om du vill visa installationen eller menyn för hantering påföljande körningar, och samma data matar instrumentpanelerna i ProxMenux Monitor när de är närvarande."
}
}
+170
View File
@@ -0,0 +1,170 @@
{
"meta": {
"title": "Lynis | ProxMenux-dokumentation",
"description": "Installera senaste Lynis från CISOfys officiella GitHub-arkiv, kör en säkerhetsgranskning med härdningspoäng 0–100 och uppdatera med git pull. Utformat för enbart läsning, utan systemändringar.",
"ogTitle": "Lynis | ProxMenux-dokumentation",
"ogDescription": "Installera och kör säkerhetsgranskaren Lynis på Proxmox VE. Installation från det officiella GitHub-arkivet, granskning och uppdatering."
},
"header": {
"title": "Lynis",
"description": "Klonar senaste Lynis från CISOfys officiella GitHub-arkiv, gör det tillgängligt som /usr/local/bin/lynis och erbjuder granskning, uppdatering, ominstallation och avinstallation via menyn. Granskaren läser bara och rapporterar utan att ändra systemet.",
"section": "Säkerhet"
},
"intro": {
"title": "Vad detta gör",
"body": "Installerar Lynis, CISOfys säkerhetsgranskare med öppen källkod, från dess GitHub-arkiv till <code>/opt/lynis</code> och skapar ett startskript i <code>/usr/local/bin/lynis</code> så att det nås via <code>PATH</code>. En befintlig installation ger i stället en meny för granskning, uppdatering, ominstallation eller borttagning."
},
"manageMenu": {
"heading": "Hanteringsmeny (efter installation)",
"intro": "Efter installationen öppnar varje nytt anrop hanteringsmenyn. Där kan du starta en granskning, uppdatera med git pull, installera om eller avinstallera.",
"imageAlt": "Lynis management meny med revision, uppdatering, ominstallera och ta bort alternativ"
},
"whyUpstream": {
"heading": "Varför det officiella GitHub-arkivet i stället för apt",
"intro": "Debian erbjuder Lynis via apt, men paketet ligger vanligtvis flera huvudversioner efter originalprojektet. Nya kontroller, åtgärder för nya angreppssätt och förbättrade rekommendationer kommer först till GitHub. Lynis är ett fristående skalskript utan kompilering eller installationsberoenden utöver <code>git</code>; kloning av arkivet är därför metoden CISOfy rekommenderar.",
"headerSource": "Källa",
"headerPath": "Install path",
"headerUpdate": "Uppdateringsmetod",
"headerFresh": "Versionens aktualitet",
"rows": [
{
"sourceRich": "<strong>ProxMenux (detta manus) </strong>",
"path": "/opt/lynis/",
"update": "git pull (via menyn)",
"fresh": "Senaste versionen av originalprojektet"
},
{
"sourceRich": "<strong>Debian apt</strong>",
"path": "/usr/bin/lynis",
"update": "apt upgrade",
"fresh": "Ofta månader / år bakom"
}
]
},
"install": {
"heading": "Hur installationen fungerar",
"node1Label": "github.com/CISOfy/lynis",
"node1Detail": "git clone\n(installera git först om det saknas)",
"node2Label": "/opt/lynis/",
"node2Detail": "hela arkivet\ninklusive skriptet ./lynis",
"node3Label": "/usr/local/bin/lynis",
"node3Detail": "wrapper:\ncd /opt/lynis && ./lynis $@",
"outro": "Wrapper är obligatorisk - Lynis insisterar på att köras från sin egen katalog eftersom det laddar relativa vägar för plugins och profildata. Wrapper döljer den detaljen så <code>lynis audit system</code> fungerar bara från var som helst."
},
"detection": {
"heading": "Detektering vägar",
"intro": "Innan du visar menyn kontrollerar manuset tre platser för att avgöra om Lynis redan är närvarande:",
"items": [
"<code>/usr/local/bin/lynis</code> Wrapper installerad av ProxMenux",
"<code>/opt/lynis/lynis</code> - direkt väg (om wrapperen togs bort)",
"<code>/usr/bin/lynis</code> apt-installerad version, om användaren installerade den på det sättet tidigare"
],
"outro": "Om någon av sökvägarna hittas öppnas hanteringsmenyn. Skriptet avinstallerar <strong>inte</strong> Lynis som installerats via apt, bara den egna installationen i <code>/opt/lynis</code> och dess startskript."
},
"audit": {
"heading": "Kör en revision",
"intro": "Välj <strong>Kör säkerhetsgranskning nu</strong> i hanteringsmenyn. Det motsvarar att köra:",
"code": "lynis audit system --no-colors",
"outro": "Granskningen tar 30 sekunder till några minuter beroende på värdens storlek. Utdata visas direkt i terminalen utan väntanimation. Lynis grupperar kontroller efter kategori och märker varje test med <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> eller <sugg>[ SUGGESTION ]</sugg>. Slutets sammanfattning visar de viktigaste siffrorna:",
"summary": "================================================================================\n\n Lynis security scan details:\n\n Hardening index : 76 [############ ]\n Tests performed : 247\n Plugins enabled : 0\n\n Components:\n - Firewall [V]\n - Malware scanner [X]\n\n Lynis modules:\n - Compliance status [?]\n - Security audit [V]\n - Vulnerability scan [V]\n\n================================================================================"
},
"report": {
"heading": "Läsa rapporten",
"intro": "De två viktiga avsnitten är <strong>Warnings</strong> (saker du bör fixa snart) och <strong>Suggestions</strong> (rekommendationer för att förbättra härdning). Varje objekt bär ett kontroll-ID som <code>SSH-7408</code> - användbart när du söker Lynis-dokumenten för motiveringen och fixen.",
"headerMarker": "Markör",
"headerMeaning": "Betydelse",
"headerAction": "Handling",
"rows": [
{
"markerRich": "<strong>OK</strong>",
"meaning": "Test passerade",
"action": "Ingenting"
},
{
"markerRich": "<strong>WARNING</strong>",
"meaning": "Verklig fråga, fix rekommenderad",
"action": "Läs kontrollbeskrivningen, planera en fix"
},
{
"markerRich": "<strong>SUGGESTION</strong>",
"meaning": "Hardening förbättring tillgänglig",
"action": "Tillämpa om det passar din hotmodell"
}
],
"outro": "Fullständig rapport och maskinläsbara data skrivs till <code>/var/log/lynis.log</code> och <code>/var/log/lynis-report.dat</code> av Lynis själv."
},
"pairFail2ban": {
"title": "Kombinera med Fail2Ban",
"body": "SSH-7408 (MaxAuthTries) är en av de vanligaste varningarna. Installera <link>Fail2Ban</link> från ProxMenux rensar det automatiskt eftersom installationsprogrammet sätter <code>MaxAuthTries=3</code> som en del av dess SSH härdning steg. Kör Lynis igen efteråt för att bekräfta varningen är borta."
},
"update": {
"heading": "Uppdatering Lynis",
"body": "I menyn kör <strong>Uppdatera Lynis till senaste versionen</strong> kommandot <code>git pull --quiet</code> i <code>/opt/lynis</code>. Om katalogen finns men inte är en Git-arbetskopia, exempelvis efter manuell filkopiering, gör skriptet en fullständig ominstallation."
},
"reinstall": {
"heading": "Installera om / avinstallera",
"headerAction": "Handling",
"headerWhat": "Vad det gör",
"rows": [
{
"actionRich": "<strong>Installera om</strong>",
"whatRich": "Tar bort <code>/opt/lynis</code>, klonar igen från GitHub och återskapar startskriptet. Använd om den lokala arbetskopian är skadad."
},
{
"actionRich": "<strong>Ta bort</strong>",
"whatRich": "Ta bort <code>/opt/lynis</code> och <code>/usr/local/bin/lynis</code>. Loggar på <code>/var/log/lynis*</code> hålls (de är revisionshistorik). En apt-installerad Lynis på <code>/usr/bin/lynis</code> lämnas orörd."
}
]
},
"cli": {
"heading": "Användbara CLI-alternativ",
"intro": "Efter installationen kan Lynis köras direkt från ett skal med extra alternativ som inte visas i menyn:",
"code": "lynis show version # version + build date\nlynis show commands # list every available command\nlynis show details TEST-ID # explain a specific control\nlynis audit system --quick # skip slow tests (e.g. malware scan)\nlynis audit system --pentest # treat host as untrusted (more aggressive)\nlynis update info # check if a newer Lynis is available\n\n# Filter the report log for just the warnings\ngrep \"Warning\" /var/log/lynis.log\n\n# Same, for suggestions only\ngrep \"Suggestion\" /var/log/lynis.log"
},
"troubleshoot": {
"heading": "Felsökning",
"cloneTitle": "git clone misslyckas under installationen",
"cloneBody": "Värden behöver nätverksåtkomst och DNS för att nå <code>github.com</code>. Från en konsol: <code>curl -sI https://github.com</code> och <code>git ls-remote https://github.com/CISOfy/lynis.git</code> kommer att avslöja det faktiska felet (DNS, TLS, proxy, repo URL). Om en proxy krävs, sätt <code>https_proxy</code> i miljön innan du kör menyn.",
"notFoundTitle": "lynis: kommandot som inte hittats efter installation",
"notFoundIntro": "Startskriptet <code>/usr/local/bin/lynis</code> skapades inte eller har tagits bort. Snabbaste lösningen är att installera om via menyn. Manuell lösning:",
"notFoundCode": "cat > /usr/local/bin/lynis <<'EOF'\n#!/bin/bash\ncd /opt/lynis && ./lynis \"$@\"\nEOF\nchmod +x /usr/local/bin/lynis",
"sshTitle": "Granskningen visar \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
"sshIntro": "SSH daemon tillåter för många auth försök per anslutning. Antingen installera <link>Fail2Ban</link> från ProxMenux (som sätter <code>MaxAuthTries=3</code> automatiskt) eller redigera <code>/etc/ssh/sshd_config</code> för hand:",
"sshCode": "sed -i 's/^#?MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config\nsystemctl reload sshd",
"scoreTitle": "Score gick ner efter en Proxmox uppgradering",
"scoreBody": "Kör <code>lynis update info</code> först - en Lynis-uppdatering kan ha lagt till nya kontroller som flaggar befintlig konfig. Uppdatera Lynis från menyn, re-audit och adressera de nya resultaten."
},
"files": {
"heading": "Filer skrivna",
"code": "/opt/lynis/ # full Lynis git checkout\n/usr/local/bin/lynis # wrapper script (cd + exec)\n/var/log/lynis.log # human-readable audit log (Lynis itself)\n/var/log/lynis-report.dat # machine-readable report (Lynis itself)"
},
"sample": {
"heading": "Provrapport",
"intro": "ProxMenux Monitor skapar en flersidig PDF för varje Lynis-körning via <link>fliken Säkerhet</link>. Första sidan sammanfattar härdningspoäng, systeminformation och säkerhetsläge. Följande sidor förklarar varje varning, listar förslag efter påverkan och visar paketinventeringen som användes vid granskningen.",
"imageAlt": "Första sidan av Lynis Security Audit Report PDF - verkställande sammanfattning med Hardening Index 71/100, systeminformationsblock och säkerhetsställningsöversikt med brandvägg, malware scanner och installerade paket räknas",
"captionPrefix": "Första sidan i en exempelrapport. Hela PDF-filen (",
"captionLink": "exempel",
"captionSuffix": ") fortsätter med detaljerade varningar, förslag och listan över installerade paket.",
"cli": "På CLI-sidan är samma data i <code>/var/log/lynis-report.dat</code> (maskinläsbar plattfil) och <code>/var/log/lynis.log</code> (den mänskliga läsbara körloggen). PDF genereras på begäran av ProxMenux Monitor - kör <code>lynis</code> från kommandoraden producerar inte en."
},
"related": {
"heading": "Relaterad",
"items": [
{
"href": "/docs/monitor/dashboard/security",
"label": "ProxMenux Monitor → Säkerhetsflik",
"tail": " - köra revisionen, bläddra i historiska rapporter och ladda ner PDF direkt från instrumentbrädan."
},
{
"href": "/docs/security/fail2ban",
"label": "Fail2Ban",
"tailRich": " - implementerar SSH brute-force skydd som Lynis rekommenderar."
},
{
"href": "/docs/security",
"label": "Säkerhetsöversikt",
"tail": " - tillbaka till avsnittsöversikten."
}
]
}
}
@@ -0,0 +1,169 @@
{
"meta": {
"title": "HTTPS för ProxMenux Monitor — Proxmox-värdcertifikat eller anpassade sökvägar | ProxMenux",
"description": "Tillhandahåll ProxMenux Monitor via HTTPS med Proxmox-värdens automatiskt upptäckta certifikat, inklusive Let’s Encrypt installerat via Proxmox ACME, eller ett eget certifikat på valfri sökväg på disken.",
"ogTitle": "HTTPS för ProxMenux Monitor - Proxmox värd eller anpassat certifikat",
"ogDescription": "Aktivera HTTPS på port 8008 med Proxmox värdcertifikat eller någon anpassad .pem / .key par."
},
"header": {
"title": "HTTPS för ProxMenux Monitor",
"description": "Aktivera HTTPS för Monitor på port 8008 med det automatiskt upptäckta Proxmox-värdcertifikatet eller ett eget certifikat på disken. Proxmox-alternativet föredrar ACME-certifikatet om det finns och återanvänder Let’s Encrypt som Proxmox hanterar utan en extra förnyelseuppgift.",
"section": "Säkerhet"
},
"intro": {
"title": "Vad denna sida täcker",
"body": "Hur man byter Monitor från HTTP till HTTPS i Inställningarna → Säkerhetspanel, vad varje certifikatkälla faktiskt pekar på på disken, hur Proxmox-alternativet beter sig när värden har en Let's Encrypt-cert och hur man ställer in anpassade vägar om du hanterar certer utanför Proxmox."
},
"wheresetting": {
"heading": "Var inställningen finns",
"body": "Öppna Monitor och gå till <strong>Inställningar → Säkerhet → HTTPS / SSL</strong>. Panelen visar HTTP eller HTTPS och, om HTTPS inte aktiverats, de upptäckta certifikatkällorna.",
"imageAlt": "Inställningar → Säkerhet → HTTPS / SSL-panelen i Monitorn som visar HTTPS-off-tillståndet, det automatiska upptäckta Proxmox-certifikatet (ämne, emittent, utgång) och alternativet Använd anpassat certifikat",
"caption": "Panelen Inställningar → Säkerhet → HTTPS / SSL före aktivering. Monitor visar certifikatet som Proxmox använder och låter dig välja det med ett klick."
},
"twoways": {
"heading": "Två sätt att aktivera HTTPS",
"proxmox": {
"title": "Använd Proxmox-certifikat",
"summary": "Ett klick: Monitor återanvänder certifikatet som Proxmox VE presenterar på port 8006.",
"items": [
"Upptäcks automatiskt, ingen sökväg att skriva",
"Föredrar ACME-certifikatet om det finns, annars det självsignerade standardcertifikatet",
"Proxmox sköter förnyelsen; Monitor validerar och laddar certifikatet vid nästa nya TLS-anslutning"
]
},
"custom": {
"title": "Använd anpassat certifikat",
"summaryRich": "Peka monitorn på ett <code>.pem</code> / <code>.key</code>-par var som helst på disken.",
"items": [
"Absoluta vägar (övervakningsprocessen måste kunna läsa båda)",
"Användbara när certerna kommer från <code>certbot</code>, <code>acme.sh</code> eller ett wildcard",
"Du ansvarar för förnyelsen: starta om Monitor när filerna ändras"
]
}
},
"proxmoxCert": {
"heading": "Proxmox-certifikat - vad det faktiskt pekar på",
"intro": "Proxmox VE håller två certifikatpar i <code>/etc/pve/local/</code>:",
"table": {
"headers": {
"file": "Fil",
"origin": "Ursprung",
"when": "När monitorn använder den"
},
"rows": [
{
"fileRich": "<code>pveproxy-ssl.pem</code><br /><code>pveproxy-ssl.key</code>",
"originRich": "Anpassade certifikat som laddats upp via Proxmox UI - inklusive Let's Encrypt-certifikatet som utfärdats under <em>Datacenter → Node → Certifikat → ACME</em>.",
"when": "Föredras när båda filerna finns; Monitor använder certifikatet som Proxmox presenterar."
},
{
"fileRich": "<code>pve-ssl.pem</code><br /><code>pve-ssl.key</code>",
"originRich": "Självsignerat certifikat som genereras vid installationstid av Proxmox PKI.",
"whenRich": "Fallback när ingen <code>pveproxy-ssl.pem</code> finns."
}
]
},
"callout": {
"title": "Samma prioritet som Proxmox själv",
"bodyRich": "<code>pveproxy</code> använder samma urvalsregel. Med Proxmox-alternativet använder Monitor certifikatet som Proxmox webbgränssnitt presenterar på 8006, utan kopiering eller separat förnyelseflöde."
}
},
"letsencrypt": {
"heading": "Få ett Let's Encrypt-certifikat via Proxmox ACME",
"intro": "Proxmox VE innehåller en egen ACME-klient. <em>”Order Certificate Now”</em> sparar resultatet i <code>/etc/pve/local/pveproxy-ssl.pem</code>, som Monitor läser. Följande fem steg sammanfattar <extlink1>Proxmox officiella guide</extlink1> i kommandona som behövs.",
"prereqs": {
"title": "Förutsättningar",
"items": [
"Noden har ett riktigt DNS-namn (inte bara en IP) som pekar på det.",
"<strong>Antingen</strong> port 80 nåbar från Internet (HTTP-01-validering, enklast), <strong>eller</strong> en DNS-leverantör med API-uppgifter (DNS-01, fungerar bakom NAT och stöder wildcard-certifikat).",
"En e-postadress för ACME-kontot."
]
},
"step1": {
"heading": "Steg 1 - Registrera ACME-kontot",
"introRich": "Ersätt e-post med din. Kontonamnet <code>default</code> är bara en etikett - du kan använda någon sträng.",
"code": "pvenode acme account register default you@example.com",
"afterRich": "Proxmox uppmanar dig att acceptera Let's Encrypt användarvillkor. Därefter kvarstår kontot under <code>/etc/pve/priv/acme/</code> och fliken ACME i GUI kommer att visa det."
},
"step2": {
"heading": "Steg 2 — Välj valideringstyp",
"http01Rich": "<strong>HTTP-01</strong> är den enklaste: den är inbyggd, ingen extra plugin. Let's Encrypt ansluter till <code>http://&lt;your-host&gt;/.well-known/acme-challenge/...</code> på port 80, så port 80 måste vara öppen från det offentliga internet till din nod - vanligtvis en port framåt på din router.",
"dns01Rich": "<strong>DNS-01</strong> fungerar utan att exponera port 80 (bra för homelabs bakom CG-NAT) och är det enda alternativet för wildcard certifikat. Du lägger till en DNS plugin en gång med din leverantörs API-token. Cloudflare exempel:",
"code": "pvenode acme plugin add dns cf \\\n --api cloudflare \\\n --data CF_Token=YOUR_CLOUDFLARE_API_TOKEN",
"outroRich": "För andra leverantörer (Gandi, OVH, AWS Route 53 osv.) se <code>pvenode acme plugin add dns --help</code>. Proxmox innehåller <extlink2>alla DNS-insticksmoduler från acme.sh</extlink2>."
},
"step3": {
"heading": "Steg 3 - Bind domänen till din nod",
"http01Rich": "För HTTP-01 (använder den inbyggda <code>standalone</code> plugin):",
"code1": "pvenode config set --acme domains=host.example.com,account=default",
"dns01": "För DNS-01 med Cloudflare plugin från Step 2:",
"code2": "pvenode config set --acmedomain0 domain=host.example.com,plugin=cf\npvenode config set --acme account=default",
"wildcardRich": "Wildcard? Lägg till <code>domain=*.example.com</code> på en separat <code>--acmedomainN</code>-post. Wildcards kräver DNS-01."
},
"step4": {
"heading": "Steg 4 - Beställ certifikatet",
"code": "pvenode acme cert order",
"afterRich": "Första körningen tar vanligtvis 30-60 sekunder medan utmaningen sprider sig. På framgång Proxmox skriver <code>/etc/pve/local/pveproxy-ssl.pem</code> + <code>.key</code>, startar <code>pveproxy</code>, och en förnyelsekrona schemaläggs automatiskt (Let's Encrypt certs är giltiga 90 dagar; Proxmox förnyar på 60)."
},
"step5": {
"heading": "Steg 5 - Verifiera emittenten",
"code": "openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -issuer",
"afterRich": "Bör skriva ut en emittent som börjar med <code>O = Let's Encrypt</code>. Om det i stället läser <code>CN = Proxmox Virtual Environment</code> misslyckades ordern och filen är fortfarande den självsignerade PVE-certen - kör <code>pvenode acme cert order --debug 1</code> för att se varför."
},
"gui": {
"title": "Föredrar GUI? Samma fem steg",
"bodyRich": "<em>Datacenter → ACME</em> registrerar kontot; <em>Datacenter → ACME → Plugins</em> lägger till DNS-insticksmodulen; <em>Node → Certificates → ACME</em> kopplar domänen; <em>Order Certificates Now</em> kör steg 4. Kommandona ovan passar för skript och system utan grafiskt gränssnitt."
}
},
"switchToHttps": {
"heading": "Byt Monitor till HTTPS",
"bodyRich": "När <code>/etc/pve/local/pveproxy-ssl.pem</code> signerats av Let's Encrypt öppnar du <strong>Inställningar → Säkerhet → HTTPS / SSL</strong>, kontrollerar att utfärdaren är <em>Let's Encrypt</em> och inte Proxmox lokala CA och klickar på <strong>Använd Proxmox-certifikat</strong>. Monitor startar om och nästa sidladdning använder HTTPS på 8008 med en offentligt betrodd certifikatkedja. Senare ACME-förnyelser valideras och väljs vid nästa nya TLS-anslutning, utan återkommande avfrågning eller omstart vid förnyelse. <strong>Uppdatera certifikat</strong> finns kvar under Säkerhet för diagnos och återställning."
},
"custom": {
"heading": "Anpassat certifikat - när du ska använda det",
"intro": "Klicka på <strong>Använd anpassat certifikat</strong> och ange två absoluta sökvägar:",
"items": [
"<strong>Certifikat</strong>: hela kedjan i PEM-format (<code>.pem</code> eller <code>.crt</code>).",
"<strong>Privat nyckel</strong>: matchande nyckel i PEM-format (<code>.key</code>)."
],
"outro": "Båda filerna läses av Monitor-processen vid start. De måste kunna läsas av användaren som systemd-enheten körs som (root som standard). Vanliga sökvägar när ACME hanteras utanför Proxmox:",
"code": "# certbot\n/etc/letsencrypt/live/<your-host>/fullchain.pem\n/etc/letsencrypt/live/<your-host>/privkey.pem\n\n# acme.sh\n~/.acme.sh/<your-host>_ecc/fullchain.cer\n~/.acme.sh/<your-host>_ecc/<your-host>.key",
"symlinkCallout": {
"title": "Symlink mål vs. filer",
"bodyRich": "<code>certbot</code> lagrar de faktiska filerna i <code>/etc/letsencrypt/archive/</code> och <code>live/</code>-vägen är en symlänk. Peka Monitorn på <code>live/</code> symlink, inte <code>archive/</code>-filen - på så sätt omskriver varje förnyelsecykel helt enkelt symlinkmålet och Monitorn plockar upp den nya certen vid nästa servicestart."
}
},
"afterHttps": {
"heading": "Efter att ha aktiverat HTTPS",
"bodyRich": "Att spara förändringen skriver <code>/etc/proxmenux/ssl_config.json</code> och utlöser en omstart av <code>proxmenux-monitor</code> systemd-enheten. Fliken webbläsare kommer att förlora sin nuvarande anslutning - ladda den på <code>https://&lt;host&gt;:8008/</code>. Den första belastningen med en Let's Encrypt-cert bör inte visa någon varning; med Proxmox självsignerad cert kommer webbläsaren att kräva ett undantag, samma som för port 8006.",
"reverse": {
"heading": "Omvända proxyservrar och webhooks",
"bodyRich": "När Monitorn byter till HTTPS, Proxmox VE webhook URL-adresser registrerade för meddelanden också vända från <code>http://</code> till <code>https://</code> automatiskt. Befintliga webhook-poster skrivs om nästa gång en anmälningsregel sparas eller återupptäcks, så ingen manuell redigering av Proxmox-meddelandekonfig behövs."
}
},
"trustCa": {
"heading": "Lita på Proxmox självsignerade CA",
"intro1Rich": "För att behålla Proxmox standardcertifikat utan ACME importerar du klustrets rot-CA i systemets eller webbläsarens betrodda certifikatlager. Monitor upptäcker <code>/etc/pve/local/pve-ssl.pem</code> som reservcertifikat. Klienten litar då på utfärdaren; URL:en måste fortfarande matcha ett namn i certifikatet.",
"intro2Rich": "CA-filen bor på <code>/etc/pve/pve-root-ca.pem</code> på varje nod. I ett kluster är vägen på det delade <code>pmxcfs</code>-filsystemet så att alla noder delar samma rot, och en enda import täcker hela datacentret. Kopiera den till din maskin:",
"code": "scp root@<your-host>:/etc/pve/pve-root-ca.pem ./pve-root-ca.pem",
"thenImport": "Importera sedan den på klientsidan:",
"items": [
"<strong>Linux (hela systemet):</strong> kör <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code> följt av <code>sudo update-ca-certificates</code>. Webbläsare med systemets certifikatlager (Chromium, Edge) känner igen CA:n efter omstart; Firefox har ett eget lager och behöver den manuella importen nedan.",
"<strong>macOS:</strong> dubbelklicka på <code>.pem</code>-filen i Nyckelhanterare, lägg till den i nyckelringen <em>System</em> och välj <em>Lita på → Lita alltid på</em>.",
"<strong>Windows:</strong> högerklicka på filen → <em>Installera certifikat</em> → placera det i <em>Betrodda rotcertifikatutfärdare</em>.",
"<strong>Firefox (alla operativsystem):</strong> <em>Inställningar → Sekretess och säkerhet → Certifikat → Visa certifikat → Certifikatutfärdare → Importera</em>; markera <em>Lita på denna CA för att identifiera webbplatser</em>."
],
"standalone": {
"title": "Standalone noder utanför ett kluster",
"bodyRich": "Varje icke-klustrerad Proxmox värd har sin egen <code>pve-root-ca.pem</code>. Om du hanterar flera fristående värdar, upprepa kopian/importen för varje eller gå med dem till ett kluster så att de delar en enda rot."
}
},
"disable": {
"heading": "Inaktivera HTTPS",
"bodyRich": "Klicka på <strong>Inaktivera HTTPS</strong> i samma panel. Monitor startar om med okrypterad HTTP, användbart om ett oläsbart eget certifikat hindrar tjänsten från att starta. Ingen separat avinstallation krävs och certifikatfilerna ändras inte.",
"stateCallout": {
"title": "Var tillståndet lagras",
"bodyRich": "<code>/etc/proxmenux/ssl_config.json</code> lagrar de aktiva certvägarna och källan (<code>none</code>, <code>proxmox</code>, <code>custom</code>). Radera filen är likvärdig med att inaktivera HTTPS - nästa start faller Monitor tillbaka till HTTP."
}
}
}