可复制且仅限源的tarball

使用Libntlm 1.8版的发布发布tarball可以在多个发行版上复制。我们还发布了一个由git档案与使用的格式相同大草原,Codeberg公司,GitLab公司,github和其他。测试了两种柏油球的再现性持续进行回归通过CI/CD管道在GitLab上运行。如果这还不足以让你兴奋Libntlm的Debian包现在是从可复制的最小源代码tarball构建的。生成的二进制文件是可复制的在多个架构上。

这到底是什么意思?你为什么要在乎?你怎样才能在你的项目中做到这一点?有哪些悬而未决的问题?亲爱的读者,继续读下去…

本文描述了我对可复制发布工件的实际实验我早先的想法导致关于化石的讨论和aJanneke Nieuwenhuizen制作的补丁,使吉他柏油球可重复使用这启发了我做一些实际工作。

让我们看看维护人员如何发布一些软件,以及用户如何从源代码中重现发布的工件。Libntlm提供了一个用C编写的共享库,并使用GNU品牌,GNU自动控制,可移植的源代码,GNU库工具格努利布对于构建管理,但这些思想应适用于大多数项目和构建系统。以下说明了维护人员准备发布所需的步骤:

git克隆https://gitlab.com/gsasl/libntlm.git网站光盘库git校验v1.8./引导./配置进行distcheckgpg-b libntlm-1.8tar.gz

生成的文件libntlm-1.8tar.gz银行libntlm-1.8.tar.gz.sig公司发布,用户下载并使用它们。这就是如何GNU项目自20世纪80年代末以来一直在发行。这证明了这种模式是多么成功!这些tarball包含源代码和一些生成的文件,通常是autoconf生成的shell脚本、automake生成的makefile模板、以下格式的文档信息、HTML或PDF。它们很少包含二进制目标代码,但历史上确实如此。

这个XZUtils事件说明包含git存档中未包含的文件的tarball提供了伪装恶意后门的机会。早些时候发过博客如何通过使用签名的最小源代码tarball来降低此风险。

隐藏恶意软件的风险并不是发布签名的最小源代码tarball的唯一动机。对于tarball中预先生成的内容,存在以下风险GNU/Linux发行版例如特里斯克尔,吉他,Debian公司/Ubuntu公司费多拉将从tarball生成的文件发送到二进制文件*.deb(代布)*.转/分程序包文件。通常,打包上游项目的人员从未意识到某些已安装的工件不是通过典型的autoconf-fi和&/配置并进行安装序列,并且从未编写代码来重建所有内容。如果构建规则被编写但有缺陷,并且运送了旧的工件,也会发生这种情况。当发现安全问题时,这可能会导致耗时的情况,因为修补相关源代码并重新构建包可能是不够的:从tarball生成的易受攻击的对象将被发送到二进制包中,而不是重新构建的工件中。对于特定于体系结构的二进制文件,这种情况很少发生,因为目标代码通常不包含在tarballs中,尽管十多年来我在GNU图书馆释放tarball,直到我停止发货对于解释语言,尤其是生成的内容,如HTML、PDF、shell脚本,这种情况发生得比您希望的要多。

发布最小的源代码tarball可以更容易地审核项目代码,从而避免需要通读所有生成的文件以查找恶意内容。我已经使用生成了源代码的最小tarballgit档案这与GitLab、GitHub等为git标签上的自动下载链接提供的格式相同。因此,仅限源代码的tarball可以作为审核GitLab和GitHub下载材料的一种方式!考虑GitLab或GitHub等托管站点是否/何时发生安全事件,导致生成的tarball包含git存储库中不存在的后门。如果人们依赖标签下载工件而没有使用验证维护者PGP签名保密性卫兵这可能会导致类似于XZUtils的后门场景,但最初是由宿主提供商而不是发布管理器创建的。这更令人担忧,因为此攻击可能针对某些选定的IP地址,而不是针对所有人,因此很难发现。

在所有这些讨论和基本原理都解决之后,让我们回到发布过程。我在这里添加了另一个步骤:

制作srcdistgpg-b库ntlm-1.8-src.tar.gz

