Spørgsmål omkring MD5sum som ikke lige stemmer

peque
Antal: 918
Tilmeldt:
20-04-2005
User is offline
Spørgsmål omkring MD5sum som ikke lige stemmer

Hej Gruppe.
Jeg har lavet et script der også skal validere en MD5 sum på et image inden der skrives.
Jeg har mine checksum liggende i et txt fil *.md5
Der er godt nok noget der driller.
Jeg har et image som jeg via Ubuntuhar fået en checksum og lagt i et fil:
ser således ud:

image=940e6aab25666b7e1dcf3b1415e01c52
partition1=3c63b4bb916c720df53d7079505728bd
partition2=f3ea85a13d894bbbfaa21c01b708988f

Disse linjer indlæses i Script via:
IMG=`awk -F" *= *" '{if ($1=="image") print $2}' $CFG`
P1=`awk -F" *= *" '{if ($1=="partition1") print $2}' $CFG`
P2=`awk -F" *= *" '{if ($1=="partition2") print $2}' $CFG`

Jeg tjekker dette image nden jeg skriver dette, med kommandoerne:

pv /mnt/firmware/$FILENAME/$FILENAME.img | md5sum > ./im.txt
sed -i 's/ .*//' im.txt
IM1="`cat ./im.txt`"
if [ $IMG != $IM1 ];

min IMG variabel er=940e6aab25666b7e1dcf3b1415e01c52
min IM1 variabel er=940e6aab25666b7e1dcf3b1415e01c52

Selvom mine 2 checksum er ens udfra hvad jeg kan se - så forstår jeg ikke lige hvorfor min If statement
if [ $IMG != $IM1 ];
Fortæller at de ikke er ens ?
Gør jeg dette på en total forkert måde - eller er der noget helt andet galt!


osjensen
osjensen's picture
Antal: 1325
Tilmeldt:
14-01-2007
User is offline
Hvis du kørerpv

Hvis du kører

pv /mnt/firmware/$FILENAME/$FILENAME.img | md5sum > ./im.txt
sed -i 's/ .*//' im.txt
IM1="`cat ./im.txt`"
echo $IM1
echo $IMG
if [ $IMG != $IM1 ];

er værdierne så virkelig ens?
mangler du evt
IMG="`cat ./*.md5`"

Jeg er bare en amatør, ud i bash, hvis det lyder dumt.

EDIT

Med en test.md5 fil, jeg har ændret i, virker

pv 2018-10-09-raspbian-stretch-lite.img | md5sum > ./im.txt
sed -i 's/ .*//' im.txt
IM1="`cat ./im.txt`"
IMG="`cat ./*.md5`"
echo $IM1
echo $IMG
if [ "$IMG" == "$IM1" ]; then

    echo "md5 match"
else
    echo "ALARM - don't match"
fi

./test
1,74GiB 0:00:04 [ 377MiB/s] [================================>] 100%
71b68891464fd3aa97cb651f8f0c1244
81b68891464fd3aa97cb651f8f0c1244
ALARM - don't match

if [ $IMG != $IM1 ] fejler og giver "md5 match", selv om værdierne er forskeldige.


frogmaster
frogmaster's picture
Antal: 3709
Tilmeldt:
20-05-2010
User is offline
Jeg ved ikke om det er helt

Jeg ved ikke om det er helt aktuelt, men du er nødt til først at genere en korrekt formateret md5sum fil (eller bedre - sha256sum etc.) af den originale fil, før du tjekker fra terminalen eller et bash.

Det handler om i alt fire filer der bør ligge i samme mappe. Hvis du ønsker at tjekke metoden, så opret en tekst fil, skriv 1234 i filen og gem den som file.txt. Brug den til at kontrollere om det virker ved at ændre indholdet:

1- Den fil du vil tjekke.
2- md5sum.txt der indeholder md5 hash værdien - eksempel:

e7df7cd2ca07f4f1ab415d457a6e1c13 *file.txt

3- md5sum.txt.gpg, der indeholder den "korrekt formaterede hash":

-----BEGIN GPG SIGNATURE-----
Version: GnuPG v1

e7df7cd2ca07f4f1ab415d457a6e1c13
=tvuX
-----END GPG SIGNATURE-----

4. Dit bash script med indholdet:

#!/bin/bash
md5sum -b file.txt
md5sum --ignore-missing -c md5sum.txt
$SHELL

