新闻

LXC 6.0.2 LTS 已发布

2024年9月17日

简介

LXC 团队很高兴地宣布 LXC 6.0.2 发布!

这是 LXC 6.0 的第二个错误修复版本,支持期限至 2029 年 6 月。

更改

像往常一样,此错误修复版本侧重于稳定性和强化。

此版本的亮点包括

  • 降低了一些常见消息的日志级别
  • 修复 aarch64 上的编译错误

完整的提交列表如下所示

详细变更日志
  • 删除未使用的函数
  • idmap:将 newXidmap 工具的日志级别降低到 INFO
  • 无错误时退出 0
  • doc:修复 get_config_path 和 set_config_path 的定义
  • README:更新安全联系人
  • 修复 AARCH 中可能的 clang 编译错误

支持和升级

LXC 6.0 分支支持期限至 2029 年 6 月。
只有错误修复和安全问题才会包含在稳定的错误修复版本中,因此始终建议保持更新并运行最新的错误修复版本。

下载

LXC 6.0.1 LTS 已发布

2024年6月27日

简介

LXC 团队很高兴地宣布 LXC 6.0.1 发布!

这是 LXC 6.0 的第一个错误修复版本,支持期限至 2029 年 6 月。

更改

像往常一样,此错误修复版本侧重于稳定性和强化。

此版本的亮点包括

  • 修复了一些构建工具问题
  • 修复了在没有 IPv6 支持的系统上的启动故障
  • 更新了 AppArmor 规则以避免潜在的警告

完整的提交列表如下所示

详细变更日志
  • meson:修复 NixOS 上的构建
  • github:测试 lxc multicall 二进制构建
  • lxc/network:处理不存在的 sysctl/disable_ipv6
  • network:netdev_configure_server_veth:减少 disable_ipv6_fd/path 变量的作用域
  • 更新 lxc-attach.sgml.in
  • 更新 lxc-execute.sgml.in
  • 更新 lxc-{attach,execute}.sgml.in
  • 更新 lxc-execute.sgml.in
  • lxc-local:修复在初始化之前使用 LXC_PATH 的问题
  • lxc-local:修复 templates 文件的错误路径
  • lxc-local:删除在提取之前检查模板是否存在
  • apparmor:修复规则路径模式规范语法
  • apparmor:重新生成规则
  • apparmor:使用 /{,} 代替 /
  • apparmor:重新生成规则
  • github:开始使用 ubuntu-24.04
  • github:正确检查 apparmor 配置文件更改
  • lxc/storage/zfs:忽略误报的 use-after-free 警告
  • github:排除 clang & ubuntu-24.04 组合
  • meson:修复在 NixOS 上使用 -Dtools-multicall=true 构建

支持和升级

LXC 6.0 分支支持期限至 2029 年 6 月。
只有错误修复和安全问题才会包含在稳定的错误修复版本中,因此始终建议保持更新并运行最新的错误修复版本。

下载

LXC 6.0 LTS 已发布

2024年4月3日

简介

LXC 团队很高兴地宣布 LXC 6.0 LTS 发布!

这是自 LXC 5.0 发布以来两年工作的成果,也是 LXC 项目的第六个 LTS 版本。此版本将支持到 2029 年 6 月。

亮点

新的多调用二进制文件

可以使用新的 tools-multicall=true 配置选项生成单个 lxc 二进制文件,然后可以将所有其他 lxc-XYZ 命令链接到该文件。

这可以大幅减少磁盘空间,对于嵌入式平台特别有用。

向库添加 set_timeout 函数

lxc_container 结构体上提供了一个新的 set_timeout 函数,允许为与 LXC 监视器的交互设置全局超时。

在此之前,没有超时,导致潜在的死锁,因为也没有办法取消监视器请求。

由于向库添加了此新符号,因此我们将 liblxc 符号版本升级到 1.8.0。

LXC 网桥现在启用了 IPV6

默认的 lxcbr0 网桥现在默认启用 IPv6,使用 IPv6 ULA 子网。

支持在 lxc-usernsexec 中选择 uid/gid

lxc-usernsexec 工具现在具有 -u-g 选项,以控制用户希望使用的结果 UID 和 GID(分别默认为 0/0)。

lxc-checkconfig 的改进

lxc-checkconfig 现在仅在 lxc-start 存在时才显示版本(而不是失败)。
此外,它还进行了一些其他美化改进,以及现在列出每种命名空间类型的允许最大命名空间数。

支持 squashfs OCI 镜像

