Page 1 of 2

debian jessie md5deep

PostPosted: 17.10.2015, 17:17
by atb55
Bei debian jessie gibt es md5deep nicht mehr. Das Linux script bricht immer mit der Fehlermeldung "install md5deep" ab.
Im Ordner md5deep gibt es ein Readme in dem steht, dass jetzt hashdeep verwendet wird.

Bei mir hat dann folgendes geholfen:

in der bash:

su root
(Passworteingabe)
ln -s /usr/bin/hashdeep /usr/bin/md5deep

danach lief das Script durch.

atb55

Re: debian jessie md5deep

PostPosted: 17.10.2015, 18:31
by Denniss
Oder das Script braucht ein Fallback um Hashdeep zu benutzen wenn MD5deep nicht vorhanden ist.

Re: debian jessie md5deep

PostPosted: 11.12.2015, 10:46
by t2d2
Ich bin auch über das Problem gestolpert und würde gerne einen Patch für das Skript einschicken. Wo kann ich das machen?

Re: debian jessie md5deep

PostPosted: 11.12.2015, 14:31
by Gerby
Hallo t2d2!

Am besten den Code oder den Patch hier posten, eingebettet in [code] tag. Torsten (WSUSUpdateAdmin) wird dann bei Gelegenheit schauen, inwiefern er das übernimmt.

Gruß
Gerby

Re: debian jessie md5deep

PostPosted: 12.12.2015, 16:34
by hbuhrmester
Die Regeln, wann welche Pakete installiert werden müssen, sind manchmal kompliziert und verwirrend. Die Skripte DownloadUpdates.cmd (unter Windows) und DownloadUpdates.sh (unter Linux) verwenden beide hashdeep, um Prüfsummen in verschiedenen Formaten zu berechnen.

Bei Debian 7 Wheezy wurde das Binary hashdeep mit dem Paket md5deep installiert:

Paket: md5deep (4.2-1)

Recursively compute hashsums or piecewise hashings

Md5deep is a set of tools to compute md5, sha-1, sha-256, tiger, whirlpool hashsums of arbitrary number of files recursively.

https://packages.debian.org/wheezy/md5deep


Dieses Paket md5deep installiert mehrere Binaries: hashdeep, md5deep, sha1deep, sha256deep, tigerdeep, whirlpooldeep

Liste der Dateien in Paket md5deep in wheezy für Architektur i386

/usr/bin/hashdeep
/usr/bin/md5deep
/usr/bin/sha1deep
/usr/bin/sha256deep
/usr/bin/tigerdeep
/usr/bin/whirlpooldeep
/usr/share/doc/md5deep/FILEFORMAT
/usr/share/doc/md5deep/NEWS.gz
/usr/share/doc/md5deep/README.gz
/usr/share/doc/md5deep/TODO.gz
/usr/share/doc/md5deep/changelog.Debian.gz
/usr/share/doc/md5deep/changelog.gz
/usr/share/doc/md5deep/copyright
/usr/share/man/man1/hashdeep.1.gz
/usr/share/man/man1/md5deep.1.gz
/usr/share/man/man1/sha1deep.1.gz
/usr/share/man/man1/sha256deep.1.gz
/usr/share/man/man1/tigerdeep.1.gz
/usr/share/man/man1/whirlpooldeep.1.gz

https://packages.debian.org/wheezy/i386 ... p/filelist


Bei Debian 8 Jessie sieht es zunächst genauso aus:

Paket: md5deep (4.2-1)

Recursively compute hashsums or piecewise hashings

Md5deep is a set of tools to compute md5, sha-1, sha-256, tiger, whirlpool hashsums of arbitrary number of files recursively.

https://packages.debian.org/jessie/md5deep

Liste der Dateien in Paket md5deep in jessie für Architektur i386

/usr/bin/hashdeep
/usr/bin/md5deep
/usr/bin/sha1deep
/usr/bin/sha256deep
/usr/bin/tigerdeep
/usr/bin/whirlpooldeep
/usr/share/doc/md5deep/FILEFORMAT
/usr/share/doc/md5deep/NEWS.gz
/usr/share/doc/md5deep/README.gz
/usr/share/doc/md5deep/TODO.gz
/usr/share/doc/md5deep/changelog.Debian.gz
/usr/share/doc/md5deep/changelog.gz
/usr/share/doc/md5deep/copyright
/usr/share/man/man1/hashdeep.1.gz
/usr/share/man/man1/md5deep.1.gz
/usr/share/man/man1/sha1deep.1.gz
/usr/share/man/man1/sha256deep.1.gz
/usr/share/man/man1/tigerdeep.1.gz
/usr/share/man/man1/whirlpooldeep.1.gz