Du kan have mange filer liggende i mappen du vil tjekke hash værdien på. I det tilfælde skal du skrive hash værdierne i md5sum.txt på samme vis som vist i eksemplet.

Hvis de alle har samme extension (her txt), skal du rette i bash scriptet således md5sum -b file.txt bliver til md5sum -b *.txt


peque
Antal: 918
Tilmeldt:
20-04-2005
User is offline
puha - tak for svarende. Fik

puha - tak for svarende.
Fik løst mit problem - som jeg skrev om til at bruge md5sum -c kommandoen med de filer md5sum selv har genereret.

Mit store problem ellers var pludselig ved at bruge md5sum -c *.md5 --> så mistede jeg lidt min progressbar - som for os er ret vigtig da vi sidder og opdaterer PLC via VPN på skibe. derfor vigtigt at se hvor langt man er nået i tingene.
Jeg opretter så selv denne *.md5 med kommandoen: md5sum $/MNT/$FILENAME/$FILENAME.img > $MNT/$FILENAME/image.md5
Men reelt set kunne jeg skrotte 5 linjer og erstatte den med:

if pv $MNT/$FILENAME/$FILENAME.img | md5sum | md5sum -c $MNT/$FILENAME/image.md5;
then
blaaaa

som løste det problem - så er jeg efterhånden ved at have alle mine ønsker på plads.
Så er det eneste jeg ikke lige kan komme videre med pt
at liste filerne i $MNT/*/*.img - som skal listes i en menu - med et tal foran således det er et nummer der vælges for et image :
1) FW04
2) FW05
3) FW11
Men jeg kan ikke få den syntaks til at køre ! --> https://www.linuxin.dk/node/22454
Men på en PLC er det ikke alting der er med i busybox


frogmaster
frogmaster's picture
Antal: 3709
Tilmeldt:
20-05-2010
User is offline
Så er det eneste jeg

#3: Så er det eneste jeg ikke lige kan komme videre med pt
at liste filerne i $MNT/*/*.img - som skal listes i en menu - med et tal foran således det er et nummer der vælges for et image

Jeg kan ikke give dig en endelig løsning, men kun en mulig menu, der tillader en handling ved at vælge et nummer:

#!/bin/bash
# A menu driven shell script sample template
## ----------------------------------
# Step #1: Define variables
# ----------------------------------
EDITOR=nano
PASSWD=/etc/passwd
RED='\033[0;41;30m'
STD='\033[0;0;39m'

# ----------------------------------
# Step #2: User defined function
# ----------------------------------
pause(){
  read -p "Press [Enter] key to continue..." fackEnterKey
}

# do something in one()
one(){
echo "one() called"
        pause
}

# do something in two()
two(){
echo "two() called"
        pause
}

# do something in tree()
tree(){
echo "tree() called"
        pause
}

# function to display menus
show_menus() {
clear
echo "~~~~~~~~~~~~~~~~~~~~~"
echo " M A I N - M E N U"
echo "~~~~~~~~~~~~~~~~~~~~~"
echo "1. Set Terminal"
echo "2. Reset Terminal"
echo "3. Exit"
}
# read input from the keyboard and take a action
# invoke the one() when the user select 1 from the menu option.
# invoke the two() when the user select 2 from the menu option.
# Exit when user the user select 3 form the menu option.
read_options(){
local choice
read -p "Enter choice [ 1 - 3] " choice
case $choice in
1) one ;;
2) two ;;
3) exit 0;;
*) echo -e "${RED}Error...${STD}" && sleep 2
esac
}

# ----------------------------------------------
# Step #3: Trap CTRL+C, CTRL+Z and quit singles
# ----------------------------------------------
trap '' SIGINT SIGQUIT SIGTSTP

# -----------------------------------
# Step #4: Main logic - infinite loop
# ------------------------------------
while true
do
show_menus
read_options


peque
Antal: 918
Tilmeldt:
20-04-2005
User is offline
Hey Frogmaster. Nok min fejl

Hey Frogmaster.
Nok min fejl at det ikke er tydeligt forklaret.
Jeg har styr på Selve Menu'en og vælg af nummer mm

MEN jeg mangler det step hvor mine img mappes med et nummer
ls -lah $MNT/*/*.img
lister mine img filer - men det skal mappes sammen i et array - og det er selve tricket der lister mine img sammen med et menu Nummer!