问题描述
我阅读了here如何为Google Chrome启用静音自动更新。但是,我有其他存储库,如spotify,docky和其他我想要启用静默更新的存储库。
我试图在我的Ubuntu 10.04系统中这样做。但是这个问题适用于所有Ubuntu版本。我安装了unattended-upgrades软件包。
我怎样才能做到这一点?
最佳解决思路
首先,安装gksu
:
sudo apt-get install gksu
为系统启用无人值守更新最简单的方法是使用您喜欢的文本编辑器编辑/etc/apt/apt.conf.d/
中的文件50unattended-upgrades
,例如:
gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades
在其中,您需要注释掉Allowed Origins块的注释部分
更改
Unattended-Upgrade::Allowed-Origins {
"${distro_id} ${distro_codename}-security";
// "${distro_id} ${distro_codename}-updates";
// "${distro_id} ${distro_codename}-proposed";
// "${distro_id} ${distro_codename}-backports";
};
至
Unattended-Upgrade::Allowed-Origins {
"${distro_id} ${distro_codename}-security";
"${distro_id} ${distro_codename}-updates";
// "${distro_id} ${distro_codename}-proposed";
// "${distro_id} ${distro_codename}-backports";
};
对于您想要更新的Ubuntu repos上没有的软件,您需要在文件中添加原点和存档。要查找PPA的内容,请打开文件夹/var/lib/apt/lists/
,即每个包资源的状态信息的存储区域。您要查找的是名称中以Release结尾的文件。
使用文本编辑器打开一个,即谷歌浏览器:
gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release
Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.
原点很明显(Origin: Google, Inc.
),存档将是Suite Suite(Suite: stable
)下的任何内容。
如果缺少Origin
或Suite
,那么它们将是空字符串。但请注意,如果两者都丢失,那么可能无法使用无人值守升级的源,而不包含具有相同问题的其他源。
在您注意到这两行之后,您需要编辑50unattended-upgrades
文件,并使用此格式"<origin>:<archive>";
添加行,例如"Google\, Inc.:stable";
。
谷歌Chrome的起源有点棘手,因为它有一个空间端点和逗号,但大多数Release文件都很容易阅读。
另一个例子,Node JS source指定原点(Node Source
)但不指定存档;所以你可以将它与"Node Source:";
相匹配。
使用shell-style通配符(更具体地说,使用Python的fnmatch())匹配Allowed Origins。如果你足够小心,不要包含冲突的来源,就可以写出像"Node *:*";
这样的东西。
在编辑之前不要忘记备份50unattended-upgrades
文件,使用sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak
执行此操作。
要测试对文件所做的更改,可以使用带有参数--dry-run
和--debug
的sudo unattended-upgrades
。
--dry-run
将运行无人值守的升级周期,除非它不会真正安装升级,只检查并验证一切正常。
--debug
将启用详细模式。
您可以随时在/var/log/unattended-upgrades/unattended-upgrades.log
上查看unattended-upgrades
的日志。
您可以通过编辑文件/etc/apt/apt.conf.d/10periodic
来更改无人参与升级的配置,配置选项位于/etc/cron.daily/apt
脚本标题中。阅读它们以配置无人值守升级的频率。
次佳解决思路
@Bruno Pereira回答的自动化方法:(如果您觉得答案有用,请考虑主演github回购。)
代码链接:https://github.com/abhigenie92/unattended_upgrades_repos
-
检查要添加的存储库:
$ python automatic_upgrade.py Add repos: "Ubuntu:xenial"; "LP-PPA-kubuntu-ppa-backports:xenial"; "LP-PPA-tuxonice:xenial"; "LP-PPA-webupd8team-sublime-text-3:xenial"; Skipping files due to not present origin or suite. Or origin being a url.: packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
-
现在编辑
/etc/apt/apt.conf.d/50unattended-upgrades
以包含它们:// Automatically upgrade packages from these (origin:archive) pairs Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates"; "${distro_id}:${distro_codename}-proposed"; "${distro_id}:${distro_codename}-backports"; "Ubuntu:xenial"; "LP-PPA-kubuntu-ppa-backports:xenial"; "LP-PPA-tuxonice:xenial"; "LP-PPA-webupd8team-sublime-text-3:xenial"; }; .... ....
-
检查它们是否包括在内:
$ sudo unattended-upgrade --dry-run --debug Initial blacklisted packages: Initial whitelisted packages: Starting unattended upgrades script Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial'] pkgs that look like they should be upgraded: Fetched 0 B in 0s (0 B/s) fetch.run() result: 0 blacklist: [] whitelist: [] No packages found that can be upgraded unattended and no pending auto-removals
第三种解决思路
编辑/etc/apt/apt.conf.d/50unattended-upgrades
,添加以下内容:
Unattended-Upgrade::Origins-Pattern {
"origin=*";
};
这将允许所有包的无人值守升级。
第四种思路
有强制重新运行的说明使cron在以下link中启动自动更新。停止cron的程序就是这个
sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*
并重新启动cron以使自动更新现在(或至少在几分钟内)发生
sudo service cron start
sudo anacron -fn
这个怎么运作
有几件事会触发它运行。
-
它是由cron,特别是
/etc/cron.daily/apt
运行/etc/cron.daily
而发射的。 Cron于上午6时25分运行/etc/cron.daily
(见/etc/crontab
) -
Anacron从新贵开始?在运行5分钟后它将启动
/etc/cron.daily
(参见/etc/anacrontab
)注意APT::Periodic::RandomSleep
可以在/etc/apt/apt.conf.d/10periodic
中设置,但默认为1800s(30分钟),因此在/etc/cron.daily/apt
运行30分钟后不会发生更新。
日志
如果它工作,应该记录在这个文件夹,/var/log/unattended-upgrades
。