LXDをインストールするには#

LXDをインストールする最も簡単な方法は提供されているパッケージのどれかをインストールすることですが、ソースからLXDをインストールすることもできます。

LXDのインストール後、lxdグループがシステム内に存在することを確認してください。 このグループ内のユーザがLXDを操作できます。 手順はLXDへのアクセスを管理するを参照してください。

リリースを選択する#

LXDは異なるリリースブランチを並行して維持しています。

  • 長期サポート(LTS)リリース:現在は LXD 5.0.x と LXD 4.0.x

  • 機能リリース:LXD 5.x

本番環境にはLTSを推奨します。通常のバグフィクスとセキュリティアップデートの恩恵を受けられるからです。 しかし、長期リリースには新しい機能はやどんな種類の挙動の変更も追加されません。

LXDの最新の機能と毎月の更新を得るには、代わりに機能リリースを使ってください。

LXDをパッケージからインストールする#

LXDデーモンはLinuxでのみ稼働します。 クライアントツール(lxc)はほとんどのプラットフォームで利用できます。

Linux#

LXDをインストールする最も簡単な方法はSnapパッケージをインストールすることです。これはさまざまなLinuxディストリビューションで利用可能です。

この選択肢が使えない場合、他のインストール方法を参照してください。

Snapパッケージ#

LXDはいくつかのLinuxディストリビューション(例えば、Ubuntu、Arch Linux、Debian、Fedora、そしてOpenSUSE)で動作するsnapパッケージを公開しテストしています。

snapをインストールするには以下の手順を実行してください。

  1. 提供されているディストリビューション一覧を見て、お使いのLinuxディストリビューションで利用可能かを確認してください。 利用可能ではない場合、他のインストール方法のいずれかで対応してください。

  2. snapdをインストールします。 Snapcraftドキュメントインストール手順を参照してください。

  3. snapパッケージをインストールします。 最新の機能リリースをインストールするには以下のようにします。

     sudo snap install lxd
    

    LXD 5.0 LTS リリースの場合は以下のようにします。

     sudo snap install lxd --channel=5.0/stable
    

LXDのsnapパッケージについてより詳細な情報(上記以外のバージョン、更新の管理など)についてはManaging the LXD snapを参照してください。

注釈

Ubuntu 18.04では、もしLXDのdebパッケージを過去にインストールしていた場合、既存の全てのデータを以下のコマンドで移行できます。

    sudo lxd.migrate

他のインストール方法#

いくつかのLinuxディストリビューションではsnapパッケージ以外のインストール方法を提供しています。

Alpine Linuxで機能リリースのLXDをインストールするには、以下のようにします。

apk add lxd

他のオペレーティングシステム#

重要

他のオペレーティングシステム向けのビルドはクライアントのみを含み、サーバーは含みません。

LXDはmacOSのLXDクライアントのビルドをHomebrewで公開しています。

機能リリースのLXDをインストールするには、以下のようにします。

brew install lxc

GitHubにもLXDクライアントのネイティブビルドがあります。 特定のビルドをダウンロードするには以下のようにします。

  1. GitHubアカウントにログインします。

  2. 興味のあるブランチやタグ(例えば、最新のリリースタグあるいはmaster)でフィルタリングします。

  3. 最新のビルドを選択し、適切なアーティファクトをダウンロードします。

LXDをソースからインストールする#

LXDをソースコードからビルドとインストールしたい場合、以下の手順に従ってください。

LXDの開発にはliblxcの最新バージョン(4.0.0以上が必要)を使用することをおすすめします。 さらにLXDが動作するためには Golang 1.18 以上が必要です。 Ubuntu では次のようにインストールできます:

sudo apt update
sudo apt install acl attr autoconf automake dnsmasq-base git golang libacl1-dev libcap-dev liblxc1 liblxc-dev libsqlite3-dev libtool libudev-dev liblz4-dev libuv1-dev make pkg-config rsync squashfs-tools tar tcl xz-utils ebtables

デフォルトのストレージドライバであるdirドライバに加えて、LXDではいくつかのストレージドライバが使えます。 これらのツールをインストールすると、initramfsへの追加が行われ、ホストのブートが少しだけ遅くなるかもしれませんが、特定のドライバを使いたい場合には必要です:

sudo apt install lvm2 thin-provisioning-tools
sudo apt install btrfs-progs

テストスイートを実行するには、次のパッケージも必要です:

sudo apt install curl gettext jq sqlite3 socat bind9-dnsutils

ソースから最新版をビルドする#

この方法は LXD の最新版をビルドしたい開発者やLinuxディストリビューションで提供されないLXDの特定のリリースをビルドするためのものです。 Linuxディストリビューションへ統合するためのソースからのビルドはここでは説明しません。 それは将来、別のドキュメントで取り扱うかもしれません。

git clone https://github.com/lxc/lxd
cd lxd

これでLXDの現在の開発ツリーをダウンロードしてソースツリー内に移動します。 その後下記の手順にしたがって実際にLXDをビルド、インストールしてください。

ソースからリリース版をビルドする#

LXD のリリースtarballは完全な依存ツリーとlibraftとLXDのデータベースのセットアップに使用するlibdqliteのローカルコピーをバンドルしています。