https://packages.debian.org/jessie/i386 ... p/filelist


hashdeep kann mehrere Hashfunktionen verwenden und die meisten anderen Binaries (md5deep, sha1deep, sha256deep, tigerdeep, whirlpooldeep) wohl ersetzen.

Es scheint so, dass genau das in den Jessie-Backports gemacht wurde. Das Paket md5deep ist jetzt nur noch ein Übergangspaket:

Paket: md5deep (4.4-1~bpo8+1)

transitional dummy package for hashdeep

This is a transitional dummy package. It can safely be removed.

https://packages.debian.org/jessie-backports/md5deep


Dafür gibt es ein neues Paket hashdeep, das nur noch das Binary hashdeep enthält:

Paket: hashdeep (4.4-1~bpo8+1)

recursively compute hashsums or piecewise hashings

hashdeep is a set of tools to compute MD5, SHA1, SHA256, tiger and whirlpool hashsums of arbitrary number of files recursively.

https://packages.debian.org/jessie-backports/hashdeep

Liste der Dateien in Paket hashdeep in jessie-backports für Architektur i386

/usr/bin/hashdeep
/usr/share/doc/hashdeep/FILEFORMAT
/usr/share/doc/hashdeep/NEWS.gz
/usr/share/doc/hashdeep/README.Debian
/usr/share/doc/hashdeep/README.md.gz
/usr/share/doc/hashdeep/TODO.gz
/usr/share/doc/hashdeep/changelog.Debian.gz
/usr/share/doc/hashdeep/changelog.gz
/usr/share/doc/hashdeep/copyright
/usr/share/man/man1/hashdeep.1.gz

https://packages.debian.org/jessie-back ... p/filelist



Die Regel für DownloadUpdates.sh sollte dann sein: Wenn das Binary hashdeep nicht gefunden wird, installiere das Paket:
  • md5deep für Debian 7 Wheezy
  • md5deep für Debian 8 Jessie
  • hashdeep für Debian 8 Jessie-Backports


Die Regel im Skript DownloadUpdates.sh ist aber:

Code: Select all
for Datei in cabextract md5deep
  do
   Nomiss=$(which $Datei 2>/dev/null)
   test -x "$Nomiss" && continue
  cat << END

Please install $Datei

Command in Fedora:
yum install $Datei

Command in Debian:
apt-get install $Datei

Command in SuSE:
zypper install $Datei
END
   Missing=1
  done



Das ist schon im Ansatz falsch, da dabei auf das Binary md5deep getestet wird. Das Binary md5deep wird aber überhaupt nicht gebraucht.

Vielleicht hat das früher so funktioniert, weil mit dem Paket md5deep eben beide Binaries installiert wurden: Wenn md5deep installiert ist, dann muss auch hashdeep installiert sein. Aber so funktioniert das nicht mehr, da es md5deep nicht mehr gibt.

Die Regel im Skript könnte jetzt eher lauten:

Code: Select all
if ! which hashdeep > /dev/null; then
    echo "Please install the binary hashdeep,"
    echo "- from package md5deep for Debian 7 Wheezy"
    echo "- from package md5deep for Debian 8 Jessie"
    echo "- from package hashdeep for Debian 8 Jessie-Backports"
    echo "Otherwise, install the binary hashdeep, wherever is comes from"
fi


(Das soll allerdings noch kein vollständiger Patch sein.)

Eine gute Hilfe ist auch das Paket command-not-found, das einen Handler für bash installiert, um nach fehlenden Programmen zu suchen:

Paket: command-not-found (0.2.38-1)

Schlägt in interaktiven Bash-Sitzungen Paketinstallationen vor

Dieses Paket installiert einen Handler für command_not_found, der nach aktuell nicht installierten, aber in den Depots verfügbaren Programmen sucht.

