NSRLJP Script
RDS準拠のデータセットを生成する方法として、NSRL KnoppixというブートCDがNISTで提供されています。
NSRL Knoppix
http://www.nsrl.nist.gov/NARA/NSRL_Knoppix.iso
このブートCDを使えば、取得対象のファイルを含むディスクを接続した状態でperlで実装されたnara.plを実行することにより、NSRLFile.txtを生成することができます。利点はzip, tar, gz, cab, rpm, debなどの圧縮系のファイルは展開した状態でのハッシュも取得できる点です。一方、欠点として以下が挙げられます。
- ファイル名がファイルパスを含む
- 製品コードが0になる
- OSコードがUNKになる
これらの実装を修正したりNSRLFile.txtの生成後に手動で修正するのは大変であると判断し、現在NSRLJPを生成する際にはMac OS X上で動作する手製の簡易スクリプト(gen_nsrljp.sh)を使っています。スクリプトに圧縮系のファイルの展開を組み込む処理はまだ実装しておらず、別のツールを使うなどして事前に展開しています。NSRLFile.txtの作成手順は以下の通りです。
$ sh gen_nsrljp.sh -p 製品コード -o OSコード 取得対象ディレクトリ > NSRLFile.txt
製品コードやOSコードを記載したNSRLMfg.txt, NSRLOS.txt, NSRLProd.txtは事前に手動で作っており、それらの製品コード、OSコードをオプションで指定してスクリプトを実行します。
gen_nsrljp.sh
#!/bin/sh # gen_nsrljp.sh - generate NSRLFile.txt compatible file on Mac OS X # version 0.1 # http://www.kazamiya.net/nsrljp COMMAND=`basename $0` # default PCODE="0" # default OPCODE="0" # process argument if [ $# -eq 0 ]; then echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2 exit 0 fi while getopts hvp:o: option do case "$option" in h) echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2 exit 0 ;; v) echo "version 0.1" exit 0 ;; p) PCODE=$OPTARG ;; o) OPCODE=$OPTARG ;; *) echo "Usage: $COMMAND [-hv] [[-p] pcode] [[-o] opcode] targetdir" 1>&2 exit 0 esac done shift $(($OPTIND - 1)) # process argument if [ -d $@ ]; then TARGETDIR=$@ else echo "$@ is NOT a directory" exit 1 fi find $TARGETDIR -type f -print | while read LINE do FILE="$LINE" FILENAME=`basename "${FILE}"` SHA1=`shasum "$FILE" | awk '{print $1}'` MD5=`md5 "$FILE" | awk -F" = " '{print $2}'` CRC=`cksum "$FILE" | awk '{print $1}'` CRC32=`printf %08X $CRC` SIZE=`wc -c "$FILE" | awk '{print $1}'` echo "\"$SHA1\",\"$MD5\",\"$CRC32\",\"$FILENAME\",$SIZE,$PCODE,\"$OPCODE\",\"\"\r" done
コメントを追加