vine-users ML アーカイブ



[vine-users:081565] apt-get update で変更のあったパッケージを知りたい場合

  • From: ARAI Shun-ichi <hermes@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:081565] apt-get update で変更のあったパッケージを知りたい場合
  • Date: Mon, 07 Nov 2011 22:18:41 +0900 (JST)
あらいです。

 非常に今更感に満ちた質問で申し訳ありません。

 apt-get update を実行して、パッケージに関連する情報に変更があった場合、
何がどう変わったかを知ることはできるのでしょうか。
 例えば、hogeというパッケージのバージョンが上がったとか、新規にgesoと
いうパッケージが追加されたとか。

 ぐぐったりして調べてもよくわからなかったので、結局私は、添付したよう
なシェルスクリプトを使用しています。
 性能とかあまり考慮していませんが、一応やりたいことは詰め込んでありま
す。

 しかし、何か車輪の再発明っぽい気がするので、既存のツールでできるのな
らば教えて頂けたらと思います。
 よろしくお願いします。

#!/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 mailing list
vine-users@xxxxxxxxxxxxxxxxxxxx
http://listserv.linux.or.jp/mailman/listinfo/vine-users