正如我们在这里指出的,我们可以通过执行堆积的命令来快速更新 Ubuntu 系统
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
我的问题是,如何输入参数,使其通过yes
在此执行过程中回答所有要求的确认而更加自动化?
答案1
在没有监督的情况下运行软件升级总是存在一些安全风险,但也有好处。
内容
- 使用“无人值守升级”包
- 使用 cron 和 aptitude
- 使用 cron-apt 处理自动更新
使用“无人值守升级”包
如果尚未安装,请安装无人值守升级包
sudo apt-get install unattended-upgrades
要启用它,请执行以下操作:
sudo dpkg-reconfigure -plow unattended-upgrades
(这是一个交互式对话框)它将创建/etc/apt/apt.conf.d/20auto-upgrades
以下内容:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
关于这些值的含义的详细信息可以在文件头部找到/etc/cron.daily/apt
。
笔记:
当 apt 作业启动时,它将在 0 到 APT::Periodic::RandomSleep 秒之间的随机时间段内休眠。默认值为“1800”,因此脚本将暂停最多 30 分钟(1800 秒),这样镜像服务器就不会因为所有人同时运行更新而崩溃。仅当您使用本地镜像并且不介意负载峰值时才将其设置为 0。请注意,当 apt 作业处于休眠状态时,它将导致其余 cron.daily 作业的执行延迟。
如果您希望脚本生成更详细的输出设置
APT::Periodic::Verbose "1";
如果您希望脚本在需要时自动重启,您不仅需要将 Unattended-Upgrade::Automatic-Reboot 设置为“true”,还需要安装“update-notifier-common”包。在最小安装中,默认情况下不会安装该包,如果没有它,自动更新程序将永远不会重启,甚至不会告诉您需要手动重启(如果您配置了电子邮件通知)!
和/etc/apt/apt.conf.d/50unattended-upgrades
:
// Automatically upgrade packages from these (origin, archive) pairs
Unattended-Upgrade::Allowed-Origins {
// ${distro_id} and ${distro_codename} will be automatically expanded
"${distro_id} stable";
"${distro_id} ${distro_codename}-security";
"${distro_id} ${distro_codename}-updates";
// "${distro_id} ${distro_codename}-proposed-updates";
};
// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
// "vim";
// "libc6";
// "libc6-dev";
// "libc6-i686";
};
// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. The package 'mailx'
// must be installed or anything that provides /usr/bin/mail.
//Unattended-Upgrade::Mail "root@localhost";
// Do automatic removal of new unused dependencies after the upgrade
// (equivalent to apt-get autoremove)
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";
使用 cron 和 aptitude
安装aptitude
:
sudo apt-get install aptitude
创建新文件:
sudo nano /etc/cron.weekly/apt-security-updates
将以下文本复制到这个新文件中,保存并退出:
echo "**************" >> /var/log/apt-security-updates
date >> /var/log/apt-security-updates
aptitude update >> /var/log/apt-security-updates
aptitude safe-upgrade -o Aptitude::Delete-Unused=false --assume-yes --target-release `lsb_release -cs`-security >> /var/log/apt-security-updates
echo "Security updates (if any) installed"
最近(自 Ubuntu 7.10 起),aptitude 操作“升级”已被弃用。现在有两种升级方式,一种是安全升级(保守升级,如果更新需要添加或删除依赖项,则不会更新),另一种是完整升级(即使添加或删除其他软件包会影响其他软件包,它也会始终升级,以前称为“dist-upgrade”)。操作现在是“安全升级”或“完整升级”。有关更多详细信息,请参阅 aptitude 手册页(man aptitude)。
完成后,您需要使文件可执行。因此,通过终端输入以下行:
sudo chmod +x /etc/cron.weekly/apt-security-updates
此脚本每周运行一次,安装安全存储库中的所有可用软件包。它还会在 /var/log/apt-security-updates 中生成日志,以备日后出现问题时检查。
此脚本会将信息输出到日志文件,因此为了防止此日志文件变得太大,我们需要确保它被轮换出去。为此,我们将使用 Ubuntu 附带的 logrotate 实用程序。按 Alt+F2 并输入以下命令:
sudo nano /etc/logrotate.d/apt-security-updates
将其粘贴到编辑器中,保存并退出:
/var/log/apt-security-updates {
rotate 2
weekly
size 250k
compress
notifempty
}
这将每周轮换一次日志文件 (weekly),如果日志文件大小超过 250kB (size 250k),则压缩旧版本 (compress)。将保留前两个日志文件 (rotate 2),如果文件为空 (notifempty),则不会进行轮换。
使用 cron-apt 处理自动更新
cron-apt
是一个通过使用 cron 作业 apt-get 、 aptitude 或 apt-file 来自动更新软件包的程序。
安装aptitude
:
sudo apt-get install aptitude
安装cron-apt
:
sudo apt-get install cron-apt
/etc/cron-apt/config
可以通过编辑和添加规则来完成配置/etc/cron-apt/action.d/
。您可以在中设置的变量
/etc/cron-apt/config
记录在配置示例中/usr/share/doc/cron-apt/examples/config
创建了两个文件:
/etc/cron-apt/action.d/0-update
/etc/cron-apt/action.d/3-download
3-download
在终端中打开:
sudo nano /etc/cron-apt/action.d/3-download
内容
dist-upgrade -d -y -o APT::Get::Show-Upgraded=true
表示dist-upgrade
执行了a,但只下载了包,并没有安装。
如果您想用大锤安装所有内容,请删除“-d”参数。
答案2
你可以做
sudo apt-get -y upgrade
这将假定大多数事情都是肯定的。在某些情况下,如果“是”可能不合适,则命令将中止。
更冒险的选择是
sudo apt-get --force-yes
不建议这样做,因为它可能会对某些会破坏系统的事情说“是”。有关这些选项的更多详细信息,您可以运行命令
man apt-get