Escolhe o destino
Usa o teu servidor SFTP ou um disco local. A pasta do arquivo é definida pelo sysadmin.
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.
Usa o teu servidor SFTP ou um disco local. A pasta do arquivo é definida pelo sysadmin.
Ficheiros substituídos e removidos da origem são arquivados, sem expiração automática.
Recebe avisos de releases e instala-as por CLI, com assinatura, validação e rollback do código.
Um comando no terminal da conta cPanel que contém as mailboxes.
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.
~/mbsrs, fora de
mail/ e de todos os DocumentRoots.
~/mbsrs/mbsrs setup.
Descarrega o instalador e passa os caminhos explicitamente.
--document-root pode ser repetido.
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.
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:
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.
Uma migração inicial instala o novo fluxo de releases.
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 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:
ORG=customer-id
REMOTE_ROOT=.
ARCHIVE_PATH=domain.example
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.
| 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.
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
| 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.
~/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.
~/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.
~/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.
~/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.
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.
~/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/.
| 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. |
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.
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.
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.
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 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.
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.
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.
| 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. |