内置的 oci 容器模板现在可以通过使用 atomfs 处理 squashfs 压缩的 OCI 镜像。

从 systemd 的 dbus 切换到 dbus-1

LXC 现在使用 libdbus-1 用于与 systemd 的 DBus 交互,而不是使用 libsystemd
进行此更改的原因是 libdbus-1 可用于静态构建。

删除 Upstart 支持

LXC 最终删除了对 Upstart 初始化系统的支持。

这在当前阶段实际上不应该影响任何人,并且允许从我们的存储库中清理一些逻辑和配置文件。

完整变更日志

变更日志
  • 读取列表,直到进程退出
  • lxccontainer:改进 mod_rdep()
  • lxccontainer:重做 copy_file()
  • meson:通过迭代数组生成编译命令
  • tools:提供 multicall lxc 二进制文件
  • meson:发布后设置 DEVEL 标志
  • 修复在未使用 libcap 时 parse_cap 中的未初始化读取
  • 使用 systemd dbus StartTransientUnit 用于非特权 cgroup2
  • 修复问题 4026:为 /31 和 /32 将广播设置为 0.0.0.0
  • conf:在 idmapped 挂载设置期间出错时记录文件描述符
  • start:在命名空间保留期间不要覆盖文件描述符
  • start:更早地记录继承的命名空间以使其可用于 idmapped 根文件系统设置
  • conf:修复 append_ttyname()

  • start:修复命名空间共享

  • 添加对 statvfs 的检查
  • 修复构建挂载选项时的越界错误
  • 将挂载选项存储在正确的变量中
  • meson:添加其余仍在使用的配置检查
  • src/lxc/log.h:修复 STRERROR_R_CHAR_P
  • meson.build:修复使用 -Dcapabilities=false 构建
  • meson.build:修复不带堆栈保护程序的构建
  • README:更新安全邮件
  • lxc-usernsexec:允许选择要切换到的 {g,u}id
  • gitignore:简化
  • build:检测 struct mount_attr 在哪里声明
  • build:检测 sys/pidfd.h 的可用性
  • build:检查 sys/mount.h 中的 FS_CONFIG_* 标头符号
  • meson.build:允许显式 distrosysconfdir
  • tree-wide:擦除直接或间接的 linux/mount.h 包含
  • tree-wide:直接使用 struct clone_args
  • tree-wide:直接使用 struct open_how
  • meson:修复 docbook2x 检测
  • tree-wide:最小化 liburing.h 的包含
  • mount:将挂载实用程序从 syscall_wrappers.h 移动到 mount_utils.h
  • mount_utils:删除 conf.h 包含
  • build:通过技巧防止包含 linux/mount.h
  • tree-wide:将打开帮助程序拆分为 open_utils.h
  • 使用 sd_bus_call_method_async 替换异步版本
  • 修复使用 -? 选项时工具的错误消息
  • 更新 cifuzz.yml
  • build(deps):将 actions/checkout 从 2 提升到 3
  • conf:允许跨设备链接
  • 更新 README.md
  • lxc-attach:修复被杀死后产生的进程的丢失返回代码
  • lxc/attach:检测 execvp 的 EACCES 并转换为 126 退出状态
  • build:将 libsystemd 添加到 oss fuzz 依赖项
  • tools:lxc-destroy:更新 --force 的帮助消息
  • tests:lxc-test-checkpoint-restore:使用 trap 进行清理
  • 展开 IN_SET,因为最大使用量是 2 个元素检查
  • cgroups:修复 -Waddress 警告
  • build:修复依赖项处理以修复 openSUSE 上的构建
  • build:仅在 libcap 可静态链接时构建 init.lxc.static
  • build:使用 cc.get_define 检测 FS_CONFIG_* 符号
  • build:删除构建时 systemd 依赖项
  • src/lxc/meson.build:修复静态库路径
  • tests:lxc-test-reboot:修复 ia64 上的构建
  • meson.build:从 git 输出中去除换行符
  • meson.build:为变量赋值去除换行符
  • README:删除 lgtm
  • cgroups:在删除 cgroup 时使用 userns_exec_full()
  • cgroups:仅在必须时分配用户命名空间
  • conf:为容器的根创建单独的对等组
  • apparmor:允许在 start-container.in 中共享挂载
  • conf:确保挂载隧道是依赖挂载
  • github:修复 coverity 构建
  • github:修复 coverity(添加 libpam-dev)
  • apparmor:正确检查 lxc_strmmap 返回值
  • network:始终初始化 struct nl_handler
  • cgroups:修复 enable_controllers_delegation 中的缓冲区越界访问
  • cgroups:在 unpriv_systemd_create_scope 中检查 snprintf 返回值
  • state:在 lxc_wait 中进行其他检查以防止越界
  • cgroups:修复 __initialize_cgroups 中的 cgroup 布局检测
  • src/lxc/meson.build:修复不带 apparmor 的构建
  • checkconfig:修复混合制表符/空格
  • checkconfig:如果不存在 lxc-start,则隐藏版本
  • checkconfig:调整布局
  • checkconfig:调整 cgroup 处理
  • checkconfig:修复文件系统功能检查
  • build:强制链接到 liblxc
  • 修补传入的 CVE(CVE-2022-47952)
  • lxc_user_nic:修复 get_mtu() 错误处理
  • lxc-default-cgns apparmor 配置文件:允许覆盖挂载
  • 修复使用 gold 链接器导致的 sparc64 上的构建错误
  • 删除损坏的 lxc-test-fuzzers
  • 修复错别字:bev_type -> bdev_type
  • 修复 strlcat 的返回值检查
  • lxc-net.in:修复 IPv6 NAT 的 nftables 语法
  • initutils:在 setproctitle 中使用 PRIu64 表示 uint64_t
  • apparmor:不要尝试映射空文件
  • 通过 atomfs 为 oci 添加对 squashfs 镜像的支持
  • 允许在 apparmor start-container 中使用 fuse 挂载。
  • 全项目:将 fcntl(FD_CLOEXEC) 转换为 SOCK_CLOEXEC
  • 从 libsystemd 的 dbus 切换到 dbus-1
  • 控制台日志测试:确保容器在重新启动前已停止
  • lsm:apparmor:允许更改挂载传播
  • 使 setproctitle() 的 /proc/pid/stat 解析安全
  • setproctitle():处理 strrchr() 可能返回 NULL 的情况
  • file_utils:将 fd_make_nonblocking 重命名为 fd_make_blocking
  • file_utils:添加 fd_make_nonblocking 辅助函数
  • 终端:使终端 FD 非阻塞
  • mainloop:io_uring:禁用 IORING_POLL_ADD_MULTI
  • lxccontainer:使用 set_timeout 扩展 lxccontainer API
  • 命令:在 LXC_CMD_GET_STATE 中支持超时
  • 重命名与 libsystemd 冲突的函数
  • src/tests:修复容器创建错误
  • 测试:修复 parse_config_file seccomp 测试
  • 显式地将 *mainloop_handler 转换为 __u64
  • github:添加 DCO/目标测试
  • 为 lxc 下载添加 libarchive tar 支持
  • get_hierarchy:不要对没有可用控制器的场景发出警告
  • CONTRIBUTING:添加关于 AI 生成代码的说明
  • github:更新为 main 分支
  • 修复启动 API 调用,以便在执行或初始化命令中分割带引号的字符串。
  • 将控制台权限更新为 0600
  • 删除对 LXD 的引用
  • lxccontainer.h:将新字段移到末尾
  • build(deps):将 actions/checkout 从 3 提升到 4
  • 处于 FREEZING 状态的容器也需要解冻
  • lxc/lxccontainer:修复 do_lxcapi_set_timeout 的返回值
  • lxc/checkconfig:将 `cat | grep` 替换为 `grep`
  • lxc/checkconfig:将 `type` 替换为 `command`
  • lxc/checkconfig:删除一些不必要的 `echo -n`
  • lxc/checkconfig:添加缺失的引号以满足 shellcheck
  • lxc/checkconfig:将 `! -z` 替换为 `-n` (SC2236)
  • lxc/checkconfig:直接检查退出代码 (SC2181)
  • lxc/checkconfig:删除测试命令周围的多余的 (..) (SC2234)
  • lxc/checkconfig:避免使用子 shell (SC2235)
  • lxc/checkconfig:轻微的代码美化更改
  • lxc/checkconfig:将 `echo -n` 替换为 printf
  • lxc/checkconfig:使用多行 `echo`
  • 清除 idmaps 时重置 root_nsuid_map 和 root_nsgid_map
  • meson:删除对 upstart 的支持
  • hooks/ubuntu-cloud-prep:删除 upstart 处理
  • 文档:删除提及 upstart 的警告
  • config/init:删除 upstart 文件
  • 配置:修复短暂副本
  • 不要尝试从 veth 中删除 vlan 0
  • 禁用桥接 veth 的 IPv6 链接本地地址
  • lxc-local:将 LXC_CONFIG 更改为 LXC_METADATA 以匹配参数并更清晰
  • lxc-local:改进用法信息
  • lxc-local:重新组织代码以使用更多函数
  • lxc-local:添加 --no-dev 选项以从文件系统树中排除 /dev
  • 配置:如果工作目录不存在,则尝试创建它
  • build(deps):将 actions/upload-artifact 从 3 提升到 4
  • 添加 loongarch64 支持
  • 构建:添加更多自定义安装选项
  • 对齐 lxc-download.in 模板中的列
  • 在下载模板中添加详细输出。
  • 修复错误消息。
  • 全项目:使用 container_uses_namespace() 辅助函数
  • 全项目:在不太简单的情况下使用 container_uses_namespace()
  • lxc-download、lxc-local:在解包时保留扩展属性
  • 将 x32 添加到已识别架构列表中
  • test-usernic:不要使用 ifconfig
  • lxc-test-usernic:删除 cgroup 处理
  • oci:解决跨文件系统 Blob 缓存失败问题
  • 测试:lxc-test-usernic:使用 iproute 工具代替 brctl
  • 配置:apparmor:为 lxc-copy 添加 AppArmor 配置文件
  • 测试:从测试中删除旧的和损坏的 cgroup 处理代码
  • confile:将 lxc_fill_elevated_privileges() 移至 tools/lxc_attach
  • meson:引入 IN_LIBLXC 预处理器宏
  • confile:取消隐藏 lxc_config_define*() 辅助函数
  • 配置:将代码重组/拆分到 idmap_utils.c
  • 配置:将代码重组/拆分到 utils.c
  • confile:取消隐藏 lxc_config_parse_arch() 辅助函数
  • storage_utils:取消隐藏并重命名 is_valid_storage_type 为 lxc_is_valid_storage_type
  • storage_utils:将 get_fssize 移至 utils
  • 网络:使用 IN_LIBLXC
  • meson:如果可能,在所有地方动态链接 liblxc
  • github:master -> main
  • tests/meson:尝试修复 ossfuzz 构建
  • lxc-net:默认启用 IPv6
  • lxc-unshare:修复 lxc_unshare 中的缓冲区溢出问题
  • unshare:简化 lookup_name
  • README:将“armvl7”更正为“armv7l”
  • rexec:避免在 rexec 失败路径中出现无效的释放
  • src/lxc/syscall_numbers.h:删除定义 -1
  • 回退“lxccontainer:修复”
  • lxccontainer:改进 mod_rdep()
  • lxccontainer:重做 copy_file()
  • 全项目:将 multiply_overflow 替换为 check_mul_overflow
  • tests/parse_config_file:为 lxc.time.offset.* 添加测试
  • tests/parse_config_file:修复一些拼写错误
  • lxc/confile:不要在 lxc.time.offset.* 的 getter 中打印换行符
  • lxc/confile:不要在 time.offset.boot 的缩放后缀前打印多余的空格
  • lxc/lxccontainer:在 mod_rdep 内部的 open() 调用中指定文件模式
  • tools/lxc_autostart:当没有容器时不要失败
  • lxc/tools:将默认 log_priority 设置为 ERROR
  • lxc-ls:在 `--active` 中列出包含空格的名称。
  • lxc-checkconfig:显示命名空间限制
  • lxc-checkconfig:修复 shellcheck
  • MAINTAINERS:从维护者列表中删除 Dwight
  • COPYING:删除空格
  • config/yum:使用 SPDX 标头
  • 模板:使用 SPDX
  • lxc.spec:使用 SPDX
  • lxc.spec:清除默认更改日志
  • 钩子:添加 SPDX 标头
  • src/tests:添加 SPDX 标头
  • src/include:添加 SPDX 标头
  • 文档:添加 SPDX 标头并删除作者字段
  • COPYING:阐明没有 SPDX 的文件的许可
  • meson:对齐 SPDX 许可证 ID
  • Makefile:对齐 SPDX 许可证 ID
  • lxc.spec:对齐 SPDX 许可证 ID

