Obtenga cambios de diff entre files originales instalados con files apt y actuales

Instalé el package php5-fpm usando apt ; luego realicé algunos cambios en los files de configuration de PHP.

Ahora obtendría las diferencias entre las versiones de los files originales (las del package instalado) y las versiones actuales (modificadas por mí). ¿Cómo hacerlo?

Pruebe algo como esto:

 # exit on failure set -e package=php5-fpm mkdir $package cd $package # you could also get the file from a package mirror if you have # an older version of apt-get that doesn't support 'download' # or if you would like more control over what package version # you are downloading. # (eg http://archive.ubuntu.com/ubuntu/pool/main/) apt-get download $package # deb package files are ar archives ar vx ${package}*.deb # containing some compressed tar archives tar xzf data.tar.gz # now you have the files # you can get diffs for all of the files in etc if you would like find etc -type f | while read file ; do diff $file /$file done 

Según lo sugerido por otros, definitivamente ponga sus files de configuration bajo control de revisión. De esta forma, puede ver exactamente qué cambió y cuándo lo cambió.

etc directory

Para rastrear cambios en su directory /etc puede hacer lo que @Athon ha sugerido y usar git, subversion, mercurial, etc. para controlar la versión de ese directory. También puedes usar una herramienta como eckeeper . Hay un tutorial aquí y aquí .

etckeeper es una colección de herramientas para permitir que / etc se almacene en un repository git, mercurial, bazaar o darcs. Se engancha en apt para confirmar automáticamente los cambios realizados en / etc durante las actualizaciones del package. Realiza un seguimiento de los metadatos de files que normalmente no admite git, pero que son importantes para / etc, como los permissions de /etc/shadow . Es bastante modular y configurable, a la vez que simple de usar si comprende los conceptos básicos de trabajar con el control de versiones.

files de package

Que yo sepa, apt no tiene una forma de verificar los files en el disco en comparación con los files que están en el .deb real. Tampoco lo hace dpkg , la herramienta que apt usa actualmente para gestionar los files.

Sin embargo, puede usar una herramienta como debsums para comparar algunos de los files que ha instalado, solo mira sus sums de comprobación (md5sum) de lo que hay en el file .deb y lo que está en el disco de su sistema.

Consulte esta pregunta pnetworkingeterminada del server para get más información debsum sum de comprobación de debsum y dpkg , así como esta pregunta de askubuntu .

ejemplo de debsum

 % 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 

Escribí la siguiente secuencia de commands simple para recuperar automáticamente el file original del package Debian correcto y diferir el file actual contra él: https://a3nm.net/git/mybin/tree/debdiffconf

Úselo de la siguiente manera: debdiffconf FILE

 #!/bin/bash # Usage: debdiffconf.sh FILE # Produce on stdout diff of FILE against the first installed Debian package # found that provides it. # Returns the exit code of diff if everything worked, 3 or 4 otherwise. command -v apt-get >/dev/null 2>&1 || { echo "apt-get not found, this is probably not a Debian system. Aborting." >&2; exit 4; } command -v apt-file >/dev/null 2>&1 || { echo "Please install apt-file: sudo apt-get install apt-file. Aborting." >&2; exit 4; } FILE=$(readlink -f "$1") while read PACKAGE do # verify from first installed package if dpkg-query -W --showformat='${Status}\n' | grep installed > /dev/null then DIR=$(mktemp -d) cd "$DIR" echo "Trying $PACKAGE..." >&2 apt-get download "$PACKAGE" >&2 # downloaded archive is the only file present... ARCHIVE=$(ls) mkdir contents # extract entire archive dpkg-deb -x "$ARCHIVE" contents/ >&2 if [ -f "contents$FILE" ] then # package contained requinetworking file diff "contents$FILE" "$FILE" RET=$? # cleanup cd rm -Rf "$DIR" # exit entire script as this is the main shell # with the return code from diff exit $RET else # cleanup cd rm -Rf "$DIR" fi fi done < <(apt-file -l search "$FILE") # if we are here, it means we have found no suitable package echo "Could not find original package for $FILE" >&2 exit 3