MBSRS DOCUMENTAÇÃO Release atual
MAILURITY / DOCUMENTAÇÃO MBSRS

Os teus emails.
A tua infraestrutura.

Mailbox Backup, Synchronization & Recovery System

Cópia e sincronização de mailboxes cPanel para um destino escolhido pelo administrador, com histórico de alterações e recuperação de transferências interrompidas.

Python + OpenSSHSFTP ou disco localOrigem apenas em leitura
01

Escolhe o destino

Usa o teu servidor SFTP ou um disco local. A pasta do arquivo é definida pelo sysadmin.

02

Preserva o histórico

Ficheiros substituídos e removidos da origem são arquivados, sem expiração automática.

03

Atualiza quando decidires

Recebe avisos de releases e instala-as por CLI, com assinatura, validação e rollback do código.

Instalação guiada

Um comando no terminal da conta cPanel que contém as mailboxes.

Terminal · instalação
curl -fsSL https://mbsrs.mailurity.fmopz.dev/install.sh | bash

O assistente pede organização, destino, autenticação, pasta do arquivo e mailboxes a incluir. Guarda a configuração, testa a ligação, inicializa o destino, mostra o plano e pede confirmação para a primeira cópia e verificação SHA256. O cron só é instalado após sucesso.

  1. Executa na conta de origem. Usa as permissões da própria conta, sem root.
  2. Escolhe uma pasta privada. O padrão é ~/mbsrs, fora de mail/ e de todos os DocumentRoots.
  3. Confirma a identidade SFTP. Compara as fingerprints apresentadas com uma fonte independente do fornecedor.
  4. Revê o plano e a primeira cópia. Se houver falha, corrige a causa e retoma com ~/mbsrs/mbsrs setup.
Escolher outra pasta ou indicar um DocumentRoot personalizado

Descarrega o instalador e passa os caminhos explicitamente. --document-root pode ser repetido.

Terminal · caminhos personalizados
curl -fsSL https://mbsrs.mailurity.fmopz.dev/install.sh -o "$HOME/mbsrs-install.sh"
bash "$HOME/mbsrs-install.sh" \
  --prefix "$HOME/mbsrs" \
  --document-root "$HOME/site.example/public_html"

O instalador rejeita sobreposição com ~/mail e ~/public_html. Os outros DocumentRoots precisam de ser confirmados no cPanel e indicados pelo administrador. O prefixo deve estar dentro do HOME, sem espaços, metacaracteres ou symlinks.

Instalar só o código ou automatizar a configuração
Terminal · apenas código
bash "$HOME/mbsrs-install.sh" --download-only
~/mbsrs/mbsrs setup

--download-only não liga ao destino nem altera o cron. Para configuração sem interação, fornece uma configuração própria e credenciais/known_hosts já preparados:

Terminal · configuração sem interação
bash "$HOME/mbsrs-install.sh" \
  --config "$HOME/private/mbsrs.conf" \
  --non-interactive \
  --no-cron

--non-interactive autoriza a primeira cópia e a verificação sem perguntas. Usa caminhos absolutos para credenciais e known_hosts. --no-cron permite configurar o agendamento depois.

Migrar de 5.x sem começar de novo

Uma migração inicial instala o novo fluxo de releases.

Terminal · ajusta a pasta antiga
curl -fsSL https://mbsrs.mailurity.fmopz.dev/install.sh -o "$HOME/mbsrs-install.sh"
bash "$HOME/mbsrs-install.sh" --migrate-from "$HOME/scripts/mbsrs-v5.1"

Indica a pasta que contém a configuração antiga; pode chamar-se mbsrs-v5 ou ter outro nome. A migração importa a configuração, seleção e credencial da própria conta, preservando organização, origem, destino, identidade e histórico.

Após a cópia e verificação, substitui apenas o job reconhecido que aponta exatamente para o mbsrs-cron.sh dessa instalação. Guarda o crontab anterior e mantém os outros jobs. Uma execução 5.x ativa bloqueia a validação; espera que termine e retoma.

Conserva a instalação antiga até validares o novo fluxo. Os logs antigos ficam no lugar; os novos relatórios passam para a nova instalação.

A estrutura é definida pelo sysadmin

A raiz SFTP visível e a pasta do arquivo são escolhas separadas.