支持和升级

LXC 6.0 将支持到 2029 年 6 月,我们当前的 LTS 版本 LXC 5.0 现在将切换到较慢的维护速度,仅获得关键错误修复和安全更新。

我们强烈建议所有 LXC 用户计划升级到 6.0 分支。

未来版本节奏

为了使新的 LXC 功能更容易被用户使用,我们决定重新开始发布非 LTS 版本。计划的间隔为每 6 个月,LXC 6.1 计划于 10 月发布。

这些版本将无法从 LTS 保证的稳定性、支持和安全维护中受益,并且只支持到下一个版本发布。

生产用户可能希望保持在 LTS 版本上。

下载

注意:最初的发行版压缩包 (lxc-6.0.0.tar.gz) 在 meson.build 中有一个不正确的 LXC_DEVEL 行,与匹配的 Git 提交不符。lxc-6.0.0a.tar.gz 是发行版压缩包的重新发布版本,现在正确匹配 Git 标签。

贡献者

LXC 6.0 版本由总共 56 位贡献者为您带来。

LXC 5.0.3 LTS 已发布

2023 年 7 月 25 日

简介

LXC 团队很高兴地宣布 LXC 5.0.3 发布!

这是 LXC 5.0 的第三个错误修复版本,支持到 2027 年 6 月。

