digital-guard / preserv

Digital Preservation Project
http://git.digital-guard.org/preserv
Apache License 2.0
0 stars 0 forks source link

criar make para RDAP #124

Open ppKrauss opened 1 year ago

ppKrauss commented 1 year ago

No makefile de preserv é necessário dar suporte para a criação das pastas de _donorEvidence (exemplo BR). A informação é gerenciada pelo SQL, de modo que os comandos de rdap , whois, mkdir, etc. podem ser gerados por SQL.

Não há necessidade de se automatizar, mas de, pelo menos oferecer automação assistida para o processo de atualização das pastas _donorEvidence de cada país. O make deve fornecer o path completo.

Exemplo BR

Todos os itens da coluna "url" da planilha donor https://github.com/digital-guard/preserv-BR/blob/main/data/donor.csv precisam ter confirmação simples de RDAP, ver exemplo de acre.gov.br: https://github.com/digital-guard/preserv-BR/blob/main/data/_donorEvidence/br/acre.gov.br/rdap.json lembrar que é um script de automação: falta incluir no nosso makefile a automação... O PostgreSQL pode gerar essa lista.

Sugestão de implementação

Na base dl03t_main, depois de atualizar com pubLib05pgis-misc, rodar, que são supostamente todos os donors de todos os países

SELECT  p[array_upper(p,1)] as check,
    concat('rdap -j ', line, ' > preserv-',upper(p[array_upper(p,1)]),'/data/_donorEvidence/etc') AS cmd_line
FROM (
  SELECT *,  regexp_split_to_array (line,'\.') as p
  FROM (
    SELECT  DISTINCT str_url_todomain(url) as line FROM optim.donor 
    -- UNION 
    -- SELECT  DISTINCT line
    -- FROM (SELECT info->>'uri' AS uri, str_url_todomain(info->>'uri') as line FROM optim.donated_packtpl) t
    -- WHERE uri != line
  ) t2 WHERE line>''
) t3 ORDER BY 1,2
;

resta a união com todos da coluna uri de donatedPack.

Resta também a decomposição de 1, 2 e 3 níveis dos domínios, para compor os diretórios e fazer o > pasta/pasta/etc conforme regras sintáticas previamente estabelecidas — por exemplo o pastas iniciando no primeiro nível em exóticos tais como rio e nos 2 primeiros níveis nos demais, tais como gov.br e org.br.

Questão do donor não-local

A princípio um domínio sem jurisdição não é válido como "download oficial do país", mas a exemplo do OSM e tantos outros, precisamos gerenciar de forma mais centralizada. Usar Projeto preserv-INT para os casos de domínio internacional.

Da issue https://github.com/digital-guard/preserv-BR/issues/78

Em https://github.com/digital-guard/preserv/issues/106 ficou estabelecida a nova convenção para o registro das evidências de domínios. Primeiro rascunho no commit 880d170.

Agora temos a pasta data/_donorEvidence com todos os domínios, relativos a doadores e a pacotes doados. Ver exemplos de sp.gov.br e ac.gov.br.

0e1 commented 1 year ago

O commit https://github.com/digital-guard/preserv/commit/159a79cb9f35ba17aaa0745c14517762ed3ccebe possibilitou adicionar todas as dados de donatedPack.csv na coluna info de optim.donated_PackTpl.

Para obter o uri de um pacote, usar: SELECT info->'uri' FROM optim.donated_packtpl;

0e1 commented 1 year ago

Lembretes:

O isocode do país deve ser obtido de optim.donor, evitando situações como:

com   | rdap -j sedacusco.com > preserv-COM/data/_donorEvidence/etc
 net   | rdap -j araucaria.atende.net > preserv-NET/data/_donorEvidence/etc
 net   | rdap -j marechalcandidorondon.atende.net > preserv-NET/data/_donorEvidence/etc
 net   | rdap -j pinhais.atende.net > preserv-NET/data/_donorEvidence/etc
 org   | rdap -j addressforall.org > preserv-ORG/data/_donorEvidence/etc
 org   | rdap -j osmfoundation.org > preserv-ORG/data/_donorEvidence/etc
 org   | rdap -j wikimediafoundation.org > preserv-ORG/data/_donorEvidence/etc
 rio   | rdap -j prefeitura.rio > preserv-RIO/data/_donorEvidence/etc

Usar https://en.wikipedia.org/wiki/Country_code_top-level_domain para detectar dominos exóticos

0e1 commented 1 year ago

