acdh-oeaw/repo-file-checker

用于检查文件是否满足ARCHE仓库导入要求的脚本

3.13.3 2024-09-02 09:32 UTC

README

Latest Stable Version Build status Coverage Status License

功能

  • 分析数据结构,创建json/ndjson输出,提供
    • 文件列表
    • 目录列表
    • 文件类型列表
    • 错误列表
  • 还可以从生成的JSON文件创建HTML报告。
  • 作为Docker容器运行时,对文件进行病毒检查。

实现了错误检查

  • 文件和目录名不包含禁止的字符。
  • 文件扩展名与基于文件内容的MIME类型匹配(基于PRONOM数据库的MIME扩展映射,并对不完全可靠的内容基于MIME类型识别进行了调整)。
  • 文件的MIME类型必须被ARCHE接受(如arche-assets报告)。
  • 文本文件不包含字节顺序标记
  • BagIt存档正确(基于whikloj/bagittools库执行的检查;bagit存档可以是未压缩的zip/tar gz/tar bz2文件)。
  • ZIP、XLSX、DOCX、ODS、ODT和PDF文件没有密码保护。
    • 为了避免内存限制问题,只检查配置确定大小的文件。
  • XML文件提供XML声明和模式声明,并针对该模式进行验证。
  • 图像文件未损坏。
  • 没有重复的文件(通过哈希比较)。
  • 在大小写不敏感的文件系统上没有文件名冲突。

安装

本地

文件检查器依赖于系统中存在一些外部工具(例如gdal),因此尝试本地运行可能是一次痛苦的经历。如果您想尝试,只需

  • 安装PHP和composer
  • 运行
    composer require acdh-oeaw/repo-file-checker
  • 根据运行文件检查器时出现的错误安装任何其他缺少的软件。

作为Docker镜像

在ACDH集群上

无需操作。它已经安装在那里。

用法

一般说明

  • 您可以通过读取arche-filechecker命令的退出码来测试检查是否成功。 0表示检查成功,非零值表示至少找到一个错误。
  • 要获取所有可用参数的列表,请运行
    vendor/bin/arche-filechecker --help
  • 如果您有bagit文件,请将它们放入名为bagit的文件夹中,并将它们压缩成tgz文件。

在ACDH集群上

首先,按照此处描述的方法获取arche-ingestion工作负载控制台

然后

  • filechecker
    arche-filechecker --csv --html directoryToBeProcessed directoryToWriteReportsInto
  • 病毒扫描
    clamscan --infected --recursive directoryToScan

本地

vendor/bin/arche-filechecker --csv --html directoryToBeProcessed directoryToWriteReportsInto

作为Docker容器

  • 考虑下载防病毒软件的新签名
    • 如果您在CI/CD工作流程中运行,并且不想成为一个坏人,不希望对存储签名的服务器造成不必要的负载,请将下载的数据库存储在缓存中,例如在Github Actions上,您可以使用以下构建步骤进行数据库更新
      - name: cache AV database
        id: avdb
        uses: actions/cache@v4
        with:
          path: ~/avdb
          key: constant
      - name: refresh AV database
        run: |
          chmod 777 ~/avdb
          docker run --rm -v ~/avdb:/var/lib/clamav --entrypoint freshclam acdhch/arche-ingest --foreground
    • 在本地主机上(只需调整病毒签名目录的路径)
      mkdir -p -m 777 ~/avdb
      docker run --rm -v ~/avdb:/var/lib/clamav --entrypoint freshclam acdhch/arche-ingest --foreground
  • 运行病毒检查
    docker run \
      --rm \
      -v pathToVirusSignaturesDirectory:/var/lib/clamav \
      -v pathToDirectoryToBeProcessed:/data \
      --entrypoint clamscan \
      acdhch/arche-ingest
      --recursive --infected /data
    例如:
    docker run \
      --rm \
      -v ~/avdb:/var/lib/clamav \
      -v `pwd`:/data \
      --entrypoint clamscan \
      acdhch/arche-ingest
      --recursive --infected /data
  • 运行文件检查器
    docker run \
      --rm -u $UID \
      -v pathToDirectoryToBeProcessed:/data \
      -v pathToReportsDir:/reports \
      --entrypoint arche-filechecker \
      acdhch/arche-ingest
      --csv --html /data /reports
    例如:
    docker run \
      --rm --user $UID \
      -v /ARCHE/staging/testWollmilchsau/checkReports:/reports \
      -v /ARCHE/staging/testWollmilchsau/data:/data \
      --entrypoint arche-filechecker \
      acdhch/arche-ingest \
      --csv --html /data /reports

备注:

  • 如果您正在分批处理数据,可以通过以守护进程模式运行容器来节省一些时间。这样,您就可以避免在每次运行检查时都加载病毒签名数据库。数据库加载需要2-5秒。在守护进程设置中
    • 使用以下命令运行容器:
      docker run \
        --rm -d \
        --name filechecker \
        -v `pwd`/MY_REPORTS_DIR:/reports \
        -v `pwd`/MY_DATA_DIR:/data \
        -v ~/.cvdupdate/database/:/var/lib/clamav \
        -e DAEMONIZE=1 \
        acdhch/arche-filechecker
    • 等待几秒钟,让杀毒软件加载病毒数据库(您可以通过查看docker日志来检查它是否已就绪)。
    • 使用以下命令执行检查:
      # virus check
      docker exec filechecker clamdscan --infected --recursive /data
      # filechecker check
      docker exec --user $UID filechecker /opt/filechecker/bin/arche-filechecker --csv --html /data /reports

测试文件

测试文件存储在tests/data文件夹中。