Trisquel是42%可复制的!

绝对数字可能并不令人印象深刻,但我希望至少有一个有用的贡献,那就是实际上有一个数字可以说明Trisquel有多少是可复制的。希望这将激励其他人帮助改进实际指标。

tl;医生:转到复制-危险.

当我开始了解Trisquel的工作原理,我确定了一些可以提高我对它的信心的事情。对我来说,最容易实现的是手动审核包存档,我编写了一个名为债务差异为我实现自动化。这让我思考apt存档透明度更一般化。我在这方面做了一些进一步的工作(提示:apt-验证)这最终值得发表自己的博客文章。如果我们不信任有意的归档文件中的包。一种可以衡量的增加一揽子计划信任的方法是可复制版本目前,这应该是一个既定的最佳实践。代码审查仍然很重要,但因为它永远不会提供积极的保证,所以我们需要其他能够自动识别次优情况的过程。我认为,可复制构建轻松识别负面结果的方式是推动其成功的主要因素:其结果是有形和可衡量软件工程领域需要更多这样的实践。

我建立Trisquel可复制设置的设计如下。

  • 项目债务分配负责下载Release/Packages文件(其中最相关的文件来自蒸馏器/)来自apt档案,并通过将其提交到GitLab公司-托管的吉特-存储库。我有几个这样的流行的apt档案库,包括特里斯克尔及其上游Ubuntu公司GitLab调用调度管道进行下载一些比赛条件在这里。
  • 项目债务差异用于生成添加和修改的包的列表,这些包是实际能够复制哪些包的输入。它发布几种分布差异的可读性总结,包括Trisquel与Ubuntu。早些时候,我决定重建所有上游Ubuntu包超出了我的范围:我个人对官方Debian/Ubuntu apt档案的信任大于我对Trisquel中添加/修改的包的信任。
  • 最终项目复制-危险将各个部分简单地放在一起,如下所示.gitlab-ci.yml公司文件。
    • 有一个(手动触发的)作业生成生成图像使用简单的Dockerfile文件.
    • 有一个(手动触发的)作业发电机组-列表它使用debdistdiff生成和存储包列表,并将其输出放入列表/。现在手动触发此操作的原因是比赛条件.
    • 有一个(计划的)作业执行两件事:从包列表中,脚本生成-ci-packages.sh构建GitLab CI/CD指令文件ci-packages.yml公司描述要生成的每个包的作业。第二部分是生成readme.sh基于git存储库中存储的构建日志和diffoscope输出重新生成项目的README.md。
    • 通过ci-packages.yml文件,有大量动态定义的作业,目前手动触发这些作业以避免构建服务器过载。脚本构建包.sh调用并尝试重新生成包,并将构建日志和diffoscope输出存储在git项目本身中。

我没想到能够使用GitLab共享的跑步者来进行构建,但结果它们运行得很好,我推迟了设置自己的跑步者。有一个手动管理的列表/禁用-aramo.txt有些包都需要太多的磁盘空间,或者需要两个多小时才能构建。今天我终于抽出时间使用运行Trisquel aramo的podman设置GitLab跑步者,我希望很快完成其余包的构建-我的一个带有256GB RAM和双2680v4 CPU的Dell R630服务器应提供足够的性能。

当前的局限性和对进一步工作的想法(大多数作为项目问题归档)包括:

  • 我们不支持*.内置信息文件夹。据我所知,Trisquel并没有为他们的构建发布它们。改进这一点将是向前迈出的第一步,有谁能帮忙吗?比较buildinfo.debian.net网站例如,许多软件包仅在其NT_GNU_BUILD标识ELF二进制文件中的符号,请参阅libgpg-error的diffoscope输出示例.通过戳入jenkins.trisquel.org网站我设法发现特里斯克建造了initramfs-utils在随机化中路径/build/initramfs-tools-bzRLUp对这条路进行硬编码允许我复制那个包裹。我希望其他许多包也能这样。不幸的是,这个失败变成了成功,这一包将指针从42%的重复性移动到43%,但我没有让它成为一个好的标题。
  • 从dists/下载Release/Package-files的机制并非万无一失:我们可能无法捕获所有已发布的此类文件。虽然这不太关心再现性,但更关心的是适当的透明度。不过,让Trisquel提供类似于快照.debian.org会有帮助的。
  • 至少有一个其他的CPU体系结构会很好。
  • 由于缺乏时间和精力,处理软件包新版本的增量更新尚不可行。这意味着我们只构建一个包的一个版本,而永远不会发现同一个包的任何新发布版本。既然Trisquel aramo公司发布时,新版本的预期速率应该很低,但由于安全性或后台端口的原因仍然会发生。
  • 移植这个进行测试FSDG公司-合规分布,例如PureOS(纯操作系统)侏儒应该比较容易。我也在看德文因为侏儒。
  • 房间里的大象首先是Ubuntu的可复制性。

