GNU/Linux >> Linux Esercitazione >  >> Linux

Dpkg può verificare i file da un pacchetto installato?

Soluzione 1:

Come in dpkg/1.17.2, implementa --verify opzione, secondo questa segnalazione di bug debian.

Nota che questa è una modifica relativamente nuova a dpkg. Date: Thu, 05 Dec 2013 04:56:31 +0100 riga nel pacchetto dpkg v1.17.2 lo mostra.

Ecco una breve descrizione di --verify azione citata dalla pagina man di dpkg.

   -V, --verify [package-name...]
          Verifies  the integrity of package-name or all packages if omit‐
          ted, by comparing information from the installed paths with  the
          database metadata.

          The output format is selectable with the --verify-format option,
          which by default uses the rpm format, but that might  change  in
          the  future,  and  as  such programs parsing this command output
          should be explicit about the format they expect.

Quindi puoi semplicemente usare una sintassi simile a quella di yum per eseguire verifiche e ottenere risultati in formato rpm.Ad esempio:

dpkg --verify openssh-server

o semplicemente usa dpkg --verify per verificare ogni singolo pacchetto installato sul tuo sistema.

P.S.

In esecuzione, dì dpkg --verify bash , sulla mia macchina mi ha dato qualcosa del genere. (Sto eseguendo dpkg/1.17.5)

??5?????? c /etc/bash.bashrc
??5?????? c /etc/skel/.bashrc

Sembra che i pacchetti .deb contengano solo metadati md5sums per la verifica.

Soluzione 2:

Non credo, in Ubuntu i checksum md5 vengono memorizzati solo per determinati file. Per ogni dato pacchetto l'elenco dei file che hanno checksum può essere trovato in

/var/lib/dpkg/info/<package>.md5sums

ad esempio

/var/lib/dpkg/info/openssh-server.md5sums

Questi generalmente non contengono un elenco completo dei file che sono stati installati da un pacchetto, ad es. openssh-server.md5sums

bb5096cf79a43b479a179c770eae86d8  usr/lib/openssh/sftp-server
42da5b1c2de18ec8ef4f20079a601f28  usr/sbin/sshd
8c5592e0d522fa0f8f55f3c104479ef5  usr/share/lintian/overrides/openssh-server
cfcb67f58bcd1edcaa5a770863e49304  usr/share/man/man5/sshd_config.5.gz
71a51cbb514da3044b277e05a3ceaf0b  usr/share/man/man8/sshd.8.gz
222d4da61fcb3c65b4e6e83944752f20  usr/share/man/man8/sftp-server.8.gz

Puoi usare il comando debsums (sudo apt-get install debsums) per controllare i file che hanno firme md5

debsums openssh-server
/usr/lib/openssh/sftp-server                                                  OK
/usr/sbin/sshd                                                                OK
/usr/share/lintian/overrides/openssh-server                                   OK
/usr/share/man/man5/sshd_config.5.gz                                          OK
/usr/share/man/man8/sshd.8.gz                                                 OK
/usr/share/man/man8/sftp-server.8.gz                                          OK

Soluzione 3:

Ci sono debsum di strumenti che puoi controllare.

# apt-cache search debsums
debsums - tool for verification of installed package files against MD5 checksums

Soluzione 4:

Normalmente ho un elenco di file che voglio verificare.
Quindi ecco una semplice funzione bash che fa più o meno quello che vuoi:

dpkg-verify() {
    exitcode=0
    for file in $*; do
        pkg=`dpkg -S "$file" | cut -d: -f 1`
        hashfile="/var/lib/dpkg/info/$pkg.md5sums"
        if [ -s "$hashfile" ]; then
            rfile=`echo "$file" | cut -d/ -f 2-`
            phash=`grep -E "$rfile\$" "$hashfile" | cut -d\  -f 1`
            hash=`md5sum "$file" | cut -d\  -f 1`
            if [ "$hash" = "$phash" ]; then
                echo "$file: ok"
            else
                echo "$file: CHANGED"
                exitcode=1
            fi
        else
            echo "$file: UNKNOWN"
            exitcode=1
        fi
    done
    return $exitcode
}

Utilizzare in questo modo:

dpkg-verify /bin/ls /usr/bin/ld

Output sul mio ambiente:

/bin/ls: ok
/usr/bin/ld: UNKNOWN

Naturalmente, dovrebbe essere abbastanza semplice scrivere un alias/script simile per controllare i file da un pacchetto specifico.

Soluzione 5:

Uso questo comando per controllare tutti i pacchetti:
dpkg -l | awk {'print $2'} | xargs | debsums | grep -v 'OK'

Dovresti aver bisogno di installare i pacchetti debsumbs, gawk e findutils.


Linux
  1. Update-manager bloccato durante l'installazione del pacchetto per l'aggiornamento da 13.10 a 14.04?

  2. Come posso eseguire un'applicazione OpenGL installata su una macchina Linux dalla mia macchina Windows?

  3. Posso stampare file html (con immagini, css) dalla riga di comando?

  4. Impossibile creare menuconfig

  5. Dove posso trovare dove è stato installato un pacchetto?

Come elencare i file installati da un pacchetto RPM o DEB in Linux

Come elencare tutti i file che sono stati installati da un pacchetto Apt?

Debian:come replicare le selezioni di pacchetti installati da un sistema Debian a un altro? (Debian Wheezy)?

I file binari creati dalla sorgente possono essere installati su una seconda macchina?

Necessità di impedire l'installazione di un pacchetto?

Come visualizzare ed estrarre file da pacchetti rpm, deb, depot e msi