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

nik*_*k90 49 updates automation

在这里阅读如何为 Google Chrome 启用静默自动更新。但是,我还有其他存储库,如 Spotify、Docky 和其他我想启用静默更新的存储库。

我正在尝试在我的 Ubuntu 10.04 系统中执行此操作。但是这个问题适用于所有 Ubuntu 版本。我安装了无人值守升级包

我怎样才能做到这一点?

Bru*_*ira 75

首先,安装gksu

sudo apt-get install gksu
Run Code Online (Sandbox Code Playgroud)

使您的系统无人值守更新的最简单的方法是编辑文件50unattended-upgrades里面/etc/apt/apt.conf.d/有你喜欢的文本编辑器,例如:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades
Run Code Online (Sandbox Code Playgroud)

在其中您需要注释掉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";
};
Run Code Online (Sandbox Code Playgroud)

到:

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};
Run Code Online (Sandbox Code Playgroud)

对于您想要更新的不在 Ubuntu 存储库上的软件,您需要向文件添加存档。要查找 PPA 的内容,请打开文件夹/var/lib/apt/lists/,这是每个包资源状态信息的存储区域。您要查找的是名称中以Release结尾的文件。

用你的文本编辑器打开一个,例如谷歌浏览器:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release
Run Code Online (Sandbox Code Playgroud)

在里面你会看到如下内容:

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.
Run Code Online (Sandbox Code Playgroud)

来源很明显 ( Origin: Google, Inc.) 并且存档将是线Suite( Suite: stable)下的任何内容。

如果OriginSuite缺失,则它们将是空字符串。但请注意,如果两者都缺失,则可能无法在无人值守升级的情况下使用该源,而不包括具有相同问题的其他源。

记下这两行后,您需要编辑50unattended-upgrades文件并使用此格式添加行"<origin>:<archive>";,以便为本示例使用"Google\, Inc.:stable";

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

再举一个例子,Node JS 源指定了一个来源 ( 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
Run Code Online (Sandbox Code Playgroud)

要测试对文件所做的更改,您可以使用sudo unattended-upgrades参数--dry-run--debug

  • --dry-run 将运行无人值守的升级周期,除非它不会真正安装升级,只检查并验证一切正常。

  • --debug 将启用详细模式。

您可以随时查询日志unattended-upgrades/var/log/unattended-upgrades/unattended-upgrades.log


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

  • 谢谢...很详细!请问你为什么在谷歌后面放一个\? (3认同)
  • 另请在此处检查自动化方法:http://askubuntu.com/a/792621/417607 (2认同)

Abh*_*tia 14

@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
    
    Run Code Online (Sandbox Code Playgroud)
  • 现在编辑/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";
    };
    ....
    ....
    
    Run Code Online (Sandbox Code Playgroud)
  • 检查它们是否包括在内:

    $ 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
    
    Run Code Online (Sandbox Code Playgroud)


小智 9

编辑/etc/apt/apt.conf.d/50unattended-upgrades,添加以下内容:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};
Run Code Online (Sandbox Code Playgroud)

这将允许对所有软件包进行无人值守升级。