复活节快乐黑客!

2023-04-17更新:原始项目“复制-危险“此处宣布的内容已存档,并替换为两个项目,一个通用”债务再生产“和一个Trisquel的结果:”复制/三色“.

了解Trisquel

曾想过如何特里斯克尔Ubuntu公司不同之处以及从开发人员的角度来看幕后是什么?我有。分享我学到的知识也会让你增加对Trisquel的知识和信任。

Trisquel GNU/Linux徽标

将Ubuntu存档转换为Trisquel存档的脚本可以在ubuntu-purge存储库.易于阅读purge-focal脚本列出要从中删除的包Ubuntu 20.04焦点当它导入到Trisquel 10.0纳比亚. Thepurge-jammy脚本提供相同的Ubuntu 22.04查米和(尚未发布的)Trisquel 11.0阿拉莫。软件包列表很有趣,通过研究每次被排除在外的原因,你可以了解到很多关于对自由软件的不同态度,并了解改善问题的愿望。我希望有一个wiki页面,针对每个删除的包总结了与早期讨论相关的链接。在脚本的最后,有一堆为了品牌目的而删除的包,这些包不太值得审查。

Trisquel添加了两个Trisquel-specific包。这些包的源代码位于trisquel-packages存储库,每个版本都有子目录:请参阅10.0/对于Nabia11.0/用于Aramo。这些软件包似乎主要用于品牌推广。

Trisquel修改了一组包,现在开始变得有趣了。可能要修改的最重要的包是使用GNU Linux系列而不是Linux操作系统作为内核。用于修改包的脚本位于package-helpers存储库。相关脚本位于helpers/子目录中。每个Trisquel版本都有一个分支,请参阅帮助者/纳比亚阿拉莫的助手。要了解Linux如何被Linux-libre取代,您可以阅读make-linux脚本.

这涵盖了从开发人员的角度接近Trisquel的基础。作为一名用户,我已经确定了一些需要更多工作来提高对Trisquel的信任的领域:

  • 审核Trisquel档案,以确认上述预期变更是唯一发布的变更。
  • 重新生成由Trisquel添加或修改的所有包并发布差速器将它们与Trisquel存档中的内容进行比较。目标是可复制版本所有与Trisquel相关的软件包。
  • 发布Trisquel存档的审核日志,以允许审核发布的包。这归结为对用于签署Trisquel存档的OpenPGP密钥的信任。
  • Trisquel存档镜像审计,以确认他们只发布来自官方存档的内容,并且发布得很及时。

我希望在这些领域发表更多关于我工作的信息。希望这将激励相关发行版做出类似的努力,如PureOS(纯操作系统)和上游分布Ubuntu公司Debian公司.

黑客攻击快乐!

NV41PZ上的Trisquel 11:第一印象

我的NovaCustom NV41PZ公司笔记本电脑几天前到达,今天我有时间安装。你可能想了解我的采购决策过程第一。考虑到有很多人声称现代笔记本电脑无法运行完全免费的操作系统,我预计它会运行得很艰难。我第一次尝试了Trisquel 10 live DVD,它启动良好,包括网络,但鼠标触摸板不起作用。在调查之前,我注意到一个关于Trisquel 11 beta3图像、和以…为基础在Ubuntu 22.04 LTS上Linux-libre系列5.15最好从更现代的软件开始。在成功安装实时DVD后,我意识到我不喜欢MATE,但想继续使用GNOME。我恢复到通过netinst映像安装最小环境,并手动安装了GNOME(apt-get安装gnome)因为我更喜欢MATE,加上一堆其他包。我已经运行了几个小时了,下面是对可用硬件组件的简要总结。

