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:
Jeg tjekker dette image nden jeg skriver dette, med kommandoerne:
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!
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!
Kommentarer5
Hvis du kørerpv
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.
Jeg ved ikke om det er helt
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
puha - tak for svarende.
Fik
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
Så er det eneste jeg
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
Hey Frogmaster.
Nok min fejl
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!