现在发布准备就绪。我将这四个文件发布在Libntlm的Savannah下载区,但它们也可以上传到GitLab/GitHub发布区。这些是在我的计算机上构建tarball后得到的SHA256校验和Trisquel 11 aramo笔记本电脑:

91de864224913b9493c7a6cec2890e6eded3610d34c3d983132823de348ec2ca libntlm-1.8-src.tar.gzce6569a47a21173ba69c990965f73eb82d9a093eb871f935ab64ee13df47fda1 libntlm-1.8tar.gz

那么你怎么能复制我的文物呢?以下是如何在Ubuntu 22.04容器中复制它们:

播客运行它--rm ubuntu:22.04更新源apt-get安装-y--无安装-推荐autoconf automake libtool生成git ca证书git克隆https://gitlab.com/gsasl/libntlm.git网站光盘库git校验v1.8./引导./配置生成dist srcdist沙256sum libntlm-*.tar.gz

您应该会看到完全相同的SHA256校验和值。万岁!

这是因为Trisquel 11和Ubuntu 22.04使用了相同版本的git、autoconf、automake和libtool。这些工具并不能保证所有版本的输出内容相同GNU通用条款不会为所有版本生成相同的二进制输出。所以仍然需要一些微妙的版本配对。

理想情况下,工件应该可以从发布工件本身复制,而不仅仅是直接从git复制。可以在AlmaLinux公司8个容器–更换almalinux:8具有rockylinux:8如果你愿意RockyLinux:

podman run-it--rm almalinux:8dnf更新-ydnf安装-y make wget gccwget公司https://download.savannah.nongu.org/releases/libntlm/libntlm-1.8tar.gz焦油xfa libntlm-1.8tar.gz光盘libntlm-1.8./配置制造距离沙256sum libntlm-1.8tar.gz

可以在上重新生成仅源的最小tarballDebian 11号机组:

播客运行--rm debian:11更新源apt-get安装-y--无安装-建议生成git ca证书git克隆https://gitlab.com/gsasl/libntlm.git光盘库git校验v1.8生成-f cfg.mk srcdist沙256sum libntlm-1.8-src.tar.gz

作为Magnus Opus或chef-d'œuvre,让我们直接从Trisquel 11上的最小源代码tarball重新创建完整的tarball–replacedocker.io/kpengboy/trisquel:11.0具有乌班图:22.04如果你愿意的话。

播客运行它--rm docker.io/kpengboy/trisquel:11.0更新源apt-get安装-y--无安装-推荐autoconf automake libtool生成wget-git ca证书wget公司https://download.savannah.nongu.org/releases/libntlm/libntlm-1.8-src.tar.gztar xfa libntlm-1.8-src.tar.gz数据库光盘libntlm-v1.8./引导./配置制造距离沙256sum libntlm-1.8tar.gz

耶!现在,您应该非常确信,发布工件与版本控制中的内容以及维护者打算发布的内容相对应。剩下的工作是审核源代码中的漏洞,包括构建中使用的依赖项的源代码。您不再需要担心审核发布工件。

我觉得有点有趣的是,Libntlm的构建基础设施现在比代码本身要好得多。Libntlm是用旧C风格编写的,有大量的字符串操作,并使用了破解的加密算法,例如MD4公司单一DES记住各位:解决供应链安全问题与您最终运行的代码类型无关。一把干净的枪仍然可以射中你的脚。