tar zxvf lxd-4.18.tar.gz
cd lxd-4.18

これでリリースtarballを解凍し、ソースツリー内に移動します。 その後下記の手順にしたがって実際にLXDをビルド、インストールしてください。

ビルドを開始する#

実際のビルドはMakefileの2回の別々の実行により行われます。 1つはmake depsでこれはLXDに必要とされるライブラリーをビルドします。 もう1つはmakeでLXD自体をビルドします。 make depsの最後にmakeの実行に必要な環境変数を設定するための手順が表示されます。 新しいバージョンのLXDがリリースされたらこれらの環境変数の設定は変わるかもしれませんので、make depsの最後に表示された手順を使うようにしてください。 下記の手順(例示のために表示します)はあなたがビルドするLXDのバージョンのものとは一致しないかもしれません。

ビルドには最低2GBのRAMを搭載することを推奨します。

user@host:~$ make deps
...make[1]: Leaving directory '/root/go/deps/dqlite'# environment Please set the following in your environment (possibly ~/.bashrc)#  export CGO_CFLAGS="${CGO_CFLAGS} -I$(go env GOPATH)/deps/dqlite/include/ -I$(go env GOPATH)/deps/raft/include/"#  export CGO_LDFLAGS="${CGO_LDFLAGS} -L$(go env GOPATH)/deps/dqlite/.libs/ -L$(go env GOPATH)/deps/raft/.libs/"#  export LD_LIBRARY_PATH="$(go env GOPATH)/deps/dqlite/.libs/:$(go env GOPATH)/deps/raft/.libs/:${LD_LIBRARY_PATH}"#  export CGO_LDFLAGS_ALLOW="(-Wl,-wrap,pthread_create)|(-Wl,-z,now)"
user@host:~$ make

ソースからのビルド結果のインストール#

ビルドが完了したら、ソースツリーを維持したまま、あなたのお使いのシェルのパスに$(go env GOPATH)/binを追加し、LD_LIBRARY_PATH環境変数をmake depsで表示された値に設定すれば、 LXD が利用できます。 ~/.bashrcファイルの場合は以下のようになります。

export PATH="${PATH}:$(go env GOPATH)/bin"
export LD_LIBRARY_PATH="$(go env GOPATH)/deps/dqlite/.libs/:$(go env GOPATH)/deps/raft/.libs/:${LD_LIBRARY_PATH}"

これでlxdlxcコマンドの実行ファイルが利用可能になりLXDをセットアップするのに使用できます。 LD_LIBRARY_PATH環境変数のおかげで実行ファイルは$(go env GOPATH)/depsにビルドされた依存ライブラリーを自動的に見つけて使用します。

マシンセットアップ#

LXDが非特権コンテナを作成できるように、rootユーザーに対するsub{u,g}idの設定が必要です。

echo "root:1000000:1000000000" | sudo tee -a /etc/subuid /etc/subgid

これでデーモンを実行できます(sudoグループに属する全員がLXDとやりとりできるように --group sudo を指定します。別に指定したいグループを作ることもできます)。

sudo -E PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} $(go env GOPATH)/bin/lxd --group sudo

注釈

newuidmap/newgidmapツールがシステムに存在し、/etc/subuid/etc/subgidが存在する場合は、rootユーザーに少なくとも10MのUID/GIDの連続した範囲を許可するように設定する必要があります。

LXDへのアクセスを管理する#

LXDのアクセス制御はグループのメンバーシップに基づいています。 rootユーザとlxdグループの全てのメンバーはローカルデーモンとやりとりできます。 詳細はLXDデーモンへのアクセスを参照してください。

お使いのシステムにlxdグループが存在しない場合は、作成してLXDデーモンを再起動してください。 このグループに追加されたメンバーはLXDの完全な制御ができます。

グループのメンバーシップは通常ログイン時にのみ適用されますので、セッションを開き直すか、LXDとやりとりするシェル上でnewgrp lxdコマンドを実行する必要があります。

重要

UNIXソケットを介したLXDへのローカルアクセスは、常にLXDへのフルアクセスを許可します。 これは、任意のインスタンス上のセキュリティ機能を変更できる能力に加えて、任意のインスタンスにファイルシステムパスやデバイスをアタッチする能力を含みます。

したがって、あなたのシステムへのルートアクセスを信頼できるユーザーにのみ、このようなアクセスを与えるべきです。

LXDをアップグレードする#

LXDを新しいバージョンにアップグレードした後、LXDはデータベースを新しいスキーマにアップデートする必要があるかもしれません。 このアップデートはLXDのアップグレードの後のデーモン起動時に自動的に実行されます。 アップデート前のデータベースのバックアップはアクティブなデータベースと同じ場所(例えばsnap の場合は/var/snap/lxd/common/lxd/database)に保存されます。

重要

スキーマのアップデート後は、古いバージョンのLXDはデータベースを無効とみなすかもしれません。 これはつまりLXDをダウングレードしてもあなたのLXDの環境は利用不可能と言われるかもしれないということです。

このようなダウングレードが必要な場合は、ダウングレードを行う前にデータベースのバックアップをリストアしてください。