中央处理器阿尔德湖 英特尔i7-1260P
存储器2x32GB金斯顿DDR4 SODIMM 3200MHz
保管部三星980 Pro 2TB NVME
基本输入/输出系统达沙罗Coreboot公司
绘图英特尔Xe
屏幕(内部)14″ 1920×1080
屏幕(HDMI)Dell 27〃2560×1440和Ben-Q PD3220U 3840×1260工作正常
屏幕(USB-C)通过Wavlink USB-C/HDMI端口扩展器:Dell 27〃2560×1440和Ben-Q PD3220U 3840×1260
网络摄像头内置1MP摄像头
麦克风英特尔阿尔德湖
键盘ISO布局,所有功能键工作
鼠标轨迹板、点击和手势
以太网RJ45Realtek RTL8111/8168/8411,带r8169驱动程序
存储卡O2 Micro显示为/dev/mmcblk0
扩展底座Wavlink 4xUSB、2xHDMI、DP、RJ45等…
连接性USB-A、USB-C
音频英特尔阿尔德湖
硬件组件和状态

那么什么不起作用了?不幸的是,NovaCustom不提供任何与Trisquel兼容的WiFi或蓝牙模块,因此其中的AX211(1675x)WiFi/Bluetooth卡只是一块死板。我想,如果加载了非免费固件,就有可能让卡工作。我现在不需要蓝牙,请使用Technoetic N-150 USB WiFi加密狗当我没有连接到有线网络时。

与我的X201相比,以下因素有所改善。

  • 更快–CPU基准这表明它比我的旧i7-620M快8倍。虽然感觉比较快,但差别不大。虽然NVMe应提高SSD性能,基准方面NVMe 980Pro似乎只比基于SATA的860 Evo快2-3倍。从6GB增加到64GB需要10倍的内存,这对磁盘缓存很有用。
  • BIOS是自由软件。
  • EC固件是免费的。
  • 操作系统遵循FSDG.

我仍然对NV41PZ和X201的以下属性感到不满。

  • CPU微码在免费许可证下不可用。
  • CPU中仍存在Intel管理引擎。
  • 没有可与自由软件配合使用的内置WiFi/Bluetooth。
  • 其他一些辅助处理器(例如磁盘或屏幕)可能正在运行非自由软件,但至少没有一个需要非自由固件。

希望我的下一台笔记本电脑能在这方面进一步改进。我希望能够通过更换WiFi模块来解决WiFi部分,似乎有可用的选项,但我还没有在这台笔记本电脑上测试过。有人知道可以在Trisquel上工作的WiFi和蓝牙M.2组合模块吗?

虽然我还没有对笔记本电脑进行大量测试,但我希望笔记本电脑能够做的一切似乎都很好。包括写这篇博文!

面向可插拔GSS-API模块

GSS-API是一个标准化框架,应用程序主要用于支持Kerberos V5身份验证。GSS-API标准化由IETF公司支持SSH、SMTP、IMAP和HTTP等协议,并由以下软件项目实现打开SSH进出口银行鸽子阿帕奇httpd(通过修改_验证_gssapi). 为通用GNU/Linux发行版打包的Kerberos V5和GSS-API的实现,例如Debian公司,包括麻省理工学院Kerberos海姆达尔和(不太流行的)GNU石狮/GSS公司.