关于命名的旁注:GitLab使用路径名导出tarballlibntlm-v1.8型/(即。。,TAG项目/)我采用了相同的路径名,这意味着我的libntlm-1.8-src.tar.gz数据库tarball与GitLab的导出完全相同,您可以使用以下工具进行验证差速器GitLab命名tarballlibntlm-v1.8.tar.gz数据库(即。,项目-标签。档案文件)我发现它与libntlm-1.8tar.gz银行我们也发布了。GitHub使用相同的git归档样式,但不幸的是,它们有删除路径名中“v”的逻辑,因此您将获得一个带有路径名的tarball伦敦银行-1.8/而不是libntlm-v1.8型/我和GitLab使用的。tarball的内容是逐位相同的,但路径名和存档不同。Codeberg(运行福吉乔)使用另一种方法:tarball被称为libntlm-v1.8.tar.gz数据库(在标记之后)就像GitLab一样,但归档文件中的路径名是利本特姆/,否则生成的存档将逐位相同,包括时间戳。萨凡纳的CGIT接口使用存档名称libntlm-1.8tar.gz银行具有路径名伦敦银行-1.8/,否则文件内容相同。萨凡纳的GitWeb接口提供以git提交命名的快照链接(例如。,libntlm-a812c2ca.tar.gz公司具有libntlm-a812c2ca公司/)我根本找不到任何基于标记的下载链接。总的来说,我们非常接近于使SHA256校验和匹配,但在存档中的路径名上失败。我选择在tarball的内容方面与GitLab兼容,但在存档命名方面不兼容。从简单的角度来看,如果每个人都使用项目-标签。档案文件用于存档文件名和TAG项目/用于存档中的路径名。这方面可能需要更多讨论。

关于git存档输出的旁注:它似乎是不同版本的git存档为同一存储库生成不同的结果。Debian 11、Trisquel 11和Ubuntu 22.04中git的版本表现相同。Debian 12、AlmaLinux/RockyLinux 8/9、Alpine、ArchLinux、macOS自制软件和即将推出的Ubuntu 24.04中的git版本表现出了另一种方式。希望这不会经常发生变化,但这会使这些tarball在未来的再现性失效,迫使您使用旧的git发行版来重现源代码tarball。唉,GitLab和大多数其他网站似乎都在使用现代git,因此从他们那里下载的tarball与我的tarballs不匹配,即使内容会匹配。

ChangeLog上的旁注:更改日志文件通常是手动管理的文件,带有包的版本历史记录。近年来,有几个项目开始从git历史动态生成它们(使用诸如git2cl公司gitlog到changelog). 这会影响tarball的可再现性:您需要有完整的git历史记录!这个gitlog到changelog工具也输出不同的输出取决于时区这是一个可以修复的简单错误。然而,这整个方法与从最小的源tarball重建完整的tarball不兼容。看起来Libntlm的ChangeLog文件死于手术台在这里。

那么,发行版如何构建这些最小的纯源tarball呢?我碰巧在Debian中的libntlm包它历史上使用生成的tarball作为构建源代码。这意味着来自gnulib的代码将在tarball中出售。当在gnulib代码中发现安全问题时,安全团队需要修补包含该供应商代码的所有包并重新构建它们,而不仅仅是修补gnulib-包并重新生成依赖于该特定代码的所有程序包。为了改变这一点,Debian libntlm包需要Build-DependsDebian的gnulib包但有一个问题:与大多数使用gnulib的项目类似,Libntlm依赖于gnulib的特定git提交,而Debian只提供一个提交。对于要使用哪个提交,没有进行协调。已采用gnulib在Debian中,并添加git丛*_所有.deb二进制包,以便依赖gnulib的项目可以选择他们需要的任何提交。这允许无网络GNULIB_URLGNULIB_修订运行Libntlm时的方法./引导安装了Debian gnulib包。否则,libntlm将获取Debian在gnulib包中碰巧拥有的任何最新版本的gnuib,而这并不是libntlm维护者想要使用的,并且随着时间的推移,可能会导致各种版本不匹配(从而导致安全问题)。Debian中的Libntlm是在Salsa上开发和测试的而且有连续集成测试感谢萨尔萨CI团队.

关于git捆绑包的附带说明:不幸的是,似乎没有可复制的方法将git存储库导出到一个或多个文件中。因此,所有这些工作的一个不幸后果是gnulib*.orig.tar.gz(原始目标.gz)Debian中的tarball不再可复制。我有尝试使Git包可复制,但我从未使其工作-请参阅中的注释gnulib的debian/README.source在这方面。当然,源tarball再现性与二进制无关gnulib在Debian中的再现性幸运的是,它本身。

