Incusをインストールするには

Incus をインストールする最も簡単な方法は利用可能なパッケージの1つをインストールですが、ソースからIncusをインストールも可能です。

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

リリースを選択する

Incus は同時に複数のリリースブランチをメンテナンスしています。

  • 長期サポート(LTS)リリース:6.0

  • 機能リリース:Incus 0.x

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

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

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

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

Linux

いくつかの Linux ディストリビューションでは、メインレポジトリまたはサードパーティレポジトリでパッケージが利用できます。

Incus と全ての依存ソフトウェアは Arch Linux のメインレポジトリ内で incus として利用できます。

Incus を以下のコマンドでインストールします:

pacman -S incus

パッケージに問題があればこちらに報告してください。

他のOS

重要

他のOS用のビルドはクライアントのみを含み、サーバは含みません。

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

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

brew install incus

GitHubにも Incus クライアントのネイティブビルドがあります:

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

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

Incus の開発にはliblxcの最新バージョン(5.0.0 以上が必要)を使用することをお勧めします。 さらに Incus が動作するためには最近の Go 言語(Go参照)が動作することが必要です。

ビルドと実行時の依存ソフトウェアをインストールします:

sudo apt update
sudo apt install acl attr autoconf automake dnsmasq-base git golang-go 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ドライバーに加えて、Incus ではいくつかのストレージドライバーが使えます。 これらのツールをインストールすると、initramfs への追加が行われ、ホストのブートが少しだけ遅くなるかもしれませんが、特定のドライバーを使いたい場合には必要です。

sudo apt install btrfs-progs
sudo apt install ceph-common
sudo apt install lvm2 thin-provisioning-tools
sudo apt install zfsutils-linux

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

sudo apt install busybox-static curl gettext jq sqlite3 socat bind9-dnsutils

重要: liblxc-dev パッケージを使って go-lxc モジュールのビルド時にコンパイルエラーが出た場合、liblxc のビルド時に INC_DEVEL の値に 0 を指定したか確認してください。確認するためには、/usr/include/lxc/version.h を見てください。 もし INC_DEVEL の値が 1 なら、0 に置き換えると問題を回避できます。これは Ubuntu 22.04/22.10 のパッケージのバグです。Ubuntu 23.04/23.10 ではこの問題はありません。

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

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

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

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

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

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

tar zxvf incus-0.1.tar.gz
cd incus-0.1

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

ビルドを開始する

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

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

user@host:~$ make deps
...make[1]: Leaving directory '/root/go/deps/cowsql'# environment Please set the following in your environment (possibly ~/.bashrc)#  export CGO_CFLAGS="${CGO_CFLAGS} -I$(go env GOPATH)/deps/cowsql/include/ -I$(go env GOPATH)/deps/raft/include/"#  export CGO_LDFLAGS="${CGO_LDFLAGS} -L$(go env GOPATH)/deps/cowsql/.libs/ -L$(go env GOPATH)/deps/raft/.libs/"#  export LD_LIBRARY_PATH="$(go env GOPATH)/deps/cowsql/.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で表示された値に設定します。これは~/.bashrcファイルの場合は以下のようになります。

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

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

マシンセットアップ

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

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

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

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

注釈

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

Incusへのアクセスを管理する

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

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

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

重要

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

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

Incusをアップグレードする

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

重要

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

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