acdh-oeaw / repo-file-checker
用于检查文件是否满足ARCHE仓库导入要求的脚本
3.13.3
2024-09-02 09:32 UTC
Requires
- php: ^8.1
- ext-bz2: *
- ext-exif: *
- ext-fileinfo: *
- ext-phar: *
- ext-zip: *
- ext-zlib: *
- acdh-oeaw/arche-assets: ^3.9.4
- acdh-oeaw/arche-lib-ingest: ^4
- guiguiboy/php-cli-progress-bar: 0.0.4
- whikloj/bagittools: ^4.2.3
- zozlak/argparse: ^1
Requires (Dev)
- phpstan/phpstan: ^1.9
- phpunit/phpunit: *
This package is auto-updated.
Last update: 2024-09-02 09:41:24 UTC
README
功能
- 分析数据结构,创建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镜像
- 安装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
- 如果您在CI/CD工作流程中运行,并且不想成为一个坏人,不希望对存储签名的服务器造成不必要的负载,请将下载的数据库存储在缓存中,例如在Github Actions上,您可以使用以下构建步骤进行数据库更新
- 运行病毒检查
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
文件夹中。