一个悬而未决的问题是如何处理由这种方法触发的增加的构建依赖性。一些人们感到惊讶通过这种方式,但我不知道如何绕过它:如果您依赖另一个包中工具的源代码来构建您的包,那么隐藏这种依赖性是一个坏主意。很长一段时间以来,我们都是通过非最小tarball中的供应商代码来实现的。从引导的角度来看,Libntlm不是最关键的项目,因此添加git和gnulib作为构建依赖项这样可能很好。然而,考虑一下此模式是否用于其他使用gnulib的包,例如coreutils公司,gzip公司,焦油,野牛etc(都在使用gnulib),那么他们都会构建依赖项关于git和gnulib。因此,为一个新的体系结构交叉构建这些包首先需要在该体系结构上使用git,这会很快循环。对gnulib的依赖是真实的,所以我不认为它会消失,而gnulab是一个架构:全部包装。然而,对git的依赖仅仅是Debian-gnulib包如何选择使所有gnulib-git提交对项目可用的结果:通过git包。还有其他方法可以做到这一点,它不需要git工具来提取必要的文件,但我发现没有一种方法是可行的——欢迎提出想法!

最后是关于如何实现这一点的简要说明。通过gnulib实现可引导的源代码最小化tarball./引导通过使用GNULIB_修订机制,锁定使用的gnulib提交。我一直不喜欢git子模块,因为它们添加了额外的步骤,并且与CI/CD有复杂的交互放弃git子模块现在是因为要使用的特定提交没有记录在git存档使用git子模块时的输出。因此,必须在git存档tarball中的一些源代码中明确提到特定的gnulib提交。科林·沃森添加了GNULIB_REVISION接近./引导程序回到2018年,现在继续使用gnulib-git子模块已经没有意义了。一种替代方法是使用./引导具有--gnulib-srcdir--gnulib-refdir如果有一些实际问题GNULIB_URL朝向git捆绑包GNULIB_修订在里面引导.conf.

这个srcdist生成规则很简单:

git存档--前缀=libntlm-v1.8/-o libntlm-1.8-src.tar.gz HEAD

制作制造距离生成的可复制tarball可能更复杂,但对于Libntlm来说,这足以确保所有文件的修改时间都是确定的到git存储库中最后一次提交的时间戳。有趣的是,似乎有两种不同的方法可以实现这一点,Guix不支持最小源代码tarball,但依靠.tarball时间戳把文件放在防水布里。保罗·艾金特解释了TZDB正在使用的内容不久前。这个我现在使用的方法我建议的一个一年多以前。如果由于tarball中的所有文件现在使用相同的修改时间而出现问题布鲁诺·海布尔的解决方案这是可以实现的。

关于git标签的旁注:有些人可能想知道为什么不验证签名的git标签,而不是验证git存档的签名tarball。目前大多数git存储库使用SHA-1作为git提交身份,但SHA-1不是安全哈希函数。虽然可以检测并减轻当前的SHA-1攻击,但对于git SHA-1提交标识是否唯一地引用了预期的相同内容,存在根本的疑问。验证git标记永远不会提供相同的保证,因为git标记可以随时移动或重新指定。验证git提交更好,但我们需要信任SHA-1。正在迁移git到SHA-256将解决此问题,但大多数托管站点(如GitLab和GitHub)尚不支持此功能。使用签名tarball代替签名git提交或git标记还有其他优点,例如。,焦油.gz可以是一种可确定复制的持久稳定脱机存储格式,但.git(单位:吉特)子目录树或git捆绑包不要提供此属性。

对所有这些进行持续测试对于确保事情不会倒退至关重要。Libntlm的管道定义现在生成生成的libntlm-*.tar.gz数据库tarball和校验和作为构建工件。然后我添加了000可再生产性比较校验和并在不匹配时失败的作业。你可以阅读它v1.8工作中的精细输出释放。现在,我们坚持认为Trisquel 11的构建与Ubuntu 22.04相匹配,PureOS 10的构建与Debian 11的构建相匹配,AlmaLinux 8的构建与RockyLinux 8的建立相匹配,而AlmaLinux 9的构建与LockyLinux 9的建设相匹配。正如您可以在管道作业输出中看到的那样,并非所有平台都会导致相同的tarball,但希望这种状态可以随着时间的推移得到改善。还存在部分再现性,其中完整的tarball可以跨两个分布进行再现,但最小tarball不可以,反之亦然。

