已经apt-key
贬值了。例如,这里他们描述了如何迁移到 gpg 密钥。很好,但它可以工作一个月左右,直到sources.list
文件被覆盖。为什么或如何它被覆盖,我不知道,只是在某个时候它被覆盖,我必须再次执行该过程。执行此操作的外部存储库的典型示例:geogebra 或 google Earth。在这两种情况下,该行deb [signed-by=/usr/share/keyrings/geogebra.gpg] http://www.geogebra.net/linux/ stable main
都会被覆盖为:
deb http://www.geogebra.net/linux/ stable main
。
其他人有这种经验以及解决这个相当烦人的“新功能”的方法吗?
答案1
包做到了
...不是 Debian。
根据包装内容地理代数(可从这个地方检索http://www.geogebra.net/linux/pool/main/g/geogebra/
:)及其元数据,例如,它们都可以在以下位置提取/tmp/geogebra
和检查:
dpkg-deb --raw-extract geogebra_4.2.60.0-30762_all.deb /tmp/geogebra
cd /tmp/geogebra
DEBIAN/postinst
文件:
[...] DEFAULTS_FILE=/etc/default/geogebra ## MAIN ## if [ ! -e "$DEFAULTS_FILE" ]; then echo 'repo_add_once="true"' > "$DEFAULTS_FILE" echo 'repo_reenable_on_distupgrade="true"' >> "$DEFAULTS_FILE" fi # Run the cron job immediately to perform repository configuration. nohup sh /etc/cron.daily/geogebra > /dev/null 2>&1 &
这将初始写/etc/default/geogebra
为:
repo_add_once="true"
repo_reenable_on_distupgrade="true"
etc/cron.daily/geogebra
(每天运行一次):
#!/bin/sh [...] # System-wide package configuration. DEFAULTS_FILE="/etc/default/geogebra" # sources.list setting for GeoGebra updates. REPOCONFIG="deb http://www.geogebra.net/linux/ stable main" [...] update_bad_sources() { [...] # Don't do anything if the file isn't there, since that probably means the # user disabled it. if [ ! -r "$SOURCELIST" ]; then return 0 fi [...] # Detect if the repo config was disabled by distro upgrade and enable if # necessary. handle_distro_upgrade() { [...] SOURCELIST="$APT_SOURCESDIR/geogebra.list" if [ -r "$SOURCELIST" ]; then [...] fi ## MAIN ## DEFAULTS_FILE="/etc/default/geogebra" if [ -r "$DEFAULTS_FILE" ]; then . "$DEFAULTS_FILE" fi if [ "$repo_add_once" = "true" ]; then install_key create_sources_lists RES=$? # Sources creation succeeded, so stop trying. if [ $RES -ne 2 ]; then sed -i -e 's/[[:space:]]*repo_add_once=.*/repo_add_once="false"/' "$DEFAULTS_FILE" fi else update_bad_sources fi if [ "$repo_reenable_on_distupgrade" = "true" ]; then handle_distro_upgrade fi
/etc/default/geogebra
第一次遇到以下情况后会发生变化:
repo_add_once="false"
repo_reenable_on_distupgrade="true"
因此,这将每天或每次升级时继续运行功能update_bad_sources()
并handle_distro_upgrade()
这是软件包尝试以自己的方式重新启用自己的存储库的两个地方。
防止包geogebra
(重新)添加自己的存储库
根据内容,可以通过以下方式避免这种情况不是拥有所有文件/etc/apt/sources.d/geogebra
。但无法保证未来会如何运作。
所以目前重命名/etc/apt/sources.d/geogebra
为/etc/apt/sources.d/local-geogebra
应该防止包管理自己的存储库源(初始安装时除外)。
另外,还可以创建一个空文件并使其不可变,这样即使包将来的行为发生变化,包的内容也无法更改。由于升级脚本不会检查此类升级的返回代码 ( nohup ... &
),因此它甚至不会在升级过程中失败。
所以:
mv /etc/apt/sources.d/geogebra /etc/apt/sources.d/local-geogebra
也可以选择:
touch /etc/apt/sources.d/geogebra
chattr +i /etc/apt/sources.d/geogebra
另一种方法是防止定时任务通过在包级别将其重命名为将被忽略的名称来执行文件cron 的 Debian 特定忽略列表(并且没有找到后置):
例如,任何包含点的文件都将被忽略。这样做是为了防止 cron 在将 /etc/cron.d/ 中的文件作为配置文件处理时(即以 .dpkg-dist、.dpkg-orig、 .dpkg-旧和.dpkg-新)。
因此,除了上述内容之外,还可以:
dpkg-divert --local --rename --divert /etc/cron.daily/geogebra.disabled --add /etc/cron.daily/geogebra
应防止在首次安装包之前或之后执行/etc/cron.daily/geogebra
包并尝试管理其自己的存储库。
添加的密钥apt-key
似乎不会在初始设置后自动重新添加。如果仍然存在,可以通过以下方式检查:
# apt-key list [email protected]
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
pub rsa2048 2013-03-22 [SC]
9827 2894 F647 8AA4 434B 41D3 C072 A329 83A7 36CF
uid [ unknown] International GeoGebra Institute <[email protected]>
可以这样删除:
# apt-key del [email protected]
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK