tl;dr:Ubuntu LTS 是否会将库更新为可能更改/删除 API 元素的版本?
由于 Debian 稳定版没有修补内核以支持新硬件,我遇到了一个问题,即我组织中的新笔记本电脑太新,无法运行 Debian 稳定版。我聘请了一位 Debian 承包商制作带有反向移植内核的安装 CD,但一周后,他仍未制作完成。
现在我不得不考虑将公司迁移到 Ubuntu LTS。但以下噩梦让我彻夜难眠:
- 在为客户举办大型演示活动的前几天,一天早上我早早地来到工作地点。
- 我还有一些时间,所以我
apt upgrade
。 - 后
Y
我注意到已经qt5-default
从5.9.5
增加到5.10.0
。 - 我编译我们的项目才发现 API 已经改变了。
- 我们的团队需要大约2周的时间来重新编写代码以进行适应。
- 我们错过了演示并失去了投标。
- 公司破产了,我们都失业了。
使用 Debian,我不用担心,因为它根本不会更新。我们只获得安全补丁。令人心碎的是,新硬件不受支持。由于我没有那种说服 OEM 只订购 Debian 稳定版发布前生产的笔记本电脑的能力,所以我需要另一种解决方案。
Ubuntu LTS 声明他们只执行“点发布”。当我看到16.04 内核历史为了弄清楚这意味着什么,我看到他们确实将内核从 更新到4.4
了4.15
。这告诉我 Ubuntu 可能不愿意增加主要修订版本,但他们是愿意增加小修改。
libboost
我对从1.67.0
到 的更新没意见1.67.1
,但我对从 到 的更新感到害怕1.68.0
。
我能确信 Ubuntu LTS 不会升级不向后兼容的软件包吗?
如果我对 Ubuntu 的稳定性没有信心,那么以下是可能的解决方法,但欢迎提出建议:
apt-mark hold <package>
将阻止特定软件包的升级,但是:- 手动管理依赖关系将非常耗时
- 我需要在整个公司范围内控制此事。
- 开发可以在运行 debian stable 的 chroot 环境中进行,将开发环境与桌面环境隔离。
答案1
更新 Ubuntu LTS 不会升级内核版本。仅应用安全补丁。
当前 LTS 版本是仿生的.Ubuntu
18.4.1(2018.4.26)
LTS 版本中的自动内核更新通过以下方式启用:硬件支持堆栈仅有的。
Ubuntu 内核发布时间表
在这里您可以看到,除非启用 HWE,否则 LTS 中的内核不会升级。
Ubuntu LTS 内核支持时间表
在这里您可以看到仅实施了安全补丁。
Ubuntu LTS 是否会将库更新为可能更改/删除 API 元素的版本?
答案是不。我能确信 Ubuntu LTS 不会升级不向后兼容的软件包吗?
答案是可以的。
Debian 稳定版也是如此。
当前稳定版本是拉紧。
Debian 9.5(2018 年 7 月 14 日发布,支持至 2022 年)
Linux 上的开发
在企业环境中进行软件开发的最佳实践是运行虚拟机,这样你就可以轻松地保护你的工作快照。
例子
Qubes 操作系统是一个面向安全的操作系统,它允许您运行虚拟机(和模板,包括 Debian) 使用 XEN 虚拟机管理程序 (反而KVM 虚拟化)
如果你正在使用 Qt 并且需要阻止其更新,请尝试setUpdatesEnabled(false);
启用更新setUpdatesEnabled(true);
答案2
Ubuntu 内核编号与 Linux 不同
搜索询问 Ubuntu使用4.13.0-26
,您将找到自 2018 年 1 月以来的 101 个问题和答案。当时发布的 Linux 内核版本适用于 LTS 内核4.14
链。
看着Ubuntu 主线内核下载我们看到4.14.11
Linux4.14.17
内核团队于 2018 年 1 月发布了 7 个内核更新。我们还看到 2018 年 1 月的候选版本内核已4.15.rc6
发布4.15.rc9
(4 个内核更新)。
2018 年 1 月,Linux 内核团队针对 Spectre 和 Meltdown 预测分支理论内存泄漏问题对内核进行了重大修订。Ubuntu 内核团队迅速将代码移植到 Ubuntu 内核 4.13.0-xx 链。
跟踪 ABI/API 变化
来自ABI实验室我们可以看到最后的更改是在2018年6月4日、5日和6日:
我们可以看到Linux 内核2018 年 6 月修订的数字如下:
4.14.48
以及4.9.107
所有4.4.136
6 年 LTS 内核
相应的Ubuntu 内核版本号大概:
4.13.0-43
标头安装失败:Linux 内核头文件与当前内核匹配4.15.0-23
apt 删除脚本损坏
当发布新的硬件支持或现有硬件的错误修复时,我们需要升级 Linux 内核。当涉及 ABI/API 更改时,Ubuntu 内核可能会或可能不会工作。即使没有发生 ABI/API 更改,Ubuntu 内核仍可能因其他原因而对某些人造成影响。
对于局外人来说,找到新 Linux 内核版本号和 Ubuntu 内核版本号之间的关联极其困难。最近的来自 Ubuntu 内核团队的新闻通讯 2017 年 6 月 6 日新闻通讯这是上述 ABI/API 更改的一年前:
Kernel Versions
====================================================================
precise 3.2.0-126.169
trusty 3.13.0-119.166
vivid 3.19.0-84.92
xenial 4.4.0-78.99
yakkety 4.8.0-53.56
linux-lts-trusty 3.13.0-117.164~precise1
linux-lts-vivid 3.19.0-80.88~14.04.1
linux-lts-xenial 4.4.0-78.99~14.04.1
我们看到对应的 Linux 内核版本号该时间段( 2017年6月7 日)的业绩为:3.2.89
、、、、、、、和。3.10.105
3.16.44
3.18.56
4.1.40
4.4.71
4.9.31
4.11.4
4.12-rc4
克隆和功能测试
sudo apt upgrade
您可以考虑自动克隆、升级和功能测试,而不是在昏昏欲睡的星期一早上临时进行:
- 午夜运行的任务克隆您的16.04或者18.04到测试分区:Bash 脚本将 Ubuntu 克隆到新分区以测试 18.04 LTS 升级
cron
克隆后,将创建一个小型重启脚本来运行sudo apt upgrade
并运行您的测试功能。- 克隆 grub 后重新启动并进入克隆版本:Grub:重新启动到特定内核
- 当克隆重新启动时,
cron
重新启动脚本将运行以进行无人值守升级和单元测试。 - 您的单元测试应该将所有库版本号与已知数字进行比较,如果版本号已更新为未经测试的数字,则向您发送电子邮件。
- 您的单元测试将调用所有已知函数,传递测试参数并将返回值与预期结果进行比较。任何差异都将通过电子邮件发送给您。
- 完成后,您的单元测试脚本将通过电子邮件向您发送最终结果,设置
grub
为重新启动到实时环境,然后关闭。