https://packages.debian.org/jessie/command-not-found


Dann kann man einfach den Namen auf der Kommandozeile eingeben. Wenn hashdeep nicht installiert ist, bekommt man zum Beispiel diesen Hinweis (unter Debian 7 Wheezy):

Code: Select all
~$ hashdeep
The program 'hashdeep' is currently not installed.  To run 'hashdeep' please ask your administrator to install the package 'md5deep'
hashdeep: command not found

Regeln für XMLStarlet

PostPosted: 12.12.2015, 17:24
by hbuhrmester
Die Regeln für XMLStarlet sind gleichermaßen verwirrend:

Früher einmal wurde die Anwendung XMLStarlet als das Binary xml installiert. Die Originaldokumentation verwendet immer noch den Namen xml für das Binary:

Basic command line syntax:

Code: Select all
bash-2.03$ xml
XMLStarlet Toolkit: Command line utilities for XML
Usage: xml [<options>] <command> [<cmd-options>]
where <command> is one of:
   ed    (or edit)      - Edit/Update XML document(s)
   sel   (or select)    - Select data or query XML document(s) (XPATH, etc)
   tr    (or transform) - Transform XML document(s) using XSLT
   val   (or validate)  - Validate XML document(s) (well-formed/DTD/XSD/RelaxNG)
   fo    (or format)    - Format XML document(s)
   el    (or elements)  - Display element structure of XML document
   c14n  (or canonic)   - XML canonicalization
   ls    (or list)      - List directory as XML
   esc   (or escape)    - Escape special XML characters
   unesc (or unescape)  - Unescape special XML characters
   pyx   (or xmln)      - Convert XML into PYX format (based on ESIS - ISO 8879)
   p2x   (or depyx)     - Convert PYX into XML
<options> are:
   --version            - show version
   --help               - show help
Wherever file name mentioned in command help it is assumed
that URL can be used instead as well.

Type: xml <command> --help <ENTER> for command help