错误修复

像往常一样,此错误修复版本侧重于稳定性和强化。

此版本的亮点包括

  • 修复 IPv6 NAT 的 nftables 语法
  • 添加了对 squashfs OCI 镜像的支持
  • 修复使用 io_uring 运行 LXC 时的问题

完整的提交列表如下所示

详细变更日志
  • 删除损坏的 lxc-test-fuzzers
  • 修复错别字:bev_type -> bdev_type
  • 修复 strlcat 的返回值检查
  • lxc-net.in:修复 IPv6 NAT 的 nftables 语法
  • initutils:在 setproctitle 中使用 PRIu64 表示 uint64_t
  • apparmor:不要尝试映射空文件
  • 通过 atomfs 为 oci 添加对 squashfs 镜像的支持
  • 允许在 apparmor start-container 中使用 fuse 挂载。
  • 全项目:将 fcntl(FD_CLOEXEC) 转换为 SOCK_CLOEXEC
  • 控制台日志测试:确保容器在重新启动前已停止
  • 使 setproctitle() 的 /proc/pid/stat 解析安全
  • setproctitle():处理 strrchr() 可能返回 NULL 的情况
  • file_utils:将 fd_make_nonblocking 重命名为 fd_make_blocking
  • file_utils:添加 fd_make_nonblocking 辅助函数
  • 终端:使终端 FD 非阻塞
  • mainloop:io_uring:禁用 IORING_POLL_ADD_MULTI
  • 重命名与 libsystemd 冲突的函数
  • src/tests:修复容器创建错误
  • 测试:修复 parse_config_file seccomp 测试
  • 显式地将 *mainloop_handler 转换为 __u64
  • github:添加 DCO/目标测试
  • get_hierarchy:不要对没有可用控制器的场景发出警告
  • CONTRIBUTING:添加关于 AI 生成代码的说明
  • github:更新为 main 分支

