如何为任何存储库启用无提示自动更新?


43

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

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

我怎样才能做到这一点?


您是否需要静默安全更新。或在没有干预的情况下安装了所有更新?为什么?
david6 2011年

1
几乎所有更新都包括用户存储库。
nik90 2011年

Answers:


66

首先,安装gksu

sudo apt-get install gksu

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

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

在其中,您需要注释掉“ 允许的起源”块的注释部分

更改

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仓库上的软件,您需要向文件添加存档。要查找您的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.),存档将位于SuiteSuite: stable)行下。

如果其中一个OriginSuite缺失,则它们将为空字符串。但是请注意,如果两者都丢失,那么可能无法在无人参与的升级中使用该源,而不会包含其他具有相同问题的源。

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

Google Chrome的来源有点棘手,因为它在端点和逗号之间有一个空格,但是大多数Release文件都易于阅读。

再举一个例子,Node JS源指定一个来源(Node Source),但未指定一个存档;因此您可以将其与匹配"Node Source:";

使用外壳样式通配符(更具体地说,使用Python的fnmatch())来匹配Allowed Origins。如果您足够小心,不要包含冲突的源代码,则可以编写类似的内容"Node *:*";


50unattended-upgrades在编辑文件之前,请不要忘记对其进行备份,请使用进行备份sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak

要测试对文件所做的更改,可以将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脚本头中。阅读它们以配置无人值守升级的频率。


2
谢谢...非常详细!请问您为什么在Google后加\?
nik90 2011年

由于起源中有特殊字符,因此它是逗号的转义字符。您发现的大多数血统都没有。
布鲁诺·佩雷拉

1
@jos不,这是它的工作方式,--dry-run它将检查更新的列表上是否有可用的更新并将其输出给您,这些列表通过您的配置进行了/etc/cron.daily/apt更新,手动运行不会更新我认为的列表。
布鲁诺·佩雷拉

1
当相应的Release文件未列出Suite时,我应该把什么作为存档名称?
hsivonen 2013年

2
另请在此处检查自动化方法:askubuntu.com/a/792621/417607
Abhishek Bhatia,

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
    
  • 现在编辑/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
    

@ andy.holmes欢迎您,如果可能的话,请考虑给github存储库加注星标。链路github.com/abhigenie92/unattended_upgrades_repos
阿布舍克·巴蒂亚

您可能还希望修改dpkg处理试图修改配置文件的软件包的方式:unix.stackexchange.com/questions/138751/…–
deoren

这个python脚本非常好,但是我必须修改README.md建议为Raspberry Pi运行拉伸进行50次无人值守的升级。指定允许的原点为例如"Raspberry:stable";无效。相反,我使用了例如"o=Raspberry, a=stable";
cfogelberg

5

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

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

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


是的,感谢您简洁明了的回答。但是有些软件包具有origin:'',例如来自的datadog-agent site:'apt.datadoghq.com'。在这种情况下,还需要添加"origin=";以免跳过源为空的软件包。但是最好只使用"site=*";而不是"origin=*";
保罗·托比亚斯

我已将自己的存储库添加到中的文件中/etc/apt/sources.list.d/my_repo.list,但不会升级该软件包。手动与搭配使用sudo apt update。有什么线索吗?
桑德

这是否使用与手动更新相同的来源,即是否忽略禁用的来源?
Silicomancer

3

在以下链接中,有强制重新运行以使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

这个怎么运作

有几件事会触发它运行。

  • /etc/cron.daily具体来说,它是由cron 的运行所触发的/etc/cron.daily/apt。Cron在/etc/cron.daily上午6.25 运行(请参阅/etc/crontab

  • Anacron是从新贵那里逃跑的?它将/etc/cron.daily在5分钟的正常运行时间后熄灭(请参阅/etc/anacrontab

    注意APT::Periodic::RandomSleep可以在中设置 /etc/apt/apt.conf.d/10periodic,但默认值为1800s(30分钟),因此直到/etc/cron.daily/apt运行30分钟后才可能进行更新。

日志记录

如果工作正常,则应该在此文件夹中登录/var/log/unattended-upgrades


这对我特别有用,因为我的虚拟主机提供商认为/etc/cron.daily/apt从默认的Ubuntu 12.04安装中删除是个好主意-因此不会进行自动APT更新:-(。ServerFault回答serverfault.com/a/568329/ 95570提供了有关重新创建该文件的详细信息
Alex Dupuy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.