Criei a view para gerar a linha de comando para rdap:

e o target para retornar a lista de comandos para atualizar/criar pastas:

pushd /var/gits/_dg/preserv/src
make cmd_rdap iso=br pg_datalake=dl03t_main

Exemplos, avaliar se atendem:

mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org && rdap -j addressforall.org > /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/clicksistema.com.br && rdap -j clicksistema.com.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/clic
ksistema.com.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/correios.com.br && rdap -j correios.com.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/correios.com
.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/de/geofabrik.de/download.geofabrik.de && rdap -j download.geofabrik.de > /var/gits/_dg/preserv-BR/data/_donorEvidence/de/geofabrik.de/download.geofabrik.de
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/ce.gov.br/fortaleza.ce.gov.br/sefin.fortaleza.ce.gov.br/ide.sefin.fortaleza.ce.gov.br && rdap -j ide.sefin.fortaleza.ce.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/ce.gov.br/fortaleza.ce.gov.br/sefin.fortaleza.ce.gov.br/ide.sefin.fortaleza.ce.gov.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/df.gov.br && rdap -j df.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/df.gov.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/df.gov.br/seduh.df.gov.br/geoportal.seduh.df.gov.br && rdap -j geoportal.seduh.df.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/df.gov.br/seduh.df.gov.br/geoportal.seduh.df.gov.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/ibge.gov.br && rdap -j ibge.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/ibge.gov.br
mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/org.br/ok.org.br && rdap -j ok.org.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/org.br/ok.org.br
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/dane.gov.co && rdap -j dane.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/dane.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/dane.gov.co/geoportal.dane.gov.co && rdap -j geoportal.dane.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/dane.gov.co/geoportal.dane.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/igac.gov.co/geoportal.igac.gov.co && rdap -j geoportal.igac.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/igac.gov.co/geoportal.igac.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/igac.gov.co && rdap -j igac.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/igac.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/codigopostal.gov.co/visor.codigopostal.gov.co && rdap -j visor.codigopostal.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/codigopostal.gov.co/visor.codigopostal.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/com/arcgis.com/opendata.arcgis.com/geomedellin-m-medellin.opendata.arcgis.com && rdap -j geomedellin-m-medellin.opendata.arcgis.com > /var/gits/_dg/preserv-CO/data/_donorEvidence/com/arcgis.com/opendata.arcgis.com/geomedellin-m-medellin.opendata.arcgis.com
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/medellin.gov.co && rdap -j medellin.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/medellin.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/bogota.gov.co && rdap -j bogota.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/bogota.gov.co
mkdir -p /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/bogota.gov.co/datosabiertos.bogota.gov.co && rdap -j datosabiertos.bogota.gov.co > /var/gits/_dg/preserv-CO/data/_donorEvidence/co/gov.co/bogota.gov.co/datosabiertos.bogota.gov.co
mkdir -p /var/gits/_dg/preserv-EC/data/_donorEvidence/org/osmfoundation.org && rdap -j osmfoundation.org > /var/gits/_dg/preserv-EC/data/_donorEvidence/org/osmfoundation.org
mkdir -p /var/gits/_dg/preserv-EC/data/_donorEvidence/ec/gob.ec/azogues.gob.ec && rdap -j azogues.gob.ec > /var/gits/_dg/preserv-EC/data/_donorEvidence/ec/gob.ec/azogues.gob.ec
mkdir -p /var/gits/_dg/preserv-PE/data/_donorEvidence/com/sedacusco.com && rdap -j sedacusco.com > /var/gits/_dg/preserv-PE/data/_donorEvidence/com/sedacusco.com
0e1 commented 1 year ago

O cliente RDAP instalado com

sudo snap install rdap

não funciona para todos os casos. TLD's genéricos, do tipo .com ou .org, parecem funcionar. Exemplo: rdap -j prefeitura.rio. Para ccTLD's me parece que será preciso usar servidores específicos, da autoridade responsável ou outro. Exemplo de não funcionamento:

