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
タグ

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。