XMLStarlet is a command line toolkit to query/edit/check/transform
XML documents (for more information see http://xmlstar.sourceforge.net/)


http://xmlstar.sourceforge.net/docs.php


In Debian 7 Wheezy wird XMLStarlet als das Binary /usr/bin/xmlstarlet installiert. Die man-Page wurde entsprechend angepasst:

Code: Select all
Type: xmlstarlet <command> --help <ENTER> for command help


Die Dokumentation /usr/share/doc/xmlstarlet/xmlstarlet-ug.html verwendet immer noch den alten Namen:

Code: Select all
Type: xml <command> --help <ENTER> for command help


Eigentlich auch nicht ganz konsistent.

Das Skript DownloadUpdates.sh testet zunächst beide Namen, was vielleicht keine schlechte Idee ist. Doch wenn weder xml noch xmlstarlet gefunden wird, schlägt es vor, zwei Pakete zu installieren:

Code: Select all
Please install xmlstarlet

Command in Fedora:
yum install xmlstarlet

Command in Debian:
apt-get install xmlstarlet

Command in SuSE:
zypper install xmlstarlet

Please install xml

Command in Fedora:
yum install xml

Command in Debian:
apt-get install xml

Command in SuSE:
zypper install xml


Das ist verwirrend und falsch: Wie auch immer der Name des Binaries ist, es muss nur ein Paket installiert werden. In den meisten Distributionen wird es xmlstarlet sein. Ein Paket xml gibt es in Debian 7 Wheezy überhaupt nicht.

Ich glaube nicht, dass der Name xml für das Binary überhaupt noch verwendet wird. Aber auch dann ist die Anwendung als XMLStarlet bekannt, und dann wird auch das Paket den Namen xmlstarlet haben.

Re: debian jessie md5deep

PostPosted: 12.12.2015, 19:45
by hbuhrmester
Ein Ersatz für die Funktion checkconfig() im Skript DownloadUpdates.sh könnte schließlich so lauten:

Code: Select all
function checkconfig ()
{
    local missing_binaries=0
    local binary_name=""
    xml=""

    for binary_name in xmlstarlet xml
    do
        if which "$binary_name" > /dev/null; then
            xml="$binary_name"
            break
        fi
    done

    if [[ -z "$xml" ]]; then
        echo "Please install the package xmlstarlet"
        missing_binaries=$(( missing_binaries + 1 ))
    fi

    for binary_name in cabextract wget
    do
        if ! which "$binary_name" > /dev/null; then
            echo "Please install the package $binary_name"
            missing_binaries=$(( missing_binaries + 1 ))
        fi
    done

    if ! which hashdeep > /dev/null; then
        echo "Please install the binary hashdeep,"
        echo "- from package md5deep for Debian 7 Wheezy"
        echo "- from package md5deep for Debian 8 Jessie"
        echo "- from package hashdeep for Debian 8 Jessie-Backports"
        echo "Otherwise, install the binary hashdeep, wherever is comes from"
        missing_binaries=$(( missing_binaries + 1 ))
    fi

    if (( missing_binaries == 1 )); then
        echo "Error: $missing_binaries needed application is missing."
        exit 1
    elif (( missing_binaries > 1 )); then
        echo "Error: $missing_binaries needed applications are missing."
        exit 1
    fi
}


Diese Funktion würde checkconfig() ersetzen von Zeile 75 bis 130 (Ende "checkconfig").

Wenn man es in die trunk-Version r708 einsetzt, bekommt man zum Beispiel diese Ausgabe, wenn xmlstarlet und hashdeep fehlen:

Code: Select all
~/tmp/WSUS Offline Update/trunk-r708/sh$ ./DownloadUpdates.sh
dirname: extra operand `Offline'
Try `dirname --help' for more information.

#########################################################################
###         WSUS Offline Update Downloader for Linux systems          ###
###                          v. 10.2.1+ (r708)                        ###
###                                                                   ###
###   http://www.wsusoffline.net/                                     ###
###   Authors: Tobias Breitling, Stefan Joehnke, Walter Schiessberg   ###
###   maintained by H. Hullen                                         ###
#########################################################################
Please install the package xmlstarlet
Please install the binary hashdeep,
- from package md5deep for Debian 7 Wheezy
- from package md5deep for Debian 8 Jessie
- from package hashdeep for Debian 8 Jessie-Backports
Otherwise, install the binary hashdeep, wherever is comes from
Error: 2 needed applications are missing.


Wenn alle benötigten Anwendungen installiert sind, bekommt man:

Code: Select all
~/tmp/WSUS Offline Update/trunk-r708/sh$ ./DownloadUpdates.sh
dirname: extra operand `Offline'
Try `dirname --help' for more information.

#########################################################################
###         WSUS Offline Update Downloader for Linux systems          ###
###                          v. 10.2.1+ (r708)                        ###
###                                                                   ###
###   http://www.wsusoffline.net/                                     ###
###   Authors: Tobias Breitling, Stefan Joehnke, Walter Schiessberg   ###
###   maintained by H. Hullen                                         ###
#########################################################################
 
#########################################################################
###         WSUS Offline Update Downloader for Linux systems          ###
###                          v. 10.2.1+ (r708)                        ###
###                                                                   ###
###   http://www.wsusoffline.net/                                     ###
###   Authors: Tobias Breitling, Stefan Joehnke, Walter Schiessberg   ###
###   maintained by H. Hullen                                         ###
#########################################################################
Please select your OS:
[1] Windows Vista / Server 2008   [2] Windows Vista / Server 2008     64 bit
[3] Windows 7   (w61)      [4] Windows 7     / Server 2008 R2  64 bit
[5] Windows 8   (w62)      [6] Windows 8     / Server 2012     64 bit
[7] Windows 8.1 (w63)      [8] Windows 8.1   / Server 2012 R2  64 bit
[9] Windows 10  (w100)      [10] Windows 10   / Server 2016     64 bit

[11] All Windows 32 bit      [12] All Windows 64 bit

[13] Office 2007    [14] Office 2010   [15] Office 2013
[17] All Office updates (2007 - 2016)

[18] all Windows 7   [19] all Windows 8   [20] all Windows 8.1   [21] all Windows 10

which number?


Die Fehlermeldungen von dirname sind allerdings wieder verdächtig. Wenn man das Skript aus demselben Verzeichnis aufruft, geht es wohl. Aber aus einem anderen Verzeichnis heraus geht es immer noch nicht:

Code: Select all
~/tmp/WSUS Offline Update/trunk-r708$ sh/DownloadUpdates.sh
dirname: extra operand `Offline'
Try `dirname --help' for more information.
sh/DownloadUpdates.sh: line 67: commonparts.inc: No such file or directory
commonparts.inc fehlt


Es heißt zwar manchmal, dass man unter Linux keine Leerzeichen verwenden soll, doch das ist albern; mit minimalen Änderungen würde es ja gehen:

be careful to quote everything to avoid whitespace issues:
export SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"

https://stackoverflow.com/questions/598 ... -stored-in

Re: Ubuntu fehlt auch md5deep

PostPosted: 31.01.2016, 15:46
by maddes
Das Problem hat auch das aktuelle Ubuntu Release 15.10 Wily Werewolf.
Im Hashdeep Paket fehlt md5deep, und das separate Paket md5deep ist "leer" und verweist auf das Hashdeep Paket.

Ich habe temporär die Hashdeep Sourcen selbst kompiliert und installiert.
Hier folgt wie ich dieses gemacht habe, in der Hoffnung das es jemanden als schneller Workaround hilft.

Vorbereitungen:
Code: Select all
# Arbeite direkt als root in einer bash shell - jeder wie er mag
sudo bash
# Alles zum Kompilieren installieren, evtl. fehlen noch andere Pakete diese werden dann im Laufe der Konfiguration als Fehler gemeldet
apt-get install build-essential autoconf


Download des Source:
Code: Select all
cd <Arbeits-Verezichnis>
#
RELEASE='4.4'
wget -N "https://github.com/jessek/hashdeep/archive/release-${RELEASE}.tar.gz"
tar -zxvf "release-${RELEASE}.tar.gz"
cd "hashdeep-release-${RELEASE}"


Korrektur von configure.ac:
Code: Select all
nano configure.ac
# In Zeile 74 und 108 das Dollar-Zeichen ($) am Beginn der Zeile entfernen, damit es WARNINGS_TO_TEST=... lautet


Kompilieren nach Information aus README.md:
Code: Select all
sh bootstrap.sh
./configure
make
# installieren nach /usr/local/bin
make install

Re: debian jessie md5deep

PostPosted: 31.01.2016, 22:06
by hbuhrmester
Naja, aber der Punkt war doch, dass md5deep nie gebraucht wurde, sondern immer nur hashdeep. Wenn es jetzt ein Paket "hashdeep" gibt, ist es doch gut. Dann muss man nur den Test im Skript DownloadUpdates.sh abändern...

Das Interessante an diesen Programmen aber ist, dass es nie unterschiedliche Programme waren, sondern einfach sechs Kopien desselben Programms. In Debian 7 Wheezy (old-stable) sieht es so aus:

Code: Select all
~$ ls -l /usr/bin/*deep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/hashdeep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/md5deep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/sha1deep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/sha256deep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/tigerdeep
-rwxr-xr-x 1 root root 212204 Jun 14  2012 /usr/bin/whirlpooldeep
~$ md5sum /usr/bin/*deep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/hashdeep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/md5deep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/sha1deep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/sha256deep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/tigerdeep
b1029a5a5feb815134503e9db23f80f7  /usr/bin/whirlpooldeep


Die Programme haben alle dieselbe Größe und dieselbe Prüfsumme. Sie verhalten sich aber unterschiedlich, je nachdem, wie sie aufgerufen werden. Das nennt sich dann "multi-call binaries".

https://bugs.debian.org/cgi-bin/bugrepo ... bug=795053

Wenn man die alte Funktionalität herstellen möchte, genügt es wahrscheinlich, einfach eine Reihe von hard links anzulegen:

Code: Select all
cd /usr/bin
ln hashdeep md5deep
ln hashdeep sha1deep
...

Re: debian jessie md5deep

PostPosted: 15.02.2016, 21:02
by maddes
hbuhrmester wrote:Das Interessante an diesen Programmen aber ist, dass es nie unterschiedliche Programme waren, sondern einfach sechs Kopien desselben Programms.


Das habe ich bisher noch nicht bemerkt, dann sollte man definitiv nur noch hashdeep direkt verwenden. Mein Post war auch nur als möglicher Workaround gedacht, solange bis dies in den Distros oder in WOU geändert wurde.