0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu LinuxのLXCコンテナゲストを22.04(jammy)→24.04(noble)にアップグレートしてみた件

Last updated at Posted at 2024-07-23

概要

  • LXCコンテナ上で動かしているUbuntu 22.04LTS (jammy) を 24.04LTS (noble) にアップグレードします。
  • 実際のアップグレードパスの提供は8/15日以降らしいのですが、デバッグオプション(-d)を使って、一足先にやっつけます。
  • ホストOSは、最初から Ubuntu 24.04LTSであることを仮定します。

方法

  • 説明のため、Ubuntu 22.04LTS コンテナの名称は jammy としておきます。

  • (1) まず、configファイルを編集します。

/var/lib/lxc/jammy/config
・・・
# Container specific configuration
lxc.apparmor.profile = generated
lxc.apparmor.allow_nesting = 1
lxc.rootfs.path = dir:/var/lib/lxc/jammy/rootfs
lxc.uts.name = jammy
・・・

「# Container specific configuration」のところに、
lxc.apparmor.profile = generated と
lxc.apparmor.allow_nesting = 1
を追記しておいてください。

  • (2) jammyのLXCコンテナを起動します。
# lxc-start -d -n jammy
  • (3) ssh もしくは lxc-attach -n jammy でLXCゲストに接続します。
  • (4) # apt update ; apt dist-upgrade したのち、
# do-release-upgrade -d

で、Ubuntu を一気に22.04 → 24.04 にアップグレードします。

  • (5) 成功。

自分の環境では、うまくいきました。

ダメパターン

  • 以前は、何度やってもコンテナが落ちてしまったり、アップグレードに失敗してました。

  • 途中で失敗するパターンとして、i386のmultilibが含まれていてアップグレード先がないので落ちる場合がありました。(あらかじめi386はお掃除しておきましょう。あとで入れられます)

  • また、do-release-upgrade で一気に22.04 → 24.04 することが出来ず、

  • /etc/update-manager/release-upgradesファイルを編集し、 一度 LTS から prompt=normal に戻して、22.04 → 23.10 → 24.04 を試みるもうまくいかず・・・

  • コンテナが落ちる原因は、configに2行足すことで解決しました。

  • Linuxのディレクトリ構成が usr merge していない場合は libcのdpkg-divertで失敗する可能性があります。( https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2072532

  • コンテナホストのLinuxは、元の/etc/の内容等をバックアップしておいたのち、新規に Ubuntu 24.04 LTSを導入して設定したほうが楽かもしれません。
    (というか物理マシンの22.04 → 24.04 はまだ成功していないので・・・)
    .

7/24追記

  • 物理マシンの22.04LTS → 24.04LTSへの do-release-upgrade -d は成功しました。
    .

ホストOSとコンテナゲストOSのVersionを合わせる必要性について:

  • コンテナゲスト側で ip6tables を使用する場合は、ホスト24.04LTSとゲスト22.04LTSの組み合わせでは動作しません。
  • 理由は、ご想像の通りで、カーネルが24.04のものなのに、ip6tablesのコマンドやカーネルモジュール(ライブラリ)が(ゲストの)22.04になって非互換になるためです。たまたまiptablesのほうは動作します。

そもそも LXC って、何?

  • え?そっから????

ここを見る
https://qiita.com/propella/items/18165c933bd485c2c0ae

  • Dockerとの違いを聞かれているけれど、DockerとLXCは(用途が)全然違うわ。

  • :

  • Dockerは、Linuxのアプリ(サーバーソフト。nginxとかredmineとかmysql)をLinux のホストOSからいちいち分離した環境で動かすインフラ

  • (なんでサーバーソフトをそれぞれ分離OS環境上で動かすのかというと・・・セキュリティ向上のためらしいけど、よくわからん)

  • LXC は、Dockerよりもずっと前から存在したもので、仮想化技術(バーチャルマシン)を使用せずに、ホストLinux上でゲストLinuxを動かすツール。

  • Linuxのユーザーランド(/(ルート) ファイルシステムと思ってよい)だけを分離するものとして、chroot というものが太古のLinux(unix)からあったんだけど、それに加えてプロセス名前空間を分離したりネットワーク環境を分離したりして、まるで軽量VMのように、ホストLinux上でゲストLinuxが丸ごと動いているように見える・・・(Dockerと一緒じゃん)

  • 自分的には、/var/lib/lxc/<ゲストLinux名称>/rootfs/ 以下にゲストのファイルシステムが全部見れたり、それ以外にmount出来たりするのが便利。

  • 逆にDockerの union fs が馴染めなかったりする。・・・人によるんかな

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?