返回新闻概览

LXC 3.0.3 已发布

2018年11月23日

简介

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

作为稳定的 bug 修复版本,没有进行重大更改,而是专注于 bug 修复和次要可用性改进。

亮点

  • 改进默认构建标志以利用编译器加固
  • 添加了对较新内核上 netlink 严格属性检查的支持
  • 添加了对新的 netlink 接口/地址 netns API 的支持
  • 添加了在启动时处理内核密钥环的功能

Bug 修复 (LXC)

  • CONTRIBUTING:更新对内核编码风格的引用
  • CONTRIBUTING:链接到最新的在线内核文档
  • CONTRIBUTING:将读者引导到 CODING_STYLE.md
  • CODING_STYLE:在引言中提及内核风格
  • CONTRIBUTING:添加“be”以修复语法
  • CODING_STLYE:简化对“extern”用法的解释
  • CODING_STLYE:删除由“内核风格”暗示的部分
  • CODING_STYLE:修复不统一的标题级别
  • CODING_STYLE:更新章节标题格式
  • cmd:在复杂宏周围使用括号
  • cmd:使用“void”代替空参数列表
  • cmd:不要对单个语句块使用花括号
  • cmd:修复空格问题
  • cmd:对静态字符串常量使用“const”。
  • cmd:删除字符串中不必要的空格
  • cmd:将尾随“*/”放在单独一行上
  • cmd:删除错打的“;”
  • cmd:不要使用与 NULL 的比较
  • lxc_init:在 remove_self 中将 s/SYSDEBUG()/SYSERROR()/g
  • tools:lxc-attach:添加默认日志优先级和清理
  • tools:lxc-cgroup:添加默认日志优先级和清理
  • tools:lxc-checkpoint:添加默认日志优先级和清理
  • tools:lxc-console:添加默认日志优先级和清理
  • tools:lxc-create:添加默认日志优先级和清理
  • tools:lxc-destroy:添加默认日志优先级和清理
  • tools:lxc-device:添加默认日志优先级和清理
  • tools:lxc-execute:添加默认日志优先级和清理
  • tools:lxc-start:添加默认日志优先级和清理
  • tools:lxc-stop:添加默认日志优先级和清理
  • tools:lxc-freeze:添加默认日志优先级和清理
  • tools:lxc-unfreeze:添加默认日志优先级和清理
  • storage_utils:从 tools 移动重复函数
  • tools:修复 lxc-execute 命令解析
  • lseek - 整数溢出
  • cmd:lxc-user-nic:更改日志宏和清理
  • cmd:lxc-usernsexec 重新排序包含文件
  • cmd:将声明移动到 macro.h
  • cmd:在 lxc-usernsexec 中使用 utils.{c,h} 帮助程序
  • cmd:简化 lxc-usernsexec
  • cmd:在 lxc-usernsexec 中使用安全的数字解析器
  • macro:添加缺失的头文件
  • macro:添加 macvlan 属性
  • tools:指示容器启动失败
  • storage:exit() => _exit()。当 exec 失败时,子进程需要使用 _exit()
  • tools:lxc-wait:添加默认日志优先级和清理
  • conf:修复 tty 设置中的 path/lxcpath 混淆
  • cmd:在 lxc-usernsexec 中使用 goto 进行清理
  • cmd:不要在变量使用前重新赋值
  • cmd:减少“count”变量的作用域
  • cmd:修复 clang-format 发现的格式问题
  • list:修复缩进
  • utils:拆分为 {file,string}_utils.{c,h}
  • pam_cgfs:从与 liblxc 相同的源代码构建
  • conf:在完全无特权时修复 devpts 挂载
  • macro:s/rexit()/_exit()/g
  • attach:将结构声明移动到顶部
  • macro:从 attach.c 移动宏
  • Makefile:不允许未定义的符号
  • autotools:检查编译器是否足够新
  • log:处理 strerror_r() 版本
  • autotools:添加 --{disable,enable}-thread-safety
  • log:在 ENFORCE_THREAD_SAFETY 错误上构建失败
  • {file,string}_utils:删除 NO_LOG
  • initutils:删除无用的注释
  • string_utils:删除不必要的包含文件
  • string_utils:删除未使用的头文件
  • string_utils:添加 remove_trailing_slashes()
  • Makefile:删除最后一个 pam_cgfs 特殊情况
  • conf:添加缺失的头文件
  • 修复错别字
  • ifaddrs:添加 getifaddrs() 的安全实现
  • Makefile:有条件地包含 ifaddrs.h
  • execute:在无特权时跳过 lxc-init 日志记录
  • execute:传递 /proc/self/fd/
  • tests:清理 get_item.c
  • build:修复 musl
  • configure:重新排序头文件检查
  • compiler:添加 compiler.h 头文件
  • commands:在 lxc_cmd_get_init_pid() 错误时返回 -1
  • tests:添加 basic.c
  • tests:清理 Makefile
  • commands:确保在 init pid 的 EPIPE 上发送 -1
  • macro:添加 LXC_AUDS_ADDR_LEN
  • macro:从 commands.h 移动 LXC_CMD_DATA_MAX
  • macro:添加 PTR_TO_INT() 和 INT_TO_PTR()
  • macro:添加 INTTYPE_TO_STRLEN()
  • caps:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • cgfsng:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • confile:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • log:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • lsm:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • macro:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • lxccontainer:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • monitor:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • network:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • string_utils:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • utils:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • tools:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • conf:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • tests:s/LXC_NUMSTRLEN64/INTTYPE_TO_STRLEN()/
  • macro:最终的 INTTYPE_TO_STRLEN() 相关清理
  • macro:编码风格修复
  • Makefile:正确地将 ifaddrs 添加到 noinst_HEADERS
  • start:删除重复的宏
  • caps:将宏移动到 macro 头文件
  • string_utils:使用 UINT64_MAX 宏
  • tree-wide:对静态数组使用 sizeof
  • 回退“tree-wide:对静态数组使用 sizeof”
  • commands:传递 intmax_t
  • commands:在转换为指针之前赋值
  • macro:正确计算缓冲区长度
  • 回退“回退“tree-wide:对静态数组使用 sizeof””
  • macro:移动 MS_* 宏
  • caps:修复对数组边界的非法访问
  • utils:防御性编程
  • nl:删除重复的定义
  • 语法错误:大括号不匹配
  • commands:更好的错误消息
  • file_utils:添加 lxc_recv_nointr()
  • commands:切换到设置 errno 并返回 -1
  • log:不要覆盖 errno
  • log:在 strerror_r() 上保存 errno
  • tree-wide:s/recv()/lxc_recv_nointr()/g
  • file_utils:添加 lxc_send_nointr()
  • tree-wide:s/send()/lxc_send_nointr()/g
  • nl:在 lxc_netns_set_nsid() 上保存 errno
  • log:log_append_logfile() 添加新的错误路径
  • lxccontainer:修复已取消引用的指针
  • lxc:修复使用 --disable-werror 的构建
  • utils:改进 get_ns_uid() 并添加 get_ns_gid()
  • utils:改进 lxc_switch_uid_gid()
  • log:支持 dlog
  • attach:更智能地处理 ID 切换
  • start:避免不必要的系统调用
  • utils:使 lxc_setgroups() 返回布尔值
  • utils:使 lxc_switch_uid_gid() 返回布尔值
  • lxccontainer:使用正确的 pid_t 类型
  • conf:使用 sysfs:mixed 删除额外的 MS_BIND
  • network:在 lxc_netns_set_nsid() 中使用正确的类型
  • network:添加 lxc_netns_get_nsid()
  • 删除未使用的变量
  • file_utils:删除未使用的函数
  • network:微调
  • 添加 dlog 的编译标志
  • log:添加通用函数
  • log:添加 dlog 的附加信息
  • attach:不要在子进程中关闭 ipc 套接字
  • security:修复过宽或不一致的非所有者权限
  • attach:报告标准 shell 退出代码
  • af_unix:添加函数以删除设置 sockaddr 的重复代码
  • lxccontainer:从 set_cgroup_item() 中删除锁
  • lxccontainer:从 get_cgroup_item() 中删除锁
  • apparmor:考虑指定的 rootfs 路径(关闭 #2617)
  • conf:realpath() 使用 null 作为第二个参数以防止缓冲区溢出
  • start:s/backgrounded/daemonize/g
  • cgfsng:使用 __cgfsng_ops__ 属性标记操作
  • autotools:添加 -Wimplicit-fallthrough
  • cgroup:重命名容器特定的 cgroup 函数
  • cgroups:s/fullcgpath/container_full_path/g
  • cgroups:添加缺失的 string.h 包含文件
  • cgroups:s/base_cgroup/container_base_path/g
  • autotools:修复错误的 AX_CHECK_COMPILE_FLAG 测试
  • compiler:s/__fallthrough__/__fallthrough/g
  • compiler:s/__noreturn__/__noreturn/g
  • cgfsng:s/__cgfsng_ops__/__cgfsng_ops/g
  • macro:添加 STRLITERALLEN() 和 STRARRAYLEN()
  • tree-wide:将 sizeof() 替换为 SIZEOF2STRLEN()
  • compiler:在 bionic 上使用 __attribute__((noreturn))
  • autotools:支持 -Wcast-align
  • autotools:支持 -Wstrict-prototypes
  • network:添加 netns_getifaddrs() 实现
  • tree_wide:切换到 netns_getifaddrs()
  • netns_ifaddrs:将强制转换标记为安全
  • autotools:修复 lxc_user_nic 构建
  • stop:仅在 freezer 可用时冻结
  • doc:稍微调整一下文档
  • cgfsng:在 get_hierarchy() 上将 errno 设置为 ENOENT
  • cgfsng:s/cgfsng_destroy/cgfsng_payload_destroy/g
  • cgfsng:s/25/INTTYPE_TO_STRLEN(pid_t)/g
  • compiler:修复 bionic 上的 __noreturn
  • compiler:添加 __hot 属性
  • netns_ifaddrs:修复缺失的包含文件
  • autools:防止在稳定分支上构建 dlog
  • tree-wide:修复包含文件以修复 bionic 构建
  • template:oci 模板支持字符用户信息
  • btrfs:修复 btrfs 容器
  • oci-template:添加没有 /etc/passwd、group 的逻辑
  • configure:修复 -Wimplicit-fallthrough 检查
  • utils:添加 lxc_setup_keyring()
  • autotools:支持 -z relro 和 -z now
  • netns_ifaddrs:正确处理 IFLA_STATS{64}
  • syscall_wrappers:添加 pivot_root()

  • raw_syscalls: 添加 lxc_raw_execveat()
  • raw_syscalls: 添加 lxc_raw_clone{_cb}()
  • raw_syscalls: 添加 lxc_raw_getpid()
  • autotools: 修复 lxc 初始化构建
  • autotools: 修复 lxc-monitord 构建
  • autotools: 修复 lxc-user-nic 构建
  • autotools: 修复 lxc-usernsexec 构建
  • 测试:添加缺失的构建依赖项
  • netns_ifaddrs: 仅使用 struct rtnl_link_stats64
  • cgroups: 删除不必要的行
  • netns_iaddrs: 删除未使用的函数
  • 解析:使用 MAP_POPULATE 预加载配置文件
  • cgfsng: 避免微小的竞争窗口
  • utils: 修复 lxc_set_death_signal()
  • cgfsng: 首先处理 v1 cpuset 层次结构
  • syscall_wrappers: 移动 memfd_create()
  • syscall_wrappers: 移动 setns()
  • syscall_wrappers: 移动 sethostname()
  • syscall_wrappers: 移动 unshare()
  • syscall_wrappers: 移动 signalfd()
  • raw_syscalls: 移动 lxc_raw_gettid()
  • 工具:lxc-start: 删除未使用的参数
  • 工具:lxc-unshare: 删除不必要的初始化
  • 解析:删除 access() 检查
  • 解析:配置文件解析失败时报告错误
  • 宏:添加 PATH_MAX
  • cmd: 将 MAXPATHLEN 替换为 PATH_MAX
  • conf: 将 MAXPATHLEN 替换为 PATH_MAX
  • confile: 将 MAXPATHLEN 替换为 PATH_MAX
  • log: 将 MAXPATHLEN 替换为 PATH_MAX
  • lxccontainer: 将 MAXPATHLEN 替换为 PATH_MAX
  • 宏:将 MAXPATHLEN 替换为 PATH_MAX
  • network: 将 MAXPATHLEN 替换为 PATH_MAX
  • pam: 将 MAXPATHLEN 替换为 PATH_MAX
  • start: 将 MAXPATHLEN 替换为 PATH_MAX
  • terminal: 将 MAXPATHLEN 替换为 PATH_MAX
  • utils: 将 MAXPATHLEN 替换为 PATH_MAX
  • storage: 将 MAXPATHLEN 替换为 PATH_MAX
  • tools: 将 MAXPATHLEN 替换为 PATH_MAX
  • attach: 重置信号掩码
  • start: 更改日志级别
  • file_utils: 修复过宽或不一致的非所有者权限
  • attach: 修复缺少 pthread.h 包含
  • 宏:添加 NETLINK_DUMP_STRICT_CHK
  • 宏:添加 SOL_NETLINK
  • netns_ifaddrs: 检查 NETLINK_DUMP_STRICT_CHK
  • 解析:不要掩盖解析失败
  • 测试:测试无效的配置键
  • confile: 删除未使用的变量
  • 解析:修复未初始化的指针访问
  • 修复静态库的 rpm 打包错误
  • 修复 rpm 安装的后脚本错误
  • conf: 记录 prlimit 设置
  • conf: 在 lxc.mount.entry 后执行 verify_start_hooks()
  • checkpoint: 修复运行 do_dump()
  • monitor: 日志清理
  • monitor: 检查名称是否过长以创建监视器套接字名称
  • commands_utils: 改进代码冗余以创建抽象的 Unix 套接字名称
  • monitor: 修复编码规范
  • autools: 使用 -fno-strict-aliasing
  • checkconfig: 处理缺少的内核版本
  • lxc-init: 将日志记录到 /dev/console
  • autotools: 修复 --disable-commands 构建
  • string_utils: 修复全局缓冲区溢出问题
  • include: 简化 strlcpy()
  • raw_syscalls: 确保函数始终返回值
  • confile: 修复 append_unexp_config_line()
  • 解析:防止在解析期间更新配置
  • 解析:修复未初始化的值
  • 全树:代码风格修复
  • start: 简化
  • autotools: 基于编译器的加固
  • coverity: 更新 .travis.yml
  • coverity: 更新 .travis.yml
  • coverity: 更新 .travis.yml
  • coverity: 更新 .travis.yml
  • coverity: 更新 .travis.yml
  • confile: 不要覆盖全局变量
  • commands: 简化
  • cgfsng: 将增量移出分支
  • monitord: 不要隐藏全局变量
  • tools/lxc_copy: 不要隐藏全局变量
  • tools/lxc_top: 不要隐藏全局变量
  • tools/lxc_info: 不要隐藏全局变量
  • state: 删除同义反复的检查
  • conf: 删除同义反复的检查
  • conf: 在 lxc_pivot_root() 中使用 O_CLOEXEC
  • conf: 删除同义反复的检查
  • lxccontainer: 从 goto 目标中删除检查
  • start: 防止值小于 0
  • tools/lxc_stop: 使用正确的检查
  • cmd/lxc_init: 不要隐藏全局变量
  • coverity: #1440391
  • coverity: #1440389
  • coverity: #1426130
  • storage_utils: 添加错误处理
  • storage_utils: 清理
  • storage_utils: 在子进程中使用 _exit() 代替 exit()
  • 解析:清理
  • dlog: 继承 dlog 文件描述符
  • 拼写:allocate (分配)
  • 拼写:ambiguous (模棱两可的)
  • 拼写:answer (回答)
  • 拼写:architecture (架构)
  • 拼写:array (数组)
  • 拼写:asynchronous (异步的)
  • 拼写:backingstorage (后端存储)
  • 拼写:capabilities (功能)
  • 拼写:character (字符)
  • 拼写:checkpoint (检查点)
  • 拼写:comma (逗号)
  • 拼写:command (命令)
  • 拼写:committer (提交者)
  • 拼写:configuration (配置)
  • 拼写:constant (常量)
  • 拼写:container (容器)
  • 拼写:control (控制)
  • 拼写:convenience (便利)
  • 拼写:could (可能)
  • 拼写:describing (描述)
  • 拼写:device (设备)
  • 拼写:exiting (退出)
  • 拼写:explicitly (明确地)
  • 拼写:feature (特性)
  • 拼写:github (GitHub)
  • 拼写:hierarchy (层次结构)
  • 拼写:hoops (障碍)
  • 拼写:ifindices (接口索引)
  • 拼写:implementations (实现)
  • 拼写:inherited (继承的)
  • 拼写:initialize (初始化)
  • 拼写:javascript (JavaScript)
  • 拼写:keepdata (保留数据)
  • 拼写:libraries (库)
  • 拼写:loglevel (日志级别)
  • 拼写:namespace (命名空间)
  • 拼写:otherwise (否则)
  • 拼写:output (输出)
  • 拼写:overlayfs (覆盖文件系统)
  • 拼写:overridden (被覆盖的)
  • 拼写:override (覆盖)
  • 拼写:passphrase (密码短语)
  • 拼写:perhaps (也许)
  • 拼写:pertains (涉及)
  • 拼写:portion (部分)
  • 拼写:potentially (潜在地)
  • 拼写:returns (返回)
  • 拼写:root (根)
  • 拼写:securityfs (安全文件系统)
  • 拼写:snapshotting (快照)
  • 拼写:specified (指定的)
  • 拼写:specify (指定)
  • 拼写:subtracting (减去)
  • 拼写:successfully (成功地)
  • 拼写:syscall (系统调用)
  • 拼写:timeout (超时)
  • 拼写:unsigned (无符号的)
  • 拼写:userns (用户命名空间)
  • 拼写:without (没有)
  • lxcmntent: 编码规则
  • string_utils: 编码规则
  • log: 修复过宽或不一致的非所有者权限
  • coverity: 移动到单独的分支
  • include: 正确包含 macro.h
  • 修复 namespace.c 中的空格错误
  • caps: 将 read 替换为 lxc_read_nointr
  • log: 将 write 替换为 lxc_write_nointr
  • dlog: 移动 match_dlog_fds()
  • conf: 将 ty 替换为 tty
  • pam_cgfs: 删除冗余文件 utils
  • cgfs: 删除冗余 utils
  • pam_cgfs: 删除对 cap & log 的依赖
  • utils: 修复编码风格
  • utils: 为异常情况添加 errno 日志
  • 向 lvcreate 命令添加 -qq 标志,以避免对 LVM 子系统提出的任何问题的回答“no”,以避免挂起 lxc-create 命令
  • utils: 使密钥环分配失败非致命
  • autotools: 修复 lxc-{create,copy} 构建
  • cgfsng: 删除 freezer 需求
  • start: 不要两次调用 cgroup_exit()

错误修复 (LXC 模板)

  • alpine: 使删除 setpcap 可选
  • plamo: 将默认版本更新为 7.x
  • sabayon: 不要在现有目录上失败

错误修复 (python3 绑定)

  • 此版本没有更改,仅版本号递增

支持和升级

LXC 3.0.3 将支持到 2023 年 6 月,并且是我们当前的 LTS 版本,鼓励用户在发布后更新到最新的错误修复版本。

下载