![如何为任何存储库启用静默自动更新?](https://linux22.com/image/1106984/%E5%A6%82%E4%BD%95%E4%B8%BA%E4%BB%BB%E4%BD%95%E5%AD%98%E5%82%A8%E5%BA%93%E5%90%AF%E7%94%A8%E9%9D%99%E9%BB%98%E8%87%AA%E5%8A%A8%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我读这里如何为 Google Chrome 启用静默自动更新。但是,我还有其他存储库,例如 spotify、docky 和其他存储库,我想为其启用静默更新。
我正在尝试在我的 Ubuntu 10.04 系统中执行此操作。但这个问题适用于所有 Ubuntu 版本。我有无人值守升级包已安装。
我怎样才能做到这一点?
答案1
首先,安装gksu
:
sudo apt-get install gksu
50unattended-upgrades
为您的系统启用无人值守更新的最简单方法是使用您最喜欢的文本编辑器编辑里面的文件/etc/apt/apt.conf.d/
,例如:
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 存储库中没有的软件,您需要添加起源和档案到文件。要查找 PPA 的这些内容,请打开文件夹/var/lib/apt/lists/
,这是每个包资源的状态信息的存储区域。您要查找的是以下文件:发布在名字里。
使用文本编辑器打开一个,例如对于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
(Suite: stable
)。
如果缺少Origin
或Suite
,则它们将为空字符串。但请注意,如果两个都缺失,那么如果不包含具有相同问题的其他源,可能无法使用该源进行无人值守升级。
记下这两行之后,您需要编辑该50unattended-upgrades
文件并使用这种格式添加这些行"<origin>:<archive>";
,以便作为本示例使用"Google\, Inc.:stable";
。
Google Chrome 的来源有点棘手,因为它里面有一个空格、一个结束点和一个逗号,但大多数发布文件将易于阅读。
再举一个例子,Node JS 源代码指定了来源(Node Source
),但没有指定档案;因此您可以用 进行匹配"Node Source:";
。
允许来源使用 shell 风格的通配符进行匹配(更具体地说,使用 Python 的匹配函数)。如果您足够小心,没有包含冲突的来源,那么可以编写类似 的内容"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
@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
答案3
编辑/etc/apt/apt.conf.d/50unattended-upgrades
,添加以下内容:
Unattended-Upgrade::Origins-Pattern {
"origin=*";
};
这将允许所有软件包进行无人值守升级。
答案4
以下是可能有用的参考...
我的系统正在运行 Ubuntu Jammy,并带有 PostgreSQL、Git、Datadog 和 GitLab 的自定义存储库。
以下是您输入的内容/etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
"${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
"${distro_id}:${distro_codename}-backports";
"apt.postgresql.org:${distro_codename}-pgdg";
"LP-PPA-git-core:${distro_codename}";
"packages.gitlab.com/gitlab/gitlab-*:${distro_codename}";
// ":"; // uncomment these two lines to wildcard for EVERYTHING, then the selections above and below become irrelevant
// "*:*"; // uncomment this as well to wildcard
};
Unattended-Upgrade::Origins-Pattern {
"site=apt.datadoghq.com"; // Datadog is special.
};
这同时使用了一个Unattended-Upgrade::Allowed-Origins
参数和一个Unattended-Upgrade::Origins-Pattern
参数。
原因是::Allowed-Origins
只选择原点:存档对。但 datadog 发布了一个空白原点和一个空白存档。因此,为了适应 datadog(不使用通配符),我还提供了一个参数::Origins-Pattern
,使用site
确实存在的元标记来选择 datadog。
然后,为了控制升级发生的时间,将其放入脚本中,或复制到 shell 提示符中(需要以 root 身份执行此操作):
#!/bin/bash
mkdir -p /etc/systemd/system/apt-daily-upgrade.timer.d
cat << EOF > /etc/systemd/system/apt-daily-upgrade.timer.d/override.conf
[Timer]
OnCalendar=
OnCalendar=Sat *-*-* 03:00:00
RandomizedDelaySec=0m
EOF
systemctl daemon-reload
systemctl enable --now apt-daily-upgrade.timer
现在将在周六凌晨 3 点执行实际升级,而不是每天。
这OnCalendar=
很重要,以便在添加新计划之前清除之前的计划。
有关 systemd 计时器的文档可以在这里找到:https://www.freedesktop.org/software/systemd/man/latest/systemd.time.html
随着升级事件变得更加确定,您可以将这些参数添加到/etc/apt/apt.conf.d/50unattended-upgrades
:
Unattended-Upgrade::Automatic-Reboot true
Unattended-Upgrade::Automatic-Reboot-Time now
希望这对某人有帮助!