如果这种工作方式效果很好,我希望也能在其他项目中实施。

你怎么认为?Hacking快乐!

走向可复制的最小源代码tarball?在*-src.tar.gz上

在工作期间分析xz后门目前,已经提出了一些改进软件供应链生态系统的想法。其中一些想法是好的,一些想法充其量是无关紧要和无害的,而一些建议显然是坏的。我想尝试将之前讨论过的两个想法形式化,但它们可以被欣赏的背景并不像今天那么清楚。

  1. 可复制的柏油球。其想法是,已发布的源代码tarball应该可以以某种方式独立复制,并且应该不断进行测试和验证——最好是作为上游项目持续集成系统的一部分(例如,GitHub操作或GitLab管道)。虽然名义上这看起来很容易实现,但其中有一些复杂的问题,例如:tarball中的文件使用什么时间戳?我已经提出了这个方面之前。
  2. 最少的源代码tarball,无需生成供应商文件。大多数基于GNU Autoconf/Automake的tarball预先生成了文件,这些文件对于在没有所需依赖项的外来系统上进行引导非常重要。要使引导故事成功,必须支持这种方法。然而,很明显,这种做法会带来巨大的成本和风险。大多数现代GNU/Linux发行版都具有所有必需的依赖性,实际上更喜欢从源代码重新构建所有内容。这些预先生成的额外文件给该过程带来了不确定性。

我提出的改进建议是定义新的tarball格式*-src.tar.gz公司至少具有以下属性:

  1. tarball应该允许用户构建项目,这就是所有这些的全部目的。这意味着至少必须包含项目的所有源代码。
  2. tarball应该签名,例如使用PGP或minisign。
  3. tarball应该可以由第三方使用上游的版本控制源和使用修订的指针(例如git标记或git提交)逐位复制。
  4. tarball不需要互联网连接就可以下载东西。
    • 推论:每个外部依赖项要么必须明确记录下来(例如,gcc和GnuTLS),要么包含在tarball中。
    • 观察:这意味着包括所有*.po型 获取文本从版本控制源构建时通常下载的翻译。
  5. tarball应该包含使用尽可能多的外部发布版本化工具从源代码构建项目所需的所有内容。这是目前所缺乏的“最小”财产。
    • 推论:这意味着包括OpenSSL或libz的供应商副本是不可接受的:作为外部项目链接到它们。
    • 悬而未决的问题:未发布的外部工具,如格努利布autoconf存档宏? 这有点微妙:大多数发行版要么只打包一个当前版本的gnulib,要么打包autoconf存档,而不是打包以前的版本。虽然这可能会发生变化,但发行版可以打包gnulib git存储库(直到某些当前版本)和autoconf存档git存储库可提取所需的版本(gnulib的/引导数据库已经通过支持此–gnulib-refdir参数),这通常不到位。
    • 建议的推论:tarball应该包含git子模块的内容,例如gnulib和项目所需的必要Autoconf存档M4宏。
  6. 类似于GNU项目指定的方式/配置界面我们需要一个文档化的界面来引导项目。我建议使用已经很成熟的跑步习惯用语./引导设置包以便以后可以通过./配置。当然,有些项目没有使用自动工具./配置接口,也不会遵循这一点,但与autotools竞争的大多数构建系统都有关于如何构建项目的说明,它们应该记录类似的接口,以便引导源tarball进行构建。

如果可以从流行的上游项目中获得实现上述目标的tarball,那么发行版可以更容易地使用它们,而不是包含预生成内容的当前tarball。优点是构建过程不会被“不必要的”文件污染。我们需要为维护人员开发工具来创建这些tarball,类似于制造距离产生今天的foo-1.2.3.tar.gz(目标.gz)文件夹。

我认为反对这种方法的一个常见论点是:为什么要费心这么做,而只是使用git档案输出?或者避免整个tarball方法,直接转向版本控制的签出,并将上游版本称为git URL和commit标记或idSHA-1断裂,因此信任SHA-1标识符是不安全的。另一个反驳意见是,这以上游维护者为代价优化了打包者的利益:大多数上游维护者不想存储gettext*.po型源代码存储库中的翻译。在维护者和包装者的需求之间进行折衷是有用的,因此*-src.tar.gz公司tarball方法是我们需要解决的间接方法。更新:在我的实验中Libntlm的源代码专用tarballs我确实使用了git存档输出。

