http://releases.ubuntu.com/ からSHA256の合計(およびMD5の合計)を取得できることは知っていますが、現在はフォルダー内で提供されていますが、チェックを自動化する方法はありますかSHA合計のダウンロードが自動化され、チェック部分も自動化されるように処理しますか? MD5sums でプロセスを「半自動化」できることを知っていますが、完全に自動化する方法も、SHA256で半自動化する方法もわかりません。
リリースとフレーバーを入力できるスクリプト(サポートされていないリリースを含む)のようなもので、SHA256の合計とチェックを自動的にダウンロードするとよいでしょう。
これにより、指定されたフレーバー/リリースの正しい「SHA256SUM」ファイルが自動的にフェッチされ、指定されたディレクトリ(またはディレクトリが指定されていない場合は現在の作業ディレクトリ)で見つかったイメージと照合されます。
入力フレーバーは、「ユニティー」またはリストされているフレーバーのいずれかでなければなりません here ;この答えの時点で、それらは次のとおりです。
edubuntu
kubuntu
lubuntu
mythubuntu
ubuntu-gnome
ubuntukylin
ubuntu-mate
ubuntustudio
xubuntu
入力リリースは、指定されたフレーバーの有効なリリース/ポイントリリースでなければなりません。
zenity
を使用して、入力を取得するためのNice GUIを提供します。一致する結果(存在する場合)のみを印刷し、ダウンロードした「SHA256SUM」ファイルを保持するかどうかをユーザーに選択させます。
#!/bin/bash
if [ ! -z "$1" ]; then
if [ -d "$1" ]; then
printf "Changing PWD to $1...\n"
cd "$1"
else
printf "$1 is not a valid directory.\n"
exit 1
fi
fi
flavour=$(zenity \
--entry \
--title "Insert the flavour to check the image against" \
--text "Insert the flavour to check the image against:" \
2>/dev/null | \
tr '[:upper:]' '[:lower:]')
printf "Flavour:\t$flavour\n"
version=$(zenity \
--entry \
--title "Insert the version to check the image against" \
--text "Insert the version to check the image against:" \
2>/dev/null | \
tr '[:upper:]' '[:lower:]')
printf "Version:\t$version\n"
[ "$flavour" = "unity" ] \
&& address="http://releases.ubuntu.com/$version/SHA256SUMS" \
|| address="http://cdimage.ubuntu.com/$flavour/releases/$version/release/SHA256SUMS"
printf "Downloading $address...\n"
wget -q -O SHA256SUMS "$address"
[ $? -ne 0 ] && printf "No SHA256SUMS file found on the server.\n" && rm SHA256SUMS && exit 1
printf "Checking SHA256SUMS...\n"
shasum -a 256 -c SHA256SUMS |& grep 'OK$'
[ $? -eq 0 ] || printf "No matching image found on the target directory.\n"
zenity --question --title "Remove SHA256SUMS?" --text "Remove SHA256SUMS?" 2>/dev/null
[ $? -eq 0 ] && rm SHA256SUMS
exit 0
Ubuntu Desktop 15.04 64ビットイメージの例:
Ubuntu、Kubuntu、Edubuntu Xubuntu、およびLubuntuのMD5ハッシュを含む公式ページは次のとおりです。
https://help.ubuntu.com/community/UbuntuHashes
関連するディストリビューションを選択し、MD5SUMSファイルをクリックします。
次に、ダウンロードISOを確認します。
md5sum ubuntu-*.iso
マシンが計算したハッシュ(左側の英数字文字列)と buntuHashes ページの対応するハッシュを比較します。
Ubuntuは、リリースのダウンロードページの下部近くにあるMD5SUMSというファイルでMD5ハッシュを配布します http://releases.ubuntu.com 。
まず、MD5SUMSファイルをisoと同じディレクトリにダウンロードします。次に、ターミナルで次を実行します。
cd download_directory
md5sum -c MD5SUMS
md5sumは大量の警告を生成します。心配しないでください:OKメッセージはその中のどこかに埋め込まれます!
この場合、必要なメッセージは7行目にあります。
ubuntu-*.iso: OK
この特定のタスクのために、独自のPythonスクリプトを作成しました。これは、 http://cdimage.ubuntu。 com ですが、そのサイトのコンテンツは使用するものとまったく同じです http://releases.ubuntu.com/ なので、両方で機能します。両方のサイトにSHA256SUMS
ファイル、これを確認します。このスクリプトの基本的な前提は
SHA256SUM
ファイルをダウンロードしますこのスクリプトは、私の パーソナルGitHubリポジトリ でも利用できます。
#!/usr/bin/env python3
# Script for automatically downloading and verifying sha256 hashsum
# of iso images provided by http://cdimage.ubuntu.com
import urllib.request
import sys
import os
from hashlib import sha256
def download_file(url):
print(">>> Retrieving ",url)
save_as = url.split('/')[-1]
buffer_size=512
try:
with urllib.request.urlopen(url) as response, open(save_as,'wb') as out_file:
print(response.info())
print(">>> Writing data:")
has_data=True
retrieved = 0
while has_data:
data = response.read(buffer_size)
retrieved += len(data)
# simple progress message which overwrites itself
message = "Retrieved "+str(retrieved)+" bytes"
print("\r"+" "*len(message)+"\r",end="")
print(message,end="")
sys.stdout.flush()
if data:
out_file.write(data)
else:
has_data=False
except Exception as e:
sys.stderr.write('\n>>> Something went wrong\n')
sys.stderr.write(str(e))
else:
print('\n>>> URL retrieved successfully')
return(save_as)
def get_sha256sum(file_path):
sha256sum = sha256()
with open(file_path, 'rb') as fd:
data_chunk = fd.read(1024)
while data_chunk:
sha256sum.update(data_chunk)
data_chunk = fd.read(1024)
return str(sha256sum.hexdigest())
def compare_sha256sums(local_file,sha256sum,hashsum_file):
remote_hashsum = ""
with open(hashsum_file) as fd:
for line in fd:
words = line.strip().split()
if words[1].replace('*','') == local_file:
remote_hashsum = words[0]
if not remote_hashsum:
sys.stderr.write("\n>>> Error: local file not found in list of SHA256SUMS\n")
sys.exit(1)
if remote_hashsum == sha256sum:
print("Local file ",local_file," with sha256 hashsum ",sha256sum,"matches with sha256sum in remote. All OK.")
def main():
saved_filename = download_file(sys.argv[1])
sha256sum = get_sha256sum(saved_filename)
sha256sums_file_url = "/".join( sys.argv[1].split('/')[:-1] + ['SHA256SUMS'] )
sha256sum_file = download_file( sha256sums_file_url )
compare_sha256sums(saved_filename,sha256sum,sha256sum_file)
if __== '__main__': main()
bash-4.3$ ./get_iso_and_verify.py http://cdimage.ubuntu.com/releases/16.04.2/release/ubuntu-16.04.2-preinstalled-server-armhf+raspi2.img.xz
>>> Retrieving http://cdimage.ubuntu.com/releases/16.04.2/release/ubuntu-16.04.2-preinstalled-server-armhf+raspi2.img.xz
Date: Fri, 07 Jul 2017 21:55:20 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Thu, 16 Feb 2017 20:16:12 GMT
ETag: "ee62708-548ab77ea3b00"
Accept-Ranges: bytes
Content-Length: 249964296
Connection: close
Content-Type: application/x-xz
>>> Writing data:
Retrieved 249964296 bytes
>>> URL retrieved successfully
>>> Retrieving http://cdimage.ubuntu.com/releases/16.04.2/release/SHA256SUMS
Date: Fri, 07 Jul 2017 22:09:47 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Fri, 17 Feb 2017 00:06:46 GMT
ETag: "205-548aeb07c5180"
Accept-Ranges: bytes
Content-Length: 517
Connection: close
>>> Writing data:
Retrieved 517 bytes
>>> URL retrieved successfully
Local file ubuntu-16.04.2-preinstalled-server-armhf+raspi2.img.xz with sha256 hashsum 60156f9238360dc84267dbde4f334516d580fe540dd523d12d4837c4647d6d8f matches with sha256sum in remote. All OK.
bash-4.3$ cat SHA256SUMS
60156f9238360dc84267dbde4f334516d580fe540dd523d12d4837c4647d6d8f *ubuntu-16.04.2-preinstalled-server-armhf+raspi2.img.xz
35c9a6b7536e41c19f18033ac5a9b095130d17848126160d6b66cbd09be48f17 *ubuntu-16.04.2-server-arm64.iso
a00d88107eebadf0dde86087ad746d372d33ebdd29ac5cd4fae42a2e031d2b8f *ubuntu-16.04.2-server-powerpc.iso
0a10bada74112c58412ac8778df05abbb69d5983b672e6bbe74fa794cf002a2a *ubuntu-16.04.2-server-ppc64el.iso
253fd0eb5e529c3434729f475c7855463ba87ed7dea4321182b54c5416523897 *ubuntu-16.04.2-server-s390x.iso