四谷ラボ公式ブログ

四谷ラボはいつでも誰でも自由に参加・研究・交流・発信のできる街のオープンイノベーションラボ

自宅サーバーにLXDを導入した

経緯

こんにちは、lkjsxcです。

冬の終わりを実感し始める今日この頃、私は大学のテスト勉強に追われていました。

そして、人は何かに追われているとき、身の回りを整理したくなるものです。

例に漏れず、私も部屋の掃除......もとい自宅サーバの整理を始めてしまいました。

現状、我が家はArchLinuxの入ったミニPC(Ryzen 7 7840HS / 64GB RAM / 2TB Storage)をサーバーとして運用しています。

自宅サーバー。パワフルでありつつ、小さくてかわいい

ここで問題となるのは、このマシンを友人たちにも共有しており、その管理が少々杜撰になっていたということです。

各々のプライバシーや私の技術力との兼ね合いもあり、ルートレスなDockerによって棲み分けがなされていました。

しかしながら、筆者自身がコンソール画面での操作に慣れていなかったため、管理に苦労していました。

特に通信周りがひどく、マインクラフトのサーバーのために大量のポート番号が割り当てられたりなど、非常に厳しい状態にありました。

いつか整理すると友人たちへ宣言し、早1ヶ月。

この機を逃すわけには行くまいとChatGPTに相談したところ、LXDを紹介されました。

リソース管理に優れているLXDコンテナの上でDockerを導入すれば、今まで通りの使用感で開発できるとのこと。なるほど。

早速そのことを友人たちに相談し、116日間動き続けてくれたArchLinuxに感謝を告げ、私はマシンをシャットダウンしました。

導入の流れ

(ここは技術的な備忘録なので、興味のない方は読み飛ばしても問題ありません。)

ホストOS

私はターミナル操作がとても苦手なので、可能な限りWebブラウザから操作するような手順で進めます。

OSのインストール時、LXDのプリインストールにチェックを付けます。他の項目はよしなに。

インストールを終えたら忘れぬうちに、SSHの鍵を交換したり、パスワードによるログインを無効化したりなどします。

さて、ChatGPTの話によるとlxd initと実行するだけで、Webブラウザから管理できる何かが立ち上がるとのこと。

何か対話が始まりますが、全てEnterでスキップしていいとのことなのでEnter連打。

ストレージに関して、zfsはdockerのパフォーマンスを著しく低下させるという話がありますが、よほど古いカーネルを使っていなければ問題ないようです。

たったこれだけで、TCPの8443番にてLXD-UIが立ち上がりました。すごい。

プロファイル

インスタンス上でDockerを動かすために、プロファイルの設定を行います。

Webブラウザ経由では設定できない項目もあるようなので、ホストOSから設定します。

lxc profile set default security.nesting=true
lxc profile set default security.syscalls.intercept.mknod=true
lxc profile set default security.syscalls.intercept.setxattr=true

インスタンスを起動

インスタンスを立ち上げます。

今回、BaseImageはUbuntu 24.04を選択しました。

BaseImageには他にもデスクトップ版などありますが、間にエミュレータが挟まる(オーバーヘッドがとても大きい)vmなども並んでいるので、注意して選ぶ必要があります。

アドレスの固定

velocityなどのプロキシサーバーのために、インスタンスのアドレスを固定します。これもWebブラウザ経由では設定できないので、ホストOSから設定します。(lkjsxc_main, eth0, 10.161.59.3 は内容に応じて適宜書き換える必要があります)

lxc config device override lkjsxc_main eth0 ipv4.address=10.161.59.3

ポートフォワーディング

外からインスタンスへアクセスできるようにします。

設定画面からDevices、Proxyと進み、新しいプロキシデバイスを追加します。

注意すべき点として、ListenのAddressには外側のアドレス(基本的にはホストOSのアドレス)、ConnectのAddressには0.0.0.0が入ります。

Dockerのインストール

インスタンスのTerminalから、Dockerをインストールしていきます。

curl -fsSL https://get.docker.com | sh

この調子で、portainerやnginx、sambaやgiteaなどを導入し、環境を構築していきます(詳しく書くと長くなるので省略)

感想

LXDは本当に素晴らしいものでした。

ぱっと思いつくだけでも、導入が楽・ほとんどの用事がWebブラウザ経由で済む・インスタンス同士の通信が容易・リソースの管理が楽・オーバーヘッドが大きくない、などのメリットが挙げられます。

Webブラウザ経由で一部の設定にアクセスできないことを除けば、本当によくできたシステムだなあと感心します。

数人規模の開発環境において、LXDは最も好ましい選択肢の一つとなりそうです。