如何安装 Incus

安装 Incus 最简单的方法是 安装其中一个可用的软件包,但您也可以 从源代码安装 Incus.

安装 Incus 后,请确保您的系统上有 incus-admin 组。 此组中的用户可以与 Incus 交互。 有关说明,请参见 管理对 Incus 的访问权限

选择您的版本

Incus 并行维护不同的发布分支

  • 长期支持 (LTS) 版本:6.0

  • 功能版本:Incus 0.x

LTS 版本推荐用于生产环境,因为它们受益于定期错误修复和安全更新。 但是,LTS 版本不会添加任何新功能,也不会进行任何行为更改。

要获得 Incus 的所有最新功能和每月更新,请改用功能发布分支。

从软件包安装 Incus

Incus 守护进程仅在 Linux 上工作。 客户端工具 (incus) 在大多数平台上可用。

Linux

许多 Linux 发行版都有软件包,这些软件包在它们的主存储库中或通过第三方存储库提供。

Incus 及其所有依赖项在 Alpine Linux 的边缘主存储库和社区存储库中以 incus 的形式提供。

/etc/apk/repositories 中取消注释边缘主存储库和社区存储库,然后运行

apk update

使用以下命令安装 Incus

apk add incus incus-client

如果运行虚拟机,还要执行以下操作

apk add incus-vm

然后启用并启动服务

rc-update add incusd
rc-service incusd start

请将打包问题报告 这里

其他操作系统

重要提示

其他操作系统的构建只包含客户端,不包含服务器。

Homebrew

Incus 通过 Homebrew 为 macOS 发布 Incus 客户端构建。

要安装 Incus 的功能分支,请执行以下操作:

brew install incus

Colima

Incus 在 Colima 上作为运行时受支持。

使用以下命令安装 Colima:

brew install colima

使用 Incus 作为运行时启动 Colima:

colima start --runtime incus

对于任何与 Colima 相关的 issue,请在项目仓库中 提交 issue

您还可以在 GitHub 上找到 Incus 客户端的本地构建。

从源代码安装 Incus

如果您要从源代码构建和安装 Incus,请按照以下说明操作。

建议使用最新版本的 liblxc(需要 >= 5.0.0)用于 Incus 开发。此外,Incus 需要使用现代 Golang(请参阅 Go)版本才能正常工作。

您可以通过以下命令获取在 Alpine Linux 上构建 Incus 所需的开发资源:

apk add acl-dev autoconf automake eudev-dev gettext-dev go intltool libcap-dev libtool libuv-dev linux-headers lz4-dev tcl-dev sqlite-dev lxc-dev make xz

要利用 Incus 的所有必要功能,您必须安装其他软件包。您可以参考 Alpine Linux 仓库中 LXD 软件包定义 中的软件包列表,了解使用特定功能所需的软件包。您还可以从 Alpine Linux 软件包内容过滤器 中通过二进制名称找到所需的软件包。

安装主要依赖项:

apk add acl attr ca-certificates cgmanager dbus dnsmasq lxc libintl iproute2 iptables netcat-openbsd rsync squashfs-tools shadow-uidmap tar xz

安装运行虚拟机所需的额外依赖项:

apk add qemu-system-x86_64 qemu-chardev-spice qemu-hw-usb-redirect qemu-hw-display-virtio-vga qemu-img qemu-ui-spice-core ovmf sgdisk util-linux-misc virtiofsd

在从发行版压缩包或 git 仓库准备源代码后,您需要按照以下步骤操作,以避免构建时出现已知问题。

注意:如果系统上不存在 /usr/local/include,可能会发生一些构建错误。此外,由于 gettext 问题,您可能需要设置这些额外的环境变量:

export CGO_LDFLAGS="$CGO_LDFLAGS -L/usr/lib -lintl"
export CGO_CPPFLAGS="-I/usr/include"

注意

在 ARM64 CPU 上,您需要安装 AAVMF 而不是 OVMF,才能使 UEFI 与虚拟机一起使用。在某些发行版中,这是通过单独的软件包完成的。

从源代码构建最新版本

这些从源代码构建的说明适用于想要构建最新版本的 Incus 或构建其 Linux 发行版可能没有提供的特定版本的 Incus 的个人开发人员。此处未涵盖用于集成到 Linux 发行版的源代码构建,这些构建可能在未来的单独文档中详细介绍。

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

这将下载 Incus 的当前开发树并把你放到源代码树中。然后继续以下说明实际构建和安装 Incus。

从源代码构建发布版本

Incus 发布版 tar 包捆绑了一个完整的依赖树,以及 Incus 数据库设置的 libraftlibcowsql 的本地副本。

tar zxvf incus-6.0.0.tar.gz
cd incus-6.0.0

这将解压发布版 tar 包并将你放到源代码树中。然后继续以下说明实际构建和安装 Incus。

开始构建

实际构建由 Makefile 的两次独立调用完成: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 所引用的目录添加到你的 shell 路径,并将 make deps 打印的 LD_LIBRARY_PATH 变量设置为你的环境。对于 ~/.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 中构建的依赖项。

机器设置

你需要为 root 设置 sub{u,g}id,以便 Incus 可以创建无特权容器。

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

现在你可以运行守护进程(--group sudo 位允许 sudo 组中的每个人与 Incus 通信;如果你愿意,你可以创建自己的组)。

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

注意

如果你的系统上存在 newuidmap/newgidmap 工具,并且 /etc/subuidetc/subgid 存在,则必须对其进行配置以允许 root 用户拥有至少 10M UID/GID 的连续范围。

管理对 Incus 的访问

Incus 的访问控制基于组成员身份。root 用户和 incus-admin 组的所有成员都可以与本地守护进程交互。有关更多信息,请参阅 访问 Incus 守护进程

如果你的系统上缺少 incus-admin 组,请创建它并重新启动 Incus 守护进程。然后,你可以将受信任的用户添加到该组。添加到该组的任何人将对 Incus 拥有完全控制权。

由于组成员身份通常仅在登录时应用,因此你可能需要重新打开用户会话或在与 Incus 通信的 shell 中使用 newgrp incus-admin 命令。

重要提示

通过 Unix 套接字对 Incus 的本地访问始终授予对 Incus 的完全访问权限。这包括将文件系统路径或设备附加到任何实例以及调整任何实例上的安全功能的能力。

因此,你应该只向你信任拥有系统 root 访问权限的用户授予此类访问权限。

升级 Incus

将 Incus 升级到更新版本后,Incus 可能需要将数据库更新到新模式。此更新将在 Incus 升级后守护进程启动时自动发生。数据库在更新之前的备份存储在与活动数据库相同的目录中(位于 /var/lib/incus/database)。

重要提示

模式更新后,较旧版本的 Incus 可能将数据库视为无效。这意味着降级 Incus 可能会使你的 Incus 安装无法使用。

在这种情况下,如果你需要降级,请在开始降级之前还原数据库备份。