自動化プロセス中に.isoファイルを使用してISOファイルが生成されますmkisofs
。元のデータがまったく同じであるため、結果のisoファイルも異なります(md5sum
変更)。私の結果のため、rsync --checksum
毎回「同じISO」を再送信するのは好きではありません。タイムスタンプが大きな違いになると予想しました。
同じ方法でisoを生成できる内蔵スイッチはありますかlibfaketime
?mkisofs
タイムスタンプだけが重要かどうか疑問に思います。生成されたisoファイルを以下のように出力とxxd isofile
比較しました。
diff --side-by-side --suppress-common-lines <(xxd a.iso) <(xxd b.iso )
同じファイルには16バイトを表す行が51本しかないようです(約800バイトの違い)。
isoの生成に使用されるコマンドは、おおよそ次のようになります。
genisoimage -o "file.iso" -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-J -R -v -T -V 'CDLABEL' "datadir/"
rsync
BS:私の場合、約800バイトだけが同時に再送信されるのを防ぐために、約1MBの大きなファイルブロックをチェックサムするコマンドライン引数スイッチがありませんか?
答え1
genisoimage
最初の重要な注意:この製品は2004年5月にリリースされたバリエーションであるため、使用しないでくださいmkisofs
。
2007年5月現在、Debian特有のバグが大挙追加され、その後消えた。
ここで知っておくべき重要な点は、genisoimage
欠陥のあるファイルシステムイメージの作成が、オペレーティングシステムで許可されなくなることがあることです。
しかし、mkisofs
まだ活発に維持管理されており、Debianに限定されていない多数のバグが2006年8月に修正されました。現在、既知のバグはありません。
これで問題を解決するには、UNIX
ファイルメタデータにタイムスタンプを追加する -R(Rock Rigde)を使用しています。質問1です。
別の問題は、ISO-9660ファイルシステムスーパーブロック(公式にはPrimary_descriptorと呼ばれる)に作成日と変更日が含まれていることです。後者はオプションで制御できます-modification-date
。
これが本当に必要な機能だと思う場合は、作成日に同様のオプションを追加できます。ただし、最後の読み取りアクセス時間ではなく、ファイル変更日を使用するようにロック・リッジの書式設定セクションに指示するオプションがまだ必要です。
頻繁に更新される元のソースバージョンはschilytools
tarballの一部であり、以下から検索できます。http://sourceforge.net/projects/schilytools/files/
最新の schilytools tarball では、コピー可能な ISO-9660 ファイルシステムイメージのサポートが導入されました。 schily-2020-03-27.tar.bz2を入手/コンパイル/インストールしてください。
いくつかの新しいオプションがあります。
-noatime
mkisofs
変更された時間をatimeにアーカイブするように指示します。-creation-date
PVDで作成日を設定する-expiration-date
PVDで有効期限を設定する-effective-date
PVDで有効日を設定する-reproducible-date
-effective-date
と追加を除くすべての時間を設定します-noatime
。
これは、通常のISO-9660ファイルシステムイメージとおよびをRock Ridge
含むイメージに適用されますUDF
。最新のマニュアルページを参照してください。http://schilytools.sourceforge.net/man/man8/mkisofs.8.html
更新されたコマンドラインは次のとおりです。
mkisofs -b isolinux/isolinux.bin \
-c isolinux/boot.cat -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-J -R -v -T -V 'CDLABEL' \
-reproducible-date=20200327 "datadir/" > file.iso
答え2
人々は転換するソリゾ〜のように人々はmkisofを避けたいかもしれません。genisoimageはもう開発されていないようです。
xorriso出力を再現可能にするには、SOURCE_DATE_EPOCHという名前の環境変数を1970年1月1日以降の秒数と同じ値に設定します。
xorrisoまたはその製品を直接使用できます。mkisofs互換モードはxorrisofsと呼ばれます。。
SOURCE_DATE_EPOCH=0 xorrisofs YOUR-MKISOFS-ARGS
答え3
提供された答えは私には効果的ではありませんでしたが、いくつかの友人の助けを借りてxorrisoを使用して任意のフォルダからコピー可能なISOイメージを作成する方法を見つけました。
日付は環境変数としてエクスポートする必要があります。ファイルの権限は人によって異なる可能性があるため、私たちは彼らに何かをするよう強制します。preparer_id
デフォルトでは、xorrisoのフルネームとバージョンが含まれているため異なります。uid
/はgid
システムによって異なる場合があります。
このスクリプトは、フォルダパスを起動パラメータまたはプロンプト入力として受け入れます。まだOSイメージを作成しようとしていません。
export SOURCE_DATE_EPOCH="$(date -d20010101 -u +%s)"
output_filename=result.iso
file_mode=0444
folder="$1"
while [ ! -d "$folder" ]; do
[ -z "$folder" ] || printf "'%s' not a directory?\n" "$folder"
read -p "Enter path to dir containing files to pack: " folder
done
list="$(mktemp)"
(cd "$folder"; for f in *; do printf "%s\n" "$f=$PWD/$f"; done) \
| LC_ALL=C sort >"$list"
xorriso \
-preparer_id xorriso \
-volume_date 'all_file_dates' "=$SOURCE_DATE_EPOCH" \
-as mkisofs \
-iso-level 3 \
-graft-points \
-full-iso9660-filenames \
-joliet \
-file-mode $file_mode \
-uid 0 \
-gid 0 \
-path-list "$list" \
-output "$output_filename"
rm -f "$list"