你怎么认为?

Guix 1.4的第二印象

而我的NV41PZ上Guix 1.4rc2的第一印象就在几天前,决赛Guix 1.4版本发生了。我想我应该再试一次,尽管在我没有有线以太网的避暑别墅里,我意识到这可能过于乐观了。然而,我很高兴地说引导式图形安装我的新笔记本电脑运行顺利,没有任何问题。实践操作系统安装有使问题消失的趋势。

我上次的WiFi问题可能是因为我的用户界面错误:你必须先按下按钮搜索无线网络,然后才能看到它们。我不确定为什么我第一次错过了这个,但也许原因是我真的没想到WiFi能在这款笔记本电脑上工作,它有一个基于英特尔的WiFi卡,没有固件,还有一个基于USB的WiFi加密狗。我还没有回到rc2图像,但我坚信这不是该图像的问题,而是我的用户错误。也许可以提供更多的视觉线索,让Guix找到一个可用的WiFi接口,因为这现在还不太明显。

我最喜欢的安装问题是语言菜单。它包含了无数种语言,我想在其中找到瑞典语。然而,列表是半排序的,所以看起来像是按字母排序的,但翻阅列表时我没有找到“svenska”,但我注意到过了一会儿排序又重新开始了。最终我找到了我选择的语言,但更好的搜索界面会更好。键入“s”可在列表中找到它。这可能是我对用户界面的误解:我可能会错过任何我确信可以在菜单中找到我的语言的好逻辑。

我做了一个简单的安装,启用了GNOME、Cups和OpenSSH。考虑到上次使用Trisquel安装共享/home的经验,我这次选择了不挂载它,如果我想在操作系统之间共享文件,可以稍后再修复。看着安装过程中通过这个缓慢的WiFi下载软件包是一种沉思,我不禁想知道它说要下载X MB软件、下载一组软件包、,然后开始另一个迭代,说它将下载YMB,然后下载另一组包。也许在我观看的时候,有一个包依赖关系树正在被绘制。

登录GNOME后,我不得不再次提供WiFi密码,似乎在安装过程中没有保存,或者我迫不及待地等待WiFi自动启动。使用GNOME WiFi选择菜单工作正常。网络摄像头问题仍然存在,图像失真,这在Trisquel没有发生。除此之外,一切似乎都有效,但还需要进行更多测试。

安装后升级Guix仍然遇到与rc2映像相同的问题,这一次我设法保存了错误消息,以防有人想要提供官方修复或解决方法。初始的guix pull命令也需要很长时间,即使在这个速度很快的笔记本电脑上也是如此,但在初始运行之后,它会更快。以下是错误消息(请原谅瑞典人):

贾斯@kaka~$sudo-i...根@卡卡~#guix拉动...根@kaka~#guix系统重新配置/etc/config.scmguix系统:fel:正在中止重新配置,因为通道“guix”的commit 8e2f32cee982d42a79e53fc1e9aa7b8ff0514714不是989a3916dc8967bcb7275f10452f89bc6c3389cc的后代提示:使用“--allow-downgrades”强制降级。根@kaka ~#

这次我将避免使用–allow-downgrades,看看是否有更好的解决方案可用。

更新:问题解决:我的肌肉记忆输入苏多-i在编写上述命令之前。如果我坚持建议guix拉力'(作为用户)后跟'sudoguix系统重新配置/etc/config.scm“一切正常。我会留下这个,以防其他人遇到这个问题。

我正在使用进化邮件/日历/联系人应用程序,它不是通过GNOME安装的,所以我必须使用“guix包-i evolution”。遵循指导设置工作得非常好(它在给出我的电子邮件地址后自动检测我的所有电子邮件设置),尽管最后我收到了一条令人惊讶的错误消息:

混淆来自Evolution的错误消息

