Skip to main content

GERENCIAR PACOTES BAGIT

CRIAR PACOTES BAGITS POR DATASETS
sudo su - glassfish
curl -H X-Dataverse-key:$API_TOKEN  http://localhost:8080/api/datasets/:persistentId/?persistentId=doi:10.48331/SCIELODATA.RJ1HZO
export ID=19300
export API_TOKEN='YOUR API TOKEN'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" http://localhost:8080/api/admin/submitDatasetVersionToArchive/$ID/1.0
CRIAR PACOTES BAGITS DE TODOS OS DATASETS

Essa execução é feito uma vez por mês. Os pacotes bagits são gerados no diretório /preservacao/dataverse que é um ponto de montagem nfs em storage-scielo-232.scielo.org:/archivematica_transfersource

export API_TOKEN='MEU TOKEN'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" 'http://localhost:8080/api/admin/archiveAllUnarchivedDatasetVersions'

Uma vez que os pacotes são gerados precisamos organizar cada um dos datasets em pastas individuais. Para isso precisamos executar o script normalizar.sh que irá criar apenas as pastas

cd /preservacao/dataverse
sh -x normalizar.sh

Uma vez criadas as pastas, precisamos mover os arquivos zip e xml correspondentes de cada datasets para a sua respectiva pasta.

cd /preservacao/dataverse
sh -x organizar-arquivos.sh 

Pode ser que o mês tenha muitos arquivos e que represente muito gigabyte como foi o caso de agosto de 2025 que chegou a 29Gb. Precisamos dividir elas em tamanho de 1GB. Foi criado um script chamado separador-pasta.sh

#!/bin/bash
# Diretório de origem
ORIGEM="/preservacao/dataverse/scielodata-agosto-2025"
# Prefixo das novas pastas
PREFIXO="scielodata-agosto-2025"

cd "$ORIGEM" || exit 1

i=1
total=0
destino=$(printf "%s-%02d" "$PREFIXO" "$i")
mkdir -p "$destino"

# Lista subpastas com tamanho em KB (para somar fácil)
du -sk * | sort -n | while read -r size name; do
    # Se passar de 1GB (1048576 KB), cria nova pasta
    if (( total + size > 1048576 )); then
        i=$((i+1))
        total=0
        destino=$(printf "%s-%02d" "$PREFIXO" "$i")
        mkdir -p "$destino"
    fi

    echo "Movendo $name para $destino (tamanho: $size KB)"
    mv "$name" "$destino/"
    total=$((total + size))
done

veja que neste exemplo as variáveis abaixo precisam ser ajustas para o mês que você precisa trabalhar:

ORIGEM="/preservacao/dataverse/scielodata-agosto-2025"
PREFIXO="scielodata-agosto-2025"


TROUBLESHOOTING
Version was already submitted for archiving.

Quando você envia para criar o pacote em uma data versão, não é possível criar o mesmo sem uma intervenção. O erro que dá é:

{"status":"ERROR","message":"Version was already submitted for archiving."}

Para enviar novamente siga os passos:

sudo su - postgres
\c dvndb
SELECT 
    id, versionnumber, minorversionnumber, versionstate, 
    archivetime, archivalcopylocation, externalstatuslabel, archivenote
FROM datasetversion
WHERE dataset_id = '13150'
ORDER BY versionnumber DESC, minorversionnumber DESC;

Veja que o resultado foi:

image.png

Vamos agora atualizar o registro para limpar esta mensagem:

UPDATE datasetversion
SET archivetime = NULL,
    archivalcopylocation = NULL,
    externalstatuslabel = NULL,
    archivenote = NULL
WHERE id = 2209;

Resultado:

image.png

Agora vamos executar novamente o comando:

sudo su - glassfish
export ID=13150
export API_TOKEN='minha api'
curl -X POST -H "X-Dataverse-key: $API_TOKEN" http://localhost:8080/api/admin/submitDatasetVersionToArchive/$ID/1.0

Outra forma para limpar é:

export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export SERVER_URL=https://demo.dataverse.org
export PERSISTENT_IDENTIFIER=doi:10.5072/FK2/7U7YBV
export VERSION=1.0

curl -H "X-Dataverse-key: $API_TOKEN" -X DELETE "$SERVER_URL/api/datasets/:persistentId/$VERSION/archivalStatus?persistentId=$PERSISTENT_IDENTIFIER"

Link: https://guides.dataverse.org/en/latest/api/native-api.html#delete-the-archival-status-of-a-dataset-by-version