web-dev-qa-db-fra.com

Comment automatiser le processus de vérification d'une somme ISO SHA256 Ubuntu

Je sais que je peux obtenir les sommes SHA256 (et les sommes MD5) auprès de http://releases.ubuntu.com/ telles qu'elles sont maintenant fournies dans les dossiers, mais existe-t-il un moyen d'automatiser la vérification? processus pour que le téléchargement de la somme SHA soit automatique, de même que la vérification? Je sais que vous pouvez "semi-automatiser" le processus avec MD5sums , mais je ne sais pas comment l’automatiser complètement, ni même obtenir une semi-automatisation avec SHA256.

Quelque chose qui ressemble à un script dans lequel vous pouvez entrer la version et la version (y compris les versions non prises en charge), le téléchargement automatique de la somme SHA256 et les vérifications seraient utiles.

3
user364819

Ceci récupérera automatiquement le fichier "SHA256SUM" correct pour la version/version spécifiée et le comparera aux images trouvées dans le répertoire spécifié (ou dans le répertoire de travail actuel si aucun répertoire n'est spécifié);

La saveur en entrée doit être "unit" ou l’une des saveurs listées ici ; au moment de cette réponse, ce sont:

  • edubuntu
  • kubuntu
  • lubuntu
  • mythubuntu
  • ubuntu-gnome
  • ubuntukylin
  • ubuntu-mate
  • ubuntustudio
  • xubuntu

La version d'entrée doit être une version/version ponctuelle valide pour la version spécifiée.

Il utilise zenity pour fournir une interface graphique Nice afin d’obtenir les entrées; il imprimera uniquement les résultats correspondants (le cas échéant) et permettra à l'utilisateur de choisir s'il souhaite conserver le fichier "SHA256SUM" téléchargé;

#!/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

Exemple sur une image Ubuntu Desktop 15.04 64 bits:

screenshot1

screenshot2

screenshot3

screenshot4

3
kos

La page officielle contenant les hachages MD5 pour Ubuntu, Kubuntu, Edubuntu Xubuntu et Lubuntu est:

https://help.ubuntu.com/community/UbuntuHashes

Choisissez la distribution appropriée et cliquez sur le fichier MD5SUMS.

Maintenant, vérifiez votre ISO de téléchargement:

md5sum ubuntu-*.iso

Comparez le hachage (la chaîne alphanumérique à gauche) que votre machine a calculée avec le hachage correspondant sur la page buntuHashes .

méthode semi-automatique

Ubuntu distribue les hachages MD5 dans un fichier appelé MD5SUMS au bas de la page de téléchargement de votre version http://releases.ubuntu.com .

Commencez par télécharger le fichier MD5SUMS dans le même répertoire que l’ISO. Puis exécutez ce qui suit dans un terminal.

cd répertoire_download

md5sum -c MD5SUMS

md5sum va générer un tas d'avertissements. Ne vous inquiétez pas: le message OK sera enterré quelque part dedans!

Dans ce cas, le message que vous voulez est sur la septième ligne.

ubuntu-*.iso: OK
2
Maythux

Pour cette tâche spécifique, j'ai écrit mon propre script Python. Ceci est destiné aux images iso téléchargeables avec les images iso fournies à l'adresse http://cdimage.ubuntu.com , mais le contenu de ce site est exactement le même que celui que vous utilisez http://releases.ubuntu.com/ , donc cela fonctionnera pour les deux. Les deux sites ont le fichier SHA256SUMS que nous vérifierons. Le principe de base de ce script est de

  1. télécharger l'iso
  2. calculer le sha256sum de l'iso
  3. téléchargez le fichier SHA256SUM à partir de la même page
  4. Comparez ce que nous avons calculé avec ce qui est dans le fichier

Code source du script

Ce script est également disponible sur mon référentiel personnel de GitHub , qui peut ne jamais avoir de fonctionnalités.

#!/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()

Essai:

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
1