我刚刚做了do-release-upgrade -m server
一个
Linux boson 3.19.0-31-generic #36-Ubuntu SMP Wed Oct 7 15:04:02 UTC 2015 x86_64 Linux-3.19.0-31-generic-x86_64-with-Ubuntu-15.04-vivid
到
Linux boson 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 Linux-4.2.0-16-generic-x86_64-with-Ubuntu-15.10-wily
我曾想象 LXC 容器也会自动升级。然而,尽管uname -r
返回4.2.0-16-generic
确认内核在 Wily 上,但执行以下命令apt-get update
显示容器仍指向 Vivid 存储库。
do-release-upgrade
连接到容器时返回bash: do-release-upgrade: command not found
。
我该如何升级 LXC 容器?有可用的工具吗?
(我没有安装 X)
答案1
无法对@alfred 的回答发表评论,因此对于新的回答感到抱歉。
“必须连接到终端。”抱怨可以用命令解决:
exec >/dev/tty 2>/dev/tty </dev/tty
然后只需运行do-release-upgrade。
答案2
我也在谷歌上搜索了类似的问题,找到了你的问题。:) 在开始测试之前,我为容器创建了快照,以防我在尝试时破坏了某些东西。幸运的是,升级非常顺利。
我认为主机升级时容器不会自动升级。
我刚刚将我的 LXD 容器从 Wily 升级到 Xenial。下面是我正在做的事情。我认为 LXC 容器也会类似。
连接到容器控制台,您将成为 root 用户;并且由于您正在使用控制台,因此您不需要担心 ssh 服务:
$ lxc exec <container name> -- bash
首先升级你的软件包,特别是 apt:
# apt-get update
# apt-get dist-upgrade
# reboot (maybe not needed)
如果你没有“do-release-upgrade”:
# apt-get install ubuntu-release-upgrader-core
然后就可以开始升级了:
# do-release-upgrade -m server
如果“do-release-upgrade”提示“必须连接到终端”,我不知道为什么会发生这种情况,我认为这个容器基于 Ubuntu 云镜像。因此必须使用 ssh 连接和“sudo”。
答案3
如果我不想/不需要传递升级程序代码路径,我喜欢提到仅在 /etc/apt/sources.list 中替换发布名称的帖子。
但是如果我想/需要 do-release-upgrade 真正运行,我只需启用 ssh。可能有更简单的方法可以确保拥有合适的控制台,但它很容易并且有效。
要这样做
# go into the container
lxc exec <container> bash
# set PasswordAuthentication yes here
vim /etc/ssh/sshd_config
# restart containers ssh
service ssh restart
# set a pw of the default ubuntu user
passwd ubuntu
# exit container and get the container IP
lxc info <container>
# connect to it via ssh
ssh ubuntu@<ip>
# run do-release-upgrade as you want
do-release-upgrade
答案4
以下方法似乎对我有用:
$ sudo lxc-attach --name <container>
然后编辑/etc/apt/sources.list
并替换所有出现的vivid
到wily
。
接下来做:
# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
# apt-get autoclean
# apt-get autoremove
# reboot
重复此操作几次,直到所有包都更新完毕。