rdap -v -j geoportal.dane.gov.co
# OpenRDAP v0.0.1
# 
# rdap: Configuring query...
# rdap: Using disk cache (/home/claiton/snap/rdap/7/.openrdap)
# rdap: Bootstrap URL is default 'https://data.iana.org/rdap/'
# rdap: Bootstrap cache TTL set to 3600 seconds
# rdap: Timeout is 30 seconds
# 
# client: Running...
# client: Request type  : domain
# client: Request query : geoportal.dane.gov.co
# client: Request URL   : TBD, bootstrap required
#   bootstrap: Looking up...
#   bootstrap: Question type : dns
#   bootstrap: Question query: geoportal.dane.gov.co
#   bootstrap: Cache state: dns.json: good
#   bootstrap: Using cached Service Registry file
#   bootstrap: Looked up 'geoportal.dane.gov.co'
#   bootstrap: No match
# 
# rdap: Finished in 5.598907ms
# Error: No RDAP servers found for 'geoportal.dane.gov.co'

Conforme https://www.openrdap.org/docs é possível especificar o servidor, por isso funciona no caso brasileiro:

rdap -v -s https://rdap.registro.br -j nic.br
# OpenRDAP v0.0.1
# 
# rdap: Configuring query...
# rdap: Using server 'https://rdap.registro.br'
# rdap: Using disk cache (/home/claiton/snap/rdap/7/.openrdap)
# rdap: Bootstrap URL is default 'https://data.iana.org/rdap/'
# rdap: Bootstrap cache TTL set to 3600 seconds
# rdap: Timeout is 30 seconds
# 
# client: Running...
# client: Request type  : domain
# client: Request query : nic.br
# client: Request URL   : https://rdap.registro.br/domain/nic.br
# client: RDAP URL #0 is https://rdap.registro.br/domain/nic.br
# client: GET https://rdap.registro.br/domain/nic.br
# client: status-code=403, content-type=, length=0 bytes, duration=588.663473ms
# 
# rdap: Finished in 589.332622ms
# Error: No RDAP servers responded successfully (tried 1 server(s))

Assim, no caso brasileiro passei a utilizar wget https://rdap.registro.br/domain/<dominio> para obter o rdap.json. Ver https://registro.br/rdap/.

Pendente encontrar os servidores para os casos que que rdap não funcionar.

0e1 commented 1 year ago

Retomando:

O target a seguir gera uma lista de comandos para criar os diretórios, se necessário, e obter o rdap.json.

pushd /var/gits/_dg/preserv/src
make cmd_rdap iso=br pg_datalake=dl03t_main

Exemplo de output:

make cmd_rdap iso=br pg_datalake=dl03t_main
Generate list of commands to update or create rdap.json
for donor and donatedPack
Usage: make cmd_rdap iso=<ISO 3166 country code> pg_datalake=<database>
[Press ENTER to continue or Ctrl+C to quit]

commandline_rdap                                                                                                                                                                                   
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org && rdap -v -j addressforall.org > /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org/rdap.json
 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/clicksistema.com.br && wget https://rdap.registro.br/domain/clicksistema.com.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/clicksistema.com.br/rdap.json
 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/correios.com.br && wget https://rdap.registro.br/domain/correios.com.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/com.br/correios.com.br/rdap.json

...

 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/sp.gov.br/sorocaba.sp.gov.br && wget https://rdap.registro.br/domain/sorocaba.sp.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/sp.gov.br/sorocaba.sp.gov.br/rdap.json
(109 rows)

(END)

Por exemplo, os comandos

 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org && rdap -v -j addressforall.org > /var/gits/_dg/preserv-BR/data/_donorEvidence/org/addressforall.org/rdap.json
 mkdir -p /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/sp.gov.br/sorocaba.sp.gov.br && wget https://rdap.registro.br/domain/sorocaba.sp.gov.br > /var/gits/_dg/preserv-BR/data/_donorEvidence/br/gov.br/sp.gov.br/sorocaba.sp.gov.br/rdap.json

geram a seguinte estrutura de diretórios:

/var/gits/_dg/preserv-BR/data/_donorEvidence/
├── README.md
├── br
│   ├── gov.br
│   │   └── sp.gov.br
│   │       └── sorocaba.sp.gov.br
│   │           └── rdap.json
└── org
    └── addressforall.org
        └── rdap.json

Tomar os seguintes cuidados:

IMPORTANTE:

Os valores (anexo de email) presentes na coluna uri de donatedPack.csv devem ser substituídos pelo respectivo email, conforme Domínios e subdomínios a comprovar.

ppKrauss commented 1 year ago

@0e1, pendente documentar formalmente. Copiei o seu texto acima em https://github.com/digital-guard/preserv/blob/main/docs/pt/evidenceProvenance.md#automa%C3%A7%C3%A3o-assistida-com-make

Por favor revisar e expandir documentação. Demais usuários idem, favor testar e revisar texto se necessário.