如何为任何存储库启用静默自动更新?

我在这里阅读了如何为Google Chrome启用静音自动更新。 但是,我有其他存储库,如spotify,docky和其他我想要启用静默更新的存储库。

我试图在我的Ubuntu 10.04系统中这样做。 但是这个问题适用于所有Ubuntu版本。 我安装了无人值守升级包

我怎样才能做到这一点?

首先,安装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结尾的文件。

使用文本编辑器打开一个,即用于Google Chrome:

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: stable )下的任何产品。

如果缺少OriginSuite ,那么它们将是空字符串。 但请注意,如果两者都丢失,那么可能无法使用无人值守升级的源,而不包含具有相同问题的其他源。

在您注意到这两行之后,您需要编辑50unattended-upgrades文件并使用以下格式添加行":"; 为了这个例子, "Google\, Inc.:stable";

谷歌Chrome的起源有点棘手,因为它有一个空间,一个端点和一个逗号,但大多数Release文件都很容易阅读。

另一个例子, Node JS源指定一个源( Node Source )但不指定存档; 所以你可以将它与"Node Source:";匹配"Node Source:";

Allowed Origins使用shell样式的通配符(更具体地说,使用Python的fnmatch() )进行匹配。 如果你足够小心,不要包含冲突的来源,那么可以编写类似"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将运行无人值守的升级周期,除非它不会真正安装升级,只检查并validation一切正常。

--debug将启用详细模式。

您始终可以在/var/log/unattended-upgrades/unattended-upgrades.log查看日志以进行unattended-upgrades


您可以通过编辑文件/etc/apt/apt.conf.d/10periodic来更改无人参与升级的配置,配置选项位于/etc/cron.daily/apt脚本标题中。 阅读它们以配置无人值守升级的频率。

@Bruno Pereira回答的自动化方法:( 如果您觉得答案有用,请考虑主演github repo。)

代码链接: 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在以下链接启动自动更新的说明。 停止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的,特别是/etc/cron.daily/apt 。 Cron在上午6点25分运行/etc/cron.daily (参见/etc/crontab

  • Anacron从新贵开始? 并且它会在正常运行5分钟后启动/etc/cron.daily (请参阅/etc/anacrontab

    注意APT::Periodic::RandomSleep可以在/etc/apt/apt.conf.d/10periodic设置,但默认为APT::Periodic::RandomSleep (30分钟),因此在/etc/cron.daily/apt之后30分钟内不会发生更新运行。

日志

如果它工作,应该记录在这个文件夹, /var/log/unattended-upgrades