mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2026-11-02 19:02:31 +00:00
Merge remote-tracking branch 'origin/develop' into HEAD
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Código de conduta | Documentação ProxMenux",
|
||||
"description": "Código de conduta e boas práticas do ProxMenux para colaboradores, responsáveis pelos testes e utilizadores.",
|
||||
"ogTitle": "Código de conduta | Documentação ProxMenux",
|
||||
"ogDescription": "Expectativas sobre a responsabilidade pelo código, a comunicação de vulnerabilidades e o âmbito dos PR no projeto ProxMenux."
|
||||
},
|
||||
"errors": {
|
||||
"notFound": "Erro: O ficheiro CODE_OF_CONDUCT.md não foi encontrado.",
|
||||
"loadFailed": "Erro: Não foi possível carregar o conteúdo do Código de Conduta."
|
||||
},
|
||||
"contentMarkdown": "# 📝 Código de conduta e boas práticas\n\nEste documento define os **princípios e as orientações** para o uso do **ProxMenux**, promovendo o **respeito, a colaboração e a segurança** no desenvolvimento.\n\n## 📌 1. Autoria do código e reconhecimento\n\n- Se forem usados **scripts, excertos de código ou ideias** de outros repositórios ou programadores, o autor original será sempre reconhecido.\n- Será acrescentado um comentário no código ou na documentação que indique a origem e, se possível, uma ligação para o repositório original.\n- Ao usar código com uma **licença** específica, é obrigatório respeitar as suas condições.\n\n### ✅ Exemplo de atribuição correta no código:\n\n```bash\n# Script baseado no trabalho de [Autor] em [Ligação do repositório]\n```\n\n## 🔒 2. Segurança e responsabilidade pelo código\n\n- Todo o código deste repositório segue boas práticas de desenvolvimento seguro.\n- Não são permitidos contributos que introduzam vulnerabilidades intencionais ou práticas inseguras.\n- Os scripts nunca devem comprometer a segurança do sistema nem os dados dos utilizadores.\n- Antes da implementação, os contributos devem ser revistos para verificar a segurança e a estabilidade.\n\n### ⚠️ Divulgação responsável de vulnerabilidades\n\nSe descobrir uma vulnerabilidade de segurança, NÃO a comunique em issues ou fóruns públicos.\n\nComunique-a em privado por e-mail:\n\n📧 proxmenux@macrimi.pro\n\nPara mais informações sobre vulnerabilidades e como as comunicar, consulte a nossa [política de segurança](./SECURITY.md).\n\n## 🤝 3. Regras da comunidade\n\nPara manter um ambiente respeitador e profissional, todos os utilizadores devem seguir estas regras:\n\n- ✅ Seja respeitador e construtivo nas discussões.\n- ❌ Não serão tolerados assédio, discurso de ódio ou comportamentos ofensivos.\n- ✅ Dê opiniões de forma profissional, evitando ataques pessoais.\n- ❌ O incumprimento pode resultar em avisos ou exclusões, consoante a gravidade.\n\n##\n\nEste documento promove o uso ético do código, a consciência de segurança e uma comunidade respeitadora.\n\n📢 Vamos construir algo extraordinário em conjunto!\n"
|
||||
}
|
||||
@@ -0,0 +1,293 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Contribuir para ProxMenux | ProxMenux Documentação",
|
||||
"description": "Como contribuir para o ProxMenux: modelo de ramos (main / develop / feature/*), processo de pull request, cabeçalho com autoria e ligação de apoio opcional, interface em duas fases, funções de mensagens e percurso até uma versão estável.",
|
||||
"ogTitle": "Contribuição para ProxMenux",
|
||||
"ogDescription": "Modelo de ramos, processo, autoria no cabeçalho e regra da interface em duas fases a seguir pelos colaboradores."
|
||||
},
|
||||
"header": {
|
||||
"title": "Contribuição para ProxMenux",
|
||||
"description": "O ProxMenux está aberto a contribuições comunitárias — novos scripts, correções para os existentes, melhorias de diálogo, traduções, integrações. Esta página é a porta formal: como o repositório é estruturado, o modelo de ramificação e fluxo de trabalho pull-request, o cabeçalho do script com atribuição do autor e link de patrocinador opcional, e as convenções de projeto cada contribuição deve seguir.",
|
||||
"section": "Sobre"
|
||||
},
|
||||
"twoPagesCallout": {
|
||||
"title": "Duas páginas relacionadas, um projecto",
|
||||
"body": "Não confunda esta página com <contributorsLink>Colaboradores</contributorsLink>, que reconhece testadores, revisores e programadores já envolvidos. Esta página é para <em>si</em>, futuro colaborador, e explica como preparar uma pull request para integração."
|
||||
},
|
||||
"branching": {
|
||||
"heading": "Modelo de ramificação",
|
||||
"intro": "ProxMenux usa um modelo de ramificação de três camadas:",
|
||||
"headerBranch": "Ramo",
|
||||
"headerPurpose": "Finalidade",
|
||||
"rows": [
|
||||
{
|
||||
"branch": "main",
|
||||
"purposeRich": "Código estável, pronto para produção. Só são integradas aqui alterações prontas para lançamento. É a versão recebida numa instalação normal do ProxMenux."
|
||||
},
|
||||
{
|
||||
"branch": "develop",
|
||||
"purposeRich": "Ramo de desenvolvimento ativo. O trabalho novo é integrado primeiro aqui: é o canal beta. Quando uma versão estável está pronta, passa daqui para <code>main</code>."
|
||||
},
|
||||
{
|
||||
"branch": "feature/*",
|
||||
"purposeRich": "Ramos de curta duração por recurso, correção ou melhoria. Criado a partir de <code>develop</code>, fundiu-se novamente em <code>develop</code> através de um Pull Request após revisão."
|
||||
}
|
||||
],
|
||||
"calloutTitle": "O que isto significa para os utilizadores",
|
||||
"calloutBody": "Usuários finais rastreando <code>main</code> recebem versões testadas. Usuários que querem os recursos mais recentes cedo — e não se importem com as bordas ásperas ocasionais — podem seguir o <code>develop</code>. Novos recursos sempre passam por <code>develop</code> primeiro; nada atinge <code>main</code> sem passar por esse ciclo."
|
||||
},
|
||||
"workflow": {
|
||||
"heading": "Processo de pull request",
|
||||
"intro": "Da ideia ao lançamento mesclado em cinco etapas:",
|
||||
"step1Lead": "<strong>Criar um ramo de recursos de <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": "Use um nome de ramo descritivo: <code>feature/zfs-arc-tuning</code>, <code>feature/fix-iommu-detection</code>, <code>feature/add-tailscale-script</code>.",
|
||||
"step2Lead": "<strong>Trabalhe nas suas alterações e empurre o branch:</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>Abra um pedido de pull contra <code>develop</code></strong> (não contra <code>main</code>). Na página de criação de GitHub PR, verifique novamente se o ramo base está definido como <code>develop</code>. Incluir na descrição: o que o script faz, o que ele muda, e em quais versões Proxmox VE você testou.",
|
||||
"step4": "<strong>Após a revisão, as alterações são integradas em <code>develop</code>.</strong> Um responsável verifica o código, o cabeçalho e a interface em duas fases. Se pedir alterações, envie novos commits para o mesmo ramo: a PR atualiza-se automaticamente.",
|
||||
"step5": "<strong>As versões estáveis passam de <code>develop</code> para <code>main</code>.</strong> No lançamento, <code>main</code> avança até <code>develop</code> por fast-forward e recebe uma etiqueta. A contribuição passa a integrar a próxima versão estável."
|
||||
},
|
||||
"scriptHeader": {
|
||||
"heading": "Cabeçalho do programa — metadados e descrição",
|
||||
"intro": "Cada script em ProxMenux abre com dois blocos de comentários adjacentes que juntos formam o cabeçalho. Eles são <strong> ambos necessários</strong> — juntos eles deixam qualquer leitor saber quem escreveu o script e o que ele faz, tudo sem abrir o próprio código.",
|
||||
"bullets": [
|
||||
"<strong>Bloco superior: metadados.</strong> Autor, ligações GitHub/de apoio opcionais, responsável, copyright, licença, versão e data de atualização. É também o <em>reconhecimento dos colaboradores</em>: num script novo, inclua o seu nome e, se quiser, a página GitHub e um perfil como Ko-fi, GitHub Sponsors ou Buy Me a Coffee.",
|
||||
"<strong>Bloco inferior: descrição.</strong> Um parágrafo curto em inglês simples explica o script. É lido <em>antes</em> do código e deve bastar para compreender o objetivo, ações principais, recursos afetados e requisitos."
|
||||
],
|
||||
"licenseCalloutTitle": "A linha de licença é fixa — GPL-3.0",
|
||||
"licenseCalloutBody": "ProxMenux é publicado sob a Licença Pública Geral <strong>GNU v3.0</strong>. Cada script no projeto envia sob essa mesma licença; a linha <code>License</code> no cabeçalho é sempre a referência GPL-3.0 mostrada no exemplo abaixo — não é uma escolha por script. Ao contribuir com um script, você concorda em lançá-lo sob GPL-3.0, o que significa que qualquer um pode lê-lo, modificá-lo e redistribuí-lo (incluindo modificações), desde que o mantenha sob a mesma licença. O texto completo vive em <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": "As linhas <code>GitHub</code> e <code>Sponsor</code> são opcionais — deixe-as de fora se não quiser publicá-las. Tudo o resto é necessário.",
|
||||
"whyCalloutTitle": "Por que isso importa?",
|
||||
"whyCalloutBody": "A contribuição de código aberto é trabalho voluntário. Colocar o nome do contribuinte e (quando fornecido) o link do patrocinador diretamente na fonte dá às pessoas que constroem os scripts reconhecimento visível cada vez que alguém lê o código — sua autoria é preservada, não escondida sob “o projeto”. O bloco de descrição importa por uma razão diferente: é a primeira coisa que um futuro mantenedor ou usuário curioso lê, e uma descrição clara é muitas vezes a diferença entre um script que as pessoas confiam e uma que elas evitam."
|
||||
},
|
||||
"structure": {
|
||||
"heading": "Estrutura do projecto",
|
||||
"intro": "Onde cada tipo de script vive no repositório:",
|
||||
"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": "Cada script carrega <code>utils.sh</code> no arranque através de source para obter funções de mensagens, indicador de espera, cores e sistema de tradução. As bibliotecas partilhadas em <code>scripts/global/</code> são carregadas explicitamente pelos scripts que delas precisam."
|
||||
},
|
||||
"twoPhase": {
|
||||
"heading": "A política de design de IU em duas fases",
|
||||
"intro": "É a convenção mais importante do ProxMenux e a que mais frequentemente leva a pedidos de correção nas PR. Cada script divide-se em <strong>exatamente duas fases</strong>:",
|
||||
"headerPhase": "Fase",
|
||||
"headerPurpose": "Finalidade",
|
||||
"headerScreen": "Estado da tela",
|
||||
"rows": [
|
||||
{
|
||||
"phaseRich": "<strong>Fase 1 — Selecção</strong>",
|
||||
"purposeRich": "Recolha todas as decisões do utilizador. Executar todos os trabalhos preparatórios necessários (sondas, sondagens, verificações).",
|
||||
"screenRich": "Janelas <code>dialog</code>. Se uma verificação entre dois menus demorar mais de um ou dois segundos, mostre um indicador <code>msg_info</code> para sinalizar que o script não bloqueou, e chame <code>stop_spinner</code> imediatamente antes do próximo diálogo."
|
||||
},
|
||||
{
|
||||
"phaseRich": "<strong>Fase 2 — Execução</strong>",
|
||||
"purposeRich": "Executar todas as operações. Mostra o histórico de progresso completo acumulado na tela.",
|
||||
"screenRich": "Mensagens visíveis <code>msg_info</code> / <code>msg_ok</code>; nunca <code>dialog</code>."
|
||||
}
|
||||
],
|
||||
"principle": "O princípio: <strong>colha tudo primeiro, depois executa tudo</strong>. O usuário vê um menu de diálogo limpo (Fase 1), em seguida, uma visão de execução de log-style limpo (Fase 2). Nenhuma mistura — nenhuma janela que apareça no meio da execução, nenhum ruído de progresso durante a selecção.",
|
||||
"phase1Heading": "Fase 1 — padrão típico",
|
||||
"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>Regras para fase 1:</strong>",
|
||||
"phase1Rules": [
|
||||
"Se estiver ativo um indicador <code>msg_info</code> e precisar de abrir um menu <code>dialog</code> ou <code>whiptail</code>, chame primeiro <code>stop_spinner</code>: o indicador não pode coexistir com a sobreposição das ferramentas. Se nenhum estiver ativo, a chamada não é necessária.",
|
||||
"Use <code>show_proxmenux_logo</code> + <code>msg_title</code> + <code>msg_info</code> quando você precisa dar ao usuário contexto visual para uma operação de longa duração em fase 1 (por exemplo, uma sonda que leva 5+ segundos). A função inclui uma tela limpa, então não chame <code>clear</code> antes.",
|
||||
"Não chame o <code>show_proxmenux_logo</code> entre menus de diálogo onde não há nada para exibir — limpar a tela para um terminal vazio é apenas ruído visual.",
|
||||
"Armazene todas as decisões e resultados de sonda em variáveis ou arrays paralelos. A recapitulação visível ocorre no início da Fase 2, não na Fase 1."
|
||||
],
|
||||
"phase2Heading": "Fase 2 — padrão típico",
|
||||
"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>Regras para a fase 2:</strong> comece com <code>show_proxmenux_logo + msg_title</code> e resuma de imediato a fase 1 em linhas <code>msg_ok</code>. Não volte a chamar <code>show_proxmenux_logo</code>, pois apagaria o progresso acumulado. Não utilize <code>dialog</code>; se uma decisão durante a execução for inevitável, utilize <code>whiptail</code> como na secção seguinte."
|
||||
},
|
||||
"dialogVsWhiptail": {
|
||||
"headingRich": "Quando usar <code>dialog</code> vs <code>whiptail</code>",
|
||||
"intro": "Ambas as ferramentas desenham interfaces de usuário de modo texto, mas elas se comportam de forma muito diferente na tela — e ProxMenux as usa em duas fases distintas por uma razão.",
|
||||
"headerTool": "Ferramenta",
|
||||
"headerWhen": "Quando usá-lo",
|
||||
"headerEffect": "Efeito no ecrã",
|
||||
"rows": [
|
||||
{
|
||||
"toolRich": "<strong><code>dialog</code></strong>",
|
||||
"whenRich": "<strong>Sempre em fase 1.</strong> Cada seleção interativa — escolhendo um VM, um disco, um sistema de arquivos, confirmando uma ação — usa <code>dialog</code>. Esta é a ferramenta padrão de UI do ProxMenux.",
|
||||
"effectRich": "Assume o terminal: limpa a tela, desenha sua sobreposição, e ao fechar retorna o terminal ao seu estado anterior. Tudo bem na fase 1 porque nada de útil está mostrando ainda."
|
||||
},
|
||||
{
|
||||
"toolRich": "<strong><code>whiptail</code></strong>",
|
||||
"whenRich": "<strong>Apenas na Fase 2, somente quando inevitável.</strong> O caso típico é um prompt de reinicialização no final da execução. Não procure o <code>whiptail</code> para pedir “continuar?” no meio da execução — essa decisão deveria ter sido tomada na Fase 1.",
|
||||
"effectRich": "Sobreposição mais leve que <em>não limpa</em> o contexto do terminal. O histórico <code>msg_ok</code>/<code>msg_info</code> da fase 2 permanece visível atrás do diálogo. É por isso a escolha indicada quando o progresso já está no ecrã."
|
||||
}
|
||||
],
|
||||
"calloutTitle": "Por que a divisão importa",
|
||||
"calloutBody": "Se você chamar <code>dialog</code> no meio da fase 2, cada linha <code>msg_ok</code> que o usuário tem assistido desaparece. Limpas o rasto da auditoria. <code>whiptail</code> evita isso. Então a regra não é arbitrária — é sobre preservar a visão do usuário sobre o que o script tem feito até agora.",
|
||||
"rebootHeading": "Pedido de reinício: o caso típico de whiptail na fase 2",
|
||||
"rebootIntro": "Quando um script termina e uma reinicialização pode ser necessária (por exemplo: IOMMU habilitado, parâmetros do kernel alterados), o prompt no final da Fase 2 usa <code>whiptail</code>. Sempre inclua um branch “Não” que avisa o usuário para não usar o recurso afetado até que ele reinicie:",
|
||||
"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": "Referência das funções da mensagem",
|
||||
"intro": "Todos definidos em <code>utils.sh</code>. Use-os como padrão para qualquer saída visível pelo usuário — visual consistente entre scripts é o ponto principal. Se seu script precisar de uma nova função que não se encaixe no conjunto existente (um novo nível de gravidade, um novo auxiliar de layout, etc.), proponha-o em seu pedido de pull — ele será revisado e adicionado ao <code>utils.sh</code> se for amplamente útil.",
|
||||
"headerFunction": "Função",
|
||||
"headerWhen": "Quando utilizar",
|
||||
"headerSpinner": "Indicador de progresso",
|
||||
"rows": [
|
||||
{
|
||||
"function": "msg_info \"text\"",
|
||||
"whenRich": "Operação em curso.",
|
||||
"spinner": "Inicia"
|
||||
},
|
||||
{
|
||||
"function": "stop_spinner",
|
||||
"whenRich": "Fim dos trabalhos preparatórios silenciosos na fase 1 — mata spinner, limpa a linha.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_ok \"text\"",
|
||||
"whenRich": "Operação concluída. Utilize também para uma funcionalidade ativada, mesmo que ainda seja necessário reiniciar.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_warn \"text\"",
|
||||
"whenRich": "Aviso real ou estado degradado.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_error \"text\"",
|
||||
"whenRich": "Erro fatal.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_info2 \"text\"",
|
||||
"whenRich": "Informação sem bloqueio, numa linha ciano.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_success \"text\"",
|
||||
"whenRich": "Final “Pressione Enter para retornar” no final da fase 2.",
|
||||
"spinner": "Para"
|
||||
},
|
||||
{
|
||||
"function": "msg_title \"text\"",
|
||||
"whenRich": "Título negrito com espaçamento embutido. Utilizado no início da fase 2.",
|
||||
"spinner": "—"
|
||||
},
|
||||
{
|
||||
"function": "show_proxmenux_logo",
|
||||
"whenRich": "Limpa o ecrã, mostra o logótipo. Chamado <em> uma vez</em> apenas no início da Fase 2.",
|
||||
"spinner": "—"
|
||||
}
|
||||
]
|
||||
},
|
||||
"dialogConventions": {
|
||||
"heading": "convenções de diálogo",
|
||||
"bullets": [
|
||||
"Passe sempre <code>--backtitle \"$BACKTITLE\"</code> para cada chamada <code>dialog</code> e <code>whiptail</code>. <code>$BACKTITLE</code> é sempre <code>\"ProxMenux\"</code> — definido uma vez no cabeçalho do script e nunca substituído. O usuário deve sempre ver o nome do projeto como o contexto de enquadramento, nunca o próprio título do script.",
|
||||
"Enrole sempre títulos e mensagens com <code>$(translate \"...\")</code>.",
|
||||
"Sempre redirecionar saída <code>dialog</code> com <code>2>&1 >/dev/tty</code> - o stdout capturado torna-se a seleção do usuário, enquanto o diálogo em si desenha no terminal.",
|
||||
"Use as variáveis de dimensão padrão de UI (<code>$UI_MENU_H</code>, <code>$UI_MSG_W</code>, etc.) para dimensionamento consistente entre scripts.",
|
||||
"Verifique sempre escolhas vazias ou canceladas e trate-as corretamente."
|
||||
],
|
||||
"exampleIntro": "Exemplo completo: criar um menu de seleção de VM e tratar o cancelamento.",
|
||||
"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": "Política de tradução",
|
||||
"intro": "Todas as strings visíveis ao usuário devem ser enroladas com a função <code>translate</code>. ProxMenux traduz-os automaticamente em todas as línguas suportadas — você escreve inglês, o usuário lê sua língua nativa.",
|
||||
"code": "msg_ok \"$(translate \"Operation completed successfully.\")\"\nmsg_error \"$(translate \"Failed to start container\") $CTID.\"\ndialog --title \"$(translate \"Select Storage\")\" ...",
|
||||
"bullets": [
|
||||
"Escreva strings em inglês — a tradução é tratada automaticamente pela compilação.",
|
||||
"Mantenha as cadeias de texto concisas. Evite, se possível, variáveis dentro de frases longas.",
|
||||
"<strong>Não</strong> traduza nomes de variáveis, caminhos ou identificadores técnicos."
|
||||
]
|
||||
},
|
||||
"variableStyle": {
|
||||
"heading": "Convenções de variáveis e estilo",
|
||||
"bullets": [
|
||||
"Usar <code>UPPER_CASE</code> para variáveis de nível de script.",
|
||||
"Use <code>lower_case</code> para variáveis de função local (declare com <code>local</code>).",
|
||||
"Coloque todas as expansões de variáveis entre aspas: <code>\"$VAR\"</code>, não <code>$VAR</code>.",
|
||||
"Usar <code>[[ ]]</code> para condicionantes, não <code>[ ]</code> (exceto onde POSIX é necessário).",
|
||||
"<code>show_proxmenux_logo</code> é a forma prevista de limpar o ecrã: limpa-o e mostra o logótipo do projeto para manter o contexto visual. Chame-o uma vez no início da fase 2, e opcionalmente antes de uma espera longa na fase 1."
|
||||
],
|
||||
"standardNamesIntro": "Nomes de variáveis padrão em todo o projeto:",
|
||||
"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": "Redirecionando a saída da ferramenta durante a fase 2",
|
||||
"redirectIntro": "A fase 2 mostra um registo de linhas <code>msg_info → msg_ok</code>. Se uma ferramenta chamada, como apt, mkfs, qm, pct ou dd, escrever em stdout/stderr, a sua saída desloca as mensagens e confunde o ecrã. O utilizador deixa de distinguir o progresso do script dos detalhes da ferramenta.",
|
||||
"withoutRedirectIntro": "<strong>Sem redirecionar</strong> — o que o usuário vê se você não lidar com o ruído:",
|
||||
"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>Com redirecionamento</strong> — como é a mesma operação quando o ruído é enviado para outro lugar:",
|
||||
"withRedirectCode": "ℹ Installing kernel package...\n✓ Kernel installed.\nℹ Configuring kernel command line...\n✓ Configured.\nℹ Refreshing boot loader...\n✓ Boot loader updated.",
|
||||
"twoPatternsIntro": "Dois padrões para escolher:",
|
||||
"discardLead": "<strong>Descarte a saída</strong> quando você não precisar — mais rápido, mais simples:",
|
||||
"discardCode": "DEBIAN_FRONTEND=noninteractive apt-get install -y \"$package\" >/dev/null 2>&1",
|
||||
"logLead": "<strong>Envie a saída para um arquivo de log</strong> quando você quiser inspeccioná-lo mais tarde (depurando uma instalação falhada, verificando o que o dpkg realmente fez). Este é o padrão preferido para qualquer operação apt:",
|
||||
"logCode": "apt-get install -y \"$package\" >> \"$log_file\" 2>&1",
|
||||
"referenceOutro": "O script <code>scripts/global/update-pve9_2.sh</code> é uma implementação de referência — cada chamada <code>apt-get</code> envia saída para um arquivo de log para que o usuário apenas veja o fluxo limpo <code>msg_info → msg_ok</code>, enquanto o log no disco permite reconstruir exatamente o que o apt fez se algo der errado."
|
||||
},
|
||||
"dosAndDonts": {
|
||||
"heading": "Fazer e Não Fazer",
|
||||
"doHeading": "✅ Fazer",
|
||||
"doBullets": [
|
||||
"<code>stop_spinner</code> antes de um <code>dialog</code> em fase 1 somente quando um spinner <code>msg_info</code> está em execução atualmente.",
|
||||
"Fase 2 começa com <code>show_proxmenux_logo + msg_title + msg_ok</code> recap dos resultados da Fase 1.",
|
||||
"Use <code>msg_ok</code> para recursos habilitados com sucesso — mesmo que seja necessário reiniciar.",
|
||||
"Use <code>whiptail</code> (não <code>dialog</code>) para qualquer prompt pós-execução que deve aparecer na Fase 2.",
|
||||
"Sempre inclua um branch \"Não\" nas janelas de reinicialização que alerta o usuário para não iniciar o recurso afetado até reiniciar.",
|
||||
"Limite a lógica exclusiva de VM verificando <code>[[ -f \"/etc/pve/qemu-server/$'{'vmid'}'.conf\" ]]</code>: controladores e NVMe PCIe não podem ser atribuídos a LXC por passthrough PCI.",
|
||||
"Utilizar <code>ensure_repositories</code> de <code>utils-install-functions.sh</code> em vez de <code>apt-get update</code> incondicional.",
|
||||
"Use arrays paralelos na Fase 1 quando cada item precisar de múltiplas janelas."
|
||||
],
|
||||
"dontHeading": "❌ Não fazer",
|
||||
"dontBullets": [
|
||||
"Chame <code>dialog</code> enquanto um spinner está ativo.",
|
||||
"Pular a fase 1 recap no início da fase 2.",
|
||||
"Chame o <code>show_proxmenux_logo</code> pela segunda vez — ele apaga tudo que a Fase 2 imprimiu.",
|
||||
"Utilizar <code>dialog</code> na Fase 2 (utilizar <code>whiptail</code> para o caso raro inevitável).",
|
||||
"Utilizar apenas <code>clear</code>.",
|
||||
"Enrole <code>msg_title</code> em linhas em branco <code>echo \"\"</code> — já inclui espaçamento.",
|
||||
"Use o <code>msg_warn</code> para relatar um recurso habilitado com sucesso — que é um <code>msg_ok</code>.",
|
||||
"Executar <code>apt-get update</code> incondicional — utilizar <code>ensure_repositories</code>."
|
||||
]
|
||||
},
|
||||
"submitting": {
|
||||
"heading": "Submissão da sua contribuição",
|
||||
"steps": [
|
||||
"Crie um fork de <code>MacRimi/ProxMenux</code> no GitHub e clone esse fork.",
|
||||
"Crie um ramo <code>feature/*</code> a partir de <code>develop</code> (veja <em>Modelo de ramos</em> acima).",
|
||||
"Siga este guia para quaisquer scripts novos ou modificados. Escreva o cabeçalho com o seu nome; adicione a linha de patrocinador opcional se quiser.",
|
||||
"Teste o script numa instância real do Proxmox VE: fase 1 com todos os ramos dos diálogos e fase 2 com cada operação e a reversão correta em caso de erro.",
|
||||
"Abra um Pull Request <strong> contra <code>develop</code></strong> com uma descrição clara: o que o script faz, o que mudou, em que versão Proxmox VE foi testado.",
|
||||
"Certifique-se de que sua contribuição respeite o <cocLink>Código de Conduta</cocLink>."
|
||||
],
|
||||
"securityOutro": "Para questões sensíveis à segurança, siga o fluxo de divulgação em <securityLink>SECURITY.md</securityLink> em vez de abrir um problema público."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Para onde seguir",
|
||||
"items": [
|
||||
{
|
||||
"kind": "external",
|
||||
"url": "https://github.com/MacRimi/ProxMenux/blob/main/CONTRIBUTING.md",
|
||||
"label": "CONTRIBUTING.md (guia completo)",
|
||||
"tail": " — a fonte da verdade para cada convenção, incluindo os padrões avançados de hardware."
|
||||
},
|
||||
{
|
||||
"kind": "internal",
|
||||
"href": "/docs/about/contributors",
|
||||
"label": "Contribuidores",
|
||||
"tail": " — as pessoas cuja obra moldou os lançamentos do ProxMenux (página diferente deste)."
|
||||
},
|
||||
{
|
||||
"kind": "internal",
|
||||
"href": "/docs/about/code-of-conduct",
|
||||
"label": "Código de Conduta",
|
||||
"tail": " — as normas que cada contribuinte aceita respeitar."
|
||||
},
|
||||
{
|
||||
"kind": "external",
|
||||
"url": "https://github.com/MacRimi/ProxMenux/discussions",
|
||||
"label": "GitHub Discussions",
|
||||
"tail": " — pergunte antes de você construir se você não tem certeza se uma ideia se encaixa, ou para encontrar colaboradores em um recurso maior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Colaboradores | Documentação ProxMenux",
|
||||
"description": "Reconhecimento às pessoas que tornam o ProxMenux possível: quem testa, revê e desenvolve cada versão.",
|
||||
"ogTitle": "Colaboradores | Documentação ProxMenux",
|
||||
"ogDescription": "Conheça os colaboradores por trás do ProxMenux."
|
||||
},
|
||||
"header": {
|
||||
"title": "Colaboradores",
|
||||
"description": "O projeto ProxMenux cresce graças aos seus colaboradores. Esta página reconhece o seu trabalho: testar versões antes da publicação, detetar regressões, rever PR e ajudar a orientar novas funcionalidades.",
|
||||
"section": "Sobre"
|
||||
},
|
||||
"beyond": {
|
||||
"title": "Para além desta lista",
|
||||
"body": "Muitas outras pessoas contribuem ao comunicar erros, propor funcionalidades em Discussions, testar versões beta e traduzir o projeto. A lista completa de colaboradores do código está no <extlink>gráfico de colaboradores do GitHub</extlink>. Esta página destaca quem participa mais ativamente nos testes e na revisão das versões do ProxMenux."
|
||||
},
|
||||
"testers": {
|
||||
"heading": "Testadores e revisores",
|
||||
"intro": "Estas pessoas estiveram entre as primeiras a contribuir para o projeto. Os seus testes, relatos de problemas e sugestões de melhoria ajudaram o ProxMenux a tornar-se no que é hoje.",
|
||||
"roles": {
|
||||
"testing": "Teste",
|
||||
"testingReviewer": "Testes e revisão"
|
||||
},
|
||||
"youtube": "YouTube"
|
||||
},
|
||||
"contribute": {
|
||||
"heading": "Queres contribuir?",
|
||||
"intro": "Todos os contributos são bem-vindos: código, testes, design, documentação ou simplesmente partilhar ideias:",
|
||||
"tester": "<strong>Testes</strong> — experimente o <beta>canal beta</beta> e comunique o que funciona ou não antes da publicação das versões estáveis.",
|
||||
"developer": "<strong>Desenvolvimento</strong> — Bash, Next.js (TypeScript) e algum Python para o ambiente virtual de tradução (venv). Os PR são bem-vindos no <gh>GitHub</gh>.",
|
||||
"designer": "<strong>Designer</strong> — Melhorias de interface, ícones, capturas de tela para documentação.",
|
||||
"ideas": "<strong>Ideias</strong> — abra um tópico em <disc>GitHub Discussions</disc> antes de criar uma issue para pedir uma funcionalidade."
|
||||
},
|
||||
"coc": {
|
||||
"title": "Leia primeiro o Código de Conduta",
|
||||
"body": "Antes de propor código ou comunicar problemas, leia o <coclink>Código de conduta e as boas práticas</coclink>. Explica as expectativas sobre a responsabilidade pelo código, a comunicação de vulnerabilidades e o âmbito dos PR."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Perguntas frequentes | Documentação ProxMenux",
|
||||
"description": "Perguntas frequentes sobre o ProxMenux: funcionalidades, instalação, compatibilidade a partir do PVE 8, personalização, atualizações, segurança, uso em produção, ficheiros do sistema, contributos e desinstalação.",
|
||||
"ogTitle": "Perguntas frequentes | Documentação ProxMenux",
|
||||
"ogDescription": "Perguntas frequentes sobre instalação, compatibilidade, segurança e contribuição do ProxMenux."
|
||||
},
|
||||
"header": {
|
||||
"title": "Perguntas frequentes",
|
||||
"description": "Perguntas comuns sobre o ProxMenux: o que é, a quem se destina, instalação, atualização, desinstalação, compatibilidade, personalização, segurança e contributos. Se não encontrar a sua pergunta, consulte GitHub Discussions ou abra uma issue.",
|
||||
"section": "Sobre"
|
||||
},
|
||||
"quickLinks": {
|
||||
"title": "Ligações rápidas",
|
||||
"installationLabel": "Instalação",
|
||||
"installationSuffix": " — o comando de instalação de uma linha + dependências.",
|
||||
"introductionLabel": "Introdução",
|
||||
"introductionSuffix": " — o que faz ProxMenux, em 5 minutos.",
|
||||
"uninstallLabel": "Desinstalar",
|
||||
"uninstallSuffix": " — remoção limpa.",
|
||||
"issuesLabel": "GitHub Issues",
|
||||
"discussionsLabel": "Discussões"
|
||||
},
|
||||
"q1": {
|
||||
"question": "O que é o ProxMenux e para que é utilizado?",
|
||||
"p1Rich": "<strong>ProxMenux</strong> é uma ferramenta de menu interativa projetada para tornar o <strong>Proxmox VE</strong> acessível a todos os usuários, independentemente de sua experiência técnica. Ele simplifica a execução de comandos, permitindo que os usuários executem ações em seu sistema sem exigir conhecimento avançado do Linux.",
|
||||
"p2": "Os utilizadores menos experientes executam comandos através de menus estruturados, reduzindo a escrita manual no terminal. Os administradores experientes poupam passos em tarefas repetitivas: reforço de segurança após a instalação, passthrough de GPU, importação de VM OVF e rotação de snapshots ZFS.",
|
||||
"p3": "Proxmox VE é amplamente utilizado para:",
|
||||
"items": [
|
||||
"Virtualização de nível empresarial",
|
||||
"HomeLab e soluções de nuvem pessoal",
|
||||
"Servidores multimídia, automação e muito mais"
|
||||
]
|
||||
},
|
||||
"q2": {
|
||||
"question": "Como faço para instalar ProxMenux?",
|
||||
"p1Rich": "Siga o <installlink>guia de instalação</installlink>. Em resumo:",
|
||||
"stableInstall": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"",
|
||||
"p2": "Uma vez instalado, basta iniciar com:",
|
||||
"menuCmd": "menu"
|
||||
},
|
||||
"q3": {
|
||||
"question": "O ProxMenux é compatível com todas as versões do Proxmox?",
|
||||
"bodyRich": "<strong>Não — o ProxMenux requer Proxmox VE 8 ou posterior.</strong> O PVE 7 e as versões anteriores não são suportados. Se ainda usa o PVE 7, atualize primeiro para 8.x segundo o procedimento oficial do Proxmox. Depois, o ProxMenux pode tratar da passagem de 8 para 9 em <upgradelink>Utilitários → Atualizar PVE 8 para PVE 9</upgradelink>."
|
||||
},
|
||||
"q4": {
|
||||
"question": "Posso personalizar ProxMenux?",
|
||||
"p1Rich": "As atualizações podem substituir alterações locais aos scripts principais, pelo que deve evitar editar esses ficheiros diretamente. O que <em>pode</em> personalizar:",
|
||||
"items": [
|
||||
"O banner do console através da ferramenta <strong>FastFetch</strong> nas opções de Post-Install.",
|
||||
"Quais componentes opcionais são instalados (Monitor, Fail2Ban, Lynis...) — escolha durante a instalação ou através do menu relevante mais tarde."
|
||||
]
|
||||
},
|
||||
"q5": {
|
||||
"question": "Como faço para atualizar o ProxMenux?",
|
||||
"p1Rich": "Quando há uma nova versão, o ProxMenux deteta-a na próxima execução de <code>menu</code> e propõe a atualização. Se aceitar, os ficheiros e a configuração da ferramenta são substituídos na instalação existente, sem downloads manuais.",
|
||||
"p2Rich": "Os utilizadores da versão estável recebem atualizações estáveis; os da beta recebem atualizações beta. Quando é publicada uma versão estável, a beta avisa na próxima abertura do menu e propõe a mudança automática. Consulte o <betalink>programa beta</betalink>."
|
||||
},
|
||||
"q6": {
|
||||
"question": "Onde posso comunicar problemas ou sugerir funcionalidades?",
|
||||
"p1Rich": "Comunique erros em <issueslink>GitHub Issues</issueslink>. Inclua os passos para os reproduzir, a mensagem de erro e, quando relevante, a saída do Monitor obtida com <code>journalctl -u proxmenux-monitor -n 50</code>.",
|
||||
"p2Rich": "No caso de problemas de <strong>segurança</strong>, <strong>não publique os detalhes</strong>. Siga o procedimento de divulgação responsável no <coclink>código de conduta e boas práticas</coclink>."
|
||||
},
|
||||
"q7": {
|
||||
"question": "Posso contribuir para o ProxMenux?",
|
||||
"p1Rich": "<strong>Claro.</strong> O ProxMenux é um projeto colaborativo e de código aberto. Pode contribuir com código (Bash, Next.js/TypeScript e ferramentas de tradução em Python), testes, documentação, design ou ideias.",
|
||||
"item1Rich": "Discuta as ideias em <discusslink>GitHub Discussions</discusslink> antes de abrir um pedido de funcionalidade.",
|
||||
"item2Rich": "Antes de enviar uma pull request, leia o <coclink>código de conduta e boas práticas</coclink>.",
|
||||
"item3Rich": "Consulte a <contriblink>página de colaboradores</contriblink> para saber quem participa atualmente nos testes e revisões."
|
||||
},
|
||||
"q8": {
|
||||
"question": "ProxMenux modifica arquivos críticos do sistema?",
|
||||
"p1Rich": "<strong>A instalação do ProxMenux adiciona os seguintes componentes.</strong>",
|
||||
"item1Rich": "Dependências via apt: <code>dialog</code>, <code>curl</code>, <code>jq</code> e <code>git</code>. As traduções usam catálogos JSON pré-gerados; o instalador não adiciona ao anfitrião um ambiente virtual de tradução.",
|
||||
"item2Rich": "A árvore de scripts em <code>/usr/local/share/proxmenux/</code>.",
|
||||
"item3Rich": "O comando de arranque em <code>/usr/local/bin/menu</code>.",
|
||||
"item4Rich": "Opcional: o serviço systemd do Monitor, <code>proxmenux-monitor.service</code>.",
|
||||
"p2Rich": "O ProxMenux <em>não</em> altera a configuração principal do Proxmox, salvo se o pedir explicitamente num menu específico. Por exemplo, a reparação de rede edita <code>/etc/network/interfaces</code>, mas apenas após a sua confirmação e a criação de uma cópia de segurança."
|
||||
},
|
||||
"q9": {
|
||||
"question": "É seguro usar ProxMenux na produção?",
|
||||
"bodyRich": "<strong>Sim.</strong> Como o ProxMenux só altera os ficheiros principais do Proxmox quando solicitado explicitamente, pode ser usado em ambientes de produção. Como em qualquer automação, teste primeiro num ambiente controlado e tenha cópias de segurança antes de operações destrutivas: atualização do PVE 8 para 9, formatação de discos, eliminação de VM, entre outras."
|
||||
},
|
||||
"q10": {
|
||||
"question": "Como faço para desinstalar ProxMenux?",
|
||||
"p1Rich": "No ProxMenux: <strong>Definições → Desinstalar ProxMenux</strong>. A desinstalação remove os scripts, o comando de arranque e o serviço Monitor, além das dependências selecionadas, se assim escolher. Restaura <code>/root/.bashrc</code> e <code>/etc/motd</code> a partir das cópias criadas pelo Post-Install, caso existam (caso contrário, remove a linha do ProxMenux do MOTD).",
|
||||
"p2Rich": "Passo a passo completo: <uninstalllink>Desinstalar ProxMenux</uninstalllink>."
|
||||
},
|
||||
"q11": {
|
||||
"question": "VirusTotal sinaliza o URL de instalação — é seguro?",
|
||||
"p1Rich": "O resultado de 1/95 do motor <em>Chong Lua Dao</em>, comunicado na issue #162, foi identificado pelo responsável do projeto como um falso positivo. O instalador é executado com um comando que descarrega e executa o script (<code>bash -c \"$(wget -qLO - …)\"</code>) e pode descarregar <code>jq</code> da sua versão oficial no GitHub. Este <em>comportamento</em> pode ativar análises heurísticas; esse relatório histórico não avalia todos os downloads futuros.",
|
||||
"p2Rich": "O ProxMenux é totalmente de código aberto e pode analisar o script de instalação linha a linha: <scriptlink>install_proxmenux.sh</scriptlink>. Mais contexto na <issuelink>issue #162</issuelink>."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Sobre o projeto | Documentação ProxMenux",
|
||||
"description": "Sobre o ProxMenux: objetivos do projeto, colaboradores, FAQ e Código de Conduta. Ferramenta de gerenciamento orientada por menus de código aberto para Proxmox VE 8+, construída e mantida pela MacRimi com uma pequena equipe de testadores e colaboradores.",
|
||||
"ogTitle": "Sobre o projeto | Documentação ProxMenux",
|
||||
"ogDescription": "Sobre ProxMenux — ferramenta de gestão orientada por menus de código aberto para Proxmox VE 8+."
|
||||
},
|
||||
"header": {
|
||||
"title": "Sobre",
|
||||
"description": "Informações do projeto, perguntas frequentes, colaboradores e código de conduta. O ProxMenux é uma ferramenta de gestão por menus, de código aberto, para Proxmox VE 8+, desenvolvida e mantida por MacRimi com a ajuda de uma pequena equipa de testes e colaboradores.",
|
||||
"section": "Sobre"
|
||||
},
|
||||
"callout": {
|
||||
"title": "Código aberto, baseado na comunidade",
|
||||
"body": "O ProxMenux é distribuído sob a licença GPL-3.0 e desenvolvido publicamente no GitHub. Cada script pode ser revisto e cada alteração rastreada. São bem-vindos relatos de erros, ideias, código e testes."
|
||||
},
|
||||
"section": {
|
||||
"heading": "Nesta secção",
|
||||
"options": [
|
||||
{
|
||||
"icon": "HelpCircle",
|
||||
"href": "/docs/about/faq",
|
||||
"title": "FAQ",
|
||||
"description": "Perguntas frequentes: o que é o ProxMenux, instalação, compatibilidade, personalização, atualizações, segurança, uso em produção e desinstalação."
|
||||
},
|
||||
{
|
||||
"icon": "Users",
|
||||
"href": "/docs/about/contributors",
|
||||
"title": "Colaboradores",
|
||||
"description": "Reconhecimento às pessoas que tornam o ProxMenux possível: quem testa, revê e desenvolve cada versão."
|
||||
},
|
||||
{
|
||||
"icon": "ScrollText",
|
||||
"href": "/docs/about/code-of-conduct",
|
||||
"title": "Código de Conduta",
|
||||
"description": "Valores do projeto, expectativas de responsabilidade de código e diretrizes de contribuição. Leitura necessária antes de abrir um PR ou relatório."
|
||||
}
|
||||
]
|
||||
},
|
||||
"involved": {
|
||||
"heading": "Participe",
|
||||
"intro": "Três lugares para se envolver com o projeto:",
|
||||
"cards": [
|
||||
{
|
||||
"href": "https://github.com/MacRimi/ProxMenux/issues/new",
|
||||
"title": "🐛 Comunicar um erro",
|
||||
"description": "GitHub Issues — inclua os registos e os passos para reproduzir o problema."
|
||||
},
|
||||
{
|
||||
"href": "https://github.com/MacRimi/ProxMenux/discussions",
|
||||
"title": "💡 Sugerir uma funcionalidade",
|
||||
"description": "GitHub Discussions — partilhe ideias antes de abrir um PR."
|
||||
},
|
||||
{
|
||||
"href": "https://github.com/MacRimi/ProxMenux/pulls",
|
||||
"title": "🔀 Enviar um PR",
|
||||
"description": "GitHub Pull Requests — leia primeiro o Código de Conduta."
|
||||
}
|
||||
]
|
||||
},
|
||||
"support": {
|
||||
"heading": "Apoiar o projecto",
|
||||
"introRich": "Se o ProxMenux lhe poupa tempo, a forma mais simples de o dar a conhecer é <starlink>atribuir uma ⭐ ao repositório no GitHub</starlink>. Se quiser ir mais longe:",
|
||||
"kofiLabel": "Apoio em Ko-fi",
|
||||
"kofiOutro": " — compra um café ao mantenedor e mantém o desenvolvimento."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Criação de backups — fluxo de backup interativo ProxMenux",
|
||||
"description": "O fluxo de backup interativo do ProxMenux: dois pontos de entrada (o menu TUI do Scripts e a interface web do Monitor), três destinos, dois modos de perfil, uma etapa de preparação temporária e uma janela de confirmação. A página descreve a matriz de seis opções, os perfis padrão e personalizado e o que o usuário vê desde a seleção do backup até o arquivo ser salvo no destino.",
|
||||
"ogTitle": "Backup ProxMenux — criando backups",
|
||||
"ogDescription": "O fluxo de backup interativo com três destinos, dois perfis e uma etapa comum de preparação temporária.",
|
||||
"twitterTitle": "Criando backups ProxMenux",
|
||||
"twitterDescription": "Fluxo de backup interativo com três destinos e dois modos de perfil."
|
||||
},
|
||||
"header": {
|
||||
"title": "Criando backups",
|
||||
"description": "O fluxo de backup interativo: escolha um destino e um perfil, confira o resumo de confirmação e acompanhe o salvamento do arquivo. Os dois pontos de entrada compartilham o mesmo backend e produzem arquivos idênticos.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Dois pontos de entrada, funcionalidade idêntica",
|
||||
"body": "A TUI do Scripts e a interface web do Monitor oferecem <strong>exatamente as mesmas funções</strong>. Cada backup — manual ou agendado — passa pela mesma matriz de escolha (três destinos × dois perfis) e chama a mesma função do backend em cada célula (<code>_bk_pbs</code>, <code>_bk_borg</code> ou <code>_bk_local</code>). Os arquivos produzidos pelos dois pontos de entrada são indistinguíveis. A escolha depende da preferência: a TUI é adequada para SSH e scripts; o Monitor oferece controle por cliques junto às visualizações de notificações e acompanhamento dos logs."
|
||||
},
|
||||
"entryPoints": {
|
||||
"heading": "Os dois pontos de entrada",
|
||||
"rows": [
|
||||
{
|
||||
"entry": "ProxMenux Scripts (TUI)",
|
||||
"path": "menu → Utilities → Host Config Backup",
|
||||
"detail": "Fluxo baseado em diálogo, SSH-friendly. O menu principal apresenta as seis opções diretamente. Utiliza <code>backup_menu</code> em <code>backup_host.sh</code>."
|
||||
},
|
||||
{
|
||||
"entry": "ProxMenux Monitor (UI Web)",
|
||||
"path": "Backups tab → Create backup",
|
||||
"detail": "Fluxo guiado por um assistente. As mesmas seis opções são apresentadas em um formulário de duas etapas (destino → perfil). As mesmas funções do backend são chamadas pela API Flask."
|
||||
}
|
||||
]
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Cópias de segurança manuais vs agendadas",
|
||||
"body": "Os backups podem ser produzidos em dois modos: <strong>manual</strong> (o fluxo interativo descrito nesta página — o usuário escolhe um destino e um perfil de um menu e acompanha o salvamento do arquivo) ou <strong>agendado</strong> (um trabalho sem acompanhamento que roda em um temporizador no estilo cron e aplica a retenção configurada no trabalho). Ambos os modos suportam os mesmos três destinos e os mesmos dois perfis, e ambos estão disponíveis em ambos os pontos de entrada — o menu Scripts TUI e a aba Monitor Backups. Trabalhos agendados usam as mesmas funções de infraestrutura que o fluxo manual através do <code>run_scheduled_backup.sh</code>; os arquivos produzidos são indistinguíveis.",
|
||||
"seeAlso": "A página de trabalhos agendados cobre o fluxo completo, incluindo como criar um trabalho, anexá-lo a um temporizador existente PVE vzdump e configurar os valores de retenção.",
|
||||
"monitorAlt": "Página de backups do ProxMenux Monitor que mostra a nova janela de backup agendada com os campos de destino, perfil, agenda e retenção.",
|
||||
"monitorCaption": "Backup agendado — ProxMenux Monitor. A mesma janela do assistente usada para criar um backup manual inclui, na parte inferior, os campos de agendamento e retenção para execução sem acompanhamento."
|
||||
},
|
||||
"matrix": {
|
||||
"heading": "A matriz de seis opções",
|
||||
"intro": "A escolha determina tanto o backend executado quanto a estratégia de seleção de caminhos. Consulte as páginas de cada destino para os detalhes de configuração de cada célula.",
|
||||
"rows": [
|
||||
{
|
||||
"combo": "1",
|
||||
"destination": "PBS",
|
||||
"profile": "Padrão",
|
||||
"action": "Envia o perfil padrão mais extras persistentes para um repositório PBS configurado."
|
||||
},
|
||||
{
|
||||
"combo": "2",
|
||||
"destination": "Borg",
|
||||
"profile": "Padrão",
|
||||
"action": "Cria um arquivo com o perfil padrão mais extras persistentes no repositório Borg selecionado."
|
||||
},
|
||||
{
|
||||
"combo": "3",
|
||||
"destination": "Local",
|
||||
"profile": "Padrão",
|
||||
"action": "Escreve um arquivo <code>.tar.zst</code> com o perfil padrão mais extras persistentes para o alvo local configurado."
|
||||
},
|
||||
{
|
||||
"combo": "4",
|
||||
"destination": "PBS",
|
||||
"profile": "Personalizado",
|
||||
"action": "Abre o seletor de caminhos antes do envio ao PBS; o usuário marca os caminhos e pode adicionar novos."
|
||||
},
|
||||
{
|
||||
"combo": "5",
|
||||
"destination": "Borg",
|
||||
"profile": "Personalizado",
|
||||
"action": "Abre o seletor de caminhos antes de criar o arquivo Borg."
|
||||
},
|
||||
{
|
||||
"combo": "6",
|
||||
"destination": "Local",
|
||||
"profile": "Personalizado",
|
||||
"action": "Abre o selecionador de caminho antes de escrever o <code>.tar.zst</code> local."
|
||||
}
|
||||
]
|
||||
},
|
||||
"profiles": {
|
||||
"heading": "Perfil padrão vs personalizado",
|
||||
"defaultTitle": "Perfil padrão",
|
||||
"defaultBody": "O perfil padrão é a lista com curadoria de <code>hb_default_profile_paths</code> (documentada em <em>Como funciona</em> sob <em>Categorias de caminho</em>) além de cada entrada no arquivo de extras persistente <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code>. O usuário confirma as opções de destino e criptografia e o backup prossegue sem mais seleção de caminho.",
|
||||
"customTitle": "Perfil personalizado",
|
||||
"customBody": "O perfil personalizado abre uma lista com todos os caminhos do perfil padrão (desmarcados) e todos os extras persistentes (pré-marcados, com o prefixo <code>[+]</code>). O usuário marca os caminhos para esta execução e pode pressionar <em>Adicionar caminho personalizado</em> para incluir um novo caminho absoluto. Todo caminho adicionado durante esse processo é salvo em <code>backup-extra-paths.txt</code>, para que os próximos backups o incluam automaticamente. Desmarcar um extra persistente o exclui apenas desta execução, sem removê-lo do arquivo — a remoção é feita pela ação separada <em>Gerenciar caminhos personalizados</em>, fora do fluxo de backup.",
|
||||
"customPickerAlt": "Lista de verificação de perfil personalizada que mostra os caminhos de perfil padrão (desmarcados) e extras persistentes (pré-marcados com um prefixo [+]), além de botões para adicionar um novo caminho ou confirmar a seleção.",
|
||||
"customPickerCaption": "Perfil personalizado — o seletor de caminhos. Os caminhos do perfil padrão estão desmarcados; os extras persistentes aparecem pré-marcados com o prefixo [+]. O usuário marca os caminhos para esta execução.",
|
||||
"manageCustomAlt": "Menu de gerenciamento de caminhos personalizados com a lista de extras persistentes e opções para adicionar, remover ou editar.",
|
||||
"manageCustomCaption": "Gerencie caminhos personalizados — o ponto de entrada onde extras persistentes são adicionados ou removidos. Cada caminho listado aqui é incluído automaticamente em backups de modo padrão sem precisar abrir o seletor Personalizado."
|
||||
},
|
||||
"commonPipeline": {
|
||||
"heading": "O que é executado independentemente do destino",
|
||||
"intro": "Depois de definir o perfil, cada backend executa o mesmo processo de preparação temporária antes de seguir para seu próprio método de envio. <code>hb_prepare_staging</code> monta a árvore do arquivo em <code>/tmp/proxmenux-DESTINATION-stage.XXXXXX</code> e preenche cada um dos três blocos de dados.",
|
||||
"steps": [
|
||||
{
|
||||
"step": "1",
|
||||
"name": "Montagem do rootfs",
|
||||
"detail": "Executa <code>rsync -a</code> para cada caminho selecionado em <code>staging_root/rootfs/</code>. O banco de dados pmxcfs em <code>/var/lib/pve-cluster/config.db</code> é capturado separadamente via <code>sqlite3 .backup</code> para produzir um instantâneo consistente sem parar o cluster, e os sidecars <code>.db-wal</code> / <code>.db-shm</code> são excluídos do rsync; quando o <code>sqlite3</code> não está disponível é salvo um arquivo <code>config.db.raw-fallback</code>, que a restauração adota como banco de dados durante a importação. Os subcaminhos voláteis (histórico do bash, caches, lixo) são excluídos do <code>/root/</code>. Caminhos ausentes da fonte são registrados em <code>metadata/missing_paths.txt</code> sem parar o backup."
|
||||
},
|
||||
{
|
||||
"step": "2",
|
||||
"name": "Geração do manifesto",
|
||||
"detail": "<code>build_manifest.sh</code> coordena os seis coletores e grava <code>manifest.json</code> na raiz da área de preparação temporária. Se um coletor falhar, a seção afetada usa um valor padrão vazio documentado; o manifesto continua válido."
|
||||
},
|
||||
{
|
||||
"step": "3",
|
||||
"name": "Inventário de pacotes",
|
||||
"detail": "<code>apt-mark showmanual</code> é capturada literalmente em <code>metadata/packages.manual.list</code>. O estado do componente já está dentro do rootfs restaurado (<code>components_status.json</code>) porque o <code>/usr/local/share/proxmenux/</code> faz parte do perfil padrão."
|
||||
},
|
||||
{
|
||||
"step": "4",
|
||||
"name": "Informações da execução",
|
||||
"detail": "<code>metadata/run_info.env</code> registra a identidade de execução de backup — hostname, timestamp, versão do kernel — usada pela verificação de compatibilidade da restauração para determinar a direção do cross-kernel."
|
||||
},
|
||||
{
|
||||
"step": "5",
|
||||
"name": "Notificação (início)",
|
||||
"detail": "<code>hb_notify_lifecycle \"start\"</code> é acionado. Se as notificações estiverem configuradas no Monitor, um evento <em>Backup do host iniciado</em> é enviado ao usuário. Nada é enviado se não houver canais configurados."
|
||||
}
|
||||
]
|
||||
},
|
||||
"included": {
|
||||
"heading": "O que entra e o que fica fora",
|
||||
"intro": "Cada caminho no perfil resolvido (padrão + extras persistentes + seleção de modo personalizado) é copiado com <code>rsync -aAXH --numeric-ids</code>. Uma lista de exclusão compartilhada aplica-se a cada caminho, e dois diretórios carregam exclusões adicionais específicas do caminho.",
|
||||
"globalTitle": "Exclusões globais (aplicadas a cada caminho)",
|
||||
"globalItems": [
|
||||
"<code>images/</code> — dumps de imagens.",
|
||||
"<code>dump/</code> — saídas vzdump.",
|
||||
"<code>tmp/</code> — ficheiros temporários.",
|
||||
"<code>*.log</code> — ficheiros de registo."
|
||||
],
|
||||
"rootTitle": "Exclusões <code>/root/</code>",
|
||||
"rootBody": "<code>/root/</code> faz parte do perfil padrão para incluir os scripts e a configuração do usuário no arquivo. Os subcaminhos voláteis são excluídos:",
|
||||
"rootItems": [
|
||||
"<code>.bash_history</code>",
|
||||
"<code>.cache/</code>",
|
||||
"<code>tmp/</code>",
|
||||
"<code>.local/share/Trash/</code>"
|
||||
],
|
||||
"proxmenuxTitle": "Exclusões <code>/usr/local/share/proxmenux/</code>",
|
||||
"proxmenuxBody": "Este diretório envia apenas o estado do usuário — <code>components_status.json</code>, preferências, cache pós-instalação. O código que o destino já terá a partir de sua própria instalação ProxMenux está excluído para que uma restauração não sobrescreva os binários atuais do alvo com os mais antigos:",
|
||||
"proxmenuxItems": [
|
||||
"<code>restore-pending/</code>, <code>scripts/</code>, <code>web/</code>",
|
||||
"<code>monitor-app/</code>, <code>monitor-app.*/</code>, <code>AppImage/</code>",
|
||||
"<code>images/</code>, <code>json/</code>",
|
||||
"<code>utils.sh</code>, <code>helpers_cache.json</code>",
|
||||
"<code>ProxMenux-Monitor.AppImage*</code>, <code>install_proxmenux*.sh</code>"
|
||||
],
|
||||
"notInProfileTitle": "Caminhos fora do perfil",
|
||||
"notInProfileBody": "Qualquer coisa não listada no <code>hb_default_profile_paths</code> e não adicionada como um extra personalizado ou persistente não faz parte do backup. Exemplos notáveis:",
|
||||
"notInProfileItems": [
|
||||
"<strong>Discos de VMs e LXC</strong> — manipulado por <code>vzdump</code>, não por esta característica. Os arquivos de configuração de hóspedes sob <code>/etc/pve/nodes/*/qemu-server/*.conf</code> e <code>lxc/*.conf</code> são capturados (eles vivem sob <code>/etc/pve</code>) para que a restauração reproduza o inventário; os próprios discos são re-anexados a partir de um backup existente vzdump/PBS.",
|
||||
"<strong><code>/boot</code> e <code>/boot/efi</code></strong> — binários do kernel, initramfs e a partição UEFI ESP são regeneradas pelo próprio alvo <code>update-initramfs</code>, <code>update-grub</code> ou <code>proxmox-boot-tool refresh</code> após a restauração. O carregador de arranque nunca é copiado na íntegra.",
|
||||
"<strong>Sistemas de arquivos de tempo de execução e sistema</strong> — <code>/proc</code>, <code>/sys</code>, <code>/dev</code> e <code>/run</code> são pseudo-sistemas de arquivos produzidos pelo kernel e udev; eles não são persistidos em nenhum lugar.",
|
||||
"<strong>Binários dos pacotes em <code>/usr/bin</code>, <code>/usr/lib</code>, <code>/lib</code>, <code>/sbin</code></strong> — reinstalados pelo APT do destino a partir de <code>packages.manual.list</code>.",
|
||||
"<strong><code>/var/log/</code>, <code>/var/tmp/</code>, <code>/var/cache/</code></strong> — estado de execução por host, não restaurado.",
|
||||
"<strong><code>/home/USER</code></strong> — não no perfil padrão. Adicione-o como um caminho personalizado quando um sistema carrega diretórios domésticos do usuário que devem sobreviver a uma restauração."
|
||||
],
|
||||
"customPathsTitle": "Como os caminhos personalizados são tratados",
|
||||
"customPathsBody": "Um caminho personalizado adicionado inline em modo Personalizado ou persistido em <code>backup-extra-paths.txt</code> passa pelo mesmo pipeline <code>rsync</code> como caminhos de perfil padrão. Exclusões globais aplicam-se. Se o caminho personalizado estiver sob <code>/root/</code> ou <code>/usr/local/share/proxmenux/</code>, as exclusões específicas do caminho acima ainda se aplicam. Cada caminho arquivado — padrão ou personalizado — é gravado em <code>metadata/paths_archived.txt</code>. Caminhos que não existem na fonte são gravados em <code>metadata/missing_paths.txt</code> sem parar o backup."
|
||||
},
|
||||
"archiveStructure": {
|
||||
"heading": "Estrutura do arquivo",
|
||||
"intro": "O diretório de preparação temporária produzido por cada infraestrutura segue o mesmo layout, independentemente do destino. O tarball, PBS <code>.pxar</code> ou arquivo Borg armazena esta árvore sem alterações.",
|
||||
"tree": "backup-[timestamp]/\n├── manifest.json # structured host state (kernel_params, hardware, storage, guests, components, source_host)\n├── metadata/\n│ ├── packages.manual.list # output of apt-mark showmanual\n│ ├── run_info.env # hostname, timestamp, kernel version, pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, /etc/apt, ...\n ├── root/ # /root without volatile subpaths\n ├── usr/local/ # /usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux (state only)\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/crontabs"
|
||||
},
|
||||
"confirmation": {
|
||||
"heading": "Resumo da confirmação",
|
||||
"body": "Antes da infra- estrutura escrever qualquer coisa para o destino, o ProxMenux mostra uma janela sumária com o nome do destino, ID de backup ou arquivo, estado de criptografia e a lista de caminhos copiados. Cancelar aqui aborta o backup de forma limpa — o diretório de preparação temporária é removido pelo gancho <code>trap</code> definido na função de infraestrutura e nenhum dado parcial atinge o destino."
|
||||
},
|
||||
"writing": {
|
||||
"heading": "Gravando para o destino",
|
||||
"intro": "Após a confirmação, cada backend executa sua própria etapa de gravação. As páginas dos destinos descrevem o funcionamento; os elementos comuns são o log, o arquivo auxiliar e a notificação de conclusão.",
|
||||
"rows": [
|
||||
{
|
||||
"topic": "Arquivo de registro",
|
||||
"detail": "Cada infra- estrutura escreve sua saída completa para <code>/tmp/proxmenux-DESTINATION-backup-YYYYMMDD_HHMMSS.log</code> e, em caso de falha, oferece abri-la em uma janela de rolagem. O caminho do log é impresso no resumo de conclusão somente quando o arquivo tem conteúdo."
|
||||
},
|
||||
{
|
||||
"topic": "Sidecar (apenas local)",
|
||||
"detail": "<code>hb_write_archive_sidecar</code> solta um <code>*.proxmenux.json</code> ao lado do arquivo local para que o monitor o identifique como um backup de host ProxMenux mesmo depois de mover ou renomear."
|
||||
},
|
||||
{
|
||||
"topic": "Notificação (conclusão/falha)",
|
||||
"detail": "<code>hb_notify_lifecycle \"complete\"</code> ou <code>\"fail\"</code> é acionado com a duração, o tamanho do arquivo e — em caso de falha — a última linha do log que parece indicar um erro."
|
||||
}
|
||||
]
|
||||
},
|
||||
"finishedScreens": {
|
||||
"heading": "Como é uma cópia de segurança terminada",
|
||||
"intro": "O mesmo evento de conclusão é exibido pelos dois pontos de entrada. O TUI escreve um bloco de resumo para o terminal; a aba Backups do Monitor mostra a execução na lista de arquivos com o tamanho, a duração e os crachás de status.",
|
||||
"scriptsAlt": "ProxMenux Scripts TUI mostrando um backup final do host — destino, ID de backup, caminho de instantâneo, tamanho de dados, duração e estado de criptografia.",
|
||||
"scriptsCaption": "Cópia de segurança terminada — ProxMenux Scripts (TUI). O bloco de conclusão imprime o destino, backup ID, instantâneo resultante ou nome do arquivo, tamanho dos dados, duração e estado de criptografia.",
|
||||
"monitorAlt": "Página de backups ProxMenux Monitor mostrando uma entrada de backup de host terminada com tamanho, duração, crachá de método e indicador de criptografia.",
|
||||
"monitorCaption": "Backup concluído — aba Backups do ProxMenux Monitor. O novo backup aparece na lista de arquivos com o indicador do método de destino, tamanho, duração e — quando aplicável — o ícone de cadeado da criptografia."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Para onde ir a seguir",
|
||||
"items": [
|
||||
{
|
||||
"label": "Destinos",
|
||||
"href": "/docs/backup-restore/destinations",
|
||||
"tail": " — detalhes de configuração para Local, PBS e Borg."
|
||||
},
|
||||
{
|
||||
"label": "Trabalhos agendados",
|
||||
"href": "/docs/backup-restore/scheduled-jobs",
|
||||
"tail": " — executar o mesmo backup sem acompanhamento em um cronograma em vez de interativamente."
|
||||
},
|
||||
{
|
||||
"label": "Restauração",
|
||||
"href": "/docs/backup-restore/restoring",
|
||||
"tail": " — o fluxo que consome o que esta página produz."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Restauro entre kernels diferentes — deteção, filtragem segura e adaptação | ProxMenux",
|
||||
"description": "Como ProxMenux restaura um backup de host em um alvo executando uma versão diferente do kernel principal. Documenta como a direção do descompasso é detectada, o filtro seguro-subset que salta caminhos de inicialização-críticos quando o alvo executa um kernel mais novo do que o backup, e a hidratação quatro fases do kernel-agnóstico que reaplica a sintonia do usuário como IOMMU, IDs VFIO e tokens personalizados cmdline sem copiar arquivos de kernel-ligados verbatim.",
|
||||
"ogTitle": "ProxMenux Backup – restauração e hidratação do kernel cruzado",
|
||||
"ogDescription": "Restauração entre versões do kernel que considera a direção da mudança, com filtro seguro e hidratação independente do kernel.",
|
||||
"twitterTitle": "Restauro entre kernels diferentes | ProxMenux",
|
||||
"twitterDescription": "Como ProxMenux lida com uma restauração quando o kernel alvo difere do backup."
|
||||
},
|
||||
"header": {
|
||||
"title": "Restauração do kernel cruzado",
|
||||
"description": "Como o ProxMenux lida com uma restauração quando o host alvo executa um kernel diferente daquele gravado no backup — especialmente quando o alvo executa um kernel mais recente. Documenta como a diferença é detectada, como caminhos críticos de inicialização que podem quebrar o alvo são filtrados, e como a configuração do próprio usuário é reaplicada sem copiar arquivos ligados ao kernel verbatim.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Cada salto do kernel é tratado de forma diferente",
|
||||
"body": "O kernel de um host Proxmox é identificado por uma string de versão como <code>6.17.13-2-pve</code>. Os dois primeiros números (<strong>6.17</strong> neste exemplo) definem a versão principal: quando eles mudam, alguns arquivos de configuração escritos para o kernel anterior podem não ser válidos no novo. Quando a restauração detecta que o backup e o alvo têm diferentes versões principais do kernel, os ramos de fluxo baseados na direção do salto — se o backup é mais antigo ou mais recente do que o alvo — porque os dois casos têm modos de falha opostos. Backups mais recentes do que o destino restaurar limpamente como-is (bench-verified em vários saltos do kernel). Backups mais antigos do que o alvo precisam de um filtro para evitar quebrar a inicialização do alvo com configuração escrita para um kernel que desde então mudou."
|
||||
},
|
||||
"directionCheck": {
|
||||
"heading": "Verificação da direcção",
|
||||
"intro": "Durante a verificação de compatibilidade, <code>hb_compat_check</code> compara o kernel registrado no manifesto do backup com o kernel atual do alvo (<code>uname -r</code>) e classifica a restauração em um dos três casos, armazenados na variável interna <code>HB_COMPAT_KERNEL_DIRECTION</code>:",
|
||||
"rows": [
|
||||
{
|
||||
"direction": "same",
|
||||
"condition": "A versão principal do kernel corresponde entre backup e alvo.",
|
||||
"behavior": "O fluxo total de restauração corre inalterado. Sem filtro extra, sem hidratação, sem aviso especial na UI."
|
||||
},
|
||||
{
|
||||
"direction": "bk_newer",
|
||||
"condition": "O kernel de backup é mais novo do que o do alvo (por exemplo: o backup foi feito no kernel 7.0 e o alvo executa o kernel 6.17).",
|
||||
"behavior": "O fluxo completo permanece inalterado, como em <code>same</code>, sem filtro. Nos testes relatados, os drivers foram reinstalados para o kernel de destino, a configuração IOMMU foi aplicada e as VMs iniciaram com passthrough de GPU."
|
||||
},
|
||||
{
|
||||
"direction": "bk_older",
|
||||
"condition": "O kernel do backup é MAIS ANTIGO que o de destino (por exemplo: backup no 6.17, destino no 7.0).",
|
||||
"behavior": "O filtro seguro e a hidratação em quatro fases abaixo são ativados. A restauração prossegue — o alvo reproduz a fonte, mas os arquivos de inicialização críticos não são copiados literalmente."
|
||||
}
|
||||
]
|
||||
},
|
||||
"whyBkNewerIsSafe": {
|
||||
"heading": "Por que um backup com um kernel mais novo do que o alvo restaura inalterado",
|
||||
"body": "Quando a restauração corre contra um alvo com um kernel <em>mais antigo</em> do que o registrado no backup, cada mecanismo que a restauração depende é independente da versão do kernel. Os instaladores de driver GPU e outros instaladores de dispositivos PCI detectam o kernel em execução com <code>uname -r</code> e compilam DKMS contra qualquer que seja o alvo. O pacote APT install puxa binários construídos para a distribuição do alvo. Os tokens cmdline IOMMU como <code>intel_iommu=on</code> são estáveis nas principais versões do kernel. O backup carrega caminhos escritos sob um kernel mais recente, mas esses caminhos (listas-negra de módulos, padrões GRUB, configuração initramfs) ainda são sintaxe válida no antigo - kernels ignoram tokens que não reconhecem em vez de falhar. Este caso é, na prática, equivalente a uma restauração do mesmo núcleo, e o ProxMenux trata-o como tal."
|
||||
},
|
||||
"safeSubsetFilter": {
|
||||
"heading": "O filtro de segurança (apenas quando o kernel alvo é mais novo)",
|
||||
"intro": "Quando o kernel alvo é mais novo do que o backup, a verificação de compatibilidade adiciona 16 Caminhos críticos de arranque de <code>hb_unsafe_paths_cross_version</code> para <code>RS_SKIP_PATHS</code>. Estes caminhos são excluídos da restauração porque escrever uma versão deles de um kernel mais antigo sobre um alvo executando um mais recente causou pânico do kernel em testes de banco. Os caminhos abrangem cinco categorias:",
|
||||
"categoryRows": [
|
||||
{
|
||||
"category": "Gestor de arranque",
|
||||
"paths": "<code>/etc/default/grub</code>, <code>/etc/kernel</code>",
|
||||
"reason": "GRUB predefinições ligadas à ordem anterior do kernel, e estado proxmox-boot-tool (cmdline, ESP UUIDs, ganchos) que referencia caminhos e identificadores da instalação mais antiga."
|
||||
},
|
||||
{
|
||||
"category": "Módulos de kernel e artefatos de inicialização",
|
||||
"paths": "<code>/etc/modules-load.d</code>, <code>/etc/modprobe.d</code>, <code>/etc/initramfs-tools</code>",
|
||||
"reason": "Listas de autocarregamento que podem referenciar módulos renomeados entre majors de kernel, opções de módulo que podem não se aplicar, ganchos initramfs escritos para o kernel antigo."
|
||||
},
|
||||
{
|
||||
"category": "Stack de armazenamento e identidade do sistema de arquivos",
|
||||
"paths": "<code>/etc/fstab</code>, <code>/etc/multipath</code>, <code>/etc/iscsi</code>, <code>/etc/udev/rules.d</code>, <code>/etc/zfs</code>",
|
||||
"reason": "UUIDs que podem não existir nesta instalação, drivers multicaminho que mudam entre kernels, parâmetros iSCSI que evoluem, regras udev que podem se ligar a subsistemas inexistentes, estado ZFS (<code>zpool.cache</code> + <code>hostid</code>) que podem bloquear o pool como estrangeiro."
|
||||
},
|
||||
{
|
||||
"category": "Fontes APT",
|
||||
"paths": "<code>/etc/apt</code>",
|
||||
"reason": "As suítes de código fonte APT podem desencadear uma redução de pacotes críticos na próxima atualização."
|
||||
},
|
||||
{
|
||||
"category": "systemd",
|
||||
"paths": "<code>/etc/systemd/system</code>, <code>/etc/systemd/journald.conf</code>, <code>/etc/systemd/logind.conf</code>, <code>/etc/systemd/system.conf</code>, <code>/etc/systemd/user.conf</code>",
|
||||
"reason": "Sobrescritas de unidades e links .wants ligados à versão principal antiga do systemd; chaves de configuração que podem não ser válidas na versão nova."
|
||||
}
|
||||
],
|
||||
"outroBody": "O filtro é executado ANTES da janela de confirmação para que o utilizador veja a lista exacta dos caminhos que serão ignorados, categorizados pela razão. A restauração continua — tudo o resto (configuração VM/LXC, rede, /etc/pve, usuários, cron, ProxMenux estado, pacotes, drivers, /root) é restaurado normalmente."
|
||||
},
|
||||
"hydration": {
|
||||
"heading": "Hidratação independente do kernel",
|
||||
"intro": "O filtro omite arquivos críticos; a hidratação reaplica ajustes selecionados: cmdline IOMMU, IDs VFIO, <code>GRUB_TIMEOUT</code> personalizado e listas de bloqueio nvidia. Executa se o kernel de destino for mais novo. A mesclagem cmdline preserva chaves do destino e adiciona módulos ausentes. Valores GRUB e arquivos permitidos podem substituir conteúdo diferente no destino. Repetir as mesmas entradas é idempotente.",
|
||||
"phaseRows": [
|
||||
{
|
||||
"phase": "1a — Via GRUB",
|
||||
"detail": "Para hosts GRUB (instalações ext4/lvm). <code>_rs_hyd_grub</code> mescla os parâmetros de <code>manifest.kernel_params.cmdline_extra</code> do backup em <code>GRUB_CMDLINE_LINUX_DEFAULT</code> do destino, ignorando chaves já presentes. Depois restaura as chaves permitidas <code>GRUB_*</code> (<code>GRUB_TIMEOUT</code>, <code>GRUB_TIMEOUT_STYLE</code>, <code>GRUB_DEFAULT</code>, <code>GRUB_TERMINAL</code>, <code>GRUB_DISABLE_OS_PROBER</code>, <code>GRUB_SERIAL_COMMAND</code>, <code>GRUB_GFXMODE</code>, <code>GRUB_GFXPAYLOAD_LINUX</code>) de <code>/etc/default/grub</code> do backup se seus valores diferirem do destino."
|
||||
},
|
||||
{
|
||||
"phase": "1b — systemd-boot / ZFS",
|
||||
"detail": "Para systemd-boot (normalmente ZFS na raiz). <code>_rs_hyd_kernel_cmdline</code> mescla parâmetros do usuário de <code>cmdline_extra</code> em <code>/etc/kernel/cmdline</code> do destino, preservando os parâmetros de inicialização <code>root=</code>, <code>boot=</code> e <code>rootflags=</code> do destino."
|
||||
},
|
||||
{
|
||||
"phase": "2 — fusão /etc/modules",
|
||||
"detail": "<code>_rs_hyd_modules</code> adiciona os módulos de <code>manifest.kernel_params.modules_loaded_at_boot</code> que estão na lista branca (<code>vfio</code>, <code>vfio_pci</code>, <code>vfio_iommu_type1</code>, <code>vfio_virqfd</code>, <code>kvm</code>, <code>kvm_intel</code>, <code>kvm_amd</code>, <code>nvidia</code>, <code>nvidia_drm</code>, <code>nvidia_modeset</code>, <code>nvidia_uvm</code>, <code>i915</code>, <code>xe</code>) E ainda não está presente no objectivo <code>/etc/modules</code>."
|
||||
},
|
||||
{
|
||||
"phase": "3 — Cópia de ficheiros na lista branca",
|
||||
"detail": "<code>_rs_hyd_files</code> copia arquivos criados pelo usuário dos rootfs de estadiamento para o alvo ao vivo quando o conteúdo difere. A lista branca abrange arquivos VFIO/nvidia/blacklist sob <code>/etc/modprobe.d</code>, <code>/etc/modules-load.d</code>, e a regra de ligação ProxMenux VFIO + nvidia regras udev sob <code>/etc/udev/rules.d</code>. Arquivos distro-proprietários (<code>pve-blacklist.conf</code>, <code>mdadm.conf</code>, <code>nvme.conf</code>) são intencionalmente excluídos — seu conteúdo evolui entre lançamentos."
|
||||
},
|
||||
{
|
||||
"phase": "4 — Forçar regeneração após a inicialização",
|
||||
"detail": "As quatro fases escrevem diretamente para o alvo vivo fora do processo de restauração normal. Para fazer com que os tokens/módulos/arquivos fundidos façam efeito na próxima inicialização, o <code>HB_HYDRATION_APPLIED=1</code> propaga-se através do <code>plan.env</code> ao <code>apply_pending_restore.sh</code>, que força o <code>NEEDS_INITRAMFS=1</code> e o <code>NEEDS_GRUB=1</code> independentemente do que estava na lista de aplicações. O expedidor pós-boot regenera initramfs e atualiza o carregador de boot."
|
||||
}
|
||||
]
|
||||
},
|
||||
"planCommit": {
|
||||
"heading": "Plano vs commit — o utilizador vê uma antevisão primeiro",
|
||||
"body": "A hidratação funciona em dois modos. Antes da janela de confirmação, o ProxMenux executa o <code>_rs_apply_bk_older_hydration</code> no modo <code>plan</code>: calcula exatamente o que seria mesclado, povoa o <code>RS_HYDRATION_SUMMARY</code> com um bloco verde listando cada ação e retorna sem escrever. O diálogo de confirmação mostra que o bloco verde ao lado da lista amarela dos caminhos excluídos, para que o usuário veja ANTES o que será reaplicado automaticamente. Depois que o usuário confirma, o ProxMenux executa novamente o mesmo helper no modo <code>commit</code> — as mesmas fases, a mesma lógica, mas desta vez cada fase escreve para o alvo ao vivo. Cancelar a janela de confirmação deixa o alvo intocado."
|
||||
},
|
||||
"flowDiagram": {
|
||||
"heading": "O fluxo quando o kernel alvo é mais novo do que o backup",
|
||||
"intro": "Os passos adicionados quando o kernel alvo é mais novo sentam-se dentro do fluxo de restauração normal. Tudo o resto — aplicar, preparar, instalar o pacote, enviar pós-boot — é executado de forma idêntica a uma restauração do mesmo kernel.",
|
||||
"diagram": " ┌────────────────────────────────────────────────────────────┐\n │ hb_compat_check │\n │ HB_COMPAT_KERNEL_DIRECTION = bk_older │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Add 16 boot-critical paths to RS_SKIP_PATHS │\n │ /etc/default/grub, /etc/kernel, /etc/modules-load.d, ... │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"plan\" │\n │ Compute what would be merged │\n │ Populate RS_HYDRATION_SUMMARY (green block) │\n │ No writes │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Confirmation dialog │\n │ Amber: paths skipped by safe-subset filter │\n │ Green: tokens/files reapplied by hydration │\n │ User accepts or cancels │\n └───────────────────────────┬────────────────────────────────┘\n │ (accepted)\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ _rs_apply_bk_older_hydration \"commit\" │\n │ Phase 1a/1b: merge cmdline tokens + GRUB keys │\n │ Phase 2: append modules to /etc/modules │\n │ Phase 3: copy whitelisted vfio/nvidia files │\n │ Set HB_HYDRATION_APPLIED=1 │\n └───────────────────────────┬────────────────────────────────┘\n │\n ▼\n ┌────────────────────────────────────────────────────────────┐\n │ Rest of the restore runs normally │\n │ _rs_apply hot (skips RS_SKIP_PATHS) │\n │ _rs_prepare_pending_restore (writes plan.env with │\n │ HB_HYDRATION_APPLIED=1) │\n │ packages.manual.list install │\n │ Reboot │\n │ apply_pending_restore.sh (forces NEEDS_INITRAMFS=1, │\n │ NEEDS_GRUB=1 because of the hydration flag) │\n │ apply_cluster_postboot.sh │\n │ update-initramfs -u -k all │\n │ update-grub / proxmox-boot-tool refresh │\n │ component --auto-reinstall │\n └────────────────────────────────────────────────────────────┘"
|
||||
},
|
||||
"concreteExamples": {
|
||||
"heading": "Exemplos concretos",
|
||||
"intro": "O passe de hidratação não é abstrato — produz resultados observáveis e corretos para cenários comuns. Dois exemplos que a hidratação manuseia automaticamente:",
|
||||
"rows": [
|
||||
{
|
||||
"scenario": "Passagem GPU (VFIO)",
|
||||
"detail": "Fonte: <code>intel_iommu=on iommu=pt</code> no cmdline, <code>vfio</code>/<code>vfio_pci</code>/<code>vfio_iommu_type1</code> no <code>/etc/modules</code>, um <code>/etc/modprobe.d/vfio.conf</code> com <code>options vfio-pci ids=10de:2216</code>, e um <code>/etc/modprobe.d/blacklist-nvidia.conf</code>. A hidração funde os tokens cmdline com o GRUB ou o kernel cmdline do alvo, adiciona os módulos vfio ao <code>/etc/modules</code> e copia os dois arquivos modprobe do usuário. Na próxima inicialização, o IOMMU está ativo, os módulos VFIO são carregados, o GPU está ligado ao vfio-pci e o VM vem com o trabalho de passagem."
|
||||
},
|
||||
{
|
||||
"scenario": "Por omissão personalizada do GRUB",
|
||||
"detail": "Fonte: <code>GRUB_TIMEOUT=1</code> e <code>GRUB_DISABLE_OS_PROBER=true</code>. Hydration lê ambas as chaves do <code>/etc/default/grub</code>, vê que elas diferem dos padrões da instalação recente, e reescreve essas duas linhas no arquivo do alvo (deixando tudo, incluindo o <code>GRUB_DISTRIBUTOR</code>, intocado)."
|
||||
}
|
||||
]
|
||||
},
|
||||
"callout": {
|
||||
"warningTitle": "O que a hidratação não reaplica quando o kernel alvo é mais novo",
|
||||
"warningBody": "A hidratação reaplica apenas a configuração ProxMenux sabe ser segura em todas as versões do kernel: tokens IOMMU, IDs VFIO, chaves GRUB permitidas e módulos de uma lista fixa (<code>vfio*</code>, <code>nvidia*</code>, <code>i915</code>, <code>xe</code>, <code>kvm*</code>). Qualquer coisa fora desse conjunto — ganchos de initramfs personalizados sob <code>/etc/initramfs-tools/hooks/</code>, arquivos não listados em <code>/etc/modprobe.d/</code>, sobreposições de unidades systemd criadas pelo usuário — permanece excluída. A razão é concreta: esses arquivos podem chamar de interfaces internas do kernel (a APIs de módulo, layout <code>/sys</code>, ganchos <code>udev</code>) que mudam entre as versões principais, e aplicá-las literalmente sobre o kernel mais novo pode impedir que o alvo arranque. Quando a reprodução exata da cadeia de inicialização é necessária, a restauração deve ser executada em um host com a mesma versão principal do kernel que o backup."
|
||||
},
|
||||
"codeReference": {
|
||||
"heading": "Onde vivem os mecanismos",
|
||||
"intro": "Para os desenvolvedores que procuram rastrear ou estender o comportamento do cross-kernel:",
|
||||
"rows": [
|
||||
{
|
||||
"component": "Detecção da direcção",
|
||||
"location": "<code>hb_compat_check</code> em <code>lib_host_backup_common.sh</code>. Define <code>HB_COMPAT_KERNEL_DIRECTION</code>."
|
||||
},
|
||||
{
|
||||
"component": "Lista de caminhos do filtro seguro",
|
||||
"location": "<code>hb_unsafe_paths_cross_version</code> em <code>lib_host_backup_common.sh</code>. Emite <code>path\\treason</code> linhas usadas tanto pelo filtro CLI como pelo endpoint da Web <code>/api/host-backups/restore/prepare</code>."
|
||||
},
|
||||
{
|
||||
"component": "Fases de hidratação",
|
||||
"location": "<code>_rs_hyd_grub</code>, <code>_rs_hyd_kernel_cmdline</code>, <code>_rs_hyd_modules</code>, <code>_rs_hyd_files</code> em <code>backup_host.sh</code>. Orquestrado por <code>_rs_apply_bk_older_hydration</code>."
|
||||
},
|
||||
{
|
||||
"component": "Regeneração forçada após a inicialização",
|
||||
"location": "<code>apply_pending_restore.sh</code> lê <code>HB_HYDRATION_APPLIED</code> de <code>plan.env</code> e força <code>NEEDS_INITRAMFS=1</code>/<code>NEEDS_GRUB=1</code>."
|
||||
},
|
||||
{
|
||||
"component": "Visualização da Web",
|
||||
"location": "<code>/api/host-backups/restore/prepare</code> em <code>flask_server.py</code>. Carrega a biblioteca auxiliar, executa <code>_rs_apply_bk_older_hydration</code> no modo plano, retorna as ações para o modal Web."
|
||||
}
|
||||
]
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Para onde ir a seguir",
|
||||
"items": [
|
||||
{
|
||||
"label": "Restauração",
|
||||
"href": "/docs/backup-restore/restoring",
|
||||
"tail": " — o fluxo completo de restauração que integra os mecanismos desta página."
|
||||
},
|
||||
{
|
||||
"label": "Como funciona",
|
||||
"href": "/docs/backup-restore/how-it-works",
|
||||
"tail": " — manifesto e coletores que produzem o bloco <code>kernel_params</code> lido pela hidratação."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Destino Borg — tipos de repositório, autenticação SSH, criptografia | ProxMenux",
|
||||
"description": "O destino Borg grava backups do host ProxMenux em um repositório local, em disco externo montado ou em servidor remoto via SSH. Descreve a busca pelo executável borg, as quatro opções iniciais de chave SSH, a criptografia repokey, os destinos salvos e a retenção por tarefa agendada.",
|
||||
"ogTitle": "Cópia de segurança do ProxMenux — destino Borg",
|
||||
"ogDescription": "Como ProxMenux escreve backups de host para repositórios Borg, com estratégias de autenticação SSH e criptografia repokey.",
|
||||
"twitterTitle": "Destino de backup Borg | ProxMenux",
|
||||
"twitterDescription": "Repositórios Borg locais, USB e SSH para backups de host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Borg",
|
||||
"description": "O destino Borg escreve backups de host para um repositório Borg. Três tipos de repositório são suportados: caminho local do sistema de arquivos, disco externo montado, ou servidor remoto via SSH. Deduplicação de nível de chunk em todos os arquivos no repositório e criptografia opcional repokey.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"aboutBorg": {
|
||||
"heading": "O que é Borg",
|
||||
"body": "Borg (também escrito BorgBackup) é uma ferramenta de backup de desduplicação de código aberto mantida pela comunidade Borg Backup. Ele armazena todos os arquivos como um conjunto de blocos de comprimento variável dentro de um repositório; blocos são compartilhados entre os arquivos, então fazer o backup de dados inalterados tem custo de armazenamento quase zero. Borg não está ligado ao Proxmox — é uma ferramenta de backup de propósito geral usada em muitos ambientes. ProxMenux usa-o como um dos três destinos para backups de host; cada mecanismo Borg-específico descrito nesta página (tipos de repositório, borg-serve sobre SSH, criptografia repokey, prune) é o comportamento padrão Borg."
|
||||
},
|
||||
"intro": {
|
||||
"title": "Deduplicação por blocos com repositórios locais ou acessíveis via SSH",
|
||||
"body": "Um repositório Borg armazena blocos compartilhados entre todos os seus arquivos de backup. Repetir o backup de um arquivo inalterado não transfere nem armazena novos dados. O ProxMenux usa <code>borg create</code> para o backup e <code>borg extract</code> para a restauração. O repositório pode estar no mesmo sistema de arquivos da origem, em disco externo montado ou em host remoto acessível via SSH."
|
||||
},
|
||||
"binarySourcing": {
|
||||
"heading": "O binário borg",
|
||||
"intro": "Borg não é uma dependência de base do instalador ProxMenux. Quando um backup é executado, o <code>hb_ensure_borg</code> resolve o binário de quatro fontes em ordem e retorna o primeiro que funciona:",
|
||||
"rows": [
|
||||
{
|
||||
"priority": "1",
|
||||
"source": "Sistema <code>borg</code>",
|
||||
"detail": "Se o host já tem <code>borg</code> instalado via APT (<code>which borg</code> resolve), esse binário é usado."
|
||||
},
|
||||
{
|
||||
"priority": "2",
|
||||
"source": "Cache 'State-dir'",
|
||||
"detail": "<code>/usr/local/share/proxmenux/borg</code> — mantido de um anterior download GitHub neste host."
|
||||
},
|
||||
{
|
||||
"priority": "3",
|
||||
"source": "Pacote AppImage do Monitor",
|
||||
"detail": "<code>/usr/local/share/proxmenux/monitor-app/usr/bin/borg</code> — o AppImage agrupa um borg-linux64 assinado. Este é o caminho offline: um host sem internet ainda tem um <code>borg</code> funcionando."
|
||||
},
|
||||
{
|
||||
"priority": "4",
|
||||
"source": "Transferência do GitHub",
|
||||
"detail": "<code>wget</code> contra a URL <code>borg-linux64</code> fixada em <code>github.com/borgbackup/borg/releases/</code>, verificada contra uma constante SHA-256 em <code>lib_host_backup_common.sh</code> (<code>HB_BORG_LINUX64_SHA256</code>). No checksum descompasso o binário é descartado e o backup aborta. O arquivo baixado é armazenado em cache na dir estado para backups subsequentes usar caminho 2."
|
||||
}
|
||||
]
|
||||
},
|
||||
"repoTypes": {
|
||||
"heading": "Tipos de repositório",
|
||||
"intro": "O tipo de repositório é escolhido quando um alvo é adicionado. Cada tipo resolve para um URL de repositório diferente que Borg entende.",
|
||||
"rows": [
|
||||
{
|
||||
"type": "remote",
|
||||
"url": "ssh://USER@HOST/RPATH",
|
||||
"detail": "O repositório vive em um servidor remoto que executa <code>borg serve</code>. Requer uma conexão SSH para esse servidor."
|
||||
},
|
||||
{
|
||||
"type": "usb",
|
||||
"url": "/mnt/MOUNTPOINT/borgbackup",
|
||||
"detail": "O repositório vive em um disco externo montado (tipicamente USB). A montagem é resolvida via <code>hb_prompt_mounted_path</code>, que detecta, monta ou formata partições USB conforme necessário."
|
||||
},
|
||||
{
|
||||
"type": "local",
|
||||
"url": "/backup/borgbackup (any absolute path)",
|
||||
"detail": "O repositório vive numa pasta local. Significativo apenas quando o diretório alvo está em um disco físico separado — um repositório no mesmo disco que a fonte protege contra o erro do operador, mas não contra a falha do disco."
|
||||
}
|
||||
]
|
||||
},
|
||||
"serverSetup": {
|
||||
"heading": "Preparando o servidor Borg (lado do servidor)",
|
||||
"intro": "O tipo de repositório <code>remote</code> exige um servidor Borg funcional acessível via SSH. O ProxMenux não configura o servidor; apenas autoriza uma chave em uma conta existente. Esta seção descreve os requisitos antes da conexão.",
|
||||
"hostChoicesTitle": "Onde o servidor pode viver",
|
||||
"hostChoicesBody": "Qualquer host Linux com acesso SSH se qualifica. Configuração comum:",
|
||||
"hostChoicesItems": [
|
||||
"Um NAS dedicado ou caixa de backup (Debian, Ubuntu, TrueNAS SCALE com uma shell).",
|
||||
"Um recipiente LXC dentro de um nó Proxmox. Pegada pequena, isolada do hospedeiro a executar os backups.",
|
||||
"Outro host Proxmox na mesma LAN, ou um VM em qualquer lugar acessível sobre SSH."
|
||||
],
|
||||
"lxcWarningTitle": "LXC como servidor Borg",
|
||||
"lxcWarningBody": "Se o servidor Borg estiver em um LXC, generate-auto exige uma conta que aceite autenticação SSH por senha para instalar a chave. Caso contrário, use a instalação manual ou a alternativa generate-pct pelo host PVE.",
|
||||
"requirementsTitle": "Requisitos no servidor",
|
||||
"requirementsRows": [
|
||||
{
|
||||
"requirement": "Executável borg em <code>/usr/bin/borg</code>",
|
||||
"detail": "A linha <code>command=\"/usr/bin/borg serve ...\"</code> gravada pelo ProxMenux em <code>authorized_keys</code> usa esse caminho fixo. A instalação via APT (<code>apt install borgbackup</code>) coloca o executável ali. Um binário independente precisa de um link simbólico em <code>/usr/bin/borg</code>."
|
||||
},
|
||||
{
|
||||
"requirement": "Uma conta de usuário dedicada (tipicamente <code>borg</code>)",
|
||||
"detail": "Possui o diretório do repositório e recebe conexões SSH recebidas. Não precisa de acesso sudo ou shell — a linha authorized_keys desativa shells interativos de qualquer maneira."
|
||||
},
|
||||
{
|
||||
"requirement": "Um diretório de repositório com escrita",
|
||||
"detail": "O caminho que o operador dá ProxMenux (por exemplo <code>/backup/borgbackup</code>) deve existir no servidor e ser propriedade do usuário borg."
|
||||
},
|
||||
{
|
||||
"requirement": "O servidor SSH aceita o usuário borg",
|
||||
"detail": "<code>PubkeyAuthentication yes</code> (padrão). A autenticação por senha só é necessária para instalar a chave pelo fluxo <em>generate-auto</em>. Depois disso, o servidor pode desativar completamente a autenticação por senha."
|
||||
}
|
||||
],
|
||||
"minimalSetupTitle": "Configuração mínima do servidor",
|
||||
"minimalSetupBody": "Em um servidor Debian ou Ubuntu Borg, uma linha de base de trabalho é quatro comandos como root:",
|
||||
"minimalSetupCmd": "apt install borgbackup\nuseradd -m -d /home/borg -s /bin/bash borg\nmkdir -p /backup/borgbackup\nchown borg:borg /backup/borgbackup",
|
||||
"minimalSetupNote": "Com o servidor preparado e a autenticação SSH por senha disponível, <code>generate-auto</code> instala a chave por uma conta que possa gravar em authorized_keys do usuário borg. Os backups seguintes usam essa chave, restrita a <code>borg serve</code> no caminho configurado. Sem acesso por senha, instale-a manualmente ou pelo host PVE."
|
||||
},
|
||||
"sshAuth": {
|
||||
"heading": "Autenticação SSH (lado cliente)",
|
||||
"intro": "Repositórios Borg remotos são acessados sobre SSH. A conexão é executada do host ProxMenux para uma conta de usuário no servidor Borg que executa o <code>borg serve</code>. Este usuário é tipicamente chamado <code>borg</code>, NÃO o administrador/root usuário do servidor — a linha de comando borg-serve bloqueia a conexão com esse caminho específico do repositório (veja as estratégias chave abaixo).",
|
||||
"strategiesTitle": "Estratégias de chave SSH",
|
||||
"strategiesIntro": "Ao adicionar um destino remoto, o ProxMenux pede usuário SSH, host, porta e caminho remoto e oferece quatro opções de autenticação. A alternativa generate-pct é oferecida quando o acesso por senha é recusado. Os modos são descritos abaixo:",
|
||||
"strategyRows": [
|
||||
{
|
||||
"mode": "generate-auto",
|
||||
"label": "Recomendado",
|
||||
"detail": "O ProxMenux gera ou reutiliza um par de chaves ed25519 em <code>~/.ssh/borg_proxmenux_HOST_ed25519</code> e usa <code>sshpass</code> para testar o acesso e instalar a chave pública em <code>~borg/.ssh/authorized_keys</code>. A senha pertence a uma conta com permissão para gravar esse arquivo, normalmente root ou borg. Ela é usada durante a configuração e não é salva."
|
||||
},
|
||||
{
|
||||
"mode": "generate-manual",
|
||||
"label": "Sem senha de administração nesta máquina",
|
||||
"detail": "ProxMenux gera o keypair como acima, mas exibe a linha <code>authorized_keys</code> completa para o operador colar manualmente no servidor. A senha de administrador nunca deixa o host ProxMenux porque nunca é solicitado."
|
||||
},
|
||||
{
|
||||
"mode": "generate-pct",
|
||||
"label": "O servidor Borg é um PVE LXC",
|
||||
"detail": "O servidor Borg é executado dentro de um LXC em um nó PVE. ProxMenux autoriza a chave via <code>pct exec</code> do host PVE — root no host PVE escreve no LXC <code>~borg/.ssh/authorized_keys</code> sem precisar de SSH no próprio LXC."
|
||||
},
|
||||
{
|
||||
"mode": "existing",
|
||||
"label": "Usar uma chave existente",
|
||||
"detail": "O ProxMenux procura em <code>/root/.ssh/</code> e <code>$HOME/.ssh/</code> chaves privadas ed25519/RSA que consiga interpretar e as lista. O operador escolhe uma ou indica manualmente um caminho não padrão."
|
||||
},
|
||||
{
|
||||
"mode": "none",
|
||||
"label": "Configuração padrão do SSH",
|
||||
"detail": "Nenhuma chave personalizada — Borg depende da configuração padrão SSH da máquina (tipicamente <code>~/.ssh/id_rsa</code> ou um agente SSH)."
|
||||
}
|
||||
],
|
||||
"restrictTitle": "A linha authorized_keys",
|
||||
"restrictBody": "Para cada chave gerada, a linha <code>authorized_keys</code> gravada pelo ProxMenux no servidor restringe a chave a esta chamada de borg-serve no caminho configurado do repositório:",
|
||||
"restrictLine": "command=\"/usr/bin/borg serve --restrict-to-path RPATH\",restrict PUBKEY",
|
||||
"restrictNote": "O <code>command=</code> força cada sessão de SSH usando esta chave para executar apenas o comando borg-serve; <code>restrict</code> desativa o encaminhamento de portas, o encaminhamento de agentes, o encaminhamento de X11 e a alocação de PTY. A chave não pode ser usada para abrir uma shell interativa no servidor ou para acessar qualquer outro caminho do repositório, mesmo que a conta tenha privilégios mais amplos."
|
||||
},
|
||||
"savedTargets": {
|
||||
"heading": "Alvos salvos",
|
||||
"intro": "Um destino salvo mantém a configuração do repositório com um nome reconhecível, evitando digitar os dados novamente. Arquivos no diretório de estado do ProxMenux:",
|
||||
"rows": [
|
||||
{
|
||||
"file": "borg-targets.txt",
|
||||
"content": "Uma linha por destino: <code>NAME|REPO|SSH_KEY_PATH|ENCRYPT_MODE</code>. <code>hb_collect_borg_configs</code> lê o arquivo para preencher o menu de seleção de destinos."
|
||||
},
|
||||
{
|
||||
"file": "borg-pass-NAME.txt",
|
||||
"content": "Frase secreta do destino identificado acima por NAME (<code>chmod 600</code>). Presente somente quando se escolhe criptografia repokey."
|
||||
}
|
||||
],
|
||||
"outro": "Salvar o destino é opcional. Recusar não grava a configuração com nome, mas não remove uma chave SSH gerada. Se repokey for ativado sem destino salvo, o ProxMenux ainda guarda a frase secreta no arquivo legado borg-pass.txt."
|
||||
},
|
||||
"encryption": {
|
||||
"heading": "Criptografia",
|
||||
"body": "Os repositórios são inicializados com um modo de criptografia via <code>hb_borg_init_if_needed</code>: o moderno <code>borg repo-create -e MODE</code> quando disponível, ou o legado <code>borg init --encryption=MODE</code>. ProxMenux expõe dois modos: <code>repokey</code> (padrão) e <code>none</code>. No modo <code>repokey</code> Borg armazena a chave de criptografia dentro do próprio repositório; o acesso requer uma frase-passe, que ProxMenux pede duas vezes com validação de correspondência e armazena em <code>borg-pass-NAME.txt</code> para destinos salvos, ou no arquivo legado descrito acima. Uma janela de reconhecimento obrigatória é mostrada após a frase- senha ser salva: a frase- senha é a única maneira de acessar os arquivos criptografados, e perdê- la torna cada arquivo no repositório irrecuperável."
|
||||
},
|
||||
"runtimeEnv": {
|
||||
"heading": "Ambiente de execução",
|
||||
"intro": "ProxMenux exporta as seguintes variáveis de ambiente antes de invocar <code>borg</code>. Eles configuram a conexão e desbloqueiam o repositório sem incorporar segredos na linha de comando.",
|
||||
"rows": [
|
||||
{
|
||||
"var": "BORG_RSH",
|
||||
"value": "ssh -i SSH_KEY_PATH -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new [-p PORT]",
|
||||
"purpose": "Comando remoto usado pelo Borg para repositórios SSH. Uma chave selecionada acrescenta as opções de identidade. Quando um destino é adicionado com uma porta diferente da padrão, o ProxMenux acrescenta também -p PORT; os destinos guardados, as tarefas agendadas e o Monitor usam antes a porta do URL ssh://. Sem chave personalizada, e num destino novo com a porta padrão, a variável fica indefinida e o Borg usa a configuração SSH do host."
|
||||
},
|
||||
{
|
||||
"var": "BORG_PASSPHRASE",
|
||||
"value": "(passfrase de borg-pass-NAME.txt)",
|
||||
"purpose": "Desbloqueia a chave repokey. Configure apenas quando o alvo usar criptografia <code>repokey</code>. Nunca aparece na lista de argumentos do processo."
|
||||
},
|
||||
{
|
||||
"var": "BORG_ENCRYPT_MODE",
|
||||
"value": "repokey | none",
|
||||
"purpose": "Usado pelo <code>hb_borg_init_if_needed</code> ao inicializar um repositório que ainda não existe. Ignorado pelo <code>borg create</code> nos repositórios existentes."
|
||||
},
|
||||
{
|
||||
"var": "BORG_RELOCATED_REPO_ACCESS_IS_OK",
|
||||
"value": "yes",
|
||||
"purpose": "Suprime o prompt interativo que Borg levanta quando o URL do repositório difere do URL que foi originalmente alcançado (comum após um renomeamento de ponto de montagem ou SSH-host acessível via novo endereço)."
|
||||
},
|
||||
{
|
||||
"var": "BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK",
|
||||
"value": "yes",
|
||||
"purpose": "Suprime o prompt interativo Borg levanta a primeira vez que um repositório não criptografado é acessado de um novo cliente."
|
||||
}
|
||||
]
|
||||
},
|
||||
"archiveFormat": {
|
||||
"heading": "Nome e retenção do arquivo",
|
||||
"intro": "Cada backup cria um novo arquivo dentro do repositório.",
|
||||
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS",
|
||||
"retentionBody": "Para trabalhos agendados, o <code>run_scheduled_backup.sh</code> executa <code>borg prune</code> contra o repositório após cada backup bem sucedido com os valores de retenção configurados no trabalho (<code>--keep-last</code>, <code>--keep-daily</code>, <code>--keep-weekly</code>). Os backups interativos não removem backups antigos."
|
||||
},
|
||||
"restoreAccess": {
|
||||
"heading": "Obtenção no lado da restauração",
|
||||
"body": "A restauração lista os arquivos com <code>borg list REPO</code> e extrai o selecionado com <code>borg extract REPO::ARCHIVE-NAME</code> em um diretório de preparação. <code>_rs_check_layout</code> o encaminha ao processo padrão de restauração. Os mesmos comandos funcionam manualmente fora do ProxMenux; a árvore extraída tem a estrutura de três blocos descrita em <em>Como funciona</em>."
|
||||
},
|
||||
"references": {
|
||||
"heading": "Referências",
|
||||
"intro": "Documentação oficial do Borg para os componentes usados pelo ProxMenux.",
|
||||
"items": [
|
||||
{
|
||||
"label": "Documentação Borg",
|
||||
"href": "https://borgbackup.readthedocs.io/",
|
||||
"tail": " — ponto de entrada principal que abrange conceitos, implantação, arranque rápido e todos os comandos."
|
||||
},
|
||||
{
|
||||
"label": "borg create",
|
||||
"href": "https://borgbackup.readthedocs.io/en/stable/usage/create.html",
|
||||
"tail": " — o comando usado pelo ProxMenux em cada backup, com todas as opções aceitas."
|
||||
},
|
||||
{
|
||||
"label": "Criptografia do repositório",
|
||||
"href": "https://borgbackup.readthedocs.io/en/stable/usage/init.html#encryption-mode",
|
||||
"tail": " — os modos de criptografia aceitos pelo Borg, incluindo repokey, usado por padrão pelo ProxMenux."
|
||||
},
|
||||
{
|
||||
"label": "borg serve e implantação via SSH",
|
||||
"href": "https://borgbackup.readthedocs.io/en/stable/deployment/central-backup-server.html",
|
||||
"tail": " — configuração de um servidor Borg central acessível via SSH, incluindo o comando borg-serve e a opção restrict-to-path que o ProxMenux grava em authorized_keys."
|
||||
},
|
||||
{
|
||||
"label": "borg prune",
|
||||
"href": "https://borgbackup.readthedocs.io/en/stable/usage/prune.html",
|
||||
"tail": " — o modelo de retenção de --keep-last / --keep-daily / --keep-weekly aplicado pelo ProxMenux em cada tarefa agendada."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Destinos das cópias de segurança — arquivo local, Proxmox Backup Server e Borg | ProxMenux",
|
||||
"description": "Três backends de armazenamento recebem a mesma carga útil de backup ProxMenux: um arquivo .tar.zst local em qualquer sistema de arquivos com permissão de gravação, um backup PBS em uma datastore Proxmox Backup Server, ou um arquivo Borg em um repositório Borg local ou remoto. Cada infra-estrutura tem suas próprias características de compressão, desduplicação, criptografia e rede.",
|
||||
"ogTitle": "Destinos de backup do ProxMenux",
|
||||
"ogDescription": "Local, Proxmox Backup Server e Borg — três backends de armazenamento para a mesma carga útil de backup do host.",
|
||||
"twitterTitle": "Destinos de backup do ProxMenux | ProxMenux",
|
||||
"twitterDescription": "Arquivos locais, infraestruturas Proxmox Backup Server e Borg para backups de host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Destinos",
|
||||
"description": "Três backends de armazenamento suportados pelo ProxMenux Backup: arquivo local, Proxmox Backup Server (recomendado) e Borg. Cada um recebe o mesmo arquivo de três blocos de dados; eles diferem em formato de armazenamento, deduplicação, modelo de criptografia e requisitos de rede.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Mesmo conteúdo, três backends",
|
||||
"body": "Cada backup produz as mesmas três cargas (rootfs, manifesto, aplicações). O que muda entre destinos é como essas cargas são armazenadas e como o operador as recupera para uma restauração. Cada infra-estrutura é implementada como uma função separada em <code>backup_host.sh</code> — <code>_bk_local</code>, <code>_bk_pbs</code>, <code>_bk_borg</code> — mas todos os três compartilham a mesma etapa de preparação temporária (<code>hb_prepare_staging</code>) e o mesmo caminho de restauração de código. A escolha de destino apenas afeta a escrita e a recuperação; ela não altera o que uma restauração faz ou como consome o arquivo."
|
||||
},
|
||||
"comparison": {
|
||||
"heading": "Comparação de características",
|
||||
"intro": "A tabela a seguir lista as diferenças concretas entre as três infra-estruturas como se comportam hoje em ProxMenux. Todos os valores descrevem o comportamento observado da própria infra-estrutura, não as recomendações editoriais.",
|
||||
"rows": [
|
||||
{
|
||||
"feature": "Formato de armazenamento",
|
||||
"local": "Um ficheiro <code>.tar.zst</code> (ou <code>.tar.gz</code> se o <code>zstd</code> estiver ausente).",
|
||||
"pbs": "Backup PBS (blocos <code>.pxar</code> no datastore).",
|
||||
"borg": "Arquivo Borg dentro de um repositório Borg (arquivos de segmentos)."
|
||||
},
|
||||
{
|
||||
"feature": "Compressão",
|
||||
"local": "zstd (nível padrão) via <code>tar --zstd</code>. gzip fallback.",
|
||||
"pbs": "Gerenciada pelo proxmox-backup-client. O ProxMenux não altera as configurações de compressão.",
|
||||
"borg": "Compressão integrada do Borg. O ProxMenux chama borg create sem alterar as configurações de compressão."
|
||||
},
|
||||
{
|
||||
"feature": "Desduplicação",
|
||||
"local": "Nenhuma. Cada backup é um arquivo independente completo.",
|
||||
"pbs": "Deduplicação completa por blocos entre todos os backups no datastore.",
|
||||
"borg": "Deduplicação completa por blocos entre todos os arquivos do repositório."
|
||||
},
|
||||
{
|
||||
"feature": "Criptografia em repouso",
|
||||
"local": "Nenhum (depende da proteção do sistema de arquivos).",
|
||||
"pbs": "Criptografia opcional do lado do cliente com um arquivo de chave. Quando ativada, o blob de recuperação é enviado em um grupo de backup separado.",
|
||||
"borg": "Criptografia opcional repokey (chave armazenada no repo, desbloqueada por uma frase- senha)."
|
||||
},
|
||||
{
|
||||
"feature": "Retenção / limpeza",
|
||||
"local": "Aplicada por trabalho agendado via <code>KEEP_LAST</code>. Os arquivos antigos são removidos junto com seus arquivos auxiliares e logs de execução. Os backups interativos não fazem limpeza.",
|
||||
"pbs": "Aplicado por trabalho programado via <code>proxmox-backup-client prune --keep-last / --keep-daily / --keep-weekly</code>. Os backups interativos não fazem limpeza.",
|
||||
"borg": "Aplicado por trabalho programado via <code>borg prune --keep-last / --keep-daily / --keep-weekly</code>. Os backups interativos não fazem limpeza."
|
||||
},
|
||||
{
|
||||
"feature": "Rede",
|
||||
"local": "Nenhuma. Escreve para um ponto de montagem local (tipicamente um disco interno ou uma unidade USB).",
|
||||
"pbs": "TCP para o servidor PBS (porta padrão 8007). Requer credenciais PBS + impressão digital.",
|
||||
"borg": "Localização local do sistema de ficheiros ou túnel SSH para uma máquina Borg remota."
|
||||
},
|
||||
{
|
||||
"feature": "Dependências",
|
||||
"local": "<code>tar</code>, <code>zstd</code> (presente no Proxmox por padrão).",
|
||||
"pbs": "Pacote <code>proxmox-backup-client</code> (incluído no Proxmox VE 8+).",
|
||||
"borg": "binário <code>borg</code>. Auto-fornecido por ProxMenux do pacote Monitor AppImage quando faltando."
|
||||
},
|
||||
{
|
||||
"feature": "Acesso para restauração",
|
||||
"local": "Qualquer máquina com tar+zstd pode extrair o arquivo. Não é necessário PBS/Borg.",
|
||||
"pbs": "Requer <code>proxmox-backup-client</code>, credenciais PBS e o arquivo de chave (se o backup estiver criptografado).",
|
||||
"borg": "Requer <code>borg</code> + o caminho do repositório + a senha (se criptografada)."
|
||||
}
|
||||
],
|
||||
"captionCode": "feature",
|
||||
"captionLocal": "Local",
|
||||
"captionPbs": "Proxmox Backup Server (recomendado)",
|
||||
"captionBorg": "Borg"
|
||||
},
|
||||
"sameArchive": {
|
||||
"heading": "A disposição do arquivo não muda com o destino",
|
||||
"body": "Dentro de qualquer um dos três destinos, o mesmo <code>rootfs/</code> + <code>metadata/</code> + <code>manifest.json</code> layout descrito em <em>Como funciona</em> está presente. Um <code>.tar.zst</code> extraído de um arquivo local, um <code>.pxar</code> restaurado de PBS, e um arquivo Borg extraído com <code>borg extract</code> todos produzem uma árvore de diretórios idêntica. O caminho do código de restauração (<code>_rs_check_layout</code>, <code>_rs_apply</code>, <code>_rs_prepare_pending_restore</code>) lê as mesmas três cargas úteis sem saber de que destino vieram."
|
||||
},
|
||||
"extractStandalone": {
|
||||
"heading": "Extraindo um backup fora de ProxMenux",
|
||||
"intro": "Qualquer um dos três formatos de arquivo pode ser lido com ferramentas padrão sem ProxMenux instalado no host de leitura. Os comandos abaixo produzem a mesma árvore de diretórios que uma restauração consome internamente.",
|
||||
"localCmd": "# From a local .tar.zst archive:\ntar --zstd -xf hostcfg-HOST-TIMESTAMP.tar.zst\n\n# From a .tar.gz fallback:\ntar -xzf hostcfg-HOST-TIMESTAMP.tar.gz",
|
||||
"pbsCmd": "# From a PBS backup (requires proxmox-backup-client):\nproxmox-backup-client restore \\\n --repository USER@REALM@HOST:DATASTORE \\\n host/hostcfg-HOST/BACKUP-TIME \\\n hostcfg.pxar /tmp/hostcfg\n\n# Add --keyfile KEY-PATH when the backup is encrypted.",
|
||||
"borgCmd": "# De um arquivo Borg (requer borg e a senha dos repositórios criptografados):\nborg extract REPO-PATH::ARCHIVE-NAME\n\n# Em um repositório remoto acessível por SSH:\nborg extract ssh://USER@HOST:PORT/REPO-PATH::ARCHIVE-NAME",
|
||||
"note": "A árvore extraída pode então ser inspecionada manualmente ou alimentada a uma restauração manual. Veja as páginas de destino individuais para o fluxo de recuperação exato que o ProxMenux usa sob o capô."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Detalhes por destino",
|
||||
"intro": "Cada destino tem sua própria página cobrindo o fluxo de configuração, o formato on-disk e o comando de recuperação usado pela restauração.",
|
||||
"items": [
|
||||
{
|
||||
"label": "Arquivo local",
|
||||
"href": "/docs/backup-restore/destinations/local",
|
||||
"tail": " — pré-configurando um alvo local, montagem da unidade USB, a verificação de segurança contra a gravação do arquivo em si, o sidecar JSON que permite ao Monitor identificar o arquivo."
|
||||
},
|
||||
{
|
||||
"label": "Proxmox Backup Server (recomendado)",
|
||||
"href": "/docs/backup-restore/destinations/pbs",
|
||||
"tail": " — seleção de datastore, credenciais e impressão digital, ciclo de vida do arquivo de chave de criptografia, senha de recuperação, carregando o blob de recuperação para PBS para recuperação de nova instalação."
|
||||
},
|
||||
{
|
||||
"label": "Borg",
|
||||
"href": "/docs/backup-restore/destinations/borg",
|
||||
"tail": " — repositórios locais ou acessíveis por SSH, origem do binário Borg (sistema / cache / pacote AppImage do Monitor / download do GitHub), inicialização do repositório, gerenciamento da senha e configuração da chave SSH para repositórios remotos."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Destino de arquivo local — tar.zst em um sistema de arquivos ou unidade USB | ProxMenux",
|
||||
"description": "O destino de backup local escreve um único arquivo .tar.zst para qualquer diretório com permissão de gravação: um disco interno, um ponto de montagem Proxmox, uma partilha NFS, ou uma unidade USB. Documenta o fluxo de configuração, a lógica de detecção e montagem USB, a verificação de segurança contra a gravação do arquivo em um caminho que está sendo feito backup, e o sidecar JSON que identifica o arquivo.",
|
||||
"ogTitle": "Cópia de segurança do ProxMenux — Destino do arquivo local",
|
||||
"ogDescription": "Como ProxMenux escreve backups locais como arquivos .tar.zst e como configurar o diretório de destino ou unidade USB.",
|
||||
"twitterTitle": "Destino de backup local | ProxMenux",
|
||||
"twitterDescription": "Como ProxMenux escreve backups locais como arquivos .tar.zst em um sistema de arquivos ou unidade USB."
|
||||
},
|
||||
"header": {
|
||||
"title": "Arquivo local",
|
||||
"description": "O destino local escreve um único arquivo de tar comprimido para qualquer diretório com permissão de gravação no host: um disco interno, uma montagem NFS ou SMB, ou uma unidade USB.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Um arquivo, auto-suficiente",
|
||||
"body": "Um backup local produz um único arquivo <code>hostcfg-HOST-TIMESTAMP.tar.zst</code> (ou <code>.tar.gz</code> quando <code>zstd</code> está ausente). O arquivo contém toda a árvore de arquivos — <code>manifest.json</code>, <code>metadata/</code> e <code>rootfs/</code> — e pode ser restaurado em qualquer host Proxmox com o fluxo de restauração ProxMenux, ou extraído manualmente com <code>tar --zstd -xf</code> em qualquer sistema Linux. Nenhum servidor, nenhuma inicialização de repositório, nenhuma dependência externa. Este é o destino com o caminho de recuperação mais curto quando nem PBS nem Borg está disponível."
|
||||
},
|
||||
"targetConfig": {
|
||||
"heading": "Configurando o diretório alvo",
|
||||
"intro": "O destino local é um <strong>único diretório de destino salvo de forma persistente</strong> — não uma lista. ProxMenux armazena a escolha do operador em <code>/usr/local/share/proxmenux/local-target.conf</code> e lê essa escolha em cada backup. Quando nenhum alvo foi configurado, o <code>HB_LOCAL_TARGET_DEFAULT = /var/lib/vz/dump</code> padrão é usado (o mesmo diretório que o Proxmox usa para suas próprias saídas <code>vzdump</code>). O alvo está configurado a partir de <em>Configure destinos de backup → Destinos locais</em>:",
|
||||
"options": [
|
||||
"<strong>Use o padrão (<code>/var/lib/vz/dump</code>).</strong> O armazenamento local Proxmox. Presente em cada instalação do Proxmox; o arquivo fica ao lado das saídas vzdump e é captado automaticamente pela aba Backups do Monitor.",
|
||||
"<strong>Insira um caminho personalizado.</strong> Qualquer caminho absoluto do sistema de arquivos pode ser usado: uma montagem NFS, uma partilha SMB montada via <code>fstab</code>, um conjunto de dados dedicado ZFS, um segundo disco interno. ProxMenux valida que o caminho existe e é um diretório antes de persisti-lo.",
|
||||
"<strong>Escolha uma unidade USB.</strong> Abre o submenu USB (abaixo), que detecta dispositivos removíveis e oferece para montar ou formatar um."
|
||||
]
|
||||
},
|
||||
"usbFlow": {
|
||||
"heading": "Detecção e montagem de unidades USB",
|
||||
"intro": "O submenu USB lista partições em dispositivos removíveis relatados pelo <code>lsblk</code>. Cada partição é apresentada com seu tamanho, etiqueta do sistema de arquivos e estado atual. O estado determina a ação que o ProxMenux oferece.",
|
||||
"statesTitle": "Os três estados do dispositivo",
|
||||
"stateRows": [
|
||||
{
|
||||
"state": "montado",
|
||||
"shown": "Tamanho · etiqueta · [fstype] · → /mount/point",
|
||||
"action": "A partição já está montada em algum lugar. Selecioná-la salva o ponto de montagem atual como alvo local. Nenhuma montagem é realizada."
|
||||
},
|
||||
{
|
||||
"state": "desmontado",
|
||||
"shown": "Tamanho · etiqueta · [fstype] · (não montado — será montado)",
|
||||
"action": "Um sistema de ficheiros está presente mas não está montado. Na confirmação, o ProxMenux executa o <code>hb_mount_usb_partition</code>: cria o <code>/mnt/backup-LABEL</code> (ou um caminho baseado em UUID, se não houver rótulo), monta a partição e persiste o ponto de montagem como alvo local."
|
||||
},
|
||||
{
|
||||
"state": "vazia",
|
||||
"shown": "Tamanho · disco USB bruto — sem sistema de arquivos (será FORMATADO)",
|
||||
"action": "O dispositivo não tem sistema de arquivos. Essa operação destrutiva exige duas confirmações. Primeiro, uma janela Sim/Não explica que o disco será apagado. Depois, um campo exige que o usuário <strong>digite o caminho exato do dispositivo</strong> (por exemplo <code>/dev/sdb</code>) antes de o ProxMenux criar uma nova tabela GPT com uma partição ext4 e montá-la."
|
||||
}
|
||||
],
|
||||
"notMountedFallback": "Quando nenhum dispositivo USB é detectado, o submenu cai de volta para uma caixa de entrada simples. O operador pode indicar uma localização arbitrária do ponto de montagem; se a localização não for um ponto de montagem registado, uma janela de confirmação avisa antes de prosseguir."
|
||||
},
|
||||
"safetyCheck": {
|
||||
"heading": "Verificação de segurança — destino dentro de um caminho de backup",
|
||||
"body": "Antes de gravar o arquivo, <code>_bk_local</code> verifica se o diretório de destino <strong>não</strong> é um subcaminho de qualquer diretório cujo backup está sendo feito. Um erro comum seria adicionar <code>/root</code> ao perfil e escolher <code>/root/backups</code> como destino - o arquivo então se incluiria, produzindo um arquivo corrompido ou crescendo sem limites até que o disco ficasse cheio. A verificação resolve ambos os caminhos com <code>readlink -m</code>, compara-os e, em caso de conflito, aborta o backup com uma caixa de diálogo que nomeia o caminho conflitante e lista três maneiras de resolvê-lo: escolha um destino fora do caminho conflitante, remova a entrada personalizada que contém o destino ou use o modo Personalizado para desmarcar o caminho conflitante para esta execução."
|
||||
},
|
||||
"archiveFormat": {
|
||||
"heading": "Formato de arquivo e compressão",
|
||||
"intro": "O nome do arquivo de saída inclui o nome do host de origem e a data e hora do backup, permitindo ordenar as cópias cronologicamente no diretório e identificar cada arquivo.",
|
||||
"namePattern": "hostcfg-HOSTNAME-YYYYMMDD_HHMMSS.tar.zst",
|
||||
"compressionTitle": "Compressão",
|
||||
"compressionBody": "O caminho primário usa <code>tar --zstd -cf</code> — um pipeline de um único comando que comprime ao nível padrão do zstd. Quando <code>zstd</code> não está presente na fonte (raro em Proxmox, mas possível em instalações mínimas), ProxMenux cai de volta para <code>gzip</code>. No caminho de retorno, se o <code>pv</code> estiver disponível, uma barra de progresso é adicionada ao pipeline para que o operador veja o tamanho do arquivo crescer em tempo real; sem o <code>pv</code>, o <code>tar -czf</code> simples é usado silenciosamente.",
|
||||
"sourceTitle": "O que vai para o arquivo",
|
||||
"sourceBody": "O comando tar é chamado com <code>-C \"$staging_root\" .</code>, incluindo <strong>toda a raiz da área de preparação</strong>: <code>rootfs/</code>, <code>metadata/</code> e <code>manifest.json</code>. Os três blocos de dados ficam lado a lado na raiz do arquivo tar. A extração produz exatamente a árvore usada pelo código de restauração."
|
||||
},
|
||||
"sidecar": {
|
||||
"heading": "O arquivo auxiliar JSON",
|
||||
"intro": "Cada backup local bem sucedido produz um arquivo companheiro: <code>HOSTNAME-TIMESTAMP.tar.zst.proxmenux.json</code>, escrito ao lado do arquivo por <code>hb_write_archive_sidecar</code>. Este pequeno arquivo JSON permite que o ProxMenux Monitor identifique o arquivo como um backup de host ProxMenux mesmo que mais tarde seja movido, renomeado ou arquivado em outro lugar.",
|
||||
"contentTitle": "Conteúdo do sidecar",
|
||||
"contentBody": "O sidecar armazena a versão do esquema, se o backup veio de uma execução interativa ou de uma tarefa agendada (<code>kind</code>), o ID do trabalho para as execuções agendadas, o modo de perfil usado (<code>default</code> ou <code>custom</code>), o nome de máquina de origem, o nome de base do arquivo original, um timestamp de criação ISO-8601 e o tamanho do arquivo em bytes.",
|
||||
"whyBody": "A aba Backups do Monitor procura arquivos auxiliares <code>*.proxmenux.json</code> nos diretórios locais configurados, e não arquivos <code>*.tar.zst</code>, pois um <code>.tar.zst</code> sem arquivo auxiliar pode não ser um backup ProxMenux. A busca é rápida (os arquivos JSON são pequenos) e a associação permanece válida após renomear o arquivo, desde que o auxiliar seja renomeado de forma correspondente."
|
||||
},
|
||||
"restoreAccess": {
|
||||
"heading": "Restaurando de um arquivo local",
|
||||
"body": "O fluxo de restauração ProxMenux descobre arquivos locais digitalizando o alvo local configurado para sidecars e exibindo-os na lista Arquivos. A seleção de um arquivo aciona <code>_rs_check_layout</code>, que extrai o tarball em um diretório de preparação temporária e confirma o layout de três cargas antes de prosseguir. Para extração manual fora de ProxMenux, <code>tar --zstd -xf hostcfg-HOSTNAME-TIMESTAMP.tar.zst -C /tmp/hostcfg</code> produz a mesma árvore que o código de restauração consome."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Proxmox Backup Server destino — repositório, encriptação, recuperação ProxMenux",
|
||||
"description": "O destino PBS grava os backups do host ProxMenux como backups PBS. Documenta a descoberta de repositórios em /etc/pve/storage.cfg, a configuração manual, o envio de .pxar, a criptografia no cliente com arquivo de chave e sua cópia de recuperação opcional protegida por frase secreta, e a recuperação da chave por várias fontes em um host recém-instalado.",
|
||||
"ogTitle": "Cópia de segurança ProxMenux — destino Proxmox Backup Server",
|
||||
"ogDescription": "Como o ProxMenux grava backups do host no Proxmox Backup Server com criptografia por arquivo de chave no cliente e uma cópia da chave para recuperação.",
|
||||
"twitterTitle": "PBS destino de backup □ ProxMenux",
|
||||
"twitterDescription": "Destino Proxmox Backup Server com criptografia por arquivo de chave e cópia de recuperação protegida por frase secreta."
|
||||
},
|
||||
"header": {
|
||||
"title": "Proxmox Backup Server",
|
||||
"description": "O destino PBS envia todo o diretório de preparação como um único backup .pxar para um datastore Proxmox Backup Server. A criptografia no cliente com arquivo de chave é opcional, assim como o envio, junto a cada backup, de uma cópia da chave protegida por frase secreta para recuperação.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"recommendedBadge": "Destino recomendado",
|
||||
"aboutPbs": {
|
||||
"heading": "O que é Proxmox Backup Server",
|
||||
"body": "Proxmox Backup Server (PBS) é o próprio produto do servidor de backup da Proxmox, desenvolvido e mantido pela mesma equipe que o autor Proxmox VE. É um servidor de backup dedicado projetado para receber backups de hosts Proxmox VE (VMs, LXCs e — via <code>proxmox-backup-client</code> — diretórios host arbitrários) com deduplicação baseada em blocos, criptografia do lado do cliente e políticas de retenção aplicadas lado servidor. ProxMenux usa PBS como um dos três destinos para backups de host; cada mecanismo específico PBS descrito nesta página (grupos de backup, arquivos <code>.pxar</code>, criptografia de arquivos de chaves <code>--backup-id</code>) é o comportamento padrão PBS."
|
||||
},
|
||||
"intro": {
|
||||
"title": "Um backup por execução, dedup de nível de blocos",
|
||||
"body": "Um backup PBS cria uma única entrada no datastore, sob o ID <code>host/hostcfg-HOSTNAME/BACKUP-TIME</code>. Os dados formam um arquivo <code>.pxar</code> com a estrutura de três blocos descrita em <em>Como funciona</em>. O PBS deduplica blocos entre todos os backups do datastore, de modo que backups posteriores do mesmo host transferem e armazenam apenas os blocos alterados. Nas tarefas agendadas, o próprio ProxMenux aplica a retenção: após cada execução bem-sucedida, <code>run_scheduled_backup.sh</code> executa <code>proxmox-backup-client prune</code> com <code>--keep-last</code> / <code>--keep-daily</code> / <code>--keep-weekly</code> e os valores configurados na tarefa."
|
||||
},
|
||||
"repoSelection": {
|
||||
"heading": "Selecção do repositório",
|
||||
"intro": "ProxMenux descobre repositórios PBS de duas fontes em cada backup. O operador escolhe um de um menu unificado; a escolha determina <code>HB_PBS_REPOSITORY</code>, <code>HB_PBS_SECRET</code> e <code>HB_PBS_FINGERPRINT</code> para a execução.",
|
||||
"sourceRows": [
|
||||
{
|
||||
"source": "storage.cfg do Proxmox (deteção automática)",
|
||||
"path": "/etc/pve/storage.cfg + /etc/pve/priv/storage/NAME.pw",
|
||||
"content": "Qualquer estrofe <code>pbs:</code> na própria configuração de armazenamento do Proxmox é captada automaticamente. Servidor, datastore, nome de usuário e impressão digital vêm da estrofe. A senha é lida no diretório de credenciais do Proxmox. Nenhuma reentrada necessária no lado ProxMenux — o repositório está disponível assim que estiver configurado no Proxmox."
|
||||
},
|
||||
{
|
||||
"source": "Configuração manual do ProxMenux",
|
||||
"path": "/usr/local/share/proxmenux/pbs-manual-configs.txt + pbs-pass-NAME.txt + pbs-fingerprint-NAME.txt",
|
||||
"content": "Adicionado de <em>Configure destinos de backup → destinos de PBS → Adicione PBS</em>. Pede um nome, nome de usuário (<code>root@pam</code> ou <code>user@pbs!token</code>), host ou IP, datastore e senha. A senha re-prompts na entrada vazia — uma gravação vazia persistiria silenciosamente e cada backup subsequente falharia com um erro de autenticação opaco. Este caminho é usado quando o PBS alvo não é registrado como armazenamento Proxmox."
|
||||
}
|
||||
],
|
||||
"menuTitle": "Menu de seleção",
|
||||
"menuBody": "Ambas as fontes são mostradas em um único menu, cada linha marcada com sua origem (<code>[proxmox]</code> ou <code>[manual]</code>). As entradas cuja senha não pôde ser resolvida são marcadas com um aviso <code>⚠ no password</code> — selecionando-se um aciona uma reentrada de senha antes do backup começar. A impressão digital é passada para <code>proxmox-backup-client</code> através da variável de ambiente <code>PBS_FINGERPRINT</code>; quando ausente, o cliente pede ao operador para aceitar o certificado do servidor de forma interativa no primeiro backup."
|
||||
},
|
||||
"backupCommand": {
|
||||
"heading": "O comando de backup",
|
||||
"intro": "O envio usa uma única chamada de <code>proxmox-backup-client backup</code>. O ProxMenux usa <code>env</code> para passar ao cliente a senha, a senha de criptografia e a impressão digital como variáveis de ambiente.",
|
||||
"cmd": "env \\\n PBS_PASSWORD=\"$HB_PBS_SECRET\" \\\n PBS_ENCRYPTION_PASSWORD=\"$HB_PBS_ENC_PASS\" \\\n PBS_FINGERPRINT=\"$HB_PBS_FINGERPRINT\" \\\n proxmox-backup-client backup \\\n hostcfg.pxar:$staging_root \\\n --repository USER@REALM@HOST:DATASTORE \\\n --backup-type host \\\n --backup-id hostcfg-HOSTNAME \\\n --backup-time BACKUP-EPOCH \\\n [--keyfile /usr/local/share/proxmenux/pbs-key.conf]",
|
||||
"backupIdTitle": "Nome do ID de backup",
|
||||
"backupIdBody": "O ID de backup padrão é <code>hostcfg-HOSTNAME</code>. Pede-se ao operador que o confirme ou edite antes do envio; quaisquer caracteres fora do <code>[A-Za-z0-9_-]</code> são despojados e os traços são aparados. Reutilizar o mesmo ID entre as execuções é intencional — o PBS trata o ID como um <em>group</em>, e cada backup subsequente aparece como um novo backup dentro desse grupo, compartilhando dedup com execuções anteriores.",
|
||||
"pxarTitle": "Por que a fonte é a raiz de estadiamento completa",
|
||||
"pxarBody": "A origem do arquivo <code>.pxar</code> é todo o <code>staging_root</code>: <code>rootfs/</code>, <code>metadata/</code> e <code>manifest.json</code> em conjunto. Versões anteriores usavam <code>$staging_root/rootfs</code> como origem, deixando <code>metadata/</code> fora do arquivo. Sem esses dados, a verificação de compatibilidade emitia avisos de mudança de host mesmo ao restaurar no mesmo host. As cópias antigas continuam a ser restauradas pelo caso 3 de <code>_rs_check_layout</code>, que volta a colocar a árvore simples <code>etc/var/root/usr</code> dentro de uma hierarquia <code>rootfs/</code>."
|
||||
},
|
||||
"encryption": {
|
||||
"heading": "Criptografia do lado do cliente",
|
||||
"glossaryHint": "Esta seção usa os termos <em>arquivo de chave</em>, <em>frase secreta</em> e <em>envelope de recuperação</em>. O <glosarioLink>glossário</glosarioLink> resume as diferenças em uma frase por termo.",
|
||||
"intro": "A criptografia PBS no cliente com arquivo de chave cifra os blocos no host de origem antes do envio. No ProxMenux ela é opcional. Ao ativá-la, o operador escolhe explicitamente sim ou não durante a configuração se deseja enviar ao PBS também uma cópia de recuperação do arquivo de chave protegida por frase secreta; a escolha pode ser alterada depois no Monitor. O arquivo fica sempre no caminho canônico <code>/usr/local/share/proxmenux/pbs-key.conf</code> e é reutilizado sem novas perguntas em todos os backups criptografados posteriores.",
|
||||
"keyfileTitle": "Configurar o arquivo de chaves",
|
||||
"keyfileBody": "O diálogo de criptografia aparece no primeiro backup criptografado do host. Primeiro pergunta se deseja criptografar o backup: <em>Não</em> continua sem criptografia, e <em>Sim</em> passa à segunda etapa. Esta depende da existência de um arquivo de chave em <code>/usr/local/share/proxmenux/pbs-key.conf</code>. Se existir, ele é reutilizado sem novas perguntas e o backup continua; os backups posteriores também não perguntam novamente. Caso contrário, um menu oferece duas opções. <em>Gerar um novo arquivo de chave</em> executa <code>proxmox-backup-client key create --kdf none</code>. <em>Usar um arquivo de chave existente</em> detecta automaticamente uma chave gerenciada pelo PVE: se o repositório PBS selecionado estiver registrado no Proxmox com uma chave de criptografia em <code>/etc/pve/priv/storage/<NAME>.enc</code>, o arquivo será copiado sem perguntas para o caminho canônico do ProxMenux. Se nenhuma chave PVE corresponder ao repositório, será solicitado o caminho absoluto onde o operador já colocou o arquivo neste host. Nos dois casos, o arquivo fica no caminho canônico com <code>chmod 600</code>.",
|
||||
"modesTitle": "Arquivo de chave por host ou compartilhado",
|
||||
"modesIntro": "Os dois modelos são aceitos e nenhum é obrigatório: o operador escolhe conforme a organização dos seus hosts.",
|
||||
"modesPerHostTitle": "Arquivo de chave por host (padrão)",
|
||||
"modesPerHostBody": "Cada host gera seu próprio arquivo de chaves na primeira vez que ele permite criptografia PBS. O isolamento é máximo: comprometer o arquivo de chaves de um host não expõe os backups de nenhum outro. Recomendado para frotas de produção e ambientes onde hospedeiros têm diferentes proprietários ou limites de conformidade.",
|
||||
"modesSharedTitle": "Arquivo de chaves compartilhado (importação em cada máquina)",
|
||||
"modesSharedBody": "Um arquivo-chave mestre gerado uma vez e instalado em cada host por meio da opção <em>Usar um arquivo-chave existente</em>. O gerenciamento é mais simples: um único segredo para proteger e qualquer host pode descriptografar os arquivos de qualquer outro (útil para consolidação, exercícios de restauração entre hosts ou verificação de backup centralizada). A desvantagem é que um vazamento do arquivo-chave compartilhado expõe todos os hosts de uma só vez. Recomendado para homelabs e frotas onde todos os hosts têm o mesmo proprietário e limite de confiança.",
|
||||
"recoveryTitle": "Chave de envio para PBS — o operador decide",
|
||||
"recoveryBody": "Logo após escolher o arquivo de chave, o ProxMenux pergunta explicitamente <em>Enviar a chave para o PBS?</em>, com duas respostas. <strong>Nenhum artefato de recuperação é enviado ao PBS até o operador responder Sim.</strong> O padrão é <em>Não, manter apenas localmente</em>: a chave fica no caminho canônico local, o ProxMenux não envia artefatos de recuperação ao PBS e o operador cuida da cópia externa. O botão <em>Baixar arquivo de chave</em> do Monitor, na linha do destino PBS, fornece essa cópia quando necessário. Ao escolher <em>Sim, enviar</em>, é solicitada duas vezes uma frase secreta de recuperação, verificando se as duas entradas coincidem. O ProxMenux protege o arquivo com AES-256-CBC e PBKDF2 (600.000 iterações, salt aleatório), produzindo <code>pbs-key.recovery.enc</code>. Cada backup criptografado posterior envia esse envelope ao PBS como um grupo de backup associado. Esses envios não transmitem ao PBS a frase secreta nem o arquivo de chave em texto claro. A escolha pode ser alterada a qualquer momento no Monitor: o controle na linha PBS permite Sim ou Não e aplica imediatamente Iniciar envio, Parar envio ou Atualizar frase secreta, conforme o estado atual.",
|
||||
"blobUploadTitle": "Grupo de backup emparelhado no PBS",
|
||||
"blobUploadBody1": "Quando o modo de garantia é <em>Sim, fazer upload</em>, ProxMenux carrega o envelope de recuperação para PBS após cada backup criptografado como um segundo grupo de backup emparelhado com o mesmo nome do grupo host, mas terminando em <code>-keyrecovery</code>. Os dois grupos ficam próximos um do outro na listagem do armazenamento de dados – um para backups de host e outro para envelopes de recuperação. <strong>O envelope nunca sai do host em texto simples</strong>: a criptografia acontece no próprio host com AES-256-CBC e PBKDF2 antes que qualquer byte seja transmitido (<code>openssl enc -aes-256-cbc -pbkdf2 -iter 600000 -salt</code>). PBS recebe apenas o envelope já criptografado.",
|
||||
"envelopeSecurityTitle": "Carregar o arquivo de recuperação de chaves para PBS é um risco de segurança?",
|
||||
"envelopeSecurityBody": "O arquivo de recuperação de chaves está criptografado em trânsito e em repouso. A senha de recuperação nunca deixa o host: criptografia acontece localmente antes do upload, e PBS só vê o resultado já criptografado. Um administrador PBS — ou qualquer pessoa com acesso ao datastore — pode baixar o arquivo keyrecovery, mas sem a frase-passe de recuperação eles não podem ler o arquivo de chave dentro: é cifrar opaco. Reconstruir o arquivo de chaves requer ambas as peças ao mesmo tempo, o arquivo de recuperação de chaves e a frase-passe, e apenas o operador detém ambas.",
|
||||
"blobUploadConstraintTitle": "Por que dois grupos em vez de um único criptografado",
|
||||
"blobUploadConstraintBody": "Uma única chamada de <code>proxmox-backup-client backup</code> criptografa todos os seus arquivos com a mesma chave ou não criptografa nenhum; não permite misturar os dois casos. O backup do host precisa ser criptografado com a chave do host, mas o envelope de recuperação não pode acompanhá-lo no mesmo envio, pois acabaria criptografado com a própria chave que contém. Em um host recém-instalado, seria impossível abri-lo: seria necessária a chave para descriptografar a própria chave. Por isso os dois artefatos são enviados separadamente e aparecem em dois grupos. O cliente PBS criptografa o backup do host com o arquivo de chave, e o ProxMenux criptografa o envelope com a frase secreta antes do envio. Duas camadas de criptografia diferentes protegem dois elementos distintos.",
|
||||
"blobUploadImageAlt": "PBS UI mostrando os grupos de backup hostcfg-HOSTNAME e hostcfg-HOSTNAME-keyrecovery adjacentes na listagem de datastore.",
|
||||
"blobUploadImageCaption": "Interface PBS — os grupos de backup associados. O grupo principal contém os backups do host; o grupo -keyrecovery contém o arquivo de chave protegido por frase secreta.",
|
||||
"recoverTitle": "Recuperação num novo hospedeiro",
|
||||
"recoverBody": "Quando o arquivo de chave falta no caminho canônico, após reinstalar o host ou removê-lo explicitamente, a restauração tenta três fontes em ordem e para na primeira que fornece uma chave utilizável. Primeiro, se houver uma chave gerenciada pelo PVE correspondente ao repositório PBS selecionado em <code>/etc/pve/priv/storage/<NAME>.enc</code>, ela será copiada sem perguntas para o caminho canônico. Segundo, se houver um grupo <code>-keyrecovery</code> no PBS, será baixado o instantâneo mais recente e solicitada a frase secreta de recuperação para descriptografá-lo. Terceiro, se as opções anteriores falharem ou forem recusadas, o diálogo pedirá o caminho absoluto do arquivo de chave neste host e o copiará para o caminho canônico. O Monitor oferece o mesmo fluxo de importação na janela de detalhes do backup. Um painel âmbar aparece no topo quando Restaurar, Baixar ou Ver conteúdo exige uma chave ausente. Se a chave instalada não corresponde à usada no backup, o PBS retorna <code>wrong key — manifest's key XX does not match provided key YY</code>. As mesmas três ações exibem então um painel estruturado com a impressão digital exigida pelo manifesto em destaque, permitindo identificar qual chave importar para abrir o backup.",
|
||||
"monitorManagementTitle": "Gerenciando o arquivo de chaves do Monitor",
|
||||
"monitorManagementBody": "O Monitor mostra os controles do arquivo de chave diretamente em cada linha de destino PBS na configuração dos backups. Há três ações: <em>Baixar</em> exporta o arquivo atual para o navegador; <em>Enviar</em> substitui o arquivo instalado pelo fornecido pelo operador, sobrescrevendo o anterior somente após a instalação bem-sucedida do novo no caminho canônico; <em>Excluir</em> remove o arquivo do host. Ao lado fica o controle da cópia de recuperação: uma opção Sim/Não para <em>Enviar a chave para o PBS?</em>, um campo de frase secreta quando Sim é escolhido e um botão contextual para aplicar <em>Iniciar envio</em>, <em>Parar envio</em> ou <em>Atualizar frase secreta</em>. Todas as ações usam os mesmos endpoints Flask da interface de terminal; portanto, o efeito em disco e o estado no PBS são idênticos nas duas interfaces."
|
||||
},
|
||||
"restoreAccess": {
|
||||
"heading": "Obtenção no lado da restauração",
|
||||
"body": "A restauração localiza os backups do host ProxMenux no PBS listando os grupos do repositório configurado e filtrando pelo padrão do ID. A aba Backups do Monitor exibe a mesma lista. Escolher um backup executa <code>proxmox-backup-client restore</code> com os mesmos repositório, senha e impressão digital, além de <code>--keyfile</code> se estiver criptografado. O arquivo <code>.pxar</code> é extraído em um diretório de preparação que <code>_rs_check_layout</code> encaminha ao processo normal de restauração. Fora do ProxMenux, o mesmo comando extrai o arquivo no caminho desejado para inspecionar a árvore ou realizar uma restauração manual."
|
||||
},
|
||||
"references": {
|
||||
"heading": "Referências",
|
||||
"intro": "Documentação oficial do Proxmox Backup Server para os componentes usados pelo ProxMenux.",
|
||||
"items": [
|
||||
{
|
||||
"label": "Documentação Proxmox Backup Server",
|
||||
"href": "https://pbs.proxmox.com/docs/",
|
||||
"tail": " — o ponto de entrada principal que abrange a instalação, administração, armazenagem, utilizadores e funções."
|
||||
},
|
||||
{
|
||||
"label": "proxmox-backup-client",
|
||||
"href": "https://pbs.proxmox.com/docs/backup-client.html",
|
||||
"tail": " — a ferramenta de linha de comando que o ProxMenux usa em cada backup e restauração. Descreve IDs e tipos de backup, arquivos, sintaxe dos repositórios e variáveis de ambiente."
|
||||
},
|
||||
{
|
||||
"label": "Criptografia do lado do cliente",
|
||||
"href": "https://pbs.proxmox.com/docs/backup-client.html#encryption",
|
||||
"tail": " — criação do arquivo de chave, modos --kdf e modelo de criptografia que o ProxMenux amplia com uma cópia de recuperação protegida por frase secreta."
|
||||
},
|
||||
{
|
||||
"label": "Gestão de armazenamento de dados",
|
||||
"href": "https://pbs.proxmox.com/docs/storage.html",
|
||||
"tail": " — criação e gerenciamento dos datastores que recebem backups do host, incluindo a estrutura do armazenamento de blocos e as permissões."
|
||||
},
|
||||
{
|
||||
"label": "Poda e coleta de lixo",
|
||||
"href": "https://pbs.proxmox.com/docs/maintenance.html#pruning",
|
||||
"tail": " — o modelo de retenção de --keep-last / --keep-daily / --keep-weekly aplicado pelo ProxMenux em cada tarefa agendada e como o PBS libera blocos não usados após a remoção de backups antigos."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,230 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Glossário — Cópia de segurança e restauração ProxMenux",
|
||||
"description": "Termos do sistema de backup e restauração ProxMenux: criptografia, arquivo de chaves, frase-senha, envelope de recuperação, PBS, blocos, rootfs, manifesto, executor e hidratação entre versões do kernel.",
|
||||
"ogTitle": "Glossário das cópias de segurança e do restauro | ProxMenux",
|
||||
"ogDescription": "Definições claras dos termos usados na documentação de backup e restauração ProxMenux.",
|
||||
"twitterTitle": "Glossário das cópias de segurança e do restauro | ProxMenux",
|
||||
"twitterDescription": "Senha, arquivo de chaves, envelope de recuperação, rootfs, manifesto, PBS, blocos — todos definidos em um só lugar."
|
||||
},
|
||||
"header": {
|
||||
"title": "Glossário",
|
||||
"description": "Termos usados através da documentação de backup e restauração, com sua definição.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"body": "Os termos são agrupados por tema. Cada entrada dá o termo e uma definição curta."
|
||||
},
|
||||
"groups": [
|
||||
{
|
||||
"title": "Criptografia e recuperação de chaves",
|
||||
"intro": "Vocabulário para o bloco de criptografia PBS. Envolve dois segredos distintos: um arquivo binário e uma frase-passe escrita.",
|
||||
"entries": [
|
||||
{
|
||||
"id": "passphrase-recuperacion",
|
||||
"term": "Senha de recuperação",
|
||||
"def": "Senha de texto que o usuário escolhe para proteger o <a href=\"#sobre-recuperacion\">envelope de recuperação</a>. Ele é solicitado duas vezes com uma verificação de correspondência, e só é usado para criptografar o envelope e para decifrá-lo se o arquivo de chaves alguma vez precisa ser recuperado. <strong>Não é a frase-passe que desbloqueia o próprio arquivo de chaves</strong>, e nunca é enviado para PBS. Durante um backup normal, ele nunca deixa o hospedeiro."
|
||||
},
|
||||
{
|
||||
"id": "clave-cifrado",
|
||||
"term": "Arquivo de chaves (chave de criptografia)",
|
||||
"def": "Arquivo de chave usado por proxmox-backup-client para criptografar os <a href=\"#chunk\">blocos</a> antes do envio ao PBS. Sem a chave correspondente, os dados criptografados não podem ser lidos. O ProxMenux o salva em <code>/usr/local/share/proxmenux/pbs-key.conf</code> com modo <code>600</code>. Proteja-o: o <a href=\"#sobre-recuperacion\">envelope de recuperação</a> permite recuperá-lo se for perdido."
|
||||
},
|
||||
{
|
||||
"id": "contrasena-keyfile",
|
||||
"term": "Frase- senha do ficheiro de chaves (frase- senha do KDF)",
|
||||
"def": "Senha opcional que o próprio arquivo de chaves pode carregar, distinta da frase-passe <a href=\"#passphrase-recuperacion\">de recuperação</a>. Ele só existe quando o arquivo de chaves foi criado com <code>--kdf scrypt</code> (normalmente um arquivo de chaves importadas). Sem ele, o arquivo de chaves não pode ser desbloqueado para uso. ProxMenux persiste em forma criptografada no host para que os backups agendados possam ser executados sem um prompt interativo."
|
||||
},
|
||||
{
|
||||
"id": "sobre-recuperacion",
|
||||
"term": "Envelope de recuperação",
|
||||
"def": "O <a href=\"#clave-cifrado\">ficheiro de chaves</a> protegido por uma camada adicional: é encriptado com a <a href=\"#passphrase-recuperacion\">frase-passe de recuperação</a> através de <a href=\"#aes-256-cbc\">AES-256-CBC</a> e <a href=\"#pbkdf2\">PBKDF2</a> antes de sair do host. É esta versão protegida que é enviada para o PBS no grupo <code>-keyrecovery</code>. Sem a frase-passe, o conteúdo permanece inacessível: descarregá-lo do PBS não revela o ficheiro de chaves."
|
||||
},
|
||||
{
|
||||
"id": "cifrado-cliente",
|
||||
"term": "Criptografia do lado do cliente",
|
||||
"def": "Modelo de criptografia em que os dados são criptografados na máquina de origem antes de serem enviados. O PBS só recebe e armazena texto cifrado; nem mesmo um administrador PBS com acesso a datastore pode lê-lo sem o arquivo de chaves. O ProxMenux baseia-se neste modelo e adiciona o <a href=\"#sobre-recuperacion\">envelope de recuperação</a> no topo."
|
||||
},
|
||||
{
|
||||
"id": "kdf-none",
|
||||
"term": "--kdf none",
|
||||
"def": "Opção para <code>proxmox-backup-client key create</code> que produz um arquivo de chaves sem senha anexada. O arquivo de chaves pode ser usado diretamente sem um prompt, o que é essencial para trabalhos agendados sem acompanhamento. Isto é o que o ProxMenux usa por padrão ao gerar um novo arquivo de chaves."
|
||||
},
|
||||
{
|
||||
"id": "kdf-scrypt",
|
||||
"term": "--kdf scrypt",
|
||||
"def": "Opção para <code>proxmox-backup-client key create</code> que produz um arquivo de chaves protegido por uma <a href=\"#contrasena-keyfile\">frase-senha do arquivo de chave</a>. Cada uso do arquivo de chaves requer desbloqueá-lo com essa frase-passe. O ProxMenux aceita este estilo de arquivo de chaves na importação e armazena a frase-passe criptografada para que os backups agendados ainda possam ser executados sem acompanhamento."
|
||||
},
|
||||
{
|
||||
"id": "aes-256-cbc",
|
||||
"term": "AES-256-CBC",
|
||||
"def": "Cifra simétrica padrão. ProxMenux usa-o (via <code>openssl enc -aes-256-cbc</code>) para embrulhar o <a href=\"#clave-cifrado\">keyfile</a> com a <a href=\"#passphrase-recuperacion\">frase-senha de recuperação</a> e produzir o <a href=\"#sobre-recuperacion\">envelope</a>."
|
||||
},
|
||||
{
|
||||
"id": "pbkdf2",
|
||||
"term": "PBKDF2",
|
||||
"def": "Função criptográfica que transforma uma frase-passe tipo humano em uma chave binária adequada para criptografia. Atrasa as tentativas de força bruta aplicando muitas iterações. ProxMenux usa-o com iterações 600 000 e um sal aleatório ao criptografar o envelope de recuperação."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Estrutura de backup",
|
||||
"intro": "Termos que descrevem o que vive dentro de um backup, independentemente do destino.",
|
||||
"entries": [
|
||||
{
|
||||
"id": "rootfs",
|
||||
"term": "rootfs / sistema de ficheiros root",
|
||||
"def": "Uma cópia plana do sistema de arquivos do host fonte, produzido pela <code>rsync</code> sobre o perfil <a href=\"#perfil-defecto\">default</a> mais qualquer caminho <a href=\"#rutas-personalizadas\">custom</a>. Não é uma imagem de disco inteiro: apenas caminhos que contêm configuração ou estado Proxmox não pode regenerar por conta própria são copiados."
|
||||
},
|
||||
{
|
||||
"id": "manifiesto",
|
||||
"term": "Manifesto (manifest.json)",
|
||||
"def": "Documento estruturado JSON descrevendo o host fonte no momento do backup: hardware, armazenamento, kernel, componentes instalados ProxMenux e inventário de VMs e LXCs. É produzido por seis coletores de dados independentes. O fluxo de restauração usa-o para comparar fonte e alvo."
|
||||
},
|
||||
{
|
||||
"id": "staging",
|
||||
"term": "Diretório de preparação",
|
||||
"def": "Diretório temporário onde ProxMenux monta os três blocos (rootfs, metadados e manifestos) antes de embalá-los e enviar para o destino. É removido automaticamente quando o backup termina, mesmo ao abortar."
|
||||
},
|
||||
{
|
||||
"id": "perfil-defecto",
|
||||
"term": "Perfil padrão",
|
||||
"def": "Conjunto selecionado de caminhos copiados por padrão em cada backup: configuração PVE, rede, SSH, kernel, apt, ferramentas ProxMenux e outros. É definido no código e documentado na página <em>Como funciona</em>."
|
||||
},
|
||||
{
|
||||
"id": "rutas-personalizadas",
|
||||
"term": "Caminhos personalizados",
|
||||
"def": "Caminhos extras que o usuário adiciona no topo do perfil <a href=\"#perfil-defecto\">default</a>. Persistente (armazenada em <code>backup-extra-paths.txt</code>) ou por execução (escolhida em modo Personalizado)."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Destinos e armazenagem",
|
||||
"intro": "Termos ligados ao local onde o backup chega — servidor PBS, arquivo local ou repositório Borg — e como o PBS organiza os dados.",
|
||||
"entries": [
|
||||
{
|
||||
"id": "repositorio-pbs",
|
||||
"term": "Repositório PBS",
|
||||
"def": "Combinação de Proxmox Backup Server + <a href=\"#datastore\">datastore</a> + usuário que recebe o backup. Identificado pela string <code>user@realm@host:datastore</code>. Um único servidor PBS pode hospedar vários repositórios."
|
||||
},
|
||||
{
|
||||
"id": "datastore",
|
||||
"term": "Armazenamento de dados",
|
||||
"def": "Armazenamento específico em um servidor PBS para backups e seus blocos. Cada datastore fica em um sistema de arquivos do servidor PBS e tem permissões e políticas próprias."
|
||||
},
|
||||
{
|
||||
"id": "chunk",
|
||||
"term": "Bloco (chunk) / desduplicação de blocos",
|
||||
"def": "PBS divide cada backup em blocos de tamanho variável, identifica cada pedaço pelo seu hash e armazena cada pedaço apenas uma vez, mesmo que apareça em muitos backups diferentes. Isto significa que os backups sucessivos da mesma máquina — ou através de hosts semelhantes — ocupam muito pouco espaço adicional."
|
||||
},
|
||||
{
|
||||
"id": "fingerprint",
|
||||
"term": "Impressão digital",
|
||||
"def": "Impressões digitais criptográficas do certificado PBS do servidor TLS. Permite ao cliente verificar se está a falar com o servidor pretendido sem depender de uma autoridade pública de certificação. ProxMenux passa para <code>proxmox-backup-client</code> através da variável de ambiente <code>PBS_FINGERPRINT</code>."
|
||||
},
|
||||
{
|
||||
"id": "grupo-copia",
|
||||
"term": "Grupo de backup",
|
||||
"def": "Container lógico dentro do PBS sob o qual se acumulam sucessivos backups do mesmo ativo. Cada novo backup compartilha deduplicação com os anteriores no mesmo grupo. ProxMenux usa dois grupos por host quando a criptografia está habilitada: um para o backup do host e outro com um sufixo <code>-keyrecovery</code> para o <a href=\"#sobre-recuperacion\">envelope de recuperação</a>."
|
||||
},
|
||||
{
|
||||
"id": "backup-id",
|
||||
"term": "ID de backup",
|
||||
"def": "Nome do <a href=\"#grupo-copia\">grupo de backup</a>. ProxMenux padrão para <code>hostcfg-HOSTNAME</code> e permite que o usuário editá-lo antes do upload; caracteres não suportados são despojados automaticamente."
|
||||
},
|
||||
{
|
||||
"id": "pxar",
|
||||
"term": ".pxar",
|
||||
"def": "Formato de arquivo PBS-native para diretórios. Ele se comporta como um arquivo tar otimizado para desduplicação de blocos: ao invés de armazenar um arquivo opaco, PBS quebra seu conteúdo em pedaços reutilizáveis."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Execução e agendamento",
|
||||
"intro": "Termos usados pelo sistema ProxMenux-jobs programados.",
|
||||
"entries": [
|
||||
{
|
||||
"id": "runner",
|
||||
"term": "Executor",
|
||||
"def": "O script <code>run_scheduled_backup.sh</code> que executa um backup agendado. Ele lê a configuração do trabalho, lança o backend correspondente (Local, PBS ou Borg), aplica retenção no sucesso e envia as notificações configuradas."
|
||||
},
|
||||
{
|
||||
"id": "trabajo-programado",
|
||||
"term": "Trabalho agendado",
|
||||
"def": "Configuração persistente de uma cópia de segurança recorrente. Mantém o destino, credenciais, criptografia, programação e retenção. Vive em <code>/var/lib/proxmenux/backup-jobs/<id>.env</code>."
|
||||
},
|
||||
{
|
||||
"id": "modo-adjunto",
|
||||
"term": "Anexar modo",
|
||||
"def": "Tarefa sem temporizador próprio. Um hook job-end PVE de <code>vzdump</code> a executa após os backups dos convidados quando o armazenamento coincide. A tarefa pai fornece o destino e a retenção, relida da tarefa pai em cada execução, mas o hook compara armazenamento, não ID pai. Outra tarefa no mesmo armazenamento também pode acioná-la. Somente Local e PBS."
|
||||
},
|
||||
{
|
||||
"id": "timer-systemd",
|
||||
"term": "Temporizador Systemd",
|
||||
"def": "Mecanismo systemd padrão que dispara um comando em um calendário. ProxMenux cria um temporizador por <em>independente</em> trabalho programado; <a href=\"#modo-adjunto\">attach-mode</a> trabalhos não usam temporizador, eles rodam através do script-hook PVE."
|
||||
},
|
||||
{
|
||||
"id": "retencion",
|
||||
"term": "Retenção (keep-last, keep-daily…)",
|
||||
"def": "Política que decide quais backups mais antigos manter e qual podar. Definido por trabalho com parâmetros como <code>keep-last</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>. Aplicado pelo executor após cada backup bem sucedido."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Restaurar",
|
||||
"intro": "Termos do fluxo de restauração.",
|
||||
"entries": [
|
||||
{
|
||||
"id": "restauracion-universal",
|
||||
"term": "Restauração universal",
|
||||
"def": "O fluxo de restauração ProxMenux não apenas extrai o sistema de arquivos: ele lê o manifesto para detectar diferenças entre fonte e alvo, reproduz a configuração do sistema e executa novamente os instaladores para os componentes gerenciados ProxMenux. O objetivo é reproduzir o host de origem, não apenas o arquivo."
|
||||
},
|
||||
{
|
||||
"id": "hidratacion",
|
||||
"term": "Hidratação entre versões do kernel",
|
||||
"def": "Etapa de restauração que combina as configurações do usuário na origem (parâmetros IOMMU, IDs VFIO, ajustes específicos e chaves GRUB) com a configuração nova de inicialização do destino, sem copiar literalmente arquivos ligados ao kernel de origem. Executa quando o kernel de destino é mais novo que o do backup."
|
||||
},
|
||||
{
|
||||
"id": "cross-kernel",
|
||||
"term": "Restauração do kernel cruzado",
|
||||
"def": "Restaurar onde o kernel do alvo difere (normalmente é mais novo do que) da fonte. Requer o passe <a href=\"#hidratacion\">hydration</a> para evitar arrastar arquivos incompatíveis com o kernel do alvo."
|
||||
},
|
||||
{
|
||||
"id": "instalador-postboot",
|
||||
"term": "Instalador pós-inicial",
|
||||
"def": "Componentes reinstalados após a primeira inicialização do host restaurado ( drivers NVIDIA, drivers Coral TPU, ferramentas AMD GPU, ferramentas Intel GPU). Cada instalador corre contra o kernel do alvo, então o host restaurado não depende do kernel da fonte estar presente."
|
||||
},
|
||||
{
|
||||
"id": "compatibility-check",
|
||||
"term": "Verificação de compatibilidade",
|
||||
"def": "Comparação entre o manifesto da fonte e o estado do alvo que o ProxMenux realiza no início da restauração. Ele decide quais partes são copiadas verbatim, que precisam de hidratação e que são recriadas por um instalador."
|
||||
},
|
||||
{
|
||||
"id": "equipo-recien-instalado",
|
||||
"term": "Instalação fresca",
|
||||
"def": "Host recém-reinstalado do zero, sem <a href=\"#clave-cifrado\">arquivo de chave</a> local. Para restaurar um backup criptografado, primeiro recupere a chave do <a href=\"#sobre-recuperacion\">envelope</a> armazenado no PBS usando a <a href=\"#passphrase-recuperacion\">frase-senha de recuperação</a>."
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"whereNext": {
|
||||
"heading": "Onde se segue",
|
||||
"items": [
|
||||
{
|
||||
"label": "Como funciona",
|
||||
"href": "/docs/backup-restore/how-it-works",
|
||||
"tail": " — quando o rootfs, o manifesto e o inventário da aplicação se encaixam num backup."
|
||||
},
|
||||
{
|
||||
"label": "Destino Proxmox Backup Server",
|
||||
"href": "/docs/backup-restore/destinations/pbs",
|
||||
"tail": " — quando a criptografia do lado do cliente, o arquivo de chaves, a frase-passe de recuperação e o envelope são documentados em profundidade."
|
||||
},
|
||||
{
|
||||
"label": "Restauração",
|
||||
"href": "/docs/backup-restore/restoring",
|
||||
"tail": " — fluxo de restauração e uso do manifesto."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Como o backup ProxMenux funciona internamente — rootfs, manifestos, aplicativos",
|
||||
"description": "Descrição detalhada do que um backup ProxMenux contém: os rootfs produzidos pelo rsync do perfil de caminho padrão, o manifesto estruturado construído por seis coletores independentes e o inventário de aplicativos que impulsiona a reinstalação automática de pacotes e componentes após uma restauração.",
|
||||
"ogTitle": "Como o backup ProxMenux funciona internamente",
|
||||
"ogDescription": "Os três blocos de um backup ProxMenux: rootfs, manifesto e aplicativos.",
|
||||
"twitterTitle": "Como funcionam as cópias de segurança ProxMenux | ProxMenux",
|
||||
"twitterDescription": "As três cargas de um backup ProxMenux e como a restauração reproduz o host fonte deles."
|
||||
},
|
||||
"header": {
|
||||
"title": "Como funciona",
|
||||
"description": "A estrutura interna de um backup ProxMenux — sistema de arquivos, manifesto e inventário de aplicativos — e como a restauração usa os três para reproduzir o host de origem em um destino que pode ter outro kernel.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Um arquivo, três blocos",
|
||||
"body": "Cada backup cria três blocos bem definidos em um único diretório de preparação. O arquivo enviado ao destino (<code>.tar.zst</code> local, backup PBS ou arquivo Borg) mantém essa estrutura. A restauração usa os três: <strong>o manifesto</strong> é consultado antes das alterações para detectar diferenças e decidir o que excluir; <strong>rootfs</strong> fornece os arquivos de configuração, aplicados em execução ou após reiniciar; <strong>o inventário de aplicativos</strong> orienta a instalação de pacotes e a reinstalação de componentes após o boot. Cada bloco pode ser inspecionado ou extraído separadamente."
|
||||
},
|
||||
"layout": {
|
||||
"heading": "Disposição do arquivo",
|
||||
"intro": "Cada arquivo segue o mesmo layout de árvore, independentemente do destino. O subdiretório <code>metadata/</code> contém as cargas estruturadas; o subdiretório <code>rootfs/</code> contém a cópia do sistema de arquivos.",
|
||||
"treeCaption": "O diretório de preparação criado durante o backup. Todos os destinos recebem a mesma árvore no formato nativo: tar para backups locais, blocos PBS para PBS e segmentos Borg para Borg.",
|
||||
"tree": "backup-[timestamp]/\n├── manifest.json # structured host state\n├── metadata/\n│ ├── packages.manual.list # apt-mark showmanual\n│ ├── run_info.env # backup run identity + kernel version + pmxcfs method\n│ ├── paths_archived.txt # exact list of paths that reached rootfs/\n│ └── missing_paths.txt # paths from the profile absent on source\n└── rootfs/\n ├── etc/ # /etc/pve, /etc/network, /etc/systemd/network, /etc/ssh, …\n ├── root/ # /root (with volatile subdirs excluded)\n ├── usr/local/ # /usr/local/bin, /usr/local/share/proxmenux, …\n └── var/ # /var/lib/pve-cluster (config.db via sqlite3 .backup), /var/spool/cron/…"
|
||||
},
|
||||
"rootfs": {
|
||||
"heading": "A carga útil do rootfs",
|
||||
"intro": "A árvore <code>rootfs/</code> é uma <strong>cópia simples do sistema de arquivos</strong> criada pelo <code>rsync</code> a partir do host de origem. Contém um <strong>perfil padrão</strong> de caminhos selecionados para restaurar o Proxmox e os <strong>caminhos personalizados</strong> adicionados à tarefa ou sessão interativa. A seleção é intencionalmente restrita a caminhos que <em>guardam configuração</em> ou <em>guardam um estado que o Proxmox não consegue recriar sozinho</em>.",
|
||||
"defaultProfileTitle": "O perfil por omissão",
|
||||
"defaultProfileBody": "O perfil padrão é definido por <code>hb_default_profile_paths</code> em <code>lib_host_backup_common.sh</code>. Abrange oito categorias fixas e, quando necessário, o estado ZFS, que juntas descrevem um host Proxmox funcional:",
|
||||
"categoriesTitle": "Categorias de localização",
|
||||
"categoryRows": [
|
||||
{
|
||||
"category": "Núcleo PVE",
|
||||
"paths": "/etc/pve, /var/lib/pve-cluster, /etc/vzdump.conf",
|
||||
"why": "Conteúdo do sistema de ficheiros de cluster e valores por omissão do vzdump. O banco de dados pmxcfs (<code>config.db</code>) é capturado como um instantâneo consistente via <code>sqlite3 .backup</code> sem parar o cluster, e os sidecars <code>.db-wal</code> / <code>.db-shm</code> são excluídos do rsync. Quando o <code>sqlite3</code> não está disponível, é criado <code>config.db.raw-fallback</code>, que a restauração usa automaticamente como banco de dados."
|
||||
},
|
||||
{
|
||||
"category": "Identidade do host e rede",
|
||||
"paths": "/etc/hostname, /etc/hosts, /etc/timezone, /etc/resolv.conf, /etc/network, /etc/systemd/network",
|
||||
"why": "Tudo que o host precisa para entrar na rede com a mesma identidade. Os arquivos <code>.link</code> em <code>/etc/systemd/network</code> fixam nomes de NIC em seus MAC, portanto, reinstalações e alterações de hardware não renomeiam interfaces."
|
||||
},
|
||||
{
|
||||
"category": "Acesso e autenticação",
|
||||
"paths": "/etc/ssh, /etc/sudoers, /etc/sudoers.d, /etc/pam.d, /etc/security",
|
||||
"why": "SSH chaves, regras de sudo e configuração PAM. Perder estas trava o usuário fora da máquina restaurada."
|
||||
},
|
||||
{
|
||||
"category": "Kernel e inicialização",
|
||||
"paths": "/etc/default/grub, /etc/kernel, /etc/modules, /etc/modules-load.d, /etc/modprobe.d, /etc/sysctl.conf, /etc/sysctl.d, /etc/udev/rules.d, /etc/fstab, /etc/iscsi, /etc/multipath",
|
||||
"why": "Tokens IOMMU, lista negra do módulo, IDs do dispositivo VFIO, tabela de montagem, configuração da pilha de armazenamento."
|
||||
},
|
||||
{
|
||||
"category": "Shell e definições regionais",
|
||||
"paths": "/etc/environment, /etc/bash.bashrc, /etc/inputrc, /etc/profile, /etc/profile.d, /etc/locale.gen, /etc/locale.conf",
|
||||
"why": "Configuração do shell, variáveis de ambiente, configuração de geração local."
|
||||
},
|
||||
{
|
||||
"category": "Gerenciamento de pacotes e cron",
|
||||
"paths": "/etc/apt, /etc/cron.d, /etc/cron.{daily,hourly,weekly,monthly}, /etc/cron.allow, /etc/cron.deny, /var/spool/cron/crontabs",
|
||||
"why": "Fontes APT para resolução consistente de pacotes, tarefas agendadas definidas pelo usuário."
|
||||
},
|
||||
{
|
||||
"category": "Estado e ferramentas do ProxMenux",
|
||||
"paths": "/etc/proxmenux, /etc/systemd/system, /etc/log2ram.conf, /etc/logrotate.conf, /etc/logrotate.d, /etc/lm-sensors, /etc/sensors3.conf, /etc/fail2ban, /etc/snmp, /etc/postfix, /etc/wireguard, /etc/openvpn, /etc/grafana, /etc/influxdb, /etc/prometheus, /etc/telegraf, /etc/zabbix",
|
||||
"why": "Ferramentas opcionais, mas comuns Proxmox. Caminhos ausentes são observados em <code>metadata/missing_paths.txt</code> sem parar o backup."
|
||||
},
|
||||
{
|
||||
"category": "Binários & root do ProxMenux",
|
||||
"paths": "/usr/local/bin, /usr/local/sbin, /usr/local/share/proxmenux, /var/lib/proxmenux, /root (subdires voláteis excluídos)",
|
||||
"why": "Binários instalados em ProxMenux e configuração por usuário sob <code>/root</code>. Os caminhos voláteis (<code>.bash_history</code>, <code>.cache/</code>, <code>tmp/</code>, <code>.local/share/Trash/</code>) são excluídos da cópia. O <code>/var/lib/proxmenux</code> mantém as tarefas de backup programadas e o estado de host mantido pelo ProxMenux; o estadiamento da restauração, as cópias de rollback e os marcadores pós-restore são excluídos, porque pertencem ao host que executa uma restauração."
|
||||
},
|
||||
{
|
||||
"category": "Estado ZFS (condicional)",
|
||||
"paths": "/etc/zfs",
|
||||
"why": "Apenas incluído quando o host de origem roda ZFS. Contém <code>zpool.cache</code> e <code>hostid</code>."
|
||||
}
|
||||
],
|
||||
"customTitle": "Estendendo o perfil com caminhos personalizados",
|
||||
"customBody": "Além do perfil padrão, o ProxMenux oferece duas maneiras de incluir caminhos adicionais em um backup. Eles compõem sem conflito e ambos se aplicam a backups interativos e trabalhos agendados.",
|
||||
"customExtrasTitle": "1. Extras persistentes (por máquina)",
|
||||
"customExtrasBody": "Um arquivo de texto no <code>/usr/local/share/proxmenux/backup-extra-paths.txt</code> contém uma lista de caminhos absolutos que o usuário marcou como \"incluir sempre\" nesta máquina. Quando um backup é executado no modo <strong>Default</strong>, o ProxMenux adiciona esses caminhos ao perfil padrão automaticamente sem perguntar. O arquivo é editado a partir da interface — nenhuma edição manual necessária — e persiste através de reiniciais e atualizações. Um caminho absoluto por linha; <code>#</code> comentários são permitidos.",
|
||||
"customModeTitle": "2. Modo personalizado (por execução)",
|
||||
"customModeBody": "O lançamento de um backup no modo <strong>Custom</strong> substitui a aplicação automática do perfil padrão por uma lista de verificação mostrando todos os caminhos: as entradas de perfil padrão e os extras persistentes (prefixados com <code>[+]</code> e pré-selecionados). O usuário seleciona ou desmarca entradas para essa execução específica, e também pode pressionar <em>Adicionar caminho personalizado</em> para inserir um novo caminho — que é então persistido para o arquivo extras para backups futuros.",
|
||||
"customMissingTitle": "Caminhos ausentes da fonte",
|
||||
"customMissingBody": "Qualquer caminho do perfil (padrão ou adicionado) que não exista no host fonte é gravado em <code>metadata/missing_paths.txt</code> dentro do arquivo. O backup não falha nem para — o usuário vê um resumo de caminhos arquivados e caminhos faltando no final. Na prática, isso acontece para caminhos de ferramentas opcionais como <code>/etc/wireguard</code> ou <code>/etc/prometheus</code> quando essas ferramentas não estão instaladas."
|
||||
},
|
||||
"manifest": {
|
||||
"heading": "O bloco do manifesto",
|
||||
"intro": "<code>manifest.json</code> é um documento JSON estruturado que descreve o host de origem no momento do backup. É produzido por <strong>seis coletores independentes</strong> orquestrados por <code>build_manifest.sh</code>. Cada coletor é somente leitura, produz um fragmento JSON bem definido, e cai de volta para um padrão vazio seguro se falhar — o manifesto ainda é utilizável se uma seção estiver incompleta.",
|
||||
"orchestratorCaption": "Os seis coletores compõem o manifesto. Cada colecionador corre em seu próprio subprocesso; uma falha em um cai de volta para um padrão seguro documentado e avisa, mas não aborta o backup.",
|
||||
"collectorRows": [
|
||||
{
|
||||
"collector": "collect_source_host.sh",
|
||||
"produces": "source_host",
|
||||
"content": "Hostname, versão PVE (<code>pveversion</code>), versão PBS se o host executar o papel do servidor de backup, kernel (<code>uname -r</code>), modo de inicialização (efi/bios), tipo de sistema de arquivos raiz, modelo CPU + arquitetura, memória em KB."
|
||||
},
|
||||
{
|
||||
"collector": "collect_hardware.sh",
|
||||
"produces": "hardware_inventory",
|
||||
"content": "GPUs (com o mapeamento do instalador do fornecedor e ProxMenux), TPUs (Coral USB + M.2 com detecção de <code>lsusb</code>/<code>lspci</code>), NICs (com a associação MAC, slot PCI e ponte), dispositivos sem fio. As entradas GPU têm uma heurística <code>passthrough_eligible</code>."
|
||||
},
|
||||
{
|
||||
"collector": "collect_storage.sh",
|
||||
"produces": "storage_inventory",
|
||||
"content": "ZFS pools (com pool disco do tipo + membro resolvido para <code>/dev/disk/by-id/*</code>, <code>/dev/disk/by-partuuid/*</code> ou em bruto <code>/dev/sdX</code> caminhos dependendo de como cada pool foi originalmente criado), LVM grupos de volume + finos pools, discos físicos com SMART capacidade, PVE <code>storage.cfg</code> entradas, montagens externas."
|
||||
},
|
||||
{
|
||||
"collector": "collect_kernel.sh",
|
||||
"produces": "kernel_params",
|
||||
"content": "Parâmetros adicionados pelo operador em <code>/proc/cmdline</code>, sem os itens padrão como <code>BOOT_IMAGE=</code>, <code>root=</code>, <code>ro/rw</code>, <code>quiet</code> e <code>splash</code>; módulos carregados na inicialização de <code>/etc/modules</code>; caminhos dos arquivos <code>/etc/modprobe.d/*.conf</code> com diretivas efetivas (<code>options</code>, <code>blacklist</code>, <code>install</code>, <code>alias</code>, <code>softdep</code>)."
|
||||
},
|
||||
{
|
||||
"collector": "collect_proxmenux_state.sh",
|
||||
"produces": "proxmenux_installed_components",
|
||||
"content": "Lê <code>/usr/local/share/proxmenux/managed_installs.json</code> (registo de tudo que ProxMenux instalou) e <code>installed_tools.json</code>. Cada entrada mantém o caminho do instalador (<code>menu_script</code>) para que a restauração possa desencadear o mesmo fluxo de instalação."
|
||||
},
|
||||
{
|
||||
"collector": "collect_guests.sh",
|
||||
"produces": "vms_lxcs_at_backup",
|
||||
"content": "Enumera VMs (<code>qm list</code>) e LXCs (<code>pct list</code>) presentes na hora de backup — VMID, nome, estado atual. Apenas o inventário: os dados reais dos hóspedes são da responsabilidade do <code>vzdump</code> / PBS."
|
||||
}
|
||||
],
|
||||
"schemaTitle": "Validação do esquema",
|
||||
"schemaBody": "O manifesto valida contra <code>scripts/backup_restore/schema/manifest.schema.json</code>. Executar o <code>build_manifest.sh --validate</code> desencadeia uma validação do esquema JSON do lado Python (exige o <code>python3</code> + <code>jsonschema</code>). Se o módulo não estiver presente, a verificação é ignorada silenciosamente — a validação é principalmente um auxílio ao desenvolvedor, não uma dependência de execução."
|
||||
},
|
||||
"applications": {
|
||||
"heading": "O inventário de aplicativos",
|
||||
"intro": "Dois inventários catalogam o software acrescentado aos pacotes básicos do Proxmox VE: a lista de pacotes em <code>metadata/</code> e o registro de componentes em rootfs, detalhados abaixo. A restauração usa APT ou os instaladores do ProxMenux para reproduzir o software do usuário conforme o método original de instalação.",
|
||||
"packagesTitle": "packages.manual.list",
|
||||
"packagesBody": "Uma lista alfabética em texto simples produzida por <code>apt-mark showmanual</code> com os pacotes APT <em>instalados explicitamente</em> no host de origem. As dependências do sistema Proxmox VE básico são excluídas; o APT do destino as instala automaticamente. Durante a restauração, <code>_rs_run_complete_extras</code> lê a lista e aplica um <em>filtro contra remoções em cascata</em> em três etapas: <code>dpkg -s</code> identifica pacotes já instalados, outras versões principais de bibliotecas são detectadas e <code>apt-get install --simulate</code> verifica o risco de remoções em cascata. Os pacotes restantes são instalados com <code>apt-get install -y</code>.",
|
||||
"componentsTitle": "components_status.json (parte dos rootfs)",
|
||||
"componentsBody": "Um registro JSON sob <code>/usr/local/share/proxmenux/</code> que registra cada componente ProxMenux instalou com seu estado exato: versão, bandeiras ProxMenux específicas (para NVIDIA: <code>patched</code> booleano; para Coral: versão DKMS). Este arquivo vive dentro dos rootfs — não em <code>metadata/</code> — porque é <em>lido depois</em> que rootfs foi copiado para o alvo. O expedidor pós-boot (<code>apply_cluster_postboot.sh</code>) itera sobre suas entradas e executa o gancho <code>--auto-reinstall</code> de cada componente, que lê o estado gravado e reproduz a instalação contra o kernel atual do alvo.",
|
||||
"componentInstallersTitle": "Instaladores de componentes",
|
||||
"componentInstallersBody": "Quatro instaladores ProxMenux atualmente expõem um ponto de entrada <code>--auto-reinstall</code>:",
|
||||
"installerRows": [
|
||||
{
|
||||
"component": "nvidia_driver",
|
||||
"installer": "gpu_tpu/nvidia_installer.sh",
|
||||
"action": "Lê-se <code>version</code> + <code>patched</code>. Transfere exatamente o mesmo arquivo de execução NVIDIA, constrói módulos DKMS contra o kernel do alvo, reaplica o patch ProxMenux se a fonte o tiver."
|
||||
},
|
||||
{
|
||||
"component": "coral_driver",
|
||||
"installer": "gpu_tpu/install_coral.sh",
|
||||
"action": "Lê a versão do driver Coral. Compila o módulo DKMS contra o kernel do alvo."
|
||||
},
|
||||
{
|
||||
"component": "amdgpu_top",
|
||||
"installer": "gpu_tpu/amd_gpu_tools.sh",
|
||||
"action": "Lê a versão gravada. Baixa novamente o <code>.deb</code> exato da versão GitHub."
|
||||
},
|
||||
{
|
||||
"component": "intel_gpu_tools",
|
||||
"installer": "gpu_tpu/intel_gpu_tools.sh",
|
||||
"action": "O APT instala o pacote. Idempotente se já presente de <code>packages.manual.list</code>."
|
||||
}
|
||||
]
|
||||
},
|
||||
"restoreFlow": {
|
||||
"heading": "Como a restauração consome as três cargas",
|
||||
"intro": "A restauração é um processo de seis etapas. Cada etapa lê um subconjunto específico do arquivo e atualiza o host alvo. Nenhuma etapa requer que o host de origem seja acessível — o arquivo é totalmente auto-suficiente.",
|
||||
"stagesCaption": "Estágio 1 usa o manifesto para decidir o que tocar. Estágio 2 copia rootfs caminhos que são seguros para aplicar em um sistema em execução. O estágio 3 encena os caminhos arriscados para a próxima inicialização. Fase 3b importa conjuntos de dados ZFS não-root cujos discos estão todos presentes. Estágio 4 lida com pacotes. O estágio 5 é executado após a reinicialização e reinstala componentes contra o kernel do alvo.",
|
||||
"stageRows": [
|
||||
{
|
||||
"stage": "1",
|
||||
"name": "Verificação de compatibilidade",
|
||||
"reads": "manifest.json",
|
||||
"action": "Corre <code>hb_compat_check</code>. Compara hardware fonte vs. alvo (NICs, IDs de armazenamento), versão PVE e versão principal do kernel. Define <code>HB_COMPAT_KERNEL_DIRECTION</code> (<code>same</code>, <code>bk_newer</code> ou <code>bk_older</code>) e povoa <code>RS_SKIP_PATHS</code> com exclusões de hardware-drift e cross-kernel."
|
||||
},
|
||||
{
|
||||
"stage": "2",
|
||||
"name": "Aplicação em execução",
|
||||
"reads": "rootfs/ (somente caminhos seguros)",
|
||||
"action": "<code>_rs_apply … hot</code> copia entradas <code>hb_classify_path</code>=<code>hot</code> diretamente para o alvo ao vivo. Qualquer coisa sob <code>/etc/pve</code>, <code>/etc/network</code> ou caminhos classificados como <em>reboot</em>/<em>dangerous</em> é adiada."
|
||||
},
|
||||
{
|
||||
"stage": "3",
|
||||
"name": "Preparações pendentes",
|
||||
"reads": "rootfs/ (reboot + caminhos perigosos)",
|
||||
"action": "<code>_rs_prepare_pending_restore</code> prepara os caminhos de risco em <code>/var/lib/proxmenux/pending-restore/</code>, grava <code>plan.env</code>, <code>apply-on-boot.list</code> e <code>rs-skip-paths.txt</code> e ativa <code>proxmenux-restore-onboot.service</code> para a próxima inicialização."
|
||||
},
|
||||
{
|
||||
"stage": "3b",
|
||||
"name": "Importação de pools de dados",
|
||||
"reads": "manifest.storage_inventory + estado ZFS do destino",
|
||||
"action": "<code>_rs_import_data_pools</code> tenta importar cada pool ZFS que não contém a raiz e tem todos os discos presentes no destino. Com hostid de outro host, tenta novamente com <code>zpool import -f</code>. Se faltar um disco, o pool é ignorado com aviso. O resultado por pool é registrado em <code>/var/log/proxmenux/restore-datapools-<timestamp>.log</code>."
|
||||
},
|
||||
{
|
||||
"stage": "4",
|
||||
"name": "Instalar pacote",
|
||||
"reads": "metadata/packages.manual.list",
|
||||
"action": "<code>_rs_run_complete_extras</code> executa o filtro de segurança em cascata e chama <code>apt-get install -y</code> com a lista de pacotes sobreviventes. Saída completa vai para <code>/var/log/proxmenux/restore-apt-*.log</code>."
|
||||
},
|
||||
{
|
||||
"stage": "5",
|
||||
"name": "Após o arranque",
|
||||
"reads": "rootfs (já aplicado) + components_status.json",
|
||||
"action": "Após reiniciar, <code>apply_pending_restore.sh</code> reproduz os caminhos diferidos e <code>apply_cluster_postboot.sh</code> executa <code>update-initramfs</code>, <code>update-grub</code> (ou <code>proxmox-boot-tool refresh</code>) e itera sobre <code>components_status.json</code> disparando o gancho <code>--auto-reinstall</code> de cada componente."
|
||||
}
|
||||
]
|
||||
},
|
||||
"whyItWorks": {
|
||||
"heading": "Por que dividir o backup em três blocos",
|
||||
"body": "A divisão segue o <strong>ciclo de vida</strong> dos dados. O sistema de arquivos é transferido com <code>rsync</code>: rápido, transparente e atômico por arquivo. O estado de configuração a interpretar antes das alterações é <strong>JSON estruturado</strong>, legível separadamente, versionável por esquema e comparável automaticamente com o estado do destino. O software a reinstalar é descrito em um <strong>inventário</strong> de nomes e versões; o gerenciador de pacotes e os instaladores do ProxMenux escolhem os binários adequados. Cada bloco atende ao próprio objetivo. Juntos, buscam uma restauração coerente com tolerância a falhas: um manifesto corrompido deixa rootfs recuperável, um pacote ausente não impede instalar componentes e uma falha em uma entrada não interrompe a seguinte."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux Backup e restauração — Visão geral | Backup e restauração completos do host para Proxmox VE",
|
||||
"description": "ProxMenux Backup & Restore captura o estado completo de um host Proxmox – sistema de arquivos, manifesto de configuração estruturado e pacotes/componentes instalados – e o reproduz no mesmo host ou em um host diferente. O backup e a restauração são independentes: não há dependências externas e as restaurações entre kernels são suportadas por meio de um filtro de subconjunto seguro com reconhecimento de direção e hidratação independente do kernel.",
|
||||
"ogTitle": "ProxMenux Backup e restauração — Visão geral",
|
||||
"ogDescription": "Backup e restauração completos do host para Proxmox VE com manifesto estruturado, lista de pacotes e reinstaladores de componentes.",
|
||||
"twitterTitle": "ProxMenux Backup e restauração | ProxMenux",
|
||||
"twitterDescription": "Backup e restauração completos do host para Proxmox VE com manifesto estruturado, lista de pacotes e reinstaladores de componentes."
|
||||
},
|
||||
"header": {
|
||||
"title": "Backup e restauração",
|
||||
"description": "Backup e restauração de host completo para Proxmox VE. Captura o sistema de arquivos, a configuração e os componentes instalados em um único arquivo e reproduz o host na mesma instalação do Proxmox ou em uma instalação diferente, sem dependências externas.",
|
||||
"section": "Backup e restauração"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que é, em um parágrafo",
|
||||
"body": "Uma cópia do ProxMenux guarda o estado completo de um host Proxmox: <strong>o sistema de ficheiros</strong>, com os diretórios relevantes em <code>/etc</code>, <code>/root</code> e <code>/var/lib/pve-cluster</code> e os caminhos personalizados opcionais; <strong>um manifesto estruturado</strong> em JSON com o hardware detetado, parâmetros do kernel, configuração de rede, estado do ZFS, utilizadores e entradas cron; e <strong>um inventário de aplicações</strong>, com os pacotes que o APT marca como instalados manualmente e os componentes instalados pelo ProxMenux, incluindo as versões exatas. Os três destinos suportados — arquivo local, Proxmox Backup Server (recomendado) e Borg — recebem o mesmo conteúdo autónomo. Qualquer um permite reconstruir o host de destino sem que o host de origem tenha de estar acessível durante o restauro."
|
||||
},
|
||||
"video": {
|
||||
"heading": "Vídeo passo a passo",
|
||||
"intro": "Prefere assistir o Backup e Restauração em ação antes de configurá-lo? Este passo a passo abrange uma demonstração completa do recurso em ProxMenux.",
|
||||
"title": "ProxMenux — Passo a passo sobre backup e restauração",
|
||||
"caption": "Vídeo externo em YouTube. Reproduz no modo de privacidade aprimorada (sem cookies até você apertar play)."
|
||||
},
|
||||
"whatItIsNot": {
|
||||
"heading": "O que não é",
|
||||
"intro": "Esta secção abrange a cópia de segurança e o restauro <strong>do host</strong>: a instalação do Proxmox, não as aplicações e os sistemas convidados que nela são executados.",
|
||||
"items": [
|
||||
"<strong>Não é uma ferramenta de backup de VM/CT.</strong> Esta funcionalidade não guarda os discos nem o estado da RAM dos sistemas convidados; essa é a função do <code>vzdump</code>. Os <strong>ficheiros de configuração</strong> dos convidados (<code>/etc/pve/nodes/<node>/qemu-server/*.conf</code> e <code>lxc/*.conf</code>) <strong>são</strong> guardados. Após o restauro, o inventário reaparece e os discos podem ser restaurados ou associados a partir de um backup existente no PBS ou em armazenamento local.",
|
||||
"<strong>Não é uma operação sobre todo o cluster.</strong> Cada nó cria a sua própria cópia. A pertença ao cluster é guardada em <code>/etc/pve</code> para permitir reintegrar um nó restaurado, mas recuperar todo o cluster exige coordenar o restauro dos vários nós.",
|
||||
"<strong>Não é uma imagem completa do disco.</strong> Os binários do kernel, o initramfs e a partição de arranque não são guardados. Durante o restauro, o ProxMenux utiliza os ficheiros de arranque do host de destino, regenerados automaticamente por <code>update-initramfs</code> e pela ferramenta do gestor de arranque, e instala os controladores adequados ao kernel em execução no destino."
|
||||
]
|
||||
},
|
||||
"threePillars": {
|
||||
"heading": "Os três pilares de um backup",
|
||||
"intro": "Um arquivo ProxMenux é estruturado em torno de três cargas independentes. A restauração usa as três em conjunto para reproduzir o host de origem em um destino que pode nem ter o mesmo kernel instalado.",
|
||||
"diagramCaption": "Cada backup envia as mesmas três cargas, independentemente do destino. A restauração consome todos os três: rootfs para estabelecer arquivos, manifesto para detectar desvios e diferenças entre kernels e inventário de aplicativos para reinstalar pacotes e componentes no próprio kernel do destino.",
|
||||
"pillar1Label": "Sistema de ficheiros",
|
||||
"pillar1Detail": "rootfs/\n(rsync de /etc,\n/etc/systemd/network,\n/root, mais um\ninstantâneo sqlite3\nde /var/lib/pve-cluster,\n+ caminhos opcionais)",
|
||||
"pillar2Label": "Manifesto",
|
||||
"pillar2Detail": "manifest.json\n(hardware, parâmetros\ndo kernel, rede,\nZFS, usuários, cron,\npools ZFS, armazenamento)",
|
||||
"pillar3Label": "Aplicativos",
|
||||
"pillar3Detail": "packages.manual.list\n+ components_status.json\n(pacotes APT manuais + instaladores\nProxMenux com versões)"
|
||||
},
|
||||
"restoreIsUniversal": {
|
||||
"heading": "A restauração reproduz o host de origem, não o arquivo",
|
||||
"body": "A restauração de um backup ProxMenux não extrai apenas o sistema de arquivos. O fluxo de restauração lê o manifesto para detectar desvios entre a origem e o destino (diferenças de hardware, renomeações de NIC, versão do kernel, identidade do pool ZFS), reproduz o sistema de arquivos e aciona o instalador de componente correto para cada serviço que foi instalado na origem (driver NVIDIA, Coral TPU, ferramentas de GPU AMD, ferramentas Intel GPU). Cada instalador é executado no <strong>kernel atual do destino</strong>, portanto, o host restaurado não depende da presença do kernel da origem. Quando o kernel do destino é mais recente que o do backup, um passo de <strong>hidratação</strong> independente do kernel mescla o próprio ajuste do usuário (tokens IOMMU, IDs de dispositivos VFIO, peculiaridades personalizadas, chaves GRUB) na nova configuração de inicialização do destino sem copiar arquivos vinculados ao kernel literalmente."
|
||||
},
|
||||
"twoInterfaces": {
|
||||
"heading": "Duas interfaces, um back-end",
|
||||
"intro": "Cada etapa do fluxo de trabalho de backup e restauração está disponível em dois pontos de entrada. Ambos chamam a mesma biblioteca shell, produzem arquivos idênticos e leem o mesmo registro de tarefas.",
|
||||
"cliLabel": "ProxMenux Scripts (TUI)",
|
||||
"cliDetail": "menu → Utilitários →\nBackup/restauração de host\n\nFluxo baseado em diálogo,\nSSH amigável, programável\npara uso não supervisionado.",
|
||||
"webLabel": "ProxMenux Monitor (Web UI)",
|
||||
"webDetail": "Aba Backups na\ninterface web do Monitor.\n\nRestauração com um clique,\nacompanhamento dos logs ao vivo,\nintegração com notificações e o\nvisualizador de diferenças da reversão."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Para onde ir a partir daqui",
|
||||
"intro": "Cada subseção abaixo aborda detalhadamente um aspecto do fluxo de trabalho. Comece com <em>Como funciona</em> se o objetivo é entender o que o arquivo contém e por quê. Vá para <em>Destinos</em> para configurar o destino da cópia. Leia <em>Restauração</em> e <em>Restauração entre kernels</em> para o lado da recuperação.",
|
||||
"items": [
|
||||
{
|
||||
"label": "Como funciona",
|
||||
"href": "/docs/backup-restore/how-it-works",
|
||||
"tail": "— os três payloads (rootfs, manifesto, aplicações) em detalhes, com os coletores que os produzem e o formato de cada arquivo."
|
||||
},
|
||||
{
|
||||
"label": "Destinos",
|
||||
"href": "/docs/backup-restore/destinations",
|
||||
"tail": "— comparação entre local, Proxmox Backup Server (recomendado) e Borg, e como configurar cada um."
|
||||
},
|
||||
{
|
||||
"label": "Criando backups",
|
||||
"href": "/docs/backup-restore/creating-backups",
|
||||
"tail": "— backups únicos, perfil de caminho padrão, adição de caminhos personalizados, criptografia para PBS."
|
||||
},
|
||||
{
|
||||
"label": "Trabalhos agendados",
|
||||
"href": "/docs/backup-restore/scheduled-jobs",
|
||||
"tail": "— novos trabalhos versus anexação a um trabalho PVE vzdump existente, formatos de agendamento, modal de detalhes do trabalho."
|
||||
},
|
||||
{
|
||||
"label": "Restauração",
|
||||
"href": "/docs/backup-restore/restoring",
|
||||
"tail": "— as três ações em um arquivo (visualizar, baixar, restaurar), restauração completa versus restauração personalizada, o despachante pós-inicialização e por que os últimos dez minutos são importantes."
|
||||
},
|
||||
{
|
||||
"label": "Restauração entre kernels",
|
||||
"href": "/docs/backup-restore/cross-kernel",
|
||||
"tail": " — comportamento que considera a direção da mudança de versão quando o kernel do destino difere do kernel do backup, filtro de subconjunto seguro e quatro fases de hidratação."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Trabalhos agendados — temporizadores, modo de anexação, retenção ProxMenux",
|
||||
"description": "Trabalhos de backup programados do host ProxMenux. Dois modos de criação (horário systemd próprio ou anexar a um trabalho existente PVE vzdump), valores de retenção aplicados por trabalho via proxmox-backup-client/borg/local prune, layout de armazenamento sob /var/lib/proxmenux/backup-jobs, e o script de execução que produz arquivos idênticos ao fluxo interativo.",
|
||||
"ogTitle": "Cópia de segurança ProxMenux — tarefas agendadas",
|
||||
"ogDescription": "Backups de host agendados não vigiados com modo de anexação, retenção e os mesmos três destinos do fluxo interativo.",
|
||||
"twitterTitle": "Trabalhos agendados | ProxMenux",
|
||||
"twitterDescription": "Trabalhos de backup agendados sem acompanhamento com modo de anexação e retenção."
|
||||
},
|
||||
"header": {
|
||||
"title": "Trabalhos agendados",
|
||||
"description": "Trabalhos de backup da máquina não vigiados. Dois modelos de criação: um novo trabalho independente com sua própria programação, ou um trabalho anexado a uma tarefa existente PVE vzdump que herda o cronograma e retenção dessa tarefa. Ambos produzem arquivos idênticos ao fluxo interativo.",
|
||||
"section": "Cópias de segurança e restauro"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Os dois modelos de trabalho programados",
|
||||
"body": "Um trabalho programado pode ser criado seguindo um dos dois modelos:",
|
||||
"modelsList": [
|
||||
"<strong>Novo trabalho independente</strong> — ProxMenux define o horário de trabalho com seu próprio temporizador systemd, independente de qualquer outra tarefa no host. Compatível com os três destinos: Local, PBS e Borg.",
|
||||
"<strong>Anexar a uma tarefa existente PVE vzdump</strong> — o trabalho não tem agendamento próprio; ele é executado automaticamente sempre que a tarefa pai PVE vzdump que já faz backup das VMs e LXCs nesta máquina dispara. Herda a programação e a retenção da tarefa dos pais. Compatível com Local e PBS (Borg não é suportado porque PVE não tem agendador nativo para Borg)."
|
||||
]
|
||||
},
|
||||
"attachBadge": {
|
||||
"title": "Modo de anexação — recomendado quando já existe uma tarefa PVE vzdump",
|
||||
"body": "Se já existe uma tarefa vzdump PVE para as VMs e LXCs do nó, anexar o backup do host faz com que ele seja executado depois do backup dos convidados, no <strong>mesmo ciclo de backup</strong>. Na restauração, as configurações dos convidados vêm do backup do host (em <code>/etc/pve</code>) e os discos vêm dos backups vzdump desse ciclo. Isso ajuda a coordenar a recuperação do nó inteiro, mas não é um snapshot atômico: alterações durante o ciclo podem deixar diferenças entre a configuração do host e o estado dos discos dos convidados."
|
||||
},
|
||||
"frequencyBadge": {
|
||||
"title": "Frequência recomendada",
|
||||
"body": "Para maximizar a compatibilidade entre um backup do host e sua restauração futura, faça backups frequentes. Quanto mais próxima a cópia estiver do estado atual do host, menos diferenças de configuração, pacotes e componentes a restauração precisará conciliar."
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Os dois modos",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "Novo trabalho agendado",
|
||||
"backends": "Local, PBS, Borg",
|
||||
"schedule": "Expressão <code>OnCalendar</code> própria (sintaxe de calendário systemd, por exemplo <code>daily</code> ou <code>Mon..Fri 03:00</code>).",
|
||||
"retention": "Solicitado separadamente: <code>keep-last</code>, <code>keep-hourly</code>, <code>keep-daily</code>, <code>keep-weekly</code>, <code>keep-monthly</code>, <code>keep-yearly</code>. Aplicado pelo script de execução após cada backup bem sucedido."
|
||||
},
|
||||
{
|
||||
"mode": "Anexar a uma tarefa PVE vzdump",
|
||||
"backends": "Local, PBS (Borg não tem agendador do lado PVE)",
|
||||
"schedule": "Herdado da tarefa PVE principal. Nenhum temporizador systemd é instalado no lado do ProxMenux.",
|
||||
"retention": "Herdada da configuração <code>prune-backups</code> da tarefa principal (mapeada um a um para as variáveis <code>KEEP_*</code> do script de execução via <code>hb_pve_prune_to_keep_env</code>)."
|
||||
}
|
||||
]
|
||||
},
|
||||
"attachDetail": {
|
||||
"heading": "Como funciona o modo de anexação",
|
||||
"intro": "O PVE grava as tarefas <code>vzdump</code> em <code>/etc/pve/jobs.cfg</code>, com uma seção por tarefa indicando o armazenamento dos backups de VM e LXC. O modo de anexação exige um backend suportado pelo ProxMenux (Local ou PBS). O backup do host é executado pelo hook job-end após o fim da tarefa de backup dos convidados.",
|
||||
"steps": [
|
||||
{
|
||||
"step": "1",
|
||||
"detail": "Durante a criação do trabalho, ProxMenux lista tarefas PVE pai compatíveis via <code>hb_pve_list_vzdump_jobs_for_backend</code>. O utilizador escolhe uma."
|
||||
},
|
||||
{
|
||||
"step": "2",
|
||||
"detail": "O <code>.env</code> do trabalho é escrito com <code>PVE_PARENT_JOB</code>, <code>PVE_STORAGE</code> e os valores herdados <code>KEEP_*</code>; nenhum temporizador systemd é criado."
|
||||
},
|
||||
{
|
||||
"step": "3",
|
||||
"detail": "<code>hb_install_vzdump_hook</code> registra um hook em <code>/etc/vzdump.conf</code>. Na fase job-end de qualquer tarefa vzdump, compara o <code>$STOREID</code> recebido com o <code>PVE_STORAGE</code> de cada trabalho anexado e habilitado, chamando o script de execução para as correspondências. A associação é feita pelo armazenamento, não pelo ID da tarefa principal selecionada."
|
||||
},
|
||||
{
|
||||
"step": "4",
|
||||
"detail": "O arquivo é salvo no mesmo armazenamento dos backups vzdump: <code>path/dump/</code> para Local ou o repositório PBS configurado na entrada de armazenamento PVE."
|
||||
}
|
||||
],
|
||||
"outroBody": "O modo de anexação não tem temporizador próprio. Desabilitar ou excluir a tarefa PVE principal selecionada interrompe esse disparo, mas outra tarefa vzdump usando o mesmo armazenamento ainda pode acionar o backup do host. Desabilite ou exclua o próprio trabalho ProxMenux para impedir isso. Ao ser desabilitada, a entrada permanece no disco e pode ser reativada ou anexada novamente."
|
||||
},
|
||||
"storageLayout": {
|
||||
"heading": "Arquivos que compõem um trabalho",
|
||||
"intro": "Cada trabalho agendado é totalmente descrito por três ou quatro arquivos no disco. Lendo-os dá a configuração completa do trabalho sem depender da interface.",
|
||||
"rows": [
|
||||
{
|
||||
"path": "/var/lib/proxmenux/backup-jobs/JOB_ID.env",
|
||||
"content": "Infraestrutura, ID de backup ou destino, agenda (novo modo) ou pai PVE (modo de Attach), sinalizador habilitado, valores de retenção <code>KEEP_*</code>, ponteiros de credenciais."
|
||||
},
|
||||
{
|
||||
"path": "/var/lib/proxmenux/backup-jobs/JOB_ID.paths",
|
||||
"content": "Um caminho absoluto por linha — a seleção congelada resolvido a partir do perfil no tempo de criação de emprego. A edição do ficheiro volta a executar o trabalho com a nova selecção no próximo temporizador."
|
||||
},
|
||||
{
|
||||
"path": "/etc/systemd/system/proxmenux-backup-JOB_ID.timer + .service",
|
||||
"content": "Apenas modo novo. O serviço invoca o <code>run_scheduled_backup.sh JOB_ID</code>. O timer agenda-o com <code>Persistent=true</code> (execuções perdidas recuperadas na próxima inicialização) e um pequeno <code>RandomizedDelaySec=120</code> para espalhar carga quando vários trabalhos compartilham a mesma expressão OnCalendar."
|
||||
},
|
||||
{
|
||||
"path": "/etc/vzdump.conf script-hook",
|
||||
"content": "Somente modo de anexação. Instalado uma vez por <code>hb_install_vzdump_hook</code>; compara <code>PVE_STORAGE</code> de cada trabalho anexado com <code>$STOREID</code>, passado pelo PVE ao hook."
|
||||
}
|
||||
]
|
||||
},
|
||||
"runner": {
|
||||
"heading": "O que um trabalho faz quando dispara",
|
||||
"intro": "Cada trabalho — novo ou anexado — executa a mesma sequência de três passos:",
|
||||
"steps": [
|
||||
"<strong>Prepare o backup.</strong> Lê a configuração do trabalho (destino, perfil, caminhos) e monta a árvore de arquivos exatamente da mesma forma que o fluxo interativo faz. O resultado é o mesmo arquivo que um backup manual com essas configurações produziria.",
|
||||
"<strong>Escreva o destino.</strong> Envia ou escreve o arquivo para o destino configurado — um arquivo <code>.tar.zst</code> local, um backup PBS, ou um arquivo Borg — usando exatamente as mesmas ferramentas e credenciais que um backup manual para o mesmo destino usaria.",
|
||||
"<strong>Aplicar retenção.</strong> Remove backups antigos do destino, mantendo as contagens <code>keep-last</code> / <code>keep-daily</code> / <code>keep-weekly</code> configuradas no trabalho. A poda é realizada pelo próprio destino: PBS aplica sua própria retenção, Borg executa <code>borg prune</code>, e para ProxMenux Local apaga os arquivos que caem fora da janela <code>keep-last</code>."
|
||||
]
|
||||
},
|
||||
"management": {
|
||||
"heading": "Gestão de tarefas",
|
||||
"intro": "O menu de agendamento (Scripts TUI) e a aba Monitor Backups expõem as mesmas ações em qualquer trabalho.",
|
||||
"rows": [
|
||||
{
|
||||
"action": "Executar agora",
|
||||
"detail": "Chama imediatamente o script de execução, sem esperar o temporizador ou o hook vzdump. Útil para verificar a configuração sem aguardar a próxima execução agendada."
|
||||
},
|
||||
{
|
||||
"action": "Activar / Desactivar",
|
||||
"detail": "Novo modo: <code>systemctl enable/disable --now</code> o temporizador. Modo Anexar: altera o sinalizador <code>ENABLED</code> no env de trabalho — o script gancho honra-o na próxima execução PVE."
|
||||
},
|
||||
{
|
||||
"action": "Editar",
|
||||
"detail": "Abre novamente o destino, agenda, perfil e avisos de retenção e reescreve os arquivos de trabalho. Preserva a identificação do trabalho."
|
||||
},
|
||||
{
|
||||
"action": "Excluir",
|
||||
"detail": "Remove o env do trabalho, o arquivo de caminhos, o temporizador e o serviço systemd (modo novo) e desativa a associação ao hook (modo de anexação). Não altera os arquivos já existentes no destino."
|
||||
},
|
||||
{
|
||||
"action": "Ver registo",
|
||||
"detail": "Mostra em tempo real <code>/var/log/proxmenux/backup-jobs/JOB_ID-YYYYMMDD_HHMMSS.log</code> — um arquivo de log por execução. O executor também emite uma linha de status compacta para journald no serviço systemd."
|
||||
}
|
||||
]
|
||||
},
|
||||
"notifications": {
|
||||
"heading": "Notificações",
|
||||
"body": "Cada execução programada dispara os mesmos eventos <code>hb_notify_lifecycle</code> que o fluxo interativo (<code>start</code>, <code>complete</code>, <code>fail</code>). Se os canais de notificação estiverem configurados no Monitor, os trabalhos não vigiados mostram seus resultados da mesma forma que backups manuais – um usuário não precisa verificar o log para saber se um trabalho foi bem sucedido."
|
||||
},
|
||||
"whereNext": {
|
||||
"heading": "Para onde ir a seguir",
|
||||
"items": [
|
||||
{
|
||||
"label": "Criando backups",
|
||||
"href": "/docs/backup-restore/creating-backups",
|
||||
"tail": " — o fluxo interactivo que partilha a infra-estrutura com o agendador."
|
||||
},
|
||||
{
|
||||
"label": "Destinos",
|
||||
"href": "/docs/backup-restore/destinations",
|
||||
"tail": " — a configuração por infra-estrutura utilizada tanto pelo fluxo interactivo como pelo agendador."
|
||||
},
|
||||
{
|
||||
"label": "Restauração",
|
||||
"href": "/docs/backup-restore/restoring",
|
||||
"tail": " — o fluxo que utiliza os backups produzidos pelos trabalhos."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Adicionar controlador ou NVMe a uma VM | Documentação ProxMenux",
|
||||
"description": "Atribua um controlador de armazenamento SATA/SAS HBA ou dispositivo NVMe a uma VM Proxmox por passthrough PCI com o ProxMenux. A ferramenta trata da ativação do IOMMU, deteta conflitos e configura a atribuição com qm set --hostpci.",
|
||||
"ogTitle": "Adicionar controlador ou NVMe a uma VM | Documentação ProxMenux",
|
||||
"ogDescription": "Atribua um HBA SATA/SAS completo ou um dispositivo NVMe a uma VM Proxmox. O ProxMenux trata do IOMMU, da deteção de conflitos e da atribuição hostpci."
|
||||
},
|
||||
"header": {
|
||||
"title": "Adicionar controlador ou NVMe a uma VM",
|
||||
"description": "Atribua um adaptador de barramento SATA/SAS completo (HBA) ou dispositivo NVMe a uma VM Proxmox por passthrough PCI. O ProxMenux verifica o IOMMU e ativa-o com o seu consentimento, lista os dispositivos elegíveis, exclui conflitos e configura a atribuição com qm set --hostpci.",
|
||||
"section": "Gerenciador de disco · VM"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz (e não faz)",
|
||||
"body": "Trata-se de <strong>passthrough ao nível do dispositivo</strong>: a placa PCIe deixa de estar sob controlo do kernel do host e é associada a <code>vfio-pci</code>. A VM vê o próprio controlador, em vez de discos atribuídos individualmente, e carrega o controlador de software para esse modelo. Todos os discos ligados seguem automaticamente, com dados SMART nativos, todas as funções do firmware e sem uma camada Proxmox intermédia."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases com separação clara entre \"coletar informações, verificar IOMMU e listar candidatos\" e \"realmente anexar o dispositivo PCI\". Até a confirmação final nada é escrito para a configuração VM."
|
||||
},
|
||||
"iommu": {
|
||||
"heading": "Grupos IOMMU: por que é necessário considerar a placa inteira",
|
||||
"body": "O limite de isolamento do passthrough PCI é o <strong>grupo IOMMU</strong>, a menor unidade que o IOMMU da CPU consegue isolar. Os dispositivos do mesmo grupo não podem ser isolados entre si. Se um controlador SATA partilhar o grupo com um controlador USB, o passthrough SATA pode exigir libertar também o USB do host ou ser impossível. Não atribui automaticamente à VM todos os dispositivos do grupo.",
|
||||
"outro": "O ProxMenux mostra o grupo IOMMU ao lado de cada dispositivo e avisa quando um grupo carrega mais do que o controlador que deseja. Você ainda pode prosseguir se os dispositivos extras do grupo são aceitáveis (todos os controladores de disco, por exemplo), ou voltar se eles não forem."
|
||||
},
|
||||
"prereqs": {
|
||||
"heading": "Pré-requisitos",
|
||||
"items": [
|
||||
"<strong>A CPU e a placa-mãe suportam</strong> VT-d (Intel) ou AMD-Vi, e a função está ativa no firmware (BIOS/UEFI). O ProxMenux pode ativar a parte do kernel, mas não alterar a definição do firmware.",
|
||||
"A VM de destino está <strong>desligada</strong> antes de ligar dispositivos PCI.",
|
||||
"O controlador/NVMe <strong> não é aquele que detém o sistema de arquivos raiz Proxmox</strong>. O script esconde qualquer coisa em uso pela máquina.",
|
||||
"O sistema operativo convidado tem os controladores de software para o modelo do controlador. O Linux suporta praticamente todos os HBA de origem; o Windows precisa do controlador do fabricante instalado <em>antes</em> de arrancar com o dispositivo atribuído."
|
||||
],
|
||||
"warnTitle": "A migração ao vivo não é possível",
|
||||
"warnBody": "Um VM com passagem PCI está ligado ao nó que detém fisicamente o cartão. A migração ao vivo nos nós irá falhar. Planeje backups/replicação em conformidade."
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolher a VM de destino",
|
||||
"bodyRich": "ProxMenux lê <code>qm list</code> e mostra cada VM. Escolha o que receberá o controlador.",
|
||||
"img": "/disk/nvme-passthrough/vm-selection.png",
|
||||
"alt": "Diálogo de seleção do VM",
|
||||
"caption": "Diálogo de seleção do VM"
|
||||
},
|
||||
{
|
||||
"title": "Verificação IOMMU",
|
||||
"bodyRich": "Se o IOMMU não estiver habilitado na linha cmdline do kernel, o ProxMenux oferece para habilitá-lo. Ele edita <code>/etc/kernel/cmdline</code> (para systemd-boot) ou <code>/etc/default/grub</code> (para GRUB) e adiciona o parâmetro correto para o seu CPU:",
|
||||
"items": [
|
||||
"<code>intel_iommu=on</code> para CPUs Intel.",
|
||||
"<code>amd_iommu=on</code> para CPUs AMD."
|
||||
],
|
||||
"outro": "Uma reinicialização é necessária após esta alteração. O script pede que você reinicie agora ou mais tarde; a passagem não pode continuar até que o novo kernel cmdline esteja ativo.",
|
||||
"img": "/disk/nvme-passthrough/iommu-warning.png",
|
||||
"alt": "Diálogo IOMMU necessário",
|
||||
"caption": "IOMMU Necessário — oferta para ativar e reiniciar"
|
||||
},
|
||||
{
|
||||
"title": "Enumeração do dispositivo",
|
||||
"body": "ProxMenux lista cada controlador de armazenamento (SATA / SAS HBA) e cada dispositivo NVMe no barramento PCI. Para cada dispositivo, mostra:",
|
||||
"items": [
|
||||
"Endereço PCI (<code>00:17.0</code>, <code>01:00.0</code>, ...).",
|
||||
"Descrição do fornecedor / dispositivo.",
|
||||
"Grupo IOMMU, com um aviso ⚠ se for partilhado com outros dispositivos não relacionados.",
|
||||
"Os discos atualmente por trás do controlador (então você sabe o que irá segui-lo para o VM)."
|
||||
],
|
||||
"img": "/disk/nvme-passthrough/device-list.png",
|
||||
"alt": "Controlador / enumeração do dispositivo NVMe",
|
||||
"caption": "Controlador / NVMe enumeração do dispositivo com informações do grupo IOMMU"
|
||||
},
|
||||
{
|
||||
"title": "Detecção de conflitos",
|
||||
"bodyRich": "O script bloqueia dispositivos claramente inseguros: já atribuídos a outra VM através de <code>hostpci</code> na respetiva configuração, utilizados pelo host como o controlador do disco raiz, ou num grupo IOMMU cujos outros membros não consegue identificar com segurança. Os dispositivos elegíveis ficam disponíveis para seleção.",
|
||||
"img": "/disk/nvme-passthrough/conflict-warning.png",
|
||||
"alt": "Aviso de detecção de conflitos",
|
||||
"caption": "Detecção de conflitos — dispositivo bloqueado com razão"
|
||||
},
|
||||
{
|
||||
"title": "Anexar e finalizar",
|
||||
"bodyRich": "Para cada dispositivo selecionado ProxMenux roda <code>qm set <VMID> --hostpciN <pci-addr>,pcie=1</code>, escolhendo o próximo slot livre <code>hostpci</code>. Se IOMMU foi habilitado durante esta sessão você é lembrado para reiniciar antes de iniciar o VM.",
|
||||
"img": "/disk/nvme-passthrough/assignment.png",
|
||||
"alt": "Resumo da atribuição",
|
||||
"caption": "Resumo da atribuição — slots hostpciN e endereços PCI anexados"
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noGroupsTitle": "IOMMU activado, mas sem grupos sob /sys/kernel/iommu_groups/",
|
||||
"noGroupsBody": "É necessário reiniciar para que a linha cmdline do kernel faça efeito. Se os grupos ainda estiverem faltando após o reinício, o VT-d / AMD-Vi provavelmente estará desativado no firmware — verifique a configuração BIOS/UEFI.",
|
||||
"busyTitle": "A VM não inicia: \"hostpciN: device busy\"",
|
||||
"busyBody": "Outro processo mantém o dispositivo PCI ocupado. As causas mais comuns são uma VM que falhou sem o libertar ou o kernel do host que o recuperou no último arranque. Execute <code>lspci -nnk -s <addr></code> para ver o controlador de software associado; deve ser <code>vfio-pci</code>. Um reinício completo do host costuma resolver o problema.",
|
||||
"noDisksTitle": "Convidado vê o controlador, mas não os discos",
|
||||
"noDisksBody": "Falta no sistema convidado o controlador de software para esse modelo. No Linux é raro, mas acontece no Windows: instale o controlador do fabricante, por exemplo LSI/Broadcom para HBA SAS antigos, com a placa não atribuída, e reinicie depois de a atribuir.",
|
||||
"sharedTitle": "O grupo IOMMU inclui um dispositivo não relacionado",
|
||||
"sharedBody": "Opções: (a) mover a placa para outra ranhura PCIe para alterar o grupo, (b) ativar <em>ACS override</em> no kernel para dividir grupos (compromisso de segurança: informe-se antes de aplicar), ou (c) escolher outra placa num grupo mais isolado."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-vm",
|
||||
"label": "Importar disco para VM",
|
||||
"tail": " — modelo alternativo: anexar um disco físico via Proxmox sem passagem PCIe completa."
|
||||
},
|
||||
{
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"label": "Adicionar GPU a uma VM (passthrough)",
|
||||
"tail": " — os mesmos conceitos IOMMU / VFIO aplicados a um GPU."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"label": "Comandos de passagem GPU",
|
||||
"tail": " — Os comandos de verificação IOMMU também se aplicam à passagem do controlador / NVMe."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Formatar ou apagar um disco físico | Documentação ProxMenux",
|
||||
"description": "Apague e formate discos físicos no Proxmox VE com o ProxMenux. Quatro modos, filtros rigorosos que bloqueiam discos de sistema, montados ou em uso e confirmação dupla com introdução do caminho completo.",
|
||||
"ogTitle": "Formatar ou apagar um disco físico | Documentação ProxMenux",
|
||||
"ogDescription": "Limpar ou formatar com segurança um disco físico no Proxmox. Regras de visibilidade seguras, modos de operação 4, dupla confirmação."
|
||||
},
|
||||
"header": {
|
||||
"title": "Formatar ou apagar um disco físico",
|
||||
"description": "Limpar ou formatar com segurança um disco físico no host Proxmox. ProxMenux só mostra discos totalmente livres (sem uso do sistema, sem referência de convidado, sem montagens) e força uma confirmação dupla — sim/não mais digitando o caminho do disco completo — antes de destruir quaisquer dados.",
|
||||
"section": "Gerenciador de disco · Utilitários"
|
||||
},
|
||||
"danger": {
|
||||
"title": "Ferramenta destrutiva",
|
||||
"body": "Cada operação aqui escreve para o disco. Não há nada a desfazer. ProxMenux aplica rigorosos filtros de segurança e confirmações, mas a responsabilidade pela escolha do disco certo é sua. Leia o caminho do disco em voz alta duas vezes antes de digitá-lo."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases com um filtro de segurança de porta tripla no meio. A lista de discos, o modo de operação e os detalhes do sistema de arquivos são todos coletados na Fase 1; nada é escrito até que a Fase 2 passe uma revalidação final logo antes de executar."
|
||||
},
|
||||
"visibility": {
|
||||
"heading": "Regras de visibilidade",
|
||||
"intro": "Antes mesmo do menu aparecer, o ProxMenux filtra a lista de discos. Apenas os candidatos que são comprovadamente seguros são mostrados:",
|
||||
"items": [
|
||||
"<strong>Mostrados</strong>: discos <em>não</em> utilizados pelo host (pool raiz, swap, montagens, ZFS/LVM/RAID ativos) e <em>não</em> referenciados em configurações de VM/LXC, em execução ou paradas.",
|
||||
"<strong>Ocultos</strong>: discos do host e do sistema.",
|
||||
"<strong>Ocultos</strong>: discos referenciados numa configuração VM/LXC."
|
||||
],
|
||||
"safetyTitle": "Segurança na confirmação e execução",
|
||||
"safetyItems": [
|
||||
"Os discos com metadados antigos ou ativos mostram avisos detalhados <em>antes</em> da confirmação.",
|
||||
"Os discos utilizados por uma VM <strong>em execução</strong> são <strong>bloqueados sem exceção</strong> na confirmação.",
|
||||
"Os discos com partições montadas são <strong>bloqueados sem exceção</strong> na execução. Uma nova verificação é realizada imediatamente antes de qualquer escrita.",
|
||||
"São sempre necessárias duas confirmações: um diálogo <em>sim/não</em> e a introdução exata do caminho completo do disco."
|
||||
]
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Modos de operação",
|
||||
"intro": "Depois de escolher um disco você escolhe um dos quatro modos. Divergem no que destroem e no que deixam para trás.",
|
||||
"headerMode": "Modo",
|
||||
"headerPart": "Tabela de partições",
|
||||
"headerData": "Dados",
|
||||
"headerUseCase": "Caso de uso",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "1. Limpar tudo",
|
||||
"part": "Destruído",
|
||||
"data": "Assinaturas apagadas",
|
||||
"useCase": "Remove a tabela de partições e os metadados de sistemas de ficheiros e RAID, preenche com zeros os primeiros e os últimos 16 MiB e, nas unidades que suportam discard, aplica TRIM a todo o disco. O resto dos dados não é sobrescrito e ainda pode ser recuperável num HDD; não é um apagamento seguro."
|
||||
},
|
||||
{
|
||||
"mode": "2. Remover rótulos FS",
|
||||
"part": "Preservado",
|
||||
"data": "Preservado",
|
||||
"useCase": "Remove assinaturas antigas de ZFS / LVM / RAID para evitar a utilização automática do disco. Os dados do utilizador não são sobrescritos em bloco, mas a remoção das assinaturas pode torná-los inacessíveis."
|
||||
},
|
||||
{
|
||||
"mode": "3. Sobrescrever os dados com zeros",
|
||||
"part": "Preservado",
|
||||
"data": "Destruídos (sobrescritos com zeros)",
|
||||
"useCase": "Sobrescreve com zeros as partições existentes, mantendo a tabela de partições. Não abrange espaço não atribuído nem áreas de reserva dos SSD; não garante a sanitização completa do dispositivo."
|
||||
},
|
||||
{
|
||||
"mode": "4. Formato completo",
|
||||
"part": "Novo GPT",
|
||||
"data": "Destruído",
|
||||
"useCase": "Disco pronto a usar com uma nova partição e um novo sistema de ficheiros."
|
||||
}
|
||||
],
|
||||
"fullFormatOutro": "<strong>Formato completo</strong> continua com duas janelas extras:",
|
||||
"fullFormatItems": [
|
||||
"<strong>Filesystem</strong> — <code>ext4</code>, <code>xfs</code>, <code>exfat</code> (portátil), ou <code>btrfs</code>. As ferramentas em falta (por exemplo, <code>mkfs.btrfs</code>) abortam com uma mensagem clara.",
|
||||
"<strong>Etiqueta</strong>: nome opcional do sistema de ficheiros para identificação."
|
||||
]
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolha um disco livre",
|
||||
"body": "O ProxMenux lista os discos que passam nos filtros acima. Os discos marcados com ⚠ contêm metadados antigos, apresentados em detalhe para saber o que vai sobrescrever."
|
||||
},
|
||||
{
|
||||
"title": "Escolha um modo de operação",
|
||||
"bodyRich": "Escolha <strong>Limpar tudo</strong>, <strong>Remover rótulos FS</strong>, <strong>Sobrescrever os dados com zeros</strong> ou <strong>Formato completo</strong> de acordo com a tabela acima."
|
||||
},
|
||||
{
|
||||
"title": "(Apenas formato completo) Escolha o sistema de arquivos e a etiqueta",
|
||||
"body": "ext4 / xfs / exfat / btrfs, além de uma etiqueta opcional."
|
||||
},
|
||||
{
|
||||
"title": "Confirmar duas vezes",
|
||||
"bodyRich": "O ProxMenux mostra um resumo da operação. Aceite no diálogo sim/não e <strong>introduza o caminho completo do disco</strong> exatamente como indicado, por exemplo <code>/dev/sdc</code>. Qualquer outra entrada cancela a operação."
|
||||
},
|
||||
{
|
||||
"title": "Revalidação e execução",
|
||||
"body": "Pouco antes de escrever, o script verifica novamente o estado do disco. Se uma partição tiver sido montada ou uma VM tiver sido iniciada, a execução será interrompida. Caso contrário, a operação escolhida é executada e um resumo é impresso no final."
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalentes manuais",
|
||||
"body": "Se preferir executar os comandos equivalentes à mão:"
|
||||
},
|
||||
"troubleshoot": {
|
||||
"notListedTitle": "Disco não listado no menu",
|
||||
"notListedBody": "Foi filtrado por segurança. Razões comuns: é montado (mesmo em <code>/mnt/tmp</code>), é um ZFS / LVM / RAID membro, é referenciado por um VM ou LXC config, ou é seu disco raiz Proxmox. Execute <code>lsblk -f</code> e <code>cat /proc/mdstat</code> no host para entender o porquê.",
|
||||
"busyTitle": "\"Disk may be busy\" / falha ao desmontar",
|
||||
"busyBody": "Algo ainda está segurando um arquivo aberto em uma partição desse disco — na maioria das vezes um recipiente ou uma shell cujo cwd está dentro de um ponto de montagem. Identifique-o com <code>lsof | grep /dev/sdX</code> ou <code>fuser -vm /dev/sdX1</code>, pare-o e, em seguida, execute novamente a ferramenta."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/smart-disk-test",
|
||||
"label": "Integridade e teste do disco SMART",
|
||||
"tail": " — verificar um disco antes / após limpar para confirmar que é saudável."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-vm",
|
||||
"label": "Importar disco para VM",
|
||||
"tail": " — passar um disco recém-formatado para um VM."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-disk",
|
||||
"label": "Adicionar o disco local como armazenamento Proxmox",
|
||||
"tail": " — registar um disco apagado como conjunto de armazenamento Proxmox."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"tail": " — referência de lsblk, blkid e parted."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Importar imagem de disco para uma VM | Documentação ProxMenux",
|
||||
"description": "Importar um arquivo de imagem de disco (.img / .qcow2 / .vmdk / .raw) para um Proxmox VM existente usando ProxMenux. Interface por imagem, emulação SSD e bandeira inicializável, com qm importdisk sob o capô.",
|
||||
"ogTitle": "Importar imagem de disco para uma VM | Documentação ProxMenux",
|
||||
"ogDescription": "Importar imagens de disco .img / .qcow2 / .vmdk / .raw para um VM existente com ProxMenux. Usa o 'qm importdisk' sob o capô."
|
||||
},
|
||||
"header": {
|
||||
"title": "Importar imagem de disco para VM",
|
||||
"description": "Importar um arquivo de imagem de disco (.img, .qcow2, .vmdk ou .raw) para um Proxmox VM existente. ProxMenux coleta cada decisão inicial — destino VM, armazenamento Proxmox, diretório fonte, interface, emulação SSD, ordem de inicialização — e então executa qm importdisk para cada imagem selecionada.",
|
||||
"section": "Gerenciador de disco · VM"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Ao contrário de <em>Importar disco para VM</em>, que atribui um disco físico diretamente, este processo utiliza um <strong>ficheiro</strong> no host, exportado de outro hipervisor, transferido como imagem cloud ou extraído de uma cópia de segurança. Converte-o num disco de VM Proxmox no armazenamento escolhido. O original é preservado: o ProxMenux copia-o, não o move."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases. A fase 1 recolhe todas as decisões (VM, armazenamento, directório de origem, imagens, opções de imagem) à frente através de diálogos. Fase 2 executa <code>qm importdisk</code> para cada imagem selecionada. Até o início da Fase 2, nada é copiado e a configuração VM não é tocada."
|
||||
},
|
||||
"prereqs": {
|
||||
"heading": "Pré-requisitos",
|
||||
"items": [
|
||||
"Pelo menos uma VM definida no host. A VM de destino deve estar <strong>desligada</strong>.",
|
||||
"Pelo menos um arquivo de imagem de um formato suportado no diretório fonte. Suportado: <code>.img</code>, <code>.qcow2</code>, <code>.vmdk</code>, <code>.raw</code>.",
|
||||
"Espaço livre suficiente no armazenamento Proxmox alvo para segurar cada disco importado.",
|
||||
"ProxMenux procura imagens em <code>/var/lib/vz/template/iso</code> por padrão. Você pode apontá-lo para qualquer outro diretório no host quando ele perguntar."
|
||||
]
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolher a VM de destino",
|
||||
"bodyRich": "ProxMenux lê <code>qm list</code> e mostra cada VM. Escolha o que receberá o(s) disco(s) importado(s)."
|
||||
},
|
||||
{
|
||||
"title": "Escolha o armazenamento do Proxmox",
|
||||
"bodyRich": "A lista contém cada armazenamento que tem o tipo de conteúdo <code>images</code> habilitado. Se houver apenas um candidato, ele é selecionado automaticamente e a janela é ignorada."
|
||||
},
|
||||
{
|
||||
"title": "Escolha o diretório de origem",
|
||||
"bodyRich": "Escolha o diretório padrão (<code>/var/lib/vz/template/iso</code>) ou digite um caminho personalizado — normalmente onde você baixou / enviou a imagem. O script rejeita caminhos que não existem."
|
||||
},
|
||||
{
|
||||
"title": "Escolha uma ou várias imagens",
|
||||
"bodyRich": "O diretório é escaneado para arquivos <code>.img</code> / <code>.qcow2</code> / <code>.vmdk</code> / <code>.raw</code>. Você pode selecionar vários de uma vez; cada um irá passar pelas opções por imagem no próximo passo."
|
||||
},
|
||||
{
|
||||
"title": "Opções por imagem",
|
||||
"intro": "Para cada imagem selecionada, o ProxMenux pergunta:",
|
||||
"items": [
|
||||
"<strong>Interface</strong> — <code>scsi</code> (padrão), <code>virtio</code>, <code>sata</code> ou <code>ide</code>. Corresponde à forma como o hóspede vai ver o disco.",
|
||||
"<strong>Emulação SSD</strong>: apenas para interfaces que não sejam VirtIO. Adiciona <code>ssd=1</code> para o sistema convidado reconhecer um disco de estado sólido. O suporte de discard/TRIM tem de ser configurado separadamente.",
|
||||
"<strong>De arranque</strong>: se responder sim, o ProxMenux adiciona o disco à ordem de arranque como dispositivo principal da VM."
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Importar e anexar",
|
||||
"bodyRich": "O ProxMenux executa o <code>qm importdisk</code> para cada imagem (formato de conversão na hora, onde necessário), liga o disco resultante ao próximo slot livre (<code>scsiN</code>, <code>sataN</code>, ...) com as opções escolhidas e — se você marcou qualquer disco como inicializável — atualiza a ordem de inicialização. O progresso mostra-se no terminal."
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "A importação de uma única imagem corresponde a três comandos <code>qm</code>:",
|
||||
"warnTitle": "Conversão do formato da imagem",
|
||||
"warnBody": "Quando o armazenamento de destino não pode conter o formato de origem nativamente (por exemplo, o armazenamento LVM não pode conter <code>.qcow2</code>), <code>qm importdisk</code> converte a imagem de forma transparente. Isso pode levar vários minutos para imagens multi-GB; planejar de acordo com isso e não interromper o script."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noImagesTitle": "\"Nenhuma imagem de disco compatível encontrada\"",
|
||||
"noImagesBody": "O script não encontrou ficheiros <code>.img</code>, <code>.qcow2</code>, <code>.vmdk</code> ou <code>.raw</code>. Verifique a extensão, distinguindo maiúsculas e minúsculas, se o ficheiro está diretamente no diretório escolhido (os subdiretórios não são pesquisados) e se root o pode ler.",
|
||||
"slowTitle": "A importação é lenta",
|
||||
"slowBody": "As conversões entre VMDK, QCOW2 e raw podem ser limitadas pela CPU e E/S. A velocidade depende das leituras na origem, das escritas no destino e da eventual descompressão. Prefira fontes raw ou qcow2 quando possível.",
|
||||
"uefiTitle": "O disco importado arranca na shell UEFI",
|
||||
"uefiBody": "A imagem foi construída para legado (SeaBIOS), mas o VM usa OVMF (ou vice-versa). Alternar o VM do BIOS no Proxmox para corresponder à imagem, ou reconstruir a imagem no modo correto antes de importar."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-vm",
|
||||
"label": "Importar disco para VM",
|
||||
"tail": " — mesmo fluxo, mas para discos físicos brutos (passagem)."
|
||||
},
|
||||
{
|
||||
"href": "/docs/utils/import-vm",
|
||||
"label": "Importar VM de OVA / OVF",
|
||||
"tail": " — quando você tem um pacote completo VM, não apenas uma imagem de disco."
|
||||
},
|
||||
{
|
||||
"href": "/docs/utils/UUp-Dump-ISO-Creator",
|
||||
"label": "Criador de ISO do UUP Dump",
|
||||
"tail": " — gerar uma ISO do Windows se necessitar de uma nova instalação."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"tail": " — referência de qm importdisk e qemu-img convert."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Importar o Disco para LXC | ProxMenux Documentação",
|
||||
"description": "Anexar um disco físico a um recipiente LXC existente em Proxmox VE usando ProxMenux. Lida com detecção / formatação do sistema de arquivos, ponto de montagem, sem privilégios → conversões privilegiadas e caminhos persistentes do dispositivo.",
|
||||
"ogTitle": "Importar o Disco para LXC | ProxMenux Documentação",
|
||||
"ogDescription": "Anexar um disco físico a um recipiente LXC existente. Lida com sistema de arquivos, ponto de montagem e sem privilégios → conversão privilegiada."
|
||||
},
|
||||
"header": {
|
||||
"title": "Importar disco para LXC",
|
||||
"description": "Ligue um disco físico a um contentor LXC existente no host Proxmox. O ProxMenux deteta discos livres, permite formatá-los com um sistema de ficheiros suportado e liga a partição a um ponto de montagem dentro do contentor através de caminhos persistentes do dispositivo.",
|
||||
"section": "Gerenciador de disco · LXC"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Passthrough em VM e em LXC",
|
||||
"body": "Este passthrough LXC <strong>não fornece um dispositivo de bloco bruto</strong>. O contentor recebe um <em>ponto de montagem</em>, ou seja, um diretório numa partição escolhida no host. Ao contrário de uma VM, utiliza o kernel do host: o sistema de ficheiros (ext4/xfs/btrfs) é lido e gerido pelo host Proxmox e depois disponibilizado ao contentor."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases com separação clara entre \"coletar informações e decisões\" e \"na verdade mudar a configuração do recipiente\". Até à confirmação final, nada é montado no CT.",
|
||||
"summary": "O ProxMenux exclui o disco raiz, os discos montados e os referenciados em configurações VM/LXC. Os membros ativos de ZFS/LVM/RAID são ocultos; as assinaturas antigas aparecem com ⚠ para poderem ser apagadas antes da formatação."
|
||||
},
|
||||
"prereqs": {
|
||||
"heading": "Pré-requisitos",
|
||||
"items": [
|
||||
"Pelo menos um recipiente LXC definido no hospedeiro.",
|
||||
"O contentor é <strong>privilegiado</strong> ou aceita a conversão proposta pelo script.",
|
||||
"Pelo menos um disco físico que não está em uso pelo host ou por qualquer outro convidado."
|
||||
],
|
||||
"warnTitle": "Recipiente privilegiado necessário",
|
||||
"warnBody": "Este script exige um contentor <strong>privilegiado</strong> para ligar diretamente o disco. Se detetar <code>unprivileged: 1</code>, oferece editar <code>/etc/pve/lxc/<CTID>.conf</code> no local. Isso altera o modelo de segurança sem remapear os proprietários dos ficheiros existentes. Faça uma cópia de segurança e verifique os proprietários antes de aceitar, ou recrie o contentor como privilegiado."
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolher o contentor de destino",
|
||||
"img": "/disk/select-container.png",
|
||||
"caption": "Menu de seleção do contentor",
|
||||
"bodyRich": "ProxMenux lista cada recipiente LXC no host (<code>pct list</code>). Escolha o que vai receber o disco. Se o recipiente não tiver privilégios, é-lhe oferecido converter agora."
|
||||
},
|
||||
{
|
||||
"title": "Escolha o disco físico",
|
||||
"img": "/disk/disk-selection-ct.png",
|
||||
"caption": "Discos livres detetados no host, com ⚠ para metadados antigos",
|
||||
"bodyRich": "Só são mostrados candidatos seguros. Ao contrário do processo para VM, este script liga <strong>um disco por execução</strong>. Execute-o novamente para cada disco adicional."
|
||||
},
|
||||
{
|
||||
"title": "Formatar ou reutilizar",
|
||||
"intro": "O script inspeciona o disco:",
|
||||
"items": [
|
||||
"Se ele já carrega um sistema de arquivos suportado (ext4 / xfs / btrfs) você pode reutilizá-lo como está (os arquivos existentes são preservados).",
|
||||
"Se não tiver nenhum sistema de arquivos suportado, você é oferecido para formatá-lo. Escolha ext4 / xfs / btrfs."
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Escolha o ponto de montagem",
|
||||
"bodyRich": "Introduza o caminho onde o contentor verá o disco, por exemplo <code>/mnt/data</code> ou <code>/mnt/disk_passthrough</code>. É o caminho <em>dentro</em> do contentor; o host já vê a partição em <code>/dev/disk/by-id/…</code>."
|
||||
},
|
||||
{
|
||||
"title": "Anexar e verificar",
|
||||
"img": "/disk/assignment-ct.png",
|
||||
"caption": "Atribuição a CT",
|
||||
"bodyRich": "O ProxMenux adiciona uma entrada <code>mpN:</code> nova à configuração do recipiente, ignorando índices já em uso e re-leia a configuração para confirmar. Se o recipiente estiver rodando, a montagem será executada ao vivo; caso contrário, fará efeito no próximo início.",
|
||||
"extraImg": "/disk/result-point.png",
|
||||
"extraAlt": "Ponto de montagem criado com sucesso",
|
||||
"extraCaption": "Ponto de montagem criado e verificado"
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "O script envolve <code>pct set</code>. Uma invocação direta para um único disco parece:"
|
||||
},
|
||||
"important": {
|
||||
"heading": "Considerações importantes",
|
||||
"items": [
|
||||
"<strong>Um disco por execução</strong>. Repita o script para cada disco adicional.",
|
||||
"<strong>Não</strong> ligue a mesma partição a vários contentores que a possam montar simultaneamente: escritas concorrentes corrompem o sistema de ficheiros.",
|
||||
"<strong>Os metadados antigos</strong> (assinaturas RAID/ZFS/LVM) têm de ser apagados manualmente antes de o script permitir a formatação; caso contrário, <code>mkfs</code> recusa sobrescrever. Utilize <wipeLink>Formatar ou apagar um disco físico</wipeLink>."
|
||||
]
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"unprivTitle": "\"Não posso continuar com um contentor sem privilégios\"",
|
||||
"unprivBody": "Recusou a conversão, por isso o script terminou sem alterar nada. Para continuar, execute-o novamente e aceite: o script para o contentor, guarda uma cópia da configuração em <code>/etc/pve/lxc/<CTID>.conf.bak</code> e substitui <code>unprivileged: 1</code> por <code>unprivileged: 0</code>. Essa alteração, por si só, não converte os UID/GID dos ficheiros existentes; faça antes uma cópia de segurança do contentor e corrija os proprietários, ou restaure ou recrie o contentor como privilegiado.",
|
||||
"permsTitle": "Permissões dentro do recipiente estão erradas",
|
||||
"permsBody": "Montar uma partição num contentor privilegiado mantém os proprietários existentes; um sistema de ficheiros novo pertence frequentemente a <code>root:root</code>. Se o serviço usar outro utilizador, por exemplo <code>www-data</code> para Nextcloud, verifique o UID/GID e ajuste os ficheiros necessários com <code>chown</code>/<code>chmod</code>. As alterações também afetam o disco subjacente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-vm",
|
||||
"label": "Importar disco para VM",
|
||||
"tail": " — fluxo equivalente para VMs."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Pontos de montagem LXC (Host ↔ CT)",
|
||||
"tail": " — compartilhar diretórios de host com um CT em vez de anexar um disco inteiro."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/vm-ct-commands",
|
||||
"label": "Comandos de gestão VM e CT",
|
||||
"tail": " — pct config / push / pull referência."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Importar o Disco para VM | ProxMenux Documentação",
|
||||
"description": "Anexar um disco físico a um Proxmox VM existente com ProxMenux. Detecção segura de disco (exclui sistema, montado, em uso, ZFS/RAID/LVM), caminhos /dev/disk/by-id persistentes e interfaces SATA / SCSI / VirtIO / IDE.",
|
||||
"ogTitle": "Importar o Disco para VM | ProxMenux Documentação",
|
||||
"ogDescription": "Anexar um disco físico a um Proxmox VM existente. Usa caminhos /dev/disk/by-id persistentes e suporta SATA / SCSI / VirtIO / IDE."
|
||||
},
|
||||
"header": {
|
||||
"title": "Importar disco para VM",
|
||||
"description": "Anexar um disco físico que já existe na máquina Proxmox a uma máquina virtual existente. ProxMenux detecta discos livres, permite que você escolha o alvo VM, o tipo de barramento (SATA / SCSI / VirtIO / IDE) e liga tudo usando caminhos /dev/disk/by-id persistentes para que o mapeamento sobreviva a reinicialização e alterações de ordem do dispositivo.",
|
||||
"section": "Gerenciador de disco · VM"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Liga um disco físico bruto como dispositivo subjacente de uma interface de disco virtual. O sistema convidado não recebe automaticamente os dados SMART nativos nem as funções do controlador físico; utilize passthrough PCI do controlador se forem necessários. O disco é ligado pelo seu caminho <code>/dev/disk/by-id/…</code> quando existe, para manter a atribuição se a ordem dos dispositivos mudar no arranque; caso contrário, é usado <code>/dev/sdX</code>."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases com separação clara entre \"coletar informações e decisões\" e \"realmente anexar discos ao VM\". Até a confirmação final, a configuração VM não é tocada.",
|
||||
"summary": "O ProxMenux exclui candidatos inseguros: disco raiz, discos montados no host, membros ativos ZFS/LVM/RAID e discos referenciados em configurações VM/LXC. Os discos com metadados <em>antigos</em>, ou seja, assinaturas ZFS/RAID/LVM já não utilizadas, aparecem com ⚠ mas não são bloqueados."
|
||||
},
|
||||
"prereqs": {
|
||||
"heading": "Pré-requisitos",
|
||||
"items": [
|
||||
"Pelo menos um VM definido no host (o script envia diretamente para <code>qm list</code>).",
|
||||
"A <strong>VM de destino está desligada</strong>. Se estiver em execução, o script para com uma mensagem; a adição de discos em funcionamento não faz parte deste processo.",
|
||||
"Pelo menos um disco físico no host que não está em uso pelo host ou qualquer outro hóspede."
|
||||
]
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolher a VM de destino",
|
||||
"bodyRich": "O ProxMenux lista todas as VM do host com <code>qm list</code>. Escolha a que receberá o disco. Se estiver em execução, o script para e pede que a desligue primeiro."
|
||||
},
|
||||
{
|
||||
"title": "Escolha o( s) disco( s) físico( s) a anexar",
|
||||
"img": "/disk/disk-selection.png",
|
||||
"caption": "Discos livres detetados no host, com ⚠ para metadados antigos",
|
||||
"body": "O script examina os discos do host e mostra apenas os que podem ser ligados sem conflitos. Pode selecionar vários. Os discos com assinaturas antigas ZFS/LVM/RAID continuam visíveis com ⚠ para indicar que as assinaturas devem ser apagadas antes de o sistema convidado os formatar."
|
||||
},
|
||||
{
|
||||
"title": "Escolha a interface de barramento",
|
||||
"img": "/disk/disk-assigment.png",
|
||||
"caption": "Seleção da interface de barramento",
|
||||
"intro": "Escolha como o hóspede deve ver o disco:",
|
||||
"items": [
|
||||
"<strong>SCSI</strong> — padrão moderno para Linux e Windows com drivers VirtIO-SCSI instalados.",
|
||||
"<strong>SATA</strong> — ampla compatibilidade, funciona fora da caixa em praticamente todos os hóspedes.",
|
||||
"<strong>VirtIO</strong>: dispositivo de bloco paravirtualizado eficiente; exige controladores de software no sistema convidado.",
|
||||
"<strong>IDE</strong> — para os hóspedes legados que não possuem nenhum dos drivers acima."
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Anexar e verificar",
|
||||
"bodyRich": "ProxMenux liga cada disco selecionado com seu melhor caminho <code>/dev/disk/by-id/</code>, salta os índices de slot que já estão em uso na configuração VM (<code>scsi0</code>, <code>sata0</code>, ...) e re-ler a configuração para confirmar a atribuição. Um resumo é impresso no final."
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "O script é uma embalagem em torno de <code>qm set</code>. O comando exato para um único disco se parece com este:",
|
||||
"migrationTitle": "A migração ao vivo não é possível",
|
||||
"migrationBody": "Uma VM com um disco físico ligado diretamente fica <strong>dependente do host que disponibiliza esse disco</strong>. Outro nó normalmente não tem o mesmo caminho <code>/dev/disk/by-id/…</code> nem os dados. Faça cópias de segurança e transfira os dados separadamente, ou utilize discos virtuais geridos em armazenamento partilhado ou com replicação suportada. Não pressuponha que a replicação do Proxmox abrange este dispositivo.",
|
||||
"shareTitle": "Não compartilhar um disco físico entre VMs",
|
||||
"shareBody": "Anexar o mesmo disco físico a duas VMs ao mesmo tempo irá corromper os dados na próxima gravação. ProxMenux detecta esta situação e bloqueia-a, mas se você ignorar o script (direto <code>qm set</code>), certifique-se de que apenas um convidado monta o disco."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noDisksTitle": "\"Nenhum disco disponível para este VM\"",
|
||||
"noDisksIntro": "O script encontrou discos, mas todos os candidatos foram filtrados. Razões comuns:",
|
||||
"noDisksItems": [
|
||||
"Cada disco restante já está referenciado na configuração do VM.",
|
||||
"Cada disco restante é montado na máquina ou faz parte de um ZFS / LVM / RAID ativo.",
|
||||
"A máquina só tem o disco raiz instalado."
|
||||
],
|
||||
"noDisksOutro": "Execute <code>lsblk -f</code> no host para rever o estado de cada disco.",
|
||||
"noVisibleTitle": "O VM não vê o disco após o arranque",
|
||||
"noVisibleBody": "Se você escolheu <strong>SCSI</strong> ou <strong>VirtIO</strong>, o hóspede precisa do driver correspondente. No Linux que é nativo do kernel; no Windows você precisa da ISO VirtIO e de uma instalação de driver (veja a página <winLink>Criar VM: Sistema Windows</winLink>). Mudar para SATA na guia de hardware do VM é uma solução rápida para confirmar que o disco está fisicamente ligado."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-image-vm",
|
||||
"label": "Importar imagem de disco para VM",
|
||||
"tail": " — mesmo fluxo mas para arquivos de imagem (qcow2 / vmdk / raw / img)."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager/import-disk-lxc",
|
||||
"label": "Importar disco para LXC",
|
||||
"tail": " — processo equivalente para contentores LXC."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager/add-controller-nvme-vm",
|
||||
"label": "Adicionar controlador ou NVMe a uma VM",
|
||||
"tail": " — quando necessitar de uma passagem completa PCIe / NVMe em vez de anexar o disco."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"tail": " — qm importdisk e referência de shell correspondente."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Gestor de discos Proxmox: VM/LXC, testes SMART e eliminação | ProxMenux",
|
||||
"description": "Faça a gestão de discos físicos num host Proxmox VE com o ProxMenux: ligue discos a VM ou LXC (qm set scsi/sata/virtio, pct mp), importe imagens img / qcow2 / vmdk / raw, atribua HBA ou controladores NVMe completos, apague discos com verificações de segurança e execute autotestes SMART.",
|
||||
"ogTitle": "Gerenciador de disco Proxmox — Anexar discos a VMs / LXC, testes SMART, limpa",
|
||||
"ogDescription": "Anexar discos a VMs / LXC, importar imagens de disco, passagem PCI para controladores, limpeza segura e testes SMART em Proxmox VE.",
|
||||
"twitterTitle": "Gestor de discos Proxmox | ProxMenux",
|
||||
"twitterDescription": "Anexar discos a VMs / LXC, imagens de importação, passagem PCI, limpeza segura e testes SMART."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gerenciador de disco",
|
||||
"description": "O menu Gerenciador de disco agrupa as ferramentas ProxMenux para lidar com discos físicos em um host Proxmox: anexar discos em recipientes VMs e LXC, importar imagens de disco, passar por um controlador inteiro ou dispositivo NVMe, limpar discos com segurança e executar testes de saúde SMART.",
|
||||
"section": "Gerenciador de disco"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para que serve este menu",
|
||||
"body": "Estas ferramentas trabalham com <strong>discos físicos visíveis ao host Proxmox e ficheiros de imagem nele guardados</strong>. Há três grupos: <strong>VM</strong> (ligar discos ou importar imagens), <strong>LXC</strong> (ligar discos a um contentor) e <strong>Utilitários</strong> (formatação e estado SMART). As operações de ligação e eliminação ocultam ou bloqueiam discos de sistema e em uso; as verificações SMART podem examiná-los sem os apagar."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir o menu",
|
||||
"body": "No menu principal do ProxMenux, selecione <strong>Disk Manager</strong>. Você verá isto:",
|
||||
"imageAlt": "Menu Gerenciador de disco com blocos VM, LXC e Utilitários"
|
||||
},
|
||||
"groups": {
|
||||
"heading": "Três grupos de ferramentas",
|
||||
"intro": "O menu está organizado em três grupos: <strong>VM</strong>, <strong>LXC</strong> e <strong>Utilitários</strong>. Clique num cartão para ir diretamente às ferramentas desse grupo.",
|
||||
"vmTitle": "VM",
|
||||
"vmBody": "Ferramentas que operam em máquinas virtuais existentes. O VM deve ser desligado; o ProxMenux valida isto antes de tocar na configuração.",
|
||||
"vmItems": [
|
||||
"Importar disco para VM",
|
||||
"Importar imagem de disco para VM",
|
||||
"Adicionar controlador ou NVMe a uma VM"
|
||||
],
|
||||
"lxcTitle": "LXC",
|
||||
"lxcBody": "Ferramentas para contentores LXC existentes. Este script exige um contentor privilegiado e oferece alterar a opção quando necessário. Leia primeiro os cuidados sobre conversão e propriedade dos ficheiros na página da ferramenta.",
|
||||
"lxcItems": [
|
||||
"Importar disco para LXC"
|
||||
],
|
||||
"utilitiesTitle": "Utilitários",
|
||||
"utilitiesBody": "Ferramentas do lado do hospedeiro que operam nos próprios discos, independentemente de qualquer VM ou recipiente.",
|
||||
"utilitiesItems": [
|
||||
"Formatar ou apagar um disco físico",
|
||||
"Integridade e teste do disco SMART"
|
||||
]
|
||||
},
|
||||
"vm": {
|
||||
"heading": "VM",
|
||||
"intro": "Ferramentas que operam em máquinas virtuais existentes. O VM deve ser desligado; o ProxMenux valida isto antes de tocar na configuração.",
|
||||
"options": [
|
||||
{
|
||||
"icon": "HardDrive",
|
||||
"href": "/docs/disk-manager/import-disk-vm",
|
||||
"title": "Importar disco para VM",
|
||||
"description": "Anexar um disco físico não atribuído a um VM existente. Suporta SATA / SCSI / VirtIO / IDE, usa caminhos /dev/disk/by-id persistentes."
|
||||
},
|
||||
{
|
||||
"icon": "FileDown",
|
||||
"href": "/docs/disk-manager/import-disk-image-vm",
|
||||
"title": "Importar imagem de disco para VM",
|
||||
"description": "Importar arquivos de imagem de disco (.img / .qcow2 / .vmdk / .raw) para um VM existente. Fluxo bifásico, qm importdisk sob o capô."
|
||||
},
|
||||
{
|
||||
"icon": "Cpu",
|
||||
"href": "/docs/disk-manager/add-controller-nvme-vm",
|
||||
"title": "Adicionar controlador ou NVMe a uma VM",
|
||||
"description": "Passagem PCI de um dispositivo inteiro SATA / SAS HBA ou NVMe para um VM. Lida com habilitação IOMMU e detecção de conflitos."
|
||||
}
|
||||
]
|
||||
},
|
||||
"lxc": {
|
||||
"heading": "LXC",
|
||||
"intro": "Ferramentas para contentores LXC existentes. Este script exige um contentor privilegiado e oferece alterar a opção quando necessário. Leia primeiro os cuidados sobre conversão e propriedade dos ficheiros na página da ferramenta.",
|
||||
"options": [
|
||||
{
|
||||
"icon": "Boxes",
|
||||
"href": "/docs/disk-manager/import-disk-lxc",
|
||||
"title": "Importar disco para LXC",
|
||||
"description": "Anexar um disco físico não atribuído a um recipiente LXC existente como ponto de montagem. Lida com detecção / formato do sistema de arquivos e conversão privilegiada."
|
||||
}
|
||||
]
|
||||
},
|
||||
"utilities": {
|
||||
"heading": "Utilitários",
|
||||
"intro": "Ferramentas do lado do hospedeiro que operam nos próprios discos, independentemente de qualquer VM ou recipiente.",
|
||||
"options": [
|
||||
{
|
||||
"icon": "Eraser",
|
||||
"href": "/docs/disk-manager/format-disk",
|
||||
"title": "Formatar/limpar disco físico (seguro)",
|
||||
"description": "Limpar o disco seguro com controles de segurança rigorosos: apenas discos totalmente livres são mostrados e uma confirmação dupla é sempre necessária."
|
||||
},
|
||||
{
|
||||
"icon": "Activity",
|
||||
"href": "/docs/disk-manager/smart-disk-test",
|
||||
"title": "Integridade e teste do disco SMART",
|
||||
"description": "Execute verificações de saúde SMART e auto-testes curtos / longos em unidades SATA, SAS e NVMe. Exporta JSON para o Monitor."
|
||||
}
|
||||
]
|
||||
},
|
||||
"safety": {
|
||||
"title": "Regras de segurança para ligação e eliminação de discos",
|
||||
"intro": "As operações de ligação e eliminação excluem dispositivos que possam prejudicar o host:",
|
||||
"items": [
|
||||
"O <strong>disco de sistema</strong>, o pool raiz, o swap e os membros ativos de ZFS/LVM/RAID ficam sempre ocultos.",
|
||||
"Os discos <strong>montados</strong> em qualquer ponto do host são ocultos ou bloqueados na execução.",
|
||||
"Os discos <strong> referenciados por um VM ou LXC</strong> em execução não podem ser reatribuídos ou apagados.",
|
||||
"Operações que podem alterar o estado host (IOMMU habilitar, limpar) requerem confirmação explícita."
|
||||
]
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share",
|
||||
"label": "Gerenciador de armazenamento e compartilhamento",
|
||||
"tail": " — registro de armazenamento no próprio Proxmox (NFS / Samba / iSCSI / local) e compartilhar pastas entre host e CTs."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"tail": " — referência de dispositivos de bloco, LVM, pvesm e SMART."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/zfs-commands",
|
||||
"label": "Comandos de gerenciamento ZFS",
|
||||
"tail": " — para conjuntos e conjuntos de dados ZFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"label": "Adicionar GPU a uma VM (passthrough)",
|
||||
"tail": " — os mesmos conceitos IOMMU / VFIO aplicados às GPU."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Estado e testes SMART do disco | Documentação ProxMenux",
|
||||
"description": "Executar SMART controlos de saúde e testes de disco em Proxmox VE com ProxMenux. Suporta SATA / SAS (smartmontools) e NVMe (nvme-cli). Auto-testes curtos e longos, JSON exportação para ProxMenux Monitor integração.",
|
||||
"ogTitle": "Estado e testes SMART do disco | Documentação ProxMenux",
|
||||
"ogDescription": "Verificações de saúde e auto-testes de SMART para unidades SATA / SAS e NVMe em Proxmox. Exportação JSON para o Monitor."
|
||||
},
|
||||
"header": {
|
||||
"title": "Integridade e teste do disco SMART",
|
||||
"description": "Leia dados do SMART e ative auto-testes nos discos físicos ligados ao host Proxmox. ProxMenux auto-instala smartmontools para SATA / SAS e nvme-cli para NVMe, executa a ação dentro do firmware da unidade (os testes longos sobrevivem ao encerramento do terminal) e exporta os resultados JSON para o ProxMenux Monitor.",
|
||||
"section": "Gerenciador de disco · Utilitários"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para que serve isto?",
|
||||
"body": "SMART (Auto-Monitoramento, Análise e Tecnologia de Relatórios) permite que a própria unidade relate sua saúde e execute auto-testes. Esta ferramenta expõe que os dados sem que você precise se lembrar da invocação correta <code>smartctl</code> / <code>nvme</code>, e persiste a saída como JSON, para que o Monitor possa grafar tendências ao longo do tempo."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "Todas as ações aqui são não destrutivas — SMART lê os contadores de firmware da unidade, e os auto-testes estão em fila dentro da própria unidade. Nenhuma separação de fases é necessária. O fluxo é: verificação de dependência → seleção de disco → seleção de ação → invocação de ferramenta (smartctl ou nvme-cli dependendo do barramento de disco) → saída impressa mais exportação de JSON para o Monitor."
|
||||
},
|
||||
"deps": {
|
||||
"heading": "Dependências",
|
||||
"body": "A ferramenta auto-instala o que precisa na primeira execução. As unidades SATA / SAS dependem do <code>smartmontools</code>; as unidades NVMe dependem do <code>nvme-cli</code>. Ambos:"
|
||||
},
|
||||
"actions": {
|
||||
"heading": "Acções disponíveis",
|
||||
"headerAction": "Ação",
|
||||
"headerWhat": "O que lê / roda",
|
||||
"headerDur": "Duração",
|
||||
"rows": [
|
||||
{
|
||||
"action": "Estado de saúde rápido",
|
||||
"whatRich": "Total PASSED/FAILED + atributos-chave.<br /><code>smartctl -H</code> + <code>-A</code> (SATA/SAS) ou <code>nvme smart-log</code> (NVMe).",
|
||||
"dur": "Instantânea"
|
||||
},
|
||||
{
|
||||
"action": "Relatório completo",
|
||||
"whatRich": "Dados SMART completos, com deslocamento. <code>smartctl -x</code> para SATA/SAS ou <code>nvme smart-log</code> + <code>id-ctrl</code> para NVMe.",
|
||||
"dur": "Instantânea"
|
||||
},
|
||||
{
|
||||
"action": "Teste curto",
|
||||
"what": "Verificação básica de superfície e elétrica, em fila dentro do firmware da unidade.",
|
||||
"dur": "~2 minutos"
|
||||
},
|
||||
{
|
||||
"action": "Ensaio longo",
|
||||
"what": "Varredura completa de toda a superfície. Funciona no hardware da unidade — persiste mesmo se você fechar o terminal.",
|
||||
"dur": "Horas (dependentes do tamanho do disco)"
|
||||
},
|
||||
{
|
||||
"action": "Verificar o progresso do teste",
|
||||
"what": "Estado do auto-teste ativo ou mais recente.",
|
||||
"dur": "Instantânea"
|
||||
}
|
||||
],
|
||||
"tipTitle": "Longos testes sobrevivem ao encerramento do terminal",
|
||||
"tipBody": "Um teste longo corre <em>dentro do disco</em> e não depende do processo ProxMenux continuar ativo. Pode fechar o terminal e voltar a <strong>Verificar o progresso do teste</strong>. Um reinício do host, uma reposição do controlador ou uma falha de energia pode interromper o teste e a recolha de resultados; não pressuponha que retoma automaticamente."
|
||||
},
|
||||
"json": {
|
||||
"heading": "Exportação de JSON para o Monitor",
|
||||
"intro": "As ações de estado, teste curto e progresso guardam um JSON com data e hora em <code>/usr/local/share/proxmenux/smart/<disk>/</code>; os resultados dos testes longos são recolhidos em segundo plano. O relatório completo é apenas apresentado. A estrutura é:",
|
||||
"outro": "O ProxMenux Monitor utiliza estes ficheiros para mostrar a evolução do estado de cada disco. Os ficheiros antigos são eliminados automaticamente ao atingir o limite de retenção."
|
||||
},
|
||||
"steps": {
|
||||
"heading": "Passo a passo",
|
||||
"stepLabel": "Etapa",
|
||||
"list": [
|
||||
{
|
||||
"title": "Escolha um disco",
|
||||
"body": "ProxMenux lista cada disco físico no host com seu modelo e tamanho. Ao contrário da ferramenta Format, esta lista não é filtrada pela segurança — ler SMART é uma operação não destrutiva.",
|
||||
"img": "/disk/smart/disk-selection.png",
|
||||
"alt": "Menu de seleção de disco SMART",
|
||||
"caption": "Menu de seleção de disco SMART"
|
||||
},
|
||||
{
|
||||
"title": "Escolha uma ação",
|
||||
"body": "Escolha entre estado de saúde rápido, relatório completo, teste curto, teste longo ou check progress. O menu fica aberto após cada ação para que você possa encadear várias consultas contra o mesmo disco.",
|
||||
"img": "/disk/smart/action-menu.png",
|
||||
"alt": "Menu de ação SMART",
|
||||
"caption": "Menu de ação SMART (ações 5 + cancelamento)"
|
||||
},
|
||||
{
|
||||
"title": "(Apenas teste longo) Confirmar execução em segundo plano",
|
||||
"body": "O ProxMenux informa que o teste continuará após fechar o terminal e mostra onde será guardado o resultado JSON. Aceite para iniciar o teste.",
|
||||
"img": "/disk/smart/long-test-warning.png",
|
||||
"alt": "Diálogo de confirmação de teste longo",
|
||||
"caption": "Confirmação de teste longa — roda em segundo plano, resultado salvo em JSON"
|
||||
},
|
||||
{
|
||||
"title": "Rever os resultados",
|
||||
"bodyRich": "O estado, os testes e o progresso são apresentados no terminal; <strong>Relatório completo</strong> abre numa caixa de diálogo com deslocamento. O JSON é exportado para as ações descritas acima, exceto Relatório completo. Para testes longos, volte a <strong>Verificar o progresso do teste</strong> no mesmo disco.",
|
||||
"img": "/disk/smart/quick-status.png",
|
||||
"alt": "Saída rápida do estado de saúde",
|
||||
"caption": "Saída rápida do estado de saúde (SATA — smartctl -H + -A)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalentes manuais",
|
||||
"nvmeWarnTitle": "Os autotestes NVMe dependem do firmware do disco",
|
||||
"nvmeWarnBody": "Nem toda unidade NVMe suporta o comando de auto-teste curto/longo. Se uma unidade recusar o teste, o log SMART e os dados do controlador de ID (<code>nvme smart-log</code> + <code>id-ctrl</code>) ainda são o sinal de saúde mais confiável."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noSmartTitle": "\"Não foi possível ler dados SMART de /dev/sdX\"",
|
||||
"noSmartBody": "O disco pode estar ligado a um controlador RAID/SAS que não transmite SMART. Com placas megaraid, tente <code>smartctl -d megaraid,N /dev/sdX</code>. Com HBA em modo IT, a chamada direta funciona.",
|
||||
"longTitle": "O teste longo nunca termina",
|
||||
"longBody": "O teste corre no firmware e uma carga elevada de E/S pode atrasá-lo. Tente num período calmo, como durante a noite. Em SATA, <code>smartctl -c</code> mostra a percentagem restante e, em SAS, <code>smartctl -l selftest</code>; o registo de autotestes indica o resultado e eventuais LBA com erros. Uma falha de leitura exige investigação; a lentidão, por si só, não prova um setor danificado."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/format-disk",
|
||||
"label": "Formatar ou apagar um disco físico",
|
||||
"tail": " — reutilizar um disco após confirmar que é saudável."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Comandos de armazenamento e discos → Estado SMART",
|
||||
"tail": " — referência smartctl / nvme."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/zfs-commands",
|
||||
"label": "Comandos de gerenciamento ZFS",
|
||||
"tail": " — zpool scrub verifica as somas de controlo dos dados ZFS e complementa os testes SMART do hardware."
|
||||
},
|
||||
{
|
||||
"href": "/docs/monitor/dashboard/storage",
|
||||
"label": "ProxMenux Monitor — Página de armazenamento",
|
||||
"tail": " — vista detalhada do disco que utiliza o JSON aqui exportado: tabela SMART completa, histórico e relatório PDF."
|
||||
},
|
||||
{
|
||||
"href": "/docs/monitor/dashboard/hardware",
|
||||
"label": "ProxMenux Monitor — Página de hardware",
|
||||
"tail": " — Resumo de armazenamento com modelo, capacidade e velocidade de ligação negociada (atual vs máximo em NVMe)."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Visão geral do Gerenciador de Discos",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Repositórios externos | Documentação do ProxMenux",
|
||||
"description": "O ProxMenux integra repositórios externos de scripts selecionados, como community-scripts e ZimaOS, como alternativas em algumas secções do menu. Cada script indica a origem; os erros devem ser comunicados ao responsável original.",
|
||||
"ogTitle": "Repositórios externos | Documentação do ProxMenux",
|
||||
"ogDescription": "Repositórios externos de scripts integrados como alternativas nos menus do ProxMenux."
|
||||
},
|
||||
"header": {
|
||||
"title": "Repositórios externos",
|
||||
"description": "O ProxMenux integra repositórios externos de scripts selecionados como alternativas em algumas secções do menu. Estes scripts provêm de terceiros de confiança e a sua origem é claramente indicada no menu.",
|
||||
"section": "Repositórios externos"
|
||||
},
|
||||
"practice": {
|
||||
"title": "O que isto significa na prática",
|
||||
"body": "Quando uma opção usa um script externo em vez de código próprio, o menu indica a sua origem e o repositório carregado. O ProxMenux apenas inicia esses scripts, sem os modificar. Os problemas do seu funcionamento devem ser tratados pelo responsável do repositório original."
|
||||
},
|
||||
"integrated": {
|
||||
"heading": "Atualmente integrados",
|
||||
"usedInLabel": "Usado em:",
|
||||
"items": [
|
||||
{
|
||||
"name": "community-scripts / ProxmoxVE",
|
||||
"url": "https://community-scripts.github.io/ProxmoxVE/",
|
||||
"description": "Sucessor dos helper scripts de tteck. Vasto catálogo de scripts para implementar numa única execução LXC (Home Assistant, Plex, Frigate…), VM, complementos e ajustes ao PVE.",
|
||||
"usedIn": "Arranque de Helper Scripts e Rede (correção de offloading da placa Intel e1000e)"
|
||||
}
|
||||
]
|
||||
},
|
||||
"attribution": {
|
||||
"heading": "Autoria e reconhecimento",
|
||||
"items": [
|
||||
"Os autores originais são sempre identificados no menu e na página que documenta a integração do script.",
|
||||
"É apresentada uma ligação para o repositório de origem antes de executar o script e na página de documentação correspondente.",
|
||||
"Apoie os programadores destes projetos externos com uma ⭐, um patrocínio ou relatórios de erros bem documentados."
|
||||
]
|
||||
},
|
||||
"report": {
|
||||
"title": "Onde comunicar problemas com scripts externos",
|
||||
"body": "Se um script externo não funcionar como esperado, <strong>comunique o problema diretamente no respetivo repositório</strong>, não no ProxMenux. O ProxMenux descarrega-o e executa-o sem alterar o código. O responsável original pode analisar e corrigir o problema. As issues do ProxMenux destinam-se a falhas no arranque ou na integração do script."
|
||||
},
|
||||
"suggest": {
|
||||
"heading": "Sugerindo novos repositórios externos",
|
||||
"intro": "Encontrou um script ou repositório que se adequaria a um menu do ProxMenux? Sugira-o através de:",
|
||||
"discussionTitle": "💬 Abrir uma discussão",
|
||||
"discussionBody": "Ideal para ideias: recolha opiniões da comunidade antes de as transformar num pedido de funcionalidade.",
|
||||
"issueTitle": "🐛 Abrir uma issue",
|
||||
"issueBody": "Para pedidos de funcionalidades concretas com um âmbito bem definido."
|
||||
},
|
||||
"candidate": {
|
||||
"title": "O que faz um bom candidato à integração",
|
||||
"items": [
|
||||
"Código aberto com um responsável ativo.",
|
||||
"Idempotente: pode ser executado várias vezes em segurança.",
|
||||
"Não altera a configuração principal do Proxmox sem avisar.",
|
||||
"Resolve um problema que o ProxMenux ainda não cobre, evitando duplicar funcionalidades."
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,677 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Glossário | Documentação ProxMenux",
|
||||
"description": "Definições dos termos utilizados na documentação ProxMenux: Proxmox, armazenamento, redes e virtualização.",
|
||||
"ogTitle": "Glossário | Documentação ProxMenux",
|
||||
"ogDescription": "Referência rápida para os termos técnicos utilizados na documentação ProxMenux."
|
||||
},
|
||||
"header": {
|
||||
"title": "Glossário",
|
||||
"description": "Definições breves dos termos utilizados no ProxMenux e para descrever o funcionamento interno do Proxmox.",
|
||||
"section": "Glossário"
|
||||
},
|
||||
"callout": {
|
||||
"title": "Como usar esta página",
|
||||
"bodyRich": "Cada entrada inclui a categoria e uma definição breve. As ligações <em>Ver também</em> abrem a documentação relacionada. Utilize a navegação A–Z para ir diretamente para uma letra."
|
||||
},
|
||||
"jumpHeading": "Saltar para a letra",
|
||||
"seeAlsoLabel": "Ver também:",
|
||||
"aliasesLabel": "também:",
|
||||
"missingCallout": {
|
||||
"title": "Falta um termo?",
|
||||
"leadRich": "Se faltar um termo, abra uma issue ou um PR no <ext>GitHub</ext>. O glossário está em <code>web/messages/en/docs/glossary.json</code>, com os catálogos correspondentes para cada idioma."
|
||||
},
|
||||
"entries": [
|
||||
{
|
||||
"term": "ACS",
|
||||
"aliases": [
|
||||
"Access Control Services",
|
||||
"Substituição ACS"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Funções de controlo de acesso PCIe que ajudam a isolar o tráfego entre dispositivos. Os grupos IOMMU dependem do hardware e da topologia. A alteração <em>ACS override</em> pode dividir os grupos apresentados pelo Linux, mas não acrescenta isolamento físico; atribuí-los a VM distintas implica um risco de segurança.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Adicionar Controlador ou NVMe ao VM",
|
||||
"href": "/docs/disk-manager/add-controller-nvme-vm"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "ARC",
|
||||
"aliases": [
|
||||
"Adaptive Replacement Cache"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Cache de leitura ZFS na RAM do anfitrião, com blocos utilizados recentemente ou com frequência. O limite predefinido depende da versão e da instalação do Proxmox. A pós-instalação do ProxMenux permite limitá-la.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Pós-instalação: armazenamento",
|
||||
"href": "/docs/post-install/storage"
|
||||
},
|
||||
{
|
||||
"label": "Comandos ZFS",
|
||||
"href": "/docs/help-info/zfs-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Bind mount",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Funcionalidade Linux que disponibiliza parte do sistema de ficheiros noutro caminho. O ProxMenux utiliza bind mounts para partilhar diretórios do anfitrião com contentores LXC através de <code>pct set -mpN</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Pontos de montagem LXC",
|
||||
"href": "/docs/storage-share/lxc-mount-points"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Bond de rede",
|
||||
"aliases": [
|
||||
"Agregação de interfaces de rede",
|
||||
"Agregação de ligações"
|
||||
],
|
||||
"category": "Rede",
|
||||
"definitionRich": "Agrupa várias interfaces físicas numa interface lógica para redundância (active-backup), débito agregado (LACP / 802.3ad) ou ambos. Configura-se em <code>/etc/network/interfaces</code>."
|
||||
},
|
||||
{
|
||||
"term": "Ponte",
|
||||
"aliases": [
|
||||
"vmbrX",
|
||||
"vmbr0",
|
||||
"Ponte Linux"
|
||||
],
|
||||
"category": "Rede",
|
||||
"definitionRich": "Comutador virtual de camada 2 no anfitrião. <code>vmbr0</code> liga normalmente os sistemas convidados à rede física. Outras pontes (<code>vmbr1</code>, <code>vmbr2</code>...) podem separar redes conforme as ligações físicas e a configuração.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Ceph",
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Armazenamento distribuído integrado no Proxmox para clusters hiperconvergentes. Os OSD (Object Storage Daemons) sustentam o armazenamento de objetos, blocos e ficheiros. A versão Ceph necessária depende da versão do Proxmox e do percurso de atualização; consulte o guia correspondente.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Atualize PVE 8 para PVE 9",
|
||||
"href": "/docs/utils/upgrade-pve8-pve9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "CT",
|
||||
"aliases": [
|
||||
"Contentor",
|
||||
"Contentor LXC"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Abreviatura de «contentor» no Proxmox para uma instância LXC. O CTID numérico corresponde a <code>/etc/pve/lxc/<CTID>.conf</code>. Consulte também <strong>LXC</strong>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gestão de VM e contentores",
|
||||
"href": "/docs/help-info/vm-ct-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "deb822",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Formato moderno de fontes APT: ficheiros <code>.sources</code> com blocos estruturados e campos Types, URIs, Suites, Components e Signed-By. Substitui o formato de linha única <code>.list</code>; é o padrão desde PVE 9 / Debian Trixie.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Atualize PVE 8 para PVE 9",
|
||||
"href": "/docs/utils/upgrade-pve8-pve9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "dGPU",
|
||||
"aliases": [
|
||||
"GPU dedicada"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Placa gráfica independente, normalmente ligada por PCIe, ao contrário de um <strong>iGPU</strong>. Pode ser atribuída a uma VM com VFIO ou utilizada por vários contentores LXC através dos dispositivos e do controlador do anfitrião, conforme a compatibilidade do hardware e das aplicações.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Adicionar GPU a VM (passagem direta)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Dialog",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Ferramenta baseada em ncurses para apresentar menus, perguntas e barras de progresso no terminal. O ProxMenux utiliza menus do dialog."
|
||||
},
|
||||
{
|
||||
"term": "DKMS",
|
||||
"aliases": [
|
||||
"Suporte dinâmico ao módulo Kernel"
|
||||
],
|
||||
"category": "Linux",
|
||||
"definitionRich": "Sistema para recompilar módulos externos registados, como NVIDIA ou ZFS, quando o kernel muda. A compilação exige código do módulo compatível e os cabeçalhos correspondentes.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Instalar o Coral TPU (Host)",
|
||||
"href": "/docs/hardware/install-coral-tpu-host"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Fail2Ban",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Serviço que deteta falhas repetidas de autenticação nos registos e bloqueia os IP responsáveis através da firewall. O ProxMenux inclui jails pré-configuradas para SSH, a interface Proxmox e o Monitor.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Fail2Ban",
|
||||
"href": "/docs/security/fail2ban"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Fastfetch",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Ferramenta de informação do sistema com arte ASCII apresentada ao iniciar sessão na consola. Substitui o <code>neofetch</code> e pode ser ativada na pós-instalação do ProxMenux.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Após a instalação: opções",
|
||||
"href": "/docs/post-install/optional"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "GRUB",
|
||||
"aliases": [
|
||||
"GRand Unified Bootloader"
|
||||
],
|
||||
"category": "Linux",
|
||||
"definitionRich": "Gestor de arranque das instalações Linux baseadas em GRUB. Configura-se em <code>/etc/default/grub</code> e <code>/boot/grub/</code>; aplique as alterações com <code>update-grub</code>. O Proxmox também pode utilizar systemd-boot: verifique o gestor ativo antes de alterar parâmetros do kernel.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de passagem GPU",
|
||||
"href": "/docs/help-info/gpu-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "iGPU",
|
||||
"aliases": [
|
||||
"GPU integrada"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Processador gráfico integrado no encapsulamento da CPU, como Intel UHD / Iris ou Radeon nas APU Ryzen. É frequentemente partilhado entre vários LXC através de <code>/dev/dri</code>, em vez de atribuído exclusivamente a uma VM.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Adicionar GPU ao LXC",
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "ifupdown / ifupdown2",
|
||||
"category": "Rede",
|
||||
"definitionRich": "Sistema clássico de configuração de rede Debian, baseado em <code>/etc/network/interfaces</code>. O Proxmox utiliza por predefinição a versão reescrita <code>ifupdown2</code>, que permite recarregar a configuração em funcionamento com <code>ifreload -a</code>."
|
||||
},
|
||||
{
|
||||
"term": "initramfs",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Sistema de ficheiros inicial em RAM utilizado antes de montar a raiz real. Contém os controladores necessários ao arranque. Após alterações a VFIO, IOMMU ou controladores de armazenamento, regenera-se com <code>update-initramfs -u -k all</code>."
|
||||
},
|
||||
{
|
||||
"term": "IOMMU",
|
||||
"aliases": [
|
||||
"Unidade de gerenciamento de memória de entrada/saída",
|
||||
"VT-d",
|
||||
"AMD-Vi"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Funcionalidade de hardware (Intel VT-d / AMD-Vi) necessária para passagem direta de PCIe para VM. Ative-a no firmware e confirme o suporte no kernel. Conforme a plataforma e os valores predefinidos, podem ser necessários <code>intel_iommu=on</code> ou <code>amd_iommu=on</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Post-Install: Virtualização",
|
||||
"href": "/docs/post-install/virtualization"
|
||||
},
|
||||
{
|
||||
"label": "Adicionar GPU a VM (passagem direta)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Grupo IOMMU",
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Conjunto de dispositivos que constitui a unidade mínima de isolamento IOMMU. Os membros não estão necessariamente isolados entre si; verifique todos antes da atribuição com VFIO. Liste-os com <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code>."
|
||||
},
|
||||
{
|
||||
"term": "iSCSI",
|
||||
"aliases": [
|
||||
"Internet SCSI"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Protocolo de armazenamento em blocos sobre IP: um disco remoto surge como dispositivo SCSI local. Regista-se no Proxmox com <code>pvesm add iscsi</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Adicionar o alvo iSCSI como armazenamento Proxmox",
|
||||
"href": "/docs/storage-share/host-iscsi"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "KVM",
|
||||
"aliases": [
|
||||
"Máquina Virtual baseada em Kernel"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Módulo do kernel Linux que transforma o anfitrião num hipervisor. Em conjunto com o <strong>QEMU</strong> para emulação de dispositivos, constitui a base das VM Proxmox."
|
||||
},
|
||||
{
|
||||
"term": "LVM",
|
||||
"aliases": [
|
||||
"Logical Volume Manager"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Gestão de volumes Linux que agrupa armazenamento físico em grupos (VG) com volumes lógicos (LV). As instalações Proxmox baseadas em LVM utilizam frequentemente LVM-thin para discos dos convidados; existem outras opções. Ferramentas: <code>pvs</code>, <code>vgs</code> e <code>lvs</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"href": "/docs/help-info/storage-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "LXC",
|
||||
"aliases": [
|
||||
"Linux Containers"
|
||||
],
|
||||
"category": "Linux",
|
||||
"definitionRich": "Virtualização ao nível do sistema operativo: espaços de utilizador isolados partilham o kernel do anfitrião. Geralmente tem menos sobrecarga que as VM, com uma fronteira de isolamento diferente. O Proxmox gere LXC com <code>pct</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gestão de VM e contentores",
|
||||
"href": "/docs/help-info/vm-ct-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Lynis",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Ferramenta de auditoria de segurança de código aberto da CISOfy. Analisa o anfitrião e apresenta uma pontuação de segurança e recomendações concretas. O ProxMenux instala a versão do repositório GitHub original em vez do pacote Debian mais antigo.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Lynis",
|
||||
"href": "/docs/security/lynis"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Endereço MAC",
|
||||
"aliases": [
|
||||
"Endereço do hardware"
|
||||
],
|
||||
"category": "Rede",
|
||||
"definitionRich": "Identificador de interface Ethernet, normalmente de 48 bits, atribuído por hardware ou software. Os <em>Nomes de rede persistentes</em> do ProxMenux associam MAC a nomes estáveis (<code>eno1</code>, <code>enp3s0</code>) após alterações na enumeração PCI.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Nomes de interface persistentes",
|
||||
"href": "/docs/network/persistent-names"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "MOTD",
|
||||
"aliases": [
|
||||
"Mensagem do Dia"
|
||||
],
|
||||
"category": "Linux",
|
||||
"definitionRich": "Texto apresentado após iniciar sessão por SSH, guardado em <code>/etc/motd</code>. A pós-instalação do ProxMenux pode adicionar um cabeçalho; o desinstalador restaura o ficheiro anterior se existir uma cópia."
|
||||
},
|
||||
{
|
||||
"term": "NFS",
|
||||
"aliases": [
|
||||
"Sistema de arquivos de rede"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Protocolo de partilha de ficheiros em rede originário do Unix. Regista-se como armazenamento Proxmox com <code>pvesm add nfs</code>; o ProxMenux também permite configurar clientes e servidores NFS em LXC.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gerenciador de armazenamento e compartilhamento",
|
||||
"href": "/docs/storage-share"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "nftables / iptables",
|
||||
"category": "Rede",
|
||||
"definitionRich": "Ferramentas de firewall Linux. <code>nftables</code> é o sistema moderno; <code>iptables</code> pode utilizar backends clássicos ou compatíveis com nft. O <code>pve-firewall</code> clássico utiliza iptables; a alternativa proxmox-firewall utiliza nftables.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de rede",
|
||||
"href": "/docs/help-info/network-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "nouveau",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Controlador gráfico NVIDIA de código aberto incluído no Linux. Ao instalar o controlador proprietário, impeça o nouveau de controlar o mesmo GPU, normalmente bloqueando o carregamento e regenerando o initramfs.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Guia de instalação NVIDIA",
|
||||
"href": "/guides/nvidia"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Repositório no-subscription",
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Repositório de pacotes Proxmox disponível sem subscrição empresarial. Os pacotes passam por menos validação do que no repositório enterprise, recomendado pelo Proxmox para produção. A pós-instalação do ProxMenux permite configurar repositórios.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Post- Install: Configuração Básica",
|
||||
"href": "/docs/post-install/basic-settings"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "OVA / OVF",
|
||||
"aliases": [
|
||||
"Open Virtualization Format"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Formatos DMTF para distribuir VM portáteis. <strong>OVA</strong> reúne os ficheiros num arquivo TAR; <strong>OVF</strong> descreve a VM em XML com ficheiros de disco associados, geralmente VMDK. A compatibilidade de importação depende do hipervisor de destino e da configuração.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Exportar VM para OVA / OVF",
|
||||
"href": "/docs/utils/export-vm"
|
||||
},
|
||||
{
|
||||
"label": "Importar VM de OVA / OVF",
|
||||
"href": "/docs/utils/import-vm"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "OVMF",
|
||||
"aliases": [
|
||||
"firmware UEFI",
|
||||
"Open Virtual Machine Firmware"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Firmware UEFI para VM, selecionado com <code>qm set <vmid> -bios ovmf</code>. Utiliza-se para convidados UEFI, incluindo Windows 11 e configurações Secure Boot. <code>efidisk0</code> conserva variáveis EFI; muitos outros convidados ainda podem utilizar BIOS clássico.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Adicionar GPU a VM (passagem direta)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "PBS",
|
||||
"aliases": [
|
||||
"Proxmox Backup Server"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Produto de cópias Proxmox separado, com transferências incrementais, desduplicação e encriptação opcional no cliente para VM e CT. Pode ser destino do vzdump; um servidor separado é preferível a guardar cópias no próprio anfitrião protegido."
|
||||
},
|
||||
{
|
||||
"term": "pct",
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Ferramenta de linha de comandos para gerir contentores LXC no Proxmox: <code>pct list / start / stop / shutdown / config / enter / exec / push / pull / destroy</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gestão de VM e contentores",
|
||||
"href": "/docs/help-info/vm-ct-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "pmxcfs",
|
||||
"aliases": [
|
||||
"Proxmox Cluster Filesystem"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Sistema de ficheiros virtual baseado em FUSE, montado em <code>/etc/pve/</code>. Replica alterações de configuração entre os nós do cluster: as edições em <code>/etc/pve/</code> são propagadas automaticamente."
|
||||
},
|
||||
{
|
||||
"term": "pveam",
|
||||
"aliases": [
|
||||
"Gestor de dispositivos virtuais Proxmox VE"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Ferramenta do catálogo local de modelos CT. <code>pveam update</code> atualiza o índice; <code>pveam available</code> lista os modelos e <code>pveam download <storage> <template></code> descarrega um."
|
||||
},
|
||||
{
|
||||
"term": "pveproxy",
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Serviço HTTPS da interface e do terminal web Proxmox, na porta 8006. Reinicia durante atualizações de versão principal; por isso o ProxMenux impede a atualização PVE 8 → 9 pelo terminal web."
|
||||
},
|
||||
{
|
||||
"term": "pvesm",
|
||||
"aliases": [
|
||||
"Gestor de armazenamento Proxmox"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Ferramenta CLI para gerenciar armazenamento Proxmox. O <code>pvesm status</code> mostra todos os armazenamentos configurados; o <code>pvesm add <type></code> registra os novos (NFS, Samba, iSCSI, dir, ZFS, LVM, ...).",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"href": "/docs/help-info/storage-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Contêiner privilegiado",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Contentor LXC cujo root <em>corresponde ao UID 0 do anfitrião</em>, mantendo namespaces e outras restrições. Tem menor isolamento do que um contentor sem privilégios. GPU, USB e Samba não exigem sempre este modo: permissões e mapeamentos UID são relevantes."
|
||||
},
|
||||
{
|
||||
"term": "ProxMenux Monitor",
|
||||
"category": "ProxMenux",
|
||||
"definitionRich": "Painel web opcional do ProxMenux. Apresenta estatísticas do anfitrião em tempo real (CPU, RAM, discos e rede), uma vista de VM e LXC e início de sessão com 2FA, na porta TCP <code>8008</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "ProxMenux Monitor",
|
||||
"href": "/docs/settings/proxmenux-monitor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "qcow2",
|
||||
"aliases": [
|
||||
"QEMU Copy-On-Write v2"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Formato de imagem de disco VM comum em armazenamento de diretório. Suporta alocação a pedido, snapshots e cópia na escrita. Converta com <code>qemu-img convert -O qcow2 ...</code>."
|
||||
},
|
||||
{
|
||||
"term": "qm",
|
||||
"aliases": [
|
||||
"Gestor de QEMU"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Ferramenta para gerir VM no Proxmox: <code>qm list / start / stop / shutdown / config / set / destroy / importdisk / migrate</code>. Equivale ao <code>pct</code> para contentores.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gestão de VM e contentores",
|
||||
"href": "/docs/help-info/vm-ct-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Q35",
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Tipo de máquina QEMU que emula o chipset Intel Q35 com PCIe. Recomendado em vez de i440FX para passagem direta PCIe e sistemas convidados modernos. Configura-se com <code>qm set <vmid> -machine q35</code>."
|
||||
},
|
||||
{
|
||||
"term": "QEMU",
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Emulador e virtualizador de máquinas de código aberto. O Proxmox combina-o com KVM para executar VM com desempenho próximo do nativo."
|
||||
},
|
||||
{
|
||||
"term": "rclone",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Ferramenta de linha de comandos compatível com vários serviços, incluindo Google Drive, Dropbox, OneDrive, Mega e S3. O guia de cópias na nuvem utiliza-a para montar armazenamento remoto num diretório para arquivos vzdump.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Cópias para a nuvem pessoal",
|
||||
"href": "/guides/backup_cloud"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Samba / SMB / CIFS",
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Família de protocolos Microsoft para partilha de ficheiros. <strong>SMB</strong> é o protocolo, <strong>Samba</strong> a implementação aberta para Linux e <strong>CIFS</strong> um dialeto SMB antigo. Regista-se no Proxmox com <code>pvesm add cifs</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gerenciador de armazenamento e compartilhamento",
|
||||
"href": "/docs/storage-share"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "SeaBIOS",
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Implementação aberta de BIOS clássico utilizada pelo QEMU. Firmware predefinido de novas VM, salvo escolha de OVMF. Adequado a sistemas antigos e instalações Linux que não exigem UEFI."
|
||||
},
|
||||
{
|
||||
"term": "smartctl / SMART",
|
||||
"aliases": [
|
||||
"Self-Monitoring, Analysis and Reporting Technology"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Diagnóstico integrado dos discos para estado, erros e resultados dos testes internos. A ferramenta é <code>smartctl</code>, do pacote <code>smartmontools</code>; <code>nvme-cli</code> acrescenta comandos específicos para NVMe.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Integridade e teste do disco SMART",
|
||||
"href": "/docs/disk-manager/smart-disk-test"
|
||||
},
|
||||
{
|
||||
"label": "Comandos de armazenamento → seção SMART",
|
||||
"href": "/docs/help-info/storage-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "systemd / systemctl / journalctl",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Sistema de inicialização Debian / Proxmox. <code>systemctl</code> gere serviços: iniciar, parar, ativar e consultar o estado. <code>journalctl</code> lê o registo binário do <code>systemd-journald</code>."
|
||||
},
|
||||
{
|
||||
"term": "sysctl",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Ferramenta para ler e alterar parâmetros do kernel. As definições persistentes ficam normalmente em <code>/etc/sysctl.d/*.conf</code>; o suporte de <code>/etc/sysctl.conf</code> depende do serviço de carregamento. A pós-instalação do ProxMenux oferece um perfil sysctl.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Pós- instalação: Rede",
|
||||
"href": "/docs/post-install/network"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "trixie",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Codinome para Debian 13, a base de SO para Proxmox VE 9. Predecessor: <em>bookworm</em> (debian 12 / PVE 8).",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Atualize PVE 8 para PVE 9",
|
||||
"href": "/docs/utils/upgrade-pve8-pve9"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "udev",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Gestor de dispositivos Linux. Responde a eventos de hardware e cria ou remove entradas em <code>/dev</code>. As regras em <code>/etc/udev/rules.d/</code> podem fixar nomes de interface por MAC, criar dispositivos NVIDIA ao carregar o controlador e outras tarefas."
|
||||
},
|
||||
{
|
||||
"term": "UID / GID idmap",
|
||||
"aliases": [
|
||||
"Mudança UID"
|
||||
],
|
||||
"category": "Linux",
|
||||
"definitionRich": "Com o mapeamento predefinido dos LXC <strong>sem privilégios</strong>, UID e GID no anfitrião são deslocados em <code>+100000</code>: UID 0 corresponde a 100000 e 1000 a 101000. Mapeamentos personalizados podem diferir; os proprietários nos bind mounts devem corresponder ao mapeamento.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Pontos de montagem LXC",
|
||||
"href": "/docs/storage-share/lxc-mount-points"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "Contêiner sem privilégios",
|
||||
"category": "Linux",
|
||||
"definitionRich": "Contentor LXC cujo root corresponde a um UID sem privilégios no anfitrião, normalmente 100000. Reduz os privilégios, embora partilhe o kernel. O acesso ao hardware pode ser configurado com permissões e mapeamentos adequados; o modo privilegiado não é sempre necessário."
|
||||
},
|
||||
{
|
||||
"term": "VFIO",
|
||||
"aliases": [
|
||||
"Função virtual E/S"
|
||||
],
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Sistema do kernel Linux para controladores seguros no espaço de utilizador, usado na atribuição direta de dispositivos PCIe a VM. Utiliza <code>vfio</code>, <code>vfio_iommu_type1</code> e <code>vfio_pci</code>, configurados em <code>/etc/modprobe.d/vfio.conf</code>.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Post-Install: Virtualização",
|
||||
"href": "/docs/post-install/virtualization"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "VirtIO",
|
||||
"category": "Virtualização",
|
||||
"definitionRich": "Família de controladores paravirtualizados para rede, armazenamento, memória dinâmica e GPU. Evitam a sobrecarga de emular hardware antigo, como e1000 ou IDE. O convidado precisa dos controladores: integrados no Linux e disponíveis numa ISO separada para Windows."
|
||||
},
|
||||
{
|
||||
"term": "VLAN",
|
||||
"aliases": [
|
||||
"Rede local virtual"
|
||||
],
|
||||
"category": "Rede",
|
||||
"definitionRich": "Etiquetas 802.1Q que dividem uma rede física em várias redes lógicas. Configuram-se por ponte ou interface em <code>/etc/network/interfaces</code>."
|
||||
},
|
||||
{
|
||||
"term": "VM",
|
||||
"aliases": [
|
||||
"Máquina Virtual"
|
||||
],
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Máquina virtual gerida pelo Proxmox com QEMU/KVM, com kernel próprio. O VMID numérico corresponde a <code>/etc/pve/qemu-server/<VMID>.conf</code>. Geralmente tem mais sobrecarga que LXC, com isolamento através de um kernel separado.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Gestão de VM e contentores",
|
||||
"href": "/docs/help-info/vm-ct-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "vzdump",
|
||||
"category": "Proxmox",
|
||||
"definitionRich": "Ferramenta de cópias Proxmox para VM e CT. Os arquivos em ficheiros <strong>não são incrementais</strong>; os destinos PBS permitem transferências incrementais. As tarefas configuram modo (snapshot / suspend / stop), compressão (como zstd, gzip ou lzo), retenção e notificações.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de cópias e restauro",
|
||||
"href": "/docs/help-info/backup-commands"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"term": "ZFS",
|
||||
"aliases": [
|
||||
"Zettabyte File System"
|
||||
],
|
||||
"category": "Armazenamento",
|
||||
"definitionRich": "Sistema de ficheiros e gestor de volumes com snapshots, replicação send/receive, somas de verificação e compressão. Pode reparar dados corrompidos se existir uma cópia redundante válida. A cache <strong>ARC</strong> utiliza RAM e pode ser limitada.",
|
||||
"seeAlso": [
|
||||
{
|
||||
"label": "Comandos de gestão ZFS",
|
||||
"href": "/docs/help-info/zfs-commands"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,235 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de cópia de segurança Proxmox — vzdump, qmrestore, pct restore | ProxMenux",
|
||||
"description": "Referência dos comandos de cópia de segurança e restauro do Proxmox VE: vzdump para VM e contentores LXC, qmrestore para VM, pct restore para contentores, cópias agendadas em /etc/pve/jobs.cfg, scripts de hook e caminhos a excluir.",
|
||||
"ogTitle": "Comandos de cópia de segurança Proxmox — vzdump, qmrestore, pct restore",
|
||||
"ogDescription": "Referência dos comandos vzdump, qmrestore e pct restore para criar e restaurar cópias de VM e contentores LXC Proxmox.",
|
||||
"twitterTitle": "Comandos de cópia de segurança Proxmox | ProxMenux",
|
||||
"twitterDescription": "Comandos vzdump, qmrestore e pct restore para criar e restaurar cópias de VM e contentores Proxmox."
|
||||
},
|
||||
"header": {
|
||||
"title": "Cópias de segurança e restauro",
|
||||
"description": "Referência comentada dos comandos vzdump, qmrestore e pct restore para as cópias de segurança Proxmox. Inclui agendamento, opções avançadas como scripts de hook, caminhos a excluir e prioridade de E/S, além da gestão dos ficheiros de cópia.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Três modos de backup",
|
||||
"body": "Nas VM, <strong>snapshot</strong> faz uma cópia em funcionamento sem exigir snapshots do armazenamento. <strong>suspend</strong> suspende primeiro a VM, sem necessariamente melhorar a consistência. <strong>stop</strong> desliga-a primeiro; se estava em execução, pode retomar após o início da cópia. Em LXC é diferente: snapshot exige armazenamento com snapshots, suspend usa duas passagens rsync e stop mantém o contentor parado durante toda a cópia."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Cópia de segurança de VM",
|
||||
"commands": [
|
||||
{
|
||||
"command": "vzdump <vmid>",
|
||||
"description": "Criar uma cópia de segurança de uma VM ou de um CT específico"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --storage <storage>",
|
||||
"description": "Backup VM para armazenamento específico"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --mode snapshot",
|
||||
"description": "Criar cópia de segurança de instantâneo (para VMs)"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --mode suspend",
|
||||
"description": "Suspender a VM antes da cópia em funcionamento, modo suspend antigo"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --mode stop",
|
||||
"description": "Desligar a VM antes de iniciar a cópia"
|
||||
},
|
||||
{
|
||||
"command": "vzdump --all",
|
||||
"description": "Backup de todas as VMs e contentores"
|
||||
},
|
||||
{
|
||||
"command": "vzdump --all --exclude <vmid1>,<vmid2>",
|
||||
"description": "Cópia de segurança de todos, exceto VMs especificadas"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Opções de Cópia de Segurança",
|
||||
"commands": [
|
||||
{
|
||||
"command": "vzdump <vmid> --compress zstd",
|
||||
"description": "Usar compressão zstd para backup"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --compress gzip --pigz <threads>",
|
||||
"description": "Usar pigz com várias threads"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --storage <storage> --notes-template <text>",
|
||||
"description": "Adicionar notas ao backup"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --mailto <email>",
|
||||
"description": "Enviar um e- mail de notificação"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --prune-backups keep-last=<n>",
|
||||
"description": "Manter apenas n cópias de segurança por VM"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --stdexcludes 0",
|
||||
"description": "Não excluir arquivos temporários"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --quiet 1",
|
||||
"description": "Suprimir as mensagens de saída"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Restaurar backups",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qmrestore <backup-file> <vmid>",
|
||||
"description": "Restaurar VM de backup"
|
||||
},
|
||||
{
|
||||
"command": "qmrestore <backup-file> <vmid> --storage <storage>",
|
||||
"description": "Restaurar para armazenamento específico"
|
||||
},
|
||||
{
|
||||
"command": "qmrestore <backup-file> <vmid> --unique",
|
||||
"description": "Restaurar a VM com novos endereços MAC aleatórios"
|
||||
},
|
||||
{
|
||||
"command": "pct restore <vmid> <backup-file>",
|
||||
"description": "Restaurar um contentor a partir de uma cópia de segurança"
|
||||
},
|
||||
{
|
||||
"command": "pct restore <vmid> <backup-file> --storage <storage>",
|
||||
"description": "Restaurar o contentor para um armazenamento específico"
|
||||
},
|
||||
{
|
||||
"command": "pct restore <vmid> <backup-file> --rootfs <storage>:<size-GiB>",
|
||||
"description": "Restaurar com o disco raiz no armazenamento e tamanho escolhidos"
|
||||
},
|
||||
{
|
||||
"command": "pct restore <vmid> <backup-file> --unprivileged 1",
|
||||
"description": "Restaurar como CT sem privilégios"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de cópias de segurança",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ls -la /var/lib/vz/dump/",
|
||||
"description": "Listar as cópias de segurança na localização padrão"
|
||||
},
|
||||
{
|
||||
"command": "find /var/lib/vz/dump/ -name \"*.vma*\"",
|
||||
"description": "Encontrar cópias de segurança de VM"
|
||||
},
|
||||
{
|
||||
"command": "find /var/lib/vz/dump/ -name \"*.tar*\"",
|
||||
"description": "Procurar backups de contentores"
|
||||
},
|
||||
{
|
||||
"command": "pvesm list <storage> --content backup",
|
||||
"description": "Lista de backups em armazenamento específico"
|
||||
},
|
||||
{
|
||||
"command": "rm /var/lib/vz/dump/<backup-file>",
|
||||
"description": "Apagar um ficheiro de cópia de segurança"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/vzdump.conf",
|
||||
"description": "Mostrar configuração de backup"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Cópias de segurança agendadas",
|
||||
"commands": [
|
||||
{
|
||||
"command": "cat /etc/pve/jobs.cfg",
|
||||
"description": "Mostrar agendamento de backup"
|
||||
},
|
||||
{
|
||||
"command": "nano /etc/vzdump.conf",
|
||||
"description": "Editar configuração de backup"
|
||||
},
|
||||
{
|
||||
"command": "systemctl list-timers",
|
||||
"description": "Listar temporizadores do systemd"
|
||||
},
|
||||
{
|
||||
"command": "systemctl status cron",
|
||||
"description": "Verificar o estado do serviço cron"
|
||||
},
|
||||
{
|
||||
"command": "pvenode task list --typefilter vzdump",
|
||||
"description": "Listar tarefas de cópia de segurança concluídas"
|
||||
},
|
||||
{
|
||||
"command": "pvenode task log <upid>",
|
||||
"description": "Mostrar o registo de uma tarefa de cópia pelo respetivo UPID"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Operações Avançadas",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qmrestore <backup> <vmid> --force",
|
||||
"description": "Forçar o restauro, substituindo a VM existente"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --dumpdir <directory>",
|
||||
"description": "Especificar diretório de backup personalizado"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --script <script>",
|
||||
"description": "Executar um script de hook durante a cópia de segurança"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --exclude-path <path>",
|
||||
"description": "Excluir caminhos específicos da cópia de segurança"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --ionice <priority>",
|
||||
"description": "Definir a prioridade de E/ S para o processo de backup"
|
||||
},
|
||||
{
|
||||
"command": "vzdump <vmid> --lockwait <minutes>",
|
||||
"description": "Esperar pelo bloqueio"
|
||||
},
|
||||
{
|
||||
"command": "qm importdisk <vmid> <disk-image> <storage>",
|
||||
"description": "Importar um ficheiro de imagem de disco (por exemplo raw, qcow2 ou vmdk) como disco não utilizado, não um arquivo de backup vzdump"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"testRestores": {
|
||||
"title": "Teste suas restaurações",
|
||||
"bodyRich": "Restaure periodicamente uma cópia para um VMID de teste livre com <code>qmrestore --unique</code>, inicie a VM numa rede isolada e verifique o conteúdo. A opção unique gera novos endereços MAC, mas não altera IP estáticos nem definições de aplicações. Teste os contentores da mesma forma com <code>pct restore</code>."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/help-info/vm-ct-commands",
|
||||
"label": "Gestão de VM e CT",
|
||||
"tail": " — comandos de ciclo de vida qm e pct."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Armazenamento e Discos",
|
||||
"tail": " — gestão de armazenamento de pvesm."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,162 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de passthrough de GPU no Proxmox — lspci, VFIO, IOMMU, qm set hostpci | ProxMenux",
|
||||
"description": "Referência para passthrough de GPU no Proxmox VE: identificação de dispositivos com lspci, módulos VFIO, grupos IOMMU (intel_iommu / amd_iommu), atualizações de GRUB e initramfs, qm set hostpci0 e configuração de GPUs NVIDIA, AMD e Intel.",
|
||||
"ogTitle": "Comandos de passthrough de GPU no Proxmox — lspci, VFIO, IOMMU, qm set hostpci",
|
||||
"ogDescription": "Referência para inspecionar e configurar a passagem de GPU em Proxmox VE — dispositivos PCI, módulos VFIO, grupos IOMMU, parâmetros de inicialização do kernel, qm set hostpci.",
|
||||
"twitterTitle": "Comandos de passthrough de GPU no Proxmox | ProxMenux",
|
||||
"twitterDescription": "Inspecione dispositivos PCI, configure VFIO e IOMMU e anexe GPUs a VMs em Proxmox VE."
|
||||
},
|
||||
"header": {
|
||||
"title": "Passagem de GPU",
|
||||
"description": "Referência para inspecionar e configurar passthrough de GPU / TPU no Proxmox: identificação de dispositivos (lspci), módulos VFIO, validação de IOMMU, atualizações initramfs / GRUB e configuração por VM (qm set hostpci, machine q35, bios ovmf).",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "IOMMU deve estar activado em BIOS / UEFI",
|
||||
"body": "Ative primeiro IOMMU no firmware: procure <em>VT-d</em>, <em>AMD-Vi</em> ou <em>IOMMU</em> na BIOS/UEFI. No Linux, está ativo por predefinição em AMD e em Intel com kernels Proxmox 6.8 ou posteriores. Os kernels Intel anteriores podem precisar de <code>intel_iommu=on</code>. A opção <code>iommu=pt</code> controla o modo passthrough de IOMMU e não justifica desativar indiscriminadamente o framebuffer do anfitrião."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Identificação do Dispositivo",
|
||||
"commands": [
|
||||
{
|
||||
"command": "lspci -nn | grep -i nvidia",
|
||||
"description": "Listar dispositivos PCI NVIDIA"
|
||||
},
|
||||
{
|
||||
"command": "lspci -nn | grep -i vga",
|
||||
"description": "Listar todos os dispositivos compatíveis com VGA"
|
||||
},
|
||||
{
|
||||
"command": "lspci -nn | grep -i amd",
|
||||
"description": "Listar os dispositivos PCI AMD"
|
||||
},
|
||||
{
|
||||
"command": "lspci -nnk | grep -A3 VGA",
|
||||
"description": "Listar dispositivos VGA com drivers do kernel"
|
||||
},
|
||||
{
|
||||
"command": "lspci -v -s <PCI_ID>",
|
||||
"description": "Mostrar informações detalhadas para um dispositivo PCI específico"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Configuração do VFIO",
|
||||
"commands": [
|
||||
{
|
||||
"command": "dmesg | grep -i vfio",
|
||||
"description": "Verificar as mensagens do módulo VFIO"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/modprobe.d/vfio.conf",
|
||||
"description": "Reveja a configuração de passagem do VFIO"
|
||||
},
|
||||
{
|
||||
"command": "ls -la /etc/modprobe.d/",
|
||||
"description": "Listar todos os arquivos de configuração de modprobe"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/modules",
|
||||
"description": "Mostrar os módulos carregados na hora de arranque"
|
||||
},
|
||||
{
|
||||
"command": "lsmod | grep vfio",
|
||||
"description": "Verificar se os módulos VFIO estão carregados"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Configuração do IOMMU",
|
||||
"commands": [
|
||||
{
|
||||
"command": "cat /etc/default/grub",
|
||||
"description": "Reveja as opções GRUB para IOMMU"
|
||||
},
|
||||
{
|
||||
"command": "update-grub",
|
||||
"description": "Aplicar as alterações do GRUB"
|
||||
},
|
||||
{
|
||||
"command": "dmesg | grep -i iommu",
|
||||
"description": "Verificar as mensagens IOMMU no registo do kernel"
|
||||
},
|
||||
{
|
||||
"command": "dmesg | grep -e DMAR -e IOMMU",
|
||||
"description": "Verificar as mensagens DMAR e IOMMU"
|
||||
},
|
||||
{
|
||||
"command": "find /sys/kernel/iommu_groups/ -type l | sort -V",
|
||||
"description": "Listar grupos IOMMU"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Atualizações do sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "update-initramfs -u",
|
||||
"description": "Aplicar alterações no initramfs (VFIO)"
|
||||
},
|
||||
{
|
||||
"command": "update-initramfs -u -k all",
|
||||
"description": "Atualizar initramfs para todos os kernels"
|
||||
},
|
||||
{
|
||||
"command": "cat /proc/cmdline",
|
||||
"description": "Mostrar os parâmetros de arranque do kernel actuais"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Configuração da VM",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qm config <vmid> | grep hostpci",
|
||||
"description": "Mostrar a configuração de passthrough PCI de uma VM"
|
||||
},
|
||||
{
|
||||
"command": "qm set <vmid> -hostpci0 <PCI_ID>,pcie=1,x-vga=1",
|
||||
"description": "Adicionar passthrough de GPU a uma VM"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/pve/qemu-server/<vmid>.conf",
|
||||
"description": "Ver o ficheiro de configuração VM"
|
||||
},
|
||||
{
|
||||
"command": "qm set <vmid> -machine q35",
|
||||
"description": "Configurar a VM para usar o chipset Q35, recomendado para passthrough"
|
||||
},
|
||||
{
|
||||
"command": "qm set <vmid> -bios ovmf",
|
||||
"description": "Configurar a VM com UEFI/OVMF, recomendado se a ROM da GPU suportar UEFI"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"afterChangesTip": {
|
||||
"title": "Após alterar as configurações GRUB ou modprobe",
|
||||
"bodyRich": "Em anfitriões com GRUB, aplique os parâmetros de arranque com <code>update-grub</code>. Atualize os módulos com <code>update-initramfs -u -k all</code> e reinicie. Outros gestores de arranque requerem o seu próprio procedimento. Verifique <code>cat /proc/cmdline</code> (parâmetros do kernel), <code>dmesg | grep -i iommu</code> (IOMMU inicializado) e <code>find /sys/kernel/iommu_groups/ -type l | sort -V</code> (grupos presentes)."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"label": "Adicionar GPU à VM (passthrough)",
|
||||
"tail": " — fluxo interactivo de ProxMenux."
|
||||
},
|
||||
{
|
||||
"href": "/docs/hardware/igpu-acceleration-lxc",
|
||||
"label": "Adicionar GPU ao LXC",
|
||||
"tail": " — partilhar o acesso aos dispositivos GPU do anfitrião com um contentor LXC."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Referência de comandos Proxmox — qm, pct, vzdump, zpool, pveversion | ProxMenux",
|
||||
"description": "Seleção de comandos essenciais do Proxmox VE e Linux por tema: inspeção do sistema, gestão de VM e LXC (qm / pct), armazenamento e discos, rede, atualizações, passthrough de GPU, ZFS, cópias de segurança e restauro, e ferramentas de terminal para o dia a dia.",
|
||||
"ogTitle": "Referência de comandos Proxmox — qm, pct, vzdump, zpool",
|
||||
"ogDescription": "Seleção de comandos úteis do Proxmox VE e Linux por tema: sistema, VM/CT, armazenamento, rede, atualizações, passthrough de GPU, ZFS, cópias de segurança e ferramentas CLI.",
|
||||
"twitterTitle": "Referência de comandos Proxmox | ProxMenux",
|
||||
"twitterDescription": "Seleção de comandos úteis do Proxmox VE e Linux, agrupados por tema."
|
||||
},
|
||||
"header": {
|
||||
"title": "Ajuda e informações",
|
||||
"description": "Seleção de comandos úteis do Linux e Proxmox VE por tema. As nove categorias abrangem desde uma consulta rápida com pveversion até sequências de zfs send/receive com várias linhas. É uma referência central que complementa as secções de GPU, discos e partilhas do ProxMenux.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que é isto?",
|
||||
"body": "Um catálogo de referência dos comandos que você realmente usa em um host Proxmox, agrupados por tópico. Dentro do ProxMenux você pode escolher um número para executar um comando diretamente ou colar o seu próprio no prompt; neste site cada categoria é uma tabela de copy-paste."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir o menu",
|
||||
"body": "Do menu principal do ProxMenux, pressione <kbd>h</kbd>. Você verá isto:",
|
||||
"imageAlt": "Menu de ajuda e informação com 9 categorias de comandos"
|
||||
},
|
||||
"categories": {
|
||||
"heading": "As nove categorias",
|
||||
"options": [
|
||||
{
|
||||
"icon": "Terminal",
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"title": "Comandos úteis do sistema",
|
||||
"description": "pveversion, uptime, free, journalctl, hostnamectl, informações do utilizador atual, auditoria com lynis e fastfetch."
|
||||
},
|
||||
{
|
||||
"icon": "Cpu",
|
||||
"href": "/docs/help-info/vm-ct-commands",
|
||||
"title": "Gestão de VM e CT",
|
||||
"description": "qm list / config / start / stop / migrate, pct list / config / enter, snapshots e clonagem."
|
||||
},
|
||||
{
|
||||
"icon": "HardDrive",
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"title": "Armazenamento e Discos",
|
||||
"description": "lsblk, blkid, smartctl, informações de montagem, pvesm status e comandos LVM."
|
||||
},
|
||||
{
|
||||
"icon": "Network",
|
||||
"href": "/docs/help-info/network-commands",
|
||||
"title": "Comandos de rede",
|
||||
"description": "ip / ss / nmcli, inspeção de bridges, ping / traceroute, consultas DNS e fail2ban-client."
|
||||
},
|
||||
{
|
||||
"icon": "Package",
|
||||
"href": "/docs/help-info/update-commands",
|
||||
"title": "Atualizações e pacotes",
|
||||
"description": "apt update / dist-upgrade, apt-cache policy, consultas dpkg e verificação dos ficheiros de repositórios."
|
||||
},
|
||||
{
|
||||
"icon": "Cpu",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"title": "Passagem de GPU",
|
||||
"description": "Verificações com lspci / dmesg, confirmação da ativação de IOMMU, associação a vfio-pci e uso da GPU pelo anfitrião."
|
||||
},
|
||||
{
|
||||
"icon": "Database",
|
||||
"href": "/docs/help-info/zfs-commands",
|
||||
"title": "Gestão de ZFS",
|
||||
"description": "Comandos zpool / zfs para estado, datasets, snapshots, send/receive, ajuste de ARC e TRIM."
|
||||
},
|
||||
{
|
||||
"icon": "Archive",
|
||||
"href": "/docs/help-info/backup-commands",
|
||||
"title": "Cópias de segurança e restauro",
|
||||
"description": "vzdump, qmrestore / pct restore, ferramentas do Proxmox Backup Server e operações com snapshots."
|
||||
},
|
||||
{
|
||||
"icon": "Wrench",
|
||||
"href": "/docs/help-info/tools-commands",
|
||||
"title": "Ferramentas CLI do sistema",
|
||||
"description": "tmux, screen, htop / btop, ncdu, jq, dig, lsof, watch — ferramentas de administração para o dia a dia."
|
||||
}
|
||||
]
|
||||
},
|
||||
"tip": {
|
||||
"title": "Pesquisada a partir da pesquisa global",
|
||||
"body": "A pesquisa da documentação indexa todos os comandos destas páginas. Se recordar uma opção ou fragmento, mas não a página, use a barra de pesquisa no topo para encontrar diretamente a entrada certa."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de rede Proxmox — ip, ping, ss, pve-firewall, iptables | ProxMenux",
|
||||
"description": "Referência de comandos de rede do anfitrião Proxmox VE: ip / ip link / ip addr, ping, traceroute, mtr, ss, ethtool, dig, nslookup, além de pve-firewall, iptables e nftables para filtragem. Inspeção de bridges, agregações de ligações e VLAN.",
|
||||
"ogTitle": "Comandos de rede Proxmox — ip, ping, ss, pve-firewall, iptables",
|
||||
"ogDescription": "Referência de comandos de rede para Proxmox VE — inspeção de interface, testes de conectividade, monitoramento, firewall (pve-firewall, iptables, nftables) e pesquisas de DNS.",
|
||||
"twitterTitle": "Comandos de rede Proxmox | ProxMenux",
|
||||
"twitterDescription": "Comandos de inspeção, teste, configuração e firewall de rede para Proxmox VE."
|
||||
},
|
||||
"header": {
|
||||
"title": "Comandos de rede",
|
||||
"description": "Referência para a rede de host Proxmox: informações de interface, testes de conectividade, configuração, monitoramento de tráfego e gerenciamento de firewall. Combina ip / ss / nmcli / ethtool / tcpdump / pve-firewall.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Inventário rápido da interface",
|
||||
"body": "<code>ip a</code> mostra cada interface com os respetivos endereços IP e MAC. <code>ip r</code> mostra a tabela de encaminhamento. Em conjunto, respondem em segundos à maioria das dúvidas sobre a configuração de uma interface."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Informação da Rede",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ip a",
|
||||
"description": "Mostrar interfaces de rede e IPs"
|
||||
},
|
||||
{
|
||||
"command": "ip r",
|
||||
"description": "Mostrar tabela de roteamento"
|
||||
},
|
||||
{
|
||||
"command": "ip -s link",
|
||||
"description": "Mostrar estatísticas de tráfego por interface"
|
||||
},
|
||||
{
|
||||
"command": "brctl show",
|
||||
"description": "Mostrar pontes de rede configuradas"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/network/interfaces",
|
||||
"description": "Mostrar configuração de rede bruta"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Testes em Rede",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ping <host>",
|
||||
"description": "Verifique a conectividade com outro host"
|
||||
},
|
||||
{
|
||||
"command": "traceroute <host>",
|
||||
"description": "Rastrear a rota para uma máquina"
|
||||
},
|
||||
{
|
||||
"command": "mtr <host>",
|
||||
"description": "Combine ping e traceroute em tempo real"
|
||||
},
|
||||
{
|
||||
"command": "dig <domain>",
|
||||
"description": "Pesquisa de DNS para um domínio"
|
||||
},
|
||||
{
|
||||
"command": "nslookup <domain>",
|
||||
"description": "Pesquisa alternativa DNS"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Configuração de rede",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ifreload -a",
|
||||
"description": "Recarregar configuração de rede (ifupdown2)"
|
||||
},
|
||||
{
|
||||
"command": "ethtool <iface>",
|
||||
"description": "Mostrar informações do dispositivo Ethernet"
|
||||
},
|
||||
{
|
||||
"command": "resolvectl status",
|
||||
"description": "Mostrar status de resolução DNS"
|
||||
},
|
||||
{
|
||||
"command": "nmcli device show",
|
||||
"description": "Mostrar os detalhes do dispositivo de rede (se for usado o NetworkManager)"
|
||||
},
|
||||
{
|
||||
"command": "ip link set <iface> up",
|
||||
"description": "Ativar uma interface de rede"
|
||||
},
|
||||
{
|
||||
"command": "ip link set <iface> down",
|
||||
"description": "Desativar uma interface de rede"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Monitorização da rede",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ss -tuln",
|
||||
"description": "Mostrar portas de escuta (TCP/UDP)"
|
||||
},
|
||||
{
|
||||
"command": "netstat -tuln",
|
||||
"description": "Alternativa para mostrar portas de escuta"
|
||||
},
|
||||
{
|
||||
"command": "lsof -i",
|
||||
"description": "Listar arquivos de rede abertos e conexões"
|
||||
},
|
||||
{
|
||||
"command": "tcpdump -i <iface>",
|
||||
"description": "Capturar pacotes na interface"
|
||||
},
|
||||
{
|
||||
"command": "iftop -i <iface>",
|
||||
"description": "Monitorar a utilização da largura de banda na interface"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão da firewall",
|
||||
"commands": [
|
||||
{
|
||||
"command": "iptables -L -n -v",
|
||||
"description": "Mostrar regras de firewall ativas (iptables)"
|
||||
},
|
||||
{
|
||||
"command": "nft list ruleset",
|
||||
"description": "Mostrar regras nftables"
|
||||
},
|
||||
{
|
||||
"command": "pve-firewall status",
|
||||
"description": "Verifique o status do firewall Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "pve-firewall compile",
|
||||
"description": "Compilar regras de firewall para todos os nós"
|
||||
},
|
||||
{
|
||||
"command": "pve-firewall reload",
|
||||
"description": "Recarregar regras de firewall Proxmox"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"iptablesTip": {
|
||||
"title": "iptables vs nftables",
|
||||
"bodyRich": "O serviço clássico <code>pve-firewall</code> gera regras iptables. O serviço alternativo proxmox-firewall usa <strong>nftables</strong>. Inspecione o backend iptables com <code>iptables -L -n -v</code> e o backend nftables com <code>nft list ruleset</code>. Use as ferramentas do backend ativo; estas listagens não são intercambiáveis."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/network",
|
||||
"label": "Gerenciamento de rede",
|
||||
"tail": " — ferramentas de rede interactivas ProxMenux (análise de ponte, nomes persistentes, monitorização)."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/tools-commands",
|
||||
"label": "Ferramentas CLI do sistema",
|
||||
"tail": " — mais instrumentos de monitorização da rede."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de armazenamento e discos Proxmox — lsblk, LVM, pvesm, qm importdisk | ProxMenux",
|
||||
"description": "Comandos de armazenamento e discos no Proxmox VE: lsblk, blkid, parted, lvdisplay, vgdisplay, pvs, mount, df, du, ncdu, pvesm status, qm importdisk e qemu-img convert para operações em discos de VM.",
|
||||
"ogTitle": "Comandos de armazenamento e discos Proxmox — lsblk, LVM, pvesm, qm importdisk",
|
||||
"ogDescription": "Referência de comandos de armazenamento e disco em Proxmox VE — inspeção de disco, LVM, montagens, gerenciamento de armazenamento Proxmox, importação de disco VM e conversão de imagem.",
|
||||
"twitterTitle": "Comandos de armazenamento Proxmox | ProxMenux",
|
||||
"twitterDescription": "Inspeção de disco, informações de montagem, gerenciamento LVM, armazenamento Proxmox e comandos de importação / conversão de disco VM."
|
||||
},
|
||||
"header": {
|
||||
"title": "Armazenamento e Discos",
|
||||
"description": "Referência para inspeção de armazenamento em hosts Proxmox: dispositivos de bloco, partições, montagens, volumes LVM, configuração de armazenamento Proxmox e algumas operações de disco VM (importdisk, qemu-img convert).",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Inventário rápido do disco",
|
||||
"body": "<code>lsblk</code> mostra os dispositivos de bloco e partições em árvore. Consulte os identificadores persistentes com <code>ls -lh /dev/disk/by-id/</code>: no mesmo disco, mantêm-se normalmente após reinícios ou alterações na ordem dos dispositivos. Substituir o disco ou alterar como o controlador expõe a identidade pode mudar o caminho by-id."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Informações do disco",
|
||||
"commands": [
|
||||
{
|
||||
"command": "lsblk",
|
||||
"description": "Listar dispositivos e partições de bloco"
|
||||
},
|
||||
{
|
||||
"command": "fdisk -l",
|
||||
"description": "Listar discos com informações detalhadas"
|
||||
},
|
||||
{
|
||||
"command": "blkid",
|
||||
"description": "Mostrar UUID e tipo de sistema de arquivos de dispositivos de bloco"
|
||||
},
|
||||
{
|
||||
"command": "ls -lh /dev/disk/by-id/",
|
||||
"description": "Listar identificadores persistentes de disco"
|
||||
},
|
||||
{
|
||||
"command": "parted -l",
|
||||
"description": "Layout detalhado da partição com informações GPT"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Utilização do Armazenamento",
|
||||
"commands": [
|
||||
{
|
||||
"command": "df -h",
|
||||
"description": "Mostrar o uso do disco por ponto de montagem"
|
||||
},
|
||||
{
|
||||
"command": "du -sh /path",
|
||||
"description": "Mostrar tamanho de um diretório"
|
||||
},
|
||||
{
|
||||
"command": "mount | grep ^/dev",
|
||||
"description": "Mostrar dispositivos de armazenamento montados"
|
||||
},
|
||||
{
|
||||
"command": "cat /proc/mounts",
|
||||
"description": "Mostrar todas as montagens ativas do kernel"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de LVM",
|
||||
"commands": [
|
||||
{
|
||||
"command": "pvdisplay",
|
||||
"description": "Exibir volumes físicos (LVM)"
|
||||
},
|
||||
{
|
||||
"command": "vgdisplay",
|
||||
"description": "Exibir grupos de volumes (LVM)"
|
||||
},
|
||||
{
|
||||
"command": "lvdisplay",
|
||||
"description": "Exibir volumes lógicos (LVM)"
|
||||
},
|
||||
{
|
||||
"command": "pvs",
|
||||
"description": "Saída concisa de volumes físicos"
|
||||
},
|
||||
{
|
||||
"command": "vgs",
|
||||
"description": "Saída concisa de grupos de volumes"
|
||||
},
|
||||
{
|
||||
"command": "lvs",
|
||||
"description": "Saída concisa de volumes lógicos"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Armazenamento Proxmox",
|
||||
"commands": [
|
||||
{
|
||||
"command": "cat /etc/pve/storage.cfg",
|
||||
"description": "Mostrar configuração de armazenamento Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "pvesm status",
|
||||
"description": "Mostrar o status de todos os pools de armazenamento"
|
||||
},
|
||||
{
|
||||
"command": "pvesm status --enabled 1",
|
||||
"description": "Listar armazenamentos configurados e ativos"
|
||||
},
|
||||
{
|
||||
"command": "pvesm list <storage>",
|
||||
"description": "Listar o conteúdo do armazenamento específico"
|
||||
},
|
||||
{
|
||||
"command": "pvesm scan nfs <server>",
|
||||
"description": "Descobrir as exportações NFS de um servidor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Acções do Disco",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qm importdisk <vmid> <image_path> <storage>",
|
||||
"description": "Importar a imagem como disco não utilizado da VM e ligá-lo depois"
|
||||
},
|
||||
{
|
||||
"command": "qm set <vmid> -<bus><index> <disk_path>",
|
||||
"description": "Atribuir disco físico ao VM (modo de passagem)"
|
||||
},
|
||||
{
|
||||
"command": "qemu-img convert -O <format> <input> <output>",
|
||||
"description": "Converter o formato de uma imagem de disco sem uso ativo"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Estado SMART do disco",
|
||||
"commands": [
|
||||
{
|
||||
"command": "smartctl --scan",
|
||||
"description": "Listar os dispositivos com capacidade SMART na máquina"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -i /dev/<disk>",
|
||||
"description": "Informações básicas do dispositivo (modelo, firmware, série)"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -H /dev/<disk>",
|
||||
"description": "Verificação rápida do estado geral: PASSED / FAILED"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -A /dev/<disk>",
|
||||
"description": "Apenas atributos SMART (valores brutos, limiares)"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -a /dev/<disk>",
|
||||
"description": "Informação SMART completa — info + atributos + log de auto-teste"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -t short /dev/<disk>",
|
||||
"description": "Iniciar o auto-teste curto (~2 minutos, é executado em segundo plano)"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -t long /dev/<disk>",
|
||||
"description": "Iniciar um autoteste longo, que pode demorar horas em segundo plano"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -l selftest /dev/<disk>",
|
||||
"description": "Ver log de auto-teste (resultados de testes anteriores)"
|
||||
},
|
||||
{
|
||||
"command": "smartctl -X /dev/<disk>",
|
||||
"description": "Interromper o auto-teste em execução"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Estado do disco NVMe",
|
||||
"commands": [
|
||||
{
|
||||
"command": "nvme list",
|
||||
"description": "Listar os dispositivos NVMe visíveis para o kernel"
|
||||
},
|
||||
{
|
||||
"command": "nvme smart-log /dev/<nvme>",
|
||||
"description": "Log NVMe específico para SMART (temperatura, desgaste, erros)"
|
||||
},
|
||||
{
|
||||
"command": "nvme id-ctrl /dev/<nvme>",
|
||||
"description": "Informação do controlador (modelo, firmware, capacidades)"
|
||||
},
|
||||
{
|
||||
"command": "nvme error-log /dev/<nvme>",
|
||||
"description": "Registro de erro recente do NVMe"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"lvmTip": {
|
||||
"title": "LVM comandos curtos vs longos",
|
||||
"bodyRich": "Ambas as formas estão disponíveis. <code>pvs</code> / <code>vgs</code> / <code>lvs</code> apresentam tabelas compactas com uma linha por volume físico, grupo de volumes ou volume lógico, respetivamente. <code>pvdisplay</code> / <code>vgdisplay</code> / <code>lvdisplay</code> mostram mais detalhes em várias linhas. As formas curtas são práticas nas consultas diárias."
|
||||
},
|
||||
"smartInfo": {
|
||||
"title": "SMART em SATA/SAS e NVMe",
|
||||
"bodyRich": "<strong>Os discos SATA / SAS, incluindo SSD,</strong> podem ser inspecionados com <code>smartctl</code> de <code>smartmontools</code>, instalado por predefinição no Proxmox. Indique o dispositivo, por exemplo <code>/dev/sda</code> ou <code>/dev/sdb</code>. <strong>Os discos NVMe</strong> usam outro protocolo nativo. O <code>smartctl</code> também os suporta; o <code>nvme</code> de <code>nvme-cli</code> oferece consultas específicas a controladores, namespaces e estado NVMe. Instale-o com <code>apt install nvme-cli</code> se faltar."
|
||||
},
|
||||
"selfTestWarn": {
|
||||
"title": "Auto-testes executados em segundo plano",
|
||||
"bodyRich": "Em discos compatíveis, <code>smartctl -t short /dev/<disk></code> e <code>smartctl -t long /dev/<disk></code> iniciam testes em segundo plano e devolvem logo o controlo. Verifique o progresso com <code>smartctl -a /dev/<disk></code>, procurando \"Self-test routine in progress\", ou aguarde e leia <code>smartctl -l selftest /dev/<disk></code>. Os testes curtos costumam demorar dois minutos; os longos podem levar horas. O disco permanece utilizável, mas o desempenho de E/S pode diminuir."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/help-info/zfs-commands",
|
||||
"label": "Gestão de ZFS",
|
||||
"tail": " — comandos zpool / zfs para armazenamento com suporte ZFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/disk-manager",
|
||||
"label": "Gerenciador de disco",
|
||||
"tail": " — fluxos interativos ProxMenux para passagem de disco, importação, formatação, SMART."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,158 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de sistema Proxmox VE — pveversion, uptime, journalctl, systemctl | ProxMenux",
|
||||
"description": "Comandos de sistema do Proxmox VE e Linux para versões, tempo de atividade, memória, serviços, registos e utilizadores, além de ferramentas de auditoria e resumo. Inclui o reinício de um serviço; nem todos os exemplos são apenas de leitura.",
|
||||
"ogTitle": "Comandos de sistema Proxmox VE — pveversion, uptime, journalctl, systemctl",
|
||||
"ogDescription": "Comandos de sistema Proxmox VE e Linux para versão, tempo de atividade, serviços, registos e utilizadores, incluindo gestão de serviços e ferramentas de auditoria.",
|
||||
"twitterTitle": "Comandos de sistema Proxmox VE | ProxMenux",
|
||||
"twitterDescription": "Comandos essenciais de inspeção do sistema para Proxmox VE — versão, estado, serviços, logs, informações do usuário."
|
||||
},
|
||||
"header": {
|
||||
"title": "Comandos úteis do sistema",
|
||||
"description": "Comandos para inspecionar o anfitrião Proxmox: versão, kernel, tempo de atividade, memória, estado da interface web, registos recentes e utilizadores ligados, além de ferramentas de auditoria e resumo. A maioria consulta o estado, mas systemctl restart pveproxy reinicia o proxy web e as auditorias podem escrever relatórios e registos.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que é isto?",
|
||||
"body": "A mesma lista numerada apresentada pelo ProxMenux em <em>Comandos úteis do sistema</em>. Use o botão Copiar para copiar um comando ou consulte a lista para recordar a opção exata."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Informações do sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "pveversion",
|
||||
"description": "Mostrar versão do Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "pveversion -v",
|
||||
"description": "Informações detalhadas da versão do Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "hostnamectl",
|
||||
"description": "Nome do host do sistema e informações do kernel"
|
||||
},
|
||||
{
|
||||
"command": "uname -a",
|
||||
"description": "Informações sobre kernel e arquitetura"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/os-release",
|
||||
"description": "Detalhes da versão do sistema operacional"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Estado do sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "uptime",
|
||||
"description": "Tempo de atividade do sistema"
|
||||
},
|
||||
{
|
||||
"command": "uptime -p",
|
||||
"description": "Tempo de atividade num formato legível"
|
||||
},
|
||||
{
|
||||
"command": "free -h",
|
||||
"description": "RAM e uso de swap"
|
||||
},
|
||||
{
|
||||
"command": "who -b",
|
||||
"description": "Hora da última inicialização do sistema"
|
||||
},
|
||||
{
|
||||
"command": "last -x | grep shutdown",
|
||||
"description": "Encerramentos anteriores"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de Serviços",
|
||||
"commands": [
|
||||
{
|
||||
"command": "systemctl status pveproxy",
|
||||
"description": "Verifique o status da interface da Web do Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "systemctl restart pveproxy",
|
||||
"description": "Reinicie o proxy da IU da Web"
|
||||
},
|
||||
{
|
||||
"command": "journalctl -xe",
|
||||
"description": "Erros e registros do sistema"
|
||||
},
|
||||
{
|
||||
"command": "dmesg -T | tail -n 50",
|
||||
"description": "Últimas 50 linhas de log do kernel"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Informação do Utilizador",
|
||||
"commands": [
|
||||
{
|
||||
"command": "whoami",
|
||||
"description": "Usuário atual"
|
||||
},
|
||||
{
|
||||
"command": "id",
|
||||
"description": "UID, GID e grupos do usuário atual"
|
||||
},
|
||||
{
|
||||
"command": "who",
|
||||
"description": "Usuários logados"
|
||||
},
|
||||
{
|
||||
"command": "w",
|
||||
"description": "Atividade do usuário e tempo de atividade"
|
||||
},
|
||||
{
|
||||
"command": "uptime && w",
|
||||
"description": "Tempo de atividade e quem está logado"
|
||||
},
|
||||
{
|
||||
"command": "cut -d: -f1,3,4 /etc/passwd",
|
||||
"description": "Todos os usuários com UID e GID"
|
||||
},
|
||||
{
|
||||
"command": "getent passwd | column -t -s :",
|
||||
"description": "Tabela de usuário legível (UID, shell, etc.)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ferramentas de Auditoria e Resumo",
|
||||
"commands": [
|
||||
{
|
||||
"command": "lynis audit system",
|
||||
"description": "Execute uma auditoria completa de segurança do sistema"
|
||||
},
|
||||
{
|
||||
"command": "fastfetch",
|
||||
"description": "Exibir resumo do sistema em formato ASCII"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/help-info/update-commands",
|
||||
"label": "Atualizações e pacotes",
|
||||
"tail": " — comandos apt e de atualização do PVE."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/tools-commands",
|
||||
"label": "Ferramentas CLI do sistema",
|
||||
"tail": " — htop, btop, ncdu e ferramentas semelhantes."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,276 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Ferramentas CLI Linux para Proxmox — htop, iftop, journalctl, rsync, tmux | ProxMenux",
|
||||
"description": "Ferramentas CLI Linux para administrar o Proxmox VE no dia a dia: monitorização (htop, atop, glances, iotop), rede (iftop, nmap, mtr, ss), ficheiros e texto (find, grep, journalctl), desempenho (iostat, perf, strace), segurança (fail2ban, lynis, lsof) e administração remota (ssh, rsync, tmux).",
|
||||
"ogTitle": "Ferramentas CLI Linux para Proxmox — htop, iftop, journalctl, rsync, tmux",
|
||||
"ogDescription": "Ferramentas CLI para administrar o Proxmox VE no dia a dia, agrupadas por função: monitorização, rede, ficheiros e texto, desempenho, segurança e administração remota.",
|
||||
"twitterTitle": "Ferramentas CLI Linux para Proxmox | ProxMenux",
|
||||
"twitterDescription": "Ferramentas CLI para a administração diária do Proxmox VE, agrupadas por função."
|
||||
},
|
||||
"header": {
|
||||
"title": "Ferramentas CLI do sistema",
|
||||
"description": "Ferramentas CLI para administrar o anfitrião Proxmox no dia a dia, agrupadas por função: monitorização, rede, ficheiros e texto, análise de desempenho, segurança, administração remota e configuração do sistema.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "A maioria é instalada pelo script de pós-instalação",
|
||||
"body": "Se executou o script de pós-instalação com as opções predefinidas, a maioria destas ferramentas já está instalada. Para as que faltarem, o <utilsLink>instalador de utilitários de sistema</utilsLink> do ProxMenux oferece grupos predefinidos: base, desenvolvimento, rede, análise, entre outros."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Monitorização do sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "htop",
|
||||
"description": "Visualizador de processo interativo com CPU/uso de memória"
|
||||
},
|
||||
{
|
||||
"command": "top",
|
||||
"description": "Mostrar processos Linux em tempo real"
|
||||
},
|
||||
{
|
||||
"command": "atop",
|
||||
"description": "Monitor avançado de sistema e processo"
|
||||
},
|
||||
{
|
||||
"command": "glances",
|
||||
"description": "Ferramenta de monitoramento de sistema com interface web"
|
||||
},
|
||||
{
|
||||
"command": "nmon",
|
||||
"description": "Ferramenta de monitorização do desempenho"
|
||||
},
|
||||
{
|
||||
"command": "iotop",
|
||||
"description": "Monitorar o uso de E/S do disco por processos"
|
||||
},
|
||||
{
|
||||
"command": "vmstat 1",
|
||||
"description": "Reportar estatísticas de memória virtual a cada segundo"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ferramentas de rede",
|
||||
"commands": [
|
||||
{
|
||||
"command": "iftop",
|
||||
"description": "Mostrar a utilização da largura de banda numa interface"
|
||||
},
|
||||
{
|
||||
"command": "nmap <host>",
|
||||
"description": "Exploração de rede e verificação de segurança"
|
||||
},
|
||||
{
|
||||
"command": "tcpdump -i <interface>",
|
||||
"description": "Capturar tráfego de rede"
|
||||
},
|
||||
{
|
||||
"command": "netstat -tuln",
|
||||
"description": "Exibir conexões de rede"
|
||||
},
|
||||
{
|
||||
"command": "ss -tuln",
|
||||
"description": "Outro utilitário para investigar soquetes"
|
||||
},
|
||||
{
|
||||
"command": "mtr <host>",
|
||||
"description": "Ferramenta de diagnóstico de rede combinando ping e traceroute"
|
||||
},
|
||||
{
|
||||
"command": "iperf3 -s",
|
||||
"description": "Executar o servidor iperf para testes de largura de banda"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ferramentas de Arquivo e Texto",
|
||||
"commands": [
|
||||
{
|
||||
"command": "find / -name <filename>",
|
||||
"description": "Procurar os ficheiros pelo nome"
|
||||
},
|
||||
{
|
||||
"command": "grep -r 'pattern' /path",
|
||||
"description": "Procurar o padrão nos arquivos"
|
||||
},
|
||||
{
|
||||
"command": "sed -i 's/old/new/g' file",
|
||||
"description": "Substituir o texto nos ficheiros"
|
||||
},
|
||||
{
|
||||
"command": "awk '{print $1}' file",
|
||||
"description": "Ferramenta de processamento de texto"
|
||||
},
|
||||
{
|
||||
"command": "tail -f /var/log/syslog",
|
||||
"description": "Seguir o ficheiro de registo em tempo real"
|
||||
},
|
||||
{
|
||||
"command": "less /var/log/messages",
|
||||
"description": "Ver o ficheiro com paginação"
|
||||
},
|
||||
{
|
||||
"command": "journalctl -f",
|
||||
"description": "Acompanhar os registos do journal do systemd"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Análise de desempenho",
|
||||
"commands": [
|
||||
{
|
||||
"command": "iostat -x 1",
|
||||
"description": "Apresentar estatísticas de CPU e E/S"
|
||||
},
|
||||
{
|
||||
"command": "mpstat -P ALL 1",
|
||||
"description": "Relatório sobre a utilização do CPU"
|
||||
},
|
||||
{
|
||||
"command": "perf top",
|
||||
"description": "Ferramenta de perfil do sistema"
|
||||
},
|
||||
{
|
||||
"command": "strace <command>",
|
||||
"description": "Rastrear chamadas e sinais do sistema"
|
||||
},
|
||||
{
|
||||
"command": "lsof",
|
||||
"description": "Listar os ficheiros abertos"
|
||||
},
|
||||
{
|
||||
"command": "pstree",
|
||||
"description": "Exibir árvore de processo"
|
||||
},
|
||||
{
|
||||
"command": "slabtop",
|
||||
"description": "Mostrar informações da cache slab do kernel"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ferramentas de Segurança",
|
||||
"commands": [
|
||||
{
|
||||
"command": "fail2ban-client status",
|
||||
"description": "Mostrar o estado do fail2ban"
|
||||
},
|
||||
{
|
||||
"command": "chage -l <username>",
|
||||
"description": "Mostrar a informação de validade da senha"
|
||||
},
|
||||
{
|
||||
"command": "lastlog",
|
||||
"description": "Mostrar o último login de todos os usuários"
|
||||
},
|
||||
{
|
||||
"command": "last",
|
||||
"description": "Mostrar a lista dos últimos utilizadores que iniciaram sessão"
|
||||
},
|
||||
{
|
||||
"command": "w",
|
||||
"description": "Mostrar quem está ligado e o que está a fazer"
|
||||
},
|
||||
{
|
||||
"command": "lynis audit system",
|
||||
"description": "Ferramenta de auditoria de segurança"
|
||||
},
|
||||
{
|
||||
"command": "openssl s_client -connect host:port",
|
||||
"description": "Testar conexões SSL/TLS"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Administração remota",
|
||||
"commands": [
|
||||
{
|
||||
"command": "ssh <user>@<host>",
|
||||
"description": "Conexão de shell segura"
|
||||
},
|
||||
{
|
||||
"command": "scp <file> <user>@<host>:<path>",
|
||||
"description": "Copiar ficheiros em segurança"
|
||||
},
|
||||
{
|
||||
"command": "rsync -avz <src> <dest>",
|
||||
"description": "Sincronizar arquivos/pastas"
|
||||
},
|
||||
{
|
||||
"command": "screen",
|
||||
"description": "Multiplexador de terminal"
|
||||
},
|
||||
{
|
||||
"command": "tmux",
|
||||
"description": "Alternativa de multiplexador de terminal"
|
||||
},
|
||||
{
|
||||
"command": "ssh-keygen -t rsa -b 4096",
|
||||
"description": "Gerar par de chaves SSH"
|
||||
},
|
||||
{
|
||||
"command": "ssh-copy-id <user>@<host>",
|
||||
"description": "Copiar a chave SSH para o servidor"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Configuração do Sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "systemctl status <service>",
|
||||
"description": "Verificar o estado do serviço"
|
||||
},
|
||||
{
|
||||
"command": "journalctl -u <service>",
|
||||
"description": "Ver os registos de serviços"
|
||||
},
|
||||
{
|
||||
"command": "timedatectl",
|
||||
"description": "Gerir a data e a hora do sistema"
|
||||
},
|
||||
{
|
||||
"command": "hostnamectl",
|
||||
"description": "Gerir o nome do anfitrião"
|
||||
},
|
||||
{
|
||||
"command": "localectl",
|
||||
"description": "Gerir as definições regionais e o teclado do sistema"
|
||||
},
|
||||
{
|
||||
"command": "update-alternatives --config <name>",
|
||||
"description": "Configurar alternativas de sistema"
|
||||
},
|
||||
{
|
||||
"command": "dpkg-reconfigure <package>",
|
||||
"description": "Reconfigurar um pacote instalado"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"tmuxTip": {
|
||||
"title": "Usar tmux / screen para comandos demorados",
|
||||
"bodyRich": "Execute tarefas demoradas, como cópias de segurança, atualizações ou grandes transferências rsync, em <code>tmux</code> ou <code>screen</code> para uma desconexão SSH não terminar a sessão do terminal. Numa sessão tmux, volte a ligar-se ao mesmo anfitrião com o mesmo utilizador e execute <code>tmux attach</code>. As sessões screen usam o seu próprio comando de reconexão."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/utils/system-utils",
|
||||
"label": "Instalador de utilitários de sistema",
|
||||
"tail": " — instalar qualquer uma destas ferramentas em falta."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"label": "Comandos úteis do sistema",
|
||||
"tail": " — Comandos de inspecção específicos do proxmox."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos de atualização e pacotes Proxmox — apt, pveupgrade, dpkg | ProxMenux",
|
||||
"description": "Comandos de atualização e gestão de pacotes Proxmox VE: apt update, apt upgrade, apt dist-upgrade, pveupgrade, dpkg -l, informações sobre pacotes e configuração de repositórios em /etc/apt/sources.list.d/.",
|
||||
"ogTitle": "Comandos de atualização e pacotes Proxmox — apt, pveupgrade, dpkg",
|
||||
"ogDescription": "comandos apt, pveupgrade e dpkg para manter o Proxmox VE atualizado — atualizações do sistema, gerenciamento de pacotes, configuração do repositório.",
|
||||
"twitterTitle": "Comandos de atualização Proxmox | ProxMenux",
|
||||
"twitterDescription": "Comandos apt e pveupgrade para gerir atualizações e pacotes em anfitriões Proxmox VE."
|
||||
},
|
||||
"header": {
|
||||
"title": "Atualizações e pacotes",
|
||||
"description": "Seleção de comandos apt e de atualização Proxmox: atualizações do sistema, instalação, remoção e eliminação completa de pacotes, consultas com apt-cache policy e dpkg -l e inspeção dos repositórios.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Atualizar sempre o índice primeiro",
|
||||
"body": "O <code>apt update</code> atualiza o índice de pacotes local dos repositórios configurados. Sem ele, <code>apt install</code> pode puxar versões antigas ou falhar com \"Não é possível localizar o pacote\"."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Atualizações do sistema",
|
||||
"commands": [
|
||||
{
|
||||
"command": "apt update && apt upgrade -y",
|
||||
"description": "Atualizar as listas e os pacotes instalados (apt upgrade)"
|
||||
},
|
||||
{
|
||||
"command": "apt dist-upgrade -y",
|
||||
"description": "Atualização completa do sistema, incluindo dependências"
|
||||
},
|
||||
{
|
||||
"command": "apt update",
|
||||
"description": "Atualizar apenas as listas de pacotes"
|
||||
},
|
||||
{
|
||||
"command": "apt upgrade",
|
||||
"description": "Atualizar apenas pacotes (interativos)"
|
||||
},
|
||||
{
|
||||
"command": "apt full-upgrade",
|
||||
"description": "Atualizar pacotes com tratamento de dependência (interativo)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Atualizações do Proxmox",
|
||||
"commands": [
|
||||
{
|
||||
"command": "pveupdate",
|
||||
"description": "Atualizar listas de pacotes Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "pveupgrade",
|
||||
"description": "Iniciar a atualização interativa dos pacotes Proxmox"
|
||||
},
|
||||
{
|
||||
"command": "pve8to9 --full",
|
||||
"description": "Verificar a preparação para passar do PVE 8 para 9, sem executar a atualização"
|
||||
},
|
||||
{
|
||||
"command": "ceph versions",
|
||||
"description": "Mostrar as versões dos serviços Ceph antes de planear uma atualização"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de Pacotes",
|
||||
"commands": [
|
||||
{
|
||||
"command": "apt autoremove --purge",
|
||||
"description": "Remova pacotes não utilizados e suas configurações"
|
||||
},
|
||||
{
|
||||
"command": "apt clean",
|
||||
"description": "Limpar o repositório local dos arquivos de pacotes recuperados"
|
||||
},
|
||||
{
|
||||
"command": "apt autoclean",
|
||||
"description": "Limpar apenas os ficheiros de pacotes desactualizados"
|
||||
},
|
||||
{
|
||||
"command": "apt install <package>",
|
||||
"description": "Instalar um pacote específico"
|
||||
},
|
||||
{
|
||||
"command": "apt remove <package>",
|
||||
"description": "Remover um pacote"
|
||||
},
|
||||
{
|
||||
"command": "apt purge <package>",
|
||||
"description": "Remover um pacote e os seus ficheiros de configuração"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Informação do Pacote",
|
||||
"commands": [
|
||||
{
|
||||
"command": "apt list --installed",
|
||||
"description": "Listar todos os pacotes instalados"
|
||||
},
|
||||
{
|
||||
"command": "apt search <keyword>",
|
||||
"description": "Procurar por pacotes por palavra- chave"
|
||||
},
|
||||
{
|
||||
"command": "apt show <package>",
|
||||
"description": "Mostrar informações detalhadas sobre um pacote"
|
||||
},
|
||||
{
|
||||
"command": "dpkg -l",
|
||||
"description": "Listar todos os pacotes instalados (alternativo)"
|
||||
},
|
||||
{
|
||||
"command": "dpkg -l | grep <keyword>",
|
||||
"description": "Procurar pacotes instalados por palavra- chave"
|
||||
},
|
||||
{
|
||||
"command": "apt-cache policy <package>",
|
||||
"description": "Mostrar as versões e prioridades do pacote"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão do Repositório",
|
||||
"commands": [
|
||||
{
|
||||
"command": "cat /etc/apt/sources.list",
|
||||
"description": "Mostrar as fontes principais do repositório APT"
|
||||
},
|
||||
{
|
||||
"command": "ls -la /etc/apt/sources.list.d/",
|
||||
"description": "Listar ficheiros adicionais de configuração de repositórios"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/apt/sources.list.d/pve-enterprise.list",
|
||||
"description": "Mostrar a configuração do repositório Proxmox Enterprise no ficheiro .list do PVE 8"
|
||||
},
|
||||
{
|
||||
"command": "apt-key list",
|
||||
"description": "Listar as antigas chaves de assinatura dos repositórios onde apt-key esteja disponível"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"backupWarn": {
|
||||
"title": "Faça um backup antes das principais atualizações",
|
||||
"bodyRich": "Para atualizações correntes, o Proxmox recomenda <code>apt update && apt full-upgrade</code>; reveja as alterações de pacotes antes de confirmar. Para <strong>atualizações de versão principal</strong> (PVE 8 → 9), use o procedimento ProxMenux <upgradeLink>Atualizar PVE 8 para PVE 9</upgradeLink>. Inclui verificações prévias, migração de repositórios e validação final. Faça primeiro uma cópia de segurança."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/utils/system-update",
|
||||
"label": "Actualização do Sistema Proxmox (interactiva)",
|
||||
"tail": " — wrapper que faz tudo isso com uma janela de confirmação, uma reconstrução automática DKMS de drivers gerenciados por ProxMenux quando um novo kernel é instalado e um prompt de reinicialização. Também pode ser lançado a partir do botão Atualizar agora do painel ProxMenux Monitor."
|
||||
},
|
||||
{
|
||||
"href": "/docs/utils/upgrade-pve8-pve9",
|
||||
"label": "Atualize PVE 8 para PVE 9",
|
||||
"tail": " — para actualizações de grandes versões."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,182 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos qm e pct do Proxmox — gestão de VM e contentores LXC | ProxMenux",
|
||||
"description": "Comandos qm e pct do Proxmox VE para VM e contentores LXC: list, config, start, stop, shutdown, reboot, destroy, clone, migrate, snapshot, resize e pct exec / enter / push / pull para contentores.",
|
||||
"ogTitle": "Comandos qm e pct do Proxmox — gestão de VM e contentores LXC",
|
||||
"ogDescription": "Comandos qm e pct do Proxmox VE para gerir máquinas virtuais e contentores LXC pelo terminal: iniciar, parar, configurar, criar snapshots, migrar, clonar e eliminar.",
|
||||
"twitterTitle": "Comandos qm / pct do Proxmox | ProxMenux",
|
||||
"twitterDescription": "Seleção de comandos qm / pct para gerir máquinas virtuais e contentores LXC no Proxmox VE."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gestão de VM e CT",
|
||||
"description": "Seleção de comandos qm para VM e pct para contentores LXC: listagem, ciclo de vida (start / stop / shutdown / destroy), consulta da configuração e operações de contentor como exec, enter, push e pull.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Encontrar primeiro um VMID ou CTID",
|
||||
"body": "Quase todos os comandos precisam de um ID numérico. Use <code>qm list</code> para VM e <code>pct list</code> para contentores. Substitua <code><vmid></code> / <code><ctid></code> nos exemplos pelo ID real antes de executar."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Listagem e Informação",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qm list",
|
||||
"description": "Listar todas as máquinas virtuais"
|
||||
},
|
||||
{
|
||||
"command": "pct list",
|
||||
"description": "Listar todos os contentores LXC"
|
||||
},
|
||||
{
|
||||
"command": "qm config <vmid>",
|
||||
"description": "Mostrar a configuração da VM interpretada por qm"
|
||||
},
|
||||
{
|
||||
"command": "pct config <ctid>",
|
||||
"description": "Mostrar a configuração do contentor interpretada por pct"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Arquivos de configuração (raw)",
|
||||
"commands": [
|
||||
{
|
||||
"command": "cat /etc/pve/qemu-server/<vmid>.conf",
|
||||
"description": "Ver arquivo de configuração bruto da VM"
|
||||
},
|
||||
{
|
||||
"command": "cat /etc/pve/lxc/<ctid>.conf",
|
||||
"description": "Ver arquivo de configuração CT bruto"
|
||||
},
|
||||
{
|
||||
"command": "nano /etc/pve/qemu-server/<vmid>.conf",
|
||||
"description": "Editar arquivo de configuração VM (nano)"
|
||||
},
|
||||
{
|
||||
"command": "nano /etc/pve/lxc/<ctid>.conf",
|
||||
"description": "Editar arquivo de configuração CT (nano)"
|
||||
},
|
||||
{
|
||||
"command": "vi /etc/pve/qemu-server/<vmid>.conf",
|
||||
"description": "Editar o ficheiro de configuração VM (vi)"
|
||||
},
|
||||
{
|
||||
"command": "vi /etc/pve/lxc/<ctid>.conf",
|
||||
"description": "Editar o ficheiro de configuração CT (vi)"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de VM",
|
||||
"commands": [
|
||||
{
|
||||
"command": "qm start <vmid>",
|
||||
"description": "Inicie uma máquina virtual. Use o <vmid> correto"
|
||||
},
|
||||
{
|
||||
"command": "qm stop <vmid>",
|
||||
"description": "Forçar a parada de uma máquina virtual. Use o <vmid> correto"
|
||||
},
|
||||
{
|
||||
"command": "qm shutdown <vmid>",
|
||||
"description": "Desligar uma máquina virtual de forma ordenada"
|
||||
},
|
||||
{
|
||||
"command": "qm reset <vmid>",
|
||||
"description": "Reiniciar uma máquina virtual (reboot rígido)"
|
||||
},
|
||||
{
|
||||
"command": "qm suspend <vmid>",
|
||||
"description": "Suspender uma máquina virtual"
|
||||
},
|
||||
{
|
||||
"command": "qm resume <vmid>",
|
||||
"description": "Continuar uma máquina virtual suspensa"
|
||||
},
|
||||
{
|
||||
"command": "qm destroy <vmid>",
|
||||
"description": "Exclua uma VM (irreversível). Use o <vmid> correto"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de contentores",
|
||||
"commands": [
|
||||
{
|
||||
"command": "pct start <ctid>",
|
||||
"description": "Inicie um contêiner. Use o <ctid> correto"
|
||||
},
|
||||
{
|
||||
"command": "pct stop <ctid>",
|
||||
"description": "Forçar a parada de um contêiner. Use o <ctid> correto"
|
||||
},
|
||||
{
|
||||
"command": "pct shutdown <ctid>",
|
||||
"description": "Desligar um contentor de forma ordenada"
|
||||
},
|
||||
{
|
||||
"command": "pct reboot <ctid>",
|
||||
"description": "Reiniciar um contentor"
|
||||
},
|
||||
{
|
||||
"command": "pct destroy <ctid>",
|
||||
"description": "Excluir um CT (irreversível). Use o <ctid> correto"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Operações de Contentores",
|
||||
"commands": [
|
||||
{
|
||||
"command": "pct exec <ctid> -- getent passwd | column -t -s :",
|
||||
"description": "Mostrar usuários do CT em formato de tabela"
|
||||
},
|
||||
{
|
||||
"command": "pct exec <ctid> -- ps aux --sort=-%mem | head",
|
||||
"description": "Principais processos de memória em CT"
|
||||
},
|
||||
{
|
||||
"command": "pct enter <ctid>",
|
||||
"description": "Entrar na shell do contentor"
|
||||
},
|
||||
{
|
||||
"command": "pct push <ctid> <source> <dest>",
|
||||
"description": "Copiar o ficheiro da máquina para o contentor"
|
||||
},
|
||||
{
|
||||
"command": "pct pull <ctid> <source> <dest>",
|
||||
"description": "Copiar o ficheiro do contentor para a máquina"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"destroyWarn": {
|
||||
"title": "Destruir é irreversível.",
|
||||
"bodyRich": "<code>qm destroy</code> e <code>pct destroy</code> removem a configuração do sistema convidado e os seus volumes de disco geridos. Não pressuponha que os dados externos ou em bind mounts são eliminados. A CLI não pede confirmação por predefinição. Guarde primeiro os dados necessários; consulte <backupLink>Cópias de segurança e restauro</backupLink>."
|
||||
},
|
||||
"qmConfigTip": {
|
||||
"title": "qm config ou edição direta do ficheiro .conf",
|
||||
"bodyRich": "<code>qm config <vmid></code> e <code>pct config <ctid></code> mostram a configuração através dos analisadores Proxmox. Para alterações normais, prefira <code>qm set</code> ou o comando pct equivalente. Editar diretamente <code>/etc/pve/qemu-server/<vmid>.conf</code> ou <code>/etc/pve/lxc/<ctid>.conf</code> contorna a validação e os bloqueios dos comandos de gestão; o ficheiro tem de continuar interpretável. Pare o sistema convidado e guarde uma cópia antes de reparar manualmente. <code>pmxcfs</code> sincroniza configurações entre nós, não os dados dos discos convidados."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/help-info/backup-commands",
|
||||
"label": "Cópias de segurança e restauro",
|
||||
"tail": " — vzdump e qmrestore / pct restore."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Armazenamento e Discos",
|
||||
"tail": " — qm importdisk e gestão de discos."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Comandos ZFS no Proxmox — zpool, zfs snapshot, send/receive, scrub | ProxMenux",
|
||||
"description": "Comandos de gestão ZFS no Proxmox VE: zpool create / status / history, zfs list / get / set, snapshots, clone, zfs send e receive, scrub, clear, replace, zpool iostat e resumo ARC.",
|
||||
"ogTitle": "Comandos ZFS no Proxmox — zpool, zfs snapshot, send/receive, scrub",
|
||||
"ogDescription": "Referência dos comandos zpool e zfs em Proxmox VE — pools, conjuntos de dados, instantâneos, replicação, manutenção.",
|
||||
"twitterTitle": "Comandos ZFS no Proxmox | ProxMenux",
|
||||
"twitterDescription": "Comandos zpool e zfs para Proxmox VE: pools, datasets, snapshots, replicação e manutenção."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gestão de ZFS",
|
||||
"description": "Seleção de comandos zpool e zfs: inspeção de pools, criação, leitura, alteração e eliminação de datasets, snapshots, clone e send/receive incremental ou recursivo, manutenção com scrub / clear / replace, estatísticas de E/S e resumo ARC.",
|
||||
"section": "Ajuda e informações"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Duas famílias de comando",
|
||||
"body": "O <code>zpool *</code> gere os conjuntos de armazenamento (camada física — discos, vdevs, redundância). <code>zfs *</code> gerencia os conjuntos de dados e instantâneos que vivem dentro desses pools (camada lógica — sistemas de arquivos, volumes, instantâneos, propriedades)."
|
||||
},
|
||||
"commandGroups": [
|
||||
{
|
||||
"title": "Informações dos pools",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zpool list",
|
||||
"description": "Listar todos os pools ZFS"
|
||||
},
|
||||
{
|
||||
"command": "zpool status",
|
||||
"description": "Mostrar o estado detalhado e a saúde do pool"
|
||||
},
|
||||
{
|
||||
"command": "zpool status -v",
|
||||
"description": "Mostrar o estado detalhado do pool com os erros"
|
||||
},
|
||||
{
|
||||
"command": "zpool history",
|
||||
"description": "Mostrar o histórico de comandos para todos os grupos"
|
||||
},
|
||||
{
|
||||
"command": "zpool history <pool>",
|
||||
"description": "Mostrar o histórico de comandos de um pool específico"
|
||||
},
|
||||
{
|
||||
"command": "zpool get all <pool>",
|
||||
"description": "Mostrar todas as propriedades de um pool"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gerenciamento de conjuntos de dados",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zfs list",
|
||||
"description": "Listar todos os conjuntos de dados ZFS"
|
||||
},
|
||||
{
|
||||
"command": "zfs list -r <pool>",
|
||||
"description": "Listar todos os conjuntos de dados num pool recursivamente"
|
||||
},
|
||||
{
|
||||
"command": "zfs create <pool>/<dataset>",
|
||||
"description": "Criar um novo conjunto de dados"
|
||||
},
|
||||
{
|
||||
"command": "zfs destroy <pool>/<dataset>",
|
||||
"description": "Destruir um conjunto de dados"
|
||||
},
|
||||
{
|
||||
"command": "zfs rename <pool>/<dataset> <pool>/<new-name>",
|
||||
"description": "Renomear um conjunto de dados"
|
||||
},
|
||||
{
|
||||
"command": "zfs get all <pool>/<dataset>",
|
||||
"description": "Mostrar todas as propriedades de um conjunto de dados"
|
||||
},
|
||||
{
|
||||
"command": "zfs set compression=on <pool>/<dataset>",
|
||||
"description": "Activar a compressão num conjunto de dados"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Gestão de Instantâneos",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zfs list -t snapshot",
|
||||
"description": "Listar todos os instantâneos"
|
||||
},
|
||||
{
|
||||
"command": "zfs list -t snapshot -r <pool>",
|
||||
"description": "Listar todos os instantâneos em um pool"
|
||||
},
|
||||
{
|
||||
"command": "zfs snapshot <pool>/<dataset>@<snapshot-name>",
|
||||
"description": "Criar um instantâneo"
|
||||
},
|
||||
{
|
||||
"command": "zfs destroy <pool>/<dataset>@<snapshot-name>",
|
||||
"description": "Apagar um instantâneo"
|
||||
},
|
||||
{
|
||||
"command": "zfs rollback <pool>/<dataset>@<snapshot-name>",
|
||||
"description": "Retroceder para um instantâneo"
|
||||
},
|
||||
{
|
||||
"command": "zfs hold <tag> <pool>/<dataset>@<snapshot-name>",
|
||||
"description": "Proteger um snapshot contra eliminação com um hold"
|
||||
},
|
||||
{
|
||||
"command": "zfs release <tag> <pool>/<dataset>@<snapshot-name>",
|
||||
"description": "Remover a proteção hold de um snapshot"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Clonar e Enviar/Receber",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zfs clone <pool>/<dataset>@<snapshot> <pool>/<clone-name>",
|
||||
"description": "Criar um clone a partir de um instantâneo"
|
||||
},
|
||||
{
|
||||
"command": "zfs send <pool>/<dataset>@<snapshot> > backup.zfs",
|
||||
"description": "Enviar um instantâneo para um arquivo"
|
||||
},
|
||||
{
|
||||
"command": "zfs receive <pool>/<dataset> < backup.zfs",
|
||||
"description": "Receber um instantâneo a partir de um ficheiro"
|
||||
},
|
||||
{
|
||||
"command": "zfs send -i <pool>/<dataset>@<snap1> <pool>/<dataset>@<snap2> > incr.zfs",
|
||||
"description": "Enviar instantâneo incremental"
|
||||
},
|
||||
{
|
||||
"command": "zfs send -R <pool>/<dataset>@<snapshot> > full-recursive.zfs",
|
||||
"description": "Enviar instantâneo recursivo"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Manutenção e Reparação",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zpool scrub <pool>",
|
||||
"description": "Iniciar uma verificação scrub do pool"
|
||||
},
|
||||
{
|
||||
"command": "zpool scrub -s <pool>",
|
||||
"description": "Parar o scrub em execução"
|
||||
},
|
||||
{
|
||||
"command": "zpool clear <pool>",
|
||||
"description": "Repor os contadores de erros do pool"
|
||||
},
|
||||
{
|
||||
"command": "zpool clear <pool> <device>",
|
||||
"description": "Limpar erros num dispositivo específico"
|
||||
},
|
||||
{
|
||||
"command": "zpool replace <pool> <old-device> <new-device>",
|
||||
"description": "Substituir um dispositivo falhado"
|
||||
},
|
||||
{
|
||||
"command": "zpool offline <pool> <device>",
|
||||
"description": "Colocar um dispositivo offline no pool"
|
||||
},
|
||||
{
|
||||
"command": "zpool online <pool> <device>",
|
||||
"description": "Voltar a colocar um dispositivo online no pool"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Desempenho e acompanhamento",
|
||||
"commands": [
|
||||
{
|
||||
"command": "zpool iostat",
|
||||
"description": "Mostrar estatísticas de E/ S para pools"
|
||||
},
|
||||
{
|
||||
"command": "zpool iostat -v",
|
||||
"description": "Mostrar estatísticas de E/S detalhadas"
|
||||
},
|
||||
{
|
||||
"command": "zpool iostat 5",
|
||||
"description": "Mostrar estatísticas de E/ S a cada 5 segundos"
|
||||
},
|
||||
{
|
||||
"command": "arc_summary",
|
||||
"description": "Mostrar as estatísticas ARC (se instaladas)"
|
||||
},
|
||||
{
|
||||
"command": "zfs get compressratio <pool>/<dataset>",
|
||||
"description": "Mostrar a razão de compressão"
|
||||
},
|
||||
{
|
||||
"command": "zfs get used,available,referenced <pool>/<dataset>",
|
||||
"description": "Mostrar a utilização do espaço"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"bestPractices": {
|
||||
"title": "Melhores práticas operacionais",
|
||||
"bodyRich": "Agende regularmente <code>zpool scrub</code> para verificar as somas de controlo e analise o resultado. Mantenha capacidade livre: o efeito de um pool quase cheio depende da carga e da estrutura. Use <code>zpool replace</code> para um dispositivo avariado e siga o procedimento do respetivo tipo de vdev. Detach + add não é equivalente e pode alterar a topologia ou eliminar redundância."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"label": "Armazenamento e Discos",
|
||||
"tail": " — comandos gerais de dispositivos de bloco e LVM."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info/backup-commands",
|
||||
"label": "Cópias de segurança e restauro",
|
||||
"tail": " — vzdump, qmrestore."
|
||||
},
|
||||
{
|
||||
"href": "/docs/help-info",
|
||||
"label": "Visão geral de ajuda e informações",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalar o ProxMenux | Documentação do ProxMenux",
|
||||
"description": "Instale o ProxMenux com um comando em anfitriões Proxmox VE 8 ou posteriores. Inclui catálogos JSON pré-gerados em oito idiomas: inglês, espanhol, francês, alemão, italiano, português, eslovaco e sueco. Escolha o idioma na instalação ou altere-o depois nas definições. O canal beta permite experimentar antecipadamente as novas funcionalidades.",
|
||||
"ogTitle": "Instalar o ProxMenux | Documentação do ProxMenux",
|
||||
"ogDescription": "Instale ProxMenux em Proxmox VE 8+ em um comando. Canais estáveis e beta disponíveis."
|
||||
},
|
||||
"header": {
|
||||
"title": "Instalar o ProxMenux",
|
||||
"description": "Um instalador que se inicia numa linha em qualquer anfitrião Proxmox VE 8 ou posterior. Instala automaticamente as dependências, descarrega os scripts, configura o comando de arranque do menu e pede o idioma na primeira execução. Dois canais: estável (predefinido) e beta.",
|
||||
"section": "Instalação"
|
||||
},
|
||||
"stable": {
|
||||
"heading": "Instalar",
|
||||
"intro": "Execute isto no terminal da sua máquina Proxmox:",
|
||||
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\""
|
||||
},
|
||||
"during": {
|
||||
"heading": "Durante a instalação",
|
||||
"intro": "O ProxMenux instala automaticamente e configura as dependências de que necessita:",
|
||||
"tablePackage": "Pacote",
|
||||
"tablePurpose": "Finalidade",
|
||||
"rows": [
|
||||
{
|
||||
"package": "dialog",
|
||||
"purpose": "Menus de terminal interativos"
|
||||
},
|
||||
{
|
||||
"package": "curl",
|
||||
"purpose": "Transferências e verificações de conectividade"
|
||||
},
|
||||
{
|
||||
"package": "jq",
|
||||
"purpose": "Processamento JSON"
|
||||
},
|
||||
{
|
||||
"package": "git",
|
||||
"purpose": "Clonagem e atualização de repositórios"
|
||||
}
|
||||
],
|
||||
"outro": "O instalador também descarrega os scripts para <code>/usr/local/share/proxmenux/</code> e cria o comando de arranque <code>/usr/local/bin/menu</code>. O painel web <strong>ProxMenux Monitor</strong> é registado como serviço <code>proxmenux-monitor.service</code>.",
|
||||
"imageAlt": "Instalação ProxMenux em curso"
|
||||
},
|
||||
"first": {
|
||||
"heading": "Primeiro arranque",
|
||||
"intro": "Uma vez instalado, execute:",
|
||||
"code": "menu",
|
||||
"outro": "O ProxMenux abre no menu principal, onde pode iniciar os procedimentos documentados neste site. Num anfitrião Proxmox recém-instalado, <postlink>Pós-instalação</postlink> é um bom ponto de partida."
|
||||
},
|
||||
"beta": {
|
||||
"heading": "Canal Beta",
|
||||
"calloutTitle": "O que é o Programa Beta?",
|
||||
"calloutBody": "Quer experimentar as novidades antes do lançamento oficial e ajudar a definir a versão final? O programa beta do ProxMenux dá acesso antecipado às novas funcionalidades, incluindo as últimas compilações do Monitor, a partir do ramo <code>develop</code>. As versões beta podem conter erros ou funções incompletas. Os seus comentários ajudam a corrigi-los antes da versão estável.",
|
||||
"intro": "Instale a versão beta em vez da estável com:",
|
||||
"code": "bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/develop/install_proxmenux_beta.sh)\"",
|
||||
"outro": "A beta é opcional: tem de executar explicitamente o respetivo instalador. Quando é publicada uma versão estável, o ProxMenux avisa na próxima execução de <code>menu</code> e propõe a mudança automática. Para sair antes da beta, escolha <betalink>Desativar programa beta</betalink> nas definições."
|
||||
},
|
||||
"updating": {
|
||||
"heading": "Actualização",
|
||||
"body": "O ProxMenux gere as suas atualizações. Quando há uma nova versão, a próxima execução de <code>menu</code> propõe a instalação. Ao aceitar, os ficheiros e a configuração da ferramenta são substituídos na instalação existente, sem downloads manuais. O canal estável recebe versões estáveis e a beta recebe versões beta, com a proposta de mudança descrita acima. O aviso depende de onde executa <code>menu</code>: por SSH ou na consola Proxmox, surge um diálogo sim/não e a aceitação aplica a atualização imediatamente. No terminal WebSocket do ProxMenux Monitor surge uma mensagem informativa, porque esse terminal seria interrompido durante a operação. A mensagem apresenta o instalador numa linha (<code>bash -c \"$(wget -qLO - https://raw.githubusercontent.com/MacRimi/ProxMenux/main/install_proxmenux.sh)\"</code> para estável, ou o URL equivalente de <code>install_proxmenux_beta.sh</code> para beta), que deve executar por SSH ou na consola."
|
||||
},
|
||||
"uninstall": {
|
||||
"heading": "Desinstalar",
|
||||
"body": "No ProxMenux: <strong>Definições → Desinstalar ProxMenux</strong>. A desinstalação remove os scripts, o comando de arranque e o serviço Monitor, além das dependências selecionadas, se assim escolher. Restaura <code>/root/.bashrc</code> e <code>/etc/motd</code> a partir das cópias criadas pelo Post-Install, caso existam (caso contrário, remove a linha do ProxMenux do MOTD). Procedimento completo: <uninstalllink>Desinstalar ProxMenux</uninstalllink>."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"virustotalTitle": "VirusTotal sinaliza o URL de instalação",
|
||||
"virustotalBody": "O resultado de 1/95 do motor <em>Chong Lua Dao</em>, comunicado na issue #162, foi identificado pelo responsável do projeto como um falso positivo. O instalador é executado com um comando que descarrega e executa o script (<code>bash -c \"$(wget -qLO - …)\"</code>) e pode descarregar <code>jq</code> da sua versão oficial no GitHub. Este <em>comportamento</em> pode ativar análises heurísticas; esse relatório histórico não avalia todos os downloads futuros. O código do instalador é aberto e pode ser analisado. Mais contexto na <issuelink>issue #162</issuelink>.",
|
||||
"aptTitle": "A instalação falhou com erros apt",
|
||||
"aptBody": "Normalmente falta um repositório Proxmox ou está mal configurado. O instalador obtém as dependências via apt, que falha se a configuração dos repositórios estiver incorreta. É comum em instalações mínimas do Proxmox 8 ainda não atualizadas. Execute primeiro <code>apt-get update</code> manualmente, resolva todos os erros e volte a executar o instalador.",
|
||||
"menuTitle": "`menu: command not found` após a instalação",
|
||||
"menuBody": "O comando de arranque está em <code>/usr/local/bin/menu</code>. Confirme com <code>ls -lh /usr/local/bin/menu</code>. Se faltar, a instalação terminou antes de concluir: execute-a novamente. Se existir mas o comando não for encontrado, PATH não inclui <code>/usr/local/bin</code>. Corrija PATH ou execute diretamente <code>/usr/local/bin/menu</code>.",
|
||||
"stuckTitle": "A instalação trava ou não avança",
|
||||
"stuckBody": "Se uma instalação, reinstalação ou atualização ficar presa por causa de um problema de conexão, cancele com <strong>Ctrl + C</strong> e execute o instalador manualmente.",
|
||||
"otherTitle": "Outros problemas",
|
||||
"otherBody": "Consulte <issueslink>GitHub Issues</issueslink> para problemas conhecidos ou abra uma issue com os registos relevantes. Se usar a beta e o problema estiver relacionado com o Monitor, inclua a saída de <code>journalctl -u proxmenux-monitor -n 50</code>."
|
||||
},
|
||||
"next": {
|
||||
"heading": "E agora?",
|
||||
"postInstall": "<postlink>Script de pós-instalação</postlink> — ajustes e reforço de segurança de um anfitrião Proxmox recém-instalado.",
|
||||
"introduction": "<introlink>Introdução</introlink> — apresentação completa das funcionalidades.",
|
||||
"monitor": "<monitorlink>ProxMenux Monitor</monitorlink> — painel web para o host (instalado automaticamente ao lado do menu)."
|
||||
},
|
||||
"requirements": {
|
||||
"heading": "Requisitos e boas práticas",
|
||||
"reqTitle": "Requisitos",
|
||||
"reqBody": "Proxmox VE <strong>8.x ou posterior</strong>. O PVE 7 e as versões anteriores não são suportados. O anfitrião precisa de acesso à Internet para descarregar scripts, dependências e a AppImage do ProxMenux Monitor. Execute o instalador como <strong>root</strong> no anfitrião Proxmox.",
|
||||
"inspectTitle": "Sempre inspecione scripts que você executa da internet",
|
||||
"inspectReview": "<sourcelink>Reveja o código do instalador</sourcelink> antes de executar.",
|
||||
"inspectCoc": "Todas as ligações executáveis seguem o <coclink>código de conduta do ProxMenux</coclink>."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,206 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "ProxMenux — Gestão do Proxmox VE através de menus | Código aberto",
|
||||
"description": "Ferramenta de código aberto para gerir o Proxmox VE através de menus. O ProxMenux reúne dois componentes: uma CLI/TUI para ajustes após a instalação, VM e contentores LXC, passagem direta de GPU e Coral TPU, discos, armazenamento e rede; e um painel web alojado no próprio servidor, com monitorização proativa, notificações por Telegram, Discord ou e-mail, reformulação por IA e API REST.",
|
||||
"ogTitle": "ProxMenux — Gestão do Proxmox VE através de menus",
|
||||
"ogDescription": "CLI/TUI de código aberto e painel web para Proxmox VE: ajustes após a instalação, VM, GPU, discos, rede, armazenamento e segurança. O Monitor acrescenta verificações de estado, notificações, reformulação por IA e uma API REST.",
|
||||
"twitterTitle": "ProxMenux — Gestão do Proxmox VE através de menus",
|
||||
"twitterDescription": "CLI/TUI de código aberto e painel web para Proxmox VE. Monitorização, notificações, reformulação por IA e API REST."
|
||||
},
|
||||
"header": {
|
||||
"title": "Introdução",
|
||||
"description": "O ProxMenux é uma ferramenta de código aberto para gerir o Proxmox VE através de menus. O projeto inclui uma CLI/TUI para tarefas comuns do anfitrião, VM, contentores, armazenamento, rede e segurança, e um painel web alojado no próprio servidor, com monitorização proativa, notificações, reformulação opcional por IA e API REST.",
|
||||
"section": "Introdução"
|
||||
},
|
||||
"hero": {
|
||||
"tagline": "<strong>Um menu para todas as tarefas.</strong> O que normalmente exige consultar a wiki, duas discussões no fórum e uma sequência de comandos copiada fica disponível numa opção numerada, que pode iniciar em segundos.",
|
||||
"audience": "Concebido para utilizadores <em>principiantes</em> de Proxmox, com predefinições seguras já selecionadas, e administradores <em>experientes</em>, que podem executar tarefas habituais com menos comandos. Gratuito e de código aberto, com uma comunidade ativa no <github>GitHub</github>."
|
||||
},
|
||||
"twoProducts": {
|
||||
"heading": "Dois produtos, um projecto",
|
||||
"intro": "O ProxMenux tem dois componentes na mesma árvore de código-fonte. O instalador coloca ambos no anfitrião: Scripts fornece a interface de terminal e Monitor o painel web:",
|
||||
"scripts": {
|
||||
"title": "ProxMenux Scripts",
|
||||
"body": "A CLI/TUI original, iniciada com <code>menu</code>. Nove áreas abrangem otimizações após a instalação, VM e contentores LXC, passagem direta de GPU e Coral TPU, discos, armazenamento, rede, segurança e utilitários, com uma seleção de comandos de referência. Funciona em terminais locais, por SSH ou na web."
|
||||
},
|
||||
"monitor": {
|
||||
"title": "ProxMenux Monitor",
|
||||
"body": "Painel web alojado no próprio servidor, distribuído como AppImage. Métricas do anfitrião em tempo real, monitorização proativa, notificações, reformulação opcional por IA com seis fornecedores, terminal web integrado e API REST. Ative-o no menu Scripts, em Definições → ProxMenux Monitor."
|
||||
},
|
||||
"calloutTitle": "O que o ProxMenux gere",
|
||||
"calloutIntro": "Três camadas, todas acessíveis a partir do mesmo projeto:",
|
||||
"layers": [
|
||||
"<strong>O anfitrião Proxmox</strong> — repositórios, pacotes, rede, ZFS, Ceph, kernel e observabilidade.",
|
||||
"<strong>As máquinas virtuais (VM)</strong> — criação, passagem direta de GPU, importação e exportação OVA/OVF e acesso direto a discos.",
|
||||
"<strong>Os contentores LXC</strong> — criação, pontos de montagem, passagem direta de GPU/TPU e clientes e servidores NFS/Samba."
|
||||
]
|
||||
},
|
||||
"scriptsSection": {
|
||||
"heading": "ProxMenux Scripts — o que se obtém",
|
||||
"intro": "Nove áreas funcionais, cada uma com o seu submenu em <code>menu</code> e uma página própria na documentação. Selecione um cartão para abrir diretamente a visão geral dessa secção.",
|
||||
"items": [
|
||||
{
|
||||
"title": "Após a instalação",
|
||||
"description": "Otimizações para uma instalação recente do Proxmox: repositórios, kernel, sincronização horária, segurança básica e desempenho, com opções reversíveis.",
|
||||
"icon": "Server",
|
||||
"href": "/docs/post-install"
|
||||
},
|
||||
{
|
||||
"title": "GPUs e Coral TPU",
|
||||
"description": "Passagem direta de NVIDIA, iGPU Intel, AMD e Coral TPU para VM e contentores LXC, com alternância entre os modos VM e LXC.",
|
||||
"icon": "Cpu",
|
||||
"href": "/docs/hardware/nvidia-host"
|
||||
},
|
||||
{
|
||||
"title": "Criar VM",
|
||||
"description": "Assistentes para sistemas NAS, Windows e Linux, com predefinições adequadas para hardware, armazenamento e rede.",
|
||||
"icon": "Server",
|
||||
"href": "/docs/create-vm"
|
||||
},
|
||||
{
|
||||
"title": "Gerenciador de disco",
|
||||
"description": "Disponibilize discos físicos a VM e LXC, formate e apague discos, execute testes SMART e importe imagens qcow2, vmdk ou vdi, tudo através de um menu.",
|
||||
"icon": "HardDrive",
|
||||
"href": "/docs/disk-manager"
|
||||
},
|
||||
{
|
||||
"title": "Armazenamento e partilha",
|
||||
"description": "Registe armazenamento NFS, Samba/CIFS, iSCSI e local no Proxmox e partilhe pastas entre o anfitrião e os contentores LXC através de bind mounts ou protocolos de rede.",
|
||||
"icon": "Boxes",
|
||||
"href": "/docs/storage-share"
|
||||
},
|
||||
{
|
||||
"title": "Rede",
|
||||
"description": "Diagnóstico sem alterações, análise com sugestões e reparações guiadas de /etc/network/interfaces. São criadas cópias de segurança antes das alterações.",
|
||||
"icon": "Network",
|
||||
"href": "/docs/network"
|
||||
},
|
||||
{
|
||||
"title": "Segurança",
|
||||
"description": "Fail2Ban para prevenir intrusões por SSH e interfaces web e Lynis para auditar o reforço da segurança, com instalação e gestão através de predefinições adequadas.",
|
||||
"icon": "Shield",
|
||||
"href": "/docs/security"
|
||||
},
|
||||
{
|
||||
"title": "Utilitários",
|
||||
"description": "Crie ISO do Windows com o UUP Dump, instale ferramentas CLI, execute atualizações guiadas do sistema ou passe do PVE 8 para o 9 e exporte e importe VM OVA/OVF.",
|
||||
"icon": "Wrench",
|
||||
"href": "/docs/utils"
|
||||
},
|
||||
{
|
||||
"title": "Referência de comandos",
|
||||
"description": "Uma seleção de comandos Linux e Proxmox organizada por tema: sistema, VM/CT com qm e pct, armazenamento, rede, ZFS, passagem direta de GPU, cópias de segurança e ferramentas CLI do dia a dia.",
|
||||
"icon": "BookOpen",
|
||||
"href": "/docs/help-info"
|
||||
}
|
||||
]
|
||||
},
|
||||
"monitorSection": {
|
||||
"heading": "ProxMenux Monitor — o que se obtém",
|
||||
"intro": "O painel web é alojado no anfitrião Proxmox, na porta TCP 8008. Selecione um cartão para abrir a página da respetiva secção ou leia primeiro a <link>visão geral do Monitor</link>.",
|
||||
"items": [
|
||||
{
|
||||
"title": "Monitorização do estado do sistema",
|
||||
"description": "Dez categorias verificadas a cada cinco minutos: CPU, memória, armazenamento, discos/SMART, rede, VM, serviços, registos, atualizações e segurança. Com níveis de gravidade e supressão de alertas por categoria.",
|
||||
"icon": "Activity",
|
||||
"href": "/docs/monitor/health-monitor"
|
||||
},
|
||||
{
|
||||
"title": "Notificações",
|
||||
"description": "Telegram, Discord, e-mail, Gotify, Pushover e Apprise multicanal, com eliminação de duplicados, intervalo mínimo entre envios, agrupamento de alertas próximos, horários de silêncio e histórico completo.",
|
||||
"icon": "Bell",
|
||||
"href": "/docs/monitor/notifications"
|
||||
},
|
||||
{
|
||||
"title": "Assistente de IA",
|
||||
"description": "Reformulação opcional das notificações em linguagem clara. Seis fornecedores: OpenAI, Anthropic Claude, Google Gemini, Groq, OpenRouter e Ollama local. Treze idiomas no seletor de idioma da IA.",
|
||||
"icon": "Sparkles",
|
||||
"href": "/docs/monitor/ai-assistant"
|
||||
},
|
||||
{
|
||||
"title": "Terminal Web",
|
||||
"description": "Uma shell interativa no anfitrião Proxmox através do navegador e um terminal ProxMenux Scripts separado que executa o menu na interface web.",
|
||||
"icon": "Terminal",
|
||||
"href": "/docs/monitor/dashboard/terminal"
|
||||
},
|
||||
{
|
||||
"title": "REST API",
|
||||
"description": "Endpoints HTTP para sistema, estado, armazenamento/SMART, rede, VM, notificações e segurança, úteis para Homepage, Home Assistant, Prometheus ou scripts personalizados.",
|
||||
"icon": "Code2",
|
||||
"href": "/docs/monitor/api"
|
||||
},
|
||||
{
|
||||
"title": "Integrações",
|
||||
"description": "Webhook nativo do Proxmox VE, recolha de métricas pelo Prometheus, sondas Uptime Kuma, widgets Homepage, Home Assistant e Glance, fluxos n8n/Zapier e Tailscale Secure Gateway.",
|
||||
"icon": "Plug",
|
||||
"href": "/docs/monitor/integrations"
|
||||
}
|
||||
]
|
||||
},
|
||||
"installPaths": {
|
||||
"heading": "Opções de instalação",
|
||||
"intro": "Ambos os instaladores disponibilizam Scripts e Monitor. Scripts utiliza catálogos JSON previamente preparados em oito idiomas, sem tradução online. Pode escolher o canal estável ou beta; Monitor é distribuído como AppImage e executado a partir do seu ambiente extraído:",
|
||||
"headerPath": "Install path",
|
||||
"headerBundles": "O que inclui",
|
||||
"headerWhen": "Quando escolher",
|
||||
"rows": [
|
||||
{
|
||||
"pathRich": "<strong>Scripts: estável</strong>",
|
||||
"bundles": "CLI/TUI com traduções JSON previamente preparadas em oito idiomas, sem ambiente virtual ou serviço de tradução online.",
|
||||
"when": "Utilização habitual com o canal de versões estáveis."
|
||||
},
|
||||
{
|
||||
"pathRich": "<strong>Scripts: beta</strong>",
|
||||
"bundles": "A mesma interface multilingue, instalada a partir do ramo develop para testar as próximas alterações.",
|
||||
"when": "Teste antecipado de novas funcionalidades, com maior risco de erros."
|
||||
},
|
||||
{
|
||||
"pathRich": "<strong>Monitor</strong>",
|
||||
"bundles": "AppImage autónoma com painel web na porta TCP 8008. O instalador extrai o ambiente de execução e gere o serviço; Monitor pode ser controlado nas definições.",
|
||||
"when": "Quando é útil consultar o anfitrião num painel web, através de telemóvel, tablet ou navegador."
|
||||
}
|
||||
],
|
||||
"outro": "Os comandos e requisitos detalhados estão na <link>página de instalação</link>."
|
||||
},
|
||||
"warnSource": {
|
||||
"title": "Verifique sempre os scripts da Internet antes de os executar",
|
||||
"body": "O ProxMenux é de código aberto e pode consultar cada script no GitHub. Leia o código-fonte antes de executar o comando de instalação. Faça o mesmo com qualquer outra ferramenta de automação.",
|
||||
"sourceLabel": "Ver fonte ProxMenux",
|
||||
"cocLabel": "Código de Conduta"
|
||||
},
|
||||
"next": {
|
||||
"heading": "Por onde continuar",
|
||||
"items": [
|
||||
{
|
||||
"lead": "<strong>É a primeira vez que utiliza o ProxMenux?</strong> ",
|
||||
"linkHref": "/docs/installation",
|
||||
"linkLabel": "Instale-o com um único comando",
|
||||
"tailRich": " e execute <code>menu</code>."
|
||||
},
|
||||
{
|
||||
"lead": "<strong>Acabou de instalar o Proxmox?</strong> Comece pelo ",
|
||||
"linkHref": "/docs/post-install",
|
||||
"linkLabel": "script de pós-instalação",
|
||||
"tail": "."
|
||||
},
|
||||
{
|
||||
"lead": "<strong>Pretende um painel web?</strong> ",
|
||||
"linkHref": "/docs/monitor",
|
||||
"linkLabel": "ProxMenux Monitor",
|
||||
"tail": " tem documentação que explica o que apresenta, como foi desenvolvido e como o proteger."
|
||||
},
|
||||
{
|
||||
"lead": "<strong>Procura um comando específico?</strong> A ",
|
||||
"linkHref": "/docs/help-info",
|
||||
"linkLabel": "referência de comandos",
|
||||
"tail": " reúne uma seleção organizada por tema, com botões para copiar."
|
||||
},
|
||||
{
|
||||
"lead": "<strong>Pretende guias mais detalhados?</strong> A ",
|
||||
"linkHref": "/guides",
|
||||
"linkLabel": "secção de guias",
|
||||
"tail": " aborda Coral TPU, passagem direta de NVIDIA, Kodi em LXC e outros temas."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Cópia de segurança e reinício das interfaces | Documentação ProxMenux",
|
||||
"description": "Snapshot manual, navegar e restaurar backups /etc/network/interfaces armazenados em /var/backups/proxmenux/. Inclui uma reinicialização do serviço de rede com confirmação e uma visão rápida da configuração ao vivo.",
|
||||
"ogTitle": "Cópia de segurança e reinício das interfaces | Documentação ProxMenux",
|
||||
"ogDescription": "Instantâneo e restauração da configuração de rede Proxmox; reinicie o serviço de rede com confirmação."
|
||||
},
|
||||
"header": {
|
||||
"title": "Cópia de segurança e reinício das interfaces",
|
||||
"description": "Quatro utilitários que giram em torno de /etc/network/interfaces: tirar um instantâneo manual, visualizar a configuração ao vivo, restaurar um backup anterior com visualização opcional, e reiniciar o serviço de rede com consentimento explícito. Mesmo diretório de backup usado pelos fluxos de reparo guiados.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Gere o mesmo diretório de cópias de segurança usado pelas reparações guiadas (<code>/var/backups/proxmenux/</code>). Permite criar uma cópia extra antes de qualquer alteração manual, consultar todas as cópias existentes e repor qualquer uma delas — sempre com uma nova cópia do estado anterior ao restauro, criada automaticamente como segunda proteção."
|
||||
},
|
||||
"shared": {
|
||||
"heading": "O diretório de backup compartilhado",
|
||||
"intro": "Cada backup feito em qualquer lugar no menu Rede chega no mesmo lugar:",
|
||||
"outro": "Os nomes dos ficheiros contêm data e hora, são ordenados por data e nunca são substituídos. O diretório é criado na primeira utilização."
|
||||
},
|
||||
"show": {
|
||||
"heading": "Mostrar arquivo de configuração de rede",
|
||||
"body": "Imprime <code>/etc/network/interfaces</code> na íntegra para o terminal. Só para leitura. Útil como uma verificação de sanidade antes de fazer um backup ou depois de uma restauração — não há nenhuma ferramenta separada \"diff com backup anterior\", então olhar para o arquivo ao vivo é a maneira mais fácil de confirmar o que você tem."
|
||||
},
|
||||
"create": {
|
||||
"heading": "Criar backup de rede",
|
||||
"body": "Copia o <code>/etc/network/interfaces</code> atual para o diretório de backup com um timestamp fresco. É isso — sem análise, sem prompts, apenas um instantâneo.",
|
||||
"whenTitle": "Quando criar uma cópia de segurança manual",
|
||||
"whenBody": "Antes de editar <code>/etc/network/interfaces</code> à mão, instalar um pacote que possa alterar a pilha de rede (por exemplo NetworkManager ou Open vSwitch) ou fazer qualquer alteração de hardware. As reparações guiadas já criam uma cópia automaticamente — esta opção serve para as operações <em>manuais</em>."
|
||||
},
|
||||
"restore": {
|
||||
"heading": "Restaurar backup de rede",
|
||||
"intro": "Lista todas as cópias em <code>/var/backups/proxmenux/</code> da mais recente à mais antiga e guia um restauro com proteções:",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Escolher uma cópia de segurança",
|
||||
"body": "Um menu lista cada backup pelo seu timestamp. Se não existirem backups, o fluxo sai com uma mensagem clara.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Visualização opcional",
|
||||
"body": "Propõe abrir a cópia selecionada numa vista com deslocamento antes de confirmar o restauro. A opção predefinida é Sim — não ignore este passo num host remoto.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Cópia de segurança antes do restauro",
|
||||
"body": "Antes de sobrepor <code>/etc/network/interfaces</code>, toma <strong>outro</strong> backup do estado atual. Restaurar um backup é em si uma ação destrutiva, então o novo instantâneo pré-restore permite que você volte se o backup escolhido acabar sendo o errado.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplicar a restauração",
|
||||
"body": "Substitui <code>/etc/network/interfaces</code> pela cópia selecionada. A alteração do ficheiro está no disco; o estado atual do kernel ainda reflete a configuração anterior.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Reinício opcional",
|
||||
"body": "Pergunta se deve executar o <code>systemctl restart networking</code> agora. Recusar para adiar a alteração para a próxima reinicialização.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"autoBackupTitle": "O restauro cria automaticamente a sua própria cópia de segurança",
|
||||
"autoBackupBody": "Selecionar <em>Restaurar backup de rede</em> cria sempre uma nova cópia da configuração <em>atual</em> antes de a substituir. Se restaurar a cópia errada, o ficheiro mais recente em <code>/var/backups/proxmenux/</code> contém o estado anterior."
|
||||
},
|
||||
"restart": {
|
||||
"heading": "Reinicie o serviço de rede",
|
||||
"body": "Executa <code>systemctl restart networking</code> após uma confirmação sim/não. Relata o resultado com <code>msg_ok</code> / <code>msg_error</code>. A maioria dos fluxos neste menu oferece o seu próprio prompt de reinicialização no final; esta opção é para reiniciar após uma edição manual ou depois de recusar o reinício do fluxo antes.",
|
||||
"warnTitle": "Breve desconexão garantida; desconexão permanente possível",
|
||||
"warnBody": "Reiniciando <code>networking</code> derruba e reaplica cada interface declarada em <code>/etc/network/interfaces</code>. As sessões SSH hospedadas nessas interfaces caem. Se a nova configuração for inválida, a rede nunca voltará. Execute isto apenas quando:",
|
||||
"warnItems": [
|
||||
"Você tem o console / IPMI / iKVM pronto, <em> ou</em>",
|
||||
"Está fisicamente ao lado da máquina, <em>ou</em>",
|
||||
"Você acabou de voltar com sucesso para uma configuração conhecida-boa e quer aplicá-la."
|
||||
]
|
||||
},
|
||||
"manualRollback": {
|
||||
"heading": "Retroceder manualmente de uma consola",
|
||||
"intro": "Se você não conseguir alcançar o menu (sem SSH, a janela está a falhar, ...) mas pode chegar a uma consola, o rollback são dois comandos:",
|
||||
"outro": "É a <em>mesma</em> operação executada pelo menu, apenas escrita à mão. Se <code>networking</code> continuar sem iniciar, consulte <code>journalctl -u networking -b</code> para identificar o erro de sintaxe ou do controlador."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noneTitle": "\"Nenhum backup encontrado\" na Restauração",
|
||||
"noneBody": "O diretório <code>/var/backups/proxmenux/</code> não existe ou não contém ficheiros <code>interfaces_backup_*</code>. Execute <em>Criar backup de rede</em> pelo menos uma vez ou faça uma reparação guiada, que cria uma cópia automaticamente. Confirme com <code>ls /var/backups/proxmenux/</code>.",
|
||||
"unreachTitle": "Reiniciar a rede tem sucesso, mas a máquina ainda não está acessível",
|
||||
"unreachBody": "A nova configuração está errada ou não atribui o seu IP de gestão. Reponha a configuração a partir da consola (ver acima). Depois use a <bridgeLink>análise de bridges</bridgeLink> e a <configLink>análise de configuração</configLink> para perceber o problema antes de voltar a aplicar.",
|
||||
"emptyTitle": "A antevisão da restauração mostra um arquivo vazio",
|
||||
"emptyBody": "O ficheiro de backup está vazio (0 bytes). Isto acontece se uma cópia falhar silenciosamente numa execução anterior. Escolha uma cópia mais antiga ou execute novamente <em>Criar backup de rede</em> agora, se a configuração atual funcionar."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — a razão mais comum pela qual um backup acaba aqui."
|
||||
},
|
||||
{
|
||||
"label": "Análise de configuração e limpeza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tailRich": " — escreve igualmente para o <code>/var/backups/proxmenux/</code> automaticamente."
|
||||
},
|
||||
{
|
||||
"label": "Diagnósticos",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tail": " — para verificar o estado atual após um restauro."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Análise de bridges e reparação guiada | Documentação ProxMenux",
|
||||
"description": "Deteta bridges vmbrX com portas físicas em falta ou inválidas, tipicamente após a reenumeração PCI. Apresenta-os com sugestões de comandos de shell e propõe uma reparação guiada em 5 passos com cópia de segurança obrigatória.",
|
||||
"ogTitle": "Análise de bridges e reparação guiada | Documentação ProxMenux",
|
||||
"ogDescription": "Verifique e repare portas de bridges Proxmox após alterações de hardware, com um procedimento guiado que permite reverter em segurança."
|
||||
},
|
||||
"header": {
|
||||
"title": "Análise de ponte e reparo guiado",
|
||||
"description": "Verifica cada bridge vmbrX declarado em /etc/network/interfaces e se as suas portas físicas existem. Caso faltem, propõe uma reparação passo a passo. A análise é só de leitura; a reparação exige confirmação, apresenta uma pré-visualização e cria uma cópia de segurança.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Lê cada ponte em <code>/etc/network/interfaces</code>, olha para sua linha <code>bridge-ports</code> e verifica se cada porta declarada (por exemplo. <code>enp3s0</code>) realmente existe na máquina. Se falta uma porta, propõe um substituto e – com consentimento explícito – aplica a alteração com um <strong>backup, visualização, aplicação, verificação</strong>."
|
||||
},
|
||||
"when": {
|
||||
"heading": "Quando precisares disto",
|
||||
"intro": "Linux atribui nomes de interface previsíveis de topologia PCI e ordem de fenda. Vários eventos os embaralham e deixam o <code>/etc/network/interfaces</code> referindo-se a nomes que já não existem:",
|
||||
"items": [
|
||||
"Adicionar ou remover uma placa PCIe (placa de rede, GPU, HBA ou adaptador NVMe).",
|
||||
"Mudar uma placa existente para outro slot PCIe.",
|
||||
"BIOS / UEFI atualiza que re-enumeram dispositivos PCI.",
|
||||
"Migrando o disco de inicialização para hardware diferente."
|
||||
],
|
||||
"outro": "Após a próxima inicialização, a ponte tenta anexar a uma porta que já não existe, falha em aparecer, e o host perde sua rede. <link>Nomes de interface persistentes</link> impede que isso aconteça novamente — mas se você já estiver bloqueado, esta página é o caminho de recuperação."
|
||||
},
|
||||
"bigPicture": {
|
||||
"heading": "O quadro geral",
|
||||
"diagram1": {
|
||||
"arrowLabel": "passo 1",
|
||||
"nodes": {
|
||||
"sourceLabel": "/etc/network/interfaces",
|
||||
"sourceDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports enp3s0",
|
||||
"bridgeLabel": "Analisar (somente leitura)",
|
||||
"bridgeDetail": "ip link show enp3s0\n→ não existe",
|
||||
"targetLabel": "Relatório + sugestão",
|
||||
"targetDetail": "❌ enp3s0: NÃO ENCONTRADA\nSubstituir por: eno1\n(ainda sem alterações)"
|
||||
}
|
||||
},
|
||||
"diagram2": {
|
||||
"arrowLabel": "aplicar com backup",
|
||||
"nodes": {
|
||||
"sourceLabel": "Reparação guiada",
|
||||
"sourceDetail": "1. Cópia de Segurança\n2. Mostrar actual\n3. Antevisão das alterações\n4. Aplicar\n5. Verificar",
|
||||
"targetLabel": "/etc/network/interfaces (novo)",
|
||||
"targetDetail": "auto vmbr0\niface vmbr0 inet static\n bridge-ports eno1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Passo 1: análise (somente leitura)",
|
||||
"intro": "Ao selecionar <strong>Analisar configuração de bridges</strong>, a ferramenta para imediatamente se o host não usar a pilha clássica Debian/Proxmox. Caso contrário, verifica cada bridge e apresenta:",
|
||||
"items": [
|
||||
"Nome do bridge, estado atual (UP / DOWN) e IP atribuído.",
|
||||
"Cada porta declarada e se existe atualmente (<code>ip link show <port></code>).",
|
||||
"Para cada porta inválida: uma substituição proposta (a primeira interface física disponível) mais o comando exato <code>sed</code> para aplicá-lo manualmente.",
|
||||
"Bridges sem qualquer linha <code>bridge-ports</code> e entradas <code>auto</code> órfãs sem bloco <code>iface</code> correspondente."
|
||||
],
|
||||
"readonlyTitle": "Garantia apenas para leitura",
|
||||
"readonlyBody": "Até este ponto o script não executou um único comando modificando. Você pode deixar a análise aberta, copiar os comandos <code>sed</code> sugeridos e aplicá-los manualmente se preferir — ou aceitar o próximo prompt para inserir o reparo guiado."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Passo 2: reparação guiada (5 passos)",
|
||||
"intro": "Só se inicia se aceitar a proposta no fim da análise. Cada passo mostra o que vai acontecer e pede confirmação antes de continuar.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Cópia de segurança",
|
||||
"body": "Copia <code>/etc/network/interfaces</code> para <code>/var/backups/proxmenux/interfaces_backup_<TIMESTAMP></code>. O caminho exato de backup é mostrado antes da cópia e novamente depois, com o comando rollback.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Rever a configuração actual",
|
||||
"body": "Abre o <code>/etc/network/interfaces</code> ao vivo numa janela de rolagem para que possa ver exactamente o que está prestes a ser alterado.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Antever as alterações propostas",
|
||||
"body": "Lista exatamente os bridges afetados e as substituições de portas previstas. Se já não for necessária reparação porque a porta reapareceu entre as verificações, o processo termina com <em>«Não são necessárias alterações.»</em>",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplicar alterações",
|
||||
"body": "Para cada ponte afetada, executa <code>sed -i \"/iface $bridge/,/bridge-ports/ s/bridge-ports.*/bridge-ports $new_ports/\"</code> contra <code>/etc/network/interfaces</code>. Se uma ponte não tiver nenhuma substituição válida disponível, a substituição é ignorada e relatada na etapa 5.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Verificação",
|
||||
"body": "Lê novamente o ficheiro e confirma a existência da nova porta de cada bridge. Mostra o comando para reverter (<code>cp <backup> /etc/network/interfaces</code>). Por fim propõe <strong>Reiniciar a rede</strong> — aceite apenas se tiver acesso de reserva à consola.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"restartTitle": "Reiniciar a rede ≠ anular sem risco",
|
||||
"restartBody": "A reparação é gravada no disco mesmo que não reinicie o serviço. <code>systemctl restart networking</code> aplica a alteração <em>agora</em> e pode interromper a sessão SSH se a nova porta estiver errada. Se recusar, a alteração entra na mesma em vigor no próximo arranque — confirme primeiro a configuração ou reverta com o comando apresentado."
|
||||
},
|
||||
"edits": {
|
||||
"heading": "O que é editado (exatamente)",
|
||||
"body": "Apenas a linha <code>bridge-ports</code> de cada bridge afetado. As outras diretivas (<code>address</code>, <code>netmask</code>, <code>gateway</code>, <code>bridge-stp</code>, …) ficam intactas. Neste procedimento o script não cria nem remove blocos <code>iface</code> — isso cabe à <link>Análise de configuração & limpeza</link>."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"unsupportedTitle": "A análise para com «Pilha de rede não suportada»",
|
||||
"unsupportedBody": "O host usa netplan, systemd-networkd ou NetworkManager. A ferramenta só suporta <code>/etc/network/interfaces</code>. Mude primeiro o host para a pilha clássica ou altere a configuração com as ferramentas nativas do gestor (por exemplo <code>netplan apply</code>).",
|
||||
"noSuggestTitle": "Nenhuma sugestão é impressa para uma porta inválida",
|
||||
"noSuggestBody": "O host tem zero interfaces físicas livres (tudo já está em outra ponte ou não existe). A análise remonta a sugerir <code>bridge-ports none</code> para que a ponte possa pelo menos subir sem um porto. Adicionar um NIC ou migrar portas entre pontes manualmente antes de repetir.",
|
||||
"stillDownTitle": "O reparo completa, mas a ponte ainda está em baixo",
|
||||
"stillDownBody": "<code>sed</code> atualizou o arquivo, mas <code>systemctl restart networking</code> foi recusado. Execute-o manualmente assim que a nova configuração for verificada, ou reinicie. Se o reinício foi aceito e a ponte ainda estiver baixa, execute <code>ip link show</code> para confirmar a nova porta existe, em seguida, verifique <code>journalctl -u networking</code> para o erro real (cabo desconectado, link não negociado, porto já um membro de outra ponte).",
|
||||
"lostSshTitle": "Perdi o acesso SSH logo após reiniciar a rede",
|
||||
"lostSshIntro": "Use console / IPMI / iKVM para chegar ao host. Restaurar o backup:",
|
||||
"lostSshOutro": "Em seguida, re-execute a análise do console para descobrir por que a sugestão não funcionou (normalmente: a porta de substituição não está realmente conectada)."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Nomes de interface persistentes",
|
||||
"href": "/docs/network/persistent-names",
|
||||
"tail": " — atribuir nomes aos endereços MAC para que este cenário deixe de acontecer."
|
||||
},
|
||||
{
|
||||
"label": "Análise de configuração e limpeza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tailRich": " — para os blocos <code>iface</code> órfãos (a outra metade do mesmo problema)."
|
||||
},
|
||||
{
|
||||
"label": "Cópia de segurança e reinício das interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — instantâneos manuais e o navegador de restauração."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,122 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Análise de configuração e limpeza guiada | Documentação ProxMenux",
|
||||
"description": "Deteta blocos iface em /etc/network/interfaces que referem placas de rede físicas já ausentes do host. Apresenta-os e propõe uma remoção guiada em 5 passos com cópia de segurança obrigatória e pré-visualização de cada bloco.",
|
||||
"ogTitle": "Análise de configuração e limpeza guiada | Documentação ProxMenux",
|
||||
"ogDescription": "Encontrar e remover blocos de interface órfão deixados para trás por mudanças de hardware, com visualização completa e rollback."
|
||||
},
|
||||
"header": {
|
||||
"title": "Análise de configuração e limpeza guiada",
|
||||
"description": "Examina cada bloco iface em /etc/network/interfaces e verifica se a placa de rede física correspondente ainda existe. Apresenta os blocos órfãos deixados por alterações de hardware e propõe uma remoção guiada com cópia de segurança, pré-visualização e confirmação de cada bloco.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Identifica declarações <code>iface</code> cuja NIC de apoio não está mais presente no host (típico após a substituição ou remoção de uma placa de rede). Em seguida, oferece uma limpeza guiada que remove <em>apenas</em> os blocos órfãos, com um backup, uma visualização por seção e uma confirmação final explícita."
|
||||
},
|
||||
"differs": {
|
||||
"heading": "Como difere da análise da ponte",
|
||||
"headerAspect": "Aspecto",
|
||||
"headerBridge": "Análise da ponte",
|
||||
"headerConfig": "Análise de configuração",
|
||||
"rows": [
|
||||
{
|
||||
"aspect": "Olha para",
|
||||
"bridge": "Pontes (<code>vmbrX</code>) e sua linha <code>bridge-ports</code>",
|
||||
"config": "Cada bloco <code>iface</code>, excluindo loopback, bridges e bonds"
|
||||
},
|
||||
{
|
||||
"aspect": "Detecta",
|
||||
"bridge": "Bridges que referem uma porta inexistente",
|
||||
"config": "Blocos de interface independentes para NICs que não existem"
|
||||
},
|
||||
{
|
||||
"aspect": "Acção de reparação",
|
||||
"bridge": "Substitui o nome do porto em <code>bridge-ports</code>",
|
||||
"config": "Remove todo o bloco <code>iface</code>"
|
||||
},
|
||||
{
|
||||
"aspect": "Exclui",
|
||||
"bridge": "Nada — cada ponte é analisada",
|
||||
"config": "Bridges (<code>vmbrX</code>) e bonds (<code>bondX</code>) são sempre mantidos, pois são virtuais e a sua ausência durante o arranque pode ser normal"
|
||||
}
|
||||
],
|
||||
"outro": "Na prática, usam-se frequentemente ambas por esta ordem: primeiro a <strong>análise de configuração</strong> para remover blocos órfãos, depois a <link>análise de bridges</link> para reatribuir os bridges que dependiam da interface removida."
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Passo 1: análise (somente leitura)",
|
||||
"intro": "Aborta imediatamente se a máquina não estiver na pilha clássica. Caso contrário, lista todas as interfaces não- loopback configuradas e reporta o seu estado:",
|
||||
"virtTitle": "As interfaces virtuais estão protegidas",
|
||||
"virtBody": "Bridges (<code>vmbrX</code>) e bonds (<code>bondX</code>) são estruturas virtuais. Podem legitimamente não existir no momento da inspeção, como um bridge ainda sem portas. A análise nunca propõe removê-los — apenas placas de rede físicas."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Passo 2: limpeza guiada (5 passos)",
|
||||
"intro": "Só se inicia se aceitar a proposta no fim da análise. Cada passo exige confirmação; cancelar em qualquer ponto termina sem escrever.",
|
||||
"steps": [
|
||||
{
|
||||
"title": "1. Cópia de segurança",
|
||||
"body": "Copia <code>/etc/network/interfaces</code> para <code>/var/backups/proxmenux/interfaces_backup_<TIMESTAMP></code>. Caminho mostrado antes e depois.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "2. Confirmar a lista de remoção",
|
||||
"body": "Lista exatamente os blocos de interfaces físicas a remover. Se as placas de rede reaparecerem entre a análise e a limpeza, por exemplo após voltar a inserir uma placa, o processo termina com <em>«Não é necessária limpeza.»</em>",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "3. Visualizar o( s) bloco( s) exato( s)",
|
||||
"body": "Abre uma vista com deslocamento de cada bloco <code>iface</code> que seria eliminado, exatamente como está no ficheiro. É a altura de identificar, por exemplo, um hook <code>up</code> que queira preservar.",
|
||||
"tone": "blue"
|
||||
},
|
||||
{
|
||||
"title": "4. Aplicar remoção",
|
||||
"body": "Para cada interface órfã, executa <code>sed -i \"/^iface $iface/,/^$/d\" /etc/network/interfaces</code>. Isso apaga da linha <code>iface</code> correspondente até a próxima linha em branco.",
|
||||
"tone": "amber"
|
||||
},
|
||||
{
|
||||
"title": "5. Verificação",
|
||||
"body": "Lê novamente o ficheiro, lista o que foi removido e verifica as interfaces restantes. Mostra o comando para reverter. <strong>Não</strong> reinicia a rede automaticamente — remover um bloco não usado pode ser aplicado em segurança no próximo reinício, evitando alterar o estado ativo.",
|
||||
"tone": "emerald"
|
||||
}
|
||||
],
|
||||
"noRestartTitle": "Não reinicia automaticamente a rede",
|
||||
"noRestartBody": "Ao contrário do reparo de ponte, o fluxo de limpeza não oferece para reiniciar o serviço. Remover um bloco de interface não utilizado não tem efeito imediato na configuração em execução, então uma reinicialização é desnecessária e seria um risco desnecessário de conectividade. A mudança produz efeito no próximo manual <code>systemctl restart networking</code> ou na próxima reinicialização."
|
||||
},
|
||||
"caveats": {
|
||||
"heading": "Advertências importantes",
|
||||
"boundaryTitle": "O limite do bloco é a primeira linha em branco",
|
||||
"boundaryBody": "O padrão <code>sed</code> elimina desde <code>iface <name></code> até à próxima linha vazia. Se <code>/etc/network/interfaces</code> não tiver linhas vazias entre blocos, algo raro mas possível após edição manual, o bloco seguinte também pode ser eliminado. Por isso, <strong>o passo 3 é obrigatório</strong>: reveja a pré-visualização antes de confirmar.",
|
||||
"tandemTitle": "Um bloco iface órfão usado por um bridge é detetado aqui, não na análise de bridges",
|
||||
"tandemBody": "Se <code>vmbr0</code> declarar <code>bridge-ports enp3s0</code> e <code>enp3s0</code> também tiver o seu bloco <code>iface enp3s0 inet manual</code>, remover <code>enp3s0</code> aqui deixa uma referência inválida em <code>vmbr0</code>. Após a limpeza, execute a <link>análise de bridges</link> para reatribuir ou remover a porta do bridge. Os dois procedimentos foram concebidos para uso conjunto."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"notFoundTitle": "A análise mostra o meu novo NIC como \"NÃO ENCONTRADO\"",
|
||||
"notFoundBody": "O kernel vê o dispositivo com um nome diferente do que está no ficheiro. Execute <code>ip link show</code> para obter o nome real. É precisamente um caso em que os <link>nomes persistentes das interfaces</link> evitariam o problema no futuro.",
|
||||
"tooMuchTitle": "A limpeza removeu demasiado, incluindo um bloco que queria manter",
|
||||
"tooMuchBody": "Restaurar a partir do backup impresso na etapa 5:",
|
||||
"tooMuchOutro": "Edite o arquivo manualmente para adicionar uma linha em branco clara entre os blocos antes de repetir a limpeza ou remover o bloco problemático manualmente.",
|
||||
"bridgeBreakTitle": "Uma ponte pára de funcionar após a limpeza",
|
||||
"bridgeBreakBody": "O bridge dependia de uma porta cujo bloco <code>iface</code> foi removido. Execute a <link>análise de bridges</link> e a sugestão associará o bridge a uma interface física existente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — o acompanhamento natural após uma limpeza."
|
||||
},
|
||||
{
|
||||
"label": "Nomes de interface persistentes",
|
||||
"href": "/docs/network/persistent-names",
|
||||
"tail": " — impede a acumulação de blocos órfãos após cada mudança de hardware."
|
||||
},
|
||||
{
|
||||
"label": "Cópia de segurança e reinício das interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — instantâneos manuais e o navegador de restauração."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Diagnósticos | Documentação ProxMenux",
|
||||
"description": "Três diagnósticos pontuais só de leitura: Mostrar tabela de encaminhamento, Testar conectividade e Diagnósticos avançados. Apenas inspeção — nunca escreve em /etc/network/interfaces nem executa comandos de alteração, com uma exceção explícita que exige a sua aceitação: purgar o NetworkManager, caso seja detetado.",
|
||||
"ogTitle": "Diagnósticos | Documentação ProxMenux",
|
||||
"ogDescription": "Diagnósticos de rede somente leitura para o host Proxmox: roteamento, acessibilidade, estatísticas avançadas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Diagnósticos",
|
||||
"description": "Três verificações pontuais só de leitura do estado atual da rede: tabela de encaminhamento, teste de conectividade e estatísticas avançadas. Nenhuma escreve em /etc/network/interfaces — são seguras a qualquer momento, incluindo por SSH. Para monitorização interativa em tempo real, consulte Ferramentas de monitorização em tempo real.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Apresenta informações de encaminhamento, acessibilidade e estatísticas agregadas <strong>sem modificar nada</strong>. Use para confirmar que a rede funciona ou identificar IPs duplicados. Para observar o tráfego continuamente, consulte <monitoringLink>Ferramentas de monitorização em tempo real</monitoringLink>; para ver o ficheiro de configuração em bruto, consulte <backupLink>Cópia de segurança e reinício das interfaces</backupLink>."
|
||||
},
|
||||
"routing": {
|
||||
"heading": "Mostrar tabela de roteamento",
|
||||
"body": "Lista todas as rotas que o kernel usa atualmente (<code>ip route show</code>) e destaca o gateway padrão. Útil para confirmar que o tráfego para a internet sai através da interface esperada e que nenhuma rota restante está tendo precedência."
|
||||
},
|
||||
"connectivity": {
|
||||
"heading": "Testar conectividade",
|
||||
"intro": "Envia duas sondas ICMP para três alvos em sequência e reporta cada um. Em seguida, executa um <code>nslookup google.com</code> para verificar a resolução DNS independentemente do ICMP.",
|
||||
"headerTest": "Teste",
|
||||
"headerTarget": "Alvo",
|
||||
"headerConfirms": "O que confirma",
|
||||
"rows": [
|
||||
{
|
||||
"test": "DNS do Google",
|
||||
"target": "8.8.8.8",
|
||||
"confirms": "Alcance externo através de um conhecido IP anycast"
|
||||
},
|
||||
{
|
||||
"test": "Cloudflare DNS",
|
||||
"target": "1.1.1.1",
|
||||
"confirms": "Segunda opinião independente se o Google bloquear ICMP"
|
||||
},
|
||||
{
|
||||
"test": "Gateway",
|
||||
"target": "(rota padrão)",
|
||||
"confirms": "Conectividade L2 / L3 com o roteador local"
|
||||
},
|
||||
{
|
||||
"test": "Resolução DNS",
|
||||
"target": "google.com",
|
||||
"confirms": "O servidor DNS está acessível e responde"
|
||||
}
|
||||
],
|
||||
"readingTitle": "Lendo o resultado",
|
||||
"readingBody": "Se o teste do gateway passar mas os destinos DNS públicos falharem, tem conectividade local mas não tem Internet — verifique a ligação a montante do gateway. Se a resolução DNS falhar mas os pings para <code>8.8.8.8</code> tiverem sucesso, o problema está no resolvedor, não na rede: verifique <code>/etc/resolv.conf</code>."
|
||||
},
|
||||
"advanced": {
|
||||
"heading": "Diagnóstico Avançado",
|
||||
"intro": "Agrega estatísticas em toda a rede e executa uma bateria de verificações de questões comuns. Relata as contagens de conexão ativa, portas de escuta, interfaces totais e sinaliza dois anti- padrões explicitamente:",
|
||||
"items": [
|
||||
"<strong>NetworkManager em execução num host Proxmox.</strong> O NetworkManager e o <code>ifupdown</code> do Proxmox entram em conflito: ambos tentam gerir as interfaces, tornando os bridges instáveis ou impedindo a sua ativação. Se for detetado, a ferramenta pede confirmação interativa para o parar, desativar e purgar (é o <em>único</em> diagnóstico que pode modificar o sistema, e só após consentimento explícito).",
|
||||
"<strong>Endereços IP duplicados em diferentes interfaces.</strong> Duas interfaces com o mesmo IPv4 causam conectividade intermitente extremamente difícil de depurar de dentro do VM. Detectado através de <code>ip -4 addr show | sort | uniq -d</code>."
|
||||
],
|
||||
"nmTitle": "O prompt NetworkManager é a única ação modificadora aqui",
|
||||
"nmBody": "Todas as outras verificações dos diagnósticos avançados são só de leitura. A remoção do NetworkManager exige confirmação sim/não e executa <code>systemctl stop / disable</code> + <code>apt-get purge -y network-manager</code>. Se recusar, nada muda."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"gwTitle": "Testar conectividade indica uma falha do gateway, mas o host tem acesso à Internet",
|
||||
"gwBody": "Alguns routers não respondem a ICMP na interface interna mesmo quando encaminham corretamente o tráfego. Teste com <code>traceroute 8.8.8.8</code> numa consola: se o segundo salto for o seu ISP e o teste de DNS público tiver passado, o gateway está a funcionar apesar do ping falhado.",
|
||||
"dupTitle": "Diagnóstico avançado continua sinalizando IPs duplicados depois que eu removi um",
|
||||
"dupBody": "A verificação olha para o estado do kernel ao vivo, não para o arquivo de configuração. Executar <code>ip -4 addr show</code> para confirmar; se a duplicata ainda estiver presente, uma interface ainda está segurando-a. Use <code>ip addr del <IP>/<mask> dev <iface></code> para removê-lo do estado ao vivo, em seguida, edite <code>/etc/network/interfaces</code> se ele também é persistente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Ferramentas de monitorização ao vivo",
|
||||
"href": "/docs/network/monitoring",
|
||||
"tail": " — lançadores interativos iftop / iptraf-ng / iperf3."
|
||||
},
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — quando um vmbrX não tem a sua porta física."
|
||||
},
|
||||
{
|
||||
"label": "Análise de configuração e limpeza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tail": " — quando uma NIC antiga é ainda declarada, mas já não está presente."
|
||||
},
|
||||
{
|
||||
"label": "Cópia de segurança e reinício das interfaces",
|
||||
"href": "/docs/network/backup-restore",
|
||||
"tail": " — para criar uma cópia da configuração antes de qualquer alteração."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Gestão de rede Proxmox — Bridges, bonds, diagnóstico, reparação | ProxMenux",
|
||||
"description": "Diagnósticos só de leitura, análises seguidas de sugestões e reparações guiadas para a pilha de rede Debian / Proxmox (/etc/network/interfaces). Inspecione bridges e bonds, execute ferramentas de monitorização em tempo real, torne persistentes os nomes das interfaces, crie cópias de segurança e reinicie a rede em segurança — com cópias obrigatórias e pré-visualizações passo a passo.",
|
||||
"ogTitle": "Gestão de rede Proxmox — Bridges, bonds, diagnóstico, reparação",
|
||||
"ogDescription": "Diagnósticos, análise e reparos guiados para a pilha de rede Proxmox com backups obrigatórios e pré-visualizações passo a passo.",
|
||||
"twitterTitle": "Gestão de rede Proxmox | ProxMenux",
|
||||
"twitterDescription": "Bridges, bonds, diagnósticos e reparações guiadas para a pilha de rede Proxmox com cópias de segurança obrigatórias."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gerenciamento de rede",
|
||||
"description": "Diagnósticos só de leitura, relatórios de análise com sugestões e reparações guiadas para a pilha de rede clássica Debian/Proxmox. Cada operação destrutiva cria primeiro uma cópia de segurança e mostra as alterações exatas antes de as aplicar.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para que serve este menu",
|
||||
"body": "Inspecione, diagnostique e, quando necessário, repare a configuração de rede do host Proxmox sem perder o acesso remoto. As ferramentas seguem um princípio: <strong>ler primeiro, propor e só depois aplicar com consentimento explícito e uma cópia de segurança</strong>. Não existe um botão «Corrigir tudo automaticamente»."
|
||||
},
|
||||
"openingMenu": {
|
||||
"heading": "Abrir o menu",
|
||||
"intro": "No menu principal do ProxMenux, selecione <strong>Rede</strong>. Verá o seguinte:",
|
||||
"imageAlt": "Menu de gerenciamento de rede com diagnósticos, monitoramento, análise, reparo, nomes persistentes e opções de backup"
|
||||
},
|
||||
"safety": {
|
||||
"heading": "O modelo de segurança",
|
||||
"body": "Editar a configuração de rede de um host Proxmox remoto é uma das formas mais fáceis de perder o acesso. O ProxMenux tem isso em conta em cada ação. As ferramentas dividem-se em três níveis de comportamento — escolha o cartão que corresponde ao seu objetivo:"
|
||||
},
|
||||
"tiers": {
|
||||
"readOnly": {
|
||||
"title": "Somente leitura",
|
||||
"body": "Inspecção pura. Não é possível modificar o sistema em nenhuma circunstância.",
|
||||
"items": [
|
||||
"Tabela de roteamento, testes de conectividade, estatísticas avançadas",
|
||||
"Monitorização do tráfego ao vivo (iftop, iptraf-ng)",
|
||||
"Teste de largura de banda (iperf3)"
|
||||
]
|
||||
},
|
||||
"analyze": {
|
||||
"title": "Analisar, então sugerir",
|
||||
"body": "Detecta problemas, imprime um relatório com comandos de shell propostos e pára. Você decide se deve entrar na reparação guiada depois.",
|
||||
"items": [
|
||||
"Análise de configuração da ponte",
|
||||
"Análise da configuração da rede"
|
||||
]
|
||||
},
|
||||
"apply": {
|
||||
"title": "Aplicar com backup",
|
||||
"body": "Modifica o sistema. Cria sempre primeiro uma cópia de segurança do ficheiro afetado com data e hora e mostra uma pré-visualização antes de escrever.",
|
||||
"items": [
|
||||
"Nomes de interface persistentes (ficheiros .link)",
|
||||
"Backup manual, restauração e reinício do serviço"
|
||||
]
|
||||
}
|
||||
},
|
||||
"classicTitle": "Apenas a pilha clássica",
|
||||
"classicBody": "Cada função de análise e reparo verifica o gerenciador de rede ativo antes de tocar em qualquer coisa. Se o host executar <strong>netplan</strong>, <strong>systemd-networkd</strong> ou <strong>NetworkManager</strong>, a ferramenta aborta imediatamente com uma mensagem clara — o menu só suporta a pilha Debian/Proxmox clássica no <code>/etc/network/interfaces</code>. Isto é intencional: editar um arquivo netplan com regras escritas para <code>ifupdown</code> iria silenciosamente corromper a configuração.",
|
||||
"backups": {
|
||||
"heading": "Para onde vão os backups",
|
||||
"intro": "Cada reparação guiada, restauro ou cópia de segurança manual grava uma cópia de <code>/etc/network/interfaces</code> com data e hora em <code>/var/backups/proxmenux/</code>:",
|
||||
"rollbackIntro": "Para repor manualmente a configuração anterior a partir de uma consola:"
|
||||
},
|
||||
"readOnlySection": {
|
||||
"heading": "Inspeção somente de leitura",
|
||||
"body": "O ponto de partida quando algo parece errado. Apenas inspeção — nunca escreve em <code>/etc/network/interfaces</code> nem executa comandos que alterem o sistema, com uma única exceção explícita que exige a sua aceitação: purgar o NetworkManager, caso seja detetado. Pode ser usado em segurança por SSH a qualquer momento.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Diagnósticos",
|
||||
"description": "Três verificações pontuais só de leitura: Mostrar tabela de encaminhamento, Testar conectividade e Diagnósticos avançados. Apenas inspeção — nunca escreve no sistema."
|
||||
},
|
||||
{
|
||||
"title": "Ferramentas de monitorização ao vivo",
|
||||
"description": "Três lançadores interativos: iftop (largura de banda em tempo real por par host), iptraf-ng (monitor de tráfego multimodo) e iperf3 (teste de largura de banda, servidor / modo cliente)."
|
||||
}
|
||||
]
|
||||
},
|
||||
"analyzeSection": {
|
||||
"heading": "Analisar, então sugerir",
|
||||
"body": "Usadas quando uma inspeção ou uma falha real aponta para um problema de configuração. Cada ferramenta examina a parte relevante de <code>/etc/network/interfaces</code>, apresenta um relatório detalhado com o comando exato de shell que corrigiria cada problema e <strong>para</strong>. Se aceitar depois a reparação guiada opcional, é criada uma cópia de segurança antes de cada alteração, que também é pré-visualizada antes da escrita.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Análise de ponte e reparo guiado",
|
||||
"description": "Deteta bridges vmbrX com portas em falta ou inválidas, algo típico após a reenumeração PCI. Mostra primeiro um relatório e só repara quando aceita o procedimento guiado de 5 passos."
|
||||
},
|
||||
{
|
||||
"title": "Análise de configuração e limpeza guiada",
|
||||
"description": "Encontra interfaces físicas declaradas em /etc/network/interfaces que já não existem (configurações órfãs deixadas por mudanças de hardware). Comunica-os e oferece uma remoção guiada."
|
||||
}
|
||||
]
|
||||
},
|
||||
"applySection": {
|
||||
"heading": "Aplicar com backup",
|
||||
"body": "Estas ferramentas escrevem no disco por natureza. Cada uma cria primeiro uma cópia de segurança do ficheiro afetado com data e hora, e as opções destrutivas, como restauro e reinício, exigem confirmação explícita sim/não. Os <em>nomes persistentes das interfaces</em> entram em vigor no próximo reinício, não de imediato, pelo que a sua configuração pode ser agendada em segurança mesmo num host remoto.",
|
||||
"options": [
|
||||
{
|
||||
"title": "Nomes de interface persistentes",
|
||||
"description": "Associa os nomes das interfaces (eno1, enp3s0, …) aos endereços MAC através de ficheiros .link do systemd. Os nomes mantêm-se após mudanças de slot PCI, atualizações do kernel e adição ou remoção de outras placas de rede."
|
||||
},
|
||||
{
|
||||
"title": "Cópia de segurança e reinício das interfaces",
|
||||
"description": "Instantâneo manual do /etc/network/interfaces, navegar e restaurar backups anteriores, visualizar a configuração ao vivo e reiniciar o serviço de rede quando necessário."
|
||||
}
|
||||
]
|
||||
},
|
||||
"consoleTitle": "Tenha acesso à consola preparado",
|
||||
"consoleSubTitle": "Antes de qualquer reparação em uma máquina remota",
|
||||
"consoleBody": "Se estiver ligado por SSH e tiver apenas um caminho de acesso ao host, prepare uma alternativa antes de alterar a rede: consola física / IPMI / iKVM ou outra máquina na mesma LAN. As reparações guiadas são seguras e oferecem sempre um comando para reverter as alterações, mas um bridge mal configurado ou uma ligação interrompida pode deixá-lo sem acesso até conseguir chegar à consola."
|
||||
}
|
||||
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Ferramentas de monitorização em tempo real | Documentação ProxMenux",
|
||||
"description": "Três lançadores interativos de monitoramento de rede: iftop (largura de banda em tempo real por par host), iptraf-ng (monitor de tráfego multimodo) e iperf3 (teste de largura de banda, servidor / modo cliente). Cada um é instalado na primeira utilização.",
|
||||
"ogTitle": "Ferramentas de monitorização em tempo real | Documentação ProxMenux",
|
||||
"ogDescription": "Monitoramento de rede interativo e testes de largura de banda para o host Proxmox: iftop, iptraf-ng, iperf3."
|
||||
},
|
||||
"header": {
|
||||
"title": "Ferramentas de monitorização ao vivo",
|
||||
"description": "Três ferramentas interativas para observar a rede em tempo real e medir a largura de banda: iftop, iptraf-ng e iperf3. Cada uma é instalada automaticamente através do apt na primeira utilização, corre em primeiro plano e termina com a tecla indicada. Não alteram a configuração de rede do host; o iperf3 gera tráfego de teste.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Três ferramentas interativas de monitoramento, cada uma atrás de seu próprio menu. A primeira vez que você lança um, o pacote é instalado silenciosamente via <code>apt-get</code>. Lançamentos subsequentes começam instantaneamente. Nenhuma destas ferramentas modifica a configuração da rede host."
|
||||
},
|
||||
"when": {
|
||||
"heading": "Quando utilizar qual",
|
||||
"headerQuestion": "Pergunta",
|
||||
"headerUse": "Usar",
|
||||
"rows": [
|
||||
{
|
||||
"question": "Quem está saturando o link <em> agora</em>?",
|
||||
"use": "iftop"
|
||||
},
|
||||
{
|
||||
"question": "Qual é a distribuição por protocolo e que tamanhos de pacotes e fluxos TCP estão presentes?",
|
||||
"use": "iptraf-ng"
|
||||
},
|
||||
{
|
||||
"question": "Quanta largura de banda está disponível entre duas máquinas?",
|
||||
"use": "iperf3"
|
||||
}
|
||||
]
|
||||
},
|
||||
"iftop": {
|
||||
"heading": "uso de rede em tempo real (iftop)",
|
||||
"body": "Largura de banda em tempo real por par de hosts (origem ↔ destino) — como o <code>top</code> para o tráfego. Mostra os fluxos mais intensos no topo, com médias móveis de 2/10/40 segundos. A melhor ferramenta para responder a <em>«porque está a minha ligação de saída saturada?»</em>.",
|
||||
"exit": "<strong>Sair:</strong> prima <kbd>q</kbd>. O ProxMenux mostra um lembrete antes de iniciar.",
|
||||
"keysTitle": "Teclas úteis no iftop",
|
||||
"keysBody": "<kbd>n</kbd> alterna a consulta DNS, <kbd>p</kbd> mostra os números das portas, <kbd>P</kbd> pausa a visualização, <kbd>t</kbd> alterna a direção das linhas (enviado / recebido / ambos), <kbd>1</kbd>/<kbd>2</kbd>/<kbd>3</kbd> ordena pela média de 2 s / 10 s / 40 s. Lista completa em <code>man iftop</code>."
|
||||
},
|
||||
"iptraf": {
|
||||
"heading": "ferramenta de monitoramento de rede (iptraf-ng)",
|
||||
"intro": "Um monitor de tráfego com vários modos, controlado por menus. O iftop responde a <em>«quem»</em>, enquanto o iptraf-ng responde a <em>«o quê»</em>: contagens de bytes e pacotes por protocolo, acompanhamento do estado das ligações TCP, histogramas de tamanho dos pacotes e atividade LAN por estação.",
|
||||
"menuIntro": "No lançamento você recebe um menu de cinco opções:",
|
||||
"headerMode": "Modo",
|
||||
"headerUseFor": "Use-o para",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "IP traffic monitor",
|
||||
"useFor": "Lista em tempo real de fluxos TCP / UDP / ICMP / outros protocolos IP, com contadores de bytes e estado da ligação"
|
||||
},
|
||||
{
|
||||
"mode": "General interface stats",
|
||||
"useFor": "Contagens agregadas de pacotes IPv4 / IPv6 / TCP / UDP / ICMP / não IP por placa de rede"
|
||||
},
|
||||
{
|
||||
"mode": "Detailed interface stats",
|
||||
"useFor": "O mesmo que acima, mas para uma interface, com tamanho de pacote e detalhe de taxa"
|
||||
},
|
||||
{
|
||||
"mode": "Statistical breakdowns",
|
||||
"useFor": "Histograma de distribuição do tamanho do pacote, por porta TCP / UDP"
|
||||
},
|
||||
{
|
||||
"mode": "LAN station monitor",
|
||||
"useFor": "Estatísticas de tráfego por MAC para o domínio de transmissão local"
|
||||
}
|
||||
],
|
||||
"exit": "<strong>Saída:</strong> pressione <kbd>x</kbd> de qualquer vista (ou <kbd>Q</kbd> do menu principal). O ProxMenux mostra uma janela de lembrete antes do lançamento.",
|
||||
"logTitle": "Guardar capturas num ficheiro",
|
||||
"logBody": "Cada modo oferece para registrar estatísticas capturadas para <code>/var/log/iptraf-ng/</code>. Útil se você precisar de um registro de um pico de tráfego — deixe-o em execução, faça log para arquivo, reveja o arquivo depois, em vez de tentar ler a tela ao vivo."
|
||||
},
|
||||
"iperf3": {
|
||||
"heading": "Teste de largura de banda (iperf3)",
|
||||
"intro1": "Mede o débito TCP real entre dois hosts. Ao contrário do iftop / iptraf-ng, que observam o tráfego existente, o iperf3 gera tráfego sintético para testar a ligação sob carga. Indispensável para perguntas como <em>«a minha ligação 10 GbE atinge realmente 10 GbE?»</em> ou <em>«o estrangulamento está na placa de rede, no switch ou no armazenamento?»</em>.",
|
||||
"intro2": "O iperf3 é uma <strong>ferramenta para dois hosts</strong>: um funciona como servidor, à escuta na porta TCP 5201, e o outro como cliente, que se liga, envia dados e mostra o débito. O ProxMenux pergunta qual o modo pretendido:",
|
||||
"headerMode": "Modo",
|
||||
"headerBehaviour": "Comportamento",
|
||||
"headerCli": "CLI equivalente",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "Servidor",
|
||||
"behaviour": "Escuta em TCP 5201 e imprime resultados para cada teste de entrada. Para em Ctrl+C.",
|
||||
"cli": "iperf3 -s"
|
||||
},
|
||||
{
|
||||
"mode": "Cliente",
|
||||
"behaviour": "Pede o IP ou nome do servidor, liga-se, executa o teste predefinido de 10 segundos e mostra o relatório.",
|
||||
"cli": "iperf3 -c <target>"
|
||||
}
|
||||
],
|
||||
"workflowIntro": "Fluxo de trabalho típico para testar uma ligação 10 GbE entre duas máquinas Proxmox:",
|
||||
"workflow": [
|
||||
"No host A, abra o menu Rede → <em>Teste de largura de banda (iperf3)</em> → escolha <strong>Servidor</strong>.",
|
||||
"No host B, abra a mesma entrada de menu → escolha <strong>Cliente</strong> → introduza o IP do host A.",
|
||||
"Espere 10 segundos. Compare o débito apresentado com o máximo teórico da ligação."
|
||||
],
|
||||
"sample": "Exemplo de saída do cliente:",
|
||||
"flagsTitle": "Opções úteis para executar manualmente numa shell",
|
||||
"flagsBody": "<code>-t 60</code> teste mais longo (60s em vez de 10s padrão), <code>-P 4</code> 4 fluxos paralelos (satura mais rápido), <code>-R</code> direção reversa (servidor → cliente), <code>-u -b 100M</code> UDP teste em 100 Mbit/s (para medições de jitter / perda de pacotes), <code>-p 5202</code> usar uma porta diferente (testes múltiplos em paralelo). <code>man iperf3</code> para o conjunto completo.",
|
||||
"firewallTitle": "Abrir a porta de firewall no servidor",
|
||||
"firewallBody": "O servidor escuta por predefinição na porta TCP <strong>5201</strong>. Se o executar num host Proxmox com firewall restritiva, ao nível do datacenter ou do host, permita ligações TCP 5201 de entrada a partir do IP do cliente durante o teste e volte a fechar a porta no fim. O mesmo se aplica a <code>nftables</code> / <code>iptables</code> em hosts físicos."
|
||||
},
|
||||
"install": {
|
||||
"heading": "Primeiro lançamento instala o pacote",
|
||||
"body": "Todos os três lançadores verificam o binário e executam o <code>apt-get update -qq && apt-get install -y <pkg></code> se estiver em falta. A instalação é silenciosa: o menu pode aparecer congelado para 10–30 segundos na primeira vez. Lançamentos subsequentes começam instantaneamente."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"hangTitle": "A instalação fica bloqueada na primeira execução",
|
||||
"hangBody": "O host não tem Internet ou os repositórios apt estão inacessíveis. Cancele com <kbd>Ctrl</kbd>+<kbd>C</kbd>, execute <code>apt-get update</code> manualmente para ver o erro real (DNS, assinatura do repositório, proxy, …) e volte ao menu.",
|
||||
"refusedTitle": "Cliente iperf3: «unable to connect to server: Connection refused»",
|
||||
"refusedBody": "Ou o servidor não está em execução, ou seu firewall bloqueia TCP 5201. Confirme no servidor: <code>ss -tlnp | grep 5201</code> — deve mostrar iperf3 ouvindo. Se ouvir mas o cliente ainda falhar, verifique o caminho do firewall entre os dois hosts.",
|
||||
"slowTitle": "O iperf3 apresenta um débito muito inferior à velocidade esperada da ligação",
|
||||
"slowBody": "Causas comuns por ordem de probabilidade: (1) a CPU de um host limita o débito — tente <code>iperf3 -c <target> -P 4</code> para usar vários núcleos; (2) o percurso passa por uma ligação mais lenta, como um switch gigabit entre duas placas 10 GbE; (3) MTU diferentes — verifique <code>ip link show</code> nas duas pontas; (4) offloading da placa de rede desativado — consulte o script da comunidade <em>Disable NIC Offloading</em> se tiver uma placa Intel e1000e.",
|
||||
"noTrafficTitle": "iftop / iptraf-ng não mostram tráfego para uma máquina ocupada",
|
||||
"noTrafficBody": "A captura padrão está na primeira interface detectada. Especifique o direito explicitamente a partir do shell: <code>iftop -i vmbr0</code> ou <code>iptraf-ng -i vmbr0</code>. O lançador de menus usa o padrão; para interfaces não padrão, execute a partir de uma consola."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Diagnósticos",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tail": " — as verificações pontuais só de leitura (encaminhamento, conectividade e estatísticas avançadas)."
|
||||
},
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tail": " — quando o controlo revela que uma interface ou ponte não está a fazer o que deveria."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Nomes de interface persistentes | Documentação ProxMenux",
|
||||
"description": "Associe os nomes das interfaces Proxmox (eno1, enp3s0, …) aos endereços MAC através de ficheiros .link do systemd para os manter após a reenumeração PCI, atualizações do kernel e adição ou remoção de outras placas de rede.",
|
||||
"ogTitle": "Nomes de interface persistentes | Documentação ProxMenux",
|
||||
"ogDescription": "Impeça que os nomes das interfaces Proxmox mudem quando altera o hardware. Usa ficheiros .link do systemd associados ao endereço MAC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Nomes de interface persistentes",
|
||||
"description": "Gera um ficheiro .link do systemd por placa de rede física para associar o nome atribuído pelo kernel ao endereço MAC da placa. Após a aplicação no próximo reinício, os nomes das interfaces mantêm-se estáveis ao adicionar, remover ou mudar placas PCIe de lugar.",
|
||||
"section": "Rede"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Para cada NIC físico no host, escreve um pequeno arquivo sob <code>/etc/systemd/network/10-<iface>.link</code> que diz: <em>\"o dispositivo com este MAC deve ser sempre chamado este nome\"</em>. systemd-udevd aplica a regra em cada inicialização, antes que <code>ifupdown</code> leia <code>/etc/network/interfaces</code>."
|
||||
},
|
||||
"problem": {
|
||||
"heading": "O problema que isto resolve",
|
||||
"intro": "O Linux deriva os nomes predefinidos das interfaces da topologia PCI — <code>eno1</code> = integrada na placa principal, <code>enp3s0</code> = placa no barramento PCI 3, slot 0, etc. O esquema de nomes é determinístico <em>para a mesma disposição de hardware</em>. Se a disposição mudar, os nomes mudam:",
|
||||
"items": [
|
||||
"Adicione um GPU na frente de um NIC existente → o número de barramento NIC pode mudar → alterações de nome.",
|
||||
"Mudar uma placa para outro slot PCIe → o nome muda.",
|
||||
"BIOS / UEFI atualização que re-enumera dispositivos → nomes podem mudar.",
|
||||
"Substituir uma placa avariada pelo mesmo modelo noutro slot → o nome muda."
|
||||
],
|
||||
"outro": "Após uma alteração destas, <code>/etc/network/interfaces</code> continua a referir o nome <em>antigo</em>; o bridge não se ativa e o host perde a rede. Configurar nomes persistentes impede que este cenário se repita."
|
||||
},
|
||||
"howWorks": {
|
||||
"heading": "Como funciona",
|
||||
"arrowLabel": "por NIC",
|
||||
"nodes": {
|
||||
"detectLabel": "Detetar placas de rede físicas",
|
||||
"detectDetail": "ls /sys/class/net/\nexcluir vmbr / bond /\ndocker / veth / wireguard …",
|
||||
"readLabel": "Ler cada MAC",
|
||||
"readDetail": "cat /sys/class/net/\n '<'iface'>'/address",
|
||||
"writeLabel": "Gravar o ficheiro .link",
|
||||
"writeDetail": "/etc/systemd/network/\n 10-'<'iface'>'.link"
|
||||
},
|
||||
"minimalIntro": "Cada arquivo gerado é intencionalmente mínimo:",
|
||||
"minimalOutro": "No arranque, o systemd-udevd identifica o dispositivo pelo MAC e atribui o nome pedido <em>antes</em> da intervenção de outros componentes (ifupdown, nomes predefinidos do kernel). O prefixo <code>10-</code> garante que estas regras carregam cedo, antes do ficheiro predefinido <code>99-default.link</code>."
|
||||
},
|
||||
"scope": {
|
||||
"heading": "O que é escrito, o que é ignorado",
|
||||
"headerType": "Tipo",
|
||||
"headerBehaviour": "Comportamento",
|
||||
"headerWhy": "Porquê?",
|
||||
"rows": [
|
||||
{
|
||||
"type": "Placa de rede integrada / PCIe",
|
||||
"behaviour": "Arquivo <code>.link</code> escrito",
|
||||
"why": "Apoiado por um dispositivo PCI real — o caso em que a ferramenta se destina"
|
||||
},
|
||||
{
|
||||
"type": "Wi-Fi (phy80211)",
|
||||
"behaviour": "Arquivo <code>.link</code> escrito",
|
||||
"why": "Tem um MAC real e beneficia da estabilidade do nome"
|
||||
},
|
||||
{
|
||||
"type": "Pontes (vmbrX)",
|
||||
"behaviour": "Ignorado",
|
||||
"why": "Virtual; o nome vem do <code>/etc/network/interfaces</code>"
|
||||
},
|
||||
{
|
||||
"type": "Bonds (bondX)",
|
||||
"behaviour": "Ignorado",
|
||||
"why": "Virtual; o nome do bond é definido pelo ifupdown"
|
||||
},
|
||||
{
|
||||
"type": "veth / docker0 / br-XXXX",
|
||||
"behaviour": "Ignorado",
|
||||
"why": "Criados a pedido pelo Docker / LXC — não são hardware persistente"
|
||||
},
|
||||
{
|
||||
"type": "tap / fwpr / fwln",
|
||||
"behaviour": "Ignorado",
|
||||
"why": "Criados a pedido pelo Proxmox para cada VM/CT"
|
||||
},
|
||||
{
|
||||
"type": "WireGuard / Cilium / Tailscale",
|
||||
"behaviour": "Ignorado",
|
||||
"why": "Interfaces de software gerenciadas por seus próprios daemons"
|
||||
}
|
||||
]
|
||||
},
|
||||
"safety": {
|
||||
"heading": "Proteção: são criadas cópias de segurança dos ficheiros .link anteriores",
|
||||
"intro": "Se <code>/etc/systemd/network/</code> já contiver ficheiros <code>.link</code> de uma execução anterior ou de outra ferramenta, são copiados para um diretório de segurança com data e hora antes de gerar os novos:",
|
||||
"outro": "Para voltar atrás: copie os arquivos de volta do diretório de backup e reinicie.",
|
||||
"rebootTitle": "Faz efeito na próxima reinicialização, não imediatamente",
|
||||
"rebootBody": "Alterações nos arquivos <code>.link</code> só se aplicam no arranque, quando o udev re-enumera dispositivos. A ferramenta informa que <em>\"Alterações serão aplicadas após reiniciar\"</em> por esta razão. Renomear uma interface ao vivo é arriscado e não tentado: um <code>vmbr0</code> ativo com membros teria que ser reconfigurado atomicamente, por isso a operação é adiada para a próxima inicialização limpa."
|
||||
},
|
||||
"afterReboot": {
|
||||
"heading": "Após a reinicialização",
|
||||
"intro": "Uma vez que os nomes são fixados, o fluxo de trabalho para futuras mudanças de hardware é simples:",
|
||||
"items": [
|
||||
"Desligue, altere o hardware (adicione uma placa, mude de slot, …) e ligue novamente.",
|
||||
"Cada NIC mantém seu nome anterior porque seu MAC corresponde a um arquivo <code>.link</code>.",
|
||||
"Se um NIC é substituído (MAC diferente), ele recebe um nome padrão do kernel (<code>enp<bus>s<slot></code>); execute novamente este menu para adicionar uma entrada <code>.link</code> para o MAC do novo cartão."
|
||||
]
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"emptyTitle": "\"Nenhuma interface física encontrada\" após executar a ferramenta",
|
||||
"emptyBody": "O kernel não vê interfaces baseadas em PCI / phy80211 no host. Confirme com <code>ls -l /sys/class/net/</code> — cada entrada deve ter uma ligação simbólica <code>device</code> (PCI) ou uma entrada <code>phy80211</code> (Wi-Fi). Se ambas faltarem numa placa de rede real, o controlador não está carregado.",
|
||||
"noChangeTitle": "Após a reinicialização, os nomes não mudaram como esperado",
|
||||
"noChangeBody": "Verifique se o arquivo está presente e bem formado: <code>cat /etc/systemd/network/10-<iface>.link</code>. Em seguida, verifique registros udev: <code>journalctl -u systemd-udevd -b | grep -i link</code>. Uma causa comum é um parâmetro antigo do kernel <code>net.ifnames=0</code> que desativa inteiramente a nomeação previsível — remova-a do <code>/etc/default/grub</code>, execute o <code>update-grub</code>, reinicie.",
|
||||
"undoTitle": "Quero anular os nomes persistentes",
|
||||
"undoBody": "Ou delete os arquivos <code>.link</code> (<code>rm /etc/systemd/network/10-*.link</code>) ou restaure do diretório de backup gerado na execução anterior. Reiniciar para aplicar."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Análise de ponte e reparo guiado",
|
||||
"href": "/docs/network/bridge-analysis",
|
||||
"tailRich": " — o caminho de recuperação quando os nomes <em>já</em> mudaram."
|
||||
},
|
||||
{
|
||||
"label": "Análise de configuração e limpeza guiada",
|
||||
"href": "/docs/network/config-analysis",
|
||||
"tail": " — para remover blocos órfãos deixados pelas mudanças de nomes."
|
||||
},
|
||||
{
|
||||
"label": "Diagnósticos",
|
||||
"href": "/docs/network/diagnostics",
|
||||
"tailRich": " — confirme os novos nomes com <em>Mostrar tabela de roteamento</em> após reiniciar."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,171 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Como é adaptada uma imagem OCI | ProxMenux",
|
||||
"description": "Do repositório da imagem e do respetivo ficheiro Compose a um modelo que pode ser revisto, um plano de implementação e um LXC nativo do Proxmox VE, sem Docker no seu interior."
|
||||
},
|
||||
"header": {
|
||||
"title": "Como é adaptada uma imagem OCI",
|
||||
"description": "Do repositório da imagem e do respetivo ficheiro Compose a um modelo que pode ser revisto, um plano de implementação e um LXC nativo, sem instalar Docker no seu interior.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "pipeline",
|
||||
"title": "O processo de adaptação",
|
||||
"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": "Repositório da imagem",
|
||||
"converter": "Conversor",
|
||||
"template": "Modelo JSON",
|
||||
"blockers": "Sem impedimentos?",
|
||||
"no": "Não",
|
||||
"yes": "Sim",
|
||||
"review": "Revisão / overlay",
|
||||
"plan": "Plano de implementação",
|
||||
"lxc": "LXC nativo"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O conversor lê a imagem e o ficheiro Compose publicados pelo projeto e gera um modelo JSON. Se houver requisitos ainda não adaptados que impeçam a instalação, o modelo é revisto antes de ser publicado no catálogo. Um ficheiro de ajustes revistos, chamado overlay, resolve esses impedimentos. Só os modelos sem impedimentos pendentes são propostos para instalação."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "template",
|
||||
"title": "O que o modelo preserva",
|
||||
"blocks": [
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{
|
||||
"icon": "archive",
|
||||
"title": "Identidade da imagem",
|
||||
"body": "Repositório, tag de atualização contínua, arquitetura, digest resolvido e revisão de origem."
|
||||
},
|
||||
{
|
||||
"icon": "braces",
|
||||
"title": "Contrato do contentor",
|
||||
"body": "Entrypoint, Cmd, ambiente, utilizador, diretório de trabalho, sinal de paragem, portas e volumes."
|
||||
},
|
||||
{
|
||||
"icon": "layers",
|
||||
"title": "Adaptação ao Proxmox VE",
|
||||
"body": "Recursos, segurança, pontos de montagem, dispositivos, sysctls, verificações de estado e as adaptações necessárias em cada caso, com a respetiva justificação."
|
||||
},
|
||||
{
|
||||
"icon": "shield",
|
||||
"title": "Compatibilidade",
|
||||
"body": "Chaves suportadas, requisitos por adaptar que impedem a instalação e estado de cada validação."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "sources",
|
||||
"title": "O OCI fornece o processo; o Compose fornece o ambiente",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Origem",
|
||||
"Exemplo",
|
||||
"Resultado nativo"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Metadados OCI",
|
||||
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>",
|
||||
"O Proxmox VE importa-os ao criar o CT"
|
||||
],
|
||||
[
|
||||
"Docker Compose",
|
||||
"<code>environment</code>, <code>volumes</code>, <code>devices</code>",
|
||||
"Entradas de ambiente LXC, <code>mpN</code> e <code>devN</code>"
|
||||
],
|
||||
[
|
||||
"Perfil do ProxMenux",
|
||||
"GPU, verificação de estado, credenciais",
|
||||
"Perguntas e adaptações revistas"
|
||||
],
|
||||
[
|
||||
"Utilizador",
|
||||
"VMID, armazenamento, rede",
|
||||
"O contrato da instância"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "install",
|
||||
"title": "O que acontece durante a instalação",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Resolver a referência",
|
||||
"body": "O registo é consultado, a arquitetura do host é selecionada e é fixado o digest exato para o qual aponta a tag de atualização contínua."
|
||||
},
|
||||
{
|
||||
"title": "Descarregar e verificar",
|
||||
"body": "O Skopeo descarrega a imagem como um arquivo OCI. Antes de criar qualquer recurso, cada camada é verificada através do respetivo digest e descomprimida. Se a descarga estiver danificada, é repetida uma vez antes de a instalação ser interrompida."
|
||||
},
|
||||
{
|
||||
"title": "Criar o sistema de ficheiros",
|
||||
"body": "O <code>pct create</code> cria o rootfs a partir do arquivo e preserva os metadados oficiais do processo da imagem."
|
||||
},
|
||||
{
|
||||
"title": "Ligar os recursos",
|
||||
"body": "São aplicados os volumes, a rede, o ambiente, os dispositivos e os perfis de segurança declarados."
|
||||
},
|
||||
{
|
||||
"title": "Consola",
|
||||
"body": "A saída da consola do contentor é guardada no host. A consola do Proxmox VE abre uma shell se a imagem incluir uma."
|
||||
},
|
||||
{
|
||||
"title": "Verificar",
|
||||
"body": "No primeiro arranque, aguarda-se que o contentor tenha um endereço e que o serviço responda. Em caso de falha, a instalação não é apresentada como concluída com sucesso."
|
||||
},
|
||||
{
|
||||
"title": "Registar a configuração",
|
||||
"body": "A configuração efetiva é guardada no contrato da instância utilizado nas atualizações e recriações."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "example",
|
||||
"title": "Exemplo: uma imagem com /config e /downloads",
|
||||
"intro": "Uma definição Compose habitual e a configuração do Proxmox VE que dela resulta. Os caminhos esperados pela aplicação não mudam.",
|
||||
"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 (excerto)",
|
||||
"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": "O <code>mp0</code> é um segundo disco pertencente ao contentor, com o nome <code>vm-VMID-disk-N</code> no armazenamento selecionado. É montado em <code>/config</code> e, com <code>backup=1</code>, incluído na cópia de segurança do contentor. O <code>mp1</code> não cria um disco: monta o diretório do host <code>/srv/downloads</code> em <code>/downloads</code> dentro do LXC. A porta 8080 não é mapeada: o LXC tem um endereço próprio e o serviço responde nesse endereço."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalar uma imagem fora do catálogo | ProxMenux",
|
||||
"description": "Adapte uma imagem OCI a partir de um ficheiro Compose, de um URL, de um comando docker run ou de uma referência de imagem e reveja o que o ProxMenux consegue reproduzir antes de a instalar."
|
||||
},
|
||||
"header": {
|
||||
"title": "Instalar uma imagem fora do catálogo",
|
||||
"description": "A sua imagem é adaptada a partir do ficheiro Compose, de um comando docker run ou apenas da referência. O resultado é apresentado para revisão antes de criar qualquer LXC.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "intro",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "O mesmo conversor e o mesmo instalador",
|
||||
"body": "A opção <strong>Instalar uma imagem fora do catálogo</strong> utiliza o mesmo conversor e instalador dos modelos do catálogo. A diferença é que o contrato é gerado nesse momento a partir da definição fornecida e validado antes de criar qualquer LXC."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "sources",
|
||||
"title": "Como é descrita a imagem",
|
||||
"intro": "O primeiro ecrã pergunta como é descrita a imagem. Quatro opções recebem uma definição a adaptar, uma quinta utiliza apenas o nome da imagem e outras três leem um oci-compose já escrito.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Opção",
|
||||
"O que é lido"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Colar o ficheiro Compose no terminal",
|
||||
"Cole o conteúdo YAML no terminal e termine com Ctrl+D."
|
||||
],
|
||||
[
|
||||
"Ler o ficheiro Compose deste host",
|
||||
"Um caminho no nó, <code>/root/docker-compose.yml</code> por predefinição. O ficheiro tem de existir e não ultrapassar 256 KiB."
|
||||
],
|
||||
[
|
||||
"Descarregar o ficheiro Compose de um endereço",
|
||||
"Um endereço <code>http://</code> ou <code>https://</code> que disponibilize o YAML em bruto. São descarregados no máximo 256 KiB."
|
||||
],
|
||||
[
|
||||
"Colar o comando docker run no terminal",
|
||||
"O comando publicado pelo projeto. São adaptadas as portas, o ambiente, os volumes, os dispositivos, as capabilities, o utilizador, a memória partilhada e as restantes opções suportadas."
|
||||
],
|
||||
[
|
||||
"Apenas a referência da imagem, sem ficheiro Compose",
|
||||
"Uma referência como <code>ghcr.io/user/application:latest</code>. O registo é consultado e os metadados OCI da imagem são preservados."
|
||||
],
|
||||
[
|
||||
"Colar um oci-compose no terminal",
|
||||
"Cole o JSON no terminal e termine com Ctrl+D. Não é convertido: é validado e instalado tal como está escrito."
|
||||
],
|
||||
[
|
||||
"Ler um oci-compose deste host",
|
||||
"Um ficheiro JSON no nó, <code>/root/oci-compose.json</code> por predefinição, com um máximo de 2 MiB."
|
||||
],
|
||||
[
|
||||
"Descarregar um oci-compose de um endereço",
|
||||
"Um endereço <code>http://</code> ou <code>https://</code> que disponibilize o ficheiro JSON. São descarregados no máximo 2 MiB."
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/custom-source-menu.png",
|
||||
"alt": "Menu para escolher como descrever uma imagem fora do catálogo",
|
||||
"caption": "Formas de descrever uma imagem fora do catálogo."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "reference-only",
|
||||
"title": "O que fornece apenas a referência da imagem",
|
||||
"intro": "A imagem contém os metadados do seu processo, mas não todo o ambiente que um ficheiro Compose costuma acrescentar.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Lido da imagem",
|
||||
"Ausente da imagem",
|
||||
"Consequência"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"<code>Entrypoint</code>, <code>Cmd</code>, <code>User</code>, <code>WorkingDir</code> e o ambiente incorporado",
|
||||
"Variáveis presentes apenas na documentação",
|
||||
"São acrescentadas na instalação ou em Modificar"
|
||||
],
|
||||
[
|
||||
"Volumes declarados pela imagem",
|
||||
"Diretórios do host indicados apenas no ficheiro Compose",
|
||||
"Os caminhos adicionais são acrescentados antes da instalação"
|
||||
],
|
||||
[
|
||||
"Portas <code>EXPOSE</code>",
|
||||
"O URL, o protocolo ou a verificação funcional do serviço",
|
||||
"São confirmados a porta e o método de verificação do serviço"
|
||||
],
|
||||
[
|
||||
"Arquiteturas e digest no registo",
|
||||
"Dispositivos, privilégios ou dependências externas",
|
||||
"Não são ativados sem uma definição que os solicite"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "review",
|
||||
"title": "Rever antes de instalar",
|
||||
"intro": "Após adaptar a definição, o ProxMenux apresenta como a interpretou antes de perguntar o VMID, os recursos ou o armazenamento.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Analisar",
|
||||
"body": "São lidos os serviços, a imagem, as portas, os caminhos, o ambiente, os dispositivos, a segurança e a verificação de estado."
|
||||
},
|
||||
{
|
||||
"title": "Consultar o registo",
|
||||
"body": "A imagem tem de existir no registo e são apresentadas as arquiteturas publicadas. Um registo privado é consultado com a conta guardada para ele."
|
||||
},
|
||||
{
|
||||
"title": "Listar o que não é aplicado",
|
||||
"body": "São listados os labels, as redes Docker, as definições Swarm e outras chaves sem efeito num LXC."
|
||||
},
|
||||
{
|
||||
"title": "Bloquear opções sem equivalente seguro",
|
||||
"body": "As chaves sem equivalente seguro aparecem em <strong>Opções sem equivalente</strong> e impedem a continuação da instalação. Nenhuma é descartada sem aviso."
|
||||
},
|
||||
{
|
||||
"title": "Pedir segredos",
|
||||
"body": "As variáveis cujo nome indica uma palavra-passe, token ou chave são pedidas como dados sensíveis durante a instalação."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/custom-review.png",
|
||||
"alt": "Resumo da interpretação do ficheiro Compose pelo ProxMenux",
|
||||
"caption": "Resumo apresentado antes de o instalador perguntar o VMID e os recursos."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Após aceitar o resumo, segue-se o mesmo assistente do catálogo: nome, modo predefinido ou avançado, VMID, CPU, memória, rede, arranque com o nó, caminhos persistentes e adicionais, dispositivos compatíveis e resumo final."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "examples",
|
||||
"title": "Exemplos de entrada",
|
||||
"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": "Um oci-compose escrito à mão",
|
||||
"intro": "Um oci-compose é o ficheiro JSON a partir do qual se instala uma aplicação. O catálogo guarda um por aplicação. O mesmo formato pode ser escrito à mão e instalado com esta opção.",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Num ficheiro escrito à mão, o autor define a imagem, as portas, as variáveis, os volumes e as perguntas da instalação. O ProxMenux completa o resto ao ler o ficheiro. O formato permite expressar o que o Compose não prevê: o texto de uma pergunta, uma palavra-passe gerada durante a instalação, um perfil de GPU, o proprietário de cada volume, a verificação do primeiro arranque ou as credenciais apresentadas no fim."
|
||||
},
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Verificar",
|
||||
"body": "Os ficheiros com erros não são instalados. Cada erro indica o campo afetado; se o JSON for inválido, são indicadas a linha e a coluna."
|
||||
},
|
||||
{
|
||||
"title": "Rever",
|
||||
"body": "Um ficheiro válido apresenta o que instala: imagem, endereço web, portas, caminhos persistentes, variáveis pedidas pelo instalador e ficheiros que serão escritos."
|
||||
},
|
||||
{
|
||||
"title": "Instalar",
|
||||
"body": "A instalação segue o mesmo processo das aplicações do catálogo, com definições predefinidas ou avançadas."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Um ficheiro que define os privilégios",
|
||||
"body": "Um oci-compose determina o que é montado no contentor e com que privilégios. A revisão mostra-o antes da instalação: instale apenas ficheiros de fontes de confiança."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O <readmeLink>README do motor OCI</readmeLink> descreve o formato bloco a bloco, com dois exemplos completos. O registo de uma instalação também pode ser lido desta forma: apenas é utilizado o modelo original, sem nenhuma das respostas dessa instalação."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "private-registries",
|
||||
"title": "Imagens em registos privados",
|
||||
"intro": "Uma imagem num registo privado, como um pacote privado do GitHub ou um repositório privado do Docker Hub, é consultada com uma conta guardada no ProxMenux.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "O registo recusa o acesso à imagem",
|
||||
"body": "Quando o registo indica que a imagem requer uma conta, a revisão propõe iniciar sessão nesse registo e consulta novamente a imagem."
|
||||
},
|
||||
{
|
||||
"title": "Iniciar sessão",
|
||||
"body": "Um utilizador e uma palavra-passe ou token com permissão para descarregar a imagem. O registo verifica-os e só são guardados se forem aceites."
|
||||
},
|
||||
{
|
||||
"title": "Instalar e manter atualizado",
|
||||
"body": "A conta é utilizada para descarregar a imagem na instalação e também nas atualizações, em Modificar, Recriar, no watchdog e na verificação de atualizações do Monitor, em qualquer nó do cluster."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "<strong>Contas de registos</strong>, no menu principal do OCI manager Apps, apresenta as contas guardadas por registo e utilizador, nunca os seus segredos. Cada conta permite verificar, descarregar ou instalar uma imagem, atualizar as credenciais ou removê-las."
|
||||
},
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"GitHub (<code>ghcr.io</code>): o utilizador é a conta GitHub e a palavra-passe é um token de acesso pessoal com a permissão <code>read:packages</code>.",
|
||||
"Docker Hub (<code>docker.io</code>): o utilizador é a conta Docker Hub e a palavra-passe é um token de acesso com permissão de leitura.",
|
||||
"Outros registos, incluindo os que usam uma porta própria como <code>registry.example.com:5000</code>: o utilizador e a palavra-passe ou token fornecidos por esse registo."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Onde são guardadas as contas",
|
||||
"body": "Em <code>/etc/pve/priv/proxmenux/registry-auth.json</code>, legível apenas por root, na mesma pasta onde o Proxmox guarda as palavras-passe de armazenamento. <code>/etc/pve</code> é partilhado por todos os nós do cluster, pelo que uma conta adicionada num nó é utilizada em todos. A cópia do host inclui o ficheiro e a desinstalação do ProxMenux remove-o de todos os nós."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "limits",
|
||||
"title": "Definições que não são instaladas",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Um Dockerfile sem imagem publicada: primeiro é necessário construir a imagem e publicá-la num registo OCI.",
|
||||
"Um ficheiro Compose com vários serviços: é bloqueado porque esta opção instala um único serviço por contentor, mesmo que vários serviços utilizem a mesma imagem.",
|
||||
"<code>configs</code>, segredos externos ou formatos de dispositivo que não possam ser adaptados sem ambiguidade.",
|
||||
"Substituições de shell como <code>$(command)</code>: é necessário escrever diretamente o valor resultante.",
|
||||
"Opções <code>docker run</code> não reconhecidas e <code>--env-file</code>: utilize antes um ficheiro Compose com valores explícitos."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Dispositivos e aceleração ProxMenux",
|
||||
"description": "Como o OCI Manager Apps passa GPU, NVIDIA, Coral, USB, FUSE e outros dispositivos para um recipiente OCI como recursos Proxmox VE nativos validados."
|
||||
},
|
||||
"header": {
|
||||
"title": "Dispositivos e aceleração",
|
||||
"description": "GPU, NVIDIA, Coral, USB, FUSE e dispositivos de bloco tornam-se os recursos de Proxmox VE nativos validados do recipiente.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "principle",
|
||||
"title": "O dispositivo de que a aplicação necessita, não a máquina inteira",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Um dispositivo solicitado pelo arquivo Compose ou pelo perfil da aplicação torna-se uma entrada de <code>devN</code> ou uma montagem LXC. Pedir um GPU, um dispositivo USB ou um Coral não torna o recipiente privilegiado."
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{
|
||||
"label": "Inventário da máquina",
|
||||
"detail": "/dev/dri/renderD128\nGID 993 · Intel"
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux",
|
||||
"detail": "fornecedor e\npermissões verificadas"
|
||||
},
|
||||
{
|
||||
"label": "LXC",
|
||||
"detail": "mesmo dispositivo\nGID efetivo"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "origin",
|
||||
"title": "De onde vem o pedido do dispositivo",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Origem",
|
||||
"O que é lido",
|
||||
"O que o instalador faz"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Docker Compose",
|
||||
"Pedidos de <code>devices</code>, <code>group_add</code>, <code>deploy.resources</code> e NVIDIA",
|
||||
"Cada requisito torna-se um pedido de dispositivo mostrado para revisão"
|
||||
],
|
||||
[
|
||||
"Perfil do catálogo",
|
||||
"O suporte que o aplicativo realmente tem para GPU, Coral, OpenCL, USB ou FUSE",
|
||||
"Apenas são oferecidas as opções validadas para essa imagem"
|
||||
],
|
||||
[
|
||||
"Metadados e documentação da imagem",
|
||||
"VA-API, Selkies, LinuxServer mods ou o tempo de execução NVIDIA",
|
||||
"As variáveis documentadas e preparação são adicionadas"
|
||||
],
|
||||
[
|
||||
"Seleção do usuário",
|
||||
"Apenas CPU, Intel/AMD, OpenCL, NVIDIA ou um dispositivo opcional",
|
||||
"A seleção é armazenada no contrato de instância"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Os dispositivos detectados não são anexados automaticamente",
|
||||
"body": "O host é inventariado, mas apenas dispositivos declarados pelo arquivo Compose ou por um perfil compatível são oferecidos e anexados. Um GPU, dongle USB ou Coral presente no host não é exposto a cada LXC."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "identify",
|
||||
"title": "Como o dispositivo da máquina é identificado",
|
||||
"intro": "Antes de o LXC ser modificado, o dispositivo é lido no host e corresponde ao perfil escolhido.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Tipo",
|
||||
"Identidade",
|
||||
"Validação"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Intel/AMD DRM",
|
||||
"<code>/dev/dri/renderD*</code> e <code>/sys/class/drm/NODE/device/vendor</code>",
|
||||
"Um dispositivo de caracteres com o fornecedor <code>0x8086</code> (Intel) ou <code>0x1002</code> (AMD)"
|
||||
],
|
||||
[
|
||||
"AMD OpenCL",
|
||||
"O nó de renderização, mais <code>/dev/kfd</code> quando o perfil precisa dele",
|
||||
"Existência, tipo, fornecedor, permissões e compatibilidade declarada"
|
||||
],
|
||||
[
|
||||
"AMD ROCm",
|
||||
"O nó de renderização, <code>/dev/kfd</code> e a geração que o controlador de computação relata em <code>/sys/class/kfd/kfd/topology/nodes/*/properties</code>",
|
||||
"Uma geração para a qual a imagem ROCm do aplicativo inclui kernels de computação — as GPUs RDNA2 citadas e as mais recentes — é oferecida sem adaptação. As outras GPUs dessas famílias, como Radeon 680M e 780M, são oferecidas como experimentais e nunca são a opção sugerida: o ROCm não as suporta oficialmente, o aplicativo as apresenta como a geração de sua família (<code>HSA_OVERRIDE_GFX_VERSION</code>) e o instalador pede confirmação antes de baixar a imagem maior. Uma GPU mais antiga, como a integrada de um Ryzen 5000U, não é oferecida e o Immich mantém o reconhecimento na CPU."
|
||||
],
|
||||
[
|
||||
"NVIDIA",
|
||||
"<code>nvidia-smi</code> e <code>nvidia-container-cli</code>",
|
||||
"GPU, UUID, PCI bus, versão driver, Toolkit, <code>/dev/nvidia*</code> nós, binários e bibliotecas"
|
||||
],
|
||||
[
|
||||
"Coral PCIe/M.2",
|
||||
"<code>/dev/apex_N</code> e sua ligação em <code>/sys/dev/char/MAJOR:MINOR</code>",
|
||||
"Nó de caracteres, major/menor, proprietário, GID e permissões"
|
||||
],
|
||||
[
|
||||
"USB e serial",
|
||||
"<code>/dev/ttyUSB*</code>, <code>/dev/ttyACM*</code> ou <code>/dev/bus/usb/BBB/DDD</code>",
|
||||
"Nó de caracteres; para USB também fornecedor, produto e série quando sysfs publica-los"
|
||||
],
|
||||
[
|
||||
"KVM, TUN, FUSE, vídeo e SCSI genérico",
|
||||
"<code>/dev/kvm</code>, <code>/dev/net/tun</code>, <code>/dev/fuse</code>, <code>/dev/videoN</code> ou <code>/dev/sgN</code>",
|
||||
"Caminho suportado, tipo de nó e permissões efetivas"
|
||||
],
|
||||
[
|
||||
"Unidade óptica",
|
||||
"<code>/dev/srN</code>",
|
||||
"Um dispositivo de bloco"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "install",
|
||||
"title": "O que acontece durante a instalação",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "O modelo oferece seus perfis",
|
||||
"body": "Por exemplo, CPU apenas, Intel/AMD VA-API, AMD OpenCL, Intel OpenCL ou NVIDIA. As opções pertencem à imagem, não a um menu comum."
|
||||
},
|
||||
{
|
||||
"title": "Um perfil é escolhido",
|
||||
"body": "Ele define os nós do dispositivo, ambiente, mods ou tempo de execução que a aplicação precisa."
|
||||
},
|
||||
{
|
||||
"title": "É proposto um caminho",
|
||||
"body": "Para DRM, <code>/dev/dri/renderD128</code>, que pode ser alterado em um host com vários nós de renderização. Para USB ou serial, o nó específico é selecionado."
|
||||
},
|
||||
{
|
||||
"title": "Validação",
|
||||
"body": "Existência, tipo, fornecedor permitido, permissões e GID são verificados. Um desencontro impede a operação."
|
||||
},
|
||||
{
|
||||
"title": "O contrato está escrito",
|
||||
"body": "Caminho, modo, GID, acesso de escrita e perfil são gravados para atualizações e recriações."
|
||||
},
|
||||
{
|
||||
"title": "Anexar e testar",
|
||||
"body": "<code>pct set</code> adiciona a entrada <code>devN</code> e o acesso é então verificado dentro do LXC. As imagens LinuxServer também são verificadas como usuário <code>abc</code>."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "config",
|
||||
"title": "Como aparece na configuração LXC",
|
||||
"intro": "Valores ilustrativos: <code>dev0</code> e <code>dev1</code> são as atribuições de slots livres Proxmox VE, e <code>renderD128</code>, <code>apex_0</code> e o GID dependem do hardware do nó.",
|
||||
"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": "Um dispositivo USB específico",
|
||||
"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": "O GID é lido com <code>stat</code> no host e escrito na entrada <code>devN</code>; os grupos <code>render</code> e <code>video</code> não são assumidos como tendo um número fixo. O dispositivo mantém o mesmo caminho <code>/dev</code> dentro do LXC, onde os próprios mecanismos da aplicação procuram por ele."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "profiles",
|
||||
"title": "Perfis que uma imagem pode oferecer",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Perfil",
|
||||
"Configuração resultante",
|
||||
"Oferecido quando"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Intel/AMD VA-API",
|
||||
"Nó de renderização <code>/dev/dri</code>",
|
||||
"O aplicativo suporta aceleração de vídeo"
|
||||
],
|
||||
[
|
||||
"OpenCL",
|
||||
"Nó de renderização, <code>/dev/kfd</code> quando necessário e o mod oficial",
|
||||
"A imagem ou perfil documenta- a"
|
||||
],
|
||||
[
|
||||
"NVIDIA",
|
||||
"Dispositivos de driver e bibliotecas da máquina",
|
||||
"O host tem um driver funcionando e o NVIDIA Container Toolkit"
|
||||
],
|
||||
[
|
||||
"Coral",
|
||||
"<code>/dev/apex_0</code> ou o barramento USB",
|
||||
"O perfil declara suporte ao Coral (Frigate)"
|
||||
],
|
||||
[
|
||||
"USB, série, FUSE",
|
||||
"Um único dispositivo, uma árvore validada ou uma funcionalidade LXC",
|
||||
"O contrato pede-o."
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "nvidia",
|
||||
"title": "NVIDIA",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Requisito do nó: NVIDIA Container Toolkit",
|
||||
"body": "Um driver funcional em Proxmox VE não é suficiente para dar um NVIDIA GPU a uma imagem OCI. O OCI Manager Apps usa <code>nvidia-container-cli</code>, do NVIDIA Container Toolkit, para identificar os dispositivos e obter os binários e bibliotecas que correspondem ao driver carregado."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O <nvidiaLink>ProxMenux NVIDIA instalador</nvidiaLink> instala o NVIDIA Container Toolkit do repositório oficial NVIDIA juntamente com o driver. Ele verifica seus quatro pacotes, valida o <code>nvidia-container-cli</code> e registra o resultado na registro de alterações do <auditLink>Audit & Report</auditLink>."
|
||||
},
|
||||
{
|
||||
"p": "Estes dois comandos na máquina mostram se o driver e o Toolkit estão disponíveis:"
|
||||
},
|
||||
{
|
||||
"shell": {
|
||||
"code": "nvidia-smi -L\nnvidia-container-cli --version"
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Em uma máquina onde o driver foi instalado por outros meios, o Toolkit é instalado a partir do repositório estável oficial:"
|
||||
},
|
||||
{
|
||||
"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": "O inventário que o OCI manager Apps usa é a saída de:"
|
||||
},
|
||||
{
|
||||
"shell": {
|
||||
"code": "nvidia-container-cli list --device all --libraries --binaries --firmwares --ipcs"
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "A configuração do tempo de execução do Docker não está envolvida",
|
||||
"body": "Os contêineres são LXC nativos e não usam daemon Docker, portanto <code>nvidia-ctk runtime configure --runtime=docker</code> não faz parte do processo: o ProxMenux consulta <code>nvidia-container-cli</code> diretamente e configura os dispositivos e montagens LXC. Os comandos e as plataformas suportadas são mantidos no <toolkitLink>guia de instalação do NVIDIA Container Toolkit</toolkitLink>."
|
||||
}
|
||||
},
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{
|
||||
"icon": "cpu",
|
||||
"title": "Inventário do driver",
|
||||
"body": "<code>nvidia-container-cli</code> lista os nós do dispositivo, binários, firmware e bibliotecas do driver instalado."
|
||||
},
|
||||
{
|
||||
"icon": "refresh",
|
||||
"title": "Nenhuma versão fixa",
|
||||
"body": "O modelo não nomeia arquivos de bibliotecas. O perfil é gerado a partir da máquina atual."
|
||||
},
|
||||
{
|
||||
"icon": "shield",
|
||||
"title": "Montagens somente de leitura",
|
||||
"body": "As bibliotecas host são montadas somente para leitura em vez de serem copiadas para o recipiente."
|
||||
},
|
||||
{
|
||||
"icon": "hardDrive",
|
||||
"title": "Alterações do driver",
|
||||
"body": "Após uma mudança de driver, o inventário é gerado novamente antes do início dos LXCs afetados."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"code": {
|
||||
"title": "Resultado NVIDIA (simplificado)",
|
||||
"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": "Passar apenas <code>/dev/nvidia0</code> não é suficiente. Os componentes de espaço de usuário do driver carregado são montados somente de leitura, e <code>nvidia-smi</code> então é executado dentro do LXC para comparar GPU, UUID, PCI bus e versão com o inventário host."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "usb",
|
||||
"title": "Coral USB, serial e USB",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Numeração USB pode mudar",
|
||||
"body": "Um caminho como o <code>/dev/bus/usb/003/004</code> pode mudar quando o dispositivo é reconectado ou a máquina reinicia. O perfil registra fornecedor, produto e série quando estão disponíveis, mas um novo endereço de barramento não é remapeado automaticamente."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Um periférico é dado pelo seu nó específico: <code>/dev/ttyUSB0</code>, <code>/dev/ttyACM0</code>, <code>/dev/apex_0</code> ou <code>/dev/bus/usb/BBB/DDD</code>. Não é aceite passar todo o <code>/dev</code>. O Coral é oferecido apenas para aplicações cujo perfil o declara."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "trees",
|
||||
"title": "Árvores de dispositivos e recursos LXC",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Pedido",
|
||||
"Configuração resultante",
|
||||
"Escopo"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"<code>/dev/dvb</code>, <code>/dev/snd</code> ou <code>/dev/bus/usb</code>",
|
||||
"Cada nó de caracteres da árvore recebe sua própria entrada <code>devN</code> com o modo host e GID",
|
||||
"Apenas a árvore solicitada, e não o resto do <code>/dev</code>"
|
||||
],
|
||||
[
|
||||
"<code>/dev/fuse</code>",
|
||||
"O nó e, quando o perfil precisa dele, o recurso <code>fuse=1</code>",
|
||||
"O FUSE sozinho não publica montagens para outros LXCs"
|
||||
],
|
||||
[
|
||||
"<code>/dev/net/tun</code>",
|
||||
"Uma entrada <code>devN</code> no mesmo caminho dentro do LXC",
|
||||
"A configuração VPN ou rede permanece na aplicação"
|
||||
],
|
||||
[
|
||||
"<code>/dev/kvm</code>",
|
||||
"Uma entrada <code>devN</code> validada",
|
||||
"Oferecido apenas quando o contrato o solicitar"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "security",
|
||||
"title": "Confirmações por nível de risco",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Dispositivos específicos, privilégio opcional, privilégio exigido, relaxamento AppArmor ou seccomp e acesso ao espaço de nomes PID do hospedeiro são tratados como casos separados, não sob uma etiqueta genérica privilegiada. Cada opção com risco é explicada e confirmada durante a instalação."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "OCI manager Apps | ProxMenux",
|
||||
"description": "Execute imagens OCI oficiais como contentores LXC nativos do Proxmox VE, com dados persistentes, acesso a dispositivos, aplicações com vários contentores e atualizações transacionais."
|
||||
},
|
||||
"header": {
|
||||
"title": "OCI manager Apps",
|
||||
"description": "As imagens OCI oficiais são executadas como contentores LXC nativos do Proxmox VE. A imagem continua a ser a publicada pelo respetivo responsável; o ProxMenux reproduz o ambiente que o Docker Compose teria criado à sua volta.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "model",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Uma imagem OCI, um LXC nativo",
|
||||
"body": "O Docker Engine não é executado dentro dos contentores. O Proxmox VE importa o sistema de ficheiros da imagem e os seus metadados OCI. A aplicação passa a ser o processo principal de um LXC nativo, gerido com as mesmas ferramentas dos restantes contentores do nó."
|
||||
}
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{
|
||||
"label": "Origem",
|
||||
"detail": "Imagem OCI\nCompose e documentação"
|
||||
},
|
||||
{
|
||||
"label": "ProxMenux",
|
||||
"detail": "Contrato JSON\nvalidação e planeamento"
|
||||
},
|
||||
{
|
||||
"label": "Proxmox VE",
|
||||
"detail": "LXC nativo\nvolumes e dispositivos"
|
||||
}
|
||||
],
|
||||
"caption": "É utilizada a aplicação original; o seu ambiente é descrito de forma declarativa e reproduzido."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "where",
|
||||
"title": "Onde encontrar",
|
||||
"intro": "No nó Proxmox, como root, abra <strong>OCI manager Apps (Technology Preview)</strong> no menu principal do ProxMenux. O primeiro ecrã apresenta:",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"<strong>Pesquisar aplicações</strong>: pesquisar por nome em todo o catálogo.",
|
||||
"<strong>Todas as aplicações</strong>: apresentar o catálogo completo e o número de aplicações.",
|
||||
"<strong>Gerir aplicações OCI instaladas</strong>: atualizar, modificar, remover ou recuperar as aplicações já instaladas.",
|
||||
"<strong>Contas de registos</strong>: gerir as contas utilizadas para instalar e atualizar imagens de registos privados.",
|
||||
"<strong>Instalar uma imagem fora do catálogo</strong>: adaptar um ficheiro Compose, um comando <code>docker run</code> ou uma referência de imagem.",
|
||||
"As categorias do catálogo, cada uma com o respetivo número de aplicações."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/main-menu.png",
|
||||
"alt": "Ecrã principal do OCI manager Apps com pesquisa, catálogo completo, gestão de aplicações, imagens fora do catálogo e categorias.",
|
||||
"caption": "Ecrã principal do OCI manager Apps."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Ao selecionar uma aplicação, são apresentadas a descrição, a imagem utilizada e duas opções de instalação. <strong>Instalar com as definições predefinidas</strong> pergunta apenas o essencial: armazenamento, localização dos dados, endereço e arranque. <strong>Instalar com as definições avançadas</strong> percorre todas as decisões por ordem: VMID e recursos, armazenamento de cada caminho, bridge de rede e dispositivos."
|
||||
},
|
||||
{
|
||||
"p": "As aplicações efetivamente testadas apresentam <strong>Verificado</strong> nesta vista e um ✓ nas listas, quer o teste tenha sido realizado no laboratório do ProxMenux quer pela comunidade."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "beta",
|
||||
"title": "Por que mantém a designação Technology Preview",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "O OCI manager Apps mantém a designação <strong>Technology Preview</strong> que o Proxmox VE atribui aos contentores de aplicações criados a partir de imagens OCI, cujo suporte foi introduzido no Proxmox VE 9.1. A designação refere-se à tecnologia em que o OCI manager Apps se baseia, não ao motor do ProxMenux: o comportamento destes contentores ainda pode mudar entre versões do Proxmox VE. Será mantida até que o Proxmox VE considere esse suporte estável."
|
||||
},
|
||||
{
|
||||
"p": "O motor do OCI manager Apps é testado no laboratório do ProxMenux: instalação, atualização, modificação, recriação, cópia de segurança, restauro, migração e watchdog. Cada aplicação é verificada separadamente. As que foram efetivamente testadas apresentam <strong>Verificado</strong> e um ✓ nas listas."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "translation",
|
||||
"title": "Como o Docker descreve os requisitos e como o OCI manager Apps os concretiza",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Requisito",
|
||||
"Como é expresso no Docker",
|
||||
"Como é concretizado pelo OCI manager Apps"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Executar a aplicação",
|
||||
"<code>image</code>, <code>entrypoint</code>, <code>command</code>",
|
||||
"O rootfs OCI e o processo principal do LXC"
|
||||
],
|
||||
[
|
||||
"Preservar a configuração",
|
||||
"<code>volumes: /config</code>",
|
||||
"Um volume persistente <code>mpN</code> incluído na cópia de segurança ou um diretório do host."
|
||||
],
|
||||
[
|
||||
"Disponibilizar o serviço",
|
||||
"<code>ports</code>",
|
||||
"Um endereço próprio para o LXC e o URL de acesso ao serviço."
|
||||
],
|
||||
[
|
||||
"Utilizar hardware",
|
||||
"<code>devices</code>, <code>group_add</code>",
|
||||
"Entradas <code>devN</code> com o GID efetivo do host e um perfil validado."
|
||||
],
|
||||
[
|
||||
"Ligar as dependências",
|
||||
"<code>networks</code>, <code>depends_on</code>",
|
||||
"Uma bridge de rede privada, endereços fixos, ordem de arranque e verificações de estado."
|
||||
],
|
||||
[
|
||||
"Atualizar",
|
||||
"Descarregar com <code>pull</code> e recriar",
|
||||
"Um novo rootfs com o mesmo contrato de persistência."
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "kept",
|
||||
"title": "O que é preservado e o que muda",
|
||||
"blocks": [
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{
|
||||
"icon": "archive",
|
||||
"title": "Preservado",
|
||||
"body": "A imagem oficial, os caminhos internos, o ambiente, o processo de arranque e a documentação de utilização."
|
||||
},
|
||||
{
|
||||
"icon": "boxes",
|
||||
"title": "Adaptado",
|
||||
"body": "O ambiente de execução: rede, persistência, dispositivos, permissões e dependências utilizam os mecanismos LXC nativos do Proxmox VE."
|
||||
},
|
||||
{
|
||||
"icon": "shield",
|
||||
"title": "Sem equivalente",
|
||||
"body": "Uma opção Compose sem equivalente seguro é identificada como impedimento à instalação. Os modelos com impedimentos não são propostos para instalação e as opções sensíveis exigem confirmação durante o assistente."
|
||||
},
|
||||
{
|
||||
"icon": "refresh",
|
||||
"title": "Registado",
|
||||
"body": "O digest da imagem, os recursos, os caminhos, a rede, os dispositivos e a pertença a uma stack são guardados no contrato da instância. As atualizações e recriações reproduzem esse contrato."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "pages",
|
||||
"title": "Páginas desta secção",
|
||||
"blocks": [
|
||||
{
|
||||
"next": {
|
||||
"items": [
|
||||
{
|
||||
"label": "Como é adaptada uma imagem OCI",
|
||||
"href": "/docs/oci-manager/architecture",
|
||||
"tail": "Da imagem e do respetivo ficheiro Compose a um LXC nativo."
|
||||
},
|
||||
{
|
||||
"label": "Instalar uma imagem fora do catálogo",
|
||||
"href": "/docs/oci-manager/custom-image",
|
||||
"tail": "Um ficheiro Compose, um comando docker run ou uma referência de imagem."
|
||||
},
|
||||
{
|
||||
"label": "Dados, caminhos e rede",
|
||||
"href": "/docs/oci-manager/storage-network",
|
||||
"tail": "Volumes do contentor, diretórios do host, montagens com rclone e endereços."
|
||||
},
|
||||
{
|
||||
"label": "Dispositivos e aceleração",
|
||||
"href": "/docs/oci-manager/hardware",
|
||||
"tail": "GPU, NVIDIA, Coral, USB e outros dispositivos."
|
||||
},
|
||||
{
|
||||
"label": "Aplicações com vários contentores",
|
||||
"href": "/docs/oci-manager/stacks",
|
||||
"tail": "Aplicação, base de dados e cache em LXC coordenados."
|
||||
},
|
||||
{
|
||||
"label": "Instalar, atualizar e modificar",
|
||||
"href": "/docs/oci-manager/lifecycle",
|
||||
"tail": "O contrato da instância e as respetivas operações."
|
||||
},
|
||||
{
|
||||
"label": "No ProxMenux Monitor",
|
||||
"href": "/docs/oci-manager/monitor",
|
||||
"tail": "Versões, atualizações, saída da consola e terminal."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,499 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Instalar, atualizar e modificar | ProxMenux",
|
||||
"description": "O contrato de instância de um contentor OCI e as operações que o utilizam: atualização, modificação, remoção, recuperação de uma operação interrompida e recuperação após um restauro neste ou noutro host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Instalar, atualizar e modificar",
|
||||
"description": "Cada instância mantém um contrato reprodutível, permitindo substituir o seu rootfs sem perder a configuração ou os dados persistentes.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "contract",
|
||||
"title": "O contrato de instância",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Após a instalação, a configuração efetiva é guardada em <code>/usr/local/share/proxmenux/oci/instances/VMID/oci-compose.json</code>. Não é uma cópia do ficheiro Compose original: é o contrato reprodutível do LXC existente neste host."
|
||||
},
|
||||
{
|
||||
"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": "Uma cópia do contrato fica dentro do contentor, em <code>/.proxmenux/oci-record.json</code>, e só pode ser lida pelo utilizador root do contentor. Assim, uma cópia de segurança do contentor inclui sempre o contrato que estava em vigor nesse momento. Uma segunda cópia é mantida em <code>/etc/pve/priv/proxmenux/oci</code>, partilhado por todos os nós do cluster e legível apenas por root do host. Ambas são escritas após cada instalação, atualização e alteração."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "manage",
|
||||
"title": "Gerenciar aplicativos OCI instalados",
|
||||
"intro": "Esta opção da tela principal lista as instâncias registradas com sua aplicação e imagem. Cada um é verificado em relação ao seu contrato antes de qualquer ação; um CT que já não corresponde ao seu registro não é modificado nem excluído. A mesma atualização e o mesmo editor são oferecidos na aba Atualizações do <monitorLink>ProxMenux Monitor</monitorLink>.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Opção",
|
||||
"O que muda",
|
||||
"O que é guardado"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Atualizar a imagem com a configuração salva",
|
||||
"O rootfs é substituído pela imagem que o canal salvo publica hoje",
|
||||
"Contrato, discos de contêiner, diretórios de host, rede e dispositivos"
|
||||
],
|
||||
[
|
||||
"Modificar: editar recursos, rede, caminhos e GPU",
|
||||
"O editor abre com o contrato atual; o CT é reconstruído com as alterações",
|
||||
"Os dados dos discos de contentores e pastas da máquina"
|
||||
],
|
||||
[
|
||||
"Watchdog: reinicie o aplicativo quando ele falhar",
|
||||
"Se o aplicativo é iniciado novamente quando ele pára por conta própria. Nada é reconstruído.",
|
||||
"Toda a instalação; somente a escolha é salva no contrato"
|
||||
],
|
||||
[
|
||||
"Remover: eliminar a aplicação e os seus contentores",
|
||||
"O LXC, ou cada membro de uma pilha, e seus contratos são excluídos",
|
||||
"Directórios da máquina, com o seu conteúdo"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Para uma aplicação com vários contentores, o menu oferece <strong>Atualizar todos os contentores da aplicação</strong>, <strong>Modificar caminhos e dispositivos adicionais</strong>, <strong>Recriar todos os contentores com a configuração guardada</strong>, o watchdog e a remoção. Modificar adiciona ou remove caminhos e dispositivos adicionais do contentor da aplicação sem recriar nada e, no Immich, altera o componente que executa o reconhecimento. Recriar reconstrói cada contentor a partir da imagem com que foi instalado, sem procurar uma mais recente."
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/manage-menu.png",
|
||||
"alt": "Lista de aplicativos OCI instalados e as opções de atualização, modificação e remoção",
|
||||
"caption": "Gerencie aplicativos OCI instalados."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "update",
|
||||
"title": "Uma atualização transacional",
|
||||
"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": "Usuário",
|
||||
"registry": "Registo de OCI",
|
||||
"update": "Atualizar instância",
|
||||
"resolve": "Resolver a etiqueta",
|
||||
"verify": "Verificar o arquivo e executar as verificações prévias",
|
||||
"backup": "Pare e faça backup do CT",
|
||||
"import": "Importar o novo rootfs",
|
||||
"reapply": "Aplicar o contrato novamente",
|
||||
"healthy": "íntegro",
|
||||
"failure": "falha",
|
||||
"commit": "Contrato publicado com o novo digest",
|
||||
"restored": "A instância anterior foi restaurada"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Quando o registro ainda serve o digest instalado, nada é baixado e a instância não é tocada.",
|
||||
"A nova imagem é verificada camada a camada antes de parar o CT. Uma transferência que chega danificada é repetida uma segunda vez; uma imagem já em cache que não passa na verificação é transferida novamente.",
|
||||
"As definições alteradas no Proxmox VE após a instalação (memória, swap, núcleos, limite e prioridade da CPU, arranque com o nó) são mantidas e incluídas no novo contrato.",
|
||||
"A interface LAN adicionada pela suite Arr e pelas aplicações com vários contentores (<code>net1</code>) e a ordem de arranque (<code>startup</code>) são repostas sem alterações no novo contentor.",
|
||||
"Qualquer outra diferença entre o CT e o seu contrato interrompe a atualização antes de parar o CT."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{
|
||||
"label": "Antes",
|
||||
"detail": "rootfs A\n/config mp0\nDirectório da máquina /media"
|
||||
},
|
||||
{
|
||||
"label": "Atualizar",
|
||||
"detail": "substitui apenas\no rootfs"
|
||||
},
|
||||
{
|
||||
"label": "Após",
|
||||
"detail": "rootfs B\n/config mp0\nDirectório da máquina /media"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Antes de parar seja o que for, a operação verifica o espaço necessário para a cópia de segurança: os dados utilizados nos volumes incluídos, mais uma margem. A cópia é guardada junto ao registo da aplicação, no disco de sistema do host. Se não houver espaço suficiente, o menu pede outro armazenamento do host que aceite cópias de segurança. A cópia é criada aí e eliminada no fim da operação. A escolha fica guardada para essa aplicação, incluindo as atualizações agendadas. Se nenhum armazenamento tiver espaço suficiente, a operação é recusada e a aplicação fica como estava. O espaço necessário para a nova imagem também é verificado antes da transferência."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "recovery",
|
||||
"title": "Recuperar uma operação interrompida",
|
||||
"intro": "Uma atualização e uma mudança usam uma transação persistente. Se o processo, o terminal ou o nó são interrompidos após a parada do CT, a operação não é tomada como terminada.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Marcador pendente",
|
||||
"body": "Ao abrir Gerir aplicações OCI instaladas, o estado guardado mostra que a substituição nunca chegou a ser publicada."
|
||||
},
|
||||
{
|
||||
"title": "Ver o estado",
|
||||
"body": "Mostra a fase atingida sem alterar contentores ou dados."
|
||||
},
|
||||
{
|
||||
"title": "Recuperar a instalação anterior",
|
||||
"body": "Restaura a cópia de segurança nativa verificada, criada antes da substituição, e o contrato anterior."
|
||||
},
|
||||
{
|
||||
"title": "Pilha como unidade",
|
||||
"body": "Para um aplicativo multi-contentor, cada membro é recuperado do mesmo ponto de transação, não apenas o selecionado."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Os diretórios da máquina estão fora do rollback",
|
||||
"body": "A cópia de segurança abrange o rootfs e os discos do contentor nela incluídos. Um diretório do host não é reposto no estado anterior, pois outros LXC podem utilizar os seus dados."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "watchdog",
|
||||
"title": "Watchdog: reiniciar uma aplicação que pára",
|
||||
"intro": "O Proxmox não tem uma política de reinício: quando termina o processo de um contentor de aplicação, o contentor fica parado. Com o watchdog ativo, uma aplicação que para por si própria é iniciada novamente. Para uma aplicação OCI, faz o que <code>restart: unless-stopped</code> faz num ficheiro Compose.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"O que acontece?",
|
||||
"Com o watchdog ativo"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"O aplicativo trava ou seu processo termina",
|
||||
"O contentor é iniciado novamente em segundos"
|
||||
],
|
||||
[
|
||||
"É parado ou desligado do Proxmox, do Monitor ou com <code>pct</code>",
|
||||
"Fica parado até alguém o iniciar"
|
||||
],
|
||||
[
|
||||
"Um backup, uma migração ou uma operação ProxMenux está trabalhando nele",
|
||||
"Nada é feito até que isso acabe."
|
||||
],
|
||||
[
|
||||
"Já estava parado quando o host arrancou",
|
||||
"Fica parado; isso é determinado por <strong>Iniciar com o Proxmox</strong>"
|
||||
],
|
||||
[
|
||||
"Ele continua parando logo após começar",
|
||||
"Uma aplicação que volta a parar segundos depois de arrancar, ou que não arranca, tem cinco tentativas de início, com intervalos de 30 segundos, 1, 2 e 5 minutos. Depois fica parada e é enviada uma notificação"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O instalador faz esta pergunta nos dois modos de instalação e propõe o valor declarado na receita da aplicação. Mais tarde, a opção pode ser alterada em <strong>Gerir aplicações OCI instaladas</strong> ou no interruptor <strong>Watchdog</strong> do contentor em <monitorLink>ProxMenux Monitor</monitorLink>; aplica-se a todos os contentores de uma aplicação com vários contentores. Um único serviço do host, <code>proxmenux-oci-watchdog.service</code>, vigia todas as aplicações que o pediram; a sua instalação aparece no separador Alterações de Audit & Report."
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "O que a máquina não pode dizer",
|
||||
"body": "O código de saída da aplicação não chega ao host, pelo que uma saída normal e uma falha são indistinguíveis e ambas provocam um reinício, como <code>always</code> e <code>unless-stopped</code> no Docker. Uma paragem pedida fora do Proxmox, com <code>lxc-stop</code> ou <code>systemctl</code>, não deixa uma tarefa de paragem e é interpretada como uma paragem espontânea."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "restore",
|
||||
"title": "Backup, restauração e outra máquina",
|
||||
"intro": "Uma cópia de segurança feita com vzdump ou Proxmox Backup Server inclui o contentor, os discos do contentor selecionados para a cópia e a cópia do seu contrato. O que a instalação guarda no host não faz parte dela. <strong>Gerir aplicações OCI instaladas</strong> deteta contentores restaurados num host sem o respetivo contrato, após uma nova instalação do Proxmox ou noutro host, e oferece o novo registo.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Restaurar os contentores no Proxmox",
|
||||
"body": "A partir do armazenamento de cópias de segurança, com o ID original ou qualquer ID livre. Uma aplicação com vários contentores precisa de todos eles."
|
||||
},
|
||||
{
|
||||
"title": "Abrir Gerenciar aplicativos OCI instalados",
|
||||
"body": "Os contentores restaurados são listados e é oferecida a recuperação. O botão <strong>Recuperar</strong> do separador Atualizações de <monitorLink>ProxMenux Monitor</monitorLink> abre a mesma recuperação."
|
||||
},
|
||||
{
|
||||
"title": "Verificar antes de mudar",
|
||||
"body": "A recuperação verifica se o host tem tudo o que cada aplicação precisa. Uma aplicação que não possa ser recuperada por completo fica como estava, com indicação do motivo."
|
||||
},
|
||||
{
|
||||
"title": "Registar e iniciar",
|
||||
"body": "O contrato está registrado neste host e o que a instalação manteve nele é escrito novamente. Iniciar as aplicações é uma pergunta separada, respondida com Não quando os recipientes originais ainda estão em execução em outro host."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/restore-offer.png",
|
||||
"alt": "Diálogo que lista os contentores restaurados e oferece a sua recuperação",
|
||||
"caption": "A recuperação oferecida quando Gerenciar aplicativos OCI instalados abre."
|
||||
}
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"O que o host guardava",
|
||||
"Após a recuperação"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Contrato de instância",
|
||||
"Registado a partir da cópia no contentor, verificada face à configuração restaurada pelo Proxmox"
|
||||
],
|
||||
[
|
||||
"Rede privada de uma aplicação multi-contentor",
|
||||
"Criado novamente com a mesma ponte e sub-rede; os endereços fixos dos contentores não mudam"
|
||||
],
|
||||
[
|
||||
"Ordem de arranque de uma aplicação com vários contentores",
|
||||
"O hookscript de dependências e o seu contrato são instalados novamente; os snippets são ativados no armazenamento <code>local</code> quando nenhum armazenamento os aceita"
|
||||
],
|
||||
[
|
||||
"Sysctls de rede e ficheiro de monitorização da máquina",
|
||||
"Escrito novamente em <code>/etc/pve/proxmenux</code>"
|
||||
],
|
||||
[
|
||||
"Ambiente de execução NVIDIA",
|
||||
"O hook de um contentor sem privilégios é instalado novamente. Um contentor privilegiado recebe os ficheiros do controlador deste host em vez dos do host de origem"
|
||||
],
|
||||
[
|
||||
"Montagem Rclone",
|
||||
"O hookscript e os programas que publicam a montagem são escritos novamente, com as mesmas vistas na máquina"
|
||||
],
|
||||
[
|
||||
"Regra da firewall do host para um monitor do host",
|
||||
"É pedida novamente, para a porta web e a sub-rede da bridge neste host"
|
||||
],
|
||||
[
|
||||
"<code>lost+found</code> de cada disco restaurado",
|
||||
"É removido quando está vazio; um restauro cria-o e algumas aplicações não arrancam se estiver presente nos seus dados"
|
||||
],
|
||||
[
|
||||
"Discos restaurados em outro armazenamento",
|
||||
"O contrato é atualizado para o armazenamento em que eles estão agora"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Um recipiente restaurado com outro ID mantém sua aplicação. O contrato, seu log de console, seus sysctls de rede, o hookscript de uma montagem Rclone e a ordem de início de uma aplicação multi-contentor são registrados com os IDs que os contêineres têm neste host."
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"O que impede uma recuperação",
|
||||
"O que fazer"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Falta um contentor de uma aplicação com vários contentores",
|
||||
"Restaure-o também; o aplicativo é recuperado inteiro"
|
||||
],
|
||||
[
|
||||
"A sub- rede privada já é usada nesta máquina",
|
||||
"A recuperação é cancelada e nada é alterado: os endereços dos contentores são fixados e não são movidos para outra subrede"
|
||||
],
|
||||
[
|
||||
"Não existe uma pasta da máquina",
|
||||
"Montar ou criar com os seus dados; uma cópia de segurança do contentor não inclui pastas da máquina"
|
||||
],
|
||||
[
|
||||
"Não existe um dispositivo nesta máquina",
|
||||
"Ligue-o ou remova-o do contentor no Proxmox"
|
||||
],
|
||||
[
|
||||
"Um aplicativo com NVIDIA em uma máquina sem o driver",
|
||||
"Instale o controlador NVIDIA e o Container Toolkit"
|
||||
],
|
||||
[
|
||||
"O backup foi feito antes da cópia do contrato existir",
|
||||
"O recipiente permanece como um LXC normal e não é oferecido novamente"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Um contentor que volta",
|
||||
"body": "Um contentor restaurado sobre si próprio a partir de uma cópia de segurança anterior, reposto num snapshot ou devolvido de outro nó transporta o contrato do estado em que se encontra. Se for selecionado para uma operação e o seu contrato diferir do deste host, a operação não começa e é oferecida a recuperação do contentor."
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/restore-result.png",
|
||||
"alt": "Resultado da recuperação com a rede privada, a ordem de início e os contentores registados",
|
||||
"caption": "Resultado de uma recuperação, passo a passo."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "remove",
|
||||
"title": "Removendo uma aplicação OCI",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Antes da confirmação é criado um resumo da configuração real: os contentores removidos, os dados eliminados com eles, a rede privada libertada e os diretórios do host mantidos. A confirmação tem <strong>Não</strong> como resposta predefinida, pois os dados dos discos eliminados não podem ser recuperados depois."
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Recurso",
|
||||
"Ao remover",
|
||||
"Justificação"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"rootfs e discos de contentores",
|
||||
"Removido",
|
||||
"Pertencem apenas ao recipiente."
|
||||
],
|
||||
[
|
||||
"Pasta da máquina",
|
||||
"Mantido, com o seu conteúdo",
|
||||
"Outras aplicações podem utilizá-lo"
|
||||
],
|
||||
[
|
||||
"Ficheiros do contentor no host",
|
||||
"Removido",
|
||||
"O registo da consola, os parâmetros sysctl de rede, o hookscript da montagem Rclone e o registo no separador App do ProxMenux Monitor não servem outros contentores"
|
||||
],
|
||||
[
|
||||
"Ficheiros partilhados por várias instalações",
|
||||
"Excluído com a última instalação que os usa",
|
||||
"O arquivo host-monitor e o hookscript de dependência de aplicativos multi-contentor"
|
||||
],
|
||||
[
|
||||
"Contrato de instância",
|
||||
"Excluído após uma remoção bem- sucedida",
|
||||
"Nenhum CT está mais associado a ele"
|
||||
],
|
||||
[
|
||||
"Ponte privada de uma pilha",
|
||||
"Libertada com a pilha",
|
||||
"Não tem mais membros para conectar"
|
||||
],
|
||||
[
|
||||
"Rede partilhada pela suite Arr",
|
||||
"Libertada com a última aplicação da suite",
|
||||
"Cada aplicação da suite é independente e é removida por conta própria"
|
||||
],
|
||||
[
|
||||
"Um único membro de uma pilha",
|
||||
"Não removido isoladamente",
|
||||
"O aplicativo inteiro é removido, então nenhuma pilha fica incompleta"
|
||||
],
|
||||
[
|
||||
"Um recipiente em outro nó do cluster",
|
||||
"Não removido",
|
||||
"Seus arquivos de registro e host estão no nó onde foi instalado: ele é removido lá, depois de migrar de volta"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/remove-summary.png",
|
||||
"alt": "Resumo de remoção com os recipientes, dados e diretórios do host afetados",
|
||||
"caption": "O resumo de remoção, construído a partir da configuração real."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "archives",
|
||||
"title": "Imagens transferidas e espaço da máquina",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "O arquivo OCI é usado para criar o rootfs; o CT em execução não o lê. Após uma instalação ou atualização, são listados os arquivos transferidos nessa operação, com o respetivo tamanho, e é oferecida a sua eliminação. Eliminá-los liberta espaço sem afetar o contentor ou os seus dados."
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "As atualizações não precisam do arquivo",
|
||||
"body": "Sem o arquivo, uma atualização resolve o canal salvo e baixa o novo digest. Com ele, um arquivo é reutilizado apenas quando sua referência e integridade correspondem ao que é solicitado."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "registry",
|
||||
"title": "Registo e limpeza",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Ao abrir <strong>Gerir aplicações OCI instaladas</strong>, são primeiro removidos os restos de contentores que não existem em nenhum nó do cluster: o registo guardado como histórico após a eliminação na interface do Proxmox e os ficheiros do host deixados por uma remoção. Um registo com uma operação incompleta é mantido, pois a sua cópia de segurança ainda pode ser necessária. Os volumes e diretórios do host nunca são eliminados por dedução."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "cluster",
|
||||
"title": "Em um cluster: migração e alta disponibilidade",
|
||||
"intro": "Um contentor OCI é um LXC normal do Proxmox: pode ser migrado ou gerido por HA como os restantes, com as mesmas limitações. O que precisa para arrancar é guardado onde todos os nós do cluster o encontram.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Parte",
|
||||
"Em outro nó do cluster"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Registo da consola",
|
||||
"O contentor cria <code>/var/log/proxmenux/oci</code> antes de arrancar, no nó que o executa. Cada nó mantém o registo dos arranques que executou."
|
||||
],
|
||||
[
|
||||
"Sysctls de rede e monitor host",
|
||||
"Mantido em <code>/etc/pve/proxmenux</code>, que cada nó do cluster compartilha, então um contêiner migrado os encontra."
|
||||
],
|
||||
[
|
||||
"Discos de contentores",
|
||||
"O Proxmox move-os com o contentor. O HA precisa dos dados disponíveis no nó de destino, através de armazenamento partilhado ou de uma configuração de replicação suportada."
|
||||
],
|
||||
[
|
||||
"Directórios e dispositivos da máquina",
|
||||
"As mesmas regras que qualquer LXC: um diretório host deve existir no nó alvo e ser marcado como compartilhado, e um GPU, Coral ou NPU deve estar presente lá."
|
||||
],
|
||||
[
|
||||
"Registo ProxMenux",
|
||||
"O contrato permanece no nó onde a aplicação foi instalada, e todos os nós leem a cópia mantida em <code>/etc/pve/priv/proxmenux/oci</code>. Uma aplicação com um só contentor que migra é registada no nó de destino ao abrir <strong>Gerir aplicações OCI instaladas</strong> ou ao iniciar uma operação para ela. Uma aplicação com vários contentores é oferecida para recuperação nesse nó, pois a sua rede privada tem de ser criada aí."
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Não para alta disponibilidade",
|
||||
"body": "Uma aplicação multi-contentor atinge seus membros através de uma ponte privada do nó onde foi instalado, então seus membros permanecem nesse nó. Um monitor host, como o Glances no modo host ou o Netdata, monitora o nó em que ele é executado; movendo-o monitoraria outro nó."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Um backup restaurado fora do cluster recebe os arquivos de <code>/etc/pve/proxmenux</code> que o recipiente usa quando o aplicativo é recuperado."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "channel",
|
||||
"title": "Uma etiqueta rolling não é uma atualização sem supervisão",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "O catálogo instala a etiqueta rolling publicada pelo responsável, mas o digest efetivo é resolvido e registado e só muda através de uma atualização explícita, com verificações prévias e rollback. O <monitorLink>ProxMenux Monitor</monitorLink> compara o digest instalado com o publicado pelo registo e apresenta um aviso e uma notificação quando há uma nova imagem disponível."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Contêineres OCI no ProxMenux Monitor | ProxMenux",
|
||||
"description": "O que o ProxMenux Monitor mostra para um container instalado pelo OCI Manager Apps: versões de aplicativos e imagens, novas imagens, saída do console e o terminal Proxmox VE."
|
||||
},
|
||||
"header": {
|
||||
"title": "No ProxMenux Monitor",
|
||||
"description": "Um recipiente instalado pelo OCI Manager Apps aparece em VMs & LXCs como qualquer outro LXC. Seu modal lê o registro de instalação: versões de aplicação e imagem, novas imagens, saída de console e terminal.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "intro",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "O registro é a fonte",
|
||||
"body": "O OCI Manager Apps sabe o que ele instalou e de onde veio. O Monitor lê esse registro de instalação em vez de sondar o recipiente, por isso os dados são os mesmos se o recipiente está em execução ou parado."
|
||||
}
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Página",
|
||||
"O que muda para um recipiente OCI"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Estado",
|
||||
"Um interruptor <strong>Watchdog</strong> em Iniciar no arranque: o aplicativo é iniciado novamente quando pára por conta própria"
|
||||
],
|
||||
[
|
||||
"Aplicativo",
|
||||
"O aplicativo é identificado a partir do registro, e as atualizações são monitoradas pela imagem"
|
||||
],
|
||||
[
|
||||
"Atualizações",
|
||||
"A imagem é atualizada ou a aplicação modificada, com o mesmo fluxo que o menu OCI"
|
||||
],
|
||||
[
|
||||
"Montagens",
|
||||
"Discos de contentores e pastas de máquinas, com a sua utilização"
|
||||
],
|
||||
[
|
||||
"Registros",
|
||||
"Apenas para recipientes OCI: a saída do console da aplicação"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "app",
|
||||
"title": "Aplicativo",
|
||||
"intro": "A aba <appLink>App</appLink> oferece o aplicativo instalado como uma detecção, com o nome, logotipo, porta e esquema do registro. Registrando-o abre o editor com o método <strong>Imagem OCI (instalada por ProxMenux)</strong>, que não precisa de configuração.",
|
||||
"blocks": [
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{
|
||||
"icon": "boxes",
|
||||
"title": "Aplicação",
|
||||
"body": "A versão da aplicação dentro da imagem, lida a partir da imagem em si: o seu ambiente ou a sua etiqueta <code>org.opencontainers.image.version</code>. É informativo."
|
||||
},
|
||||
{
|
||||
"icon": "archive",
|
||||
"title": "Imagem",
|
||||
"body": "A data de compilação e o digest da imagem instalada. A atualização é decidida aqui: o digest instalado é comparado com o que o registro publica hoje para a mesma tag."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Quando o registro publica um novo digest, o cartão mostra <strong>Nova imagem</strong> com sua data e digest, mesmo que a versão do aplicativo dentro não mudou: uma reconstrução em uma base atualizada é uma atualização.",
|
||||
"Quando os digests coincidem, o cartão mostra <strong>Versão</strong>.",
|
||||
"O cartão faz links para o repositório da imagem: seu projeto GitHub, ou sua página Docker Hub para uma imagem oficial.",
|
||||
"O link de acesso usa o endereço LAN do recipiente, também para o principal membro de um aplicativo multi-contentor, que tem um segundo endereço em sua rede privada.",
|
||||
"O botão <strong>Atualizar dados</strong> lê novamente o registro de instalação e o registro de imagens. Não são oferecidas opções para procurar ou registrar outro aplicativo: o contêiner contém exatamente o aplicativo de seu registro."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/monitor-app-tab.png",
|
||||
"alt": "Página de aplicação de um contentor OCI com a versão da aplicação, a imagem e o link do repositório",
|
||||
"caption": "Página da aplicação de um recipiente instalado pelo OCI Manager Apps."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "A verificação é executada uma vez por dia com as verificações de atualização do Monitor e o <strong>Atualizar dados</strong> a executa imediatamente. Uma nova imagem é enviada como uma notificação através dos canais configurados em <notificationsLink>Notificações</notificationsLink>. A atualização é aplicada na aba Atualizações."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "updates",
|
||||
"title": "Atualizações",
|
||||
"intro": "Para um contêiner instalado pelo OCI Manager Apps a aba Atualizações mostra o aplicativo com sua imagem instalada e, quando o registro publica uma, a nova imagem, no mesmo formato que qualquer outra aplicação. Os atualizadores de pacotes e aplicativos de um LXC comum não aparecem.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Botão",
|
||||
"O que abre"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Atualizar",
|
||||
"A atualização de <lifecycleLink>Gerenciar aplicativos OCI instalados</lifecycleLink> para este contêiner, no terminal do Monitor. Pode ser executada com ou sem uma nova imagem; sem imagem nova, nada muda. Em um aplicativo com vários contêineres, atualiza todos os membros."
|
||||
],
|
||||
[
|
||||
"Modificar",
|
||||
"O editor da aplicação (recursos, rede, caminhos e GPU). Em uma aplicação multi-contentor adiciona ou remove os caminhos e dispositivos extras do recipiente de aplicação e, em Immich, altera o que executa o reconhecimento."
|
||||
],
|
||||
[
|
||||
"Recuperar",
|
||||
"Substitui a atualização quando uma operação no recipiente foi interrompida e abre sua recuperação."
|
||||
],
|
||||
[
|
||||
"Recuperar (contêiner restaurado)",
|
||||
"Exibido para um contêiner restaurado de backup que não tem contrato neste host, em <strong>Aplicativo OCI restaurado</strong>. Abre a <lifecycleLink>recuperação</lifecycleLink> no terminal do Monitor; Atualizar e Modificar aparecem após o registro."
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Alterações externas, diretórios host e aplicativos multi-contentores são tratados como no menu OCI. Em uma aplicação multi-contentor, os botões e as opções aparecem apenas no recipiente principal; os outros membros mostram sua imagem, uma nota de que eles são atualizados do recipiente principal e um botão que a abre. Quando o terminal fecha, a imagem, o registro e as montagens são lidos novamente."
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Opção",
|
||||
"Comportamento"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Manter o backup feito antes da atualização",
|
||||
"Cada atualização faz backup do recipiente para restaurá-lo se a atualização falhar. Com esta opção, o mesmo backup é mantido no armazenamento escolhido e aparece entre os backups do CT; em Proxmox Backup Server um backup é escrito antes da atualização."
|
||||
],
|
||||
[
|
||||
"Atualizações agendadas",
|
||||
"A imagem é atualizada no horário escolhido somente se o registro publicar uma nova, com a opção de esperar que ela tenha 1, 3, 7 ou 14 dias. Um contêiner com alterações feitas fora do ProxMenux é ignorado e reportado."
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "logs",
|
||||
"title": "Registros",
|
||||
"intro": "A guia Logs aparece apenas para recipientes instalados pelo OCI Manager Apps, entre Mounts e Backups. Ele mostra a saída padrão e erro do processo principal da imagem, a mesma saída <code>docker logs</code> mostra para um recipiente Docker.",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"A saída é mantida no host em <code>/var/log/proxmenux/oci/VMID.console.log</code> (modo 0600), desde o primeiro início e através de reinícios, para que possa ser lido com o recipiente parado.",
|
||||
"O arquivo é rodado em 10 MB, mantendo três cópias comprimidas (<code>/etc/logrotate.d/proxmenux-oci</code>).",
|
||||
"Cada início do recipiente é marcado na saída. A aba mostra a saída desde o último início por padrão; <strong>Histórico completo</strong> também mostra as anteriores.",
|
||||
"Quando o aplicativo é removido, sua saída é removida com ele.",
|
||||
"São exibidas as últimas 100, 500 ou 1000 linhas. Enquanto o contêiner está em execução, as novas linhas são acompanhadas ao vivo; rolar para cima pausa o acompanhamento e <strong>Acompanhar</strong> o retoma.",
|
||||
"Um filtro mostra apenas as linhas que contêm um texto, e <strong>Baixar</strong> salva as linhas carregadas.",
|
||||
"Os códigos de cores são removidos e uma linha que uma barra de progresso redesenha é mostrada em seu estado final.",
|
||||
"A aba lê o arquivo a cada abertura, sem usar uma cópia em cache."
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Credenciais de primeiro início",
|
||||
"body": "Imagens que imprimem uma senha gerada em seu primeiro início deixam-na nesta saída, como <code>docker logs</code> faz. O instalador lê-o de lá para o mostrar em seu resumo."
|
||||
}
|
||||
},
|
||||
{
|
||||
"figure": {
|
||||
"src": "/oci-manager/monitor-logs-tab.png",
|
||||
"alt": "Aba Logs com a saída do console de um contêiner OCI, seletor de linhas, filtro e botão de acompanhamento",
|
||||
"caption": "Saída do console de um recipiente OCI."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "terminal",
|
||||
"title": "Consola Proxmox VE",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Uma imagem OCI executa seu próprio processo como PID 1 e nenhum serviço de login, então o console padrão de um LXC abriria um terminal onde nada responde. Containers instalados pelo OCI Manager Apps são criados com <code>cmode: shell</code>: o console Proxmox VE abre uma shell com <code>lxc-attach</code>, o equivalente a <code>docker exec</code>, com a aplicação em execução intocada."
|
||||
},
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"O shell é o que <code>/etc/passwd</code> atribui ao root na imagem. Se root não tiver shell ou a imagem não incluir nenhum, o console padrão será mantido.",
|
||||
"O shell é root dentro do recipiente, sem senha. Quem pode abri-lo é decidido pela permissão <code>VM.Console</code> de Proxmox VE.",
|
||||
"O terminal do Monitor entra no recipiente com <code>pct enter</code>, que funciona da mesma forma."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "mounts",
|
||||
"title": "Montagens",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "A aba <mountsLink>Montagens</mountsLink> lista os discos do contêiner e seus diretórios do host. O uso de um disco em armazenamento de blocos, como LVM-thin, é lido do sistema de arquivos desse disco, montado apenas dentro do contêiner."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,404 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Aplicações multi-contêineres ProxMenux",
|
||||
"description": "Como o OCI Manager Apps transforma um aplicativo com seu banco de dados e cache em LXCs nativos coordenados: plano, rede privada, gancho de dependência, validação e atualizações transacionais."
|
||||
},
|
||||
"header": {
|
||||
"title": "Aplicações com vários contentores",
|
||||
"description": "Uma aplicação com seu banco de dados, cache e outros serviços torna-se vários LXCs nativos coordenados, instalados e atualizados como um.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "intro",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Um aplicativo para o usuário, vários LXCs para Proxmox VE",
|
||||
"body": "Uma definição multi-contentor é uma entrada do catálogo. O instalador cria um LXC nativo por serviço e mantém suas dependências explícitas. Immich, Nextcloud, Paperless-ngx e Tandoor são instalados desta forma."
|
||||
}
|
||||
},
|
||||
{
|
||||
"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": "Plano de pilha",
|
||||
"app": "Aplicação LXC",
|
||||
"appNet": "LAN + privado",
|
||||
"db": "PostgreSQL LXC",
|
||||
"cache": "Valkey LXC",
|
||||
"private": "privado"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "plan",
|
||||
"title": "1. O plano, antes de existir qualquer recipiente",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Nenhum LXC é criado enquanto a definição Compose é interpretada. Um plano completo vem em primeiro lugar, com cada membro, imagem, VMID, rede, caminho, segredo, ordem e verificação de saúde. Se o plano não for consistente, a instalação não começa."
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Elemento do plano",
|
||||
"Conteúdo",
|
||||
"Verificado antes de criar qualquer coisa"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Membros",
|
||||
"Aplicação principal, banco de dados, cache, aprendizado de máquina e outras dependências",
|
||||
"VMIDs exclusivos, papéis conhecidos e exatamente um membro principal"
|
||||
],
|
||||
[
|
||||
"Imagens",
|
||||
"Referência rolling, arquitetura e digest resolvido de cada serviço",
|
||||
"Todos existem, suportam a arquitetura e passam pela verificação de integridade do OCI"
|
||||
],
|
||||
[
|
||||
"Rede",
|
||||
"Ponte privada, sub-rede, endereço fixo por serviço e acesso LAN para o membro principal",
|
||||
"Sem colisão com pontes ou subredes existentes e sem endereço repetido"
|
||||
],
|
||||
[
|
||||
"Persistência",
|
||||
"Discos de container, diretórios de host, proprietários e backup",
|
||||
"Nenhum caminho sobreposto, armazenamento disponível e permissões declaradas"
|
||||
],
|
||||
[
|
||||
"Segredos",
|
||||
"Senha do banco de dados, chaves do aplicativo e credenciais iniciais",
|
||||
"Gerado uma vez e dado apenas aos membros que os usam"
|
||||
],
|
||||
[
|
||||
"Ciclo de vida",
|
||||
"Ordem de início, ordem de parada e uma verificação de funcionamento por membro",
|
||||
"A aplicação principal começa por último e pára primeiro"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "create",
|
||||
"title": "2. Criação, membro por membro",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Reserve cada VMID",
|
||||
"body": "O inventário Proxmox VE e o registro de instância são verificados. Um CT existente não é adotado e um contrato que ainda pertence a outra instância não é reutilizado."
|
||||
},
|
||||
{
|
||||
"title": "Preparar cada imagem",
|
||||
"body": "Todas as imagens são resolvidas, baixadas e verificadas antes da criação do primeiro container."
|
||||
},
|
||||
{
|
||||
"title": "Criar cada rootfs",
|
||||
"body": "Os metadados oficiais do OCI são importados, e a identidade da instância ProxMenux e o papel de membro são adicionados."
|
||||
},
|
||||
{
|
||||
"title": "Rede privada",
|
||||
"body": "Uma ponte e uma sub-rede são criadas e cada membro recebe seu endereço fixo; apenas o membro principal também recebe a interface LAN."
|
||||
},
|
||||
{
|
||||
"title": "Persistência",
|
||||
"body": "Cada banco de dados e configuração obtém seu próprio disco de contêiner; somente os dados destinados a serem compartilhados usam diretórios de host."
|
||||
},
|
||||
{
|
||||
"title": "Ambiente",
|
||||
"body": "Endpoints internos, segredos compartilhados e variáveis de serviço são escritos. O aplicativo atinge suas dependências em seus endereços privados reservados."
|
||||
},
|
||||
{
|
||||
"title": "Registro",
|
||||
"body": "Cada membro registra sua configuração nativa, as mudanças rootfs que as atualizações têm que reproduzir e sua relação com a pilha."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "checks",
|
||||
"title": "3. Iniciar e verificar cada recipiente",
|
||||
"intro": "Um LXC criado não significa um serviço pronto. As dependências começam em ordem e cada um passa uma verificação específica para o seu serviço.",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Serviço",
|
||||
"Verificação",
|
||||
"O que mostra"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"PostgreSQL",
|
||||
"<code>pg_isready</code> no CT com o host, usuário e banco de dados esperados",
|
||||
"O servidor aceita conexões para o banco de dados configurado"
|
||||
],
|
||||
[
|
||||
"Redis / Valkey",
|
||||
"<code>redis-cli</code> ou <code>valkey-cli</code> <code>PING</code> contra o seu endereço privado",
|
||||
"O broker escuta e responde"
|
||||
],
|
||||
[
|
||||
"aprendizado de máquina Immich",
|
||||
"HTTP <code>GET /ping</code>, mais uma verificação do tempo de execução GPU selecionado",
|
||||
"O serviço responde e a aceleração solicitada não passou a usar a CPU"
|
||||
],
|
||||
[
|
||||
"Nextcloud",
|
||||
"<code>GET /status.php</code> com <code>installed=true</code>, <code>maintenance=false</code> e <code>needsDbUpgrade=false</code>",
|
||||
"A inicialização terminou sem migração pendente"
|
||||
],
|
||||
[
|
||||
"Paperless-ngx / Tandoor",
|
||||
"HTTP no endereço LAN e porto real do serviço",
|
||||
"O frontend e suas dependências servem a aplicação"
|
||||
],
|
||||
[
|
||||
"Aplicação principal",
|
||||
"O ponto final do seu modelo, por exemplo, <code>/api/server/ping</code> em Immich",
|
||||
"A pilha inteira funciona através da aplicação que usa as dependências"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Em execução não significa funcionando corretamente",
|
||||
"body": "O estado em execução apenas diz que o processo LXC existe. Quando o serviço oferece uma verificação melhor, é utilizado uma verificação exec ou HTTP com tempo limite. Se um membro para ou falha na verificação, a pilha não é declarada instalada."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "hook",
|
||||
"title": "4. O gancho de dependência",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "O gancho é definido apenas no recipiente principal de uma pilha dependente. Proxmox VE mantém o script como um trecho e o executa como o <code>hookscript</code> daquele CT. A receita da pilha não é escrita no script: ela vive em um contrato privado separado."
|
||||
},
|
||||
{
|
||||
"codeGrid": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Configuração principal do CT",
|
||||
"code": "hookscript: local:snippets/proxmenux-stack-dependencies.sh"
|
||||
},
|
||||
{
|
||||
"title": "Contrato privado (exemplo)",
|
||||
"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": "Fonte completa de proxmenux-stack-dependencies.sh",
|
||||
"pathCode": "local:snippets/proxmenux-stack-dependencies.sh",
|
||||
"snippetCode": "stackDependencyHook"
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O script é o mesmo para cada pilha. VMIDs, nomes, tipos de verificação e timeouts vêm do contrato privado <code>/etc/pve/priv/proxmenux-stack-VMID.json</code> de cada pilha."
|
||||
},
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "O Proxmox VE chama pre-start",
|
||||
"body": "Antes do início do CT principal, o gancho funciona com o seu VMID e a fase do ciclo de vida."
|
||||
},
|
||||
{
|
||||
"title": "Um bloqueio por pilha",
|
||||
"body": "<code>flock</code> em <code>/run/lock/proxmenux-stack-VMID.lock</code> impede duas sequências de início ao mesmo tempo."
|
||||
},
|
||||
{
|
||||
"title": "O contrato é lido e validado",
|
||||
"body": "São exigidos um esquema conhecido, dependências numéricas, rótulos, uma verificação exec, http ou running e um tempo limite positivo."
|
||||
},
|
||||
{
|
||||
"title": "Dependências em ordem",
|
||||
"body": "Cada CT deve existir; um parado é iniciado e um já em execução não é reiniciado."
|
||||
},
|
||||
{
|
||||
"title": "Esperar o serviço ficar pronto",
|
||||
"body": "A verificação é executada a cada dois segundos, e o CT também é confirmado para estar ainda em execução."
|
||||
},
|
||||
{
|
||||
"title": "O CT principal começa",
|
||||
"body": "Quando cada dependência está pronta, termina pré-inicial e o Proxmox VE inicia a aplicação."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "O gancho não para dependências",
|
||||
"body": "As fases pós-início, pré-parar e pós-parar não fazem nada. Parar o CT principal deixa PostgreSQL, Redis, Valkey ou aprendizado de máquina em execução. O gancho ordena o início; ele não transforma vários LXCs em um processo."
|
||||
}
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Tipo",
|
||||
"Exemplo",
|
||||
"Início posterior"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Pilha dependente",
|
||||
"Immich, Nextcloud, aplicação com PostgreSQL",
|
||||
"O gancho do CT principal inicia as dependências e espera por eles"
|
||||
],
|
||||
[
|
||||
"Conjunto de aplicativos",
|
||||
"Conjunto de aplicações Arr",
|
||||
"Nenhum membro principal: cada LXC segue o seu próprio <code>onboot</code>"
|
||||
],
|
||||
[
|
||||
"Aplicação única",
|
||||
"Jellyfin",
|
||||
"Proxmox VE inicia esse LXC diretamente"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "stack-checks",
|
||||
"title": "5. Verifica a pilha como um todo",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Cada VMID existe, é único e mantém a identidade de instância esperada.",
|
||||
"Cada contrato pertence à mesma pilha, mantém seu papel e sua configuração nativa gravada.",
|
||||
"O membro principal é o último em <code>start_order</code> e o primeiro em <code>stop_order</code>.",
|
||||
"Nenhum membro, volume ou adaptação rootfs está faltando.",
|
||||
"O gancho aponta para o trecho oficial, seu conteúdo é inalterado e seu contrato corresponde à receita da pilha.",
|
||||
"As imagens e digests observados correspondem aos arquivos OCI preparados.",
|
||||
"Dispositivos, perfis GPU, montagens, segredos e endpoints ainda correspondem aos contratos.",
|
||||
"Após cada dependência passar, o ponto final da aplicação principal verifica a integração entre os membros."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "manage",
|
||||
"title": "Gerenciando uma pilha instalada",
|
||||
"intro": "Em <strong>Gerenciar aplicativos OCI instalados</strong>, qualquer membro leva à pilha inteira. O menu oferece <strong>Atualizar todos os contêineres do aplicativo</strong>, <strong>Modificar caminhos e dispositivos extras</strong>, <strong>Recriar todos os contêineres com a configuração salva</strong> e <strong>Remover: excluir o aplicativo e seus contêineres</strong>. Recriar reconstrói cada contêiner da imagem original pelo digest salvo, sem procurar uma mais nova, seguindo os mesmos passos de uma atualização. A opção aparece para pilhas que podem ser atualizadas.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Qualquer membro",
|
||||
"body": "O contrato dos membros nomeia o VMID principal e a lista completa de membros."
|
||||
},
|
||||
{
|
||||
"title": "A pilha é reprodutível",
|
||||
"body": "Identificações, contratos, gancho, adaptações e uma repetição coordenada para essa receita são validadas."
|
||||
},
|
||||
{
|
||||
"title": "Primeiro as imagens",
|
||||
"body": "O aplicativo não é parado até que cada digest tenha sido resolvido, baixado e verificado."
|
||||
},
|
||||
{
|
||||
"title": "Parar e fazer backup do conjunto",
|
||||
"body": "Os backups nativos verificados são feitos com a pilha parada, então a aplicação e os bancos de dados pertencem ao mesmo momento."
|
||||
},
|
||||
{
|
||||
"title": "Atualizar e verificar cada membro",
|
||||
"body": "Adaptação, rede, montagens, segredos e dispositivos são novamente aplicados antes do exame de saúde de cada membro."
|
||||
},
|
||||
{
|
||||
"title": "Publicar ou recuperar tudo",
|
||||
"body": "Os novos contratos só são publicados quando todos os membros passam. Se alguém falhar, cada membro é restaurado."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Modificar",
|
||||
"O que muda",
|
||||
"O que é guardado"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Caminhos e dispositivos adicionais",
|
||||
"Eles são adicionados ou removidos do recipiente de aplicação, que reinicia. Nada é reconstruído.",
|
||||
"Os dados da aplicação, da sua base de dados e dos outros contentores"
|
||||
],
|
||||
[
|
||||
"O que executa o reconhecimento (Immich)",
|
||||
"O recipiente de aprendizado de máquina leva a imagem e os dispositivos do CPU ou de um GPU do hospedeiro. Todo o aplicativo é parado e atualizado, como em uma atualização",
|
||||
"O cache do modelo, a biblioteca e o banco de dados. Se algo falhar, os recipientes anteriores e a escolha anterior são restaurados"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutWarning": {
|
||||
"title": "Uma pilha sem uma repetição coordenada não é atualizada",
|
||||
"body": "Se a preparação de uma pilha não puder ser reproduzida, a atualização é recusada antes de a pilha ser parada. A aplicação continua a correr como está."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "failure",
|
||||
"title": "6. Quando algo falha",
|
||||
"blocks": [
|
||||
{
|
||||
"p": "Durante uma instalação, um erro para e remove os contêineres incompletos que a operação criou, e a ponte privada se a operação criou. Uma pilha não é publicada como válida até que toda a sequência termine."
|
||||
},
|
||||
{
|
||||
"p": "Uma atualização é transacional: todas as imagens são preparadas primeiro, depois a pilha pára, cada membro é feito backup e o backup verificado, e só então é substituído cada rootfs. Os membros começam um a um com seu exame de saúde; se um falha, cada membro é restaurado a partir do mesmo conjunto de backups, de modo que o banco de dados eo aplicativo nunca pertencem a momentos diferentes."
|
||||
},
|
||||
{
|
||||
"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": "Preparar cada imagem",
|
||||
"stop": "Parar, membro principal primeiro",
|
||||
"backup": "Cópia de segurança verificada de cada CT",
|
||||
"replace": "Substituir rootfs",
|
||||
"healthy": "Todos funcionando corretamente?",
|
||||
"yes": "Sim",
|
||||
"no": "Não",
|
||||
"commit": "Publicar contratos",
|
||||
"rollback": "Restaurar cada membro"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "not-assumed",
|
||||
"title": "O que uma pilha não inclui",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Uma suíte instalada em um fluxo, como a suíte Arr, não é uma pilha dependente: seus recipientes não têm ordem de início entre eles.",
|
||||
"A rede privada não substitui a autenticação, TLS ou a configuração de cada aplicativo.",
|
||||
"O backup de um LXC não contém a ponte, o gancho ou os contratos do resto da pilha.",
|
||||
"Prowlarr, Sonarr ou Radarr não recebem indexadores, perfis ou provedores de ProxMenux."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,305 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Dados, caminhos e rede | ProxMenux",
|
||||
"description": "Como o OCI manager Apps preserva os dados de um contentor OCI: discos do contentor, diretórios do host, montagens com rclone, endereços e redes privadas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Dados, caminhos e rede",
|
||||
"description": "O que fica no rootfs, o que é preservado quando este é substituído, como os dados são partilhados entre contentores e como cada um obtém o seu endereço.",
|
||||
"section": "OCI manager Apps"
|
||||
},
|
||||
"sections": [
|
||||
{
|
||||
"id": "intro",
|
||||
"blocks": [
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "A persistência é decidida antes de criar o LXC",
|
||||
"body": "Os volumes declarados pela imagem e pelo respetivo ficheiro Compose são lidos antes de criar o contentor. Cada caminho que deva ser preservado após uma atualização torna-se um ponto de montagem independente do rootfs. Assim, o rootfs contém apenas o que pertence à imagem e pode ser substituído."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "questions",
|
||||
"title": "O que o instalador pergunta",
|
||||
"intro": "O modelo fornece os caminhos necessários à aplicação. Cada um é colocado num disco do contentor ou num diretório do host, e podem ser acrescentados mais caminhos antes do resumo.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Caminhos necessários",
|
||||
"body": "São apresentados <code>/config</code>, <code>/data</code>, bibliotecas, descargas e todos os volumes declarados pela aplicação."
|
||||
},
|
||||
{
|
||||
"title": "Localização",
|
||||
"body": "Cada caminho é colocado num disco do contentor ou num diretório já existente no host."
|
||||
},
|
||||
{
|
||||
"title": "Armazenamento e tamanho",
|
||||
"body": "É criado um disco do contentor num armazenamento do Proxmox VE com o tamanho indicado. A instalação predefinida utiliza <code>local-lvm</code>; a avançada pergunta o armazenamento de cada caminho imediatamente antes do tamanho e propõe o do rootfs. O disco aparece como <code>vm-VMID-disk-N</code> e é associado como <code>mpN</code>."
|
||||
},
|
||||
{
|
||||
"title": "Diretório do host",
|
||||
"body": "O diretório do host é indicado pelo seu caminho. Se não existir, é criado e atribuído ao utilizador do host para o qual é mapeado o utilizador do contentor."
|
||||
},
|
||||
{
|
||||
"title": "Caminhos adicionais",
|
||||
"body": "Antes de instalar, podem ser acrescentados mais pares de caminho ou volume do host e caminho dentro do contentor."
|
||||
},
|
||||
{
|
||||
"title": "Resumo",
|
||||
"body": "O mapeamento completo é apresentado antes de criar o CT e guardado no contrato da instância."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "options",
|
||||
"title": "As duas localizações persistentes",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Propriedade",
|
||||
"Disco do contentor",
|
||||
"Diretório do host"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Na configuração",
|
||||
"<code>mpN: STORAGE:vm-VMID-disk-N,mp=/config,backup=1,size=16G</code>",
|
||||
"<code>mpN: /mnt/oci-shared/media,mp=/data/media</code>"
|
||||
],
|
||||
[
|
||||
"Cópia de segurança do contentor (vzdump)",
|
||||
"Incluído, com <code>backup=1</code>",
|
||||
"Não incluído"
|
||||
],
|
||||
[
|
||||
"Tamanho",
|
||||
"Fixo; aumenta-se redimensionando o ponto de montagem",
|
||||
"O espaço livre do sistema de ficheiros ou dataset do host"
|
||||
],
|
||||
[
|
||||
"Outros contentores",
|
||||
"Montado apenas pelo contentor a que pertence",
|
||||
"O mesmo diretório pode ser montado em vários contentores"
|
||||
],
|
||||
[
|
||||
"Snapshots e restauro",
|
||||
"Geridos pelo Proxmox VE juntamente com o CT",
|
||||
"Geridos no armazenamento do host"
|
||||
],
|
||||
[
|
||||
"Ao remover a aplicação",
|
||||
"Eliminado com o contentor",
|
||||
"Preservado com o seu conteúdo"
|
||||
],
|
||||
[
|
||||
"Ao mover o CT para outro nó",
|
||||
"É movido com o CT",
|
||||
"O mesmo caminho tem de existir no outro nó"
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O rootfs fica reservado para os binários e o conteúdo da imagem. Uma atualização ou recriação substitui-o sem tocar em nenhum dos dois tipos de ponto de montagem."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "example",
|
||||
"title": "Exemplo: um contentor com ambas as localizações",
|
||||
"blocks": [
|
||||
{
|
||||
"code": {
|
||||
"title": "Jellyfin instalado como CT 151 em local-lvm (excerto)",
|
||||
"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": "Uma atualização ou recriação substitui apenas o rootfs: o <code>mp0</code> preserva utilizadores, bibliotecas e definições, e o <code>mp1</code> continua a apresentar os mesmos ficheiros multimédia. Restaurar a cópia do CT recupera <code>/config</code>; se necessário, o diretório multimédia é restaurado a partir da cópia de segurança do armazenamento do host."
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{
|
||||
"label": "Contrato",
|
||||
"detail": "/config"
|
||||
},
|
||||
{
|
||||
"label": "Localização",
|
||||
"detail": "Disco do contentor\nou diretório do host"
|
||||
},
|
||||
{
|
||||
"label": "LXC",
|
||||
"detail": "Sempre /config\npara a aplicação"
|
||||
}
|
||||
],
|
||||
"caption": "A aplicação vê o caminho declarado pela imagem; só muda o local onde é armazenado."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "shared",
|
||||
"title": "Um diretório do host, vários contentores",
|
||||
"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": "Diretório do host",
|
||||
"config": "Configuração própria"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "Cada contentor guarda a sua configuração no respetivo disco. A biblioteca ou as descargas ficam num único diretório do host, montado no mesmo caminho interno em todos os contentores. Assim, o caminho onde uma aplicação escreve é o mesmo de onde outra lê."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "rclone",
|
||||
"title": "Armazenamento na nuvem através da aplicação rclone",
|
||||
"intro": "Além da instalação, a ficha do rclone no catálogo permite <strong>Ativar uma montagem num contentor OCI de rclone existente</strong>. É montado um armazenamento remoto já criado e autorizado na interface web do rclone e disponibilizado no host. Outros contentores podem utilizá-lo como um diretório do host.",
|
||||
"blocks": [
|
||||
{
|
||||
"steps": {
|
||||
"items": [
|
||||
{
|
||||
"title": "Contentor e armazenamento remoto",
|
||||
"body": "O VMID do contentor de rclone, o nome exato do armazenamento remoto e, opcionalmente, um caminho dentro dele."
|
||||
},
|
||||
{
|
||||
"title": "Nome da montagem e cache",
|
||||
"body": "O nome da montagem e o modo de cache VFS: <code>off</code>, <code>minimal</code>, <code>writes</code> ou <code>full</code> (predefinido)."
|
||||
},
|
||||
{
|
||||
"title": "Vistas disponibilizadas",
|
||||
"body": "Uma raiz comum, <code>/mnt/oci-shared</code> por predefinição, contém uma vista de leitura e escrita em <code>/mnt/oci-shared/remotes/NAME</code> e uma vista só de leitura em <code>/mnt/oci-shared/remotes-ro/NAME</code>."
|
||||
},
|
||||
{
|
||||
"title": "Ativação",
|
||||
"body": "Após confirmação, o CT é parado, o seu comando de arranque e um hookscript do Proxmox VE são configurados e o CT é iniciado novamente. A operação aguarda até ambas as vistas estarem montadas no host."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"calloutInfo": {
|
||||
"title": "Se a montagem não for ativada",
|
||||
"body": "A configuração anterior do contentor é restaurada e este é iniciado novamente. Assim, se a ativação falhar, o rclone fica como estava."
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "network",
|
||||
"title": "Endereços e redes",
|
||||
"intro": "Uma aplicação com um só contentor precisa de um endereço. Uma aplicação com vários contentores também precisa de uma rede estável entre os seus membros.",
|
||||
"blocks": [
|
||||
{
|
||||
"cards": {
|
||||
"items": [
|
||||
{
|
||||
"icon": "network",
|
||||
"title": "Aplicação com um só contentor",
|
||||
"body": "Escolhe-se a bridge de rede e DHCP ou um endereço fixo em formato CIDR. O LXC tem um endereço próprio e o resumo apresenta os URL completos dos serviços."
|
||||
},
|
||||
{
|
||||
"icon": "waypoints",
|
||||
"title": "Aplicação com vários contentores",
|
||||
"body": "É encontrada uma sub-rede livre e criada uma bridge privada persistente. Cada membro — aplicação, base de dados e cache — recebe nela um endereço fixo."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"flow": {
|
||||
"nodes": [
|
||||
{
|
||||
"label": "LAN",
|
||||
"detail": "Endereço acessível\napenas para o serviço principal"
|
||||
},
|
||||
{
|
||||
"label": "LXC principal",
|
||||
"detail": "Web / API\nLAN + rede privada"
|
||||
},
|
||||
{
|
||||
"label": "Rede privada",
|
||||
"detail": "PostgreSQL · Valkey · ML\nendereços fixos"
|
||||
}
|
||||
],
|
||||
"caption": "As dependências comunicam pela rede privada e não têm um endereço na LAN."
|
||||
}
|
||||
},
|
||||
{
|
||||
"p": "O contrato da stack guarda a bridge, a sub-rede, os endereços e as relações entre serviços. Ao atualizar a aplicação, a mesma topologia é reutilizada para todos os membros. O ProxMenux Monitor abre o contentor principal no seu endereço LAN, não no da rede privada."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "ownership",
|
||||
"title": "Proprietários de ficheiros e diretórios",
|
||||
"blocks": [
|
||||
{
|
||||
"list": {
|
||||
"items": [
|
||||
"Os novos diretórios são criados com o UID e o GID para os quais é mapeado o LXC sem privilégios.",
|
||||
"O proprietário dos diretórios existentes não é alterado de forma recursiva.",
|
||||
"Sockets, ficheiros de sistema e caminhos sensíveis não são propostos como diretórios genéricos do host."
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "backup",
|
||||
"title": "O que contém uma cópia de segurança do contentor",
|
||||
"blocks": [
|
||||
{
|
||||
"table": {
|
||||
"headers": [
|
||||
"Elemento",
|
||||
"Na cópia vzdump do CT",
|
||||
"Onde é guardado"
|
||||
],
|
||||
"rows": [
|
||||
[
|
||||
"Rootfs OCI",
|
||||
"Sim",
|
||||
"Na cópia do CT; também pode ser reconstruído a partir da imagem e do contrato"
|
||||
],
|
||||
[
|
||||
"Disco do contentor com <code>backup=1</code>",
|
||||
"Sim",
|
||||
"A cópia do CT"
|
||||
],
|
||||
[
|
||||
"Diretório do host",
|
||||
"Não",
|
||||
"A cópia de segurança do armazenamento do host"
|
||||
],
|
||||
[
|
||||
"Contrato da instância",
|
||||
"Sim, a cópia guardada no CT",
|
||||
"<code>/.proxmenux/oci-record.json</code> dentro do CT; as cópias adicionais do host e do cluster são guardadas separadamente"
|
||||
],
|
||||
[
|
||||
"Aplicação com vários contentores",
|
||||
"Cada membro na sua própria cópia",
|
||||
"As cópias de todos os membros, mais o contrato da stack e a respetiva bridge no host"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Script pós-instalação automatizado | Documentação ProxMenux",
|
||||
"description": "O script pós-instalação automatizado ProxMenux executa 14 otimizações predefinidas adaptadas ao hardware num host Proxmox VE novo. Não tem lista de funções para selecionar, mas pode pedir confirmação para a atualização do sistema, para ocultar o aviso de subscrição, instalar Log2RAM em certos casos e reiniciar. As alterações reversíveis ficam registadas.",
|
||||
"ogTitle": "Script pós-instalação automatizado | Documentação ProxMenux",
|
||||
"ogDescription": "14 otimizações predefinidas adaptadas ao hardware para um host Proxmox VE novo, com confirmações para algumas ações e registo de alterações reversíveis."
|
||||
},
|
||||
"header": {
|
||||
"title": "Script pós-instalação automatizado",
|
||||
"description": "O ProxMenux executa 14 otimizações de base predefinidas sem lista de funções para selecionar. Algumas ações pedem confirmação. As alterações reversíveis ficam registadas em Desinstalar otimizações; as atualizações de pacotes não são descritas como reversíveis.",
|
||||
"section": "Pós-instalação · Automatizada"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Quando escolher Automatizado",
|
||||
"body": "Execute isso em um host Proxmox recém-instalado quando desejar uma linha de base sensata sem tomar decisões. O script é idempotente – executá-lo duas vezes é seguro, basta reaplicar as mesmas configurações. Recursos opcionais (Fastfetch, IOMMU, repositório Ceph, HA, correções AMD…) intencionalmente <strong>não</strong> fazem parte deste caminho; escolha-os em <link>Personalizáveis</link> se precisar deles."
|
||||
},
|
||||
"applies": {
|
||||
"heading": "O que o script aplica",
|
||||
"intro": "As otimizações são aplicadas nesta ordem exata. A coluna <em>Categoria</em> liga à documentação detalhada de cada alteração na referência personalizável.",
|
||||
"headerNum": "#",
|
||||
"headerTool": "Ferramenta",
|
||||
"headerWhat": "O que ele faz",
|
||||
"headerCategory": "Categoria"
|
||||
},
|
||||
"optimizations": [
|
||||
{
|
||||
"tool": "Repositórios APT + atualização completa",
|
||||
"what": "Desativa as fontes Enterprise pve-enterprise.sources e ceph.sources, cria uma fonte no-subscription para o nome de código Debian do host e executa apt update && apt full-upgrade -y (comando oficial de atualização Proxmox).",
|
||||
"category": "Configurações básicas",
|
||||
"categorySlug": "basic-settings"
|
||||
},
|
||||
{
|
||||
"tool": "Remoção de banner de assinatura",
|
||||
"what": "Aplica patches na interface web para ocultar o banner 'Sem assinatura válida'. Pede confirmação antes de aplicar; reversível de Desinstalar Otimizações.",
|
||||
"category": "Personalização",
|
||||
"categorySlug": "customization"
|
||||
},
|
||||
{
|
||||
"tool": "Forçar IPv4",
|
||||
"what": "Escreve /etc/apt/apt.conf.d/99-force-ipv4 para o apt usar apenas IPv4, contornando ligações IPv6 instáveis aos espelhos.",
|
||||
"category": "Rede",
|
||||
"categorySlug": "network"
|
||||
},
|
||||
{
|
||||
"tool": "Ignorar pacotes de idioma",
|
||||
"what": "Escreve /etc/apt/apt.conf.d/99-disable-translations para deixar de transferir índices de descrições traduzidas de pacotes, reduzindo os dados das atualizações apt.",
|
||||
"category": "Configurações básicas",
|
||||
"categorySlug": "basic-settings"
|
||||
},
|
||||
{
|
||||
"tool": "Aumentar os limites do sistema",
|
||||
"what": "Aumenta as monitorizações inotify, os limites nofile/nproc, os limites do chaveiro do kernel e fs.file-max através de sysctl.d, limits.d, pam e systemd, para hosts com muitos contentores.",
|
||||
"category": "Sistema",
|
||||
"categorySlug": "system"
|
||||
},
|
||||
{
|
||||
"tool": "Ajuste de memória",
|
||||
"what": "Define vm.swappiness=10, proporções equilibradas de páginas modificadas ainda não gravadas, vm.max_map_count=262144 e compactação proativa quando suportada. A política de sobrealocação de memória do kernel mantém a predefinição Proxmox.",
|
||||
"category": "Sistema",
|
||||
"categorySlug": "system"
|
||||
},
|
||||
{
|
||||
"tool": "Comportamento de pânico no Kernel",
|
||||
"what": "Configura o host para reiniciar 10 segundos após um pânico / oops / hardlockup em vez de congelar indefinidamente.",
|
||||
"category": "Sistema",
|
||||
"categorySlug": "system"
|
||||
},
|
||||
{
|
||||
"tool": "Ajuste de pilha de rede",
|
||||
"what": "Dimensionamento dos buffers TCP, reforço IPv4 (redirecionamentos desligados, rp_filter=2, registo martian desligado), portas locais 1024-65535, deteção MTU TCP, RFC 1337 e script /usr/local/sbin/proxmenux-fwbr-tune ligado a uma unidade systemd de execução única e regra udev. Assim, rp_filter=0 / log_martians=0 são reaplicados às interfaces fwbr*/fwln*/fwpr*/tap* sempre que Proxmox as recria ao iniciar/parar VMs, reiniciar ou migrar em funcionamento.",
|
||||
"category": "Rede",
|
||||
"categorySlug": "network"
|
||||
},
|
||||
{
|
||||
"tool": "Personalização de bashrc (root)",
|
||||
"what": "PS1 colorido, aliases comuns (l/la/ll/ls/grep), histórico com datas e horas e carregamento de bash-completion, num bloco delimitado PMX_CORE_BASHRC fácil de remover.",
|
||||
"category": "Personalização",
|
||||
"categorySlug": "customization"
|
||||
},
|
||||
{
|
||||
"tool": "Log2RAM (adaptado a SSD, automático)",
|
||||
"what": "Reduz o desgaste SSD/NVMe movendo /var/log para um ramdisk tmpfs com sincronização periódica para disco. Instalação a partir do projeto original quando o disco raiz é SSD ou NVMe. Dimensiona pela RAM do host (128M / 256M / 512M), agenda sincronização periódica e proteção automática que limpa journals antigos aos 80% e trunca registos muito ativos aos 92% antes de gravar. Ajusta limites journald ao ramdisk. Detalhes em <link>Log2RAM</link>.",
|
||||
"category": "Armazenamento",
|
||||
"categorySlug": "storage"
|
||||
},
|
||||
{
|
||||
"tool": "Autotrim ZFS (apenas SSD)",
|
||||
"what": "Ativa zpool autotrim=on em cada pool ZFS cujos vdevs sejam todos SSD/NVMe com TRIM (verifica /sys/block/[dev]/queue/rotational e discard_granularity). Ignora automaticamente pools com HDDs. Só regista para desinstalação os pools realmente alterados pelo ProxMenux; autotrim ativado manualmente é preservado.",
|
||||
"category": "Armazenamento",
|
||||
"categorySlug": "storage"
|
||||
},
|
||||
{
|
||||
"tool": "Limites de tamanho do journald",
|
||||
"what": "Força armazenamento persistente, limita SystemMaxUse=64M / RuntimeMaxUse=60M e ativa compressão e registos de nível info necessários ao Monitor. É ignorado se Log2RAM estiver ativo, pois faz o seu próprio ajuste.",
|
||||
"category": "Sistema",
|
||||
"categorySlug": "system"
|
||||
},
|
||||
{
|
||||
"tool": "Ajuste de logrotate",
|
||||
"what": "Define globalmente daily e depois size 10M, retém 7 rotações e ativa compressão e copytruncate. O critério de tamanho posterior prevalece; regras específicas podem substituí-lo. Adequado ao Log2RAM, mas a frequência depende das regras e do temporizador.",
|
||||
"category": "Sistema",
|
||||
"categorySlug": "system"
|
||||
},
|
||||
{
|
||||
"tool": "Nomes de interface persistentes",
|
||||
"what": "Escreve um ficheiro <code>/etc/systemd/network/10-proxmenux-<iface>.link</code> por placa física, com cabeçalho «Managed by ProxMenux», associando o MAC ao nome atual. Os nomes <code>eth0</code> / <code>enp…</code> ficam estáveis após reinícios e adição de placas.",
|
||||
"category": "Rede",
|
||||
"categorySlug": "network"
|
||||
}
|
||||
],
|
||||
"hardwareTitle": "Predefinições adaptadas ao hardware",
|
||||
"hardwareBody": "O script lê o hardware do host antes de aplicar as configurações. Log2RAM é instalado apenas em discos raiz SSD / NVMe por padrão (ele avisa se a detecção indicar o contrário). O tamanho do ramdisk Log2RAM é escolhido do total RAM (<code>≤ 8 GB → 128M</code>, <code>≤ 16 GB → 256M</code>, <code>'>' 16 GB → 512M</code>). Os limites journald correspondem ao tamanho do disco RAM quando Log2RAM está ativo, para evitar preenchê-lo.",
|
||||
"upgrade": {
|
||||
"heading": "Atualizar listas de pacotes e sistema",
|
||||
"intro": "O primeiro passo do percurso automatizado é atualizar o Proxmox. Para um host em funcionamento dentro da mesma versão principal, o Proxmox recomenda:",
|
||||
"after": "Esta linha é o comando oficial das versões atuais do Proxmox. O script automatizado executa <strong>exatamente</strong> isso e acrescenta a limpeza dos repositórios e as tarefas após atualização recomendadas pelo guia — como o utilitário independente <link>Atualização do sistema Proxmox</link>:",
|
||||
"items": [
|
||||
"Desativa as fontes Enterprise <code>pve-enterprise.sources</code> / <code>ceph.sources</code>, remove ficheiros antigos de repositórios e cria uma fonte no-subscription para o nome de código do host.",
|
||||
"Executa a atualização não-interativa com <code>DEBIAN_FRONTEND=noninteractive</code> e <code>--force-confdef --force-confold</code> — os arquivos de configuração que você personalizou permanecem seus quando o upstream também os alterou.",
|
||||
"Instala pacotes essenciais do Proxmox em falta (<code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>).",
|
||||
"Verificação de sanidade de metadados LVM, <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>, e um prompt de reinicialização apenas se o kernel realmente mudou."
|
||||
],
|
||||
"sameTitle": "Mesmo atualizador, dois pontos de entrada",
|
||||
"sameBody": "O pacote automatizado e o utilitário independente <link>Proxmox System Update</link> compartilham os mesmos scripts subjacentes (<code>update-pve8.sh</code> / <code>update-pve9_2.sh</code>). Use o utilitário por conta própria quando você só quiser atualizar o host sem aplicar o resto das otimizações."
|
||||
},
|
||||
"endResult": {
|
||||
"heading": "Resultado final esperado",
|
||||
"body": "No fim, verá uma mensagem de sucesso com a saída de cada passo e uma pergunta de reinício, necessário para algumas definições do kernel. Pode adiá-lo; as definições aplicam-se no próximo arranque.",
|
||||
"imageAlt": "Programa pós-instalação automatizado — saída final do terminal mostrando cada otimização aplicada com sucesso"
|
||||
},
|
||||
"notDoes": {
|
||||
"heading": "O que este script NÃO faz",
|
||||
"items": [
|
||||
"Deteção automática do fuso horário (comentada no código original; use Personalizável se precisar).",
|
||||
"Desativar portmapper / rpcbind (ver <secLink>Segurança</secLink>).",
|
||||
"Activar IOMMU / VFIO (ver <virtLink>Virtualização</virtLink>).",
|
||||
"Instalar Fastfetch / Figurine / repositório Ceph / HA / correções de CPU AMD (ver <optLink>Opcionais</optLink>).",
|
||||
"Instalar pigz ou ajustar ZFS ARC (ver <perfLink>Desempenho</perfLink> / <storLink>Armazenamento</storLink>)."
|
||||
]
|
||||
},
|
||||
"xshokTitle": "detecção xshok-proxmox",
|
||||
"xshokBody": "Se o host tiver executado anteriormente o script <code>xshok-proxmox</code>, ProxMenux detecta o arquivo marcador e avisa você antes de continuar. Alguns ajustes podem se sobrepor. O script companheiro está desatualizado — se você decidir continuar de qualquer forma, reveja <link>a visão geral</link> para o contexto.",
|
||||
"revert": {
|
||||
"heading": "Revertendo",
|
||||
"body": "Cada ferramenta da tabela fica registada em <code>/usr/local/share/proxmenux/installed_tools.json</code>. Abra <link>Desinstalar otimizações</link> para escolher os itens a reverter. As cópias dos ficheiros modificados ficam junto dos originais com sufixo <code>.bak</code>."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — escolher exactamente o que pretende do mesmo catálogo."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter qualquer subconjunto do que foi aqui aplicado."
|
||||
},
|
||||
{
|
||||
"label": "Comandos úteis do sistema",
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"tail": " — verificar as alterações (uptime, free, journalctl, etc.)."
|
||||
},
|
||||
{
|
||||
"label": "Visão geral da pós-instalação",
|
||||
"href": "/docs/post-install",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,240 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Configurações básicas | Documentação ProxMenux",
|
||||
"description": "Opções de pós-instalação fundamentais: mude para repositórios gratuitos do Proxmox e atualize, detecte automaticamente o fuso horário e habilite o NTP, pule downloads de linguagem APT e escolha os utilitários comuns do sistema 25 para instalar."
|
||||
},
|
||||
"header": {
|
||||
"title": "Pós-instalação: Configurações básicas",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Cinco opções de base para um host Proxmox novo: usar repositórios comunitários sem subscrição, atualizar todo o sistema, configurar automaticamente o fuso horário e NTP, desativar traduções APT para poupar largura de banda e espaço e escolher entre 25 utilitários comuns."
|
||||
},
|
||||
"upgrade": {
|
||||
"heading": "Atualizar listas de pacotes e sistema",
|
||||
"intro": "Reconfigura o APT para usar o repositório <em>pve-no-subscription</em> gratuito (em vez do repositório corporativo que requer uma assinatura) e executa uma atualização completa do sistema. Os passos exatos dependem da versão principal do Proxmox VE: ProxMenux detecta e envia para o script certo.",
|
||||
"headerVersion": "Versão PVE",
|
||||
"headerScript": "Script de seleção por versão",
|
||||
"headerCodename": "Nome de código Debian",
|
||||
"rows": [
|
||||
{
|
||||
"version": "9.x",
|
||||
"script": "update-pve9_2.sh",
|
||||
"codename": "trixie"
|
||||
},
|
||||
{
|
||||
"version": "8.x",
|
||||
"script": "update-pve8.sh",
|
||||
"codename": "bookworm"
|
||||
}
|
||||
],
|
||||
"officialTitle": "A recomendação oficial da Proxmox",
|
||||
"officialBody": "A própria orientação de atualização da Proxmox é executar, nesta ordem exata:",
|
||||
"officialOutro": "É o comando habitual para atualizações dentro da versão principal instalada do Proxmox VE. Verifique os repositórios e as alterações propostas aos pacotes <em>antes</em> de continuar. A mudança de versão principal exige o procedimento oficial de migração.",
|
||||
"doesTitle": "O que a opção ProxMenux faz — verificado contra o script",
|
||||
"doesIntro": "A atualização ProxMenux executa os comandos apt acima e acrescenta passos prévios e posteriores que teria de gerir manualmente. Cada item abaixo corresponde ao script de seleção; consulte <link>Atualização do sistema Proxmox</link> para o detalhe completo.",
|
||||
"doesItems": [
|
||||
"<strong>Primeiro, organizar os repositórios.</strong> Desativa as fontes Enterprise <code>pve-enterprise.sources</code> / <code>ceph.sources</code>, remove ficheiros antigos de versões PVE anteriores e cria um <code>proxmox.sources</code> limpo para o canal gratuito <em>pve-no-subscription</em>, conforme o nome de código Debian: trixie para PVE 9, bookworm para PVE 8.",
|
||||
"<strong>Reescreve os repositórios Debian</strong> com main / updates / security e <code>non-free-firmware</code>, para eliminar o aviso de firmware durante a atualização.",
|
||||
"<strong>Executa a atualização oficial.</strong> <code>apt-get update</code> seguido por <code>apt full-upgrade -y</code> (PVE 9) ou <code>apt dist-upgrade -y</code> (PVE 8), ambos lançados não-interactivamente com <code>--force-confdef --force-confold</code> para que quaisquer arquivos de configuração que você personalizou permaneçam seus.",
|
||||
"<strong>Instala pacotes essenciais</strong> se estiverem faltando: <code>zfsutils-linux</code>, <code>proxmox-backup-restore-image</code>, <code>chrony</code>.",
|
||||
"<strong>Verifica os metadados LVM.</strong> Procura VMs com passthrough de discos que possam ter deixado cabeçalhos antigos de volumes físicos nos discos em bruto. Avisa sobre anomalias sem as corrigir automaticamente.",
|
||||
"<strong>Limpa depois:</strong> <code>apt-get autoremove -y</code> + <code>apt-get autoclean -y</code>, então pede uma reinicialização se o kernel foi atualizado ou <code>/var/run/reboot-required</code> está presente."
|
||||
],
|
||||
"shortTitle": "Em suma",
|
||||
"shortBody": "A opção executa o comando recomendado <code>apt update && apt full-upgrade -y</code>, com a organização dos repositórios e a limpeza final indicadas no guia oficial, e pede reinício no fim. Consulte <link>Atualização do sistema Proxmox</link> para o diagrama completo; o mesmo atualizador está disponível separadamente no menu principal.",
|
||||
"subTitle": "Não aplicar a um host com subscrição",
|
||||
"subBody": "Se você realmente tiver uma assinatura Proxmox e quiser continuar usando os repositórios empresariais, pule esta opção. Executando-o desabilita o repositório corporativo e encaminha o host para o canal comunitário. A atualização do pacote e reescrita do repositório não são apresentadas como reversíveis em Desinstalar Otimizações; restaure sua configuração do repositório deliberadamente se você precisar mudar de canal mais tarde.",
|
||||
"safetyTitle": "Controlo de segurança pós-atualização",
|
||||
"safetyBody": "Após a atualização, o script procura metadados antigos de volumes físicos (PV) nos discos. Pode acontecer quando uma VM com passthrough escreve cabeçalhos LVM num disco em bruto. Se detetar algo suspeito, avisa e sugere <code>pvs</code> para inspeção. Não altera nada automaticamente."
|
||||
},
|
||||
"time": {
|
||||
"heading": "Sincronizar a hora automaticamente",
|
||||
"intro": "Detecta o IP público do servidor via <code>dig myip.opendns.com @resolver1.opendns.com</code>, em seguida, consulta o <code>ipapi.co/'{'ip'}'/timezone</code> para procurar o fuso horário IANA correspondente, e aplica-o com o <code>timedatectl set-timezone</code>. Finalmente permite NTP com <code>timedatectl set-ntp true</code>.",
|
||||
"depTitle": "Depende de dois serviços externos",
|
||||
"depBody": "A pesquisa depende de OpenDNS e <code>ipapi.co</code> serem alcançáveis, e de suas respostas serem corretas. Se você executar o Proxmox atrás de uma VPN ou em um VLAN que sai de uma região diferente, o fuso horário detectado automaticamente pode estar errado. Nesse caso, ignore esta opção e defina o fuso- horário à mão:",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "<link>Desinstalar otimizações</link> repõe o fuso horário em UTC, um valor seguro. NTP continua ativo: o relógio sincroniza e mostra UTC até definir outro fuso manualmente."
|
||||
},
|
||||
"languages": {
|
||||
"heading": "ignorar o download de idiomas adicionais",
|
||||
"intro": "Durante <code>apt update</code>, o APT pode transferir descrições de pacotes traduzidas além dos metadados principais. A opção desativa-as para poupar largura de banda e espaço. Antes, o ProxMenux <strong>confirma que as definições regionais do host foram geradas</strong>: lê <code>/etc/default/locale</code> ou <code>/etc/environment</code>, acrescenta a <code>/etc/locale.gen</code> se faltar e executa <code>locale-gen</code>. Assim mantém as definições regionais da shell.",
|
||||
"writtenTitle": "O que é escrito",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "Excluindo <code>/etc/apt/apt.conf.d/99-disable-translations</code> (quer manualmente ou a partir do menu Desinstalar) restaura o comportamento padrão e APT baixa arquivos de idioma novamente."
|
||||
},
|
||||
"utilities": {
|
||||
"heading": "Instale utilitários comuns do sistema",
|
||||
"intro": "Abre uma lista de <strong>25 utilitários selecionados</strong> por grupos. Escolha e confirme; o ProxMenux instala-os pelo <code>apt</code>, verifica o resultado e mostra um resumo final.",
|
||||
"imageAlt": "Seletor de utilitários ProxMenux: Espaço para selecionar, Enter para confirmar",
|
||||
"reuseTitle": "A mesma lista é reutilizada em outro lugar",
|
||||
"reuseBody": "O catálogo dos 25 utilitários tem uma única definição: <code>PROXMENUX_UTILS</code> em <code>scripts/global/utils-install-functions.sh</code>. O menu <em>Utilitários e ferramentas → Utilitários do sistema</em> oferece a mesma lista para instalar mais tarde sem repetir a pós-instalação.",
|
||||
"listTitle": "O que está na lista",
|
||||
"groups": [
|
||||
{
|
||||
"group": "Monitores de sistemas",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "htop",
|
||||
"desc": "Visualizador interativo de processos"
|
||||
},
|
||||
{
|
||||
"pkg": "btop",
|
||||
"desc": "Monitor moderno de recursos (CPU, RAM, discos, rede, processos)"
|
||||
},
|
||||
{
|
||||
"pkg": "s-tui",
|
||||
"desc": "Interface de terminal para testes de esforço e monitorização da CPU"
|
||||
},
|
||||
{
|
||||
"pkg": "iftop",
|
||||
"desc": "Utilização de largura de banda ao vivo por ligação"
|
||||
},
|
||||
{
|
||||
"pkg": "iotop",
|
||||
"desc": "I/O do disco por processo"
|
||||
},
|
||||
{
|
||||
"pkg": "iptraf-ng",
|
||||
"desc": "Monitor Interativo IP LAN"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Rede",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "iperf3",
|
||||
"desc": "Medir largura de banda máxima alcançável entre máquinas"
|
||||
},
|
||||
{
|
||||
"pkg": "net-tools",
|
||||
"desc": "Ferramentas antigas (ifconfig, netstat, route). Ainda úteis para verificações rápidas"
|
||||
},
|
||||
{
|
||||
"pkg": "ipset",
|
||||
"desc": "Gerencie grandes conjuntos de IP no kernel — úteis com regras iptables/nftables."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Transferências e arquivos",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "axel",
|
||||
"desc": "Acelerador de transferência paralelo leve"
|
||||
},
|
||||
{
|
||||
"pkg": "aria2",
|
||||
"desc": "Downloader multi-fonte / multi-protocolo (HTTP, FTP, BitTorrent, Metalink)"
|
||||
},
|
||||
{
|
||||
"pkg": "unzip",
|
||||
"desc": "Extrair arquivos ZIP"
|
||||
},
|
||||
{
|
||||
"pkg": "zip",
|
||||
"desc": "Criar arquivos ZIP"
|
||||
},
|
||||
{
|
||||
"pkg": "cabextract",
|
||||
"desc": "Extrair arquivos Microsoft CAB (útil com ISOs do Windows)"
|
||||
},
|
||||
{
|
||||
"pkg": "wimtools",
|
||||
"desc": "Manipular imagens WIM do Windows (extrair, dividir, montar, aplicar)"
|
||||
},
|
||||
{
|
||||
"pkg": "genisoimage",
|
||||
"desc": "Compila imagens ISO 9660 de uma árvore de diretórios"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Texto e ficheiros",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "dos2unix",
|
||||
"desc": "Converter final de linha CRLF (Windows) para LF (Unix)"
|
||||
},
|
||||
{
|
||||
"pkg": "grc",
|
||||
"desc": "Colorização genérica: aplica realce de sintaxe às saídas de ping, traceroute, dig, tail e outros comandos"
|
||||
},
|
||||
{
|
||||
"pkg": "plocate",
|
||||
"desc": "Pesquisa rápida de arquivos (indexado). Executar `updatedb` após instalar para construir o índice."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Remoto e sessões",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "sshpass",
|
||||
"desc": "Autenticação de senha SSH não interativa — útil para scripts, não para uso diário"
|
||||
},
|
||||
{
|
||||
"pkg": "tmux",
|
||||
"desc": "Multiplexador de terminal — desacoplar sessões, dividir painéis, sobreviver a desconexão"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Hardware e baixo nível",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "msr-tools",
|
||||
"desc": "Ler/escrever registos específicos do modelo de CPU (rdmsr, wrmsr)"
|
||||
},
|
||||
{
|
||||
"pkg": "intel-gpu-tools",
|
||||
"desc": "Utilitários de diagnóstico Intel GPU incluindo `intel_gpu_top`"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"group": "Virtualização",
|
||||
"items": [
|
||||
{
|
||||
"pkg": "libguestfs-tools",
|
||||
"desc": "Inspecionar e modificar imagens de disco VM (virt-ls, virt-cat, guestmount...)"
|
||||
},
|
||||
{
|
||||
"pkg": "chntpw",
|
||||
"desc": "Editar Windows SAM — útil para recuperação de senha em Windows VMs você herda"
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"actionTitle": "Alguns deles em acção",
|
||||
"noBulkTitle": "Apenas os utilitários instalados pelo ProxMenux são removidos",
|
||||
"noBulkBody": "ProxMenux registra apenas os pacotes utilitários selecionados que ainda não estavam instalados antes desta ação. Desinstalar Otimizações pode purgar esses pacotes mais tarde, enquanto utilitários que já estavam presentes no host são deixados intocados. A atualização geral do sistema APT não é intencionalmente rastreada como reversível porque os pacotes atualizados não têm retorno atômico seguro."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Atualização do sistema Proxmox",
|
||||
"href": "/docs/utils/system-update",
|
||||
"tail": " — reexecuta o ciclo apt update + dist-upgrade a pedido."
|
||||
},
|
||||
{
|
||||
"label": "Instalador de utilitários de sistema",
|
||||
"href": "/docs/utils/system-utils",
|
||||
"tail": " — instalar (ou reinstalar) utilitários individualmente após a pós-instalação."
|
||||
},
|
||||
{
|
||||
"label": "Comandos de atualizações e pacotes",
|
||||
"href": "/docs/help-info/update-commands",
|
||||
"tail": " — Referência apt para a shell."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Script pós-instalação personalizável | Documentação ProxMenux",
|
||||
"description": "Escolha exatamente que otimizações aplicar a um host Proxmox VE com ProxMenux. 10 categorias, cerca de 35 ferramentas e uma interface com caixas de seleção. Inclui tudo do script Automatizado, mais opções de ativação explícita (IOMMU, Fastfetch, Figurine, Ceph, HA, correções AMD…).",
|
||||
"ogTitle": "Script pós-instalação personalizável | Documentação ProxMenux",
|
||||
"ogDescription": "10 categorias, cerca de 35 otimizações individuais. Escolha exatamente o que pretende num host Proxmox VE. As alterações reversíveis são registadas."
|
||||
},
|
||||
"header": {
|
||||
"title": "Script pós-instalação personalizável",
|
||||
"description": "Escolha exatamente que otimizações aplicar a um host Proxmox VE. O ProxMenux agrupa cerca de 35 ferramentas em 10 categorias numa única janela com caixas de seleção. O mesmo motor de Automatizado, com controlo total sobre o que é aplicado.",
|
||||
"section": "Pós-instalação · Personalizável"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Quando escolher Personalizável",
|
||||
"body": "Escolha esta opção se já souber os ajustes que quer ou não quer no host. Uma lista com caixas agrupadas por categoria permite selecionar, desmarcar e combinar otimizações. Pode voltar a aplicá-las mais tarde; as alterações reversíveis são registadas para <link>Desinstalar otimizações</link>. As atualizações de pacotes não são apresentadas como reversíveis."
|
||||
},
|
||||
"compare": {
|
||||
"heading": "Comparação com Automatizado",
|
||||
"body": "Personalizável inclui todo o <link>script Automatizado</link>: as mesmas 14 otimizações de base e várias opções deliberadamente omitidas por Automatizado, úteis em hardware específico (correções AMD), alojamento específico (OVH RTM) ou cargas particulares (IOMMU/VFIO, repositório Ceph, alta disponibilidade, Fastfetch, Figurine, ajuste do ARC ZFS, pigz, instantâneos ZFS automáticos, limites de velocidade vzdump, Open vSwitch, TCP BBR…)."
|
||||
},
|
||||
"categoriesSection": {
|
||||
"heading": "As 10 categorias",
|
||||
"body": "O script Personalizável agrupa as otimizações em 10 categorias numa única janela com caixas de seleção. Cada categoria tem a sua página de documentação: abra um cartão para consultar a justificação, os valores predefinidos e as verificações de cada opção."
|
||||
},
|
||||
"categories": [
|
||||
{
|
||||
"name": "Configurações básicas",
|
||||
"description": "Limpa as fontes APT, executa a atualização oficial Proxmox e define o fuso horário, as definições regionais e utilitários comuns. A base de todas as outras categorias."
|
||||
},
|
||||
{
|
||||
"name": "Sistema",
|
||||
"description": "Ajusta os registos e os limites do kernel para um host com muitas VMs e contentores. Abrange journald, logrotate, sysctl (memória, limites de ficheiros), comportamento em caso de kernel panic e reinícios rápidos."
|
||||
},
|
||||
{
|
||||
"name": "Virtualização",
|
||||
"description": "Prepara o host para virtualização avançada. Instala o agente convidado adequado quando o próprio Proxmox corre numa VM suportada e ativa IOMMU/VFIO para passthrough PCI de GPUs, controladores e TPUs."
|
||||
},
|
||||
{
|
||||
"name": "Rede",
|
||||
"description": "Proteja e ajuste a pilha de rede do host. Força o APT sobre IPv4, aplica proteção sysctl + TCP ajuste de buffer, oferece Open vSwitch, TCP BBR + TCP Fast Open e fixa nomes de interface persistentes por MAC."
|
||||
},
|
||||
{
|
||||
"name": "Armazenamento",
|
||||
"description": "Configure os subsistemas comuns de armazenamento do Proxmox: ZFS Dimensionamento do ARC, ZFS auto-snapshot, ZFS Autotrim para SSD/NVMe pools, e vzdump limites de velocidade para evitar saturar o disco durante backups."
|
||||
},
|
||||
{
|
||||
"name": "Segurança",
|
||||
"description": "Reduz a superfície de ataque exposta por predefinição. Desativa os serviços RPC portmapper/rpcbind de que o Proxmox não precisa mas que deixa à escuta."
|
||||
},
|
||||
{
|
||||
"name": "Personalização",
|
||||
"description": "Altera a aparência e a experiência da shell do host: cores e aliases no bashrc, faixa MOTD e remoção do aviso de subscrição na interface web."
|
||||
},
|
||||
{
|
||||
"name": "Monitoramento",
|
||||
"description": "Integra o host com OVH Real-Time Monitoring. Só instala RTM se o ProxMenux detetar um servidor OVH; nos outros hosts não faz alterações."
|
||||
},
|
||||
{
|
||||
"name": "Desempenho",
|
||||
"description": "Acelerar as operações de compressão (backups, transferências) substituindo o gzip por seu equivalente paralelo pigz."
|
||||
},
|
||||
{
|
||||
"name": "Opcional",
|
||||
"description": "Opções especializadas de que nem todos os hosts precisam: correções CPU AMD, faixa Fastfetch, nome 3D com Figurine, atualização do índice PVE Appliance Manager, repositório Ceph, serviços de alta disponibilidade, Log2RAM para reduzir o desgaste dos SSD e perfil swap ZRAM."
|
||||
}
|
||||
],
|
||||
"mixTip": {
|
||||
"title": "Misturar automatizado e personalizável",
|
||||
"body": "Um uso comum: execute primeiro <strong>Automatizado</strong> para estabelecer uma base sensata, abra depois <strong>Personalizável</strong> e escolha apenas as opções úteis, como IOMMU para passthrough de GPU. As alterações são registadas separadamente; Desinstalar mostra tudo o que foi aplicado, independentemente da opção usada."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Pós-instalação automatizada",
|
||||
"href": "/docs/post-install/automated",
|
||||
"tail": " — valores predefinidos sensatos aplicados sem perguntas."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter de forma limpa as opções selecionadas."
|
||||
},
|
||||
{
|
||||
"label": "Configurações básicas",
|
||||
"href": "/docs/post-install/basic-settings",
|
||||
"tail": " — repositórios, hora, idioma e utilitários."
|
||||
},
|
||||
{
|
||||
"label": "Virtualização",
|
||||
"href": "/docs/post-install/virtualization",
|
||||
"tail": " — IOMMU + VFIO para passagem."
|
||||
},
|
||||
{
|
||||
"label": "Segurança",
|
||||
"href": "/docs/post-install/security",
|
||||
"tailRich": " · <storageLink>Armazenamento</storageLink> · <networkLink>Rede</networkLink> · <customLink>Personalização</customLink> — outras categorias."
|
||||
},
|
||||
{
|
||||
"label": "Visão geral pós-instalação",
|
||||
"href": "/docs/post-install",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Personalização | Documentação ProxMenux",
|
||||
"description": "Opções de personalização no script pós-instalação personalizável do ProxMenux: prompt bash colorido com aliases úteis, faixa ProxMenux no MOTD e remoção do aviso de subscrição da interface web Proxmox."
|
||||
},
|
||||
"header": {
|
||||
"title": "Após a instalação: personalização",
|
||||
"description": "Ajustes visuais e de utilização do host Proxmox. Melhoram a shell e ocultam o aviso de subscrição na interface web. Bashrc, MOTD e a faixa de subscrição são registados e reversíveis pelo menu Desinstalar.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Três opções pequenas e independentes: um <strong>prompt bash colorido com aliases</strong> para a shell root, uma <strong>faixa MOTD</strong> de uma linha no acesso SSH e remoção da <strong>janela «Sem subscrição válida»</strong> apresentada a cada acesso à interface web Proxmox."
|
||||
},
|
||||
"bashrc": {
|
||||
"heading": "Personalizar bashrc",
|
||||
"intro": "Insere em <code>/root/.bashrc</code> um bloco com prompt colorido, histórico com data e hora, aliases comuns de <code>ls</code> / <code>grep</code> e um <code>source</code> para o preenchimento automático bash. Torna o trabalho por SSH mais agradável e identifica claramente o host quando tem muitos separadores abertos.",
|
||||
"writesTitle": "O que o ProxMenux adiciona ao .bashrc",
|
||||
"writesOutro": "O bloco é delimitado pelos marcadores <code>PMX_CORE_BASHRC</code>. Voltar a executar o script substitui o bloco anterior sem o duplicar. O <code>.bashrc</code> original é guardado uma vez em <code>/root/.bashrc.bak</code> e acrescenta-se a linha <code>source /root/.bashrc</code> a <code>/root/.bash_profile</code> para aplicar o prompt também nas shells de login, por exemplo após <code>su -</code>.",
|
||||
"rootTitle": "Aplica-se apenas ao root",
|
||||
"rootBody": "A personalização visa o shell da conta root. Outros usuários que você cria no host mantêm seus próprios padrões. Se você administrar o Proxmox exclusivamente na interface web e nunca usar o shell, esta opção é estética pura e você pode pular."
|
||||
},
|
||||
"motd": {
|
||||
"heading": "configurar banner MOTD personalizado",
|
||||
"intro": "Acrescenta <em>\"This system is optimised by: ProxMenux\"</em> ao início de <code>/etc/motd</code>, a mensagem após um acesso SSH bem-sucedido, acima do prompt e antes dos scripts <code>update-motd</code>. Inofensivo e apenas informativo: confirma visualmente que o ProxMenux foi aplicado no host.",
|
||||
"writesTitle": "O que o ProxMenux escreve",
|
||||
"writesOutro": "Em primeiro lugar, ProxMenux registra se <code>/etc/motd</code> existia e armazena seu conteúdo original sob <code>/usr/local/share/proxmenux</code>. A operação é idempotente: se a linha do marcador já está presente, nada é adicionado. Instalações antigas com <code>/etc/motd.bak</code> existentes são migradas para o mesmo estado reversível."
|
||||
},
|
||||
"banner": {
|
||||
"heading": "Remover banner de assinatura",
|
||||
"intro": "Remove o <em>\"Você não tem uma assinatura válida para este servidor\"</em> modal que aparece toda vez que alguém entra na interface web do Proxmox sem uma assinatura corporativa. O patch tem conhecimento de versão: diferentes versões principais do Proxmox têm diferentes pacotes de UI, então o ProxMenux envia para o script certo.",
|
||||
"versionTitle": "Escolha do script conforme a versão",
|
||||
"versionItems": [
|
||||
"<strong>PVE 9.x</strong> → executa <code>remove-banner-pve-v3.sh</code>, que altera <code>proxmoxlib.js</code> para desktop e a nova interface móvel baseada em Yew.",
|
||||
"<strong>PVE 8.x</strong> → executa <code>remove-banner-pve8.sh</code> (somente desktop)."
|
||||
],
|
||||
"versionOutro": "Antes do patch, o ProxMenux faz backup dos arquivos originais JS/template para <code>/usr/local/share/proxmenux/backups/</code> com um timestamp. O fluxo de desinstalação usa esses backups para restaurar os arquivos originais, e cai de volta para reinstalar os pacotes de UI Proxmox se o backup estiver faltando ou corrompido.",
|
||||
"breakTitle": "Pode quebrar após as atualizações do Proxmox",
|
||||
"breakBody": "As atualizações da interface Proxmox substituem regularmente <code>proxmoxlib.js</code> e podem fazer regressar o aviso. Pode voltar a aplicar a opção para alterar o ficheiro ou aceitar o aviso até lá. O ProxMenux também instala um hook APT que reaplica a alteração após atualizações de pacotes; consulte <link>Desinstalar otimizações</link> para o remover.",
|
||||
"legalTitle": "Nota legal (sempre vale a pena repetir)",
|
||||
"legalBody": "Esta opção só oculta o aviso da interface. <strong>Não</strong> dá suporte Enterprise nem acesso ao repositório Enterprise e não altera a licença do software. O Proxmox VE é distribuído sob GNU AGPLv3. Uma subscrição apoia o projeto e dá acesso ao canal de atualizações Enterprise; escolha o suporte adequado ao seu ambiente."
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Verificação",
|
||||
"intro": "Após a aplicação dos três:",
|
||||
"reversibleTitle": "Todas as três alterações de personalização são monitoradas",
|
||||
"reversibleBody": "<link>Desinstalar otimizações</link> repõe <code>/root/.bashrc</code>, devolve ao MOTD o conteúdo exato anterior ao ProxMenux ou remove o ficheiro se antes não existia e restaura os ficheiros de interface alterados a partir das cópias ou reinstala os pacotes necessários."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Opcional",
|
||||
"href": "/docs/post-install/optional",
|
||||
"tail": " — Fastfetch e Figurine (outras personalizações visuais)."
|
||||
},
|
||||
{
|
||||
"label": "Mostrar informações da versão",
|
||||
"href": "/docs/settings/show-version-information",
|
||||
"tail": " — confirma que as personalizações são seguidas como instaladas."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter bashrc, motd e o aviso de subscrição."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Script pós-instalação Proxmox VE — Automatizado e personalizável | ProxMenux",
|
||||
"description": "Visão geral dos scripts pós-instalação ProxMenux para Proxmox VE. Automatizado aplica valores predefinidos sensatos sem perguntas; Personalizável permite escolher exatamente o que pretende em 10 categorias; Desinstalar otimizações repõe as alterações reversíveis suportadas.",
|
||||
"ogTitle": "Script pós-instalação Proxmox VE — Automatizado e personalizável",
|
||||
"ogDescription": "Aplique otimizações comuns após a instalação do Proxmox VE em 10 categorias, automaticamente ou à escolha, com opções reversíveis.",
|
||||
"twitterTitle": "Script pós-instalação Proxmox VE | ProxMenux",
|
||||
"twitterDescription": "Otimizações pós-instalação automatizadas e personalizáveis para Proxmox VE — com opções reversíveis."
|
||||
},
|
||||
"header": {
|
||||
"title": "Scripts pós-instalação",
|
||||
"description": "Configure um host Proxmox VE recém-instalado com as otimizações pós-instalação do ProxMenux. Aplique automaticamente a configuração de base, escolha opções individuais, atualize funções instaladas ou reponha as alterações reversíveis suportadas. As atualizações de pacotes não são apresentadas como reversíveis.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para que serve este menu",
|
||||
"body": "Após instalar o Proxmox VE, dezenas de pequenas alterações tornam o host mais rápido e fácil de manter: repositórios sem subscrição, limites sensatos para journald, buffers TCP adequados, armazenamento de registos que protege os SSD, melhorias no bashrc e mais. O ProxMenux automatiza-as e acompanha as alterações de configuração reversíveis suportadas."
|
||||
},
|
||||
"openingMenu": {
|
||||
"heading": "Abrir o menu",
|
||||
"body": "No menu principal do ProxMenux, selecione <strong>Configurações pós-instalação Proxmox</strong>. Você verá isto:",
|
||||
"imageAlt": "Menu de Scripts pós-instalação — Automatizado, Personalizável, o condicional Aplicar Atualizações Disponíveis (somente quando as atualizações estão pendentes) e Desinstalar, seguido da seção de scripts comunitários"
|
||||
},
|
||||
"threeWays": {
|
||||
"heading": "Quatro maneiras de aplicar otimizações",
|
||||
"body": "As quatro entradas ProxMenux compartilham o mesmo código subjacente e o mesmo registro de ferramentas instaladas — elas apenas lhe dão diferentes níveis de controle. A entrada <em>Aplicar atualizações disponíveis</em> só mostra quando pelo menos uma otimização instalada tem uma versão mais recente no disco do que o registrado; em um host recém-aplicado ele permanece oculto."
|
||||
},
|
||||
"routes": [
|
||||
{
|
||||
"title": "Automatizado",
|
||||
"description": "Um conjunto curado de 14 otimizações seguras e sempre úteis aplicadas em sequência com zero prompts. Bom padrão para a maioria dos usuários.",
|
||||
"bullets": [
|
||||
"Repositórios sem subscrição + atualização do sistema",
|
||||
"Memória, kernel, ajuste de rede",
|
||||
"Log2RAM (detectado automaticamente em SSD/NVMe)",
|
||||
"Limites de tamanho para journald + logrotate",
|
||||
"Nomes de interface persistentes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Personalizável",
|
||||
"description": "Cerca de 35 otimizações individuais em 10 categorias. Escolhe exatamente quais aplicar. O mesmo motor de Automatizado, com controlo total.",
|
||||
"bullets": [
|
||||
"Interface com caixas de seleção por categoria",
|
||||
"Inclui tudo o que Automatizado faz, mais opções de ativação explícita (IOMMU, Fastfetch, Figurine, Ceph, HA, correções AMD…)",
|
||||
"Executar quantas vezes quiser — as alterações são idempotentes"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Aplicar atualizações disponíveis",
|
||||
"description": "Quando uma otimização pós-instalação (Log2Ram, definições de memória, Logrotate…) tem uma versão no disco mais recente do que a registada no host, esta entrada mostra apenas as que mudaram. Volta a executar a função correspondente e atualiza o registo, sem tocar em mais nada.",
|
||||
"bullets": [
|
||||
"Aceitação por otimização, apenas as que mudaram",
|
||||
"O mesmo seletor disponível no painel do Monitor",
|
||||
"Uma única notificação agrupada quando chegam novas atualizações"
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Desinstalar otimizações",
|
||||
"description": "Alterações reversíveis suportadas são monitoradas em um registro JSON e emparelhadas com uma função de restauração. Ações sem um retorno seguro, como uma atualização completa do pacote, são intencionalmente excluídas.",
|
||||
"bullets": [
|
||||
"Detecta otimizações aplicadas anteriormente automaticamente",
|
||||
"Escolhe a reversão adequada a cada item: repõe a cópia .bak, se existir, elimina o fragmento de configuração sysctl.d se nada precisava de cópia ou reinstala o pacote original com --force-confnew (por exemplo para o aviso de subscrição)",
|
||||
"Pedido de reinício se necessário (VFIO, nomes persistentes, etc.)"
|
||||
]
|
||||
}
|
||||
],
|
||||
"whichTitle": "Qual deve escolher?",
|
||||
"whichBody": "Para uma instalação nova do Proxmox com uma base sensata sem decisões: <autoLink><strong>Automatizado</strong></autoLink>. Se já souber os ajustes que quer ou não quer: <customLink><strong>Personalizável</strong></customLink>. Para atualizar apenas uma otimização já aplicada com versão mais recente no disco: <updatesLink><strong>Aplicar atualizações disponíveis</strong></updatesLink>. Para anular alterações anteriores de forma limpa: <uninstallLink><strong>Desinstalar otimizações</strong></uninstallLink>. Pode combiná-los: comece por Automatizado, adicione opções como Fastfetch ou IOMMU com Personalizável e reverta itens individuais mais tarde.",
|
||||
"mixing": {
|
||||
"heading": "Combinar com outros scripts pós-instalação",
|
||||
"stackTitle": "Não empilhar vários scripts pós-instalação",
|
||||
"stackBody": "Executar vários scripts pós-instalação no mesmo host pode causar arquivos de configuração duplicados, entradas de sysctl conflitantes, ou pior — rede quebrada após reinicialização. Se você já aplicou o <strong>Helper-Scripts Post Install</strong>, algumas otimizações ProxMenux podem se sobrepor ao que ele já configurou. Atenha-se a uma ferramenta pós-instalação por máquina.",
|
||||
"xshokTitle": "xshok-proxmox: desactualizado",
|
||||
"xshokBody": "As versões anteriores do ProxMenux indicavam <a>xshok-proxmox</a> como ferramenta pós-instalação complementar. O projeto está obsoleto e já não é oferecido no ProxMenux. Se uma execução antiga tiver deixado marcadores no host, o ProxMenux continua a detetá-los e avisa. Hoje não é uma ferramenta que deva instalar em conjunto com o ProxMenux."
|
||||
},
|
||||
"community": {
|
||||
"heading": "Scripts da comunidade",
|
||||
"body": "O menu também oferece dois scripts de terceiros do projeto <a>community-scripts</a>: <em>Proxmox VE Post Install</em> e <em>Proxmox VE Microcode</em>. São invólucros que transferem e executam os scripts originais através de <code>wget | bash</code>. Não são mantidos pelo ProxMenux. Consulte <link>Repositórios externos</link> para detalhes e questões de confiança antes de os executar."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Atualização do sistema Proxmox",
|
||||
"href": "/docs/utils/system-update",
|
||||
"tail": " — mantém o host atualizado depois de instalado."
|
||||
},
|
||||
{
|
||||
"label": "Segurança",
|
||||
"href": "/docs/security",
|
||||
"tail": " — Fail2Ban + Lynis além do reforço de segurança pós-instalação."
|
||||
},
|
||||
{
|
||||
"label": "Mostrar informações da versão",
|
||||
"href": "/docs/settings/show-version-information",
|
||||
"tail": " — ver que componentes pós-instalação são rastreados como instalados."
|
||||
},
|
||||
{
|
||||
"label": "Comandos de atualizações e pacotes",
|
||||
"href": "/docs/help-info/update-commands",
|
||||
"tail": " — referência para o apt/pveupgrade."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Monitorização | Documentação ProxMenux",
|
||||
"description": "Opções de monitoramento no script de pós-instalação personalizável ProxMenux. Atualmente uma única opção: instalar OVH Real-Time Monitoring (RTM), que só se ativa se o host for detectado como um servidor OVH."
|
||||
},
|
||||
"header": {
|
||||
"title": "Após a instalação: monitorização",
|
||||
"description": "Opções de monitoramento dentro do script pós-instalação personalizável. Esta categoria é pequena e específica do provedor — instala o agente OVH Real-Time Monitoring em servidores OVH dedicados e não faz nada em nenhum outro lugar.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Âmbito intencionalmente limitado",
|
||||
"body": "A monitorização pós-instalação limita-se a <strong>um agente específico de um fornecedor</strong>. Ferramentas gerais (Prometheus, Grafana, node_exporter) ficam fora deste âmbito, pois exigem decisões de arquitetura — host separado, retenção de dados e destinos de alertas — que não cabem num passo com um clique. O ProxMenux Monitor, incluído no ProxMenux, cobre grande parte dessa função sem agentes externos."
|
||||
},
|
||||
"ovh": {
|
||||
"heading": "Instalar o Monitoramento em Tempo Real OVH (RTM)",
|
||||
"intro": "Se o host Proxmox for um servidor dedicado alugado à <a>OVHcloud</a>, pode ativar o RTM para apresentar telemetria de hardware (temperatura da CPU, estado da fonte de alimentação, SMART dos discos, estado do controlador RAID, etc.) no painel de controlo OVH. É o mesmo agente usado pela OVH na função «Server Monitoring».",
|
||||
"decisionsTitle": "Como ProxMenux decide",
|
||||
"decisionsItems": [
|
||||
"Obtém o IP público do host via <code>curl ipinfo.io/ip</code>.",
|
||||
"Procura o ISP proprietário com uma consulta <code>whois</code> para <code>v4.whois.cymru.com</code>.",
|
||||
"Se o resultado mencionar OVH, transfere <code>last-public-ovh-infra-yak.snap.mirrors.ovh.net/yak/archives/apply.sh</code> e passa-o para <code>bash</code> com o manifesto Puppet do RTM v2.",
|
||||
"Se o resultado <em>não</em> mencionar OVH, nada é instalado. A opção não faz alterações."
|
||||
],
|
||||
"remoteTitle": "Script remoto passado para bash através de um pipe",
|
||||
"remoteBody": "A instalação executa <code>wget -qO - https://…apply.sh | bash</code>. Se o espelho OVH for comprometido, o script corre como root no host. Antes de ativar a opção, pondere a confiança na cadeia de espelhos OVH face ao benefício da monitorização. Para a maioria dos utilizadores domésticos ou fora da OVH, a opção deve ficar desativada.",
|
||||
"noOpTitle": "Só activar se a máquina estiver em OVH",
|
||||
"noOpBody": "A opção não altera servidores fora da OVH, pelo que selecioná-la num Proxmox doméstico não causa problemas. Num host não OVH, o script mostra <em>«Não é um servidor OVH, a instalação RTM será ignorada»</em> e termina sem instalar pacotes.",
|
||||
"runsTitle": "O que o ProxMenux executa",
|
||||
"verifyTitle": "Verificação",
|
||||
"verifyBody": "Em um host OVH real, após uma reinicialização você deve ver o painel <a>RTM</a> em seu OVH Manager povoado com dados ao vivo para o host. No lado Proxmox, o coletor RTM é um serviço systemd — verifique-o diretamente:",
|
||||
"troubleTitle": "Resolução de Problemas",
|
||||
"revertTitle": "Remover RTM pelo menu Desinstalar",
|
||||
"revertBody": "Quando RTM está registado como instalado, Desinstalar otimizações oferece uma entrada OVH Real-Time Monitoring. Executa <code>apt-get purge -y ''ovh-rtm*'' ''rtm'' ''rtm-*''</code>, remove /etc/rtm e marca RTM como desinstalado. Os artefactos Puppet podem precisar de limpeza manual; reveja os manifestos específicos do RTM em <code>/etc/puppet/</code>. Num host fora da OVH não foram instalados pacotes RTM, pelo que nada há a remover."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "ProxMenux Monitor",
|
||||
"href": "/docs/settings/proxmenux-monitor",
|
||||
"tail": " — painel web local para o host (funciona em qualquer fornecedor, não apenas OVH)."
|
||||
},
|
||||
{
|
||||
"label": "Comandos úteis do sistema",
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"tail": " — referência de monitorização do host local."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Rede | Documentação ProxMenux",
|
||||
"description": "Opções de rede do script de pós-instalação personalizável ProxMenux: forçar APT por IPv4, aplicar um perfil sysctl selecionado, instalar Open vSwitch, ativar TCP BBR + Fast Open e associar os nomes das interfaces aos seus endereços MAC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Pós-instalação: Rede",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Cinco opções de rede independentes. Duas são simples (<strong>APT por IPv4</strong>, <strong>instalação do Open vSwitch</strong>), duas ajustam o comportamento TCP (<strong>perfil sysctl de rede</strong>, <strong>BBR + Fast Open</strong>) e uma resolve um problema comum: <strong>fixar os nomes das interfaces</strong> para que uma nova placa de rede ou atualização do BIOS não mude <code>enp3s0</code> para <code>enp4s0</code> e interrompa as pontes."
|
||||
},
|
||||
"ipv4": {
|
||||
"heading": "Forçar o APT a usar IPv4",
|
||||
"intro": "Escreve <code>Acquire::ForceIPv4 \"true\";</code> para <code>/etc/apt/apt.conf.d/99-force-ipv4</code>. APT então se recusa a usar IPv6 para downloads de pacotes, mesmo que o host tenha conectividade IPv6.",
|
||||
"tipTitle": "Quem beneficia",
|
||||
"tipBody": "Útil se a ligação IPv6 for instável, mais lenta que IPv4 ou se o espelho Debian/Proxmox falhar ocasionalmente por IPv6. Não causa problemas em hosts sem IPv6. Numa rede de pilha dupla funcional, torna o comportamento previsível: apt não o surpreende com um tempo limite de IPv6."
|
||||
},
|
||||
"sysctl": {
|
||||
"heading": "Aplicar otimizações de rede",
|
||||
"intro": "Escreve um perfil sysctl selecionado em <code>/etc/sysctl.d/99-network.conf</code>: buffers de sockets do kernel, reforço do ICMP, proteção básica contra falsificação de endereços e tamanhos de buffers TCP adequados a um hipervisor com muitos fluxos simultâneos.",
|
||||
"tunedTitle": "O que é ajustado",
|
||||
"headerArea": "Área",
|
||||
"headerSettings": "Principais definições",
|
||||
"rows": [
|
||||
{
|
||||
"area": "Buffers de sockets do kernel",
|
||||
"settings": "<code>netdev_max_backlog=8192</code>, <code>rmem_max=16M</code>, <code>wmem_max=16M</code>, <code>somaxconn=8192</code>"
|
||||
},
|
||||
{
|
||||
"area": "Endurecimento do ICMP",
|
||||
"settings": "<code>icmp_echo_ignore_broadcasts=1</code>, <code>icmp_ignore_bogus_error_responses=1</code>"
|
||||
},
|
||||
{
|
||||
"area": "Segurança de roteamento",
|
||||
"settings": "<code>accept_redirects=0</code>, <code>accept_source_route=0</code>, <code>secure_redirects=0</code>, <code>send_redirects=0</code>, <code>log_martians=0</code>"
|
||||
},
|
||||
{
|
||||
"area": "Filtro de caminho inverso",
|
||||
"settings": "<code>rp_filter=2</code> (modo solto, ver nota abaixo)"
|
||||
},
|
||||
{
|
||||
"area": "TCP",
|
||||
"settings": "<code>tcp_mtu_probing=1</code>, <code>tcp_rfc1337=1</code>, <code>tcp_sack=1</code>, <code>tcp_rmem=8K/87K/16M</code>, <code>tcp_wmem=8K/64K/16M</code>"
|
||||
},
|
||||
{
|
||||
"area": "Portas",
|
||||
"settings": "<code>ip_local_port_range=1024 65535</code> (conjunto de portas efémeras)"
|
||||
},
|
||||
{
|
||||
"area": "Soquetes Unix",
|
||||
"settings": "<code>net.unix.max_dgram_qlen=4096</code>"
|
||||
}
|
||||
],
|
||||
"sourceOutro": "Ele também adiciona <code>source /etc/network/interfaces.d/*</code> ao <code>/etc/network/interfaces</code> se ainda não estiver presente — prática padrão para que você possa soltar trechos de interface modular sem editar o arquivo principal.",
|
||||
"fwbrTitle": "Ajuste automático de pontes de firewall virtuais",
|
||||
"fwbrBody": "Além do perfil sysctl, o ProxMenux instala o script auxiliar <code>/usr/local/sbin/proxmenux-fwbr-tune</code>, que aplica <code>rp_filter=0</code> e <code>log_martians=0</code> às interfaces <code>fwbr*</code> / <code>fwln*</code> / <code>fwpr*</code> / <code>tap*</code> criadas pelo Proxmox para VMs e contentores. A unidade de execução única <code>proxmenux-fwbr-tune.service</code> chama-o no arranque, e a regra <code>/etc/udev/rules.d/99-zz-proxmenux-fwbr-tune.rules</code> a cada evento <code>net add</code> com esses prefixos. Abrange assim interfaces recriadas ao iniciar/parar VMs, reiniciar e migrar em funcionamento. O script também processa as interfaces já presentes imediatamente após a instalação.",
|
||||
"rpFilterTitle": "Porquê rp_filter=2 (permissivo) em vez de 1 (estrito)",
|
||||
"rpFilterBody": "A filtragem estrita do caminho inverso descarta pacotes cuja origem seria alcançada por uma interface <em>diferente</em>. É uma predefinição adequada a clientes, mas problemática num host Proxmox onde o tráfego das VMs chega frequentemente por uma ponte e sai por um uplink com rotas assimétricas. <code>rp_filter=2</code> (permissivo) só descarta pacotes com origens realmente inalcançáveis pelo encaminhamento. É um compromisso: reduz ligeiramente a deteção de falsificação de IP local para preservar a rede das VMs."
|
||||
},
|
||||
"ovs": {
|
||||
"heading": "Instalar Open vSwitch",
|
||||
"intro": "Instala <code>openvswitch-switch</code> + <code>openvswitch-common</code>. Os pacotes acrescentam OVS como alternativa às pontes Linux predefinidas do Proxmox. A instalação por si só não altera a rede: as pontes <code>vmbrX</code> existentes continuam a funcionar. Ao <em>criar</em> uma nova ponte na interface Proxmox, pode escolher OVS na lista de tipos.",
|
||||
"tipTitle": "Quando a OVS faz sentido",
|
||||
"tipBody": "Considere OVS se precisar de <strong>trunks VLAN com IDs não contíguos</strong>, <strong>LACP com LLDP em modos específicos</strong>, <strong>programação detalhada de fluxos</strong> (OpenFlow) ou interoperabilidade com controladores SDN. Num laboratório doméstico com poucas VLANs e um único uplink LACP, pontes Linux + <code>vmbrX.VID</code> são mais simples e adequadas.",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "OVS fica registado. <link>Desinstalar otimizações</link> executa <code>apt purge</code> em <code>openvswitch-switch</code> e <code>openvswitch-common</code>. Migre as pontes OVS para pontes Linux <em>antes</em> de desinstalar; caso contrário, as VMs nessas pontes perderão a rede no próximo arranque. Equivalente manual:"
|
||||
},
|
||||
"bbr": {
|
||||
"heading": "Ativar TCP BBR + TCP Fast Open",
|
||||
"intro": "Escreve dois ficheiros sysctl e recarrega-os. BBR substitui CUBIC pelo algoritmo de congestionamento da Google baseado em largura de banda, que lida melhor com ligações de alta capacidade e latência ou com perdas. TCP Fast Open (TFO) elimina uma ida e volta nas ligações TCP repetidas enviando dados no SYN.",
|
||||
"verifyTitle": "Verificação",
|
||||
"impactTitle": "O impacto depende da carga de trabalho",
|
||||
"impactBody": "BBR destaca-se em ligações de alta latência ou com perdas (replicação intercontinental, túneis VPN, clientes móveis). Numa LAN entre duas máquinas no mesmo switch, a diferença costuma ficar nas variações de medição. TFO ajuda sobretudo em ligações HTTP curtas e repetidas.",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "BBR/TFO ficam registados. <link>Desinstalar otimizações</link> remove os dois ficheiros sysctl (<code>/etc/sysctl.d/99-kernel-bbr.conf</code> e <code>99-tcp-fastopen.conf</code>) e recarrega a configuração restante. Eliminar um ficheiro não repõe os valores ativos do kernel. As predefinições como <code>cubic</code> e <code>tcp_fastopen=1</code> regressam após reiniciar, salvo se outra configuração as substituir. Equivalente manual:"
|
||||
},
|
||||
"names": {
|
||||
"heading": "Nomes de interfaces persistentes",
|
||||
"intro": "Percorre as placas de rede físicas do host, excluindo loopback, veths Docker, pontes, dispositivos TAP, bonds, Cilium, ZeroTier e WireGuard. Escreve um ficheiro systemd <code>.link</code> que associa o nome atual ao endereço MAC atual. A associação MAC passa a prevalecer sobre a lógica de nomes do kernel.",
|
||||
"whyTitle": "Por que isso importa?",
|
||||
"whyItems": [
|
||||
"Adicionar ou remover dispositivos PCIe pode mudar a numeração do barramento, transformando <code>enp3s0</code> em <code>enp4s0</code>. Se <code>/etc/network/interfaces</code> mencionar o nome antigo, a ponte desaparece ao reiniciar.",
|
||||
"As atualizações de BIOS / firmware às vezes alteram como os dispositivos enumeram, com o mesmo efeito.",
|
||||
"O script escreve ficheiros <code>.link</code> para as placas físicas, incluindo as portas dos bonds, com o MAC indicado pelo sysfs nesse momento; nas portas de um bond pode ser o MAC partilhado do bond, por isso verifique os nomes após reiniciar. Ignora interfaces virtuais, como veths LXC e os próprios dispositivos bond; não corrige condições de corrida nos nomes de placas virtuais <code>hotplug</code>."
|
||||
],
|
||||
"writtenTitle": "O que é escrito",
|
||||
"writtenIntro": "Um ficheiro por NIC físico, em <code>/etc/systemd/network/10-proxmenux-<iface>.link</code>. Cada arquivo começa com o cabeçalho <code># Managed by ProxMenux — do not edit</code> para que ProxMenux possa distinguir seus próprios arquivos de arquivos <code>.link</code> fornecidos pelo usuário ou pacote.",
|
||||
"writtenOutro": "Os ficheiros <code>.link</code> de outros pacotes ou escritos pelo utilizador são preservados; só os que têm o cabeçalho ProxMenux são geridos. Em cada nova execução, a função verifica os seus ficheiros: relê <code>MACAddress=</code> de cada <code>10-proxmenux-*.link</code> e remove os que têm uma MAC ausente de <code>/sys/class/net/</code>. Os ficheiros de versões anteriores no formato <code>10-<iface>.link</code> são migrados automaticamente na primeira execução.",
|
||||
"pveTitle": "PVE 9 vs PVE 8",
|
||||
"pveBody": "O script usa ficheiros systemd <code>.link</code> para os nomes persistentes. No Proxmox VE 9 também recarrega as regras udev após os escrever, para que uma placa já fixada que volte a ser ligada ou detetada aplique a sua regra sem reiniciar. Verifique as interfaces existentes após reiniciar tanto no PVE 8 como no PVE 9. Isto não substitui <code>ifupdown2</code> no host. Em ambos os casos, o script assinala a necessidade de reinício na pós-instalação personalizável.",
|
||||
"reviewTitle": "Reveja primeiro o /etc/network/interfaces existente",
|
||||
"reviewBody": "Se a configuração antiga em <code>/etc/network/interfaces</code> usa nomes de placas gerados pelo kernel, fixar os nomes <em>atuais</em> é o resultado pretendido. Se já adaptou manualmente a configuração a nomes específicos, confirme antes de reiniciar que os nomes fixados correspondem ao ficheiro interfaces.",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "<link>Desinstalar otimizações</link> elimina apenas os ficheiros <code>10-proxmenux-*.link</code> com cabeçalho ProxMenux de <code>/etc/systemd/network/</code>. Preserva todos os ficheiros <code>.link</code> do utilizador ou de outros pacotes. No próximo reinício regressa o comportamento de nomes predefinido do systemd."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Gerenciamento de rede",
|
||||
"href": "/docs/network",
|
||||
"tail": " — diagnóstico, análise da ponte, reparação guiada."
|
||||
},
|
||||
{
|
||||
"label": "Nomes de interface persistentes",
|
||||
"href": "/docs/network/persistent-names",
|
||||
"tail": " — a mesma função num menu próprio para mais tarde; use uma das opções, não ambas."
|
||||
},
|
||||
{
|
||||
"label": "Referência de comandos de rede",
|
||||
"href": "/docs/help-info/network-commands",
|
||||
"tail": " — ip, ss, ethtool, sysctl."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverte qualquer uma destas alterações de rede."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação ProxMenux: Configurações opcionais",
|
||||
"description": "Guia de configurações opcionais no script pós-instalação ProxMenux para recursos e otimizações adicionais Proxmox VE.",
|
||||
"ogTitle": "Pós-instalação ProxMenux: Configurações opcionais",
|
||||
"ogDescription": "Guia de configurações opcionais no script pós-instalação ProxMenux para recursos e otimizações adicionais Proxmox VE.",
|
||||
"ogImageAlt": "Configurações opcionais da pós-instalação ProxMenux"
|
||||
},
|
||||
"title": "Configurações Opcionais",
|
||||
"intro": "A categoria <strong>Configurações opcionais</strong> oferece funções e otimizações adicionais para Proxmox VE. Não são essenciais, mas podem melhorar as capacidades do sistema em situações específicas.",
|
||||
"available": "Funções opcionais disponíveis",
|
||||
"stepLabel": "Etapa",
|
||||
"ceph": {
|
||||
"title": "Adicionar suporte mais recente ao Ceph",
|
||||
"intro": "Esta opção instala o mais recente suporte ao sistema de armazenamento Ceph para Proxmox VE. O Ceph é um sistema de armazenamento distribuído que oferece alto desempenho, confiabilidade e escalabilidade.",
|
||||
"doesIntro": "O que faz:",
|
||||
"doesItems": [
|
||||
"Adiciona o repositório Ceph ao seu sistema",
|
||||
"Atualiza as listas de pacotes",
|
||||
"Instala pacotes Ceph usando o comando 'pveceph install'",
|
||||
"Verifica a instalação"
|
||||
],
|
||||
"howUse": "Como usar: Após a instalação, você pode configurar e gerenciar o armazenamento Ceph usando a interface web Proxmox VE ou ferramentas de linha de comando.",
|
||||
"automates": "Este ajuste automatiza os seguintes comandos:"
|
||||
},
|
||||
"amd": {
|
||||
"title": "Aplicar correções AMD CPU",
|
||||
"intro": "Esta opção aplica correções específicas para CPUs AMD EPYC e Ryzen para melhorar a estabilidade e compatibilidade.",
|
||||
"doesIntro": "O que faz:",
|
||||
"doesItems": [
|
||||
"Detecta se está presente um AMD EPYC ou Ryzen CPU",
|
||||
"Aplica o parâmetro 'idle=nomwait' para evitar falhas aleatórias (via /etc/kernel/cmdline em máquinas systemd-boot, ou /etc/default/grub em máquinas GRUB — com um .bak do original)",
|
||||
"Configura o KVM para ignorar certos MSRs (registos específicos do modelo) e melhorar a compatibilidade com máquinas virtuais Windows."
|
||||
],
|
||||
"howUse": "Como usar: Estas correções são aplicadas automaticamente e requerem uma reinicialização do sistema para fazer efeito.",
|
||||
"automates": "Este ajuste automatiza os seguintes comandos:"
|
||||
},
|
||||
"ha": {
|
||||
"title": "Habilitar serviços de alta disponibilidade",
|
||||
"intro": "Esta opção permite serviços de Alta Disponibilidade (HA) em Proxmox VE, permitindo failover automático de VMs e contêineres em caso de falha de nó.",
|
||||
"doesIntro": "O que faz:",
|
||||
"doesItems": [
|
||||
"Activa e inicia o serviço pve-ha-lrm (Local Resource Manager)",
|
||||
"Activa e inicia o serviço pve-ha-crm (Cluster Resource Manager)",
|
||||
"Activa e inicia o serviço corosync para comunicação de clusters"
|
||||
],
|
||||
"howUse": "Como usar: Depois de ativar esses serviços, você pode configurar grupos e recursos HA na interface web Proxmox VE.",
|
||||
"automates": "Este ajuste automatiza os seguintes comandos:"
|
||||
},
|
||||
"pveam": {
|
||||
"title": "Atualizar Proxmox VE Appliance Manager",
|
||||
"intro": "Atualiza o índice local dos modelos de contentores apresentado pelo <code>pveam</code> no Proxmox, para que a lista de modelos de software esteja atualizada ao criar o próximo LXC.",
|
||||
"doesIntro": "O que faz:",
|
||||
"doesItems": [
|
||||
"Executa <code>pveam update</code> nos espelhos Proxmox para obter o catálogo atual de modelos de software",
|
||||
"Preenche a lista de modelos de software apresentada ao criar um contentor"
|
||||
],
|
||||
"howUse": "Utilização: execute se a lista de modelos na interface parecer desatualizada ou após mudar de espelho. Transfere apenas o índice do catálogo, não os próprios modelos.",
|
||||
"automates": "Este ajuste automatiza o seguinte comando:"
|
||||
},
|
||||
"fastfetch": {
|
||||
"title": "Instalar e Configurar o Fastfetch",
|
||||
"intro": "Esta opção instala silenciosamente e configura Fastfetch, uma ferramenta de informação do sistema que exibe especificações do sistema e um logotipo personalizado no login.",
|
||||
"doesLabel": "O que faz:",
|
||||
"doesItems": [
|
||||
"Silenciosamente baixa e instala a versão mais recente do Fastfetch",
|
||||
"Permite-lhe escolher um logotipo personalizado (<strong>ProxMenux, Proxmox, Helper-Scripts, Home-Labs-Club, Proxmology</strong>, ou um personalizado)",
|
||||
"Configura Fastfetch para exibir <em>\"Sistema otimizado por ProxMenux\"</em>",
|
||||
"Configura o Fastfetch para executar automaticamente no login do console"
|
||||
],
|
||||
"importantLabel": "Importante:",
|
||||
"importantBody": "Se você se conectar ao Proxmox via SSH, você deve selecionar o logotipo <strong>Proxmox</strong> ou criar um personalizado usando <code>jp2a</code> ou <code>img2txt</code>. Os outros logotipos são gerados usando <code>chafa</code> e podem não exibir corretamente em uma sessão padrão SSH.",
|
||||
"customLabel": "Logótipos personalizados:",
|
||||
"customBody1": "Para usar um logotipo personalizado, coloque seu arquivo de texto de arte ASCII em: <code>/usr/local/share/fastfetch/logos/</code>",
|
||||
"customBody2": "Você pode criar logotipos personalizados usando ferramentas como <code>chafa</code>, <code>jp2a</code>, ou <code>img2txt</code>.",
|
||||
"customBody3": "Para melhores resultados:",
|
||||
"customItems": [
|
||||
"Limite a altura do logótipo a 35 linhas para manter as proporções e caber no terminal",
|
||||
"Use <code>chafa</code> para logotipos de cores (pode não exibir corretamente em sessões de SSH)",
|
||||
"Use <code>jp2a</code> ou <code>img2txt</code> para logotipos compatíveis com SSH"
|
||||
],
|
||||
"examplesLabel": "Logotipos de Exemplo:",
|
||||
"logos": [
|
||||
{
|
||||
"name": "ProxMenux",
|
||||
"alt": "Logótipo do ProxMenux",
|
||||
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmenux.png"
|
||||
},
|
||||
{
|
||||
"name": "Proxmox",
|
||||
"alt": "Logótipo do Proxmox",
|
||||
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmox.png"
|
||||
},
|
||||
{
|
||||
"name": "JC Channel",
|
||||
"alt": "Logótipo do JC Channel",
|
||||
"src": "/fastfetch/jc-channel.png"
|
||||
},
|
||||
{
|
||||
"name": "Helper-Scripts",
|
||||
"alt": "Logótipo do Helper-Scripts",
|
||||
"src": "https://macrimi.github.io/ProxMenux/fastfetch/helper-scripts.png"
|
||||
},
|
||||
{
|
||||
"name": "Home-Labs-Club",
|
||||
"alt": "Logótipo do Home-Labs-Club",
|
||||
"src": "https://macrimi.github.io/ProxMenux/fastfetch/home-labs-club.png"
|
||||
},
|
||||
{
|
||||
"name": "Proxmology",
|
||||
"alt": "Logótipo Proxmology",
|
||||
"src": "https://macrimi.github.io/ProxMenux/fastfetch/proxmology.png"
|
||||
}
|
||||
],
|
||||
"automates": "Este ajuste automatiza os seguintes comandos:"
|
||||
},
|
||||
"figurine": {
|
||||
"title": "Instalar e Configurar Figurine",
|
||||
"intro": "Esta opção instala e configura o Figurine, uma ferramenta que cria banners de texto elegantes ASCII para o seu terminal, exibindo o seu nome de máquina em um formato 3D visualmente atraente.",
|
||||
"doesLabel": "O que faz:",
|
||||
"doesItems": [
|
||||
"Descarrega e instala o Figurine v2.1.1 a partir do GitHub para a arquitetura do host (AMD64, ARM64 ou ARMv7)",
|
||||
"Cria uma mensagem de boas- vindas que mostra o seu nome de máquina na arte ASCII 3D quando você entra",
|
||||
"Atualiza o binário existente do Figurine após concluir a transferência e a extração com sucesso",
|
||||
"Configura a mensagem de boas- vindas a executar automaticamente na autenticação"
|
||||
],
|
||||
"practicalLabel": "Uso prático:",
|
||||
"practicalBody": "Ao gerenciar vários nós Proxmox em um cluster, o Figurine fornece uma indicação visual imediata de qual nó você está conectado atualmente. Isso ajuda a prevenir comandos acidentais no nó errado e melhora seu fluxo de trabalho ao gerenciar vários servidores.",
|
||||
"exampleLabel": "Resultado do Exemplo:",
|
||||
"imageAlt": "Saída de Exemplo Figurine",
|
||||
"automates": "Este ajuste automatiza o seguinte processo:",
|
||||
"outro": "Após a instalação, você verá seu hostname exibido na arte ASCII 3D cada vez que você entrar, deixando imediatamente claro em que nó Proxmox você está trabalhando."
|
||||
},
|
||||
"log2ram": {
|
||||
"title": "Instalar Log2RAM (redução do desgaste de SSD/NVMe)",
|
||||
"intro": "Log2RAM monta <code>/var/log</code> num ramdisk tmpfs e sincroniza-o periodicamente para disco. Guardar temporariamente na RAM as escritas frequentes do journald pode reduzir desgaste SSD e E/S. A sincronização e o encerramento normal guardam os registos; um corte abrupto pode perder entradas desde a última sincronização.",
|
||||
"upstreamLabel": "Projeto a montante:",
|
||||
"upstreamUrl": "https://github.com/azlux/log2ram",
|
||||
"upstreamLinkLabel": "azlux/log2ram em GitHub",
|
||||
"doesLabel": "O que o ProxMenux faz:",
|
||||
"doesItems": [
|
||||
"Detecta se o disco raiz é SSD/NVMe lendo <code>/sys/block/<dev>/queue/rotational</code>. Em um disco rotacional o fluxo automatizado pede primeiro antes de instalar.",
|
||||
"Clona o repositório original (<code>azlux/log2ram</code>) para <code>/tmp/log2ram</code> e modifica <code>install.sh</code>, substituindo <code>rsync -aAXv</code> por <code>rsync -aXv --no-acls</code>. Evita o erro <em>set_acl: Operation not supported</em> com código de saída 23, gerado pelo script original ao mover /var/log em sistemas sem ACL. A unidade systemd <code>log2ram</code> é ativada após instalação.",
|
||||
"Dimensiona o ramdisk pela RAM do host: <code>≤ 8 GB → 128M</code>, <code>≤ 16 GB → 256M</code>, <code>> 16 GB → 512M</code>. Escreve o valor em <code>SIZE=</code> de <code>/etc/log2ram.conf</code>.",
|
||||
"Agenda uma sincronização periódica do disco via <code>/etc/cron.d/log2ram</code>: a cada 1h / 3h / 6h de acordo com o mesmo nível RAM.",
|
||||
"Instala <code>/usr/local/bin/log2ram-check.sh</code>, executado a cada 10 minutos por <code>/etc/cron.d/log2ram-auto-sync</code>. Quando <code>/var/log</code> chega a 80% do ramdisk, limpa journals antigos. Aos 92%, executa primeiro <code>logrotate -f /etc/logrotate.d/proxmox-backup-api</code> se o ficheiro existir: os registos API PBS costumam ocupar mais espaço num host PBS. Depois trunca <code>pveproxy access/error</code> e <code>pveam.log</code> antes de sincronizar. <code>log2ram write</code> apenas copia tmpfs para disco, sem o reduzir. A proteção ajuda a evitar falhas PVE com <em>No space left on device</em> por crescimento descontrolado dos registos.",
|
||||
"Deteta o serviço <code>proxmox-backup-server</code> no host. Se existir, cria <code>/etc/logrotate.d/proxmox-backup-api</code> (20 MB × 3 rotações) e <code>/etc/cron.hourly/proxmox-backup-logrotate</code> para limitar os registos API PBS, fonte habitual de crescimento, mesmo entre sincronizações Log2RAM. Sem PBS não altera nada.",
|
||||
"Ajusta os limites systemd-journald (<code>SystemMaxUse</code>, <code>RuntimeMaxUse</code>) ao ramdisk para que uma rajada de registos não o encha.",
|
||||
"Fica registado em <code>installed_tools.json</code> para poder ser revertido em Desinstalar otimizações."
|
||||
],
|
||||
"howUseLabel": "Como utilizar:",
|
||||
"howUseBody": "O percurso automatizado instala Log2RAM sem intervenção se detetar disco raiz SSD/NVMe. O personalizável pergunta tamanho, intervalo e ativação da proteção. A pergunta indica 90%, mas o script gerado usa os limiares de limpeza de 80% e intensiva de 92% descritos acima.",
|
||||
"verifyLabel": "Verificar e gerenciar a partir da shell:",
|
||||
"verifyCode": "# Service state and configured timers\nsystemctl status log2ram\nsystemctl list-timers log2ram*\n\n# Current ramdisk usage — /var/log IS the tmpfs itself\ndf -h /var/log\n\n# Force a sync now (tmpfs → disk); does NOT shrink the tmpfs\nlog2ram write\n\n# Trigger the auto-sync guard on demand (vacuum + sync when usage is high)\n/usr/local/bin/log2ram-check.sh\n\n# Current config: SIZE, mail settings, path\ncat /etc/log2ram.conf\n\n# ProxMenux-specific cron jobs\ncat /etc/cron.d/log2ram /etc/cron.d/log2ram-auto-sync\n\n# Recent Log2RAM activity\njournalctl -u log2ram -n 50 --no-pager"
|
||||
},
|
||||
"zram": {
|
||||
"title": "Habilitar perfil de troca ZRAM",
|
||||
"intro": "Cria um dispositivo swap comprimido em RAM, <code>/dev/zram0</code>, com <code>systemd-zram-generator</code>. As páginas movidas pelo kernel para swap são comprimidas com zstd e mantidas em memória antes de usar swap em disco.",
|
||||
"doesLabel": "O que faz:",
|
||||
"doesItems": [
|
||||
"Instala <code>systemd-zram-generator</code> se estiver faltando, e registra se ProxMenux o instalou.",
|
||||
"Escreve <code>/etc/systemd/zram-generator.conf.d/90-proxmenux.conf</code>: um dispositivo <code>zram0</code> de um décimo da RAM do host, compressão zstd (<code>zstd(level=9)</code> com systemd-zram-generator 1.2.0 ou posterior) e prioridade swap 32767.",
|
||||
"Com essa prioridade, o kernel preenche primeiro o ZRAM. Uma troca existente no disco mantém sua própria prioridade e leva as páginas que já não se encaixam no ZRAM.",
|
||||
"Antes de mudar qualquer coisa, procura outra configuração ZRAM: uma troca zram ativa, uma linha zram em <code>/etc/fstab</code>, uma unidade systemd ou outro arquivo gerador. Se encontrar uma, a opção pára e deixa essa configuração como está.",
|
||||
"Inicia o <code>dev-zram0.swap</code> e verifica se o dispositivo ativo corresponde ao perfil. Caso contrário, o estado anterior é restaurado.",
|
||||
"Fica registado em <code>installed_tools.json</code> para poder ser revertido em Desinstalar otimizações."
|
||||
],
|
||||
"howUseLabel": "Como utilizar:",
|
||||
"howUseBody": "A opção só existe no percurso personalizável, não no automatizado. O dispositivo é recriado em cada arranque. Enquanto estiver ativo, o painel Memória do ProxMenux Monitor mostra capacidade, swap utilizado, algoritmo, relação de compressão e memória física ocupada.",
|
||||
"verifyLabel": "Verificar a partir do shell:",
|
||||
"verifyCode": "# Active swap devices and their priority\nswapon --show\n\n# ZRAM device: algorithm, size and compressed data\nzramctl\n\n# Profile written by ProxMenux\ncat /etc/systemd/zram-generator.conf.d/90-proxmenux.conf\n\n# State of the swap unit\nsystemctl status dev-zram0.swap"
|
||||
},
|
||||
"autoApplication": {
|
||||
"title": "Aplicação automática",
|
||||
"body": "No percurso personalizável, selecione as funções conforme as necessidades. Log2RAM também integra o automatizado com deteção de hardware; ZRAM é exclusivo do personalizável. Consulte cada secção para confirmações e requisitos."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Desempenho | Documentação ProxMenux",
|
||||
"description": "Opções de desempenho no script pós-instalação personalizável do ProxMenux. Substitui o gzip de uma só thread pelo pigz (gzip paralelo) para acelerar cópias de segurança e compressão em hosts com vários núcleos."
|
||||
},
|
||||
"header": {
|
||||
"title": "Após a instalação: desempenho",
|
||||
"description": "Opções de desempenho do script pós-instalação Personalizável. Esta categoria contém uma só otimização: substituir gzip por pigz para que as cópias de segurança e a compressão usem todos os núcleos da CPU em vez de um.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "A única opção de desempenho aqui redireciona o gzip para uma implementação paralela. Os outros ajustes de desempenho (memória, escalonamento de E/S, tamanho do ARC ZFS, limites do kernel) ficam nas respetivas categorias (<em>Sistema</em>, <em>Armazenamento</em>), pois afetam subsistemas diferentes."
|
||||
},
|
||||
"pigz": {
|
||||
"heading": "Use pigz para compactação gzip mais rápida",
|
||||
"intro": "O <code>gzip</code> normal comprime usando <strong>um só núcleo da CPU</strong>. Nos hosts Proxmox modernos com 8, 16 ou 32 núcleos, isto limita muito as cópias VM/CT com <code>vzdump</code>, a rotação de registos e tudo o que passa pelo <code>gzip</code>. O <a>pigz</a> é um substituto paralelo diretamente compatível: produz o mesmo formato gzip, mas distribui o trabalho por todos os núcleos.",
|
||||
"doesTitle": "O que o ProxMenux faz",
|
||||
"doesIntro": "Cinco passos, todos idempotentes:",
|
||||
"doesItems": [
|
||||
"Define <code>pigz: 1</code> em <code>/etc/vzdump.conf</code> para que a ferramenta de backup do Proxmox use pigz nativamente.",
|
||||
"Instala o pacote apt <code>pigz</code> se ainda não estiver presente.",
|
||||
"Cria um script wrapper em <code>/bin/pigzwrapper</code> que encaminha todos os argumentos para <code>/usr/bin/pigz</code>.",
|
||||
"Registra um desvio de dpkg para o binário <code>gzip</code> do sistema (<code>/usr/bin/gzip</code> em Proxmox VE 9, <code>/bin/gzip</code> em Proxmox VE 8): o binário real é mantido ao lado dele como <code>gzip.distrib</code> e o invólucro toma o seu lugar. A partir de agora, <em> qualquer coisa</em> que chama <code>gzip</code> — logrotate, <code>tar czf</code>, scripts, vzdump — usa pigz de forma transparente.",
|
||||
"Verifica que o arquivo mantido como <code>gzip.distrib</code> é um gzip funcional antes da embalagem ser colocada no lugar, e reinstala o pacote <code>gzip</code> primeiro quando não estiver. Uma máquina que ainda tenha o swap <code>/bin/gzip.original</code> anterior é movida para o desvio quando a opção é aplicada novamente."
|
||||
],
|
||||
"replacesTitle": "Substitui um binário do sistema",
|
||||
"replacesBody": "Colocar um wrapper no lugar do <code>gzip</code> é invulgar. É seguro porque produz saída compatível com gzip, mas scripts com caminhos fixos, executados em chroots restritivos ou que verificam hashes dos binários podem comportar-se de forma diferente. O binário original fica em <code>gzip.distrib</code>. Graças ao desvio dpkg, uma atualização do pacote <code>gzip</code> ou a passagem do Proxmox VE 8 para 9 atualiza esse ficheiro e mantém o wrapper.",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "Esta otimização é registada. <link>Desinstalar otimizações</link> copia o binário original de <code>gzip.distrib</code> para o lugar do wrapper, remove o desvio e <code>pigzwrapper</code>, comenta a linha <code>pigz</code> em <code>/etc/vzdump.conf</code> e executa <code>apt purge pigz</code> após confirmar que o gzip funciona. Equivalente manual no Proxmox VE 9:",
|
||||
"verifyTitle": "Verificação",
|
||||
"verifyBody": "Após a aplicação, <code>gzip --version</code> deve mencionar pigz. Um benchmark rápido também mostra a diferença de velocidade em um host multi-core:",
|
||||
"whenTitle": "Quando isto é mais importante",
|
||||
"whenBody": "O benefício aumenta com o <strong>número de núcleos do host</strong> e a <strong>frequência das cópias de segurança</strong>. Num servidor doméstico de 2 núcleos com um vzdump diário, o ganho é marginal. Num host de produção com 16 núcleos que guarda uma dúzia de VMs todas as noites, o pigz pode reduzir a janela de cópia a uma fração do tempo do gzip de uma thread."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Comandos de backup e restauração",
|
||||
"href": "/docs/help-info/backup-commands",
|
||||
"tailRich": " — vzdump CLI, incluindo a opção de threads <code>--pigz</code>."
|
||||
},
|
||||
{
|
||||
"label": "Armazenamento",
|
||||
"href": "/docs/post-install/storage",
|
||||
"tail": " — limites de velocidade vzdump e afinação ZFS ARC."
|
||||
},
|
||||
{
|
||||
"label": "Sistema",
|
||||
"href": "/docs/post-install/system",
|
||||
"tail": " — ajuste de descritores de ficheiros e memória."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Segurança | Documentação ProxMenux",
|
||||
"description": "Opções de segurança disponíveis no script pós-instalação personalizável ProxMenux. Atualmente uma única opção: desabilitar o serviço portmapper/rpcbind para reduzir a superfície de ataque do host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Pós-instalação: Segurança",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "A segurança pós-instalação limita-se ao <strong>reforço do host que pode ser aplicado em segurança sem supervisão</strong>: desativar serviços raramente necessários, com reversão pelo menu Desinstalar. As ferramentas ativas (Fail2Ban para prevenção de intrusões e Lynis para auditoria) ficam em <em>Segurança</em> no menu principal do ProxMenux, fora da pós-instalação."
|
||||
},
|
||||
"rpcbind": {
|
||||
"heading": "Desactivar o portmapper / rpcbind",
|
||||
"intro": "<code>rpcbind</code> (anteriormente <code>portmap</code>) é um serviço que mapeia números de programas RPC para portas de rede. É uma dependência para NFS e algumas ferramentas baseadas em RPC. Em um host típico do Proxmox que não está atuando como um servidor NFS, o <strong>nada o usa</strong> — e deixando-o habilitado mantém a porta <code>111/tcp</code> ouvindo em cada interface.",
|
||||
"whyTitle": "Porque vale a pena desactivar",
|
||||
"whyItems": [
|
||||
"Reduz a superfície do ataque do hospedeiro — um serviço de escuta a menos para se preocupar.",
|
||||
"Historicamente abusado como vetor de reflexão/amplificação em ataques de DDoS. Desativar o <code>rpcbind</code> remove esse fator de amplificação para o seu host.",
|
||||
"Remove o ruído que gera em logs e saída <code>netstat</code> / <code>ss</code>, tornando a atividade real mais fácil de detectar."
|
||||
],
|
||||
"nfsTitle": "Não desactivar isto se usar o NFS",
|
||||
"nfsBody": "O servidor NFS <strong>e</strong> o cliente NFS dependem do <code>rpcbind</code> para negociar as portas usadas por <code>mountd</code>, <code>statd</code>, <code>lockd</code>, etc. Se o host Proxmox <em>exportar</em> partilhas NFS para outras máquinas ou <em>montar</em> partilhas NFS de um NAS, não aplique esta opção. As montagens falharão com <code>mount.nfs: rpc.statd is not running</code> ou semelhante.",
|
||||
"runsTitle": "O que o ProxMenux executa",
|
||||
"runsOutro": "O pacote permanece instalado. O ProxMenux regista os estados originais de ativação e execução de rpcbind.service e rpcbind.socket, depois desativa e para ambas as unidades para impedir a reativação do serviço pelo socket.",
|
||||
"verifyTitle": "Verificação",
|
||||
"verifyBody": "Após a aplicação, confirme que o <code>rpcbind</code> está desligado e nada está ouvindo na porta 111:",
|
||||
"reversibleTitle": "Restaura o estado de serviço original",
|
||||
"reversibleBody": "A alteração é registada em <code>installed_tools.json</code>. <link>Desinstalar otimizações</link> repõe cada unidade rpcbind nos estados de ativação e execução registados antes da alteração pelo ProxMenux; não pressupõe que o rpcbind estivesse ativado em todos os hosts."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Menu de segurança",
|
||||
"href": "/docs/security",
|
||||
"tail": " — ferramentas mais completas: Fail2Ban (prevenção de intrusões) e Lynis (auditoria)."
|
||||
},
|
||||
{
|
||||
"label": "Lynis",
|
||||
"href": "/docs/security/lynis",
|
||||
"tail": "— audite o host para encontrar mais oportunidades de proteção."
|
||||
},
|
||||
{
|
||||
"label": "Comandos úteis do sistema",
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"tail": " — estado dos serviços e referência para journalctl e lynis audit."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Armazenamento | Documentação ProxMenux",
|
||||
"description": "Otimizações de armazenamento do script pós-instalação personalizável ProxMenux: dimensão ZFS ARC pela RAM do host, instantâneos periódicos com zfs-auto-snapshot e remoção dos limites de velocidade dos backups vzdump."
|
||||
},
|
||||
"header": {
|
||||
"title": "Pós-instalação: Armazenamento",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Quatro otimizações de armazenamento: ajustar <strong>ZFS ARC</strong> a uma fração adequada da RAM, instalar e agendar <strong>instantâneos ZFS automáticos</strong>, ativar <strong>ZFS autotrim</strong> em pools SSD/NVMe e retirar limitações de <strong>vzdump</strong> para acelerar backups. Escolha cada opção independente conforme o sistema. Uma quinta, <link>Log2RAM</link>, reduz desgaste SSD/NVMe movendo <code>/var/log</code> para ramdisk. Está em Opcionais porque o menu personalizável a agrupa aí."
|
||||
},
|
||||
"trackedTitle": "Todos os quatro são rastreados no menu Desinstalar",
|
||||
"trackedBody": "Cada uma dessas opções registra uma ferramenta em <code>installed_tools.json</code>, então eles aparecem em <link>Otimizações de Uninstall</link>. Reverter o <code>zfs_arc</code> remove o <code>/etc/modprobe.d/99-zfsarc.conf</code> e reconstrói o initramfs; o <code>zfs_auto_snapshot</code> reverte o cronograma do cron e oferece purgar o pacote; o <code>zfs_autotrim</code> configura o <code>autotrim=off</code> nos pools que ele ativou; o <code>vzdump_speed</code> restaura o <code>/etc/vzdump.conf</code> do <code>.bak</code> a instalação criada.",
|
||||
"arc": {
|
||||
"heading": "Otimizar o tamanho do ZFS ARC",
|
||||
"intro": "A <strong>Adaptive Replacement Cache (ARC)</strong> é a cache de leitura ZFS em RAM. Instalações Proxmox VE desde 8.1 limitam a 10% da RAM, máximo 16 GiB; hosts antigos ou atualizados podem diferir. Esta opção escreve explicitamente essa mesma regra (RAM/10, máximo de 16 GiB, mínimo de 64 MiB) num ficheiro próprio, o que cobre também hosts antigos ou atualizados. Verifique definições e carga: uma cache menor nem sempre é mais rápida.",
|
||||
"sizingTitle": "Regras de dimensionamento",
|
||||
"headerRam": "RAM do host",
|
||||
"headerMax": "Limite ARC",
|
||||
"rows": [
|
||||
{
|
||||
"ram": "Fórmula",
|
||||
"max": "RAM / 10, máximo 16 GiB e mínimo 64 MiB"
|
||||
},
|
||||
{
|
||||
"ram": "Máquina 8 GB",
|
||||
"max": "≈ 819 MiB (RAM/10)"
|
||||
},
|
||||
{
|
||||
"ram": "Máquina 16 GB",
|
||||
"max": "≈ 1.6 GiB (RAM/10)"
|
||||
},
|
||||
{
|
||||
"ram": "Máquina 64 GB",
|
||||
"max": "≈ 6.4 GiB (RAM/10)"
|
||||
},
|
||||
{
|
||||
"ram": "≥ Máquina 160 GB",
|
||||
"max": "16 GiB (limite)"
|
||||
}
|
||||
],
|
||||
"after": "O ficheiro <code>/etc/modprobe.d/99-zfsarc.conf</code> contém apenas <code>options zfs zfs_arc_max=…</code>. Os outros parâmetros ZFS (<code>zfs_arc_min</code>, pré-leitura/limite de escritas L2ARC, tempo limite TXG) não são ajustados. Antes, procura outros <code>*.conf</code> em <code>/etc/modprobe.d/</code> com <code>zfs_arc_min</code> / <code>zfs_arc_max</code>, copia-os com manifesto para <code>/usr/local/share/proxmenux/backups/zfs_arc/</code> e remove deles os valores <code>zfs_arc_min</code> / <code>zfs_arc_max</code> em conflito (as outras opções dessas linhas mantêm-se), para que só o ficheiro ARC ProxMenux defina o limite. Depois, <code>update-initramfs -u -k all</code> e, quando aplicável, <code>proxmox-boot-tool refresh</code> integram o limite no initramfs dos sistemas com raiz ZFS.",
|
||||
"rebootTitle": "Requer uma reinicialização para fazer efeito",
|
||||
"rebootBody": "As definições ARC são lidas ao carregar o módulo <code>zfs</code>. Para hosts com raiz ZFS, ProxMenux regenera initramfs com <code>update-initramfs -u -k all</code> e atualiza o carregador quando necessário com <code>proxmox-boot-tool refresh</code>. O novo parâmetro continua a exigir reinício, assinalado automaticamente.",
|
||||
"safeTitle": "Seguro em hosts não-ZFS",
|
||||
"safeBody": "A função só escreve a configuração quando <code>zpool list</code> relata pelo menos um pool de ZFS. No ext4 / LVM- only Proxmox hosts, ou em máquinas com as ferramentas ZFS instaladas, mas sem pool importado, assinalar esta opção é um no-op - nada é escrito.",
|
||||
"verifyTitle": "Verificação e retrocesso manual"
|
||||
},
|
||||
"autoSnap": {
|
||||
"heading": "Instale o instantâneo automático do ZFS",
|
||||
"intro": "Instala o pacote <a>zfs-auto-snapshot</a> e reescreve seus agendamentos cron para que instantâneos sejam tomados automaticamente em vários intervalos. Uma grande rede de segurança sem esforço em cima de seus backups regulares vzdump.",
|
||||
"cadenceTitle": "Frequência dos instantâneos configurada pelo ProxMenux",
|
||||
"headerLabel": "Rótulo",
|
||||
"headerRuns": "Execução",
|
||||
"headerKept": "Instantâneos retidos",
|
||||
"rows": [
|
||||
{
|
||||
"label": "frequentes",
|
||||
"runs": "cada 15 min",
|
||||
"kept": "4"
|
||||
},
|
||||
{
|
||||
"label": "horário",
|
||||
"runs": "a cada hora",
|
||||
"kept": "1"
|
||||
},
|
||||
{
|
||||
"label": "diariamente",
|
||||
"runs": "uma vez por dia",
|
||||
"kept": "1"
|
||||
},
|
||||
{
|
||||
"label": "semanalmente",
|
||||
"runs": "uma vez por semana",
|
||||
"kept": "1"
|
||||
},
|
||||
{
|
||||
"label": "mensal",
|
||||
"runs": "uma vez por mês",
|
||||
"kept": "1"
|
||||
}
|
||||
],
|
||||
"conservativeTitle": "Retenção limitada",
|
||||
"conservativeBody": "ProxMenux usa retenção limitada: 4 instantâneos frequentes e 1 por cada intervalo mais longo, para conter a ocupação ZFS. Para reter mais, altere os números em <code>/etc/cron.d/zfs-auto-snapshot</code>, <code>/etc/cron.hourly/zfs-auto-snapshot</code> etc. após o script.",
|
||||
"onlyZfsTitle": "Útil apenas em pools ZFS",
|
||||
"onlyZfsBody": "Instalar o pacote num host apenas ext4 é inofensivo mas inútil: não há datasets ZFS para criar instantâneos. Ignore a opção se não usa ZFS.",
|
||||
"verifyTitle": "Verificação e retrocesso manual"
|
||||
},
|
||||
"autotrim": {
|
||||
"heading": "Ativar ZFS autotrim (pools SSD/NVMe)",
|
||||
"intro": "Ativa <code>autotrim</code> em pools ZFS só com SSD ou NVMe compatíveis com TRIM. Por precaução, ignora pools com dispositivos rotacionais. Os pools já com <code>autotrim=on</code> ficam inalterados.",
|
||||
"trimTitle": "O que TRIM faz, e por que importa em ZFS",
|
||||
"trimBody1": "SSD e NVMe usam blocos internos de apagamento maiores que os setores lógicos do sistema de ficheiros. Quando um ficheiro é apagado, a unidade ainda não sabe que os setores estão livres e a limpeza interna pode continuar a mover dados obsoletos para libertar blocos. <strong>TRIM</strong> indica os setores livres para permitir o seu apagamento antecipado.",
|
||||
"trimBody2": "Sem TRIM, o desempenho do SSD degrada-se ao longo do tempo, pois a unidade fica sem blocos pré-apagados e tem que fazer apagar-em-escrever, e aumentar a amplificação de gravação — tanto encurtando a vida útil da unidade. Com TRIM ativado, a unidade pode manter um saudável pool de blocos vazios prontos para escrever.",
|
||||
"trimBody3": "Com <code>autotrim=on</code>, ZFS aplica TRIM em segundo plano ao espaço recém-libertado, agrupando intervalos. Um <code>zpool trim <pool></code> periódico é alternativa. Autotrim evita agendamento separado, mas o impacto depende dos dispositivos; TRIM manual periódico pode ser melhor em algumas unidades modestas.",
|
||||
"practicalTitle": "Por que isso é prático para habilitar?",
|
||||
"practicalItems": [
|
||||
"<strong>Desempenho de escrita sustentado.</strong> TRIM pode ajudar a recuperar blocos sem uso. Benefícios e impacto na latência dependem do dispositivo e da carga.",
|
||||
"<strong>Vida útil da unidade.</strong> Evitar cópias internas desnecessárias pode reduzir amplificação de escrita e desgaste NAND, sem garantir uma duração adicional específica.",
|
||||
"<strong>Sem tarefa cron para agendar.</strong> Ao contrário de um <code>zpool trim</code> periódico, autotrim é gerido automaticamente pelo pool."
|
||||
],
|
||||
"whenTitle": "Quando é que isto é necessário?",
|
||||
"whenIntro1": "<strong>Considere ativá-lo</strong> em pools ZFS só com SSD/NVMe compatíveis com TRIM. Verifique comportamento e latência; TRIM manual agendado pode ser preferível.",
|
||||
"whenIntro2": "<strong>O programa ignora- o automaticamente</strong> em:",
|
||||
"whenSkipItems": [
|
||||
"Pools com vdev HDD rotacional: filtro conservador de hardware deste script.",
|
||||
"Unidades sem <code>discard_granularity</code> expostas em sysfs — geralmente SSDs antigos sem TRIM, ou caminhos de passagem onde o SO não pode ver o dispositivo subjacente.",
|
||||
"Pools em que ZFS ela mesma relata a propriedade não suportada (raro; muito antigo pools).",
|
||||
"Pools já definidos para <code>autotrim=on</code> (no-op)."
|
||||
],
|
||||
"whenIntro3": "<strong>Não relevante em hosts somente ext4</strong> — não há nada para ZFS cortar. A função termina com uma mensagem amigável nesse caso.",
|
||||
"recordedTitle": "Por que apenas os pools ProxMenux alterados são registrados",
|
||||
"recordedBody": "A função só escreve um pool para o seu arquivo de estado interno (<code>/usr/local/share/proxmenux/zfs_autotrim_pools</code>) quando ele ativamente virou esse pool de <code>off</code> para <code>on</code>. Pools que você tinha no autotrim antes de executar o script são deixados de fora da lista, então um futuro Desinstalar não desliga as configurações que você mesmo configurou — apenas as próprias alterações do ProxMenux são revertidas.",
|
||||
"manualTitle": "Equivalente manual (executado no seu servidor)",
|
||||
"manualIntro": "A sequência completa que o script executa contra cada pool é replicável à mão. Isto é o que você digitaria se você quisesse fazer a mesma coisa em um único pool sem ProxMenux:",
|
||||
"verifyTitle": "Verificação e retrocesso manual",
|
||||
"oneShotTitle": "Prefere TRIM pontual em vez de contínuo?",
|
||||
"oneShotBody": "Alguns administradores preferem TRIM manual nas horas de menor carga. Desative autotrim e agende uma tarefa cron com <code>zpool trim <pool></code>: mesmo objetivo, frequência diferente."
|
||||
},
|
||||
"vzdump": {
|
||||
"heading": "Aumentar a velocidade de backup do vzdump",
|
||||
"intro": "Escreve bwlimit: 0 e ionice: 5 na configuração global vzdump. Proxmox já não limita a banda por predefinição: só remove um limite configurado. Face a ionice: 7, o valor 5 aumenta a prioridade E/S best-effort se o escalonador a respeitar. Pode afetar os convidados e não garante backups mais rápidos.",
|
||||
"changedTitle": "O que é alterado em /etc/vzdump.conf",
|
||||
"backupTitle": "Primeira execução cria um .bak de vzdump.conf",
|
||||
"backupBody": "Na primeira execução, ProxMenux copia <code>/etc/vzdump.conf</code> para <code>/etc/vzdump.conf.bak</code> antes de alterar. As seguintes preservam essa cópia para recuperar a configuração anterior. <code>bwlimit</code> e <code>ionice</code> são alterados com <code>sed</code>; outras opções como compress, pigz, tmpdir e exclude-path são preservadas.",
|
||||
"skipTitle": "Quando saltar isto",
|
||||
"skipBody": "Num host com armazenamento local lento e VMs sensíveis à latência, retirar o limite de banda pode causar lentidão durante backups. Se definiu <code>bwlimit</code> por esse motivo, mantenha-o e ignore a opção.",
|
||||
"verifyTitle": "Verificação e retrocesso manual"
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Comandos de gerenciamento ZFS",
|
||||
"href": "/docs/help-info/zfs-commands",
|
||||
"tail": " — referência zpool / zfs para ARC, instantâneos e scrub."
|
||||
},
|
||||
{
|
||||
"label": "Comandos de armazenamento e discos",
|
||||
"href": "/docs/help-info/storage-commands",
|
||||
"tail": " — referência de dispositivos de blocos e armazenamento Proxmox."
|
||||
},
|
||||
{
|
||||
"label": "Comandos de backup e restauração",
|
||||
"href": "/docs/help-info/backup-commands",
|
||||
"tail": " — referência CLI vzdump para banda e prioridade E/S."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter as alterações ARC / vzdump."
|
||||
},
|
||||
{
|
||||
"label": "Log2RAM",
|
||||
"href": "/docs/post-install/optional#log2ram",
|
||||
"tail": " — reduz o desgaste SSD/NVMe por /var/log ramdisk backing; documentado sob opcional."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,133 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Sistema | Documentação ProxMenux",
|
||||
"description": "Otimizações em nível de sistema no ProxMenux Script pós-instalação personalizável: journald e limites de tamanho de rotação de log, limites mais altos de kernel e descritor de arquivo, ajuste de memória balanceado, kexec para reinicializações rápidas e recuperação de kernel panic."
|
||||
},
|
||||
"header": {
|
||||
"title": "Após a instalação: sistema",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Seis otimizações de sistema independentes. Ajustam <strong>journald</strong> e <strong>logrotate</strong> para os registos não encherem o disco, aumentam <strong>os limites do kernel e dos descritores de ficheiros</strong> para aplicações com muitos ficheiros abertos, <strong>equilibram a memória</strong> num host de virtualização, acrescentam <strong>kexec</strong> para reinícios sem BIOS e configuram <strong>a recuperação automática</strong> de kernel panic. As seis ficam registadas e são reversíveis no menu Desinstalar."
|
||||
},
|
||||
"journald": {
|
||||
"heading": "Otimizar journald",
|
||||
"intro": "Reescreve <code>/etc/systemd/journald.conf</code> com valores adequados para o journal systemd não encher gradualmente a partição raiz; depois reinicia <code>systemd-journald</code> e limpa registos antigos.",
|
||||
"keyTitle": "Valores-chave",
|
||||
"keyItems": [
|
||||
"<code>Storage=persistent</code> — manter registros no disco através de reinicialização.",
|
||||
"<code>SystemMaxUse=64M</code> / <code>RuntimeMaxUse=60M</code> — limites de utilização de disco e memória do journal.",
|
||||
"<code>Compress=yes</code>, <code>Seal=no</code> — comprime registos e desativa a selagem com segurança futura (poupa CPU).",
|
||||
"<code>MaxLevelStore=info</code> — guarda nível info e superiores, necessários ao visualizador de registos ProxMenux Monitor e à deteção de falhas de autenticação SSH/Proxmox pelo Fail2Ban no journal.",
|
||||
"Limite de frequência: <code>1000 events / 30 s</code> para evitar um excesso de registos.",
|
||||
"<code>ForwardToSyslog=no</code>, <code>ForwardToWall=no</code> — não duplicar mensagens para syslog ou transmitir para consoles."
|
||||
],
|
||||
"tipTitle": "Por que o MaxLevelStore=info importa",
|
||||
"tipBody": "Um limiar mais rigoroso como <code>warning</code> faz ProxMenux Monitor mostrar entradas quase iguais em todos os períodos, pois a maioria da atividade é de nível info, e impede Fail2Ban de ver acessos falhados. Reduza o volume com <code>SystemMaxUse</code> e <code>RateLimitBurst</code> sem restringir os níveis guardados."
|
||||
},
|
||||
"logrotate": {
|
||||
"heading": "Otimizar logrotate",
|
||||
"intro": "Reescreve <code>/etc/logrotate.conf</code> com definições globais diárias e de tamanho, 7 rotações retidas, compressão e <code>copytruncate</code>, para os serviços continuarem a escrever sem reabrir os registos. O tamanho aparece após a frequência diária e prevalece, salvo regras específicas de cada registo. O <code>logrotate.conf</code> original é copiado para <code>.bak</code> na primeira aplicação.",
|
||||
"tipTitle": "Compatível com Log2RAM",
|
||||
"tipBody": "A diretiva <code>size 10M</code> prevalece sobre a definição diária anterior; <em>não</em> significa o primeiro dos dois critérios. Logrotate verifica o limiar quando é executado, e regras específicas podem substituir as globais. Com <code>/var/log</code> na RAM do Log2RAM, verifique as regras e a frequência do temporizador para controlar o espaço."
|
||||
},
|
||||
"limits": {
|
||||
"heading": "Aumentar vários limites do sistema",
|
||||
"intro": "Aumenta limites do kernel, systemd e PAM cujas predefinições podem ser baixas para um host com muitas VMs, contentores e serviços de rede.",
|
||||
"headerFile": "Arquivo",
|
||||
"headerSets": "O que define",
|
||||
"rows": [
|
||||
{
|
||||
"file": "/etc/sysctl.d/99-maxwatches.conf",
|
||||
"sets": "<code>fs.inotify.max_user_watches / max_user_instances / max_queued_events = 1048576</code>"
|
||||
},
|
||||
{
|
||||
"file": "/etc/sysctl.d/99-maxkeys.conf",
|
||||
"sets": "<code>kernel.keys.maxkeys / root_maxkeys = 1000000</code>"
|
||||
},
|
||||
{
|
||||
"file": "/etc/sysctl.d/99-swap.conf",
|
||||
"sets": "<code>vm.swappiness = 10</code>, <code>vm.vfs_cache_pressure = 100</code>"
|
||||
},
|
||||
{
|
||||
"file": "/etc/sysctl.d/99-fs.conf",
|
||||
"sets": "<code>fs.nr_open / file-max = 2097152</code>, <code>fs.aio-max-nr = 1048576</code>"
|
||||
},
|
||||
{
|
||||
"file": "/etc/security/limits.d/99-limits.conf",
|
||||
"sets": "<code>nofile</code> e <code>nproc</code> a 1 048 576 (ilimitados para root)"
|
||||
},
|
||||
{
|
||||
"file": "/etc/systemd/system.conf + user.conf",
|
||||
"sets": "<code>DefaultLimitNOFILE=1048576</code> para serviços systemd"
|
||||
},
|
||||
{
|
||||
"file": "/etc/pam.d/common-session + runuser-l",
|
||||
"sets": "<code>session required pam_limits.so</code> então o acima se aplica às shells de login"
|
||||
},
|
||||
{
|
||||
"file": "/root/.profile",
|
||||
"sets": "<code>ulimit -n 1048576</code> para a shell root"
|
||||
}
|
||||
],
|
||||
"tipTitle": "Por que inotify é importante",
|
||||
"tipBody": "Docker, Syncthing, as monitorizações de ficheiros Node.js e análises Plex podem esgotar <code>max_user_watches</code>. A predefinição depende do kernel e da memória; nem sempre é 8192. O limite de 1M permite mais monitorizações sem as pré-alocar. As ativas consomem memória do kernel: controle a utilização nos hosts com pouca RAM."
|
||||
},
|
||||
"memory": {
|
||||
"heading": "Otimizar as configurações de memória",
|
||||
"intro": "Escreve um perfil sysctl equilibrado para <code>/etc/sysctl.d/99-memory.conf</code>. Projetado para um host de hipervisor — prefere manter conjuntos de trabalho VM em RAM e libera páginas proativamente para que as rajadas de alocação não parem.",
|
||||
"warnTitle": "swappiness=10 em hosts com pouca memória",
|
||||
"warnBody": "Num host com 16 GB de RAM e muitas VMs, reduzir swappiness pode levar o kernel a terminar processos por falta de memória em vez de usar swap. Se os eventos OOM forem frequentes, aumente swappiness para 30–60 em <code>/etc/sysctl.d/99-memory.conf</code> após executar o script."
|
||||
},
|
||||
"kexec": {
|
||||
"heading": "Activar reinicialização rápida (kexec)",
|
||||
"intro": "Instala o <code>kexec-tools</code> e o liga para que você possa reiniciar o host diretamente em um novo kernel <em>sem passar pelo firmware BIOS/UEFI</em>. Em grandes servidores onde POST leva 45 – 90 segundos, isso transforma uma reinicialização de uma pausa de café em alguns segundos de parada.",
|
||||
"installsTitle": "O que o ProxMenux instala",
|
||||
"installsItems": [
|
||||
"Pacote <code>kexec-tools</code> (debconf pré-configurado com <code>kexec-tools/load_kexec boolean false</code> para o apt não pedir confirmação e manter desativado o carregamento automático ao desligar).",
|
||||
"Unidade systemd <code>/etc/systemd/system/kexec-pve.service</code> — carrega o kernel Proxmox e initrd em memória no arranque, reutilizando a linha de comandos atual do kernel.",
|
||||
"Um apelido em <code>/root/.bash_profile</code>: <code>reboot-quick</code> → <code>systemctl kexec</code>."
|
||||
],
|
||||
"usageIntro": "Uso após a próxima reinicialização (ou manual <code>systemctl start kexec-pve</code>):",
|
||||
"warnTitle": "Quando não usar o kexec",
|
||||
"warnBody": "O kexec ignora o nível de firmware init. Se você confiar em BIOS/UEFI para redefinir o estado de hardware — por exemplo, um GPU fazendo a passagem que só repõe de forma limpa no POST completo, ou um firmware HBA problemático — o reboots do kexec pode deixar esses dispositivos em um estado semi-inicializado. Use um <code>reboot</code> normal após atualizações do kernel ou quando você precisar de alterações BIOS/UEFI para fazer efeito. <code>reboot-quick</code> é para reinícios diários."
|
||||
},
|
||||
"panic": {
|
||||
"heading": "Habilite a reinicialização no kernel panic",
|
||||
"intro": "Faz o kernel <strong>reiniciar automaticamente</strong> em vez de ficar bloqueado no ecrã de panic. Essencial em hosts Proxmox remotos ou sem consola local: um kernel bloqueado para todas as VMs até poder desligar e voltar a ligar a alimentação.",
|
||||
"tipTitle": "Emparelha isto com o acesso remoto à consola",
|
||||
"tipBody": "Auto-reboot é um mecanismo de recuperação, não uma ferramenta de depuração. Se você quiser <em>investigar</em> um pânico em vez de apenas voltar, use <link>a opção kexec</link> acima com o suporte kdump do kernel (não configurado pelo ProxMenux) ou capture um console serial para outro host antes de habilitar o reinício automático."
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Verificação",
|
||||
"intro": "Após a aplicação das otimizações do sistema:",
|
||||
"tipTitle": "Restauro e limitações",
|
||||
"tipBody": "As seis opções ficam em <code>installed_tools.json</code> e <link>Desinstalar otimizações</link>. O restauro remove os ficheiros de configuração, a unidade e o alias kexec, reescreve journald.conf com os valores predefinidos do systemd e repõe logrotate.conf a partir da cópia de segurança. Alguns limites ativos precisam de nova sessão ou reinício."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Comandos úteis do sistema",
|
||||
"href": "/docs/help-info/system-commands",
|
||||
"tail": " — verificar as alterações (free -h, journalctl, ulimit -a)."
|
||||
},
|
||||
{
|
||||
"label": "Desempenho",
|
||||
"href": "/docs/post-install/performance",
|
||||
"tail": " — afinação adicional do nível do sistema (pigz)."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter qualquer uma destas alterações."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,271 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Desinstalar otimizações | Documentação ProxMenux",
|
||||
"description": "Restaurar as alterações reversíveis de configuração pós-instalação aplicadas pelo ProxMenux. Ferramentas registradas usam desinstaladores dedicados que preservam o estado de host pré-existente sempre que possível."
|
||||
},
|
||||
"header": {
|
||||
"title": "Desinstalar otimizações",
|
||||
"description": "Restaurar as alterações reversíveis feitas pelos scripts pós-instalação automatizados ou personalizáveis. ProxMenux registra cada otimização suportada com sua função de restauração dedicada; upgrades de pacotes são intencionalmente excluídos.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Por que isto existe",
|
||||
"body": "Cada ajuste reversível suportado fica <strong>registado</strong> em <code>/usr/local/share/proxmenux/installed_tools.json</code>. O registo lista otimizações ativas e chama a função de restauro correspondente. Ações sem reversão segura, como uma atualização completa de pacotes, não são acrescentadas."
|
||||
},
|
||||
"openMenu": {
|
||||
"heading": "Como abri-lo",
|
||||
"body": "Do menu principal do ProxMenux, <strong>Configurações pós-instalação Proxmox → Desinstalar otimizações</strong>. Você verá uma lista de verificação das otimizações <em>aplicadas atualmente</em> — itens que você não tenha aplicado não aparecem.",
|
||||
"imageAlt": "Desinstalar Lista de verificação de Otimizações mostrando itens atualmente aplicados no host, com caixas de seleção para selecionar quais reverter"
|
||||
},
|
||||
"howWorks": {
|
||||
"heading": "Como funciona a inversão",
|
||||
"steps": [
|
||||
{
|
||||
"title": "Registro e autodetecção",
|
||||
"body1": "Na primeira execução, ProxMenux procura indicadores no host: <code>/etc/sysctl.d/99-memory.conf</code>, <code>/etc/apt/apt.conf.d/99-force-ipv4</code>, pacote <code>haveged</code> instalado, serviço Log2RAM ativo, etc. Os elementos reconhecidos são registados como reversíveis mesmo se aplicados por uma versão anterior ao registo.",
|
||||
"body2": "Esta migração só funciona uma vez. Depois disso, cada aplicação/reversão atualiza diretamente o registro."
|
||||
},
|
||||
{
|
||||
"title": "Escolha o que reverter",
|
||||
"body1": "A lista de verificação mostra um rótulo legível pelo homem por item (por exemplo, <em>Otimização da Configuração da Memória</em>, <em>IOMMU/VFIO PCI Passthrough</em>, <em>Log2RAM (Proteção SSD)</em>). Assinale os que quiser reverter. Nada que não tiquetes será tocado."
|
||||
},
|
||||
{
|
||||
"title": "Execução da reversão",
|
||||
"body1": "Para cada item selecionado, ProxMenux chama sua função de desinstalação correspondente. A maioria das reversões segue um dos três padrões:",
|
||||
"items": [
|
||||
"<strong>A partir de cópia</strong> — restaura um <code>.bak</code> criado ao aplicar a alteração (bashrc, logrotate.conf, journald.conf, linha de comandos GRUB/kernel).",
|
||||
"<strong>Remoção da configuração</strong> — remove os ficheiros ProxMenux <code>/etc/sysctl.d/99-*.conf</code>, <code>/etc/apt/apt.conf.d/99-*</code> ou a unidade systemd e recarrega.",
|
||||
"<strong>Reinstale o pacote</strong> — para alterações de UI como o banner de assinatura, reinstale os pacotes upstream com <code>--force-confnew</code> para restaurar a configuração enviada."
|
||||
],
|
||||
"body2": "Cada inversão regista o seu progresso. Itens que requerem uma reinicialização (VFIO, nomes de interface persistentes) definem uma bandeira que ativa o prompt de reinicialização no final."
|
||||
},
|
||||
{
|
||||
"title": "Pedido de reinício no fim",
|
||||
"body1": "Após a reversão terminar, o menu mostra um prompt de reinicialização. Itens que mudaram os parâmetros do kernel, módulos do kernel ou nomes de rede (VFIO, nomes de interface persistentes) precisam da reinicialização para fazer efeito; outros itens não, e o prompt é um padrão de segurança em vez de uma verificação por item."
|
||||
}
|
||||
]
|
||||
},
|
||||
"reversible": {
|
||||
"heading": "O que é reversível",
|
||||
"intro": "As otimizações reversíveis registradas e seus desinstaladores correspondentes são agrupados aqui por área:",
|
||||
"groups": [
|
||||
{
|
||||
"title": "Repositórios & APT",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Remoção da Banner de Assinatura",
|
||||
"restores": "Primeiro tenta restaurar os ficheiros da interface a partir das cópias ProxMenux (/usr/local/share/proxmenux/backups/proxmoxlib.js.backup.* e index.html.tpl.backup.* se a interface móvel foi modificada). Só quando a cópia falta ou está danificada reinstala pve-manager, proxmox-widget-toolkit, libjs-extjs e libpve-http-server-perl com force-confnew. Também limpa cópias .js / .gz em cache."
|
||||
},
|
||||
{
|
||||
"tool": "Ignorar idiomas do APT",
|
||||
"restores": "Remove /etc/apt/apt.conf.d/99-disable-translations, permitindo os índices de descrições traduzidas segundo as restantes definições de idioma APT."
|
||||
},
|
||||
{
|
||||
"tool": "Forçar IPv4 no APT",
|
||||
"restores": "Remove /etc/apt/apt.conf.d/99-force-ipv4."
|
||||
},
|
||||
{
|
||||
"tool": "Utilitários de Sistema",
|
||||
"restores": "Purga apenas os pacotes utilitários selecionados que o ProxMenux gravou como recém-instalado. Pacotes já presentes antes da ação nunca são adicionados a esta lista e ficam intocados."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Limites de Kernel, memória e sistema",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Configuração da Memória",
|
||||
"restores": "Remove o /etc/sysctl.d/99-memory.conf e recarrega o sysctl."
|
||||
},
|
||||
{
|
||||
"tool": "Configuração do Pânico do Kernel",
|
||||
"restores": "Remove /etc/sysctl.d/99-kernelpanic.conf."
|
||||
},
|
||||
{
|
||||
"tool": "Aumento dos limites do sistema",
|
||||
"restores": "Remove /etc/sysctl.d/99-maxwatches.conf, 99-maxkeys.conf, 99-swap.conf, 99-fs.conf e /etc/security/limits.d/99-limits.conf. Repõe limites PAM e DefaultLimitNOFILE systemd. Em /root/.profile só remove o antigo ulimit -n 256000; ulimit -n 1048576 do instalador atual pode permanecer e exigir remoção manual."
|
||||
},
|
||||
{
|
||||
"tool": "Perfil de troca ZRAM",
|
||||
"restores": "Desativa o swap /dev/zram0, para dev-zram0.swap e remove /etc/systemd/zram-generator.conf.d/90-proxmenux.conf. Só purga systemd-zram-generator se instalado pelo ProxMenux e sem outra configuração ZRAM. Se não conseguir evacuar as páginas, o perfil mantém-se ativo e nada é removido."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Rede",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Otimizações de Rede",
|
||||
"restores": "Remove /etc/sysctl.d/99-network.conf, 97-proxmenux-fwbr.conf e 98-proxmenux-rpf.conf, a unidade proxmenux-fwbr-tune.service, o script /usr/local/sbin/proxmenux-fwbr-tune e a regra udev /etc/udev/rules.d/99-zz-proxmenux-fwbr-tune.rules. Retira também source /etc/network/interfaces.d/* de /etc/network/interfaces. Recarrega sysctl, systemd e regras udev."
|
||||
},
|
||||
{
|
||||
"tool": "Open vSwitch",
|
||||
"restores": "Executa apt purge para openvswitch-switch e openvswitch-common. Migre antes as pontes OVS para Linux; caso contrário, as VMs nessas pontes perdem a rede no próximo arranque."
|
||||
},
|
||||
{
|
||||
"tool": "TCP BBR + TCP Fast Open",
|
||||
"restores": "Remove /etc/sysctl.d/99-kernel-bbr.conf e 99-tcp-fastopen.conf e recarrega o restante sysctl. Eliminar ficheiros não repõe valores ativos; predefinições como cubic e tcp_fastopen=1 voltam após reiniciar, salvo outra configuração."
|
||||
},
|
||||
{
|
||||
"tool": "Nomes de Interface Persistentes",
|
||||
"restores": "Remove apenas os arquivos 10-proxmenux-*.link carregando o cabeçalho ProxMenux do /etc/systemd/network/. Qualquer arquivo .link fornecido por outro pacote ou escrito pelo usuário é deixado no lugar. Os nomes da interface retornam ao comportamento padrão do systemd na próxima reinicialização."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Registo",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Otimização do journald",
|
||||
"restores": "Reescreve /etc/systemd/journald.conf com predefinições originais e reinicia systemd-journald."
|
||||
},
|
||||
{
|
||||
"tool": "Otimização do Logrotate",
|
||||
"restores": "Restaura /etc/logrotate.conf do arquivo .bak capturado antes da mudança."
|
||||
},
|
||||
{
|
||||
"tool": "Log2RAM",
|
||||
"restores": "Para e desativa o serviço e o timer. Purga trabalhos de cron, unidades systemd, binários, arquivos de configuração e o diretório /var/log.hdd. Também desinstala o pacote apt se ele foi instalado dessa forma."
|
||||
},
|
||||
{
|
||||
"tool": "TRIM automático do ZFS",
|
||||
"restores": "Lê /usr/local/share/proxmenux/zfs_autotrim_pools, a lista dos pools realmente alterados, e executa zpool set autotrim=off em cada um. Preserva autotrim ativado manualmente antes do ProxMenux."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Shell & aparência",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Personalização do Bashrc",
|
||||
"restores": "Restaura /root/.bashrc do backup .bak. Se não existir backup, remove o bloco PMX_CORE_BASHRC por marcadores."
|
||||
},
|
||||
{
|
||||
"tool": "Banner MOTD personalizado",
|
||||
"restores": "Restaura o conteúdo original exato /etc/motd mantido sob /usr/local/share/proxmenux, remove o arquivo quando ele não existia antes, ou remove com segurança o marcador legado ao migrar uma instalação mais antiga."
|
||||
},
|
||||
{
|
||||
"tool": "Fastfetch",
|
||||
"restores": "Remove binário, diretório de configuração, integração update-motd e bloco delimitado BEGIN FASTFETCH / END FASTFETCH de /root/.bashrc, ~/.profile, /etc/profile e /etc/profile.d/fastfetch.sh. Purga o pacote apt se instalado."
|
||||
},
|
||||
{
|
||||
"tool": "Figurine",
|
||||
"restores": "Remove o binário, a entrada profile.d e o bloco de aliases em bashrc/profile."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Hardware e virtualização",
|
||||
"items": [
|
||||
{
|
||||
"tool": "IOMMU / VFIO",
|
||||
"restores": "Remove os módulos vfio de /etc/modules, as entradas de bloqueio dos controladores nouveau / radeon / nvidia e os parâmetros intel_iommu=on / amd_iommu=on / iommu=pt / pcie_acs_override de /etc/kernel/cmdline (ZFS) ou do GRUB. Reconstrói initramfs."
|
||||
},
|
||||
{
|
||||
"tool": "Correcções AMD CPU (Ryzen/EPYC)",
|
||||
"restores": "Remove idle=nomwait da linha de comandos do kernel (ZFS) ou GRUB e as opções ignore_msrs / report_ignored_msrs de /etc/modprobe.d/kvm.conf."
|
||||
},
|
||||
{
|
||||
"tool": "Agente convidado para host Proxmox virtualizado",
|
||||
"restores": "Lê /usr/local/share/proxmenux/guest_agent.pkg e purga o pacote registado do host. O instalador escolhe qemu-guest-agent, open-vm-tools ou virtualbox-guest-utils pelo hipervisor. Sem registo, tenta esses três pacotes. Atua no host Proxmox aninhado, não em modelos de convidados."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Armazenamento",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Dimensionamento do ARC do ZFS",
|
||||
"restores": "Remove /etc/modprobe.d/99-zfsarc.conf, restaura *.conf externos em conflito guardados em /usr/local/share/proxmenux/backups/zfs_arc/, reconstrói initramfs e executa proxmox-boot-tool refresh em hosts systemd-boot."
|
||||
},
|
||||
{
|
||||
"tool": "Snapshots automáticos do ZFS",
|
||||
"restores": "Remove as entradas cron escritas pelo script e oferece apt purge zfs-auto-snapshot. Os instantâneos existentes nos pools são preservados; remova-os separadamente se necessário."
|
||||
},
|
||||
{
|
||||
"tool": "Limites de velocidade do vzdump",
|
||||
"restores": "Restaura /etc/vzdump.conf do .bak a instalação criada, trazendo de volta bwlimit e ionice para seus valores pré-ProxMenux."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Serviços & extras",
|
||||
"items": [
|
||||
{
|
||||
"tool": "Sincronização do Tempo",
|
||||
"restores": "Define o fuso- horário de volta para UTC (padrão seguro) via timedatectl."
|
||||
},
|
||||
{
|
||||
"tool": "Geração de entropia (haveged)",
|
||||
"restores": "Para, desativa e purga o pacote haveged."
|
||||
},
|
||||
{
|
||||
"tool": "kexec (reiniciações rápidas)",
|
||||
"restores": "Desativa kexec-pve.service, remove o ficheiro da unidade e o alias reboot-quick de /root/.bash_profile e purga kexec-tools."
|
||||
},
|
||||
{
|
||||
"tool": "RPC / rpcbind Desabilitar",
|
||||
"restores": "Restaura rpcbind.service e rpcbind.socket independentemente para os estados ativados/desativados e ativos/inativos registrados antes de ProxMenux os alterar."
|
||||
},
|
||||
{
|
||||
"tool": "pigz (paralelo gzip)",
|
||||
"restores": "Restaura o gzip original de gzip.distrib, remove o desvio dpkg e /bin/pigzwrapper, comenta a linha pigz em /etc/vzdump.conf e executa apt purge pigz após verificar gzip."
|
||||
},
|
||||
{
|
||||
"tool": "Serviços de alta disponibilidade",
|
||||
"restores": "Para e desactiva pve-ha-lrm, pve-ha-crm e corosync. Grupos HA existentes e definições de recursos não são excluídos — remova-os da interface web se você não precisar mais deles."
|
||||
},
|
||||
{
|
||||
"tool": "repositório Ceph",
|
||||
"restores": "Purga os pacotes Ceph instalados por esta opção, remove o deb822 /etc/apt/sources.list.d/ceph.sources no PVE 9 (ou a lista de Ceph no PVE 8) e atualiza o cache APT."
|
||||
},
|
||||
{
|
||||
"tool": "OVH RTM (monitorização)",
|
||||
"restores": "Purga pacotes correspondentes a ovh-rtm*, rtm e rtm-*, remove /etc/rtm e a entrada RTM do registo. Restos Puppet em /etc/puppet/ podem exigir inspeção e limpeza manual; o diretório não é eliminado. Fora da OVH, o instalador normalmente não altera nada."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"edge": {
|
||||
"heading": "Casos particulares e limitações",
|
||||
"packageTitle": "A reinstalação afeta pacotes Proxmox em utilização",
|
||||
"packageBody": "Se as cópias ProxMenux não conseguirem reverter <strong>Remoção do aviso de subscrição</strong>, a alternativa reinstala <code>pve-manager</code>, <code>proxmox-widget-toolkit</code>, <code>libjs-extjs</code> e <code>libpve-http-server-perl</code> com <code>--force-confnew</code>. Afeta a interface em uso: atualize o navegador e aguarde alguns segundos pela reconexão. Evite fazê-lo durante migrações ou clonagens.",
|
||||
"rebootTitle": "Nomes persistentes e VFIO precisam de uma reinicialização",
|
||||
"rebootBody": "Removendo ProxMenux's <code>10-proxmenux-*.link</code> ficheiros (<em>Nomes de Interface Persistentes</em>) e reversão <em>IOMMU/VFIO</em> não afetam o sistema de execução — eles só importam após uma reinicialização. ProxMenux define a bandeira de reinicialização automaticamente para estes.",
|
||||
"perItemTitle": "Podes reverter uma coisa e ficar com o resto.",
|
||||
"perItemBody": "O desinstalador opera por item. Se você só quiser remover Log2RAM, mas manter o ajuste de rede e mudanças bashrc, marque apenas <em>Log2RAM</em>. Nada mais é tocado, e o registro é atualizado em conformidade."
|
||||
},
|
||||
"inspect": {
|
||||
"heading": "Inspecionar o registro manualmente",
|
||||
"intro": "Se você quiser ver o que é rastreado sem abrir o menu:",
|
||||
"outro": "Cada entrada <code>\"tool\": true</code> corresponde a algo ProxMenux aplicado e pode reverter. Remover uma entrada manualmente não é recomendado — use sempre o menu, que também executa a função reversão em vez de apenas esquecer a mudança.",
|
||||
"reinstallTitle": "Reinstalar após desinstalar",
|
||||
"reinstallBody": "Reverter uma otimização não impede que você a aplique mais tarde. Abra <link>o menu Post-Install</link> novamente e execute Automatizado ou Personalizável – o registro irá rastrear o novo estado."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Pós- instalação automatizada",
|
||||
"href": "/docs/post-install/automated",
|
||||
"tail": " — reaplicar a configuração de base recomendada."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — escolher um subconjunto diferente."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar ProxMenux",
|
||||
"href": "/docs/settings/uninstall-proxmenux",
|
||||
"tail": " — operação diferente: remove o ProxMenux em si, não as suas otimizações aplicadas."
|
||||
},
|
||||
{
|
||||
"label": "Visão geral da pós-instalação",
|
||||
"href": "/docs/post-install",
|
||||
"tail": "."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Aplicar atualizações disponíveis — Otimizações pós-instalação | Documentação ProxMenux",
|
||||
"description": "Como o ProxMenux detecta quando uma otimização pós-instalação (Log2Ram, Configurações de Memória, Limites de Sistema, Logrotate, Ajuste de Rede...) foi atualizada a montante, e como aplicar a nova versão — do menu Post-Install ou do painel Monitor."
|
||||
},
|
||||
"header": {
|
||||
"title": "Aplicar atualizações disponíveis",
|
||||
"description": "Quando uma otimização pós-instalação (Log2Ram, definições de memória, limites do sistema, Logrotate…) tem uma versão no disco mais recente que a registada no host, o ProxMenux apresenta-a como atualização disponível. Pode aplicá-la pelo menu pós-instalação dos scripts ou pelo painel Monitor. Ambos executam novamente a mesma função e atualizam o registo.",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que é isto?",
|
||||
"body": "As otimizações pós-instalação ProxMenux têm versões, por exemplo <code>Log2ram SSD Protection v1.2</code>. O host regista as otimizações ativas e as suas versões em <code>/usr/local/share/proxmenux/installed_tools.json</code>. Quando uma nova versão ProxMenux atualiza uma otimização, deteta a diferença e propõe reaplicar só essa, sem repetir toda a pós-instalação."
|
||||
},
|
||||
"why": {
|
||||
"heading": "Por que isto existe",
|
||||
"body": "As otimizações pós-instalação recebem melhorias: ajustes sysctl, limites Logrotate mais rigorosos, novas regras de dimensão Log2RAM ou correções de casos extremos. Sem esta via, era necessário repetir o script, que reaplica <em>todas</em> as otimizações, ou abdicar da melhoria. Aplicar atualizações disponíveis permite escolher individualmente só as que mudaram de versão."
|
||||
},
|
||||
"detection": {
|
||||
"heading": "Como as atualizações são detectadas",
|
||||
"steps": [
|
||||
{
|
||||
"title": "Scripts com versão no disco",
|
||||
"body": "Cada função pós-instalação declara sua versão dentro do script (<code>scripts/post_install/auto_post_install.sh</code> e <code>scripts/post_install/customizable_post_install.sh</code>). Um scanner extrai estas versões da fonte no disco."
|
||||
},
|
||||
{
|
||||
"title": "Registo versionado na máquina",
|
||||
"body": "Quando o operador aplicou cada otimização, a chamada <code>register_tool</code> correspondente escreveu a versão ativa em <code>/usr/local/share/proxmenux/installed_tools.json</code>. Esse arquivo é a fonte da verdade para \"o que está ativo neste host agora\"."
|
||||
},
|
||||
{
|
||||
"title": "Monitor compara ambos os lados",
|
||||
"body": "Na inicialização e a cada 24h, o Monitor compara versões de disco com versões de registro. Qualquer incompatibilidade produz uma entrada em <code>/usr/local/share/proxmenux/updates_available.json</code>. Esse arquivo dirige tanto a entrada de menu Post-Install quanto o cartão de painel Monitor."
|
||||
},
|
||||
{
|
||||
"title": "Uma notificação por nova versão",
|
||||
"body": "Se houver pelo menos uma atualização pendente, Monitor envia uma única notificação agrupada, por exemplo <em>«4 atualizações de otimizações ProxMenux disponíveis»</em>, com uma linha por ferramenta no formato <code>name (vX → vY)</code>, como nos pacotes Proxmox. Não a repete diariamente para o mesmo conjunto: só uma nova versão ou nova ferramenta na lista volta a ativá-la."
|
||||
}
|
||||
]
|
||||
},
|
||||
"pathA": {
|
||||
"heading": "Caminho A — Do menu pós- instalação",
|
||||
"intro": "No menu principal ProxMenux, abra <strong>Configurações pós-instalação do Proxmox</strong>. Havendo atualizações pendentes, surge <strong>Aplicar atualizações disponíveis (N)</strong> acima de <em>Desinstalar otimizações</em>. O número indica quantas têm versão no disco mais recente que a registada. Se tudo estiver atualizado, a entrada fica oculta.",
|
||||
"menuAlt": "Post-Install Scripts menu mostrando a entrada condicional 'Aplicar atualizações disponíveis (N)' posicionado logo acima 'Desinstalar otimizações', com o crachá de contagem indicando quantas otimizações têm uma versão mais recente no disco",
|
||||
"menuCaption": "A entrada <em>Aplicar atualizações disponíveis (N)</em> só renderiza quando pelo menos uma otimização tem uma atualização pendente — ela esconde quando o host está atual.",
|
||||
"checklistBody": "Abre uma lista com todas as atualizações pendentes no formato <code>name (vX → vY)</code>. Estão todas selecionadas por predefinição; desmarque as que não pretende aplicar agora.",
|
||||
"checklistAlt": "Janela Aplicar atualizações disponíveis com uma linha por otimização pendente, nome e mudança de versão (atual → disponível). Todas as linhas estão selecionadas.",
|
||||
"checklistCaption": "Escolha individualmente as otimizações a atualizar. O mesmo motor de Automatizado e Personalizável reaplica cada função em segundo plano e atualiza a versão registada."
|
||||
},
|
||||
"pathB": {
|
||||
"heading": "Caminho B — Do painel do monitor",
|
||||
"intro": "As mesmas atualizações aparecem em Monitor, em <link>Configurações → Otimizações ProxMenux</link>. A ficha mostra um <strong>contador de atualizações</strong> pendentes que abre o seletor por otimização. Cada ferramenta também tem a sua ação de atualização.",
|
||||
"imageAlt": "Ficha Otimizações ProxMenux nas configurações Monitor com contador de atualizações pendentes que abre o seletor e ações de atualização por ferramenta",
|
||||
"imageCaption": "A ficha Otimizações de Monitor permite aceder às atualizações pelo contador quando existe uma versão mais recente no disco, sem acesso à shell."
|
||||
},
|
||||
"applying": {
|
||||
"heading": "O que acontece ao aplicar",
|
||||
"steps": [
|
||||
{
|
||||
"title": "Repetir a função pós-instalação",
|
||||
"body": "A função escolhida volta a ser executada no host. Como é <strong>idempotente</strong>, não duplica a configuração: substitui a versão anterior pela nova, incluindo ficheiros sysctl, configurações adicionais e unidades de serviços."
|
||||
},
|
||||
{
|
||||
"title": "Atualiza o registro",
|
||||
"body": "A chamada <code>register_tool</code> dentro da função escreve a nova versão em <code>installed_tools.json</code>. A próxima varredura não vê mais um descompasso e a entrada de atualização desaparece tanto do menu quanto do cartão Monitor."
|
||||
},
|
||||
{
|
||||
"title": "Sem reiniciar, a menos que a função o diga",
|
||||
"body": "A maioria das actualizações produz efeitos imediatamente. Atualizações que tocam módulos do kernel, nomes de interface persistentes ou VFIO mostram o mesmo prompt de reinicialização que uma nova instalação seria."
|
||||
},
|
||||
{
|
||||
"title": "Actualizar o registo enviado para o Monitor",
|
||||
"body": "No fim do lote, o menu envia um pedido POST a <code>http://127.0.0.1:8008/api/updates/post-install/scan</code> para reconstruir <code>/usr/local/share/proxmenux/updates_available.json</code>. Após aplicar todas as atualizações, desaparecem o contador da ficha Otimizações e a entrada condicional da shell, sem esperar pelo próximo scan. A ficha continua disponível."
|
||||
}
|
||||
],
|
||||
"jqTitle": "jq é necessário",
|
||||
"jqBody": "A lista de verificação Caminho A baseia-se em <code>jq</code> para processar as atualizações pendentes JSON. Se o <code>jq</code> estiver faltando, o fluxo sai silenciosamente — você verá a entrada do menu com uma contagem, mas nada aconteceria depois de escolher linhas. Em qualquer instalação moderna Proxmox <code>jq</code> está presente; se em dúvida executar <code>apt install -y jq</code>."
|
||||
},
|
||||
"differs": {
|
||||
"heading": "Como difere dos outros caminhos",
|
||||
"headerPath": "Path",
|
||||
"headerScope": "Escopo",
|
||||
"headerWhen": "Quando faz sentido",
|
||||
"rows": [
|
||||
{
|
||||
"pathLabel": "Automatizado",
|
||||
"pathHref": "/docs/post-install/automated",
|
||||
"scope": "Reaplica <em>todas</em> as otimizações do conjunto.",
|
||||
"when": "Host novo ou reaplicação completa da base de um nó totalmente gerido."
|
||||
},
|
||||
{
|
||||
"pathLabel": "Personalizável",
|
||||
"pathHref": "/docs/post-install/customizable",
|
||||
"scope": "Escolha no catálogo completo.",
|
||||
"when": "Escolher exatamente as otimizações ativas no host."
|
||||
},
|
||||
{
|
||||
"pathLabel": "Aplicar atualizações disponíveis",
|
||||
"pathHref": null,
|
||||
"scope": "Só as otimizações com versão mais recente no disco.",
|
||||
"when": "Mantenha as otimizações já instaladas atuais sem tocar no resto."
|
||||
},
|
||||
{
|
||||
"pathLabel": "Desinstalar otimizações",
|
||||
"pathHref": "/docs/post-install/uninstall",
|
||||
"scope": "Inverta a otimização e remova sua entrada de registro.",
|
||||
"when": "Retroceda uma mudança específica."
|
||||
}
|
||||
]
|
||||
},
|
||||
"notifTitle": "Controlo da notificação",
|
||||
"notifBody": "O evento <em>Atualizações de otimizações ProxMenux disponíveis</em> anuncia as atualizações pendentes. Está ativo por predefinição em cada canal e pode ser silenciado por canal em <link>Configurações → Notificações</link>. Só dispara uma vez por conjunto diferente de atualizações, não em cada scan de 24 horas."
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pós-instalação: Virtualização | Documentação ProxMenux",
|
||||
"description": "Opções de virtualização no script pós-instalação personalizável ProxMenux: auto-instale o agente convidado certo se o Proxmox correr dentro de um VM, e habilite o IOMMU / VFIO para que você possa passar dispositivos PCI (GPUs, NICs, HBAS) através de suas próprias VMs."
|
||||
},
|
||||
"header": {
|
||||
"title": "Post-Install: Virtualização",
|
||||
"section": "Configurações pós-instalação do Proxmox"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta categoria abrange",
|
||||
"body": "Duas opções independentes. <strong>Instalar o agente convidado adequado</strong> ajuda quando o próprio Proxmox corre dentro de outro hipervisor. <strong>Ativar suporte VFIO IOMMU</strong> interessa à maioria dos utilizadores: ativa as funções do kernel para atribuir diretamente uma GPU, HBA ou placa de rede a uma VM com desempenho quase nativo."
|
||||
},
|
||||
"guestAgent": {
|
||||
"heading": "Instale o agente convidado relevante",
|
||||
"intro": "Deteta o ambiente de virtualização do host Proxmox através de <code>systemd-detect-virt</code> e <code>dmidecode</code> e instala as ferramentas de convidado adequadas para comunicar com o hipervisor externo: encerramento ordenado, sincronização do relógio, informação de IP, etc.",
|
||||
"headerDetected": "Máquina detectada",
|
||||
"headerPackage": "Pacote instalado",
|
||||
"rows": [
|
||||
{
|
||||
"detected": "QEMU / KVM",
|
||||
"package": "qemu-guest-agent"
|
||||
},
|
||||
{
|
||||
"detected": "VMware (ESXi, Workstation)",
|
||||
"package": "open-vm-tools"
|
||||
},
|
||||
{
|
||||
"detected": "VirtualBox",
|
||||
"package": "virtualbox-guest-utils"
|
||||
},
|
||||
{
|
||||
"detected": "Hardware físico (nenhum)",
|
||||
"package": "— no-op, nada instalado"
|
||||
}
|
||||
],
|
||||
"skipTitle": "Ignore esta opção se o Proxmox correr diretamente no hardware",
|
||||
"skipBody": "Se o Proxmox for executado diretamente no hardware (o caso comum), assinalar esta opção é um no-op — o detector devolve <code>none</code> e o script sai sem alterações. A opção só importa para a minoria de configurações que executam Proxmox <em> como um guest</em> para testes ou laboratórios."
|
||||
},
|
||||
"vfio": {
|
||||
"heading": "Habilitar suporte VFIO IOMMU",
|
||||
"intro": "Ativa IOMMU no host e carrega os módulos para passthrough PCI (<code>vfio</code>, <code>vfio_iommu_type1</code>, <code>vfio_pci</code>). Pode então atribuir um dispositivo físico a uma VM, que terá acesso direto com desempenho quase nativo.",
|
||||
"whoTitle": "Quem precisa disto?",
|
||||
"whoItems": [
|
||||
"Quer atribuir uma GPU a uma VM Windows para jogos ou a uma VM macOS.",
|
||||
"Você tem um NIC de 10G dedicado para um firewall/roteador VM (OPNsense, pfSense).",
|
||||
"Você quer passar um HBA diretamente para um TrueNAS / Unraid VM para ZFS em discos nus.",
|
||||
"Você está planejando usar <em>Coral TPU</em>, uma placa de captura, ou um dongle SDR em um VM."
|
||||
],
|
||||
"whoOutro": "Se nada disso se aplicar, você pode ignorar esta opção com segurança. Para passagem para um <strong>LXC</strong> (não um VM), o IOMMU <em>não</em> é necessário.",
|
||||
"doesTitle": "O que o ProxMenux faz",
|
||||
"doesIntro": "A função está ciente de boot-loader: detecta se Proxmox está em ZFS (systemd-boot) ou LVM/ext4 (GRUB) e escreve para o arquivo direito. Também é idempotente — se os parâmetros já estão presentes, nada é adicionado.",
|
||||
"headerBoot": "Tipo de arranque",
|
||||
"headerFile": "Ficheiro alterado",
|
||||
"headerPost": "Passo de pós- atualização",
|
||||
"bootRows": [
|
||||
{
|
||||
"boot": "systemd-boot (ZFS)",
|
||||
"file": "/etc/kernel/cmdline",
|
||||
"post": "proxmox-boot-tool refresh"
|
||||
},
|
||||
{
|
||||
"boot": "GRUB (LVM/ext4)",
|
||||
"file": "/etc/default/grub",
|
||||
"post": "update-grub"
|
||||
}
|
||||
],
|
||||
"kernelIntro": "Parâmetros do kernel adicionados:",
|
||||
"modulesIntro": "Módulos de kernel adicionados ao <code>/etc/modules</code>:",
|
||||
"blacklistIntro": "Conflitantes drivers na lista negra em <code>/etc/modprobe.d/blacklist.conf</code>:",
|
||||
"blacklistTitle": "A lista negra de drivers GPU entra em conflito com o uso do GPU no lado do host",
|
||||
"blacklistBody": "A lista de bloqueio impede o kernel do host de associar <em>qualquer</em> controlador GPU, permitindo ao VFIO assumir a GPU. É o pretendido para passthrough a uma VM, mas é o <strong>oposto</strong> do necessário para <link>instalar controladores NVIDIA no host</link>, por exemplo para transcodificação LXC. Escolha um caminho por GPU:",
|
||||
"pathItems": [
|
||||
"<strong>GPU → VM:</strong> habilite VFIO/IOMMU aqui, deixe os drivers GPU na lista negra.",
|
||||
"<strong>GPU → LXC (ou host):</strong> ignore esta opção, use a instalação NVIDIA no host e não bloqueie nvidia/nouveau.",
|
||||
"<strong>Dois GPUs:</strong> um pode ir para um VM e o outro para um LXC, mas você precisará de uma configuração mais fina (ligar apenas um cartão para <code>vfio-pci</code> por ID PCI). A lista negra padrão é muito ampla para este caso — edite <code>blacklist.conf</code> depois."
|
||||
],
|
||||
"acsTitle": "Sobre o pcie_acs_override — saiba o que está habilitando",
|
||||
"acsBody": "<code>pcie_acs_override=downstream,multifunction</code> relaxa a verificação dos Serviços de Controle de Acesso PCIe. Ele permite que o kernel divida grupos IOMMU que o firmware reporta como monolítico, que às vezes é a única maneira de passar através de um dispositivo de um grupo sem arrastar o resto. O trade-off é o isolamento reduzido <strong> entre dispositivos</strong>: um VM malicioso ou comprometido com passagem tem uma superfície de ataque maior via DMA. Tudo bem para um laboratório doméstico; pense duas vezes antes de habilitar um host que executa cargas de trabalho não confiáveis. Se você não precisar, remova esse token do <code>/etc/kernel/cmdline</code> ou <code>/etc/default/grub</code> após o script correr e execute novamente a etapa de atualização do carregador de inicialização.",
|
||||
"rebootTitle": "Reinício necessário",
|
||||
"rebootBody": "IOMMU, módulos VFIO e lista de bloqueio entram em vigor após regenerar initramfs e reiniciar. O script executa <code>update-initramfs -u -k all</code>, atualiza o carregador de arranque e indica «reinício necessário» para que Personalizável o proponha no fim.",
|
||||
"verifyTitle": "Verificação após reiniciar",
|
||||
"revertTitle": "Reversível do menu Desinstalar",
|
||||
"revertBody": "<link>Desinstalar otimizações</link> reverte todas as alterações: remove os parâmetros IOMMU de <code>/etc/kernel/cmdline</code> ou GRUB, os módulos VFIO de <code>/etc/modules</code> e as entradas de bloqueio dos controladores, depois reconstrói initramfs. É necessário reiniciar para aplicar a reversão."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"label": "Adicionar GPU à VM (passthrough)",
|
||||
"href": "/docs/hardware/gpu-vm-passthrough",
|
||||
"tail": " — passo seguinte natural uma vez activado o IOMMU + VFIO."
|
||||
},
|
||||
{
|
||||
"label": "Adicionar Controlador ou NVMe ao VM",
|
||||
"href": "/docs/disk-manager/add-controller-nvme-vm",
|
||||
"tail": " — a mesma infra-estrutura de passagem para os controladores de armazenamento."
|
||||
},
|
||||
{
|
||||
"label": "Comandos de passagem GPU",
|
||||
"href": "/docs/help-info/gpu-commands",
|
||||
"tail": " — Referência da verificação IOMMU."
|
||||
},
|
||||
{
|
||||
"label": "Desinstalar otimizações",
|
||||
"href": "/docs/post-install/uninstall",
|
||||
"tail": " — reverter IOMMU / VFIO de forma limpa."
|
||||
},
|
||||
{
|
||||
"label": "Pós-instalação personalizável",
|
||||
"href": "/docs/post-install/customizable",
|
||||
"tail": " — voltar ao menu superior."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Fail2Ban | Documentação do ProxMenux",
|
||||
"description": "Instalar Fail2Ban com três jails sintonizado para Proxmox (SSH agressivo, Proxmox UI 8006, ProxMenux Monitor 8008). Inclui o journald MaxLevelStore correção, serviços de log personalizados para confiabilidade, backend nftables/iptables detectado automaticamente e SSH MaxAuthTries endurecimento.",
|
||||
"ogTitle": "Fail2Ban | Documentação do ProxMenux",
|
||||
"ogDescription": "Proteção contra força bruta para SSH e interfaces web Proxmox, com correções do journald e do backend específicas para Proxmox."
|
||||
},
|
||||
"header": {
|
||||
"title": "Fail2Ban",
|
||||
"description": "Instala Fail2Ban para Proxmox: três jails (SSH agressivo, interface Proxmox em 8006, ProxMenux Monitor em 8008 e proxy inverso), correção do nível do journald para guardar eventos SSH, dois serviços que copiam o journal para ficheiros para contornar um problema do backend systemd, deteção do backend de firewall e reforço SSH com MaxAuthTries.",
|
||||
"section": "Segurança"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Instala Fail2Ban dos repositórios Debian e cria uma configuração Proxmox que protege de imediato SSH, interface web Proxmox e ProxMenux Monitor. Se detetar uma instalação existente, oferece um menu de gestão para reinstalar ou remover."
|
||||
},
|
||||
"firstLaunch": {
|
||||
"heading": "Janela de primeiro lançamento",
|
||||
"body": "Sem Fail2Ban instalado, o script resume num diálogo o que vai instalar e configurar. Cancelar termina sem alterações; confirmar inicia a instalação.",
|
||||
"imageAlt": "Confirmação de instalação do Fail2Ban com três jails, correção do journald e reforço SSH"
|
||||
},
|
||||
"jails": {
|
||||
"heading": "As três jails",
|
||||
"headerJail": "Jail",
|
||||
"headerProtects": "Protege",
|
||||
"headerRetries": "Tentativas / Janela",
|
||||
"headerBan": "Duração do bloqueio",
|
||||
"rows": [
|
||||
{
|
||||
"jail": "[sshd]",
|
||||
"protects": "SSH (modo aggressive — inclui ddos, mode, normal)",
|
||||
"retries": "2 / 60 min",
|
||||
"ban": "9 horas"
|
||||
},
|
||||
{
|
||||
"jail": "[proxmox]",
|
||||
"protects": "Interface web do Proxmox (porta 8006)",
|
||||
"retries": "3 / 10 min",
|
||||
"ban": "1 hora"
|
||||
},
|
||||
{
|
||||
"jail": "[proxmenux]",
|
||||
"protects": "ProxMenux Monitor (porta 8008 + proxy inverso http/https)",
|
||||
"retries": "3 / 10 min",
|
||||
"ban": "1 hora"
|
||||
}
|
||||
],
|
||||
"outro": "Defaults globais de <code>jail.local</code>: <code>ignoreip = 127.0.0.1/8 ::1</code>, <code>ignoreself = true</code>,<code> bantime = 86400</code> (fallback de 24h para prisões que não o sobrepõem), <code>maxretry = 2</code>, <code>findtime = 1800</code>."
|
||||
},
|
||||
"journald": {
|
||||
"heading": "Por que a correção journald é importante",
|
||||
"intro": "O Proxmox fornece <code>/etc/systemd/journald.conf</code> com <codeNw>MaxLevelStore=warning</codeNw>. O journald descarta as mensagens de nível <em>inferior</em> a warning antes de as guardar. SSH e PAM emitem falhas de autenticação nos níveis <em>info</em> / <em>notice</em>, pelo que:",
|
||||
"diagram": {
|
||||
"sshLabel": "SSH / PAM",
|
||||
"sshDetail": "falha de autenticação\n(nível info / notice)",
|
||||
"journaldLabel": "journald",
|
||||
"journaldDetail": "MaxLevelStore=warning\n→ evento descartado sem aviso",
|
||||
"fail2banLabel": "Fail2Ban",
|
||||
"fail2banDetail": "não vê nada\n→ nunca proíbe nada",
|
||||
"arrowLabel": "Proxmox por omissão"
|
||||
},
|
||||
"afterDiagram": "O instalador detecta isso e escreve um drop-in em <codeXs>/etc/systemd/journald.conf.d/proxmenux-loglevel.conf</codeXs> elevando tanto <code>MaxLevelStore</code> quanto <code>MaxLevelSyslog</code> para <code>info</code>:",
|
||||
"code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info",
|
||||
"outro": "Em seguida, reinicia <code>systemd-journald</code>. O drop-in é removido ao desinstalar, restaurando o padrão original do Proxmox."
|
||||
},
|
||||
"loggers": {
|
||||
"heading": "Porquê dois serviços de registo personalizado",
|
||||
"intro1": "O Fail2Ban pode ler diretamente o journal do systemd (<code>backend = systemd</code>), mas no Proxmox este backend tem problemas conhecidos com processos worker de <code>pvedaemon</code>: os eventos de autenticação aparecem no journal mas nem sempre são detetados. O problema também afeta ocasionalmente <code>sshd</code>.",
|
||||
"intro2": "O ProxMenux cria dois pequenos serviços systemd que acompanham as unidades relevantes com <code>journalctl -f</code> e acrescentam cada linha a um ficheiro. O Fail2Ban lê esses ficheiros com o fiável <code>backend = auto</code> (modo ficheiro):",
|
||||
"headerService": "Serviço",
|
||||
"headerSource": "Unidade de origem",
|
||||
"headerOutput": "Ficheiro de saída",
|
||||
"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": "Ambos os serviços são declarados <code>PartOf=fail2ban.service</code> para que eles reiniciar com Fail2Ban e parar com ele. Modo 640 de propriedade do <code>root:adm</code> nos arquivos de log. O terceiro log usado pela cadeia <code>[proxmenux]</code> (<code>/var/log/proxmenux-auth.log</code>) é escrito diretamente pelo aplicativo ProxMenux Monitor Flask — nenhum serviço de registrador necessário para esse."
|
||||
},
|
||||
"backend": {
|
||||
"heading": "Deteção automática do backend de firewall",
|
||||
"intro": "O instalador sonda o host: se o <code>nft list ruleset</code> funcionar, ele escolhe o <code>nftables</code> como ação de ban. Caso contrário, volta para <code>iptables-multiport</code> / <code>iptables-allports</code>. A escolha é escrita em <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": "Reforço SSH: MaxAuthTries",
|
||||
"intro": "O controlo Lynis <strong>SSH-7408</strong> recomenda <code>MaxAuthTries 3</code> em <code>sshd_config</code>. A jail SSH utiliza <code>maxretry = 2</code> para bloquear após falhas repetidas; MaxAuthTries limita as tentativas numa ligação. Este ajuste SSH acrescenta defesa em profundidade, mesmo quando Fail2Ban está parado para manutenção.",
|
||||
"installerIntro": "O instalador:",
|
||||
"items": [
|
||||
"Lê o valor atual do <code>MaxAuthTries</code> (ou padrão para 6 se ausente).",
|
||||
"Guarda-o em <code>/usr/local/share/proxmenux/sshd_maxauthtries_backup</code>.",
|
||||
"Edita <code>sshd_config</code> diretamente: substitui a linha existente, remove o comentário da linha comentada ou acrescenta uma nova.",
|
||||
"Recarrega o <code>sshd</code> (recarregar, não reiniciar, para manter as sessões existentes vivas)."
|
||||
],
|
||||
"outro": "Na desinstalação, o valor original salvo é restaurado e <code>sshd</code> é recarregado novamente."
|
||||
},
|
||||
"manage": {
|
||||
"heading": "Gerenciar uma instalação existente",
|
||||
"intro": "Se o Fail2Ban já estiver instalado quando você abrir o menu, o script detecta-o e mostra um menu de gerenciamento em vez de repetir o instalador:",
|
||||
"headerAction": "Ação",
|
||||
"headerWhat": "O que ele faz",
|
||||
"rows": [
|
||||
{
|
||||
"action": "Reinstalar",
|
||||
"what": "Repete a instalação completa e reescreve todas as jails com os valores atuais do ProxMenux. Utilize quando uma atualização alterar as recomendações."
|
||||
},
|
||||
{
|
||||
"action": "Remover",
|
||||
"what": "Para fail2ban e os dois serviços de registro, limpa o pacote apt, remove todos os jail / arquivos de filtro, exclui o drop-in journald (restaurando o padrão do Proxmox) e restaura o SSH original MaxAuthTries."
|
||||
}
|
||||
]
|
||||
},
|
||||
"verify": {
|
||||
"heading": "Verifica se está a funcionar.",
|
||||
"intro": "Após a instalação, comandos úteis da máquina:",
|
||||
"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": "Resolução de Problemas",
|
||||
"neverBansTitle": "O Fail2Ban é executado mas nunca proíbe nada",
|
||||
"neverBansBody": "Verifique se <code>tail -f /var/log/ssh-auth.log</code> recebe uma entrada após uma tentativa SSH com palavra-passe errada a partir de outra máquina. Caso contrário, consulte <code>systemctl status ssh-auth-logger.service</code>. Se o serviço estiver ativo, veja os eventos recentes com <code>journalctl -u ssh.service -n 50 --no-pager -p info</code> e confirme que o complemento journald permite o nível <em>info</em>.",
|
||||
"monitorEmptyTitle": "A jail ProxMenux Monitor não tem entradas mesmo após inícios de sessão falhados",
|
||||
"monitorEmptyBody": "O <code>[proxmenux]</code> jail lê <code>/var/log/proxmenux-auth.log</code>, que é escrito pelo aplicativo ProxMenux Monitor Flask — não por um criador de logs journald. Se você não executar o Monitor, o arquivo permanecerá vazio e o jail nunca será acionado. Isso é esperado; a configuração jail é inofensiva. Se você executar o Monitor e o log estiver vazio, verifique a configuração de registro do Flask.",
|
||||
"selfBanTitle": "Eu bani-me.",
|
||||
"selfBanIntro": "A partir de uma consola / IPMI / iKVM (ou de outro IP autorizado):",
|
||||
"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": "O apt-get falha: ''Unable to locate package fail2ban''",
|
||||
"aptFailBody": "O host está faltando o Debian repos (comum nas instalações do 'barebones' Proxmox). O instalador detecta isso e escreve <code>/etc/apt/sources.list.d/debian.sources</code> com o codinome certo (<code>bookworm</code> / <code>trixie</code>) antes de tentar novamente. Se ainda falhar, verifique <code>/etc/os-release</code> para <code>VERSION_CODENAME</code> e confirme que o URL do repo está acessível.",
|
||||
"lockoutTitle": "SSH me bloqueia depois de instalar",
|
||||
"lockoutBody": "O instalador define <code>MaxAuthTries=3</code>. Se seu gerenciador de senhas / agente repetir várias chaves, você pode exceder isso em uma única tentativa de conexão. Limite as chaves oferecidas: <code>ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host</code>. Ou aumentar temporariamente o <code>MaxAuthTries</code> em <code>sshd_config</code> enquanto você depura."
|
||||
},
|
||||
"files": {
|
||||
"heading": "Ficheiros gravados",
|
||||
"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": "Relacionado",
|
||||
"monitorLabel": "ProxMenux Monitor → Guia de segurança",
|
||||
"monitorTail": " — instalação pelo painel, estado das jails em direto, IPs bloqueados e ajuste de tentativas e duração do bloqueio por jail no navegador.",
|
||||
"lynisLabel": "Lynis",
|
||||
"lynisTail": " — execute uma auditoria antes e depois para confirmar que o controlo SSH-7408 é cumprido.",
|
||||
"securityLabel": "Visão geral da segurança",
|
||||
"securityTail": " — voltar ao panorama da secção."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Segurança do Proxmox — Fail2Ban e auditoria de reforço com Lynis | ProxMenux",
|
||||
"description": "Duas ferramentas de segurança para Proxmox VE: Fail2Ban (prevenção de intrusões para SSH, interface web do Proxmox e ProxMenux Monitor) e Lynis (auditoria de segurança e reforço do sistema, instalado a partir do repositório original no GitHub).",
|
||||
"ogTitle": "Segurança do Proxmox — Fail2Ban e auditoria de reforço com Lynis",
|
||||
"ogDescription": "Fail2Ban e Lynis para Proxmox VE: prevenção de intrusões e auditoria de reforço, instalados e geridos pelo ProxMenux.",
|
||||
"twitterTitle": "Segurança do Proxmox | ProxMenux",
|
||||
"twitterDescription": "Fail2Ban e Lynis para Proxmox VE: prevenção de intrusões e auditoria de reforço."
|
||||
},
|
||||
"header": {
|
||||
"title": "Segurança",
|
||||
"description": "Duas ferramentas complementares para Proxmox VE: defesa ativa (Fail2Ban bloqueia IPs que atacam SSH ou interfaces web) e auditoria local (Lynis procura falhas de reforço e dá uma pontuação de 0 a 100). Cada ferramenta tem o seu menu de instalação e gestão, com deteção de instalações existentes antes de agir.",
|
||||
"section": "Segurança"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Defesa ativa e auditoria local",
|
||||
"body": "Respondem a perguntas diferentes. <strong>Fail2Ban</strong> responde a <em>«Estamos a ser atacados agora?»</em> observando os registos de autenticação e bloqueando os IPs responsáveis. <strong>Lynis</strong> responde a <em>«Qual é o nível de reforço deste anfitrião?»</em> através de uma auditoria pontual com recomendações concretas. Utilize ambos: Lynis indica o que melhorar e Fail2Ban reage aos ataques em curso."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir o menu",
|
||||
"body": "No menu principal do ProxMenux selecione <strong>Segurança</strong>. Verá o seguinte:",
|
||||
"imageAlt": "Menu de segurança com opções Fail2Ban e Lynis"
|
||||
},
|
||||
"pick": {
|
||||
"heading": "Escolha sua ferramenta",
|
||||
"body": "As duas ferramentas de segurança são independentes — instale uma, ambas ou nenhuma. Cada carta abaixo salta para a seção que explica a ferramenta em detalhes."
|
||||
},
|
||||
"cards": {
|
||||
"fail2ban": {
|
||||
"title": "Fail2Ban",
|
||||
"body": "Prevenção ativa de intrusões. Observa os registos de autenticação SSH e web e bloqueia IPs após falhas repetidas.",
|
||||
"bullets": [
|
||||
"Três jails: SSH, interface Proxmox (8006), ProxMenux Monitor (8008)",
|
||||
"Corrige as predefinições do journald no Proxmox que bloqueiam os registos de autenticação",
|
||||
"Detecta automaticamente nftables / iptables",
|
||||
"Endurecimento de SSH: MaxAuthTries=3 (recomendação Lynis)"
|
||||
]
|
||||
},
|
||||
"lynis": {
|
||||
"title": "Lynis",
|
||||
"body": "Auditor local de segurança. Analisa o anfitrião e apresenta uma pontuação de reforço e sugestões concretas de correção.",
|
||||
"bullets": [
|
||||
"Instalado a partir do repositório original da CISOfy no GitHub (versão mais recente)",
|
||||
"Pontuação de reforço 0–100 e lista de avisos e sugestões",
|
||||
"Auditoria e atualização através do menu",
|
||||
"Concebido apenas para leitura: nunca altera o sistema"
|
||||
]
|
||||
}
|
||||
},
|
||||
"workflowTip": {
|
||||
"title": "Fluxo de trabalho que utiliza ambos",
|
||||
"body": "Execute primeiro Lynis para conhecer a pontuação inicial e as principais recomendações. Aplique as correções desejadas. Depois instale Fail2Ban: implementa automaticamente a proteção SSH contra força bruta e ajusta <code>MaxAuthTries</code> em <code>sshd_config</code> para cumprir o controlo SSH-7408. Execute Lynis novamente para verificar a melhoria."
|
||||
},
|
||||
"fail2banSection": {
|
||||
"heading": "Fail2Ban",
|
||||
"body": "O ProxMenux instala Fail2Ban com uma configuração específica para Proxmox. Além da jail SSH padrão, protege a interface web Proxmox e o ProxMenux Monitor. Contorna dois problemas específicos: uma predefinição do journald que descarta eventos de autenticação e um problema do backend systemd que impede a leitura fiável de certas fontes do registo. A página detalhada explica a instalação, as três jails, a correção do journald, o reforço SSH e a resolução de problemas.",
|
||||
"optionTitle": "Fail2Ban — instalar e gerenciar",
|
||||
"optionDescription": "Três jails pré-configuradas (sshd agressivo, interface Proxmox em 8006, ProxMenux Monitor em 8008 e proxy inverso), deteção de nftables/iptables, correção do journald e reforço SSH com MaxAuthTries."
|
||||
},
|
||||
"lynisSection": {
|
||||
"heading": "Lynis",
|
||||
"body": "O ProxMenux clona Lynis de <code>github.com/CISOfy/lynis</code> para <code>/opt/lynis</code> e disponibiliza-o como <code>/usr/local/bin/lynis</code>. Evita o pacote Debian porque está várias versões principais atrás do projeto original. A página detalhada explica instalação, auditoria, atualização, desinstalação, leitura do relatório e ações sobre os resultados.",
|
||||
"optionTitle": "Lynis — instalar, auditar e gerenciar",
|
||||
"optionDescription": "Instala a versão mais recente do Lynis a partir do repositório oficial CISOfy no GitHub (em vez do pacote Debian mais antigo), executa auditorias com pontuação de reforço e atualiza através de git pull."
|
||||
},
|
||||
"componentStatus": {
|
||||
"heading": "Estado do componente",
|
||||
"body": "Ambos os instaladores registram seu estado em <code>/usr/local/share/proxmenux/components_status.json</code> na categoria <code>security</code>. ProxMenux usa este arquivo para decidir se deve mostrar a instalação ou o menu de gerenciamento em sequências, e os mesmos dados alimentam os painéis no ProxMenux Monitor quando presente."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Lynis | Documentação do ProxMenux",
|
||||
"description": "Instale a versão mais recente do Lynis do repositório oficial CISOfy no GitHub, execute uma auditoria com pontuação de reforço de 0 a 100 e atualize através de git pull. Auditor apenas de leitura: não altera o sistema.",
|
||||
"ogTitle": "Lynis | Documentação do ProxMenux",
|
||||
"ogDescription": "Instale e execute Lynis no Proxmox VE. Instalação do repositório original GitHub, auditoria e atualização."
|
||||
},
|
||||
"header": {
|
||||
"title": "Lynis",
|
||||
"description": "Clona a versão mais recente do Lynis do repositório oficial CISOfy no GitHub, disponibiliza-a como /usr/local/bin/lynis e oferece auditoria, atualização, reinstalação e desinstalação no menu. O auditor apenas lê e apresenta resultados sem alterar o sistema.",
|
||||
"section": "Segurança"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Instala Lynis, o auditor de segurança de código aberto da CISOfy, do repositório GitHub em <code>/opt/lynis</code> e cria um lançador em <code>/usr/local/bin/lynis</code> para o disponibilizar no <code>PATH</code>. Se detetar uma instalação existente, apresenta um menu de auditoria, atualização, reinstalação ou remoção."
|
||||
},
|
||||
"manageMenu": {
|
||||
"heading": "Menu de gestão (após a instalação)",
|
||||
"intro": "Uma vez instalado o Lynis, cada invocação subsequente abre o menu de gerenciamento em vez de repetir o instalador. A partir daqui você inicia uma auditoria, atualização via git pull, reinstalar ou desinstalar:",
|
||||
"imageAlt": "Menu de gerenciamento do Lynis com as opções de auditoria, atualização, reinstalação e remoção"
|
||||
},
|
||||
"whyUpstream": {
|
||||
"heading": "Porquê o repositório oficial GitHub em vez de apt",
|
||||
"intro": "O Debian distribui Lynis através de apt, mas o pacote costuma estar várias versões principais atrás do projeto original. Novos controlos, correções de novos vetores de ataque e recomendações melhoradas chegam primeiro ao GitHub. Lynis é um script shell autónomo, sem compilação nem dependências de instalação além de <code>git</code>; clonar o repositório é o método recomendado pela CISOfy.",
|
||||
"headerSource": "Origem",
|
||||
"headerPath": "Install path",
|
||||
"headerUpdate": "Método de atualização",
|
||||
"headerFresh": "Atualidade da versão",
|
||||
"rows": [
|
||||
{
|
||||
"sourceRich": "<strong>ProxMenux (este programa)</strong>",
|
||||
"path": "/opt/lynis/",
|
||||
"update": "git pull (no menu)",
|
||||
"fresh": "Versão mais recente do projeto original"
|
||||
},
|
||||
{
|
||||
"sourceRich": "<strong>Debian apt</strong>",
|
||||
"path": "/usr/bin/lynis",
|
||||
"update": "apt upgrade",
|
||||
"fresh": "Muitas vezes meses / anos atrás"
|
||||
}
|
||||
]
|
||||
},
|
||||
"install": {
|
||||
"heading": "Como funciona a instalação",
|
||||
"node1Label": "github.com/CISOfy/lynis",
|
||||
"node1Detail": "git clone\n(instale git primeiro, se faltar)",
|
||||
"node2Label": "/opt/lynis/",
|
||||
"node2Detail": "repositório completo\nincluindo o script ./lynis",
|
||||
"node3Label": "/usr/local/bin/lynis",
|
||||
"node3Detail": "lançador:\ncd /opt/lynis && ./lynis $@",
|
||||
"outro": "O lançador é necessário: Lynis precisa de ser executado no próprio diretório porque utiliza caminhos relativos para plugins e perfis. O lançador esconde esse detalhe e permite que <code>lynis audit system</code> funcione a partir de qualquer diretório."
|
||||
},
|
||||
"detection": {
|
||||
"heading": "Caminhos de detecção",
|
||||
"intro": "Antes de mostrar o menu, o script verifica três locais para decidir se Lynis já está presente:",
|
||||
"items": [
|
||||
"<code>/usr/local/bin/lynis</code> — invólucro instalado por ProxMenux",
|
||||
"<code>/opt/lynis/lynis</code> — caminho direto (caso o invólucro tenha sido removido)",
|
||||
"<code>/usr/bin/lynis</code> — versão apt-instalada, se o usuário a instalou dessa forma anteriormente"
|
||||
],
|
||||
"outro": "Se encontrar um destes caminhos, abre o menu de gestão. O script <strong>não</strong> desinstala Lynis instalado por apt; remove apenas o que gere em <code>/opt/lynis</code> e o respetivo lançador."
|
||||
},
|
||||
"audit": {
|
||||
"heading": "Executar uma auditoria",
|
||||
"intro": "No menu de gestão escolha <strong>Executar auditoria de segurança agora</strong>. Equivale a executar:",
|
||||
"code": "lynis audit system --no-colors",
|
||||
"outro": "A auditoria demora de 30 segundos a alguns minutos conforme a dimensão do anfitrião. A saída aparece diretamente no terminal, sem animação de espera. Lynis organiza os controlos por categoria e marca cada teste como <ok>[ OK ]</ok>, <warn>[ WARNING ]</warn> ou <sugg>[ SUGGESTION ]</sugg>. O resumo final apresenta os números principais:",
|
||||
"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": "Ler o relatório",
|
||||
"intro": "As duas seções importantes são <strong>Avisos</strong> (coisas que você deve corrigir em breve) e <strong>Sugestão</strong> (recomendações para melhorar o endurecimento). Cada item carrega um ID de controle como <code>SSH-7408</code> — útil ao pesquisar os documentos Lynis para a lógica e a correção.",
|
||||
"headerMarker": "Marcador",
|
||||
"headerMeaning": "Significado",
|
||||
"headerAction": "Ação",
|
||||
"rows": [
|
||||
{
|
||||
"markerRich": "<strong>OK</strong>",
|
||||
"meaning": "Passado o teste",
|
||||
"action": "Nada."
|
||||
},
|
||||
{
|
||||
"markerRich": "<strong>WARNING</strong>",
|
||||
"meaning": "Problema real, correção recomendada",
|
||||
"action": "Leia a descrição do controle, planeje uma correção"
|
||||
},
|
||||
{
|
||||
"markerRich": "<strong>SUGGESTION</strong>",
|
||||
"meaning": "Melhoria do endurecimento disponível",
|
||||
"action": "Aplicar se se encaixa no seu modelo de ameaça"
|
||||
}
|
||||
],
|
||||
"outro": "Relatório completo e dados legíveis por máquina são escritos para <code>/var/log/lynis.log</code> e <code>/var/log/lynis-report.dat</code> pelo próprio Lynis."
|
||||
},
|
||||
"pairFail2ban": {
|
||||
"title": "Combinar com Fail2Ban",
|
||||
"body": "SSH-7408 (MaxAuthTries) é uma das advertências mais comuns. Instalar o <link>Fail2Ban</link> da ProxMenux o limpa automaticamente porque o instalador configura o <code>MaxAuthTries=3</code> como parte da sua etapa de endurecimento do SSH. Corra Lynis novamente depois para confirmar que o aviso se foi."
|
||||
},
|
||||
"update": {
|
||||
"heading": "Actualizar o Lynis",
|
||||
"body": "No menu, <strong>Atualizar Lynis para a versão mais recente</strong> executa <code>git pull --quiet</code> em <code>/opt/lynis</code>. Se o diretório existir mas não for uma cópia de trabalho Git, por exemplo após copiar ficheiros manualmente, o script reinstala por completo."
|
||||
},
|
||||
"reinstall": {
|
||||
"heading": "Reinstalar / desinstalar",
|
||||
"headerAction": "Ação",
|
||||
"headerWhat": "O que ele faz",
|
||||
"rows": [
|
||||
{
|
||||
"actionRich": "<strong>Reinstalar</strong>",
|
||||
"whatRich": "Remove <code>/opt/lynis</code>, clona novamente do GitHub e recria o lançador. Utilize se a cópia local estiver danificada."
|
||||
},
|
||||
{
|
||||
"actionRich": "<strong>Remover</strong>",
|
||||
"whatRich": "Exclui <code>/opt/lynis</code> e <code>/usr/local/bin/lynis</code>. Os logs em <code>/var/log/lynis*</code> são mantidos (são histórico de auditoria). Um Lynis apt-instalado em <code>/usr/bin/lynis</code> é deixado intocado."
|
||||
}
|
||||
]
|
||||
},
|
||||
"cli": {
|
||||
"heading": "Opções CLI úteis",
|
||||
"intro": "Uma vez instalado, Lynis pode ser invocado diretamente de uma shell com opções extras não expostas pelo menu:",
|
||||
"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": "Resolução de Problemas",
|
||||
"cloneTitle": "git clone falha durante a instalação",
|
||||
"cloneBody": "O host precisa de acesso à rede e DNS para alcançar <code>github.com</code>. A partir de um console: <code>curl -sI https://github.com</code> e <code>git ls-remote https://github.com/CISOfy/lynis.git</code> irá revelar o erro real (DNS, TLS, proxy, URL repo). Se for necessário um proxy, defina <code>https_proxy</code> no ambiente antes de executar novamente o menu.",
|
||||
"notFoundTitle": "lynis: comando não encontrado após a instalação",
|
||||
"notFoundIntro": "O lançador <code>/usr/local/bin/lynis</code> não foi criado ou foi removido. A solução mais rápida é reinstalar a partir do menu. Correção manual:",
|
||||
"notFoundCode": "cat > /usr/local/bin/lynis <<'EOF'\n#!/bin/bash\ncd /opt/lynis && ./lynis \"$@\"\nEOF\nchmod +x /usr/local/bin/lynis",
|
||||
"sshTitle": "A auditoria mostra \"Warning: Test SSH-7408 — MaxAuthTries set incorrectly\"",
|
||||
"sshIntro": "O servidor SSH permite demasiadas tentativas de autenticação por ligação. Instale o <link>Fail2Ban</link> do ProxMenux (que define o <code>MaxAuthTries=3</code> automaticamente) ou edite o <code>/etc/ssh/sshd_config</code> à mão:",
|
||||
"sshCode": "sed -i 's/^#?MaxAuthTries.*/MaxAuthTries 3/' /etc/ssh/sshd_config\nsystemctl reload sshd",
|
||||
"scoreTitle": "A pontuação caiu após uma atualização do Proxmox",
|
||||
"scoreBody": "Executar <code>lynis update info</code> primeiro — uma atualização Lynis pode ter adicionado novos controles que sinalizam a configuração existente. Atualizar Lynis do menu, reauditar e abordar as novas descobertas."
|
||||
},
|
||||
"files": {
|
||||
"heading": "Ficheiros gravados",
|
||||
"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": "Relatório de exemplo",
|
||||
"intro": "O ProxMenux Monitor gera um PDF de várias páginas para cada execução do Lynis no <link>separador Segurança</link>. A primeira página resume a pontuação de reforço, informações do sistema e estado da segurança. As seguintes explicam cada aviso, ordenam sugestões por impacto e incluem o inventário de pacotes utilizado na auditoria.",
|
||||
"imageAlt": "Primeira página do Lynis Security Audit Report PDF — resumo executivo com índice de endurecimento 71/100, bloco de informações do sistema e visão geral da postura de segurança com firewall, scanner de malware e contagem de pacotes instalados",
|
||||
"captionPrefix": "Primeira página de um relatório de amostra. O PDF completo (",
|
||||
"captionLink": "amostra",
|
||||
"captionSuffix": ") continua com advertências detalhadas, sugestões e a lista de pacotes instalados.",
|
||||
"cli": "No lado CLI os mesmos dados estão em <code>/var/log/lynis-report.dat</code> (arquivo plano legível por máquina) e <code>/var/log/lynis.log</code> (o log de execução legível por humanos). O PDF é gerado sob demanda pelo ProxMenux Monitor — executar o <code>lynis</code> a partir da linha de comando não produz um."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/monitor/dashboard/security",
|
||||
"label": "ProxMenux Monitor → Guia de segurança",
|
||||
"tail": " — executar a auditoria, procurar relatórios históricos e baixar o PDF diretamente do painel."
|
||||
},
|
||||
{
|
||||
"href": "/docs/security/fail2ban",
|
||||
"label": "Fail2Ban",
|
||||
"tailRich": " — implementa a proteção SSH à força bruta que Lynis recomenda."
|
||||
},
|
||||
{
|
||||
"href": "/docs/security",
|
||||
"label": "Visão geral da segurança",
|
||||
"tail": " — voltar ao panorama da secção."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "HTTPS para ProxMenux Monitor — certificado do anfitrião Proxmox ou caminhos personalizados | ProxMenux",
|
||||
"description": "Disponibilize o ProxMenux Monitor por HTTPS com o certificado do anfitrião Proxmox (detetado automaticamente, incluindo Let’s Encrypt instalado pelo ACME do Proxmox) ou um certificado personalizado em qualquer caminho do disco.",
|
||||
"ogTitle": "HTTPS para ProxMenux Monitor — Host Proxmox ou certificado personalizado",
|
||||
"ogDescription": "Habilite o HTTPS na porta 8008 com o certificado de host Proxmox ou qualquer par personalizado .pem / .key."
|
||||
},
|
||||
"header": {
|
||||
"title": "HTTPS para ProxMenux Monitor",
|
||||
"description": "Ative HTTPS para o Monitor na porta 8008 com o certificado do anfitrião Proxmox detetado automaticamente ou um certificado personalizado no disco. A opção Proxmox prefere o certificado ACME, se existir, e reutiliza Let’s Encrypt gerido pelo Proxmox sem outra tarefa de renovação.",
|
||||
"section": "Segurança"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que esta página cobre",
|
||||
"body": "Como mudar o Monitor de HTTP para HTTPS no painel Configurações → Painel de segurança, o que cada fonte de certificado realmente aponta no disco, como a opção Proxmox se comporta quando o host tem um certificado Let's Encrypt, e como definir caminhos personalizados se você gerenciar certs fora do Proxmox."
|
||||
},
|
||||
"wheresetting": {
|
||||
"heading": "Onde se encontra a configuração",
|
||||
"body": "Abra o Monitor e vá a <strong>Configurações → Segurança → HTTPS / SSL</strong>. O painel mostra HTTP ou HTTPS e, se HTTPS ainda estiver desativado, as fontes de certificados detetadas.",
|
||||
"imageAlt": "Configurações → Segurança → Painel HTTPS / SSL no Monitor mostrando o estado HTTPS-off, o certificado Proxmox auto-detectado (sujeito, emissor, expiração) e a opção Use Custom Certificate",
|
||||
"caption": "Painel Configurações → Segurança → HTTPS / SSL antes da ativação. O Monitor mostra o certificado utilizado pelo Proxmox e permite escolhê-lo com um clique."
|
||||
},
|
||||
"twoways": {
|
||||
"heading": "Duas maneiras de ativar o HTTPS",
|
||||
"proxmox": {
|
||||
"title": "Usar certificado Proxmox",
|
||||
"summary": "Um clique: o Monitor reutiliza o certificado apresentado pelo Proxmox VE na porta 8006.",
|
||||
"items": [
|
||||
"Detetado automaticamente, sem introduzir caminhos",
|
||||
"Prefere o certificado ACME, se existir; caso contrário usa o certificado autoassinado predefinido",
|
||||
"O Proxmox renova; o Monitor valida e carrega o certificado na próxima nova ligação TLS"
|
||||
]
|
||||
},
|
||||
"custom": {
|
||||
"title": "Usar certificado personalizado",
|
||||
"summaryRich": "Aponte o monitor em um par <code>.pem</code> / <code>.key</code> em qualquer lugar no disco.",
|
||||
"items": [
|
||||
"Apenas caminhos absolutos (o processo Monitor deve ser capaz de ler ambos)",
|
||||
"Útil para certificados de <code>certbot</code>, <code>acme.sh</code> ou certificados wildcard",
|
||||
"A renovação fica a seu cargo: reinicie o Monitor quando os ficheiros mudarem"
|
||||
]
|
||||
}
|
||||
},
|
||||
"proxmoxCert": {
|
||||
"heading": "Certificado Proxmox — o que ele realmente aponta",
|
||||
"intro": "Proxmox VE mantém dois pares de certificados em <code>/etc/pve/local/</code>:",
|
||||
"table": {
|
||||
"headers": {
|
||||
"file": "Arquivo",
|
||||
"origin": "Origem",
|
||||
"when": "Quando o Monitor o usa"
|
||||
},
|
||||
"rows": [
|
||||
{
|
||||
"fileRich": "<code>pveproxy-ssl.pem</code><br /><code>pveproxy-ssl.key</code>",
|
||||
"originRich": "Certificado personalizado carregado através da UI Proxmox — incluindo o certificado Let's Encrypt emitido sob <em>Datacenter → Node → Certificados → ACME</em>.",
|
||||
"when": "Preferido quando ambos os ficheiros existem; o Monitor utiliza o certificado apresentado pelo Proxmox."
|
||||
},
|
||||
{
|
||||
"fileRich": "<code>pve-ssl.pem</code><br /><code>pve-ssl.key</code>",
|
||||
"originRich": "Certificado autoassinado gerado no momento da instalação pelo Proxmox PKI.",
|
||||
"whenRich": "Alternativa quando não existe <code>pveproxy-ssl.pem</code>."
|
||||
}
|
||||
]
|
||||
},
|
||||
"callout": {
|
||||
"title": "A mesma prioridade que o próprio Proxmox",
|
||||
"bodyRich": "<code>pveproxy</code> aplica a mesma seleção. Com a opção Proxmox, o Monitor utiliza o certificado apresentado pela interface Proxmox em 8006, sem cópias nem processo de renovação separado."
|
||||
}
|
||||
},
|
||||
"letsencrypt": {
|
||||
"heading": "Obtendo um certificado Let's Encrypt via Proxmox ACME",
|
||||
"intro": "O Proxmox VE inclui o seu cliente ACME. <em>«Order Certificate Now»</em> guarda o resultado em <code>/etc/pve/local/pveproxy-ssl.pem</code>, que o Monitor lê. Os cinco passos seguintes resumem o <extlink1>guia oficial do Proxmox</extlink1> nos comandos necessários.",
|
||||
"prereqs": {
|
||||
"title": "Pré-requisitos",
|
||||
"items": [
|
||||
"O nó tem um verdadeiro nome DNS (não apenas um IP) apontando para ele.",
|
||||
"<strong>Ou</strong> porta 80 acessível a partir da Internet (validação HTTP-01, a mais simples), <strong>ou</strong> fornecedor DNS com credenciais API (DNS-01, funciona atrás de NAT e suporta certificados wildcard).",
|
||||
"Um endereço de email para a conta ACME."
|
||||
]
|
||||
},
|
||||
"step1": {
|
||||
"heading": "Etapa 1 — Registo da conta ACME",
|
||||
"introRich": "Substitua o email pelo seu. O nome da conta <code>default</code> é apenas um rótulo — você pode usar qualquer string.",
|
||||
"code": "pvenode acme account register default you@example.com",
|
||||
"afterRich": "A Proxmox pede que você aceite os termos de serviço Let's Encrypt. Depois disso, a conta é persistida em <code>/etc/pve/priv/acme/</code> e a guia ACME na GUI irá mostrá-la."
|
||||
},
|
||||
"step2": {
|
||||
"heading": "Passo 2 — Escolha um tipo de desafio",
|
||||
"http01Rich": "<strong>HTTP-01</strong> é o mais fácil: é embutido, sem plugin extra. O Let's Encrypt conecta-se ao <code>http://<your-host>/.well-known/acme-challenge/...</code> na porta 80, então a porta 80 deve estar aberta da internet pública ao seu nó — normalmente uma porta para frente no seu roteador.",
|
||||
"dns01Rich": "<strong>DNS-01</strong> funciona sem expor o porto 80 (bom para homelabs atrás do CG-NAT) e é a única opção para certificados wildcard. Você adiciona um plugin DNS uma vez com o token API do seu provedor. Exemplo Cloudflare:",
|
||||
"code": "pvenode acme plugin add dns cf \\\n --api cloudflare \\\n --data CF_Token=YOUR_CLOUDFLARE_API_TOKEN",
|
||||
"outroRich": "Para outros fornecedores (Gandi, OVH, AWS Route 53, etc.), consulte <code>pvenode acme plugin add dns --help</code>. O Proxmox inclui <extlink2>todos os plugins DNS do acme.sh</extlink2>."
|
||||
},
|
||||
"step3": {
|
||||
"heading": "Passo 3 — Ligar o domínio ao seu nó",
|
||||
"http01Rich": "Para o HTTP-01 (usa o plug- in incorporado do <code>standalone</code>):",
|
||||
"code1": "pvenode config set --acme domains=host.example.com,account=default",
|
||||
"dns01": "Para DNS-01 com o plugin Cloudflare do Passo 2:",
|
||||
"code2": "pvenode config set --acmedomain0 domain=host.example.com,plugin=cf\npvenode config set --acme account=default",
|
||||
"wildcardRich": "Wildcard? Adicionar <code>domain=*.example.com</code> em uma entrada separada <code>--acmedomainN</code>. Wildcards requerem DNS-01."
|
||||
},
|
||||
"step4": {
|
||||
"heading": "Passo 4 — Ordenar o certificado",
|
||||
"code": "pvenode acme cert order",
|
||||
"afterRich": "A primeira execução normalmente leva 30–60 segundos enquanto o desafio se propaga. No sucesso Proxmox escreve <code>/etc/pve/local/pveproxy-ssl.pem</code> + <code>.key</code>, reinicia <code>pveproxy</code>, e um cron de renovação é agendado automaticamente (Let's Encrypt certs são válidos 90 dias; Proxmox renova em 60)."
|
||||
},
|
||||
"step5": {
|
||||
"heading": "Etapa 5 — Verificar o emitente",
|
||||
"code": "openssl x509 -in /etc/pve/local/pveproxy-ssl.pem -noout -issuer",
|
||||
"afterRich": "Deve imprimir um emissor começando com <code>O = Let's Encrypt</code>. Se em vez disso ele lê <code>CN = Proxmox Virtual Environment</code> a ordem falhou e o arquivo ainda é o certificado PVE auto-assinado — re-executar <code>pvenode acme cert order --debug 1</code> para ver porquê."
|
||||
},
|
||||
"gui": {
|
||||
"title": "Preferes a GUI? Os mesmos cinco passos",
|
||||
"bodyRich": "<em>Datacenter → ACME</em> regista a conta; <em>Datacenter → ACME → Plugins</em> adiciona o plugin DNS; <em>Node → Certificates → ACME</em> associa o domínio; <em>Order Certificates Now</em> executa o passo 4. Os comandos anteriores são úteis para scripts e sistemas sem interface gráfica."
|
||||
}
|
||||
},
|
||||
"switchToHttps": {
|
||||
"heading": "Mudar o monitor para HTTPS",
|
||||
"bodyRich": "Quando <code>/etc/pve/local/pveproxy-ssl.pem</code> estiver assinado por Let's Encrypt, abra <strong>Configurações → Segurança → HTTPS / SSL</strong>, confirme que o emissor é <em>Let's Encrypt</em> e não a CA local Proxmox, e clique em <strong>Usar certificado Proxmox</strong>. O Monitor reinicia e o próximo carregamento utiliza HTTPS em 8008 com uma cadeia de confiança pública. As renovações ACME seguintes são validadas e selecionadas na próxima nova ligação TLS, sem consultas periódicas nem reinício por renovação. <strong>Atualizar certificado</strong> continua disponível em Segurança para diagnóstico e recuperação."
|
||||
},
|
||||
"custom": {
|
||||
"heading": "Certificado personalizado — quando usá-lo",
|
||||
"intro": "Clique em <strong>Usar certificado personalizado</strong> e introduza dois caminhos absolutos:",
|
||||
"items": [
|
||||
"<strong>Certificado</strong> — cadeia completa em PEM (<code>.pem</code> ou <code>.crt</code>).",
|
||||
"<strong>Chave privada</strong>: chave correspondente em PEM (<code>.key</code>)."
|
||||
],
|
||||
"outro": "Ambos os arquivos são lidos pelo processo Monitor na inicialização. Certifique-se de que eles permanecem legíveis pelo usuário que a unidade systemd executa como (root por padrão). Locais comuns quando o ACME é administrado fora do 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": "Alvos do Symlink vs. arquivos",
|
||||
"bodyRich": "<code>certbot</code> armazena os arquivos reais em <code>/etc/letsencrypt/archive/</code> e o caminho <code>live/</code> é um link simbólico. Aponte o Monitor no link simbólico <code>live/</code>, não no arquivo <code>archive/</code> — dessa forma cada ciclo de renovação simplesmente reescreve o alvo do link simbólico e o Monitor capta o novo certificado no próximo início do serviço."
|
||||
}
|
||||
},
|
||||
"afterHttps": {
|
||||
"heading": "Após activar o HTTPS",
|
||||
"bodyRich": "Salvar a mudança escreve <code>/etc/proxmenux/ssl_config.json</code> e ativa um reinício da unidade <code>proxmenux-monitor</code> systemd. A guia do navegador perderá sua conexão atual — recarregue-a no <code>https://<host>:8008/</code>. A primeira carga com um certificado Let's Encrypt não deve mostrar nenhum aviso; com o certificado auto-assinado Proxmox o navegador exigirá uma exceção, a mesma que para porta 8006.",
|
||||
"reverse": {
|
||||
"heading": "Proxies inversos e webhooks",
|
||||
"bodyRich": "Quando o Monitor muda para HTTPS, as URLs Proxmox VE webhook registradas para notificações também passam de <code>http://</code> para <code>https://</code> automaticamente. Entradas webhook existentes são reescritas da próxima vez que uma regra de notificação for salva ou redetectada, então nenhuma edição manual da configuração de notificação Proxmox é necessária."
|
||||
}
|
||||
},
|
||||
"trustCa": {
|
||||
"heading": "Confiar na CA autoassinada do Proxmox",
|
||||
"intro1Rich": "Para manter o certificado Proxmox predefinido sem ACME, importe a CA raiz do cluster para o repositório de confiança do sistema ou do navegador. O Monitor deteta <code>/etc/pve/local/pve-ssl.pem</code> como certificado de recurso. O cliente passa a confiar no emissor; o URL tem ainda de corresponder a um nome do certificado.",
|
||||
"intro2Rich": "O arquivo CA vive em <code>/etc/pve/pve-root-ca.pem</code> em cada nó. Em um cluster, o caminho está no sistema de arquivos <code>pmxcfs</code> compartilhado, então todos os nós compartilham a mesma raiz, e uma única importação cobre todo o datacenter. Copie para a sua máquina:",
|
||||
"code": "scp root@<your-host>:/etc/pve/pve-root-ca.pem ./pve-root-ca.pem",
|
||||
"thenImport": "Depois importa-o do lado do cliente:",
|
||||
"items": [
|
||||
"<strong>Linux (todo o sistema):</strong> execute <code>sudo cp pve-root-ca.pem /usr/local/share/ca-certificates/pve-root-ca.crt</code> e depois <code>sudo update-ca-certificates</code>. Os navegadores que utilizam o repositório de certificados do sistema (Chromium, Edge) reconhecem a CA após reiniciar; Firefox usa um repositório próprio e requer a importação manual abaixo.",
|
||||
"<strong>macOS:</strong> abra o ficheiro <code>.pem</code> com duplo clique no Acesso a Porta-chaves, adicione-o ao porta-chaves <em>Sistema</em> e defina <em>Confiança → Confiar sempre</em>.",
|
||||
"<strong>Windows:</strong> clique com o botão direito no ficheiro → <em>Instalar certificado</em> → coloque-o em <em>Autoridades de certificação de raiz fidedigna</em>.",
|
||||
"<strong>Firefox (qualquer SO):</strong> <em>Configurações → Privacidade e segurança → Certificados → Ver certificados → Autoridades → Importar</em>; selecione <em>Confiar nesta CA para identificar sites</em>."
|
||||
],
|
||||
"standalone": {
|
||||
"title": "Nós autônomos fora de um cluster",
|
||||
"bodyRich": "Cada host Proxmox não-aglomerado tem seu próprio <code>pve-root-ca.pem</code>. Se você gerenciar vários hosts autônomos, repita a cópia/importação para cada um, ou junte-os a um cluster para que eles compartilhem uma única raiz."
|
||||
}
|
||||
},
|
||||
"disable": {
|
||||
"heading": "Desactivando o HTTPS",
|
||||
"bodyRich": "Clique em <strong>Desativar HTTPS</strong> no mesmo painel. O Monitor reinicia com HTTP sem cifragem, útil se um certificado personalizado ilegível impedir o arranque. Não existe outro passo de desinstalação e os ficheiros de certificados não são alterados.",
|
||||
"stateCallout": {
|
||||
"title": "Onde é guardado o estado",
|
||||
"bodyRich": "<code>/etc/proxmenux/ssl_config.json</code> armazena os caminhos do certificado ativo e a fonte (<code>none</code>, <code>proxmox</code>, <code>custom</code>). Excluir o arquivo é equivalente a desativar o HTTPS — no início seguinte o Monitor cai para o HTTP."
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Máquina: Adicionar iSCSI alvo como armazenamento Proxmox ProxMenux Documentação",
|
||||
"description": "Registe um alvo iSCSI como armazenamento Proxmox com o ProxMenux. A ferramenta instala open-iscsi, descobre o portal através de sendtargets, permite escolher o alvo e executa pvesm add iscsi. Fornece dispositivos de blocos raw para as imagens de disco das VM.",
|
||||
"ogTitle": "Máquina: Adicionar iSCSI alvo como armazenamento Proxmox ProxMenux Documentação",
|
||||
"ogDescription": "Registe um alvo iSCSI como armazenamento Proxmox com descoberta guiada. Usa pvesm add iscsi e fornece dispositivos de blocos raw para os discos das VM."
|
||||
},
|
||||
"header": {
|
||||
"title": "Máquina: Adicionar iSCSI alvo como armazenamento Proxmox",
|
||||
"description": "Registre um alvo iSCSI (de um SAN, TrueNAS / FreeNAS, Synology, um alvo Windows Server, qualquer array que fala iSCSI) como armazenamento Proxmox. Os LUNs exportados aparecem como dispositivos de bloco e podem hospedar imagens de disco VM em desempenho quase local através da rede.",
|
||||
"section": "Armazenamento e Compartilhamento · Máquina"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "ProxMenux envolve <code>pvesm add iscsi</code> com um fluxo guiado: instala <code>open-iscsi</code> se necessário, pede o portal iSCSI (IP:port), executa <code>iscsiadm --mode discovery --type sendtargets</code> contra ele, permite escolher um IQN alvo e registra o armazenamento iSCSI no Proxmox. O serviço <code>iscsid</code>, em seguida, mantém a sessão iSCSI vivo através de reinicialização."
|
||||
},
|
||||
"vocab": {
|
||||
"heading": "vocabulário iSCSI (referência rápida)",
|
||||
"headerTerm": "Termo",
|
||||
"headerMeaning": "Significado",
|
||||
"rows": [
|
||||
{
|
||||
"term": "Portal",
|
||||
"meaningRich": "O endpoint de serviço iSCSI no servidor alvo — um IP (ou hostname) mais uma porta TCP. O porto padrão é <code>3260</code>; ProxMenux assume-o se você não especificar um."
|
||||
},
|
||||
{
|
||||
"term": "Alvo",
|
||||
"meaningRich": "Um único servidor exportado dentro do portal, identificado pelo seu IQN (<em>iSCSI Qualified Name</em>). Um portal pode hospedar muitos alvos."
|
||||
},
|
||||
{
|
||||
"term": "IQN",
|
||||
"meaningRich": "A forma canônica é <code>iqn.YYYY-MM.reverse.domain:identifier</code>, por exemplo <code>iqn.2024-08.com.truenas:proxmox-pool</code>. Tanto o alvo como o iniciador têm o seu próprio IQN."
|
||||
},
|
||||
{
|
||||
"term": "LUN",
|
||||
"meaningRich": "Um dispositivo de bloco dentro de um alvo (Número de Unidade Lógica). Um único alvo pode expor vários LUNs; cada LUN aparece como seu próprio disco em Proxmox e pode se tornar um disco VM."
|
||||
},
|
||||
{
|
||||
"term": "Iniciador",
|
||||
"meaningRich": "O cliente que se conecta a um alvo — neste caso, seu host Proxmox. O iniciador tem seu próprio IQN armazenado em <code>/etc/iscsi/initiatorname.iscsi</code>. Os alvos geralmente só aceitam sessões de IQNs de iniciadores pré-autorizados."
|
||||
}
|
||||
]
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Adicione iSCSI Target como Proxmox Storage</strong>. Você verá este sub-menu com quatro opções:",
|
||||
"imageAlt": "Menu do gestor de máquinas iSCSI — Adicionar / Ver / Remover / Teste de conectividade"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Adicionar fluxo)",
|
||||
"body": "O fluxo tem duas fases com separação clara entre \"ajustar o iniciador, descobrir alvos\" e \"realmente registrar armazenamento em Proxmox\". Ao contrário do NFS / Samba, não há nenhuma descoberta automática na sub-rede — você deve saber o endereço do portal (iSCSI não é amigável à transmissão)."
|
||||
},
|
||||
"add": {
|
||||
"heading": "Adicionar o alvo iSCSI como armazenamento Proxmox",
|
||||
"items": [
|
||||
"<strong>Entrada portal</strong> — digite o IP ou hostname do servidor alvo iSCSI. Porta <code>3260</code> é assumido a menos que você digite <code>host:port</code>.",
|
||||
"<strong>Descoberta do alvo</strong> — ProxMenux chama <code>iscsiadm --mode discovery --type sendtargets --portal <ip:port></code>. O servidor responde com cada IQN que permite que este iniciador veja. Se a descoberta falhar, o script mostra o erro exato de <code>iscsiadm</code> e lista causas comuns (IP errado, firewall, IQN iniciador não autorizado).",
|
||||
"<strong>Seleção do alvo</strong> — um único alvo é selecionado automaticamente; vários alvos mostram um menu.",
|
||||
"<strong>Storage ID</strong> — padrão é <code>iscsi-<last IQN segment, 20 chars max></code>. Apenas letras, dígitos, <code>-</code> e <code>_</code>.",
|
||||
"<strong>Tipo de conteúdo</strong> — ao contrário do NFS / Samba, o conteúdo de iSCSI é <strong>fixo ao <code>images</code></strong>. iSCSI expõe dispositivos de bloco brutos, não um sistema de arquivos, então o Proxmox só permite hospedar discos VM nele."
|
||||
],
|
||||
"authTitle": "Autorizar o iniciador Proxmox no alvo",
|
||||
"authBody1": "Antes do fluxo Adicionar funcionar de ponta a ponta, o alvo iSCSI precisa conhecer seu host Proxmox. Obter o seu IQN iniciador:",
|
||||
"authBody2": "Adicione esse IQN à lista de acesso do alvo (TrueNAS: <em>Sharing → Block → Initiators Groups</em>; Synology: <em>SAN Manager → iSCSI → Target → Edit → Initiators</em>; etc.). Se o iniciador não estiver autorizado, a descoberta com <code>iscsiadm</code> retorna uma lista vazia ou um erro de autenticação."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "O fluxo completo corresponde a estes comandos:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver os armazenamentos iSCSI configurados",
|
||||
"body": "Lista todas as entradas iSCSI no Proxmox (<code>pvesm status | awk ''$2 == \"iscsi\"''</code>) com portal, IQN do alvo, tipo de conteúdo e estado atual."
|
||||
},
|
||||
"remove": {
|
||||
"heading": "Remover o armazenamento de iSCSI",
|
||||
"body": "Executa <code>pvesm remove <storage-id></code> após confirmar portal, alvo e conteúdo. Somente o registro Proxmox é removido — <strong>o alvo iSCSI em si não é tocado</strong> e as sessões existentes no lado do kernel podem durar até o próximo reinício.",
|
||||
"warnTitle": "Verifique primeiro os discos de VM existentes neste iSCSI",
|
||||
"warnBody": "Removendo um armazenamento iSCSI enquanto as VMs ainda têm discos nele deixa aquelas VMs apontando para uma loja desaparecida. O Proxmox assinalará o erro, mas os dados LUN não são tocados no alvo — você pode registrar novamente o armazenamento mais tarde para recuperar os discos. Ainda assim, mova ou faça backup das VMs primeiro para ser seguro."
|
||||
},
|
||||
"test": {
|
||||
"heading": "Teste de conectividade iSCSI",
|
||||
"body": "Executa um passe diagnóstico: verifica se o <code>iscsiadm</code> está instalado, imprime o seu IQN iniciador, confirma que o <code>iscsid</code> está em execução, pings cada portal registrado, sonda sua porta, e relata o <code>pvesm status</code> mais se uma sessão iSCSI está atualmente ativa (<code>iscsiadm --mode session</code>). Sessão ativa mais portal acessível, mas \"inativo\" no Proxmox geralmente significa um estado obsoleto — tente <code>pvesm set <id> --disable 0</code>."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"portalTitle": "\"Não é possível alcançar o portal\", mas o IP do servidor responde em outro lugar",
|
||||
"portalBody": "O ping ao endereço do portal falhou. Verifique se está alcançando a interface da <em>rede de armazenamento</em> (iSCSI costuma usar uma VLAN ou sub-rede separada da rede de gerenciamento). Confira também o DNS se informou um nome de host.",
|
||||
"discoverTitle": "\"A descoberta do iSCSI falhou\" do iscsiadm",
|
||||
"discoverIntro": "O script mostra o erro exato. Causas mais comuns:",
|
||||
"discoverItems": [
|
||||
"Portal IP / porta errada (dupla verificação, padrão é 3260).",
|
||||
"O serviço iSCSI não está em execução no servidor alvo.",
|
||||
"Firewall bloqueia 3260 entre Proxmox e o alvo.",
|
||||
"<strong>Iniciador IQN não está autorizado no alvo.</strong> Causa mais frequente em matrizes empresariais. Adicione o seu Proxmox IQN ao ACL inicial do alvo primeiro."
|
||||
],
|
||||
"noTargetTitle": "Nenhum alvo encontrado, mas a descoberta foi bem- sucedida",
|
||||
"noTargetBody": "O servidor aceitou o seu iniciador, mas não expõe nenhum alvo a ele. Revise os controles de autenticação/acesso do alvo — alguns arrays permitem a descoberta de todas as IQNs, mas filtram os alvos que cada IQN pode ver.",
|
||||
"noLunTitle": "LUNs não aparecem em /dev/disk/by-path após o registro",
|
||||
"noLunBody": "<code>pvesm add iscsi</code> teve sucesso, mas o kernel não está vendo dispositivos de bloco. Verifique <code>iscsiadm --mode session</code> — se nenhuma sessão estiver ativa, inicie uma manualmente com <code>iscsiadm --mode node --login</code>. Se uma sessão existir, mas não aparecerem LUNs, force uma nova varredura: <code>iscsiadm --mode session --rescan</code>. Se ainda nada, o alvo provavelmente não tem LUNs atribuídos a este IQN ainda (configurar mapeamento LUN no alvo).",
|
||||
"chapTitle": "Autenticação CHAP",
|
||||
"chapBody": "O ProxMenux não oferece campos de usuário e senha CHAP no fluxo interativo. Se a descoberta falhar, o script para antes de <code>pvesm add</code>; o armazenamento não é registrado apesar da falha. Configure separadamente os requisitos CHAP do alvo em <code>open-iscsi</code>, incluindo a autenticação da descoberta quando necessária, e tente novamente. Confira a configuração com <code>iscsiadm</code> e verifique sessões ativas com <code>iscsiadm --mode session</code>."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"label": "Compartilhamento NFS como armazenamento Proxmox",
|
||||
"tail": " — alternativas ao nível dos ficheiros. Mais simples de configurar, mais flexível (backup / ISO / tmpl / imagens), ligeiramente mais lento para discos VM ao vivo."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-samba",
|
||||
"label": "Samba / CIFS como armazenamento Proxmox",
|
||||
"tail": " — outra opção de nível de arquivo; evite para discos VM ao vivo devido à semântica de bloqueio."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-disk",
|
||||
"label": "Adicionar o disco local como armazenamento Proxmox",
|
||||
"tail": " — quando o disco é local para a máquina Proxmox, não em outra caixa na rede."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Máquina: Adicionar o disco local como armazenamento Proxmox ProxMenux Documentação",
|
||||
"description": "Formate um disco SATA, SAS ou NVMe local num host Proxmox e registe-o como armazenamento de tipo diretório ou pool ZFS. Inclui seleção segura do disco, confirmação das operações destrutivas, fstab por UUID, criação do pool ZFS e utilização de pvesm add dir / zfspool.",
|
||||
"ogTitle": "Máquina: Adicionar o disco local como armazenamento Proxmox ProxMenux Documentação",
|
||||
"ogDescription": "Formate um disco local e registre-o como armazenamento de diretório ou pool ZFS no Proxmox com um fluxo guiado e filtros de segurança."
|
||||
},
|
||||
"header": {
|
||||
"title": "Máquina: Adicionar disco local como armazenamento Proxmox",
|
||||
"description": "Pegue um disco físico na máquina Proxmox, opcionalmente formate-o (ext4 / xfs / btrfs / zfs) e registre-o como armazenamento Proxmox — quer como diretório (pvesm add dir) quer como um pool ZFS (pvesm add zfspool). ProxMenux filtra a lista de discos para que você não possa escolher o disco raiz ou qualquer coisa em uso, e torna cada passo destrutivo explícito antes de executá-lo.",
|
||||
"section": "Armazenamento e Compartilhamento · Máquina"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Outras ferramentas <em>Host</em> nesta seção lidam com armazenamento de <strong>rede</strong> (NFS / Samba / iSCSI). Este lida com discos <strong>locais</strong> — unidades de reposição fisicamente conectadas ao seu host Proxmox que você deseja usar para discos VM, backups, ISOs ou modelos. ProxMenux prepara o disco (partição + formato + montagem) e registra-o em Proxmox para que a UI possa colocar conteúdo lá."
|
||||
},
|
||||
"destructive": {
|
||||
"title": "Ferramenta destrutiva para o caminho do 'formato'",
|
||||
"body": "A opção <em>Formatar</em> <strong>destrói as partições e os dados existentes no disco selecionado</strong>. O ProxMenux mostra um aviso, filtra discos em uso e exige confirmação antes de executar <code>wipefs</code> / <code>sgdisk</code> / <code>mkfs</code>. Isso não é uma sobrescrita segura de cada byte. Confira duas vezes o caminho do dispositivo antes de confirmar."
|
||||
},
|
||||
"compare": {
|
||||
"heading": "Directório vs ZFS pool — qual escolher",
|
||||
"headerDir": "Pasta (ext4 / xfs / btrfs)",
|
||||
"headerZfs": "Conjunto ZFS",
|
||||
"rows": [
|
||||
{
|
||||
"label": "Tipo de armazenamento Proxmox",
|
||||
"dirRich": "<code>dir</code>",
|
||||
"zfsRich": "<code>zfspool</code>"
|
||||
},
|
||||
{
|
||||
"label": "Formato de disco VM",
|
||||
"dir": "Arquivo qcow2 / raw em um sistema de arquivos",
|
||||
"zfs": "Conjunto de dados nativo ZFS (zvol) por disco"
|
||||
},
|
||||
{
|
||||
"label": "Instantâneos",
|
||||
"dir": "qcow2 instantâneos; btrfs instantâneos se fs=btrfs",
|
||||
"zfs": "Nativo, instantâneo, copy-on-write"
|
||||
},
|
||||
{
|
||||
"label": "Aprovisionamento dinâmico",
|
||||
"dir": "Sim (qcow2 por omissão)",
|
||||
"zfs": "Sim (ZFS por omissão)"
|
||||
},
|
||||
{
|
||||
"label": "Necessidades de RAM",
|
||||
"dir": "Baixo",
|
||||
"zfs": "Altas — o ZFS usa a RAM livre como cache ARC"
|
||||
},
|
||||
{
|
||||
"label": "Suporta tipos de conteúdo",
|
||||
"dir": "images, backup, iso, vztmpl, snippets, rootdir",
|
||||
"zfs": "apenas images e rootdir (armazenamento em blocos)"
|
||||
},
|
||||
{
|
||||
"label": "Melhor para",
|
||||
"dir": "Disco de uso geral: mistura de discos VM, backups, ISOs",
|
||||
"zfs": "Puro disco de dados VM / LXC com instantâneo + necessidades de integridade"
|
||||
}
|
||||
]
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Adicione disco local como armazenamento Proxmox</strong>. Você verá este sub-menu com quatro opções:",
|
||||
"imageAlt": "Menu de gerenciamento de disco local — Adicionar / Ver / Remover / Listar discos disponíveis"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Adicionar fluxo)",
|
||||
"body": "O fluxo tem duas fases com um filtro de segurança com três verificações. Fase 1 descobre discos seguros, decide o que fazer com o escolhido e coleta parâmetros de armazenamento; Fase 2 faz o trabalho destrutivo. Até a confirmação final o disco está intocado."
|
||||
},
|
||||
"format": {
|
||||
"heading": "Formatar um disco em branco",
|
||||
"intro": "O caminho para um disco fresco ou um cujo conteúdo você não se importa.",
|
||||
"items": [
|
||||
"Escolha o disco (sistema / discos em uso estão escondidos).",
|
||||
"Escolha \"Format disk (ERASE todos os dados)\".",
|
||||
"Escolha o sistema de arquivos — veja a tabela acima para trade-offs.",
|
||||
"ID de armazenamento (padrão <code>disk-<device></code>), caminho de montagem, tipo de conteúdo predefinido.",
|
||||
"Confirme no diálogo <strong>CONFIRMAÇÃO FINAL — OS DADOS SERÃO APAGADOS</strong>.",
|
||||
"O ProxMenux limpa a tabela de partições e cria uma partição que ocupa o disco. Executa <code>mkfs.<fs></code> ou <code>zpool create</code> e monta o resultado. Sistemas de arquivos comuns recebem uma entrada UUID em <code>/etc/fstab</code> com <code>defaults,nofail</code>; o ZFS usa a configuração de montagem do pool. Se <em>Como armazenamento Proxmox</em> estiver marcado (sempre no caso do ZFS), ele é registrado com <code>pvesm add dir</code> ou <code>pvesm add zfspool</code>; caso contrário, fica apenas como montagem do host."
|
||||
],
|
||||
"tipTitle": "Porquê UUID + nofail em /etc/fstab",
|
||||
"tipBody": "O script escreve <code>UUID=… /mnt/<id> <fs> defaults,nofail 0 2</code>. O UUID sobrevive à reordenação do dispositivo através de reinicialização (então o <code>/dev/sdc</code> tornando-se o <code>/dev/sdd</code> não quebra a inicialização). <code>nofail</code> significa que se o disco desaparecer (falha de Hardware, desconectado), o Proxmox ainda inicia — o armazenamento só será mostrado como inativo até que o disco volte."
|
||||
},
|
||||
"reuse": {
|
||||
"heading": "Reutilizar um sistema de ficheiros existente",
|
||||
"intro": "O caminho para um disco que você deseja manter os dados em — talvez você tenha movido de outro host Proxmox, ou o disco já tem backups / ISOs que você deseja manter acessível.",
|
||||
"items": [
|
||||
"Escolhe o disco.",
|
||||
"Escolha \"Usar o sistema de arquivos existente\".",
|
||||
"ID de armazenamento, local de montagem, predefinição do tipo de conteúdo.",
|
||||
"ProxMenux <strong>não</strong> toca nos dados: ele cria o ponto de montagem, monta o disco, adiciona uma entrada UUID a <code>/etc/fstab</code> e a registra como um armazenamento Proxmox <code>dir</code>."
|
||||
],
|
||||
"warnTitle": "O caminho de reutilização não lida com ZFS pools",
|
||||
"warnBody": "Se o disco já contém um pool ZFS, o caminho <em>reuse</em> aqui apenas tenta montá-lo como um sistema de arquivos regular – que falha. Para importar um pool ZFS existente use <code>zpool import <name></code> na linha de comando e registre-o manualmente com <code>pvesm add zfspool</code>."
|
||||
},
|
||||
"presets": {
|
||||
"heading": "Predefinições do tipo de conteúdo",
|
||||
"intro": "O ProxMenux oferece três predefinições e uma opção personalizada. A lista de conteúdo escolhida é passada para <code>pvesm add … --content <csv></code>:",
|
||||
"headerPreset": "Predefinição",
|
||||
"headerContent": "Texto do conteúdo",
|
||||
"headerUse": "Caso de uso",
|
||||
"rows": [
|
||||
{
|
||||
"preset": "Armazenamento VM",
|
||||
"content": "images,backup",
|
||||
"use": "Um armazenamento dedicado aos discos de VMs que também mantém os backups dessas VMs por perto."
|
||||
},
|
||||
{
|
||||
"preset": "NAS padrão",
|
||||
"content": "backup,iso,vztmpl",
|
||||
"use": "Um arquivo / disco de mídia — backups, ISOs e modelos LXC. Nenhum disco VM vivo aqui."
|
||||
},
|
||||
{
|
||||
"preset": "Todos os tipos",
|
||||
"content": "images,backup,iso,vztmpl,snippets",
|
||||
"use": "Esta predefinição ampla habilita imagens, backups, ISOs, modelos LXC e snippets. Adicione outros tipos compatíveis, como rootdir, pela opção Personalizado se necessário."
|
||||
},
|
||||
{
|
||||
"preset": "Personalizado",
|
||||
"content": "(input livre)",
|
||||
"useRich": "Digite o CSV exato, por exemplo. <code>images</code> sozinho, ou <code>rootdir,images</code>."
|
||||
}
|
||||
],
|
||||
"zfsTitle": "ZFS pool conteúdo é mais estreito",
|
||||
"zfsBody": "Com <strong>zfs</strong>, um <code>zfspool</code> aceita apenas <code>images</code> e <code>rootdir</code>, não arquivos ISO ou backups. Informe uma lista compatível em Personalizado. O script a encaminha sem alterações; tipos incompatíveis podem fazer o registro falhar. Verifique <code>pvesm status</code> depois."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"extIntro": "Formato + registrar um disco como armazenamento de diretório ext4:",
|
||||
"zfsIntro": "Ou como um ZFS pool:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver os armazenamentos de discos",
|
||||
"body": "Lista cada armazenamento Proxmox apoiado em disco (ambos <code>dir</code> e <code>zfspool</code> que são criados pelo usuário – pools de sistema como <code>rpool</code> estão escondidos). Mostra o caminho de montagem / nome do pool, tipos de conteúdo e estado ao vivo."
|
||||
},
|
||||
"remove": {
|
||||
"heading": "Remover o armazenamento do disco",
|
||||
"body": "Remove o registro do armazenamento no Proxmox (<code>pvesm remove</code>) e oferece limpar a entrada correspondente em <code>/etc/fstab</code>. O script <strong>não</strong> destrói pools ZFS automaticamente; isso exige executar separadamente <code>zpool destroy <name></code> quando tiver certeza.",
|
||||
"warnTitle": "Dados e dependências VM existentes",
|
||||
"warnBody": "A remoção do armazenamento não toca no sistema de arquivos nem no pool — os dados permanecem no disco. Mas VMs / CTs que referenciam este armazenamento por ID não vai começar após a remoção. Mova esses discos VM para outro armazenamento (ou faça um backup) antes de remover."
|
||||
},
|
||||
"list": {
|
||||
"heading": "Listar os discos disponíveis",
|
||||
"body": "Uma visão diagnóstica somente de leitura: imprime a saída de <code>lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,MODEL</code> seguida pelo <code>dir</code> / <code>zfspool</code> armazenamentos já conhecidos pelo Proxmox. Boa primeira parada quando você abrir a ferramenta e quiser ver \"o que está neste host?\" antes de adicionar qualquer coisa."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noDisksTitle": "\"Nenhum disco disponível encontrado\"",
|
||||
"noDisksIntro": "O filtro de segurança escondeu todos os discos. Razões comuns:",
|
||||
"noDisksItems": [
|
||||
"Apenas o disco raiz está presente.",
|
||||
"Cada outro disco é parte de uma matriz ativa ZFS / LVM / RAID.",
|
||||
"Cada outro disco é referenciado por uma configuração VM ou LXC (passthrough).",
|
||||
"O disco está em modo somente leitura (falha de hardware ou bloqueio de gravação)."
|
||||
],
|
||||
"noDisksOutro": "Use <em>Lista de discos disponíveis</em> do menu para ver a saída <code>lsblk</code> bruta e entender o que está acontecendo.",
|
||||
"mountedTitle": "O formato falha com \"o dispositivo está montado\"",
|
||||
"mountedBody": "Algo montou automaticamente o disco (udisksd, um gerenciador de desktop, uma unidade de systemd). Desmontá-lo: <code>umount /dev/sdX?*</code> ou <code>systemctl stop <whatever-mounts-it></code>, então tente novamente. O filtro de segurança do script deve ter discos montados ocultos, então se você alcançou este erro a montagem aconteceu entre o menu mostrando e você confirmando.",
|
||||
"zpoolTitle": "zpool create falha com «invalid vdev specification»",
|
||||
"zpoolBody": "Normalmente significa que o disco ainda tem GPT / LVM / ZFS assinaturas que <code>zpool</code> se recusa a substituir sem força. O script executa <code>wipefs</code> e <code>sgdisk --zap-all</code> antes do formato, mas um disco muito teimoso ainda pode ter uma etiqueta antiga. Forçar uma limpeza limpa manualmente: <code>zpool labelclear -f /dev/sdX</code> ou <code>dd if=/dev/zero of=/dev/sdX bs=1M count=10</code> e tentar novamente.",
|
||||
"inactiveTitle": "O armazenamento mostra como inativo após reiniciar",
|
||||
"inactiveBody": "Verifique <code>findmnt <mount-path></code> — se a montagem está faltando, algo em <code>/etc/fstab</code> falhou. <code>dmesg | tail</code> geralmente aponta para a razão (incompatibilidade UUID, corrupção do sistema de arquivos, <code>nofail</code> deixou cair a repetição). Um <code>mount -a</code> geralmente reativa o armazenamento uma vez que a causa é fixa."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/disk-manager/format-disk",
|
||||
"label": "Gerenciador de disco: Formato / Limpar disco físico",
|
||||
"tail": " — alternativa de baixo nível quando você só quer preparar um disco sem registá-lo como armazenamento Proxmox."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-iscsi",
|
||||
"label": "Adicionar o alvo iSCSI como armazenamento Proxmox",
|
||||
"tail": " — equivalente de rede quando o dispositivo de blocos está em outra máquina."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-shared",
|
||||
"label": "Adicionar a Pasta Partilhada na Máquina",
|
||||
"tail": " — preparar um directório na máquina para as montagens de ligação LXC (não regista um armazenamento Proxmox)."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Máquina: Adicionar diretório compartilhado no Host ProxMenux Documentação",
|
||||
"description": "Crie um diretório no host pronto para bind mounts LXC, com permissões para contêineres com e sem privilégios. Sticky bit, rwx para todos e ACLs padrão para herança.",
|
||||
"ogTitle": "Máquina: Adicionar diretório compartilhado no Host ProxMenux Documentação",
|
||||
"ogDescription": "Prepare um diretório host para bind mounts LXC com permissões compatíveis com CTs privilegiadas e sem privilégios."
|
||||
},
|
||||
"header": {
|
||||
"title": "Máquina: Adicionar diretório compartilhado na Máquina",
|
||||
"description": "Crie um diretório no host para bind mounts em um ou mais contêineres LXC. O ProxMenux aplica permissões para CTs com e sem privilégios, sem precisar alinhar UIDs deslocados ou executar chown para cada contêiner, e registra o diretório para uso posterior pelo LXC Mount Manager.",
|
||||
"section": "Armazenamento e Compartilhamento · Máquina"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que é isto (e NÃO é)",
|
||||
"body": "Esta ferramenta <strong>não</strong> registra nada no Proxmox (nenhum <code>pvesm add</code> aqui). Ele apenas prepara um diretório no host — <code>/mnt/shared</code>, por padrão — com permissões que qualquer contêiner LXC pode ler e gravar, independentemente de o CT ser privilegiado ou não. A próxima etapa normal é montá-lo em cada CT com o <mountLink>LXC Mount Manager</mountLink>."
|
||||
},
|
||||
"why": {
|
||||
"heading": "Por que uma ferramenta dedicada para isso",
|
||||
"intro": "Quando você vincula uma pasta de host em um container LXC, as permissões dependem de:",
|
||||
"items": [
|
||||
"Se o CT tem <strong>privilégios</strong> (UID 0 no CT = UID 0 no host) ou <strong>não tem privilégios</strong> (UID 0 no CT = UID 100000 no host, com deslocamento de +100000).",
|
||||
"O proprietário do diretório do host (um arquivo do UID 1000 no host usa as permissões de “outros” para um CT sem privilégios, pois nenhum usuário do CT corresponde a esse UID do host).",
|
||||
"Se vários CTs compartilham o mesmo diretório (CTs diferentes podem ter diferentes intervalos UID)."
|
||||
],
|
||||
"outro": "O truque pragmático que ProxMenux usa aqui é para <strong>dar a todos acesso</strong> no nível do sistema de arquivos: world-rwx mais o sticky bit, além de ACLs para que os novos arquivos herdem as mesmas permissões. Qualquer UID mapeado pode ler e escrever; nenhum alinhamento UID / GID é necessário."
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O script não tem menu principal — ele executa uma única ação, <strong>Crie diretório compartilhado</strong>. Fase 1 coleta o caminho-alvo; Fase 2 cria o diretório e aplica permissões."
|
||||
},
|
||||
"bits": {
|
||||
"heading": "O que cada bits de permissão faz",
|
||||
"intro": "O número <strong>1777</strong> não é arbitrário — é o mesmo modo que o Linux usa para <code>/tmp</code>. Três propriedades combinadas:",
|
||||
"headerBit": "Bit",
|
||||
"headerEffect": "Efeito",
|
||||
"headerWhy": "Porque é que isto importa aqui?",
|
||||
"rows": [
|
||||
{
|
||||
"bit": "1 (sticky bit)",
|
||||
"effect": "Somente o proprietário do arquivo, o proprietário do diretório ou um processo com privilégios suficientes pode excluir ou renomear o arquivo.",
|
||||
"why": "Ajuda a impedir que usuários com UIDs mapeados diferentes apaguem arquivos uns dos outros. Não isola CTs com o mesmo UID mapeado ou acesso root privilegiado."
|
||||
},
|
||||
{
|
||||
"bit": "777 (rwx-rwx-rwx)",
|
||||
"effect": "Todos podem ler, gravar e atravessar o diretório.",
|
||||
"why": "Os UIDs CT não privilegiados (100000+) aparecem como \"outros\" do host, então o world-rwx lhes dá acesso."
|
||||
},
|
||||
{
|
||||
"bit": "ACL (predefinidas)",
|
||||
"effect": "Herdado em cada arquivo / subdir recém-criado.",
|
||||
"why": "O novo conteúdo herda as ACLs padrão sem executar o script novamente. Os aplicativos ainda podem solicitar modos restritivos ou alterar as permissões depois."
|
||||
}
|
||||
],
|
||||
"privTitle": "Os CTs com privilégios veem o mesmo resultado, sem o deslocamento de UIDs",
|
||||
"privBody": "Para um CT privilegiado, o UID 0 no CT é o UID 0 no host, então o <code>root</code> dentro do CT pode ler / escrever o diretório do host diretamente. <code>1777</code> ainda está bem — isso significa que usuários não root dentro do CT também podem usar o diretório. As mesmas permissões cobrem ambos os casos."
|
||||
},
|
||||
"where": {
|
||||
"heading": "Onde colocar o diretório compartilhado",
|
||||
"intro": "O selecionador de localização oferece quatro opções:",
|
||||
"opt1Title": "1. Criar uma nova pasta no /mnt",
|
||||
"opt1Body": "A escolha habitual. ProxMenux auto-sugere o primeiro nome livre (<code>shared</code>, <code>shared2</code>, <code>shared3</code>, ...). Basta confirmar ou escrever um nome diferente.",
|
||||
"opt2Title": "2. Digite o caminho personalizado",
|
||||
"opt2Body": "Para pastas fora de <code>/mnt</code>. Qualquer caminho absoluto funciona (por exemplo, <code>/srv/media</code>, <code>/data/family</code>). O script aplica as mesmas permissões.",
|
||||
"opt3Title": "3. Ver as pastas existentes no /mnt",
|
||||
"opt3Body": "Diagnóstico somente leitura: lista todos os diretórios sob <code>/mnt</code> com suas permissões, proprietário e espaço disponível. Útil antes de criar um novo para evitar colisões de nomes.",
|
||||
"opt4Title": "4. Cancelar",
|
||||
"opt4Body": "Sai sem criar nada. O mesmo que pressionar <kbd>Esc</kbd>.",
|
||||
"tipTitle": "Onde vive o /mnt?",
|
||||
"tipBody": "Por padrão, o <code>/mnt</code> fica no sistema de arquivos raiz do Proxmox. Se você quiser o diretório compartilhado em um disco diferente (um disco de dados, um pool ZFS), monte esse disco em <code>/mnt/<name></code> primeiro (disco Manager ou <diskLink>Adicionar disco local como armazenamento Proxmox</diskLink>), e então crie o diretório compartilhado como uma subpasta dentro dele — ou escolha \"Digite o caminho personalizado\" aqui e aponte para o disco montado."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "Todo o fluxo pode ser reproduzido à mão:"
|
||||
},
|
||||
"next": {
|
||||
"heading": "Próxima etapa: bind mount nos contêineres",
|
||||
"body": "Criar o diretório apenas o prepara – nenhum contêiner o vê ainda. Para torná-lo visível dentro de um ou mais LXCs, use o <mountLink>LXC Mount Manager</mountLink> para vincular a montagem <code>/mnt/<name></code> nos CTs. Como as permissões já estão abertas, o Mount Manager <strong>não</strong> se oferecerá para alterá-las — o diretório está pronto para ser usado como está."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"mkdirTitle": "\"Failed to create directory\"",
|
||||
"mkdirBody": "Normalmente um problema do sistema de arquivos: <code>/mnt</code> está em um sistema de arquivos somente leitura, o caminho contém um componente que não é um diretório (por exemplo, você digitou <code>/etc/passwd/sub</code>), ou o disco está cheio. Verifique com <code>df -h /mnt</code> e <code>mount | grep /mnt</code>.",
|
||||
"writeTitle": "O recipiente não pode escrever apesar das permissões abertas",
|
||||
"writeBody": "Verifique novamente se o CT está realmente usando a montagem de ligação (<code>pct config <ctid> | grep ^mp</code>). Dentro do CT, execute <code>touch /mnt/data/test-$(date +%s)</code> — se isso falhar com a permissão negada, a montagem pode estar em um sistema de arquivos host que não honra ACLs (algumas montagens mais antigas de <code>ext3</code> ou <code>vfat</code>). Mova o diretório compartilhado para um ext4 / xfs / btrfs / zfs de suporte.",
|
||||
"aclTitle": "Comandos ACL silenciosamente indisponíveis",
|
||||
"aclBody": "Em uma instalação Proxmox mínima <code>setfacl</code> / <code>getfacl</code> podem não estar instalados. O script cai de volta graciosamente (<code>command -v setfacl</code> check) e aplica apenas permissões POSIX — que é muitas vezes suficiente, mas novos arquivos não herdarão automaticamente o perfil permissivo. Instale <code>acl</code> com <code>apt-get install -y acl</code> e execute novamente o script no diretório."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Gerenciador de montagem LXC",
|
||||
"tail": " — a etapa natural seguinte: ligar esta pasta num ou mais recipientes."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-disk",
|
||||
"label": "Adicionar o disco local como armazenamento Proxmox",
|
||||
"tailRich": " — se você quiser o diretório compartilhado em um disco dedicado, prepare o disco primeiro, monte-o em <code>/mnt</code>, em seguida, crie a subpasta compartilhada aqui."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Host: montar compartilhamento NFS | Documentação ProxMenux",
|
||||
"description": "Monte uma exportação NFS externa no host Proxmox como armazenamento Proxmox com pvesm add nfs, como montagem fstab independente que não aparece em Datacenter > Storage ou das duas formas. O método fstab é adequado para partilhar o caminho com contentores LXC por bind mount sem o registar como armazenamento Proxmox.",
|
||||
"ogTitle": "Host: montar compartilhamento NFS | Documentação ProxMenux",
|
||||
"ogDescription": "Monte uma exportação NFS externa no host Proxmox via pvesm, fstab ou ambos. A opção fstab é ideal para bind mounts LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Host: montar compartilhamento NFS no host",
|
||||
"description": "Montar uma exportação NFS externa (de um NAS, outro servidor, uma partilha homelab...) na máquina Proxmox. Escolha um ou ambos os métodos: registre-o como armazenamento Proxmox (visível no Datacenter > Armazenamento) e/ou adicione uma montagem /etc/fstab simples em um caminho que você escolher (útil para montar o compartilhamento em recipientes LXC sem expô-lo como armazenamento Proxmox).",
|
||||
"section": "Armazenamento e Compartilhamento · Máquina"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "ProxMenux oferece dois métodos de montagem para qualquer exportação de NFS: <strong>(1) Armazenamento Proxmox</strong> via <code>pvesm add nfs</code> — o compartilhamento aparece no Datacenter > Armazenamento e Proxmox gerencia a montagem em <code>/mnt/pve/<id></code>; <strong>(2) Montagem fstab no host</strong> em um caminho que você escolhe — persistente via <code>/etc/fstab</code>, NÃO visível como armazenamento Proxmox, ideal para montagem em contêineres LXC (Proxmox UI permanece limpo). Você pode executar um método, o outro, ou ambos."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Monte NFS Share on Host</strong>. Você verá este sub-menu com quatro opções:",
|
||||
"imageAlt": "Menu do gestor de máquinas NFS — Montar / Ver / Remover / Teste de conectividade"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases com separação clara entre \"descobrir, validar e escolher\" e \"na verdade montagem / gravação config\". Depois de seleccionar uma exportação, escolha os métodos de montagem através de uma lista de verificação; o resto das janelas só pede parâmetros para os métodos que seleccionou. Até à confirmação final, nem <code>/etc/pve/storage.cfg</code> nem <code>/etc/fstab</code> são tocados."
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Selector de métodos de montagem (duas opções, marca uma ou ambas)",
|
||||
"intro": "Após selecionar e validar a exportação, o ProxMenux mostra uma lista de verificação com os dois métodos de montagem. Pode marcar um ou ambos. Se carregar em OK sem marcar nada, a janela reaparece até escolher pelo menos uma opção ou carregar em Cancelar para sair do fluxo.",
|
||||
"imageAlt": "Lista de verificação do método de montagem com opções pvesm e fstab",
|
||||
"headerMethod": "Método",
|
||||
"headerMount": "Caminho de montagem",
|
||||
"headerUi": "Visível no Datacenter > Armazenamento",
|
||||
"headerUseCase": "Caso de uso típico",
|
||||
"rows": [
|
||||
{
|
||||
"method": "<strong>Como armazenamento Proxmox (pvesm)</strong>",
|
||||
"mountRich": "<code>/mnt/pve/<storage-id></code> (gerido pela Proxmox)",
|
||||
"ui": "Sim",
|
||||
"useCase": "Imagens de disco VM, backups, ISOs, modelos LXC — qualquer coisa que precise aparecer na interface Proxmox."
|
||||
},
|
||||
{
|
||||
"method": "<strong>Host somente fstab</strong>",
|
||||
"mountRich": "<code>/mnt/<path></code> (você escolhe o caminho)",
|
||||
"ui": "Não",
|
||||
"useCaseRich": "Compartilhe o caminho com um ou mais LXCs por bind mount <em>sem</em> registrá-lo como armazenamento Proxmox. Mantém a interface Datacenter organizada."
|
||||
},
|
||||
{
|
||||
"method": "<strong>Ambos</strong>",
|
||||
"mount": "Ambos os caminhos acima (dois pontos de montagem da mesma exportação NFS)",
|
||||
"ui": "Sim",
|
||||
"useCase": "Integração com a interface e um caminho estável separado no host com permissões abertas para bind mounts LXC."
|
||||
}
|
||||
],
|
||||
"bothTitle": "\"Ambos\" cria duas montagens independentes NFS",
|
||||
"bothBody": "Os métodos são executados separadamente: pvesm monta em <code>/mnt/pve/<id></code> e fstab em <code>/mnt/<path></code>. Isso oferece uma montagem gerenciada pelo Proxmox com opções padrão e outra no host para bind mounts LXC. Dois pontos de montagem não garantem duas conexões TCP; o cliente NFS pode reutilizar conexões de transporte."
|
||||
},
|
||||
"pvesmBranch": {
|
||||
"heading": "Método A — Armazenagem Proxmox (pvesm)",
|
||||
"intro": "Se o <em>Como armazenamento Proxmox</em> estiver marcado, o ProxMenux roda o fluxo original do pvesm:",
|
||||
"items": [
|
||||
"<strong>Storage ID</strong> — o que o Proxmox chamará de armazenamento. O padrão é <code>nfs-<server-ip-with-dashes></code>. Apenas são aceites letras, dígitos, <code>-</code> e <code>_</code>.",
|
||||
"<strong>Tipos de conteúdo</strong> — Proxmox liga as categorias de conteúdo aos volumes de armazenamento; escolha o que este NFS pode conter:"
|
||||
],
|
||||
"headerType": "Tipo de conteúdo",
|
||||
"headerAllows": "O que permite",
|
||||
"rows": [
|
||||
{
|
||||
"type": "import",
|
||||
"allowsRich": "Importação de imagens de disco (selecionada por padrão). Necessário para <em>Importar imagem de disco para VM</em>."
|
||||
},
|
||||
{
|
||||
"type": "backup",
|
||||
"allowsRich": "Arquivos de backup VM e CT (<code>vzdump</code>)."
|
||||
},
|
||||
{
|
||||
"type": "iso",
|
||||
"allows": "Instalação de imagens ISO."
|
||||
},
|
||||
{
|
||||
"type": "vztmpl",
|
||||
"allows": "Modelos LXC."
|
||||
},
|
||||
{
|
||||
"type": "images",
|
||||
"allows": "Imagens de disco das VMs em uso: transforma o NFS em um armazenamento de discos de VMs."
|
||||
},
|
||||
{
|
||||
"type": "rootdir",
|
||||
"allows": "LXC sistemas de arquivos raiz (raro para NFS — leia a nota abaixo)."
|
||||
},
|
||||
{
|
||||
"type": "snippets",
|
||||
"allows": "Scripts de hook e snippets cloud-init."
|
||||
}
|
||||
],
|
||||
"warnTitle": "images e rootdir em NFS",
|
||||
"warnBody": "Selecionar <code>images</code> permite armazenar discos de VMs no NFS. O desempenho depende da rede, do servidor e da carga; uma falha pode bloquear a E/S que dependa da montagem. <code>rootdir</code> armazena sistemas de arquivos raiz LXC no NFS, onde contêineres sem privilégios podem encontrar limitações de mapeamento de UID, overlay e propriedade. Avalie isso antes de colocar <code>images</code> / <code>rootdir</code> ali; NFS também é útil para <code>backup</code> / <code>iso</code> / <code>vztmpl</code>.",
|
||||
"result": "O resultado é <code>pvesm add nfs <id> --server <srv> --export <path> --content <csv></code> e Proxmox auto-montagens em <code>/mnt/pve/<id></code>."
|
||||
},
|
||||
"fstabBranch": {
|
||||
"heading": "Método B — Montagem fstab da máquina",
|
||||
"intro": "Se <em>Somente montagem fstab no host</em> está marcada, ProxMenux pede um caminho de montagem do host e opções persistentes, então monta e escreve a entrada para <code>/etc/fstab</code>:",
|
||||
"items": [
|
||||
"<strong>Caminho de montagem no host</strong> — padrão <code>/mnt/<export-basename></code>. Deve ser um caminho absoluto. Se algo já estiver montado lá, ou se existir uma entrada fstab para o mesmo caminho, o ProxMenux avisa-o e oferece-lhe para o substituir.",
|
||||
"<strong>Opções de montagem</strong> — <em>Leitura/gravação</em> (padrão: <code>rw,hard,nofail,_netdev,rsize=131072,wsize=131072,timeo=600,retrans=2</code>), <em>Somente leitura</em>, <em>Personalizado</em> (informe suas opções)."
|
||||
],
|
||||
"appliesIntro": "Uma vez confirmado, o script:",
|
||||
"applies": [
|
||||
"<code>mkdir -p</code> o caminho de montagem.",
|
||||
"<code>mount -t nfs -o <opts> <srv>:<export> <path></code>.",
|
||||
"Escreve uma entrada de uma linha para <code>/etc/fstab</code>: <code><srv>:<export> <path> nfs <opts> 0 0</code>.",
|
||||
"Executa o <code>systemctl daemon-reload</code> para que o systemd apanhe a nova entrada do fstab.",
|
||||
"Tenta <code>chmod 1777</code> e <code>setfacl o::rwx</code> no ponto de montagem, ignorando falhas. Só funciona se o servidor NFS permitir; muitas exportações NAS já permitem gravação a todos os usuários."
|
||||
],
|
||||
"lxcTitle": "Usando a montagem fstab de um LXC",
|
||||
"lxcBody": "O script mostra um comando <code>pct set</code> para bind mount, como <code>pct set <ctid> -mp0 /mnt/<path>,mp=/mnt/<ct-path>,shared=1,backup=0</code>. Ou use o <mountLink>LXC Mount Manager</mountLink>, que detecta montagens fstab. <strong>Nada é alterado dentro do contêiner</strong>. O acesso de um CT sem privilégios depende das permissões do servidor para seus UIDs/GIDs mapeados. O script apenas tenta ajustar permissões pelo host; não garante exportações graváveis nem padrões de fabricantes. Consulte Solução de problemas se o acesso falhar.",
|
||||
"noUiTitle": "A montagem do fstab NÃO é um armazenamento Proxmox",
|
||||
"noUiBody": "A montagem de fstab do hospedeiro é invisível para a interface web Proxmox — por design. Ele não aparece no <em>Datacenter > Storage</em>, você não pode selecioná-lo no criador do VM / CT, e as tarefas de backup do Proxmox não podem segmentá-lo. É puramente um caminho do sistema de arquivos host. Se você também quiser integração com UI, marque os métodos <em>ambos</em> no coletor."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"pvesmIntro": "O método A (pvesm) mapeia para:",
|
||||
"fstabIntro": "Método B (fstab) mapas para:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver os armazenamentos NFS configurados",
|
||||
"body": "Lista todas as entradas NFS no Proxmox (<code>pvesm status | awk ''$2 == \"nfs\"''</code>) com servidor, exportação, tipos de conteúdo, caminho de montagem e status ao vivo. <strong>Nota:</strong> esta vista só mostra armazenamentos registrados em pvesm- — as montagens somente para fstab não estão listadas aqui. Verifique aqueles com <code>findmnt -t nfs</code> ou <code>grep nfs /etc/fstab</code>."
|
||||
},
|
||||
"remove": {
|
||||
"heading": "Remover o armazenamento de NFS",
|
||||
"body": "Executa <code>pvesm remove <storage-id></code> após uma confirmação que mostra o servidor / exportar / conteúdo. Apenas o registro do lado Proxmox é removido — <strong>o servidor remoto NFS em si nunca é tocado</strong>, nenhum arquivo é excluído. Para remover uma montagem fstab-only, edite <code>/etc/fstab</code> à mão e execute <code>umount <path></code>.",
|
||||
"warnTitle": "Fazer backup das dependências primeiro",
|
||||
"warnBody": "Se VMs, CTs ou tarefas de backup ainda referenciam este armazenamento (por ID), removendo-o deixa-os apontando para um armazenamento que não existe mais. O Proxmox irá marcar o erro, mas não irá limpar. Mover ou soltar essas referências primeiro, em seguida, remover o armazenamento."
|
||||
},
|
||||
"test": {
|
||||
"heading": "Teste de conectividade NFS",
|
||||
"body": "Executa um passe diagnóstico sobre cada armazenamento NFS registrado no Proxmox: verifica se o <code>showmount</code> está disponível, que o <code>rpcbind</code> está em execução, pings cada servidor, sondas porta 2049, chama <code>showmount -e</code>, e finalmente relata a própria visão do Proxmox (<code>pvesm status</code>). Boa primeira parada quando um armazenamento aparece como <em>inativo</em> na interface Proxmox."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noServersTitle": "\"Nenhum servidor NFS encontrado na rede\"",
|
||||
"noServersBody": "Auto-descoberta usa <code>nmap -p 2049 --open <subnet>/24</code>. O servidor pode não responder se: estiver em um VLAN / subnet diferente, seu firewall bloqueia nmap sondas (muitos do) ou porta 2049 é intencionalmente fechado nessa interface. Use a opção <em>Manual</em> com o IP ou nome do host do servidor.",
|
||||
"portTitle": "«A porta NFS (2049) não está acessível»",
|
||||
"portBody": "O Ping teve sucesso, mas o <code>nc -z -w 3 <server> 2049</code> falhou. Verifique se o serviço NFS está em execução no servidor (<code>systemctl status nfs-server</code> em Linux, Painel de controle → Serviços de arquivos em Synology, plugin NFS em OMV / TrueNAS), e que o firewall permite 2049 do host Proxmox.",
|
||||
"showmountTitle": "\"Falhou em conectar\" do showmount",
|
||||
"showmountBody": "O servidor recusou a consulta da lista de exportação. Causas comuns: o servidor obriga ACLs cliente restrito (seu IP Proxmox não está na lista permitida), <code>rpcbind</code> não está em execução no servidor, ou o servidor expõe apenas NFSv4 com <code>showmount</code> desabilitado. O caminho de exportação ainda pode ser adicionado manualmente se você souber.",
|
||||
"inactiveTitle": "O armazenamento mostra como inativo na UI Proxmox",
|
||||
"inactiveBody": "Execute primeiro <em>Testar conectividade NFS</em>: ele verifica se o servidor responde ao ping, se a porta 2049 está aberta e se a lista de exportações (<code>showmount -e</code>) está disponível. Se a conexão funcionar mas o armazenamento continuar inativo, consulte <code>journalctl -u pvestatd</code> e a configuração do servidor/exportação. Corrija primeiro a conexão ou os privilégios. <code>pvesm set <id> --disable 0</code> habilita um armazenamento desabilitado; não é um reparo geral de NFS.",
|
||||
"lxcNoWriteTitle": "A montagem fstab funciona mas o LXC sem privilégios não consegue gravar por bind mount",
|
||||
"lxcNoWriteBody": "O acesso NFS depende de proprietários, ACLs e squash no servidor. Opções CIFS como <code>uid=</code> e <code>file_mode=</code> <strong>não</strong> se aplicam a NFS. Com o mapeamento LXC padrão, root no CT vira UID 100000 no host, não UID remoto 0. Configure o acesso para o UID/GID mapeado real ou a identidade anônima do servidor. <code>no_root_squash</code> afeta apenas o UID remoto 0 e não resolve todos os casos de UID 100000. O script tenta <code>chmod 1777</code>, mas não ignora permissões do servidor.",
|
||||
"fstabBootTitle": "A montagem do fstab não aparece após reiniciar",
|
||||
"fstabBootBody": "O script adiciona <code>nofail,_netdev</code> para que um compartilhamento faltando no boot não bloqueie a inicialização. Se a montagem nunca aparecer: confirme que a rede está acessível (<code>ping <server></code>), verifique <code>journalctl -u remote-fs.target</code>, e verifique se a entrada é válida com <code>mount -fav | grep nfs</code>. <code>mount -a</code> após a inicialização monta tudo o que está faltando atualmente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/host-samba",
|
||||
"label": "Samba / CIFS como armazenamento Proxmox",
|
||||
"tail": " — mesmo padrão de fluxo (método A pvesm + método B fstab) para compartilhamentos SMB/CIFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Gerenciador de montagem LXC",
|
||||
"tailRich": " — montar a via apenas para fstab <code>/mnt/<path></code> num ou mais contentores."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-client",
|
||||
"label": "Cliente NFS em LXC",
|
||||
"tail": " — alternativa: montagem NFS directamente a partir de dentro de um contentor privilegiado (sem passar pelo host)."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Host: montar compartilhamento Samba | Documentação ProxMenux",
|
||||
"description": "Monte uma partilha Samba ou CIFS externa no host Proxmox como armazenamento Proxmox com pvesm add cifs, como montagem fstab com opções uid/gid/file_mode abertas, invisível em Datacenter > Storage, ou das duas formas. O método fstab permite que um LXC sem privilégios leia e escreva por bind mount sem alterações dentro do contentor.",
|
||||
"ogTitle": "Host: montar compartilhamento Samba | Documentação ProxMenux",
|
||||
"ogDescription": "Montar um compartilhamento externo de Samba / CIFS no host Proxmox via pvesm, fstab com perms abertos (ideal para LXC binding-mounts), ou ambos."
|
||||
},
|
||||
"header": {
|
||||
"title": "Host: montar compartilhamento Samba no host",
|
||||
"description": "Montar um compartilhamento externo de Samba (SMB / CIFS) — de um NAS, uma caixa Windows, uma exportação TrueNAS SMB — no host Proxmox. Escolha um ou ambos os métodos: registre-o como armazenamento Proxmox (visível no Datacenter > Armazenamento) e/ou adicione uma montagem /etc/fstab simples em um caminho que você escolher, com uid/gid/file_mode aberto para que os LXCs não privilegiados possam vincular-montar e escrever sem quaisquer alterações dentro do recipiente.",
|
||||
"section": "Armazenamento e Compartilhamento · Máquina"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "O ProxMenux oferece dois métodos para uma partilha Samba: <strong>(1) Armazenamento Proxmox</strong> através de <code>pvesm add cifs</code>, visível em Datacenter > Storage e montado em <code>/mnt/pve/<id></code>. A palavra-passe é guardada em texto simples em <code>/etc/pve/priv/storage/<id>.pw</code>, protegida pelo diretório privado acessível apenas a root: é controlo de acesso, não encriptação. <strong>(2) Montagem fstab do host</strong> num caminho escolhido, persistente através de <code>/etc/fstab</code> e montada com <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> para permitir a escrita através de bind mounts de LXC sem privilégios. As credenciais ficam num ficheiro exclusivo de root em <code>/etc/samba/credentials/</code>, nunca diretamente em <code>fstab</code>. Pode utilizar um método ou ambos."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Monte Samba Share on Host</strong>. Você verá este sub-menu com quatro opções:",
|
||||
"imageAlt": "Menu do gestor de máquinas Samba — Montar / Ver / Remover / Teste de conectividade"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado",
|
||||
"body": "O fluxo tem duas fases. Fase 1: descubra servidor, valide credenciais, escolha o compartilhamento e, em seguida, escolha os métodos de montagem através de uma lista de verificação. Fase 2: apenas os métodos marcados são executados. As credenciais são necessárias antecipadamente porque o <code>smbclient</code> precisa delas para listar compartilhamentos. Até a confirmação final, nem <code>/etc/pve/storage.cfg</code> nem <code>/etc/fstab</code> são tocados."
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Selector de métodos de montagem (duas opções, marca uma ou ambas)",
|
||||
"intro": "Após selecionar o compartilhamento e validar credenciais, o ProxMenux mostra uma lista de verificação com os dois métodos de montagem. Pode marcar um ou ambos. Se carregar em OK sem marcar nada, a janela reaparece até escolher pelo menos uma opção ou carregar em Cancelar para sair do fluxo.",
|
||||
"headerMethod": "Método",
|
||||
"headerMount": "Caminho de montagem",
|
||||
"headerUi": "Visível no Datacenter > Armazenamento",
|
||||
"headerUseCase": "Caso de uso típico",
|
||||
"rows": [
|
||||
{
|
||||
"method": "<strong>Como armazenamento Proxmox (pvesm)</strong>",
|
||||
"mountRich": "<code>/mnt/pve/<storage-id></code> (gerido pela Proxmox)",
|
||||
"ui": "Sim",
|
||||
"useCase": "Backups, ISOs, modelos LXC — qualquer coisa que precise aparecer na interface de usuário Proxmox. Discos de VM ao vivo são tecnicamente suportados, mas desencorajados em CIFS (bloqueio semântico)."
|
||||
},
|
||||
{
|
||||
"method": "<strong>Host somente fstab</strong>",
|
||||
"mountRich": "<code>/mnt/<path></code> com uid/gid/file_mode aberto",
|
||||
"ui": "Não",
|
||||
"useCaseRich": "Disponibilize o compartilhamento aos LXCs por bind mount <em>sem</em> registrar armazenamento Proxmox. Permissões locais abertas facilitam o acesso dos CTs sem privilégios, mas o servidor SMB ainda precisa autorizar a gravação pelo usuário autenticado."
|
||||
},
|
||||
{
|
||||
"method": "<strong>Ambos</strong>",
|
||||
"mount": "Ambos os caminhos acima (dois pontos de montagem da mesma exportação CIFS)",
|
||||
"ui": "Sim",
|
||||
"useCase": "Você quer a integração de UI E um caminho de host-side estável com permissões abertas para LXC binding-mounts. A montagem pvesm usa padrões Proxmox; a montagem fstab aplica o uid/gid/file_mode aberto separadamente."
|
||||
}
|
||||
],
|
||||
"bothTitle": "«Ambos» cria dois pontos de montagem CIFS",
|
||||
"bothBody": "pvesm monta em <code>/mnt/pve/<id></code> com as opções padrão do Proxmox. fstab monta em <code>/mnt/<path></code> com <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> para acesso local por bind mounts LXC. O servidor SMB ainda impõe os privilégios do usuário da montagem. Dois pontos de montagem não garantem duas conexões TCP separadas."
|
||||
},
|
||||
"pvesmBranch": {
|
||||
"heading": "Método A — Armazenagem Proxmox (pvesm)",
|
||||
"intro": "Se o <em>Como armazenamento Proxmox</em> estiver marcado, o ProxMenux roda o fluxo original do pvesm:",
|
||||
"items": [
|
||||
"<strong>Storage ID</strong> — <code>cifs-<server-ip-with-dashes></code> por omissão. Apenas letras, dígitos, <code>-</code> e <code>_</code>.",
|
||||
"<strong>Tipos de conteúdo</strong> — esta lista ProxMenux oferece <strong>6</strong> opções. Omite <code>rootdir</code> em relação ao NFS; é uma escolha do script, não uma proibição de sistemas de arquivos raiz LXC em todas as versões do backend CIFS Proxmox:"
|
||||
],
|
||||
"headerType": "Tipo de conteúdo",
|
||||
"headerAllows": "O que permite",
|
||||
"rows": [
|
||||
{
|
||||
"type": "import",
|
||||
"allows": "Importação de imagens de disco (selecionada por padrão)."
|
||||
},
|
||||
{
|
||||
"type": "backup",
|
||||
"allowsRich": "Arquivos de backup VM e CT (<code>vzdump</code>)."
|
||||
},
|
||||
{
|
||||
"type": "iso",
|
||||
"allows": "Instalação de imagens ISO."
|
||||
},
|
||||
{
|
||||
"type": "vztmpl",
|
||||
"allows": "Modelos LXC."
|
||||
},
|
||||
{
|
||||
"type": "images",
|
||||
"allowsRich": "Imagens de disco das VMs em uso — <strong>aviso no diálogo</strong>, veja abaixo."
|
||||
},
|
||||
{
|
||||
"type": "snippets",
|
||||
"allows": "Scripts de hook e snippets cloud-init."
|
||||
}
|
||||
],
|
||||
"warnTitle": "Discos de VM vivos em CIFS",
|
||||
"warnBody": "Selecionar <code>images</code> mostra um aviso ProxMenux: CIFS/SMB pode causar problemas de bloqueio em operações com discos de VMs. O script recomenda NFS, mas permite continuar. Backups e ISOs são usos comuns de CIFS. Avalie bloqueios, snapshots, migração e carga antes de usar CIFS para <code>images</code>.",
|
||||
"credsTitle": "Onde o pvesm armazena credenciais",
|
||||
"credsBody": "A senha não é gravada em <code>/etc/pve/storage.cfg</code>. O Proxmox salva credenciais em texto simples em <code>/etc/pve/priv/storage/<storage-id>.pw</code>, na área privada do sistema de arquivos do cluster, legível apenas por <code>root</code> (modo <code>0600</code>); elas são protegidas por permissões de acesso, não por criptografia. Após mudar a senha no servidor, use <code>pvesm set <id> --password <new></code> ou remova e adicione o armazenamento pelo ProxMenux."
|
||||
},
|
||||
"fstabBranch": {
|
||||
"heading": "Método B — Montagem fstab da máquina",
|
||||
"intro": "Se <em>Somente montagem fstab no host</em> estiver selecionado, o ProxMenux pede o caminho e as opções persistentes, cria um arquivo de credenciais exclusivo de root no modo usuário, monta o compartilhamento e grava a entrada em <code>/etc/fstab</code>:",
|
||||
"items": [
|
||||
"<strong>Caminho de montagem no host</strong> — padrão <code>/mnt/<share-name></code>. Deve ser um caminho absoluto. Se algo já está montado lá, ou existe uma entrada fstab, ProxMenux oferece para substituí-lo.",
|
||||
"<strong>Opções de montagem</strong> — <em>Leitura/gravação</em> (padrão: <code>rw,uid=0,gid=0,file_mode=0777,dir_mode=0777,iocharset=utf8,nofail,_netdev</code>), <em>Somente leitura</em> (<code>file_mode=0555,dir_mode=0555</code>), <em>Personalizado</em> (informe suas opções). O script recomenda uid/gid/file_mode abertos para gravação por bind mounts LXC."
|
||||
],
|
||||
"credsTitle": "Arquivo de credenciais (modo de usuário)",
|
||||
"credsBody": "No modo usuário, o ProxMenux cria um arquivo de credenciais exclusivo de root em <code>/etc/samba/credentials/<server>_<share>.cred</code> (modo <code>0600</code>) com linhas <code>username=</code> e <code>password=</code>. A entrada fstab o referencia pela opção <code>credentials=</code>; a senha em texto simples não aparece em <code>/etc/fstab</code>. No modo convidado, adiciona <code>guest</code> e não cria arquivo de credenciais.",
|
||||
"appliesIntro": "Uma vez confirmado, o script:",
|
||||
"applies": [
|
||||
"<code>mkdir -p</code> o caminho de montagem.",
|
||||
"<code>mount -t cifs -o <opts>,credentials=<file></code> (ou <code>guest</code>) <code>//<srv>/<share> <path></code>.",
|
||||
"Escreve uma entrada de uma linha para <code>/etc/fstab</code>: <code>//<srv>/<share> <path> cifs <opts> 0 0</code>.",
|
||||
"Executa o <code>systemctl daemon-reload</code> para que o systemd apanhe a nova entrada do fstab."
|
||||
],
|
||||
"lxcTitle": "Usando a montagem fstab de um LXC sem privilégios",
|
||||
"lxcBody": "As opções CIFS <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code> abrem as verificações locais de permissões para bind mounts LXC. ACLs do servidor e a semântica Unix/POSIX negociada ainda podem afetar o acesso. <strong>Nada é alterado no contêiner</strong>: nenhum <code>chown</code> no CT, grupos ou edições de <code>/etc/lxc</code>. A linha <code>mp</code> é gerenciada na configuração Proxmox do CT. Use o comando <code>pct set</code> exibido ou o <mountLink>LXC Mount Manager</mountLink>.",
|
||||
"noUiTitle": "A montagem do fstab NÃO é um armazenamento Proxmox",
|
||||
"noUiBody": "A montagem de fstab do hospedeiro é invisível para a interface web Proxmox — por design. Ele não aparece no <em>Datacenter > Storage</em>, você não pode selecioná-lo no criador do VM / CT, e as tarefas de backup do Proxmox não podem segmentá-lo. É puramente um caminho do sistema de arquivos host. Se você também quiser integração com UI, marque os métodos <em>ambos</em> no coletor."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"pvesmIntro": "O método A (pvesm) mapeia para:",
|
||||
"fstabUserIntro": "Método B (fstab, user auth) — arquivo de credenciais + montagem:",
|
||||
"fstabGuestIntro": "Método B (fstab, guest auth) — nenhum arquivo de credenciais:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver armazenamentos CIFS e montagens do host",
|
||||
"body": "Mostra armazenamentos CIFS registrados (<code>pvesm status | awk ''$2 == \"cifs\"''</code>) com servidor, compartilhamento, conteúdo, usuário ou <em>Convidado</em>, caminho e estado. As senhas <strong>nunca são exibidas</strong>. <strong>Nota:</strong> outra seção lista montagens fstab do host, opções, caminho do arquivo de credenciais e estado ativo/inativo. Para verificar manualmente, use <code>findmnt -t cifs</code> ou <code>grep cifs /etc/fstab</code>."
|
||||
},
|
||||
"remove": {
|
||||
"heading": "Remover armazenamento CIFS ou montagem do host",
|
||||
"body": "O seletor oferece armazenamentos pvesm e montagens fstab do host. Para pvesm executa <code>pvesm remove <storage-id></code> e o Proxmox remove as credenciais associadas. Para fstab tenta <code>umount <path></code>, remove a entrada de <code>/etc/fstab</code> e as credenciais em <code>/etc/samba/credentials/</code>, depois o diretório vazio se possível. Se a desmontagem falhar, é preciso desmontar manualmente ou reiniciar. <strong>O servidor Samba remoto e seus arquivos não são alterados</strong>.",
|
||||
"warnTitle": "Fazer backup das dependências primeiro",
|
||||
"warnBody": "VMs, CTs ou tarefas de backup que referenciam este armazenamento por ID irá falhar após a remoção. Mover / soltar essas referências antes de remover o armazenamento."
|
||||
},
|
||||
"test": {
|
||||
"heading": "Teste a conectividade do Samba",
|
||||
"body": "Executa um passe diagnóstico sobre cada armazenamento CIFS registrado no Proxmox: verifica se o <code>smbclient</code> está disponível, pings cada servidor, sonda portas 445 e 139, tenta uma lista de convidados, e relata a própria visão do Proxmox (<code>pvesm status</code>). \"Requer autenticação\" na lista de convidados significa que seu servidor só expõe compartilhamentos a usuários autenticados — normal para a maioria das configurações do NAS."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noServersTitle": "\"Nenhum servidor Samba encontrado na rede\"",
|
||||
"noServersBody": "Auto-descoberta usa <code>nmap -p 139,445</code>. O servidor pode estar em uma subrede diferente, firewalled, ou somente acessível pelo hostname (mDNS / WINS). Use a opção <em>Manual</em> com o IP ou hostname.",
|
||||
"noSharesTitle": "\"Nenhuma partilha acessível encontrada\"",
|
||||
"noSharesBody": "<code>smbclient -L</code> não devolveu nada para estas credenciais. Causas: o usuário não tem permissão para listar compartilhamentos (tentar com credenciais de administrador uma vez, ou digitar o nome do compartilhamento manualmente), o servidor tem visibilidade de compartilhamento desabilitada, ou as credenciais estão erradas. O script permite digitar o nome do compartilhamento manualmente neste caso.",
|
||||
"denyTitle": "A montagem do Proxmox falhou com o NT_STATUS_ACCESS_DENIED",
|
||||
"denyBody": "As credenciais pvesm armazenadas estão fora de sincronia com o servidor Samba (senha alterada, conta desativada, domínio / grupo de trabalho descompasso). Reentrar credenciais com <code>pvesm set <id> --username <u> --password <p></code> ou remover e re-adicionar de ProxMenux. Se o servidor estiver em um domínio AD, adicione <code>--domain <DOMAIN></code> à chamada <code>pvesm set</code>.",
|
||||
"sleepTitle": "\"host está em baixo\" ou o estado de armazenamento fica inativo à noite",
|
||||
"sleepBody": "Alguns aparelhos NAS colocam SMB para dormir agressivamente. <code>pvestatd</code> então vê o armazenamento como inativo até que o primeiro acesso acorde o NAS. Se isto é cosmético, nada está partido. Se isso causar falhas de backup, desativar a desconexão ociosa do SMB no NAS ou agendar backups fora da janela de sono.",
|
||||
"lxcNoWriteTitle": "LXC desprivilegiado não pode escrever no caminho do fstab",
|
||||
"lxcNoWriteBody": "Confira as opções pretendidas em <code>findmnt /mnt/<path></code>, como <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>. A falta de privilégios locais de gravação pode bloquear UIDs LXC mapeados. Reaplique o perfil RW ou ajuste as opções personalizadas. Confira também os privilégios do usuário SMB no servidor e se extensões Unix/POSIX fornecem modos do servidor; modos locais abertos não ignoram ACLs do servidor.",
|
||||
"fstabBootTitle": "A montagem do fstab não aparece após reiniciar",
|
||||
"fstabBootBody": "O script adiciona <code>nofail,_netdev</code> para que um compartilhamento faltando no boot não bloqueie a inicialização. Se a montagem nunca aparecer: confirme que a rede está acessível (<code>ping <server></code>), verifique <code>journalctl -u remote-fs.target</code>, verifique se o arquivo de credenciais ainda existe (<code>ls -l /etc/samba/credentials/</code>) e é legível, e tente <code>mount -a</code> manualmente."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"label": "NFS partilha como armazenamento Proxmox",
|
||||
"tail": " — página de irmãos com o mesmo padrão de fluxo (método A pvesm + método B fstab) e trade-offs lado a lado."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Gerenciador de montagem LXC",
|
||||
"tailRich": " — montar a via apenas para fstab <code>/mnt/<path></code> num ou mais contentores."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-client",
|
||||
"label": "Cliente Samba em LXC",
|
||||
"tail": " — alternativa: montagem Samba directamente a partir de dentro de um contentor privilegiado (sem passar pelo host)."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Proxmox NFS, Samba, iSCSI & LXC Pontos de montagem — Armazenamento e Compartilhamento ProxMenux",
|
||||
"description": "Integre armazenamento externo e local ao Proxmox VE e compartilhe pastas entre o host e os contêineres LXC. Adicione compartilhamentos NFS, Samba (CIFS) e destinos iSCSI como armazenamento Proxmox, configure bind mounts LXC com o Mount Manager e execute clientes e servidores NFS ou Samba dentro dos contêineres.",
|
||||
"ogTitle": "Proxmox NFS, Samba, iSCSI e LXC pontos de montagem — Armazenamento e partilha",
|
||||
"ogDescription": "Integre o armazenamento externo/local em Proxmox VE — NFS, Samba, registo iSCSI e bind mounts LXC e partilha de rede.",
|
||||
"twitterTitle": "Proxmox NFS, Samba, iSCSI | ProxMenux",
|
||||
"twitterDescription": "Adicionar NFS / Samba / iSCSI como armazenamento Proxmox e compartilhar pastas entre host e LXC."
|
||||
},
|
||||
"header": {
|
||||
"title": "Gerenciador de armazenamento e compartilhamento",
|
||||
"description": "Integre armazenamento externo ou local ao Proxmox VE e compartilhe pastas entre o host e os contêineres LXC. Três grupos de ferramentas: integração do armazenamento do host (registro no próprio Proxmox), LXC Mount Manager (bind mounts com tratamento prático de permissões) e compartilhamento de rede LXC (fluxos de cliente e servidor NFS ou Samba para casos específicos).",
|
||||
"section": "Armazenamento e compartilhamento"
|
||||
},
|
||||
"intro": {
|
||||
"title": "Para que serve este menu",
|
||||
"body": "O Gerenciador de disco funciona no nível de <em> discos físicos individuais</em>. O Storage & Share Manager funciona um nível acima — ele <strong>registra pools de armazenamento e compartilhamentos de rede no Proxmox</strong> (para que a interface e o criador de VMs possam usá-los) e <strong>configura o compartilhamento de arquivos entre o host e seus containers</strong>."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir o menu",
|
||||
"body": "No menu principal do ProxMenux, selecione <strong>Storage & Share Manager</strong>. Você verá isto:",
|
||||
"imageAlt": "Menu de gerenciamento de armazenamento e compartilhamento com blocos HOST e LXC"
|
||||
},
|
||||
"groups": {
|
||||
"heading": "Três grupos de ferramentas",
|
||||
"intro": "O menu se divide em três grupos. <strong>Integração do armazenamento do host</strong> registra armazenamento externo ou local no próprio Proxmox. O <strong>LXC Mount Manager</strong> é a principal ferramenta para compartilhar pastas com contêineres: um fluxo de bind mount que trata o mapeamento de UIDs de CTs sem privilégios no lado do host. <strong>Compartilhamento de rede LXC</strong> cobre quatro cenários adicionais em que um contêiner precisa <em>utilizar</em> ou <em>expor</em> compartilhamentos NFS ou Samba diretamente.",
|
||||
"hostTitle": "Armazenagem da máquina",
|
||||
"hostBody": "Registre armazenamento externo e local em Proxmox via <code>pvesm add …</code>. Uma vez registrado, o armazenamento aparece na UI Proxmox e está disponível para os criadores VM e CT.",
|
||||
"hostItems": [
|
||||
"NFS / Samba / iSCSI externos → armazenamento Proxmox",
|
||||
"Disco local → Diretório Proxmox ou armazenamento ZFS",
|
||||
"Diretório local compartilhado (para bind mounts entre CTs)"
|
||||
],
|
||||
"lxcMountTitle": "Gerenciador de montagem LXC",
|
||||
"lxcMountBody": "A principal ferramenta de compartilhamento LXC. Disponibiliza diretórios do host nos contêineres por bind mount com <code>pct set -mpN</code> e trata as particularidades de permissão dos CTs sem privilégios, sem criar grupos ou usuários dentro do contêiner.",
|
||||
"lxcMountItems": [
|
||||
"Funciona com CTs com e sem privilégios",
|
||||
"Oferece <code>o+rwx</code> no diretório do host para UIDs sem privilégios",
|
||||
"Corrige as montagens CIFS / NFS existentes, se necessário"
|
||||
],
|
||||
"lxcNetTitle": "Partilha de rede LXC",
|
||||
"lxcNetBody": "Quatro fluxos adicionais para contêineres que precisam utilizar ou expor compartilhamentos NFS ou Samba diretamente. Todos exigem um contêiner <strong>com privilégios</strong>.",
|
||||
"lxcNetItems": [
|
||||
"<strong>Cliente</strong> NFS / Samba (utiliza compartilhamentos externos)",
|
||||
"NFS / Samba <strong>server</strong> (exponha pastas CT)"
|
||||
]
|
||||
},
|
||||
"host": {
|
||||
"heading": "Integração ao armazenamento da máquina",
|
||||
"intro": "Registo de armazenamento em Proxmox. Cada opção chama <code>pvesm add …</code> sob o capô, então o armazenamento aparece em <strong>Datacenter → Storage</strong> e fica disponível para os criadores VM / CT.",
|
||||
"options": [
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"icon": "Network",
|
||||
"title": "Adicionar a partilha NFS como armazenamento Proxmox",
|
||||
"description": "Registe uma exportação NFS externa como armazenamento Proxmox com pvesm add nfs. O Proxmox trata da montagem, sem entradas adicionais em fstab."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-samba",
|
||||
"icon": "Share2",
|
||||
"title": "Adicionar a partilha Samba como armazenamento Proxmox",
|
||||
"description": "Registe uma partilha Samba ou CIFS externa como armazenamento Proxmox com pvesm add cifs. O Proxmox trata da montagem e das credenciais."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-iscsi",
|
||||
"icon": "Database",
|
||||
"title": "Adicionar o alvo iSCSI como armazenamento Proxmox",
|
||||
"description": "Conecte-se a um alvo externo iSCSI e registre-o como armazenamento Proxmox (dispositivo de bloco) para imagens de disco VM."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-disk",
|
||||
"icon": "HardDrive",
|
||||
"title": "Adicionar o disco local como armazenamento Proxmox",
|
||||
"description": "Formate um disco local SATA / SAS / NVMe e registre-o como armazenamento Proxmox do tipo diretório ou pool ZFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-shared",
|
||||
"icon": "FolderOpen",
|
||||
"title": "Adicionar diretório compartilhado na máquina",
|
||||
"description": "Criar um directório da máquina destinado a ser montado em várias CTs. Não é um armazenamento Proxmox — puramente um recurso do lado do host para as montagens de ligação LXC."
|
||||
}
|
||||
]
|
||||
},
|
||||
"lxcMount": {
|
||||
"heading": "Gerenciador de montagem LXC",
|
||||
"intro": "A principal ferramenta para compartilhar pastas entre o host Proxmox e os recipientes LXC. Ele usa <code>pct set -mpN</code> para vincular-montar um diretório host no recipiente, e lida com as peculiaridades de permissão de CTs sem privilégios no lado host (nenhum grupo ou usuários são criados dentro do recipiente).",
|
||||
"card": {
|
||||
"title": "LXC pontos de montagem (Host ↔ CT)",
|
||||
"description": "Disponibilize qualquer diretório do host num contentor LXC por bind mount com pct set -mpN. Funciona com CT com ou sem privilégios, oferece chmod o+rwx e ACL para o diretório no host e corrige montagens CIFS ou NFS existentes quando necessário."
|
||||
}
|
||||
},
|
||||
"lxcNet": {
|
||||
"heading": "Partilha de rede LXC",
|
||||
"intro": "Use estes fluxos quando um contêiner precisa <em>ser</em> um endpoint NFS ou Samba: utilizar um compartilhamento externo (cliente) ou expor suas próprias pastas (servidor). Para a maioria das necessidades de compartilhamento (bind mounts host ↔ CT), o <mountLink>LXC Mount Manager</mountLink> é mais simples e não requer contêineres com privilégios.",
|
||||
"options": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-client",
|
||||
"icon": "Download",
|
||||
"title": "Cliente NFS em LXC",
|
||||
"description": "Monte compartilhamentos NFS externos de dentro de um contêiner LXC com privilégios. Oferece descoberta automática, persistência em /etc/fstab e desmontagem limpa."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-client",
|
||||
"icon": "Download",
|
||||
"title": "Cliente Samba em LXC",
|
||||
"description": "Monte compartilhamentos Samba / CIFS de dentro de um contêiner LXC com privilégios. Credenciais armazenadas com proteção e descoberta automática disponível."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-server",
|
||||
"icon": "Upload",
|
||||
"title": "Servidor NFS em LXC",
|
||||
"description": "Exportar pastas sobre NFS de dentro de um recipiente privilegiado LXC."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-server",
|
||||
"icon": "Upload",
|
||||
"title": "Servidor Samba em LXC",
|
||||
"description": "Expor pastas sobre SMB / CIFS de dentro de um recipiente privilegiado LXC."
|
||||
}
|
||||
]
|
||||
},
|
||||
"privReq": {
|
||||
"title": "Requisito de contentor privilegiado",
|
||||
"body": "Os quatro fluxos de <strong>compartilhamento de rede LXC</strong> acima exigem um contêiner <strong>com privilégios</strong>. Os scripts exigem esse modo suportado antes de configurar serviços e ferramentas de montagem (<code>nfs-kernel-server</code>, <code>smbd</code>, <code>mount.nfs</code>, <code>mount.cifs</code>). Para compartilhar arquivos entre o host e um CT sem privilégios, use o <mountLink>LXC Mount Manager</mountLink>: ele faz bind mounts e ajusta permissões no host, permitindo leitura e gravação sem configurar esses serviços ou ferramentas dentro do contêiner."
|
||||
},
|
||||
"unprivExplain": {
|
||||
"title": "Como ProxMenux lida com permissões CT sem privilégios",
|
||||
"body": "Contêineres LXC sem privilégios deslocam seus UIDs em <strong>+100000</strong> no host (UID 0 do contêiner = UID 100000 do host, UID 1000 do contêiner = UID 101000 do host, …). Um arquivo criado por um usuário do contêiner aparece no host como <em>outros</em>, sem corresponder a um usuário ou grupo comum do host. O LXC Mount Manager oferece uma solução prática: em vez de alinhar UIDs/GIDs entre host e CT, propõe <code>chmod o+rwx</code> e ACLs correspondentes no diretório do host, para que qualquer UID mapeado possa ler e gravar. Para CIFS, remonta com <code>uid=0,gid=0,file_mode=0777,dir_mode=0777</code>; para NFS, configura um diretório gravável por todos com sticky bit e, se o servidor aplicar root squash, orienta sobre a correção necessária no servidor."
|
||||
},
|
||||
"scripts": {
|
||||
"heading": "Programas envolvidos",
|
||||
"intro": "Cada página inclui um link para o script que impulsiona seu fluxo. O arquivo abaixo é um auxiliar compartilhado que não está documentado como sua própria página, mas é usado por vários dos fluxos de compartilhamento de rede LXC:",
|
||||
"itemTail": " — validação do CT, seleção de pontos de montagem, verificação privilegiada e ajudadores universais de configuração de grupo compartilhados entre os fluxos cliente / servidor do LXC."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,174 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Pontos de montagem LXC (host ↔ contêiner) | Documentação ProxMenux",
|
||||
"description": "O LXC Mount Manager disponibiliza um diretório do host num ou mais contentores LXC por bind mount com pct set -mpN. Trata das particularidades dos contentores sem privilégios, corrige montagens CIFS e NFS no host e não altera nada dentro do contentor.",
|
||||
"ogTitle": "Pontos de montagem LXC (host ↔ contêiner) | Documentação ProxMenux",
|
||||
"ogDescription": "Disponibilize diretórios do host nos contêineres LXC por bind mount. Gerencia o mapeamento de UID sem privilégios de forma prática e corrige o acesso CIFS / NFS no host."
|
||||
},
|
||||
"header": {
|
||||
"title": "Pontos de montagem LXC (Host ↔ Container)",
|
||||
"description": "A ferramenta principal para partilhar pastas entre o host Proxmox e os contentores LXC. Disponibiliza um diretório do host num ou mais contentores por bind mount com a sintaxe nativa pct set -mpN. Resolve as particularidades dos privilégios no lado do host, sem alterar nada dentro dos contentores.",
|
||||
"section": "Armazenamento e Compartilhamento · LXC"
|
||||
},
|
||||
"intro": {
|
||||
"title": "O que isto faz",
|
||||
"body": "Pegue um diretório que vive no host Proxmox (uma pasta local, um compartilhamento NAS montado, um armazenamento gerenciado pelo Proxmox...) e faça com que ele apareça dentro de um container LXC em um caminho que você escolher, com permissões que funcionam mesmo para recipientes sem privilégios — sem tocar em nada dentro do container."
|
||||
},
|
||||
"bigPicture": {
|
||||
"heading": "Como funciona (o quadro geral)",
|
||||
"intro": "Um bind mount instrui o kernel a mostrar o diretório <code>X</code> do host também no caminho <code>Y</code> do contêiner. Sem cópia, sincronização ou transferência de rede: ambos veem os <em>mesmos arquivos</em> ao mesmo tempo.",
|
||||
"sourceLabel": "Host Proxmox",
|
||||
"sourceDetail": "/mnt/data\n(sua pasta)",
|
||||
"targetLabel": "Contentor LXC",
|
||||
"targetDetail": "/mnt/data\n(mostra aqui)",
|
||||
"arrowLabel": "bind mount",
|
||||
"outro": "O caminho do hospedeiro à esquerda e o caminho do recipiente à direita podem ser diferentes — por exemplo, o <code>/mnt/nas-films</code> no hospedeiro pode tornar-se <code>/media/films</code> no interior do recipiente. O script adiciona a entrada para a configuração do recipiente (<code>/etc/pve/lxc/<ctid>.conf</code>) usando o próximo índice <code>mpN</code> livre, com dois padrões seguros preparados em:",
|
||||
"items": [
|
||||
"<code>shared=1</code> — informa ao Proxmox que os dados são compartilhados e não devem ser migrados com o CT. A opção não replica dados: o mesmo caminho e os mesmos dados devem estar disponíveis no nó de destino.",
|
||||
"<code>backup=0</code> — exclui o monte de ligação dos backups do <code>vzdump</code> (os dados vivem no host, você faz backup separadamente)."
|
||||
]
|
||||
},
|
||||
"perms": {
|
||||
"heading": "Manuseamento de permissões – a parte smart",
|
||||
"intro": "Montagens de ligação são fáceis em princípio. A parte difícil são as permissões: um container <strong>sem privilégios</strong> LXC muda cada UID por <strong>+100000</strong>, então um arquivo criado dentro do container pelo usuário 1000 aparece no host como UID 101000 — um UID que ninguém no host possui. Para fazer isso funcionar sem alinhar UIDs entre hosts e contêineres, o ProxMenux aplica o truque certo de \"abrir permissões\" no lado <em>host</em>, dependendo do tipo de diretório que você escolheu:",
|
||||
"headerType": "Tipo de pasta da máquina",
|
||||
"headerAction": "O que o script oferece para fazer",
|
||||
"localType": "Pasta local",
|
||||
"localTypeSub": "Por exemplo: /mnt/data",
|
||||
"localActionRich": "<code>chmod o+rwx</code> + <code>setfacl o::rwx</code> no diretório da máquina. Só é oferecido se o CT não for privilegiado e as permissões atuais forem insuficientes.",
|
||||
"cifsType": "CIFS / SMB montados",
|
||||
"cifsTypeSub": "Por exemplo: /mnt/pve/cifs-…",
|
||||
"cifsActionRich": "Remontar com <code>uid=0, gid=0, file_mode=0777, dir_mode=0777</code> para que o CT (qualquer UID) possa ler e escrever a partilha. O <code>/etc/fstab</code> está actualizado.",
|
||||
"nfsType": "NFS montado",
|
||||
"nfsTypeSub": "Por exemplo: /mnt/pve/nfs-…",
|
||||
"nfsActionRich": "<code>chmod 1777</code> + <code>setfacl o::rwx</code> na montagem NFS. Não é possível substituir o squashing do lado do servidor — se mesmo o host root não consegue gravar, você é guiado para corrigir a exportação no servidor NFS.",
|
||||
"privTitle": "Recipientes privilegiados não precisam de nada disto.",
|
||||
"privBody": "Para recipientes privilegiados, UID 0 no CT é UID 0 no host — raiz dentro do CT pode ler e escrever o diretório do host diretamente sem qualquer truque de permissão. O script detecta isso e ignora o passo de \"abrir permissões\".",
|
||||
"noCtTitle": "O script nunca modifica nada dentro do recipiente",
|
||||
"noCtBody": "Todos os ajustes de permissão acontecem no sistema de arquivos <strong>host</strong>. Sem <code>pct exec</code> chowns, sem grupos criados no CT, sem fstab dentro do recipiente. Se você reutilizar o diretório bind-mounted em um CT diferente mais tarde, as mesmas permissões se aplicam automaticamente — sem configuração por contêiner."
|
||||
},
|
||||
"writes": {
|
||||
"heading": "O que escreve ProxMenux — e o que não escreve",
|
||||
"intro": "Uma confusão comum quando se liga a montagem em um CT: as pessoas assumem que ProxMenux deve estar escrevendo entradas <code>lxc.idmap</code> em <code>/etc/pve/lxc/<CTID>.conf</code>. <strong>Não faz.</strong> Apenas uma linha é anexada a esse arquivo — a própria montagem de ligação:",
|
||||
"outro": "A linha de saída que você vê no final da execução, <em>\"Contêiner sem privilégios — Offset UID: 100000\"</em>, é puramente informacional - ele apenas lhe diz que o CT está usando o mapeamento padrão sem privilégios do Proxmox (root in CT = UID 100000 no host). O script não configura nada em torno dele.",
|
||||
"twoWaysHeading": "As duas maneiras de fazer as permissões funcionar — e por que ProxMenux escolhe uma",
|
||||
"headerApproach": "Aproximação",
|
||||
"headerChanges": "O que muda",
|
||||
"headerWhen": "Quando caber",
|
||||
"hostType": "Permissões no host",
|
||||
"hostTypeSub": "(o que este script faz)",
|
||||
"hostChangesRich": "<code>chmod o+rwx</code> + <code>setfacl o::rwx</code> no diretório da máquina. Os UIDs mapeados do CT (100000+) caem no balde \"outros\", então abrir o <em>outros</em> é suficiente.",
|
||||
"hostWhen": "Acesso genérico a pastas partilhadas de qualquer CT. Vários CTs que partilham o mesmo directório da máquina. Simples e reutilizável.",
|
||||
"idmapTypeRich": "<code>lxc.idmap</code>",
|
||||
"idmapTypeSub": "(não utilizado por este programa)",
|
||||
"idmapChangesRich": "Mapeamento personalizado de UID/GID em <code>/etc/pve/lxc/<CTID>.conf</code> mais entradas correspondentes de <code>/etc/subuid</code> + <code>/etc/subgid</code> na máquina. CT deve ser reiniciado em cada mudança.",
|
||||
"idmapWhenRich": "Você precisa de um UID <em>específico</em> dentro do CT para mapear para um UID <em>específico</em> no host (por exemplo: <code>media:1000</code> no CT deve possuir arquivos como <code>media:1000</code> no host para que NFS não squash). Uma configuração mais rígida, normalmente só vale a pena para esse cenário exato.",
|
||||
"idmapTipTitle": "Quando você realmente precisa de lxc.idmap",
|
||||
"idmapTipBody": "Use mapeamento manual quando arquivos gravados no CT precisarem aparecer no host com um UID/GID numérico específico, por exemplo para compartilhar proprietário com um usuário do host. Isso não ignora <code>all_squash</code> do NFS; o servidor ainda decide a identidade anônima e os privilégios. Adicione entradas <code>lxc.idmap</code> manualmente se necessário. A linha do bind mount é independente dessas entradas."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Configure pontos de montagem LXC (Host ↔ Container)</strong>. Você verá este sub-menu com três opções:",
|
||||
"imageAlt": "Menu do gestor de montagem LXC — Adicionar / Ver / Remover"
|
||||
},
|
||||
"addFlow": {
|
||||
"heading": "Adicionar uma montagem — fluxo total",
|
||||
"intro": "A visão técnica, para quando você deseja saber exatamente o que cada diálogo faz:"
|
||||
},
|
||||
"sources": {
|
||||
"heading": "O que você pode escolher como diretório de máquina",
|
||||
"intro": "O seletor de diretório do host é o mais completo na seção Armazenamento & Share. Analisa quatro fontes e apresenta uma lista deduplicada:",
|
||||
"headerSource": "Origem",
|
||||
"headerWhere": "De onde vem",
|
||||
"headerLabel": "Rótulo no menu",
|
||||
"rows": [
|
||||
{
|
||||
"source": "Montagens de rede ativa",
|
||||
"whereRich": "Compartilhamentos CIFS / NFS atualmente montados, lidos de <code>/proc/mounts</code>.",
|
||||
"labelRich": "<code>NFS [used/size]</code> ou <code>CIFS/SMB [used/size]</code>"
|
||||
},
|
||||
{
|
||||
"source": "Montagens de fstab inactivas",
|
||||
"whereRich": "Definido em <code>/etc/fstab</code> mas não montado atualmente.",
|
||||
"labelRich": "<code>fstab(off)-NFS</code> / <code>fstab(off)-CIFS/SMB</code>"
|
||||
},
|
||||
{
|
||||
"source": "Directórios locais",
|
||||
"whereRich": "Directórios Sub sob <code>/mnt</code> que não são montagens de rede.",
|
||||
"labelRich": "<code>Local [size]</code>"
|
||||
},
|
||||
{
|
||||
"source": "Armazenagens Proxmox",
|
||||
"whereRich": "Caminhos de armazenamento sob <code>/mnt/pve/*</code> (NFS / CIFS registrados via <code>pvesm</code>).",
|
||||
"labelRich": "<code>PVE-NFS</code> / <code>PVE-CIFS/SMB</code> / <code>Proxmox-Storage</code>"
|
||||
},
|
||||
{
|
||||
"source": "Entrada manual",
|
||||
"where": "Qualquer outra coisa — digite você mesmo o caminho absoluto.",
|
||||
"labelRich": "<em>Inserir caminho manualmente</em>"
|
||||
}
|
||||
],
|
||||
"tipTitle": "Caminhos internos do Proxmox são filtrados",
|
||||
"tipBody": "O catador ignora explicitamente os caminhos internos do Proxmox (<code>/mnt/pve/local</code>, <code>/mnt/pve/local-lvm</code>, <code>/mnt/pve/backup</code>, ...) — esses estão reservados para os internos do Proxmox e você não deve ligá-los. Apenas os armazenamentos adicionados ao utilizador aparecem."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"privIntro": "Para um recipiente privilegiado — o caso mais simples, sem truques de permissão:",
|
||||
"unprivLocalIntro": "Para um contêiner sem privilégios com uma pasta de máquinas local — abra as permissões na máquina primeiro:",
|
||||
"unprivCifsIntro": "Para um recipiente sem privilégios com uma partilha CIFS já montada na máquina:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver pontos de montagem",
|
||||
"body": "Lista todas as entradas <code>mpN</code> em cada recipiente neste host Proxmox, agrupados por CT id e mostrando caminho do host → caminho do container além de quaisquer opções extras. Somente leitura — útil como uma verificação de sanidade antes de adicionar ou remover qualquer coisa."
|
||||
},
|
||||
"remove": {
|
||||
"heading": "Remover um ponto de montagem",
|
||||
"body": "Escolha o contentor, escolha a entrada <code>mpN</code>, confirme. O script executa <code>pct set --delete mpN</code> para soltar a entrada da configuração CT e oferece para reiniciar o recipiente se estiver em execução. O diretório host e seu conteúdo são <strong>preservados</strong> — você pode re-adicionar o monte mais tarde (ou anexar o mesmo diretório a um outro CT).",
|
||||
"warnTitle": "Recipientes em funcionamento ao vivo precisam de ser reiniciados para que as alterações produzam efeitos",
|
||||
"warnBody": "Ambos adicionando e removendo pontos de montagem só se tornam visíveis dentro do recipiente após um reinício. O script oferece um clique <code>pct reboot</code> no final de cada operação; você pode recusar e reiniciar manualmente mais tarde."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"noMountTitle": "A montagem aparece em pct config, mas não dentro do contentor",
|
||||
"noMountBody": "As montagens de ligação só se ligam quando o contentor começa. Se você adicionou a montagem enquanto o CT estava em execução, reinicie-a (<code>pct reboot <ctid></code>). Se já estiver reiniciado e ainda estiver em falta, verifique <code>pct config <ctid></code> para confirmar que o item existe e o caminho da máquina contém um diretório.",
|
||||
"noWriteTitle": "Container pode ver o diretório, mas não pode escrever",
|
||||
"noWriteBody": "Quase sempre uma questão de permissões. Para contêineres não privilegiados, execute a correção de permissão do script novamente — os ACLs do diretório host podem ter sido reiniciados por outra ferramenta (rsync, restauração de backup, manual <code>chmod</code>). Para o CIFS, verifique novamente as opções de montagem no host: <code>findmnt /mnt/pve/cifs-…</code>, procure por valores <code>uid=</code> / <code>gid=</code> / <code>file_mode=</code>.",
|
||||
"alreadyTitle": "\"Este caminho já é usado como ponto de montagem neste recipiente\"",
|
||||
"alreadyBody": "Escolheste o mesmo caminho que já está ligado a um directório de máquinas diferente. Escolha um caminho diferente do recipiente ou remova primeiro o ponto de montagem existente.",
|
||||
"nfsTitle": "Acesso NFS bloqueado mesmo após a aplicação da correção host",
|
||||
"nfsIntro": "Seu servidor NFS está esmagando root ou todas as conexões. O script pode detectar isso (ele tenta escrever um arquivo de teste do host) e mostra orientação do lado do servidor. Duas correções comuns do lado do servidor para a exportação:",
|
||||
"nfsItems": [
|
||||
"<code>no_root_squash</code> — CTs privilegiados podem escrever diretamente.",
|
||||
"<code>all_squash,anonuid=65534,anongid=65534</code> — para CTs sem privilégios."
|
||||
],
|
||||
"nfsOutro": "Essas alterações acontecem no servidor NFS (TrueNAS, Synology, sua exportação personalizada, ...), não no Proxmox.",
|
||||
"fstabOffTitle": "Montar entradas \"fstab( off)\" não faz nada",
|
||||
"fstabOffBody": "O seletor mostra entradas <code>fstab(off)-</code> quando uma montagem de rede é definida em fstab mas não é montada atualmente. O script permite- lhe vincular- montar o caminho, mas o diretório estará vazio até que você realmente monte o compartilhamento (<code>mount <path></code> na máquina). Monta-o primeiro, depois liga-o ao CT."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/host-local-shared",
|
||||
"label": "Adicionar a Pasta Partilhada na Máquina",
|
||||
"tailRich": " — primeiro passo típico: preparar um <code>/mnt/shared</code> no hospedeiro antes de o ligar em uma ou mais CTs aqui."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"label": "Adicionar a partilha NFS como armazenamento Proxmox",
|
||||
"extraHref": "/docs/storage-share/host-samba",
|
||||
"extraLabel": "Adicionar a partilha Samba como armazenamento Proxmox",
|
||||
"joiner": " / ",
|
||||
"tailRich": " — registar um compartilhamento externo no Proxmox primeiro, em seguida, ligar-montar o seu caminho <code>/mnt/pve/<id></code> para o CT aqui."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-client",
|
||||
"label": "Cliente NFS em LXC",
|
||||
"extraHref": "/docs/storage-share/lxc-samba-client",
|
||||
"extraLabel": "Cliente Samba em LXC",
|
||||
"joiner": " / ",
|
||||
"tail": " — a alternativa quando pretende que o próprio CT monte o compartilhamento (requer um contentor privilegiado)."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "NFS cliente em LXC | ProxMenux Documentação",
|
||||
"description": "Monte compartilhamentos NFS diretamente em um contêiner LXC Proxmox com o ProxMenux. Instala nfs-common automaticamente, oferece descoberta na LAN, montagens persistentes via /etc/fstab e padrões de inicialização seguros. Exige um contêiner com privilégios.",
|
||||
"ogTitle": "NFS cliente em LXC | ProxMenux Documentação",
|
||||
"ogDescription": "Monte compartilhamentos NFS em um contêiner LXC com privilégios. Descoberta automática, persistência em /etc/fstab e padrões de inicialização seguros."
|
||||
},
|
||||
"header": {
|
||||
"title": "Cliente NFS em LXC",
|
||||
"description": "Monte compartilhamentos NFS diretamente de dentro de um recipiente Proxmox LXC. O container torna-se um cliente NFS real — fala com o servidor NFS através da rede, executa mount.nfs, escreve para /etc/fstab. ProxMenux instala nfs-common para você, ajuda você a encontrar servidores e exportações, e aplica padrões de inicialização seguros.",
|
||||
"section": "Armazenamento e Compartilhamento · LXC"
|
||||
},
|
||||
"privReq": {
|
||||
"title": "Recipiente privilegiado necessário",
|
||||
"body": "O cliente do kernel <code>mount.nfs</code> precisa de recursos (<code>SYS_ADMIN</code> no mínimo) que os recipientes LXC desprivilegiados não expõem. O script impõe isso — ele pede que você escolha um CT e <strong>interrompe a execução se ele não for privilegiado</strong>. Se você precisar da partilha dentro de um CT sem privilégios, monte-a no host Proxmox primeiro (com a partilha <hostNfsLink>NFS como armazenamento Proxmox</hostNfsLink>) e ligue-a ao CT com o gestor de montagem <mountLink>LXC</mountLink>."
|
||||
},
|
||||
"what": {
|
||||
"heading": "O que isto faz",
|
||||
"body": "Ao contrário do LXC Mount Manager — o que faz com que o CT veja algo <em>via</em> o host Proxmox — este script dá ao contêiner seu <strong>próprio cliente NFS</strong>: ele fala NFS sobre a rede, monta compartilhamentos diretamente do servidor NFS, e armazena a montagem no <code>/etc/fstab</code> do contêiner. A máquina Proxmox não está no caminho dos dados.",
|
||||
"diagramServerLabel": "Servidor NFS",
|
||||
"diagramServerDetail": "/export/data",
|
||||
"diagramHostLabel": "Host Proxmox",
|
||||
"diagramHostDetail": "(apenas uma\nponte de rede)",
|
||||
"diagramCtLabel": "LXC (com privilégios)",
|
||||
"diagramCtDetail": "/mnt/data\nmount.nfs dentro do CT",
|
||||
"diagramArrow": "NFS",
|
||||
"twoWaysTitle": "Duas maneiras de dar um acesso CT NFS — escolha uma",
|
||||
"twoWaysBind": "<strong>Bind mount pelo host</strong> (<mountLink>LXC Mount Manager</mountLink>): o host monta NFS uma vez e cada CT recebe o mesmo caminho por bind mount. Funciona com CTs sem privilégios. Recomendado quando vários CTs precisam do mesmo compartilhamento.",
|
||||
"twoWaysDirect": "<strong>Montagem NFS direta no CT</strong> (esta página): o CT monta NFS por conta própria. Exige um CT com privilégios. Útil quando o CT precisa gerenciar sua própria conexão e credenciais ou quando cada CT usa um servidor diferente."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Configure o cliente NFS em LXC (somente privilegiado)</strong>. O ProxMenux primeiro pede- lhe para escolher o <strong> alvo CT</strong> (e inicia- o se parar); aborta se não tiver privilégios. Uma vez que o CT é selecionado, você vê este sub-menu:",
|
||||
"imageAlt": "Menu do Gerenciador de Clientes NFS — Montagem / Vista / Desmontagem / Conectividade de teste"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Fluxo do Monte)"
|
||||
},
|
||||
"fstabFlags": {
|
||||
"heading": "Por que essas bandeiras fstab",
|
||||
"intro": "Para montagens permanentes o script adiciona três bandeiras além das opções padrão NFS: <code>_netdev,x-systemd.automount,noauto</code>. Cada um resolve um problema de tempo de inicialização real:",
|
||||
"headerFlag": "Bandeira",
|
||||
"headerEffect": "O que ele faz",
|
||||
"rows": [
|
||||
{
|
||||
"flag": "_netdev",
|
||||
"effect": "Informa ao sistema de inicialização que a montagem precisa da rede. A inicialização não fica esperando essa montagem antes de a rede estar disponível."
|
||||
},
|
||||
{
|
||||
"flag": "x-systemd.automount",
|
||||
"effectRich": "Cria uma unidade de montagem automática systemd: a montagem só acontece na primeira vez que algo acessa o <code>/mnt/<path></code>. O servidor NFS não acessível no arranque não para o servidor CT."
|
||||
},
|
||||
{
|
||||
"flag": "noauto",
|
||||
"effect": "Evita a montagem imediata na inicialização. Com a unidade automount acima, a montagem só ocorre no primeiro acesso."
|
||||
}
|
||||
],
|
||||
"netEffectTitle": "Efeito líquido",
|
||||
"netEffectBody": "O sistema de arquivos NFS é montado no <em>primeiro acesso</em> em vez de imediatamente durante a inicialização. Se o servidor estiver offline, o acesso pode esperar ou falhar e afetar serviços que dependem do caminho. Automount reduz a dependência na inicialização, mas não garante que todos os serviços do CT fiquem imunes a uma falha NFS."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "Replicar todo o fluxo à mão – cada comando roda <strong> dentro do CT</strong> via <code>pct exec <ctid> --</code> ou diretamente via <code>pct enter <ctid></code>:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver as montagens actuais",
|
||||
"body": "Lista cada ponto de montagem NFS ativo dentro do CT (<code>mount | grep nfs</code>) mais cada linha NFS no CT <code>/etc/fstab</code>. Para cada entrada do fstab, o status de montagem ao vivo é mostrado — útil para detectar montagens permanentes que não apareceram no boot."
|
||||
},
|
||||
"unmount": {
|
||||
"heading": "Desmontar a partilha NFS",
|
||||
"body": "Combina as montagens ativas e as entradas do fstab em uma lista, permite escolher uma e <strong>remove a linha correspondente de <code>/etc/fstab</code></strong>. O script <em>não</em> executa <code>umount</code> na montagem ativa. Em vez disso, ele informa que uma reinicialização CT é necessária para que a desmontagem entre em vigor.",
|
||||
"warnTitle": "O script remove entradas do fstab, sem desmontar os sistemas de arquivos ativos",
|
||||
"warnBody": "Esta é uma escolha de design deliberada: <code>umount</code> em uma montagem ocupada falha com \"dispositivo ocupado\" quando algo dentro do CT ainda está usando. A remoção da entrada do fstab garante que a montagem desapareça de forma limpa no próximo início do CT. Se você quiser a montagem desfeita <em>agora</em> e você tem certeza de que nada está usando-o, execute <code>pct exec <ctid> -- umount /mnt/<path></code> à mão após o script terminar."
|
||||
},
|
||||
"test": {
|
||||
"heading": "Teste de conectividade NFS",
|
||||
"body": "Passo diagnóstico dentro do CT: confirma <code>nfs-common</code> está instalado, <code>rpcbind</code> está em execução, lista as montagens atuais NFS, em seguida, itera sobre cada servidor NFS referenciado em fstab e verifica ping → porta 2049 → <code>showmount -e</code>. Boa primeira paragem quando uma montagem permanente falha em subir."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"privTitle": "Contêiner com privilégios necessário (o script interrompe a execução)",
|
||||
"privBody": "O CT selecionado não tem privilégios. O cliente do kernel NFS precisa de capacidade <code>SYS_ADMIN</code> que CTs desprivilegiadas não expõem. Ou converter o CT para a página privilegiada (Disco Manager & conversão está documentada no disco <importLink>Importar para LXC</importLink>) ou usar o caminho alternativo descrito no aviso no topo desta página.",
|
||||
"aptTitle": "apt-get install nfs-common fails",
|
||||
"aptIntro": "O script assume uma família Debian CT (<code>apt-get</code>). Se o CT roda Alpine / Arch / Rocky / Alma, o passo de instalação falha silenciosamente. Instale o cliente NFS manualmente para essa distribuição:",
|
||||
"aptItems": [
|
||||
"Alpine: <code>apk add nfs-utils</code>",
|
||||
"Arch: <code>pacman -S nfs-utils</code>",
|
||||
"Rocky / Alma: <code>dnf install nfs-utils</code>"
|
||||
],
|
||||
"aptOutro": "Em seguida, execute novamente o script ProxMenux — o passo de instalação salta quando as ferramentas já estão presentes.",
|
||||
"portTitle": "\"NFS port (2049) is not accessible\"",
|
||||
"portBody": "O Ping teve sucesso, mas o <code>nc -z <server> 2049</code> falhou de dentro do CT. Verifique se o serviço NFS está em execução no servidor, que o firewall permite o 2049 da rede do CT, e que o CT realmente tem uma rota de rede válida (Tente <code>pct exec <ctid> -- ip route</code>).",
|
||||
"bootTitle": "A montagem permanente tem sucesso mas não aparece no arranque",
|
||||
"bootBody": "Quase sempre uma de: a rede não está pronta quando o CT monta (as bandeiras <code>_netdev,x-systemd.automount,noauto</code> do script corrigem isto — reajustar a montagem através do script se você escreveu a linha fstab à mão sem elas), o servidor não é acessível no arranque (auto-mount espera pelo primeiro acesso — isso é normal), ou DNS não está resolvido no arranque (use o IP do servidor, não o seu nome de máquina).",
|
||||
"squashTitle": "Servidor squashes root, sem acesso de gravação de dentro CT",
|
||||
"squashIntro": "A exportação NFS usa <code>root_squash</code> (o padrão) e o CT escreve como root. Duas opções:",
|
||||
"squashItems": [
|
||||
"Lado do servidor: alterar a exportação para <code>no_root_squash</code> (apenas se você confiar no CT).",
|
||||
"No CT: grave como um usuário não root aceito pelo servidor ou ajuste o proprietário do compartilhamento com chown."
|
||||
],
|
||||
"squashOutro": "ProxMenux não pode corrigir isso — é política de servidor."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Pontos de montagem LXC (Host ↔ Container)",
|
||||
"tail": " — a alternativa para os TAC não privilegiados: montagem no hospedeiro, ligação em CT."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-client",
|
||||
"label": "Cliente Samba em LXC",
|
||||
"tail": " — página relacionada com o mesmo padrão para compartilhamentos SMB / CIFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-server",
|
||||
"label": "Servidor NFS em LXC",
|
||||
"tailRich": " — o inverso: expor pastas <em>de</em> um CT por NFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"label": "Compartilhamento NFS como armazenamento Proxmox",
|
||||
"tail": " — registrar o compartilhamento no próprio Proxmox em vez de dentro de um único CT."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,159 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Servidor NFS em LXC − Documentação ProxMenux",
|
||||
"description": "Compartilhe pastas por NFS a partir de um contêiner LXC Proxmox com o ProxMenux. Instala nfs-kernel-server automaticamente e configura o grupo comum sharedfiles, /etc/exports, ACLs de rede e desinstalação completa. Exige um contêiner com privilégios.",
|
||||
"ogTitle": "Servidor NFS em LXC − Documentação ProxMenux",
|
||||
"ogDescription": "Execute um servidor NFS em um LXC com privilégios, com o grupo comum sharedfiles, ACLs de rede e desinstalação completa."
|
||||
},
|
||||
"header": {
|
||||
"title": "Servidor NFS em LXC",
|
||||
"description": "Execute um servidor NFS do kernel em um contêiner LXC Proxmox e disponibilize pastas a outras máquinas da rede. O ProxMenux instala nfs-kernel-server, configura o grupo comum sharedfiles para facilitar o compartilhamento entre vários CTs com privilégios, gerencia /etc/exports e oferece desinstalação completa.",
|
||||
"section": "Armazenamento e Compartilhamento · LXC"
|
||||
},
|
||||
"privReq": {
|
||||
"title": "Recipiente privilegiado necessário",
|
||||
"body": "<code>nfs-kernel-server</code> precisa montar o sistema de arquivos do kernel <code>nfsd</code> em <code>/proc/fs/nfsd</code>. Isso exige <code>CAP_SYS_ADMIN</code> no espaço de nomes do kernel do host, não apenas no espaço de usuários do contêiner. LXC sem privilégios não têm essa capacidade: <code>rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory)</code>; o systemd indica falha de dependência em <code>nfs-server.service</code>. O script exige um CT com privilégios e <strong>interrompe a execução se o CT não tiver privilégios</strong>. Outra opção é executar o servidor NFS em uma VM."
|
||||
},
|
||||
"what": {
|
||||
"heading": "O que isto faz",
|
||||
"body": "É o sentido inverso da página de <em>cliente NFS</em>: o CT se torna um <strong>servidor NFS</strong> e disponibiliza uma pasta própria a outros CTs, ao host Proxmox, a VMs ou a máquinas físicas.",
|
||||
"diagramServerLabel": "LXC (privilegiado) — Servidor NFS",
|
||||
"diagramServerDetail": "/mnt/data\n(pasta compartilhada)\n\nchown root:sharedfiles\nchmod 2775 (SGID)\n\nnfs-kernel-server\n+ rpcbind em execução",
|
||||
"diagramClientLabel": "Qualquer cliente na rede",
|
||||
"diagramClientDetail": "outro CT, o host,\num VM, uma máquina física…",
|
||||
"diagramArrow": "Exportação NFS"
|
||||
},
|
||||
"shared": {
|
||||
"heading": "O grupo comum « sharedfiles »",
|
||||
"body": "Antes de exportar a pasta, ProxMenux cria um grupo chamado <code>sharedfiles</code> com <strong>GID 101000</strong> dentro do recipiente, adiciona cada usuário regular para ele, em seguida, define o diretório de exportação para <code>root:sharedfiles</code> com modo <code>2775</code>. O <code>2</code> na frente é o bit SGID — cada arquivo ou pasta criado dentro automaticamente herda o grupo <code>sharedfiles</code>.",
|
||||
"gidTitle": "Por que GID 101000 especificamente",
|
||||
"gidBody": "Com o mapeamento padrão de IDs do LXC (+100000), o GID 101000 do host aparece como GID <strong>1000</strong> em um CT sem privilégios. Este fluxo de servidor usa um CT <strong>com privilégios</strong>, sem deslocamento. Dois CTs com privilégios que usem <code>sharedfiles</code> com GID 101000 compartilham o mesmo ID numérico de grupo.",
|
||||
"remapTitle": "A criação legada de usuários «remap_*» é ignorada em CTs com privilégios",
|
||||
"remapBody": "O ramo legado para CTs sem privilégios criaria usuários <code>remap_<uid></code> com UID <code><uid> + 100000</code>, todos em <code>sharedfiles</code>, para usuários comuns e UIDs habituais (33, 1000, 1001, 1002). Esse deslocamento <code>+100000</code> não se aplica aos CTs <strong>com privilégios</strong> exigidos aqui, então o script ignora o ramo. A ausência de contas <code>remap_*</code> em <code>getent passwd</code> é esperada e não indica falha."
|
||||
},
|
||||
"defaults": {
|
||||
"heading": "Opções de exportação padrão — leia isto primeiro",
|
||||
"warnTitle": "Opções padrão incluem no_root_squash",
|
||||
"warnBody": "O ProxMenux usa por padrão <code>rw,sync,no_subtree_check,'<'strong'>'no_root_squash'<'/strong'>'</code>. <strong>Qualquer usuário root de um cliente pode gravar como root na exportação.</strong> Use isso apenas em uma LAN doméstica confiável. Se o CT for acessível por uma rede não confiável (VPS ou VLAN não confiável), <strong>troque a opção por <code>root_squash</code></strong> no diálogo de opções personalizadas."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "No menu principal, abra <strong>Storage & Share Manager → Configure NFS Server in LXC</strong>. Apenas CTs com privilégios são listados. Escolha o CT de destino; o script o inicia se estiver parado e recusa CTs sem privilégios. O menu oferece cinco opções.",
|
||||
"imageAlt": "NFS Server Manager menu — Criar / Ver / Apagar / Estado / Desinstalar"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Criar fluxo)"
|
||||
},
|
||||
"network": {
|
||||
"heading": "Rede ACL — quem pode montar a partilha",
|
||||
"intro": "<code>/etc/exports</code> define quais clientes podem montar a exportação. O diálogo oferece três modos:",
|
||||
"headerMode": "Modo",
|
||||
"headerValue": "Valor escrito em /etc/exports",
|
||||
"headerWhen": "Quando o escolher",
|
||||
"rows": [
|
||||
{
|
||||
"mode": "Rede local",
|
||||
"value": "192.168.0.0/16",
|
||||
"whenRich": "Para redes domésticas ou SOHO comuns. Abrange todos os endereços <code>192.168.*.*</code>."
|
||||
},
|
||||
{
|
||||
"mode": "Sub- rede personalizada",
|
||||
"value": "o seu CIDR (por ex. 10.0.0.0/24)",
|
||||
"when": "Quando sua LAN não está em 192.168.x.x ou você quer um escopo mais apertado."
|
||||
},
|
||||
{
|
||||
"mode": "Uma máquina",
|
||||
"value": "o seu IP (por exemplo: 10.0.0.42)",
|
||||
"when": "Apenas uma máquina específica deve montar. Muito restritivo."
|
||||
}
|
||||
]
|
||||
},
|
||||
"options": {
|
||||
"heading": "Opções de exportação explicadas",
|
||||
"headerOption": "Opção",
|
||||
"headerEffect": "O que ele faz",
|
||||
"rows": [
|
||||
{
|
||||
"option": "rw / ro",
|
||||
"effect": "Permitir o acesso de leitura-escrita ou somente leitura para conectar clientes."
|
||||
},
|
||||
{
|
||||
"option": "sync",
|
||||
"effectRich": "Responde às solicitações de gravação somente depois que os dados estão no disco. Mais seguro que <code>async</code>, com perda de desempenho."
|
||||
},
|
||||
{
|
||||
"option": "no_subtree_check",
|
||||
"effect": "Ignora a verificação, em cada solicitação, de que o arquivo ainda está na subárvore exportada. É mais rápido e evita problemas quando arquivos são renomeados durante a operação."
|
||||
},
|
||||
{
|
||||
"option": "no_root_squash",
|
||||
"effectRich": "<strong>Confia no root do cliente.</strong> Um cliente que monta como root grava como root no servidor. Útil em LANs confiáveis, por exemplo para preservar proprietários nos backups. Substitua por <code>root_squash</code> se não confiar totalmente em todas as máquinas autorizadas pela ACL de rede."
|
||||
}
|
||||
]
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "Replicar todo o fluxo à mão – cada comando roda <strong> dentro do CT</strong> via <code>pct exec <ctid> --</code> ou <code>pct enter <ctid></code>:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver as exportações actuais",
|
||||
"body": "Exibe <code>/etc/exports</code> de dentro do CT, ignorando comentários e linhas vazias, e mostra cada exportação com sua ACL de rede e opções. Útil para verificar as pastas expostas antes de compartilhar o IP do CT."
|
||||
},
|
||||
"delete": {
|
||||
"heading": "Apagar uma exportação",
|
||||
"body": "Lista cada linha em <code>/etc/exports</code> para seleção, remove a escolhida (<code>sed -i</code>), executa <code>exportfs -ra</code> e reinicia <code>nfs-kernel-server</code>. A pasta em si e seu conteúdo ficam intactos."
|
||||
},
|
||||
"status": {
|
||||
"heading": "Verificar o estado do NFS",
|
||||
"body": "Passe diagnóstico: confirma <code>nfs-kernel-server</code> e <code>rpcbind</code> estão instalados e ativos, imprime saída <code>exportfs -v</code>, lista sessões de NFS ativos (<code>showmount -a</code>) e conexões atuais do cliente."
|
||||
},
|
||||
"uninstall": {
|
||||
"heading": "Desinstalar servidor NFS",
|
||||
"body": "Limpeza completa após confirmação: para e desativa <code>nfs-kernel-server</code> e <code>rpcbind</code>, esvazia <code>/etc/exports</code>, remove os pacotes NFS com <code>apt-get purge</code>, remove o grupo <code>sharedfiles</code> e os usuários <code>remap_*</code> e encerra processos restantes. As <strong>pastas exportadas não são apagadas</strong>; apenas a configuração NFS e os pacotes são removidos.",
|
||||
"warnTitle": "O script pára na linha de exportação, não nos dados",
|
||||
"warnBody": "<em>Excluir exportação</em> e <em>Desinstalar servidor NFS</em> removem a configuração da exportação. Os dados da pasta são preservados. Para apagá-los também, use explicitamente <code>rm -rf</code> após o término do script e faça backup antes se alguém ainda puder precisar deles."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"privTitle": "Exige um contêiner com privilégios (o script interrompe a execução)",
|
||||
"privBody": "O CT selecionado não tem privilégios. <code>nfs-kernel-server</code> não pode começar aí porque a montagem <code>/proc/fs/nfsd</code> exige <code>CAP_SYS_ADMIN</code> no espaço de nomes do kernel da máquina, e na <code>nfsd</code> o módulo também não está exposto ao espaço de nomes do contêiner (<code>modprobe nfsd</code> de dentro retorna <code>FATAL: Module nfsd not found</code>). Se ignorar a verificação, verás <code>rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory)</code> no diário e nenhuma porta NFS será aberta. As únicas opções viáveis são: converter o CT para privilegiado, ou mover o NFS servidor para uma VM.",
|
||||
"aptTitle": "apt-get install falha",
|
||||
"aptIntro": "O script assume uma família Debian CT. No Alpine / Arch / Rocky / Alma, instale os pacotes do servidor NFS à mão:",
|
||||
"aptItems": [
|
||||
"Alpine: <code>apk add nfs-utils</code>",
|
||||
"Arch: <code>pacman -S nfs-utils</code>",
|
||||
"Rocky / Alma: <code>dnf install nfs-utils</code>"
|
||||
],
|
||||
"aptOutro": "Execute novamente o script ProxMenux; a instalação é ignorada quando as ferramentas já estão presentes.",
|
||||
"aclTitle": "O cliente não pode montar: 'acesso negado pelo servidor'",
|
||||
"aclBody": "O IP do cliente está fora da ACL de rede configurada. Recrie a exportação com uma sub-rede maior ou adicione o IP exato do cliente. Atenção: por meio de NAT, o cliente pode aparecer com o IP WAN do roteador em vez do próprio IP LAN. Verifique no servidor com <code>tcpdump -n port 2049</code>.",
|
||||
"ownTitle": "Os arquivos escritos pelo cliente aparecem com propriedade estranha no servidor",
|
||||
"ownIntro": "Duas possibilidades:",
|
||||
"ownItems": [
|
||||
"Com <code>no_root_squash</code> (padrão), o cliente root escreve como root no servidor. Os arquivos são de propriedade do <code>root:sharedfiles</code> graças ao SGID na pasta.",
|
||||
"Usuários não-root do cliente escrevem como seu próprio UID/GID. Se seu UID não existe no servidor, os arquivos aparecem com números brutos (por exemplo: <code>1234:1234</code>). Use o grupo <code>sharedfiles</code> no cliente também, ou alinhem UIDs nos sistemas que compartilham arquivos."
|
||||
],
|
||||
"noShowTitle": "Servidor acessível mas showmount não devolve nada",
|
||||
"noShowBody": "Depois de editar <code>/etc/exports</code>, você deve recarregar a tabela de exportação com <code>exportfs -ra</code> e reiniciar <code>nfs-kernel-server</code> — o script faz ambos, mas se você editou o arquivo à mão, faça você mesmo. Também confirmar o firewall no CT (e no host Proxmox) permite TCP/UDP 2049 e na porta rpcbind (111)."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-client",
|
||||
"label": "Cliente NFS em LXC",
|
||||
"tail": " — o inverso: montar compartilhamentos NFS externos no CT."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-server",
|
||||
"label": "Servidor Samba em LXC",
|
||||
"tail": " — página relacionada, mesmo padrão com SMB / CIFS em vez de NFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-nfs",
|
||||
"label": "Compartilhamento NFS como armazenamento Proxmox",
|
||||
"tailRich": " — quando o CT estiver exportando, registre o compartilhamento NFS no Proxmox para que apareça em <em>Datacenter → Storage</em>."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,155 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Cliente Samba em LXC | ProxMenux Documentação",
|
||||
"description": "Monte compartilhamentos Samba / CIFS em um contêiner LXC Proxmox com o ProxMenux. Instala cifs-utils e smbclient automaticamente e oferece descoberta de servidores, armazenamento protegido de credenciais e montagens persistentes via /etc/fstab. Exige um contêiner com privilégios.",
|
||||
"ogTitle": "Cliente Samba em LXC | ProxMenux Documentação",
|
||||
"ogDescription": "Monte compartilhamentos Samba / CIFS em um contêiner LXC com privilégios. Descoberta automática, arquivo de credenciais protegido e persistência em /etc/fstab."
|
||||
},
|
||||
"header": {
|
||||
"title": "Cliente Samba em LXC",
|
||||
"description": "Monte compartilhamentos Samba (SMB / CIFS) diretamente de dentro de um recipiente Proxmox LXC. O container torna-se um cliente CIFS real — fala com o servidor Samba através da rede, executa mount.cifs, armazena credenciais com segurança e escreve para /etc/fstab. ProxMenux instala cifs-utils + smbclient para você e valida credenciais contra o servidor antes de montar.",
|
||||
"section": "Armazenamento e Compartilhamento · LXC"
|
||||
},
|
||||
"privReq": {
|
||||
"title": "Recipiente privilegiado necessário",
|
||||
"body": "O cliente do kernel <code>mount.cifs</code> precisa de recursos (<code>SYS_ADMIN</code> no mínimo) que os recipientes LXC desprivilegiados não expõem. O script impõe isso — ele pede que você escolha um CT e <strong>interrompe a execução se ele não for privilegiado</strong>. Se você precisar da partilha dentro de um CT sem privilégios, monte-a no host Proxmox primeiro (com a partilha <hostSambaLink>Samba / CIFS como armazenamento Proxmox</hostSambaLink>) e ligue-a ao CT com o gestor de montagem <mountLink>LXC</mountLink>."
|
||||
},
|
||||
"what": {
|
||||
"heading": "O que isto faz",
|
||||
"body": "O contêiner fala CIFS através da rede e monta a partilha por conta própria. O host Proxmox é apenas a ponte de rede — ele não vê ou gerencia a montagem.",
|
||||
"diagramServerLabel": "Servidor Samba",
|
||||
"diagramServerDetail": "//srv/share",
|
||||
"diagramHostLabel": "Host Proxmox",
|
||||
"diagramHostDetail": "(apenas uma\nponte de rede)",
|
||||
"diagramCtLabel": "LXC (com privilégios)",
|
||||
"diagramCtDetail": "/mnt/share\nmount.cifs dentro de CT",
|
||||
"diagramArrow": "CIFS",
|
||||
"twoWaysTitle": "Duas maneiras de dar um CT uma quota Samba — escolha uma",
|
||||
"twoWaysBind": "<strong>Bind mount pelo host</strong> (<mountLink>LXC Mount Manager</mountLink>): o host monta CIFS uma vez e cada CT recebe o mesmo caminho por bind mount. Funciona com CTs sem privilégios. Recomendado quando vários CTs precisam do mesmo compartilhamento.",
|
||||
"twoWaysDirect": "<strong>Montagem CIFS direta no CT</strong> (esta página): o CT monta CIFS por conta própria. Exige um CT com privilégios. Útil quando cada CT deve gerenciar suas credenciais ou usar um servidor diferente."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "Do menu principal do ProxMenux, abra o <strong>Storage & Share Manager → Configure o cliente Samba em LXC (somente privilegiado)</strong>. O ProxMenux primeiro pede- lhe para escolher o <strong> alvo CT</strong> (e inicia- o se parar); aborta se não tiver privilégios. Uma vez que o CT é selecionado, você vê este sub-menu:",
|
||||
"imageAlt": "Menu Samba Client Manager — Montar / Ver / Desmontar / Teste de conectividade"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Fluxo do Monte)"
|
||||
},
|
||||
"creds": {
|
||||
"heading": "Onde vive a senha",
|
||||
"body": "O ProxMenux <strong>não inclui a senha no comando de montagem</strong> nem em <code>/etc/fstab</code>. Cria um arquivo de credenciais no CT. Esse arquivo contém credenciais em texto simples protegidas por permissões somente para root; não é criptografado:",
|
||||
"whyTitle": "Por que um arquivo separado em vez de fstab",
|
||||
"whyBody": "O módulo CIFS aceita opções <code>username=</code> / <code>password=</code> em linha em fstab, mas qualquer um que possa ler <code>/etc/fstab</code> vê a senha em claro. Colocar credenciais em um arquivo somente root e apontar fstab para ele (<code>credentials=</code>) mantém a senha fora da configuração legível no mundo."
|
||||
},
|
||||
"options": {
|
||||
"heading": "Opções de montagem explicadas",
|
||||
"headerOption": "Opção",
|
||||
"headerEffect": "O que ele faz",
|
||||
"rows": [
|
||||
{
|
||||
"option": "rw / ro",
|
||||
"effect": "Modo de leitura e gravação ou somente leitura para toda a montagem."
|
||||
},
|
||||
{
|
||||
"option": "file_mode=0664",
|
||||
"effect": "Permissões relatadas para arquivos via CIFS. O padrão permite ao proprietário + grupo escrever, outros lerem."
|
||||
},
|
||||
{
|
||||
"option": "dir_mode=0775",
|
||||
"effect": "Permissões relatadas para pastas. O padrão permite que o proprietário + grupo entre e crie, outros atravessam."
|
||||
},
|
||||
{
|
||||
"option": "iocharset=utf8",
|
||||
"effect": "Força UTF-8 para nomes de arquivos recebidos pela rede, evitando caracteres corrompidos em nomes não ASCII."
|
||||
},
|
||||
{
|
||||
"option": "credentials=file",
|
||||
"effect": "Leia o nome de usuário / senha do arquivo (adicionado automaticamente para autenticação do usuário)."
|
||||
},
|
||||
{
|
||||
"option": "guest",
|
||||
"effect": "Autentique como convidado, sem credenciais necessárias (adicionadas automaticamente quando o convidado é escolhido)."
|
||||
},
|
||||
{
|
||||
"option": "_netdev",
|
||||
"effect": "Diz ao sistema de init que esta montagem precisa da rede. O Boot não bloqueia a espera."
|
||||
},
|
||||
{
|
||||
"option": "x-systemd.automount",
|
||||
"effect": "Montagem preguiçosa: apenas monta no primeiro acesso. O servidor CIFS não acessível no arranque não para o CT."
|
||||
},
|
||||
{
|
||||
"option": "noauto",
|
||||
"effect": "Evita a montagem imediata na inicialização. Com a unidade automount, o sistema de arquivos só é montado no primeiro acesso."
|
||||
}
|
||||
],
|
||||
"netEffectTitle": "Efeito líquido das bandeiras fstab",
|
||||
"netEffectBody": "O sistema de arquivos CIFS é montado no <em>primeiro acesso</em> em vez de imediatamente durante a inicialização. Se o servidor estiver offline, o acesso pode esperar ou falhar e afetar serviços que dependem do caminho. Automount reduz a dependência na inicialização, mas não garante que todos os serviços do CT fiquem imunes a uma falha CIFS."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "Replicar todo o fluxo à mão – cada comando roda <strong> dentro do CT</strong> via <code>pct exec <ctid> --</code> ou diretamente via <code>pct enter <ctid></code>:",
|
||||
"guestIntro": "Variante convidada — nenhum arquivo de credenciais necessário:"
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver as montagens actuais",
|
||||
"body": "Lista cada ponto de montagem CIFS ativo dentro do CT (<code>mount -t cifs</code>) mais cada linha CIFS no CT <code>/etc/fstab</code>. Para cada entrada do fstab é mostrado o status de montagem ao vivo — útil para detectar montagens permanentes que não apareceram no boot."
|
||||
},
|
||||
"unmount": {
|
||||
"heading": "Desmontar a partilha do Samba",
|
||||
"body": "Combina as montagens ao vivo e as entradas fstab em uma lista, permite que você escolha uma, e <strong> remove a linha correspondente de <code>/etc/fstab</code></strong> mais o arquivo de credenciais correspondentes. O script não executa <code>umount</code> na montagem ao vivo — em vez disso, ele lhe diz que uma reinicialização CT é necessária para que a desmontagem faça efeito.",
|
||||
"warnTitle": "O script remove entradas do fstab, sem desmontar os sistemas de arquivos ativos",
|
||||
"warnBody": "O mesmo design do cliente NFS: <code>umount</code> em uma montagem movimentada falha com o \"dispositivo ocupado\". A remoção da entrada do fstab garante que a montagem desapareça de forma limpa no próximo início do CT. Se você quiser o <em>agora</em>, execute <code>pct exec <ctid> -- umount /mnt/<path></code> à mão depois que o script terminar."
|
||||
},
|
||||
"test": {
|
||||
"heading": "Teste a conectividade do Samba",
|
||||
"body": "Passe diagnóstico dentro do CT: confirma <code>cifs-utils</code> é instalado, lista as montagens CIFS atuais, em seguida, para cada servidor referenciado em fstab verifica ping → portas 139/445 → guest listing. \"Requer autenticação\" no teste convidado é normal para qualquer servidor que não expõe compartilhamentos públicos."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"privTitle": "Contêiner com privilégios necessário (o script interrompe a execução)",
|
||||
"privBody": "O CT selecionado não tem privilégios. O cliente do kernel CIFS precisa de capacidade <code>SYS_ADMIN</code> que CTs desprivilegiadas não expõem. Ou converter o CT para privilegiado, ou usar o caminho alternativo descrito no aviso no topo desta página.",
|
||||
"aptTitle": "apt-get install fails",
|
||||
"aptIntro": "O script assume uma família Debian CT (<code>apt-get</code>). No Alpine / Arch / Rocky / Alma, instale o cliente CIFS à mão:",
|
||||
"aptItems": [
|
||||
"Alpine: <code>apk add cifs-utils samba-client</code>",
|
||||
"Arch: <code>pacman -S cifs-utils smbclient</code>",
|
||||
"Rocky / Alma: <code>dnf install cifs-utils samba-client</code>"
|
||||
],
|
||||
"aptOutro": "Em seguida, execute novamente o script ProxMenux — o passo de instalação salta quando as ferramentas já estão presentes.",
|
||||
"guestFallbackTitle": "\"O servidor conectou você como convidado em vez do usuário especificado\"",
|
||||
"guestFallbackBody": "A validação ativa do script captou um problema real de autenticação. O servidor aceitou a conexão, mas baixou para o hóspede porque as credenciais estão erradas. Causas comuns: erro no nome de usuário / senha, o usuário não existe no servidor, o usuário está bloqueado para fora, ou o grupo de trabalho / domínio é desigual. Execute novamente o fluxo e informe as credenciais com cuidado (a senha está escondida na janela).",
|
||||
"denyTitle": "\"NT_STATUS_ACCESS_DENIED\" na montagem",
|
||||
"denyBody": "As credenciais foram validadas, mas o compartilhamento nega acesso. Verifique no lado do servidor se o usuário tem permissões nesse compartilhamento específico (a validação só confirma login, não ACLs por compartilhamento). Verifique também se o servidor requer uma versão específica do protocolo SMB: anexe <code>vers=3.0</code> (ou <code>2.1</code>, <code>2.0</code>) às opções de montagem.",
|
||||
"utf8Title": "Nomes de arquivos UTF-8 / não ASCII aparecem corrompidos",
|
||||
"utf8Body": "As opções padrão incluem <code>iocharset=utf8</code>, mas algumas configurações de servidor reportam uma página de código inesperada. Se nomes de arquivos com acentos / símbolos olhar errado, também tente <code>nounix</code> (alguns servidores Linux Samba precisam disso quando o cliente também é Linux) ou definir o lado do servidor para <code>unix extensions = no</code>.",
|
||||
"bootTitle": "A montagem permanente tem sucesso mas não aparece no arranque",
|
||||
"bootBody": "Quase sempre uma de: a rede não está pronta quando o CT monta (as bandeiras <code>_netdev,x-systemd.automount,noauto</code> do script corrigem isso), o servidor é inacessível no boot (auto-mount espera pelo primeiro acesso – isso é normal), ou DNS não está resolvido no boot (use o IP do servidor, não seu hostname)."
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-mount-points",
|
||||
"label": "Pontos de montagem LXC (Host ↔ Container)",
|
||||
"tail": " — a alternativa para os TAC não privilegiados: montagem no hospedeiro, ligação em CT."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-client",
|
||||
"label": "Cliente NFS em LXC",
|
||||
"tail": " — página relacionada com o mesmo padrão para compartilhamentos NFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-server",
|
||||
"label": "Servidor Samba em LXC",
|
||||
"tailRich": " — o inverso: expor pastas <em>de</em> um CT por Samba."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-samba",
|
||||
"label": "Samba / CIFS como armazenamento Proxmox",
|
||||
"tail": " — registrar o compartilhamento no próprio Proxmox em vez de dentro de um único CT."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,132 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Servidor Samba em LXC | ProxMenux Documentação",
|
||||
"description": "Execute um servidor Samba (SMB / CIFS) em um contêiner LXC Proxmox com o ProxMenux. Instala samba automaticamente e gerencia /etc/samba/smb.conf, usuários smbpasswd e o grupo sharedfiles para pastas em bind mounts. Exige um contêiner com privilégios.",
|
||||
"ogTitle": "Servidor Samba em LXC | ProxMenux Documentação",
|
||||
"ogDescription": "Disponibilize pastas por SMB/CIFS de um LXC com privilégios. Instalação automática, usuário smbpasswd e permissões adaptadas a bind mounts."
|
||||
},
|
||||
"header": {
|
||||
"title": "Servidor Samba em LXC",
|
||||
"description": "Execute um servidor Samba (SMB / CIFS) dentro de um container Proxmox LXC e exponha pastas para clientes Windows / macOS / Linux na rede. ProxMenux instala samba, cria um usuário Samba com smbpasswd, gerencia /etc/samba/smb.conf, e aplica permissões adaptadas a bind mounts quando a pasta compartilhada vem do host.",
|
||||
"section": "Armazenamento e Compartilhamento · LXC"
|
||||
},
|
||||
"privReq": {
|
||||
"title": "Recipiente privilegiado necessário",
|
||||
"body": "Samba personifica o usuário de conexão com <code>setgroups()</code> em cada conexão em árvore (no momento em que um cliente abre um compartilhamento). Em um LXC sem privilégios, o kernel rejeita esse syscall porque o espaço de nomes de usuário do container é criado com <code>setgroups=deny</code> — e o <code>smbd</code> responde abortando o processo de worker com <code>PANIC: sys_setgroups failed</code>. O resultado é que o <code>smbd</code> inicia e liga as portas 139/445, mas toda conexão com o cliente falha com o <code>NT_STATUS_CONNECTION_DISCONNECTED</code>. O script impõe um CT privilegiado por esta razão e <strong>interrompe a execução se o CT não tiver privilégios</strong>. Não há correção limpa no lado do servidor; use um CT privilegiado ou execute Samba dentro de uma VM."
|
||||
},
|
||||
"what": {
|
||||
"heading": "O que isto faz",
|
||||
"body": "O contêiner torna-se um servidor SMB/CIFS: ele roda <code>smbd</code>, expõe uma pasta via <code>/etc/samba/smb.conf</code> e aceita conexões de cliente em portas <code>139</code> / <code>445</code>. Os clientes veem o compartilhamento em <code>\\\\<ct-ip>\\<share-name></code> no Windows Explorer, <code>smb://<ct-ip>/<share-name></code> no macOS Finder, ou via <code>mount.cifs</code> no Linux.",
|
||||
"diagramServerLabel": "LXC (privilegiado) — Servidor Samba",
|
||||
"diagramServerDetail": "/mnt/data\n(pasta compartilhada)\n\nsmbd + nmbd em execução\n\nUsuário: <username>\n(via smbpasswd)\n\nGrupo imposto:\nsharedfiles",
|
||||
"diagramClientLabel": "Qualquer cliente na rede",
|
||||
"diagramClientDetail": "Windows: \\\\<ip>\\<share>\nmacOS: smb://<ip>/<share>\nLinux: mount.cifs",
|
||||
"diagramArrow": "SMB / CIFS"
|
||||
},
|
||||
"perms": {
|
||||
"heading": "Dois caminhos de permissões, dependendo do tipo de pasta",
|
||||
"body": "Antes de adicionar o compartilhamento ao <code>smb.conf</code>, o script verifica se a pasta escolhida é uma montagem <strong>bind do host</strong> ou uma pasta <strong>local regular dentro do CT</strong> – e aplica diferentes permissões de propriedade em conformidade:",
|
||||
"headerType": "Tipo de pasta",
|
||||
"headerAction": "O que o script faz",
|
||||
"bindType": "Montagem de ligação da máquina",
|
||||
"bindTypeSubRich": "detectado através da saída <code>mount</code>",
|
||||
"bindActionRich": "Cria o grupo <code>sharedfiles</code> (padrão GID 999, dinâmico se tomado), adiciona o usuário Samba a ele, em seguida, <code>chown root:sharedfiles</code> + <code>chmod 2775</code> (SGID — novos arquivos herdam o grupo). Se o usuário ainda não consegue escrever, aplica <code>setfacl -m u:<user>:rwx</code>.",
|
||||
"localType": "Pasta local dentro do CT",
|
||||
"localTypeSub": "nenhuma montagem de ligação detectada",
|
||||
"localActionRich": "Propriedade padrão: <code>chown -R <user>:<user></code> + <code>chmod -R 755</code>. Nenhum grupo compartilhado é necessário porque nenhum outro CT escreve para esta pasta. Regressa ao <code>setfacl</code> se o acesso de escrita ainda estiver ausente.",
|
||||
"gidTitle": "GID para 'sharedfiles' difere do fluxo do servidor NFS",
|
||||
"gidBody": "O script do servidor Samba usa GID <strong>999</strong> para <code>sharedfiles</code>, enquanto o fluxo do servidor <nfsLink>NFS</nfsLink> usa GID <strong>101000</strong>. Se você executar ambos os servidores no mesmo CT e quiser um único grupo compartilhado em ambos os protocolos, edite um deles para corresponder ao outro após a instalação (por exemplo. <code>groupmod -g 101000 sharedfiles</code>) e reaplicar a propriedade nas pastas afetadas. Esta é uma incoerência conhecida nos scripts atuais."
|
||||
},
|
||||
"opening": {
|
||||
"heading": "Abrir a ferramenta",
|
||||
"body": "No menu principal, abra <strong>Storage & Share Manager → Configure Samba Server in LXC</strong>. Apenas CTs com privilégios são listados. Escolha o CT de destino; o script o inicia se estiver parado e recusa CTs sem privilégios. O menu oferece cinco opções.",
|
||||
"imageAlt": "Samba Server Manager menu — Criar / Ver / Apagar / Estado / Desinstalar"
|
||||
},
|
||||
"howRuns": {
|
||||
"heading": "Como o script é executado (Criar fluxo)"
|
||||
},
|
||||
"modes": {
|
||||
"heading": "Os três modos de partilha",
|
||||
"intro": "Cada modo escreve uma seção diferente em <code>smb.conf</code>. Todos os três incluem <code>valid users = <username></code> (sem anônimo), <code>force group = sharedfiles</code> (então novos arquivos pertencem ao grupo compartilhado) e <code>veto files = /lost+found/</code> (esconde-o de clientes).",
|
||||
"headerMode": "Modo",
|
||||
"headerBlock": "Bloco escrito para smb.conf",
|
||||
"rwMode": "Leitura e escrita",
|
||||
"roMode": "Somente leitura",
|
||||
"customMode": "Personalizado",
|
||||
"customBodyRich": "Você digita suas próprias diretivas em uma caixa de texto livre. ProxMenux ainda os envolve em um bloco <code>[share]</code> com o <code>path</code>, <code>valid users</code>, <code>force group</code> e <code>veto files</code> padrão."
|
||||
},
|
||||
"manual": {
|
||||
"heading": "Equivalente manual",
|
||||
"body": "Replicar todo o fluxo à mão – cada comando roda <strong> dentro do CT</strong> via <code>pct exec <ctid> --</code> ou <code>pct enter <ctid></code>:"
|
||||
},
|
||||
"connect": {
|
||||
"heading": "Conexão de clientes",
|
||||
"headerOs": "Sistema operativo do cliente",
|
||||
"headerHow": "Como conectar",
|
||||
"windowsOs": "Windows",
|
||||
"windowsHowRich": "Explorador de Arquivos → barra de endereço: <code>\\\\<ct-ip>\\<share-name></code>. Ou <em>Mapear unidade de rede</em> → marque «Conectar usando credenciais diferentes».",
|
||||
"macosOs": "macOS",
|
||||
"macosHowRich": "Finder → <em>Ir → Conecte-se ao servidor...</em> → <code>smb://<ct-ip>/<share-name></code>. Ou <code>mount_smbfs //user@<ct-ip>/<share> /mountpoint</code>.",
|
||||
"linuxOs": "Linux",
|
||||
"linuxHowRich": "<code>mount -t cifs //<ct-ip>/<share> /mnt/x -o username=<u>,password=<p>,iocharset=utf8</code>. Ou use o cliente <clientLink>Samba na página LXC</clientLink> se o cliente for outro Proxmox CT."
|
||||
},
|
||||
"view": {
|
||||
"heading": "Ver os compartilhamentos atuais",
|
||||
"body": "Analisa <code>/etc/samba/smb.conf</code> dentro do CT e lista todos os blocos <code>[share]</code> (passando <code>[global]</code>, <code>[homes]</code>, <code>[printers]</code>) com seu caminho. Útil como um inventário rápido."
|
||||
},
|
||||
"delete": {
|
||||
"heading": "Apagar um compartilhamento",
|
||||
"body": "Permite escolher um compartilhamento pelo nome, remove o bloco do <code>smb.conf</code> (<code>sed</code> exclui do <code>[share]</code> para a próxima linha em branco), e reinicia o <code>smbd</code>. A pasta em si e seu conteúdo ficam intactos."
|
||||
},
|
||||
"status": {
|
||||
"heading": "Verificar o estado do Samba",
|
||||
"body": "Relata se o <code>smbd</code> e o <code>nmbd</code> estão instalados e ativos, lista os usuários do Samba (<code>pdbedit -L</code>) e imprime sessões ativas (<code>smbstatus</code>)."
|
||||
},
|
||||
"uninstall": {
|
||||
"heading": "Desinstalar o servidor Samba",
|
||||
"body": "Limpeza completa após confirmação: para e desativa <code>smbd</code> e <code>nmbd</code>, salva <code>smb.conf</code> em <code>smb.conf.backup.YYYYMMDD_HHMMSS</code>, remove usuários Samba com <code>smbpasswd -x</code> e os pacotes Samba com <code>apt-get purge</code>. As <strong>pastas exportadas não são apagadas</strong>.",
|
||||
"warnTitle": "Pastas sobrevivem — backup de dados separadamente",
|
||||
"warnBody": "<em>Excluir compartilhamento</em> e <em>Desinstalar servidor Samba</em> removem a configuração do compartilhamento. Os dados das pastas exportadas são preservados. Para apagá-los também, use explicitamente <code>rm -rf</code> após o término do script."
|
||||
},
|
||||
"troubleshoot": {
|
||||
"heading": "Resolução de Problemas",
|
||||
"privTitle": "Exige um contêiner com privilégios (o script interrompe a execução)",
|
||||
"privBody": "O CT selecionado é desprivilegiado e o <code>smbd</code> não pode servir arquivos lá. Se você ignorar a verificação e configurar Samba à mão, <code>smbd</code> começa e as portas abrem, mas a primeira conexão do cliente entra em pânico com <code>PANIC: sys_setgroups failed</code> em <code>/var/log/samba/log.<client></code> e o cliente vê <code>NT_STATUS_CONNECTION_DISCONNECTED</code>. A causa é o namespace desprivilegiado que tem <code>setgroups=deny</code>, que bloqueia a personificação de Samba por conexão. Nem <code>features=keyctl=1</code> nem remover <code>force user</code> / <code>force group</code> altera isso. As únicas opções viáveis são: converter o CT para privilegiado, ou mover Samba para uma VM.",
|
||||
"aptTitle": "apt-get install falha",
|
||||
"aptIntro": "O script assume uma família Debian CT. Em Alpine / Arch / Rocky / Alma, instalar Samba à mão:",
|
||||
"aptItems": [
|
||||
"Alpine: <code>apk add samba</code>",
|
||||
"Arch: <code>pacman -S samba</code>",
|
||||
"Rocky / Alma: <code>dnf install samba</code>"
|
||||
],
|
||||
"aptOutro": "Execute novamente o script ProxMenux; a instalação é ignorada quando as ferramentas já estão presentes.",
|
||||
"noShareTitle": "O cliente conecta- se mas não consegue ver a partilha",
|
||||
"noShareBody": "Verifique se o <code>browseable = yes</code> está definido no bloco de partilha (por omissão para os modos rw / ro; pode estar em falta na personalização). Também verifique o firewall CT e o firewall do host Proxmox permitem o TCP 445 (SMB) e o 139 (NetBIOS). Alguns clientes do Windows também exigem resolução de nome — tente o IP diretamente primeiro.",
|
||||
"authTitle": "Falha na autenticação (NT_STATUS_LOGON_FAILURE)",
|
||||
"authBody": "A senha está incorreta (as senhas Samba são <em>separadas</em> das do sistema; liste os usuários Samba com <code>pdbedit -L</code>) ou o usuário não consta em <code>valid users</code> para esse compartilhamento. Redefina a senha dentro do CT com <code>smbpasswd <user></code>.",
|
||||
"groupTitle": "Os arquivos escritos pelo cliente aparecem com o grupo errado no servidor",
|
||||
"groupBody": "O script define <code>force group = sharedfiles</code> no bloco de compartilhamento, então novos arquivos devem ser o grupo <code>sharedfiles</code>. Se eles não forem, o bit SGID no diretório pai pode ter sido perdido (alguém correu <code>chmod</code> à mão). Reaplicação: <code>chmod 2775 /mnt/<share></code>.",
|
||||
"bothTitle": "Compartilhando a mesma pasta em ambos NFS e Samba",
|
||||
"bothBody": "ProxMenux usa diferentes GIDs para <code>sharedfiles</code> em cada script (Samba: 999, NFS: 101000). Se você serve a mesma pasta através de ambos, decida sobre um GID e alinhar ambos. A correção mais simples: após executar ambos os scripts, edite o GID menor:"
|
||||
},
|
||||
"related": {
|
||||
"heading": "Relacionado",
|
||||
"items": [
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-samba-client",
|
||||
"label": "Cliente Samba em LXC",
|
||||
"tail": " — o inverso: montar compartilhamentos Samba externos no CT."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/lxc-nfs-server",
|
||||
"label": "Servidor NFS em LXC",
|
||||
"tail": " — página relacionada, mesmo padrão com NFS em vez de CIFS."
|
||||
},
|
||||
{
|
||||
"href": "/docs/storage-share/host-samba",
|
||||
"label": "Samba / CIFS como armazenamento Proxmox",
|
||||
"tailRich": " — quando o CT estiver exportando, registre o compartilhamento Samba no Proxmox para que apareça em <em>Datacenter → Storage</em>."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user