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 版本,鼓励用户在发布后更新到最新的错误修复版本。
下载¶
- 主要发行版 tar 包:lxc-3.0.3.tar.gz (GPG: lxc-3.0.3.tar.gz.asc)
- LXC 模板 tar 包:lxc-templates-3.0.3.tar.gz (GPG: lxc-templates-3.0.3.tar.gz.asc)
- LXC python3 绑定 tar 包:python3-lxc-3.0.3.tar.gz (GPG: python3-lxc-3.0.3.tar.gz.asc)
内容