支持和升级

LXC 5.0 分支支持到 2027 年 6 月。
只有错误修复和安全问题才会包含在稳定的错误修复版本中,因此始终建议保持更新并运行最新的错误修复版本。

下载

LXC/LXD/LXCFS 3.0 - 生命周期结束公告

2023 年 7 月 4 日

简介

3.0 LTS 分支已达到生命周期结束。

这影响以下项目

  • LXC 3.0(2018 年 3 月 27 日发布)
  • LXCFS 3.0(2018 年 3 月 26 日发布)
  • LXD 3.0(2018 年 4 月 2 日发布)

经过 5 年多的错误修复和安全维护,这些版本现已达到其支持生命周期的结束。

具体来说,这意味着我们将不会发布任何新版本,我们的稳定分支将被关闭,并且相关的 CI 将被禁用。

所有剩余用户应尽快升级到受支持的版本。

长期支持版本

上游承诺对其 LTS 分支提供 5 年的支持。
此类分支存在于 LXC、LXCFS 和 LXD 中,并会将错误修复和安全修复回传到这些分支中。

这些分支不会添加新功能,并且只有最新的 LTS 分支才会回传大多数错误修复,一旦发布新的 LTS 分支,之前的分支将只会获得安全和关键错误修复。

当前受支持的版本

目前有两个剩余的 LTS 版本,4.0 支持持续到 2025 年 6 月,5.0 支持持续到 2027 年 6 月。

此外,一些项目(目前是 LXD)可能会有更频繁的功能发布。这些没有长期支持,通常只支持到下一个版本发布。

旧闻