当为GNU/Linux发行版打包应用程序或库时,会选择与哪个GSS-API库链接。我认为这会导致两个问题:1)最终用户很难在Kerberos实现之间进行选择,2)非Kerberos用户的依赖性膨胀。让我们分别讨论这些问题。

  1. 与使用的GSS-API/Kerberos实现相比,没有系统管理员或最终用户选择

    MIT Kerberos和Heimdal以及GNU Shishi的错误/功能集存在差异。这可能导致应用程序(例如,卷曲)链接到MIT Kerberos,有人发现了一个与Kerberos相关的问题,如果使用Heimdal,该问题就会出现,反之亦然。有时可以使用另一组依赖项本地重建包。然而,这样做会导致在未来版本中跟踪安全修复的维护成本高昂。对于发行版来说,根据用户抱怨最多的情况,在链接到哪个库之间切换是一个不令人满意的解决方案。为了解决这个问题,可以用两种变体构建包:一种用于MIT Kerberos,另一种用于Heimdal。两者都可以发货。这有助于解决问题,但默认情况下安装哪个变体的问题会导致类似的问题,并最终导致依赖冲突。考虑一个链接到库的应用程序(可能需要几个步骤),其中一个库只支持MIT Kerberos,一个库仅支持Heimdal。

    事实仍然是,将继续存在多个Kerberos实现。发行版将继续支持它们,并将面临默认链接到哪个发行版的困境。发行版和软件打包人员对于从上游选择哪种实现几乎没有指导,因为大多数上游都支持这两种实现。结果是,系统管理员和最终用户没有获得一种简单的方法来灵活地选择要使用的实现。
  2. 非Kerberos用例的依赖性膨胀.

    与GNU/Linux系统的用户数量相比,GNU/Linux系统上的Kerberos用户数量较小。在这里,发行版面临着另一个困境。他们应该为所有应用程序启用GSS-API,以满足Kerberos社区的要求,还是应该保守地添加依赖项,以减少非Kerberos用户的攻击面?这是一个没有明确答案的两难境地,一种方法是发布两个版本的包:一个支持Kerberos,另一个不支持。这里的另一个选项是让上游支持可加载模块,例如Dovecot实现了这一点,Debian船上有一个单独的“Dovecot-gssapi”包,可以无缝扩展核心Dovecot。除了一些较大的项目外,似乎很少有项目愿意承担上游的维护成本,所以大多数项目只支持GSS-API库的构建时链接。

    有许多实际情况需要考虑,但对于大多数GNU/Linux用户来说,最容易理解的可能是OpenSSH。SSH协议通过GSS-API支持Kerberos,OpenSSH实现了此功能,大多数GNU/Linux发行版都提供链接到GSS-API库的SSH客户端和SSH服务器。有人选择将其链接到GSS-API库,这是为了吸引对其感兴趣的人数较少的人,也是为了选择链接到哪个库。在不支持Kerberos的情况下在本地重建OpenSSH需要很高的维护成本。许多人不需要或使用SSH客户端或SSH服务器的Kerberos功能,默认情况下启用Kerberos会带来安全成本。OpenSSH中存在漏洞对许多系统来说至关重要,因此其依赖性是一个合理的问题。如果OpenSSH的构建方式不强迫您安装MIT Kerberos或Heimdal,那不是很好吗?当然,这仍然可以让Kerberos用户轻松使用它。

希望我已经把上面的问题陈述清楚了,并且我设法说服了你,事情的状态需要改进。我从在Debian中维护GNU SASL的个人经验中了解到了这些问题,多年来我一直忽略了这个问题。

让我介绍一下Libgssglue!

Matryoshka玩偶
Matryoshka玩偶–照片CC-4.0-BY-NC由PngAll提供

Libgssglue是由Kevin W.Coffman基于历史GSS-API代码编写的库,初始版本是在2004年(使用libgssapi名称),最后一个版本是在2012年。Libgssglue提供了一个最小的GSS-API库和头文件,因此任何应用程序都可以链接到它,而不是直接链接到MIT Kerberos或Heimdal(或GNU GSS)。管理员或最终用户可以在运行时通过全局/等/gssapi_mech.conf文件甚至本地文件GSSAPI_MECH_CONF公司环境变量。Libgssglue是用C编写的,没有外部依赖项BSD风格许可。它是为CITI NFSv4项目但libgssglue最终没有被使用。

我添加了对使用libgssglue构建GNU SASL的支持,只需要进行更改/由于GSS-API是一个标准化框架,因此与configure.ac相关。我编写了一个相当复杂的CI/CD检查,该检查使用MIT Kerberos、Heimdal、libgssglue和GNU GSS构建GNU SASL,设置本地Kerberos KDC并验证GSS-API和GS2-KRB5身份验证是否成功。“gsasl”命令行工具连接到本地示例SMTP服务器,该服务器也基于GNU SASL(链接到GSS-API库的所有变体),并连接到使用MIT Kerberos GSS-API库的系统安装的Dovecot IMAP服务器。这是在Debian上实现的,但我希望它能够轻松适应其他GNU/Linux发行版。该检查触发了一些(预期的)Shishi/GSS相关的缺失功能,并触发了一个与授权标识相关的问题,这可能是GNU SASL中的一个错误。然而,测试表明,可以将GNU SASL与libgssglue链接起来,并使其与Debian附带的任何GSS-API库一起运行。请参见GitLab CI/CD代码其CI/CD输出.

这个实验效果很好,我联系了凯文,得知他对这个项目没有任何未来计划。我收养了libgssglue并建立了一个Libgssglue GitLab项目页面,并推出libgssglue0.5版本只修复了一些与构建相关的小问题。仍然有一些新引入的GSS-API接口缺失,可以添加,但我还没有找到任何关键问题。令人惊讶的是,一个10年前未接触过的项目效果如此好!

