如何安装 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
请将打包问题报告 这里。
Incus 及其所有依赖项在 Arch Linux 的主存储库中以 incus
的形式提供。
使用以下命令安装 Incus
pacman -S incus
另请参见 Arch Linux 上的 Incus 文档页面,以了解有关安装、配置、使用和故障排除的更多详细信息。
请将打包问题报告 这里。
Incus 及其依赖项在 Chimera Linux 的 user
存储库中以 incus
的形式提供。 启用用户存储库
apk add chimera-repo-user
apk update
然后添加 incus
软件包; 这将安装其他依赖项,包括 incus-client
。 启用服务。
apk add incus
dinitctl enable incus
如果运行虚拟机,还要添加 EDK2 固件。 请注意,Chimera Linux 不提供对安全启动的完全支持,因此虚拟机必须在禁用此功能的情况下启动,如示例所示。
apk add qemu-edk2-firmware
dinitctl restart incus
# example, launch virtual machine with secureboot disabled:
# incus launch images:debian/12 --vm -c security.secureboot=false
请将打包问题报告 这里。
目前 Debian 用户有三种选择。
原生
incus
软件包目前在 Debian 测试版和不稳定版存储库中提供原生
incus
软件包。 此软件包将在即将发布的 Debian 13 (trixie
) 版本中提供。在这些系统上,只需运行
apt install incus
即可安装 Incus。 要运行虚拟机,还要运行apt install qemu-system
。 如果从 LXD 迁移,还要运行apt install incus-tools
以获得lxd-to-incus
命令。原生
incus
反向移植软件包目前为 Debian 12 (
bookworm
) 用户提供原生incus
反向移植软件包。在这些系统上,只需运行
apt install incus/bookworm-backports
即可安装 Incus。 要运行虚拟机,还要运行apt install qemu-system
。 如果从 LXD 迁移,还要运行apt install incus-tools
以获得lxd-to-incus
命令。注意: 反向移植软件包的用户不应在 Debian 错误跟踪器中提交错误,而应通过 我们的论坛 或直接联系 Debian 打包人员。
Zabbly 软件包仓库
Zabbly 为 Debian 稳定版 (11 和 12) 提供最新且受支持的 Incus 软件包。 这些软件包包含使用所有 Incus 功能所需的一切。
最新的安装说明可以在以下位置找到:
https://github.com/zabbly/incus
基于 Zabbly 包仓库的 Incus Docker/Podman 镜像已提供,请查看以下链接获取操作指南:ghcr.io/cmspam/incus-docker
Incus 及其依赖的 RPM 包尚未通过 Fedora 官方仓库提供,但可以通过 ganto/lxc4
社区项目 (COPR) 仓库获取。
安装 dnf
的 COPR 插件,然后启用 COPR 仓库。
dnf install 'dnf-command(copr)'
dnf copr enable ganto/lxc4
使用以下命令安装 Incus
dnf install incus
有关其他设置步骤,请查看 在 Fedora 上使用 Incus 入门。
请注意,这不是 Incus 或 Fedora 的官方项目。请将打包问题报告到 这里。
Incus 及其所有依赖项在 Gentoo 的主仓库中可用,名为 app-containers/incus
。
使用以下命令安装 Incus
emerge -av app-containers/incus
要运行虚拟机,请执行以下操作:
emerge -av app-emulation/qemu
注意:稍后会解释安装 LTS 版本与功能版本的区别,届时 Incus 上游和 Gentoo 的仓库中会提供这些版本。
将创建两个与 Incus 关联的新组:incus
用于允许基本用户访问(启动容器),以及 incus-admin
用于 incus admin
控制。根据您的设置和用例,将您的常规用户添加到任一组或两组。
安装完成后,您可能需要配置 Incus。但这并非必需,因为默认设置也应该可以正常工作。
openrc
:编辑/etc/conf.d/incus
systemd
:systemctl edit --full incus.service
设置 /etc/subuid
和 /etc/subgid
echo "root:1000000:1000000000" | tee -a /etc/subuid /etc/subgid
有关更多信息,请参阅 用户命名空间的 ID 映射。
启动守护进程。
openrc
:rc-service incus start
systemd
:systemctl start incus
继续在 Gentoo Wiki 上操作。
Incus 及其依赖项已打包在 NixOS 中,可以通过 NixOS 选项进行配置。有关可用选项的完整列表,请参阅 virtualisation.incus
。
可以通过在 NixOS 配置中添加以下内容来启用并启动服务。
virtualisation.incus.enable = true;
可以使用 incus admin init
手动完成 Incus 初始化,或者通过 NixOS 配置中的预配置选项进行初始化。有关预配置示例,请参阅 NixOS 文档。
virtualisation.incus.preseed = {};
最后,您可以将用户添加到 incus-admin
组,以提供对 Incus 套接字的非 root 访问权限。在您的 NixOS 配置中:
users.users.YOUR_USERNAME.extraGroups = ["incus-admin"];
对于任何与 NixOS 相关的 issue,请在包仓库中 提交 issue。
RPM 包及其依赖项尚未从 Enterprise Linux 额外软件包 (EPEL) 仓库提供,但可以通过 neil/incus
社区项目 (COPR) 仓库获取,适用于 Rocky Linux 9。
确保已安装 EPEL 仓库以获取软件包依赖项,然后安装 COPR 仓库。
dnf -y install epel-release
dnf copr enable neil/incus
确保已安装 CodeReady Builder
(CRB
),以获取其他软件包依赖项。
dnf config-manager --enable crb
然后安装 Incus,以及可选的 Incus 工具。
dnf install incus incus-tools
请注意,这不是 Incus 或 Rocky Linux 的官方项目。请将打包问题报告到 这里。
目前,Ubuntu 用户有两个选项可用。
原生
incus
软件包Ubuntu 24.04 LTS 及更高版本中目前提供一个本地
incus
软件包。在这些系统上,只需运行apt install incus
即可安装 Incus。要运行虚拟机,请执行apt install qemu-system
。如果要从 LXD 迁移,请执行apt install incus-tools
以获取lxd-to-incus
命令。Zabbly 软件包仓库
Zabbly 为 Ubuntu LTS 版本 (20.04 和 22.04) 提供最新的受支持 Incus 软件包。这些软件包包含使用所有 Incus 功能所需的一切。
最新的安装说明可以在以下位置找到:
https://github.com/zabbly/incus
Incus 及其所有依赖项在 Void Linux 的仓库中可用,名为 incus
。
使用以下命令安装 Incus
xbps-install incus incus-client
然后使用以下命令启用并启动服务:
ln -s /etc/sv/incus /var/service
ln -s /etc/sv/incus-user /var/service
sv up incus
sv up incus-user
请将打包问题报告到 这里。
其他操作系统¶
重要提示
其他操作系统的构建只包含客户端,不包含服务器。
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。
Windows 上的 Incus 客户端以 Chocolatey 和 Winget 软件包的形式提供。要使用 Chocolatey 或 Winget 安装,请按照以下说明操作。
Chocolatey
按照 安装说明 安装 Chocolatey。
安装 Incus 客户端。
choco install incus
Winget
按照 安装说明 安装 Winget。
安装 Incus 客户端。
winget install LinuxContainers.Incus
您还可以在 GitHub 上找到 Incus 客户端的本地构建。
适用于 Linux 的 Incus 客户端:
bin.linux.incus.aarch64
、bin.linux.incus.x86_64
适用于 Windows 的 Incus 客户端:
bin.windows.incus.aarch64.exe
、bin.windows.incus.x86_64.exe
适用于 macOS 的 Incus 客户端:
bin.macos.incus.aarch64
、bin.macos.incus.x86_64
从源代码安装 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"
使用以下命令安装构建和所需的运行时依赖项:
sudo apt update
sudo apt install acl attr autoconf automake dnsmasq-base git golang-go libacl1-dev libcap-dev liblxc1 lxc-dev libsqlite3-dev libtool libudev-dev liblz4-dev libuv1-dev make pkg-config rsync squashfs-tools tar tcl xz-utils ebtables
注意:您使用的 Debian 或 Ubuntu 版本中的 golang-go
版本可能不足以构建 Incus(请参阅 Go)。在这种情况下,您可能需要从上游 安装更新的 Go 版本。
除了默认的 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
构建的 LXC_DEVEL
值为 0
。要检查这一点,请查看 /usr/include/lxc/version.h
。如果 LXC_DEVEL
值为 1
,请将其替换为 0
以解决此问题。这是一个打包错误,我们知道 Ubuntu 22.04/22.10 存在此问题。Ubuntu 23.04/23.10 不存在此问题。
您可以通过以下命令获取在 OpenSUSE Tumbleweed 系统上构建 Incus 所需的开发资源:
sudo zypper install autoconf automake git go libacl-devel libcap-devel liblxc1 liblxc-devel sqlite3-devel libtool libudev-devel liblz4-devel libuv-devel make pkg-config tcl
此外,对于正常运行,您也可能需要:
sudo zypper install dnsmasq squashfs xz rsync tar attr acl qemu qemu-img qemu-spice qemu-hw-display-virtio-gpu-pci iptables ebtables nftables
要使用容器中的 NVIDIA GPU,您需要 NVIDIA 容器工具和 LXC 钩子:
sudo zypper install libnvidia-container-tools lxc
注意
在 ARM64 CPU 上,您需要安装 AAVMF 而不是 OVMF,才能使 UEFI 与虚拟机一起使用。在某些发行版中,这是通过单独的软件包完成的。
从源代码构建最新版本¶
这些从源代码构建的说明适用于想要构建最新版本的 Incus 或构建其 Linux 发行版可能没有提供的特定版本的 Incus 的个人开发人员。此处未涵盖用于集成到 Linux 发行版的源代码构建,这些构建可能在未来的单独文档中详细介绍。
git clone https://github.com/lxc/incus
cd incus
这将下载 Incus 的当前开发树并把你放到源代码树中。然后继续以下说明实际构建和安装 Incus。
从源代码构建发布版本¶
Incus 发布版 tar 包捆绑了一个完整的依赖树,以及 Incus 数据库设置的 libraft
和 libcowsql
的本地副本。
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}"
现在,incusd
和 incus
二进制文件对你可用,可用于设置 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/subuid
、etc/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 安装无法使用。
在这种情况下,如果你需要降级,请在开始降级之前还原数据库备份。