我在这里阅读了如何为Google Chrome启用无提示自动更新。但是,我还有其他存储库,例如spotify,docky和其他要启用静默更新的存储库。
我正在尝试在我的Ubuntu 10.04系统中执行此操作。但是这个问题适用于所有Ubuntu版本。我安装了无人值守升级软件包。
我怎样才能做到这一点?
我在这里阅读了如何为Google Chrome启用无提示自动更新。但是,我还有其他存储库,例如spotify,docky和其他要启用静默更新的存储库。
我正在尝试在我的Ubuntu 10.04系统中执行此操作。但是这个问题适用于所有Ubuntu版本。我安装了无人值守升级软件包。
我怎样才能做到这一点?
Answers:
首先,安装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.
),存档将位于Suite(Suite: stable
)行下。
如果其中一个Origin
或Suite
缺失,则它们将为空字符串。但是请注意,如果两者都丢失,那么可能无法在无人参与的升级中使用该源,而不会包含其他具有相同问题的源。
记下这两行之后,您需要编辑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
脚本头中。阅读它们以配置无人值守升级的频率。
--dry-run
它将检查更新的列表上是否有可用的更新并将其输出给您,这些列表通过您的配置进行了/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
"Raspberry:stable";
无效。相反,我使用了例如"o=Raspberry, a=stable";
编辑/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
。有什么线索吗?
在以下链接中,有强制重新运行以使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提供了有关重新创建该文件的详细信息