我当前的下一步是:

  • 发布支持Libgssglue的GNU SASL,并鼓励在文档中使用它。
  • 使GNU SASL链接到Debian中的Libgssglue,以避免对MIT Kerberos的硬依赖,但仍然允许GNU SASL提供默认的现成Kerberos体验。
  • 维护libgssglue上游并执行自检、CI/CD测试、已定义的新GSS-API接口,通常修复错误并改进项目。感谢您的帮助!
  • 在Debian中维护libgssglue包。
  • 调查Debian中是否存在链接到GSS-API库的应用程序,这些应用程序可以链接到libgssglue,从而为最终用户提供灵活性并减少依赖性膨胀。

你怎么认为?快乐黑客!

笔记本电脑购买建议?

我的当前联想X201笔记本电脑和我在一起已经四年多了。多年来,我一直在寻找新的笔记本电脑型号,认为我应该升级。每次检查完性能数据后,我总是得出这样的结论:它不值得英特尔Broadwell处理器是核心i7 5600U只是约1.5倍当前Intel Core i7 620M的性能。同时,磁盘性能提高得更快,但在笔记本电脑上更换磁盘通常很简单。两年前,我升级到三星840 Pro 256GB磁盘,今年我把它换成了三星850 Pro 1TB两者都是不错的投资。

最近,我的笔记本电脑使用模式发生了轻微变化,我决定在不同的位置安装多台半永久性笔记本电脑,再加上一台目前刚刚安装的移动设备,而不是随身携带一台笔记本电脑我的电话X201将仍然是我的正常工作机器之一。

剩下的是决定买一台新的笔记本电脑,然后就开始了乐趣。我的要求比较容易总结。笔记本电脑将运行GNU/Linux发行版喜欢Debian公司,所以它必须与之配合良好。我已经决定我首选的CPU是Intel Core i7 5600U。屏幕大小、键盘和鼠标几乎无关紧要,因为我从未直接在笔记本电脑上工作更长时间。尽管笔记本电脑是半永久的,但我知道有时我会随身携带。因此,它必须尽可能轻。如果使用较重的笔记本电脑会有很大的优势,我可能会重新考虑这一点,但就我所知,较重的机器的唯一优势是屏幕更大/更好(我觉得这一切都无关紧要)和最大内存容量(我会觉得这很有用,但这对我来说还不够充分)。我发现市场上CPU容量为5600U、重量低于1.5公斤的笔记本电脑有:

联想X250 1.42千克 12.5″ 1366×768
联想X1碳纤维(第三代) 1.34千克 14″ 2560×1440
戴尔Latitude E7250 1.25千克 12.5″ 1366×768
戴尔XPS 13 1.26千克 13.3″ 3200×1800
HP EliteBook Folio 1040 G2 1.49千克 14英寸 1920×1080
HP精英书Revolve 810 G3 1.4千克 11.6″ 1366×768

我觉得很有趣联想戴尔惠普每一款都有两个型号,符合我的5600U/1.5kg标准。关于屏幕,可能还有其他屏幕分辨率的型号。我看过的XPS 13、HP 810和X1型号都有触摸屏,其他型号没有。由于屏幕对我来说并不重要,所以我没有进一步评估。

我认为所有这些都足够了,只有细微的差别。除了XPS 13之外,所有设备都可以使用一根电缆连接到外围设备,我觉得这很方便,可以避免电缆混乱。它们都有DisplayPort,但HP使用DisplayPort Standard,其余使用miniDP。E7250和X1具有HDMI输出。X250支持15针VGA连接器,其他的都没有,我不确定这是一个优势还是劣势。除E7250有3个端口外,其他所有设备都有2个USB v3.0端口。HP 1040、XPS 13和X1 Carbon没有RJ45以太网接口,这对我来说是一个很大的缺点。具有讽刺意味的是,只有其中最小的一个,即HP 810,可以将内存升级到12GB,而其他的则只能升级到8GB。HP和E7250支持NFC,但Debian的支持尚不确定。E7250和X250有一个智能卡读卡器,同样,Debian支持也不确定。X1、X250和810具有3G/4G卡。

现在,我倾向于拒绝XPS 13、X1和HP 1040,因为缺少RJ45以太网端口。这让我只能选择E7250、X250和810。其中,E7250似乎是胜利者:最轻,1个额外的USB端口,HDMI,NFC,SmartCard-reader。然而,它没有3G/4G卡,也没有内存升级选项。寻找兼容性问题,似乎您必须小心,不要最终使用“Dell Wireless”卡,E7250似乎有对接和非对接变体,但我不确定这意味着什么。

我还应该考虑其他模式吗?其他想法?