如果我不知道Evolution内部是如何工作的,我就会被困在这里——解决方案是安装Evolutions数据服务器包。这可能是来自主包的依赖项?通过“guix包-i evolution-data-server‘. 它直接工作,甚至不需要重新启动Evolution或再次通过配置对话框。在此之后,我很高兴通过GNOME内置的Nextcloud连接器(直接安装)对我的Dovecot服务器使用电子邮件,对我的Nextcloud服务器使用联系人/日历。

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中。
  • 没有可与自由软件配合使用的内置WiFi/Bluetooth。
  • 其他一些辅助处理器(例如磁盘或屏幕)可能正在运行非自由软件,但至少没有一个需要非自由固件。

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

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

关于语言绑定和重新启动Guile GnuTLS

这个Guile公司的绑定GnuTLS公司自2007年春季以来一直是GnuTLS的一部分,当时Ludovic Courtès贡献了它在一些之后初步讨论。我一直在考虑回去做GnuTLS编码,在最近的GnuTLS会议其中一个主题是Guile绑定。它似乎是一个相当独立的项目,值得学习。当这项工作被包括在内时,重新阅读旧的线程是很有趣的:其中提出的一些关注点现在有跟踪记录需要评估。我认为,现在每种语言绑定引入一个新项目的成本小于维护语言的成本绑定作为核心项目的一部分。我相信在过去的15年里,成本效益比发生了变化:引入一个新项目过去会带来巨大的成本,但现在情况已经不同了,因为包装的工具和工艺已经得到了改进。我在Java、C#和Emacs Lisp绑定方面有类似的经验GNU图书馆此外,集中维护它们会降低更新速度。安德烈亚斯·梅茨勒指出到类似的Russ Allbery得出的结论.

有很多方法可以将一个项目分为两个项目;仅仅将文件复制到新的git存储库中是最简单的,也是我最初的计划。然而Ludo提到的git过滤器分支在一封电子邮件中,我觉得保留一些相关文件的所有git历史记录的想法值得追求git-filter-repo过滤器这似乎是推荐的方法,通过试验,我找到了一种方法,可以将GnuTLS repo过滤到Guile-GnuTLS可以基于的小git存储库中。如果您想复制内容,我使用的命令如下。

$git克隆https://gitlab.com/gnutls/nutls.gitguile-gnutls公司$cd guile-gnutls/$git结账f5dcbdb46df52458e3756193c2a23bf558a3ecfd$git-filter-repo--路径guile/--路径m4/guile.m4--路径doc/gnutls-buile.texi--路径doc/extract-guilec-doc.scm--路径doc/cha-copying.texi--路径doc/fdl-1.3.texi

例如,我反复思考是否要包含一些文件,这些文件在新的存储库中命名相同,但几乎没有类似的行配置.ac,生成文件.am更不用说了自述文件新闻。起初我认为保留进入新项目的所有线路的历史会很好,但这是一个主观判断。让我想到一个更简单的方法的是,对于新的存储库来说,贡献者历史记录和属性会非常奇怪:Guile-GnuTLS是否应该将数千次提交的工作归因于configure.ac,而这与Guile无关?应该提到写这篇文章的人是Guile-GnuTLS的贡献者吗?我认为不是。

下一步是获得合理的GitLab CI/CD管道以确保项目建立在免费GNU/Linux发行版喜欢特里斯克尔PureOS(纯操作系统)以及常见的非自由分布,如Debian公司费多拉覆盖基于dpkg和rpm的分发。我包含的构建基于阿尔卑斯山ArchLinux此外,因为它们往往会引发其他可移植性问题。我希望有GNU指南docker图像也可用于在该平台上进行简单测试。这个GitLab CI/CD规则对于这样的项目来说相当简单。

为了让事情顺利进行,我将结果标记为第3.7.9版并发布了Guile-GnuTLS的GitLab发布页面其中包括在我的笔记本电脑上手动上传的OpenPGP签名源tarball。这些tarball的URL不太好用,自动发现新版本似乎不可靠,但我不知道有更好的方法。

为了完成这个项目,我提出了一个GnuTLS合并请求从GnuTLS核心中删除所有与Guile相关的部件。

再次做一些与GnuTLS相关的工作感觉很好,这是很久以前的事了,所以感谢您给我这个机会。想法还是评论?快乐黑客!