インストール済みphp5-fpm
apt
を使用したパッケージ。次に、PHP構成ファイルにいくつかの変更を加えました。
これで、元のファイルバージョン(インストールされているパッケージのバージョン)と現在のバージョン(自分で変更したバージョン)の差分を取得できます。どうやってするの?
次のようなものを試してください:
# 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.
# (e.g. 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
他の人が示唆しているように、必ず構成ファイルをリビジョン管理下に置いてください。そうすることで、変更内容と変更時期を正確に確認できます。
/etc
ディレクトリへの変更を追跡するには、@ Anthonが提案したように、git、Subversion、Mercurialなどを使用して、そのディレクトリのバージョン管理を行うことができます。 etckeeper などのツールを使用することもできます。チュートリアル here と here があります。
etckeeperは、/ etcをgit、Mercurial、Bazaar、またはdarcsリポジトリに保存できるようにするツールのコレクションです。これはaptにフックして、パッケージのアップグレード中に/ etcに加えられた変更を自動的にコミットします。 gitが通常サポートしないファイルメタデータを追跡しますが、
/etc/shadow
の権限など、/ etcにとって重要です。これは非常にモジュール化されており、構成可能ですが、バージョン管理の基本的な操作を理解していれば簡単に使用できます。
私の知る限り、apt
には、ディスク上のファイルと実際の.deb
にあるファイルを比較する方法がありません。また、dpkg
は、apt
がファイルの管理に実際に使用しているツールではありません。
ただし、 debsums
などのツールを使用して、インストールしたファイルの一部を比較できます。これは、.deb
ファイルの内容のチェックサム(md5sum)のみを確認しますシステムディスクの内容との比較。
debsum
およびdpkg
チェックサムの詳細と、この askubuntuの質問 については、この serverfaultの質問 を参照してください。
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
次の簡単なスクリプトを書いて、適切なDebianパッケージから元のファイルを自動的に取得し、現在のファイルと比較します。 https://a3nm.net/git/mybin/tree/debdiffconf
次のように使用します: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.
# https://stackoverflow.com/a/4785518
command -v apt >/dev/null 2>&1 || {
echo "apt 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 install apt-file. Aborting." >&2;
exit 4; }
command -v realpath >/dev/null 2>&1 || {
echo "Please install realpath: Sudo apt install realpath. Aborting." >&2;
exit 4; }
FILE=$(realpath -m "$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 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 required 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
オリジナルとインストール済みの違いを確認したい場合php.ini
ファイル、使用
diff -W COLUMNS --suppress-common-lines -y /usr/share/php5/php.ini-development /etc/php5/Apache2/php.ini -W $COLUMNS
コメント行が気にならない場合は、
| egrep -v '^;.*<$|\s*>.;.*|;.*\|.;'