Lista de Formatos Obsoletos e em Risco usando o Siegfried
Siegfried é uma alternativa ao DROID, mais moderna e sem dependência de Java:
# Instalar Siegfried
wget https://github.com/richardlehane/siegfried/releases/download/v1.11.2/siegfried_1-11-2_linux64.zip
unzip siegfried_1-11-2_linux64.zip
sudo cp sf /usr/local/bin/
sudo cp roy /usr/local/bin/
# Atualizar assinaturas PRONOM
sf -update
# Executar varredura
sf -csv /var/archivematica/sharedDirectory/transferSource/dataverse/dataverse/ > report.csv
ScriptNo Pythondiretório para/opt/scripts-preservacao/checar-obsolescencia/scripts usardo Siegfriedservidor node01-archivematica foi criado o script abaixo:
#!/usr/bin/envrun_obsolescence_check_siegfried.sh
python3|- #email_config.sh scan_siegfried.(carrega as variáveis para funcionar o envio de mensagem)
|- repositories_config.sh (carrega a variável REPOSITORIES com a relação de pastas que serão monitoradas)
|- pronom_obsolescence_checker.py import(Gera subprocesslista importde csvformatos importobsoletos json(PRONOM)
from|- datetimescan_siegfried_multi.sh import(Executando datetimevarredura fromSiegfried)
pathlib|- importconsolidate_siegfried_reports.py Path(Executar defconsolidação scan_with_siegfried(repository_path,e output_dir='salvar toda a saída)
|- check_obsolescence_in_droid.py (Analisar obsolescência)
|- generate_comprehensive_report.py (Gerar HTML abrangente)
|- send_email_report.py (Enviar email)
Caso queira alterar as credenciais do e-mail, basta editar o email_config.sh
Caso queira alterar (adicionar/remover) diretório, basta editar o repositories_config.sh
Foi adicionado no crontab para que fosse executado todo dia 07 de cada mês
0 2 7 * * /opt/scripts-preservacao/siegfried/reports'):checar-obsolescencia/scripts/run_obsolescence_check_siegfried.sh """>> Varredura usando Siegfried /opt/scripts-preservacao/checar-obsolescencia/logs/cron_$(alternativa ao DROID)
"""
Path(output_dir).mkdir(parents=True, exist_ok=True)
date_str = datetime.now().strftime('%Y%m%d_%H%M%S')
csv_output = f"{output_dir}/siegfried_report_{date_str}.csv"
json_output = f"{output_dir}/siegfried_report_{date_str}.json"
print(f"=== Varredura Siegfried ===")
print(f"Repositório: {repository_path}")
print(f"Iniciando varredura...")
# Executar Siegfried em formato CSV
with open(csv_output, 'w') as f:
subprocess.run(
['sf', '-csv', repository_path],
stdout=f,
check=True
)
print(f"Relatório CSV gerado: {csv_output}")
# Executar Siegfried em formato JSON
with open(json_output, 'w') as f:
subprocess.run(
['sf', '-json', repository_path],
stdout=f,
check=True
)
print(f"Relatório JSON gerado: {json_output}")
# Análise básica
analyze_siegfried_report(csv_output)
return csv_output, json_output
def analyze_siegfried_report(csv_file):
"""Analisa relatório do Siegfried"""
formats = {}
total_files = 0
unidentified = 0
with open(csv_file, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
total_filesdate +=\%Y\%m).log 2>&1
fmt = row.get('format', 'UNKNOWN')
if fmt == 'UNKNOWN' or not fmt:
unidentified += 1
else:
formats[fmt] = formats.get(fmt, 0) + 1
print(f"\n=== Estatísticas ===")
print(f"Total de arquivos: {total_files}")
print(f"Arquivos não identificados: {unidentified}")
print(f"Formatos únicos: {len(formats)}")
print(f"\nTop 10 formatos:")
sorted_formats = sorted(formats.items(), key=lambda x: x[1], reverse=True)
for fmt, count in sorted_formats[:10]:
print(f" {fmt}: {count}")
# Salvar análise
analysis = {
'timestamp': datetime.now().isoformat(),
'total_files': total_files,
'unidentified': unidentified,
'unique_formats': len(formats),
'formats': formats
}
analysis_file = csv_file.replace('.csv', '_analysis.json')
with open(analysis_file, 'w') as f:
json.dump(analysis, f, indent=2)
print(f"\nAnálise salva em: {analysis_file}")
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Uso: python scan_siegfried.py <caminho_repositorio>")
sys.exit(1)
repository = sys.argv[1]
scan_with_siegfried(repository)
Recomendação
Opção 1 (Melhor): Atualizar para Java 21 e usar DROID
Mais completo e precisoMantém compatibilidade com PRONOM oficialInterface gráfica disponível se necessário
Opção 2 (Alternativa): Usar Siegfried
Não requer JavaMais rápido e leveUsa mesmas assinaturas PRONOMPerfeito para linha de comando
Execute os comandos de instalação do Java 21 e depois tente novamente o DROID!