最近遇到一些问题,调查的时候发现是一些包的Priority在apt-cache和deb文件当中的不一样导致的,复现步骤如下:
$ apt update
$ apt download whiptail
$ dpkg-deb -e whiptail_0.52.23-1+b1_amd64.deb
$ cat control | grep Prio
Priority: optional
$ apt-cache show whiptail | grep Prio
Priority: important
$ apt download man-db
$ dpkg -e man-db_2.11.2-2_amd64.deb
$ cat DEBIAN/control | grep Prio
Priority: important
$ apt-cache show man-db | grep Prio
Priority: standard
$ apt download install-info
$ dpkg -e install-info_6.8-6+b1_amd64.deb
$ cat DEBIAN/control | grep Prio
Priority: important
$ apt-cache show install-info | grep Prio
Priority: optional
可以看到whiptail man-db install-info这3个包在apt-cache显示的Priority分别是important standard optional,但是在deb文件当中的值却是optional important important。
经调查发现Debian存在一个override的机制,会覆盖掉deb文件里面的部分值,具体细节可参考: https://wiki.debian.org/FtpMaster/Override
$ wget http://ftp.debian.org/debian/indices/override.bookworm.main.gz
$ gunzip override.bookworm.main.gz
$ cat override.bookworm.main | grep -E "whiptail|man-db|install-info"
man-db standard doc
install-info optional doc
whiptail important utils
将override文件下载下来后查找对应的包,可以看到对应的Priority与apt-cache当中的一致