Se a conta SFTP já entra em /…/mbsrs, usa . como raiz e escolhe apenas a subpasta desejada:

mbsrs.conf · exemplo ilustrativo
ORG=customer-id
REMOTE_ROOT=.
ARCHIVE_PATH=domain.example
PASTA INICIAL SFTP/…/mbsrs
PASTA ESCOLHIDAdomain.example/mail/ · history/ · .mbsrs/

Não é acrescentada outra pasta mbsrs, mailsync ou ORG. Podes usar uma estrutura como clients/domain.example. O valor de ORG identifica a origem e não precisa de ser o nome da pasta.

Como escolher os caminhos
Campo Significado
REMOTE_ROOT=. Usa a pasta inicial após login SFTP.
REMOTE_ROOT=/ Usa a raiz visível à conta SFTP, que pode ser um chroot.
ARCHIVE_PATH=clients/domain.example Guarda o arquivo numa subpasta relativa à raiz.
ARCHIVE_PATH=. Usa diretamente a raiz escolhida; deve estar vazia ou identificada para este arquivo.
ARCHIVE_PATH=auto Compatibilidade com a estrutura anterior <root>/<ORG>.

Dentro de mail/, preserva-se a hierarquia das mailboxes selecionadas. history/ e .mbsrs/ fazem parte do formato interno. Para disco local, o administrador define LOCAL_ROOT, LOCAL_MOUNT e o UUID real; ARCHIVE_PATH tem o mesmo significado.

Uma pasta privada por instalação

Estrutura local · ~/mbsrs
mbsrs/
├── mbsrs                # lançador estável
├── config/              # configuração, seleção e credenciais
├── state/               # instalação, updates e backups de cron
├── logs/                # relatórios e logs diários
├── releases/            # versões do código
└── current              # referência para a versão ativa
Escolhas principais
Opção Comportamento
SOURCE=auto Lê ~/mail da conta que executa.
SCOPE=partial Inclui os pares domínio/mailbox da lista selecionada.
SCOPE=full Percorre toda a pasta de origem.
AUTH=password Password privada em texto simples, modo 600.
AUTH=key Chave provisionada pelo administrador, utilizável pelo cron sem interação.

Retirar uma mailbox da seleção não remove a sua cópia anterior. Para isolamento entre clientes, usa credenciais SFTP com permissões próprias no servidor; nomes de pastas diferentes não substituem controlo de acesso.

Invoca o lançador ~/mbsrs/mbsrs, em vez de ficheiros dentro de current/. Mantém-se um lock comum em ~/.local/state/mail-export/export.lock para evitar sobreposição com 5.x.

Planear, copiar e verificar

Terminal · sequência manual
~/mbsrs/mbsrs status
~/mbsrs/mbsrs preflight
~/mbsrs/mbsrs dry-run
~/mbsrs/mbsrs run
~/mbsrs/mbsrs verify

dry-run mostra ficheiros novos, substituídos e desaparecidos sem escrever no destino. run copia as alterações e guarda versões anteriores no histórico. verify compara SHA256 dos conteúdos selecionados, lendo a origem e o destino.

A comparação normal usa tamanho e mtime em segundos. Alterações com ambos iguais exigem verify. Mailboxes ativas podem mudar durante a verificação; escolhe uma janela calma e considera o tráfego e I/O envolvidos.

Ativar e confirmar o cron

Terminal · agendamento
~/mbsrs/mbsrs cron-install
crontab -l
# Após 10–15 minutos:
tail -n 100 "$HOME/mbsrs/logs/cron/$(date +%F).log"

O cron corre a cada 10 minutos, após uma execução real bem-sucedida com a configuração atual. Confirma o primeiro [OK] Sync complete. Execuções de cron sobrepostas são ignoradas; isso não equivale a uma nova cópia concluída.

Deteção automática, instalação manual

Terminal · releases
~/mbsrs/mbsrs check-update
~/mbsrs/mbsrs update
~/mbsrs/mbsrs version

O MBSRS consulta releases até uma vez por dia durante operação, autenticação, status ou cron. Uma falha nessa consulta não impede a cópia. Instala uma nova versão apenas quando executas update.

O update verifica a assinatura RSA/SHA256 e a integridade do pacote, prepara o código separadamente, espera até 120 segundos por uma cópia antiga ativa, valida a configuração e troca a versão ativa atomicamente. A sequência de releases é independente da versão pública.

