スクリプトにチェックサムを追加するには?

スクリプトにチェックサムを追加するには?

インストールに問題があります。ワシ私のLinux(debian 8 jessie)コンピュータで。インストールスクリプトを読みながら、インストールスクリプトにインストールスクリプトのチェックサムがあることがわかりました。

コメントのスクリプトで1文字を修正しましたが、突然

「./eagle-lin-7.2.0.run」のチェックサムエラー

どのように動作しますか?スクリプトに入れる前にチェックサムを知る必要はありませんか?これは私に矛盾しているようです。スクリプト全体のチェックサムをスクリプトに入れる方法を説明できる人はいますか?

この特定のチェックサムはMD5です。

ベストアンサー1

インストーラをダウンロードしてみました。関連するコードスニペットは次のとおりです。

#!/bin/bash

MD5=1fe8463da9322ad9c966a57b92569a52

# The required tools:
SED=sed
MD5SUM=md5sum
CUT=cut
DATA="$SED -e '1,/^__DATA__$/d' '$0'"

# Check archive integrity:
test `eval $DATA | $MD5SUM | $CUT -d " " -f 1` = $MD5 || {
  echo "Checksum error in '$0'" >&2
  exit 1
  }

# ...

exit 0
# Everything after the next line is a .tar.bz2 file
__DATA__
[a binary blob finishes the file]

これはsed -e '1,/^__DATA__$/d'スクリプト自体で実行され、__DATA__最初(1行目)からその行まですべての行を削除し、バイナリのみを残します。次に、バイナリを実行してチェックサムをmd5sum取得し、チェックサムcut自体(ファイル名なし)のみを含めるようにフォーマットし、スクリプトの以前にハードコードされたチェックサムと比較します。

このステートメントはMD5が一致した場合はtrueを返しtest、一致しない場合はfalseを返します。||〜する段落テストが true になると評価が中断されるという意味です。括弧で囲まれたセクションは、テストが偽の場合にのみ実行されます。

おそらく、その行の後の何も(意図的に)触れていないので、__DATA__これはテキストエディタの誤りかもしれません。空白や空の行を追加したり、DOSとUNIXの行形式の間を変換したりする(Wikipediaで改行の詳細をご覧ください。)。

もう1つの可能性は、ダウンロードが失敗してファイルが破損していることです。これが問題にならない場合は、exit 1MD5テストセクションから行を削除するだけでインストーラが正常に動作します。

(このスクリプトは正しく書かれていないので、動作するように変更する必要があるという事実は全く驚くべきことではありません。)

おすすめ記事