[vine-users:081565] apt-get update で変更のあったパッケージを知りたい場合
ARAI Shun-ichi
hermes @ ceres.dti.ne.jp
2011年 11月 7日 (月) 22:18:41 JST
あらいです。
非常に今更感に満ちた質問で申し訳ありません。
apt-get update を実行して、パッケージに関連する情報に変更があった場合、
何がどう変わったかを知ることはできるのでしょうか。
例えば、hogeというパッケージのバージョンが上がったとか、新規にgesoと
いうパッケージが追加されたとか。
ぐぐったりして調べてもよくわからなかったので、結局私は、添付したよう
なシェルスクリプトを使用しています。
性能とかあまり考慮していませんが、一応やりたいことは詰め込んでありま
す。
しかし、何か車輪の再発明っぽい気がするので、既存のツールでできるのな
らば教えて頂けたらと思います。
よろしくお願いします。
-------------- next part --------------
#!/bin/bash
cmd="${0##*/}"
function usage() {
echo "usage: ${cmd} [-n][-h]"
}
function listpkgs () {
pkg=
apt-cache dump | while read tag info; do
if [ "${tag}" = 'Package:' ]; then
pkg="${info}"
elif [ "${tag}" = 'Version:' ]; then
echo "${pkg} ${info}"
fi
done | sort
return "${PIPESTATUS[0]}"
}
noupdate=
while getopts 'nh' c
do
case "$c" in
n) noupdate='yes' ;;
h) usage
exit ;;
*) usage 1>&2
exit 1 ;;
esac
done
shift $(($OPTIND - 1))
listdir='/var/run/apt'
listname="${listdir}/cachelist"
last="${listname}.last"
prev="${listname}.prev"
new="${listname}._new"
mkdir -p "${listdir}"
if [ $? -ne 0 ]; then exit 1; fi
nolast=
if [ ! -e "${last}" ]; then
echo 'No last cache info; now creating...'
listpkgs > "${last}"
if [ $? -ne 0 ]; then
echo 'Failed.'
nolast='yes'
else
echo 'Done.'
fi
fi
if [ "${noupdate}" ]; then
if [ ! -e "${prev}" ]; then echo 'No previous info.' 1>&2; exit 1; fi
if [ "${nolast}" ]; then
listpkgs | diff "${prev}" -
else
diff "${prev}" "${last}"
fi
exit
fi
apt-get update
if [ $? -ne 0 ]; then exit 1; fi
listpkgs > "${new}"
diff "${last}" "${new}"
r=$?
if [ "${r}" -ne 0 ]; then
if [ $? -ne 1 ]; then echo 'Diff error.' 1>&2; exit 1; fi
save="${listname}.$(date -r "${last}" '+%Y%m%d_%H%M')"
mv "${last}" "${save}"
mv "${new}" "${last}"
rm -f "${prev}"
ln -s "${save}" "${prev}"
fi
exit "${r}"
vine-users メーリングリストの案内