Rollback do código

Terminal · voltar ao código anterior
~/mbsrs/mbsrs rollback

A versão anterior é conservada. Antes da troca, o MBSRS confirma se aceita a configuração atual. Se houver incompatibilidade, mantém o código ativo. O rollback não desfaz sincronizações nem restaura emails.

Mudança futura do domínio de releases

Uma release assinada pode indicar um novo endereço de distribuição. O update aplica-o e comandos posteriores reconciliam o endereço a partir dos metadados assinados. O domínio anterior precisa de permanecer acessível durante a transição, para instalações que ainda não atualizaram.

Recuperar uma transferência e restaurar emails

Transferência interrompida

Terminal · transação pendente
~/mbsrs/mbsrs recover
~/mbsrs/mbsrs dry-run
~/mbsrs/mbsrs run

recover termina a recuperação de um lote pendente. run também recupera antes de criar um novo plano. dry-run e verify recusam transações pendentes. Não apagues manualmente .mbsrs/transaction/.

Onde encontrar cada geração
Pasta Conteúdo
mail/ Cópia atual das mailboxes selecionadas.
history/replaced/ Versões de ficheiros substituídos.
history/deleted/ Ficheiros que desapareceram da origem.
history/incomplete/ Dados de lotes que não chegaram a ser publicados.

Restauro de emails

O restauro é conduzido pelo administrador. Seleciona a geração necessária, trabalha primeiro numa cópia isolada e valida a importação no ambiente Dovecot antes de repor numa mailbox real. O MBSRS não preserva ownership/permissões da origem nem faz um restauro automático.

Marcadores .mbsrs-link representam links da origem e não são mensagens. A publicação é feita por lote, sem um snapshot consistente de toda a árvore. Mensagens criadas e removidas entre execuções podem nunca ser copiadas.

Resolver problemas frequentes

Uma execução antiga ainda está ativa

Espera que termine e repete o comando. Durante setup, um lock ocupado causa falha de validação; não é aceite como sucesso. Um update espera até 120 segundos e depois pede uma nova tentativa.

Destino não inicializado ou identidade diferente

Num destino novo dedicado, usa init. Se houver identidade diferente ou dados não geridos, confirma conta, origem, organização e caminho. Não removas a identidade nem alteres valores apenas para ignorar a proteção.

Desaparecimentos acima dos limites

Confirma a origem, a seleção e as permissões. Apenas para uma alteração grande intencional e revista, usa run --allow-large-change manualmente. Não coloques esta exceção no cron.

Índices Dovecot ou emails mudam durante a cópia

Índices Dovecot mutáveis têm três tentativas com novo inventário. Se continuarem instáveis, a execução falha. Emails alterados também causam falha explícita. Uma janela de menor atividade facilita cópia e verificação.

Autenticação SFTP falha

Revê servidor, porta, utilizador e known_hosts. Para trocar a password, usa auth --replace; a anterior é guardada num backup privado. Para chave, confirma ownership, modo 400/600 e funcionamento sem interação.

Destino local não está montado ou UUID difere

Confirma a montagem estável, o UUID e que LOCAL_ROOT pertence ao mountpoint configurado. O programa não monta discos nem usa o disco do sistema como alternativa. É necessário findmnt acessível à conta.

Comandos CLI

Usa sempre o lançador ~/mbsrs/mbsrs
Comando Finalidade
setup Configurar ou retomar a instalação.
auth [--replace] Guardar ou substituir a password SFTP.
status Mostrar configuração e último relatório.
config-check Validar a configuração, sem ligar ao destino.
preflight Diagnosticar origem, ligação, identidade e recursos visíveis.
init Inicializar um destino novo ou validar a mesma identidade.
dry-run Mostrar o plano sem escrever no destino.
run Sincronizar e arquivar versões anteriores.
verify Comparar SHA256 da seleção em origem e destino.
recover Recuperar uma transação pendente.
cron-install Instalar o agendamento após uma execução bem-sucedida.
check-update / update Consultar ou instalar uma release.
rollback Ativar o código anterior se aceitar a configuração.
version / help Consultar versão ou ajuda.
selftest Escrever fixtures no destino configurado; executar apenas intencionalmente.