14 种可以在古老的 32 位计算机上使用的 Linux 发行版

Summary: 如果你一直关注最新的 Linux 发行版，那么你一定已经注意到，大多数流行的 Linux 发行版 已经终止了 32 位支持。

如果你一直关注最新的 [Linux 发行版](https://itsfoss.com/what-is-linux-distribution/)，那么你一定已经注意到，[大多数流行的 Linux 发行版](https://itsfoss.com/best-linux-distributions/) 已经终止了 32 位支持。Arch Linux、Ubuntu、Fedora，每一个都已经放弃了对这种较旧架构的支持。

但是，如果你拥有仍然需要再利用的老式硬件，或者想将其用于某些用途，该怎么办？不用担心，你的 32 位系统还有一些选择。

在本文中，我试图汇编一些最好的 Linux 发行版，这些发行版将在未来几年继续支持 32 位平台。

### 仍提供 32 位支持的最佳 Linux 发行版

![](/data/attachment/album/202104/24/144407nxzxwwy5lnhxg7iq.png)

此列表与 [我们之前的支持旧笔记本电脑的 Linux 发行版列表](https://itsfoss.com/lightweight-linux-beginners/) 略有不同。即使是 64 位计算机，如果是在 2010 年之前发布的，那么也可以认为它们是旧的。这就是为什么其中列出的一些建议包括现在仅支持 64 位版本的发行版的原因。

根据我的知识和认知，此处提供的信息是正确的，但是如果你发现有误，请在评论部分让我知道。

在继续之前，我认为你知道 [如何检查你拥有的是否是 32 位或 64 位计算机](https://itsfoss.com/32-bit-64-bit-ubuntu/)。

#### 1、Debian

![图片来源: mrneilypops / Deviantart](/data/attachment/album/202104/24/144408xx2vp3xa4y6val3m.png)

对于 32 位系统，[Debian](https://www.debian.org/) 是一个绝佳的选择，因为他们的最新的稳定版本仍然支持它。在撰写本文时，最新的稳定发行版 **Debian 10 “buster”** 提供了 32 位版本，并一直支持到 2024 年。

如果你是 Debian 的新手，值得一提的是，你可以在 [官方 Wiki](https://wiki.debian.org/FrontPage) 上获得有关其所有内容的可靠文档。因此，上手应该不是问题。

你可以浏览 [可用的安装程序](https://www.debian.org/releases/buster/debian-installer/) 进行安装。但是，在开始之前，除了 [安装手册](https://www.debian.org/releases/buster/installmanual) 外，我建议你参考 [安装 Debian 之前要记住的事情](https://itsfoss.com/before-installing-debian/) 列表。

最低系统要求：

* 512 MB 内存
* 10 GB 磁盘空间
* 1 GHz 处理器（奔腾 4 或同等水平）

#### 2、Slax

![](/data/attachment/album/202104/24/144410y0ygk210l4kgf1kl.jpg)

如果你只是想快速启动设备以进行一些临时工作，[Slax](https://www.slax.org) 是一个令人印象深刻的选择。

它基于 Debian，但它通过 USB 设备或 DVD 运行旨在成为一种便携且快速的选项。你可以从他们的网站免费下载 32 位 ISO 文件，或购买预装有 Slax 的可擦写 DVD 或加密的闪存盘。

当然，这并不是要取代传统的桌面操作系统。但是，是的，你确实获得了以 Debian 为基础的 32 位支持。

最低系统要求：

* 内存：128MB（离线使用）/ 512MB（用于网页浏览器使用）
* CPU: i686 或更新版本

#### 3、AntiX

![图片来源: Opensourcefeed](/data/attachment/album/202104/24/144412rn9rlfteeriol6lq.jpg)

[AntiX](https://antixlinux.com) 是另一个令人印象深刻的基于 Debian 的发行版。AntiX 是众所周知的无 systemd 发行版，该发行版侧重于性能，是一个轻量级的系统。

它完全适合于所有老式的 32 位系统。它只需要低至 256 MB 内存和 2.7 GB 存储空间。不仅易于安装，而且用户体验也是针对新手和有经验的用户的。

你应该可以得到基于 Debian 的最新稳定分支的最新版本。

最低系统要求：

* 内存：256 MB 的内存
* CPU：奔腾 3 系统
* 磁盘空间：5GB 的驱动器空间

#### 4、openSUSE

![](/data/attachment/album/202104/24/144412yizss33g3ntnvzds.png)

[openSUSE](https://www.opensuse.org/) 是一个独立的 Linux 发行版，也支持 32 位系统。实际上最新的常规版本（Leap）不提供 32 位镜像，但滚动发行版本（Tumbleweed）确实提供了 32 位镜像。

如果你是新手，那将是完全不同的体验。但是，我建议你仔细阅读 [为什么要使用 openSUSE 的原因](https://itsfoss.com/why-use-opensuse/)。

它主要面向开发人员和系统管理员，但也可以将其用作普通桌面用户。值得注意的是，openSUSE 不意味在老式硬件上运行，因此必须确保至少有 2 GB 内存、40+ GB 存储空间和双核处理器。

最低系统要求：

* 奔腾 4 1.6 GHz 或更高的处理器
* 1GB 物理内存
* 5 GB 硬盘

#### 5、Emmabuntüs

![](/data/attachment/album/202104/24/144414wv223i9qodii1uiz.png)

[Emmanbuntus](https://emmabuntus.org/) 是一个有趣的发行版，旨在通过 32 位支持来延长硬件的使用寿命，以减少原材料的浪费。作为一个团体，他们还参与向学校提供计算机和数字技术的工作。

它提供了两个不同的版本，一个基于 Ubuntu，另一个基于 Debian。如果你需要更长久的 32 位支持，则可能要使用 Debian 版本。它可能不是最好的选择，但是它具有许多预配置的软件来简化 Linux 学习体验，并提供 32 位支持，如果你希望在此过程中支持他们的事业，那么这是一个相当不错的选择。

最低系统要求：

* 512MB 内存
* 硬盘驱动器：2GB
* 奔腾处理器或同等配置

#### 6、NixOS

![Nixos KDE Edition ](/data/attachment/album/202104/24/144416g1fs60396227zbh9.jpg)

[NixOS](https://nixos.org/) 是另一个支持 32 位系统的独立 Linux 发行版。它着重于提供一个可靠的系统，其中程序包彼此隔离。

这可能不是直接面向普通用户，但它是一个 KDE 支持的可用发行版，具有独特的软件包管理方式。你可以从其官方网站上了解有关其 [功能](https://nixos.org/features.html) 的更多信息。

最低系统要求：

* 内存：768 MB
* 8GB 磁盘空间
* 奔腾 4 或同等水平

#### 7、Gentoo Linux

![](/data/attachment/album/202104/24/144417tlp4l6zyssy7tpjp.png)

如果你是经验丰富的 Linux 用户，并且正在寻找 32 位 Linux 发行版，那么 [Gentoo Linux](https://www.gentoo.org) 应该是一个不错的选择。

如果需要，你可以使用 Gentoo Linux 的软件包管理器轻松配置、编译和安装内核。不仅限于众所周知的可配置性，你还可以在较旧的硬件上运行而不会出现任何问题。

即使你不是经验丰富的用户，也想尝试一下，只需阅读 [安装说明](https://www.gentoo.org/get-started/)，就可以大胆尝试了。

最低系统要求：

* 256MB 内存
* 奔腾 4 或 AMD 的同类产品
* 2.5 GB 磁盘空间

#### 8、Devuan

![](/data/attachment/album/202104/24/144418jtl96z167bnjq5nn.jpg)

[Devuan](https://www.devuan.org) 是另一种无 systemd 的发行版。从技术上讲，它是 Debian 的一个分支，只是没有 systemd ，并鼓励 [初始化系统自由](https://www.devuan.org/os/init-freedom)。

对于普通用户来说，它可能不是一个非常流行的 Linux 发行版，但是如果你想要一个无 systemd 的发行版和 32 位支持，Devuan 应该是一个不错的选择。

最低系统要求：

* 内存：1GB
* CPU：奔腾 1.0GHz

#### 9、Void Linux

![](/data/attachment/album/202104/24/144419dg79re9hz707z2ea.jpg)

[Void Linux](https://voidlinux.org/) 是由志愿者独立开发的有趣发行版。它旨在成为一个通用的操作系统，同时提供稳定的滚动发布周期。它以 runit 作为初始化系统替代 systemd，并为你提供了多个 [桌面环境](https://itsfoss.com/best-linux-desktop-environments/) 选择。

它具有非常令人印象深刻的最低需求规格，只需 96 MB 的内存配以奔腾 4 或等同的芯片。试试看吧！

最低系统要求：

* 96MB 内存
* 奔腾 4 或相当的 AMD 处理器

#### 10、Q4OS

![](/data/attachment/album/202104/24/144420m5yllttaz6aysxoa.jpg)

[Q4OS](https://q4os.org/index.html) 是另一个基于 Debian 的发行版，致力于提供极简和快速的桌面用户体验。它也恰好是我们的 [最佳轻量级 Linux 发行版](https://itsfoss.com/lightweight-linux-beginners/) 列表中的一个。它的 32 位版本具有 [Trinity 桌面](https://en.wikipedia.org/wiki/Trinity_Desktop_Environment)，你可以在 64 位版本上找到 KDE Plasma 支持。

与 Void Linux 类似，Q4OS 可以运行在至低 128 MB 的内存和 300 MHz 的 CPU 上，需要 3 GB 的存储空间。对于任何老式硬件来说，它应该绰绰有余。因此，我想说，你绝对应该尝试一下！

要了解更多信息，你还可以查看 [我们对 Q4OS 的点评](https://itsfoss.com/q4os-linux-review/)。

Q4OS 的最低要求：

* 内存：128MB（Trinity 桌面）/ 1GB（Plasma 桌面）
* CPU：300 MHz（Trinity 桌面）/ 1 GHz（Plasma 桌面）
* 存储空间：5GB（Trinity 桌面）/3GB（Plasma 桌面）

#### 11、MX Linux

![](/data/attachment/album/202104/24/144421px5f0glsgfkgu6r8.jpg)

如果有一个稍微不错的配置（不完全是老式的，而是旧的），对于 32 位系统，我个人推荐 [MX Linux](https://mxlinux.org/)。它也恰好是适合各种类型用户的 [最佳 Linux 发行版](https://itsfoss.com/best-linux-distributions/) 之一。

通常，MX Linux 是基于 Debian 的出色的轻量级和可定制的发行版。你可以选择 KDE、XFce 或 Fluxbox（这是他们自己为旧硬件设计的桌面环境）。你可以在他们的官方网站上找到更多关于它的信息，并尝试一下。

最低系统要求：

* 1GB 内存（建议使用 2GB，以便舒适地使用）
* 15GB 的磁盘空间（建议 20GB）

#### 12、Linux Mint Debian Edtion

![](/data/attachment/album/202104/24/144423d491sx24d14ws468.jpg)

[基于 Debian 的 Linux Mint](https://www.linuxmint.com/download_lmde.php)？为什么不可以呢？

你可以得到同样的 Cinnamon 桌面体验，只是不基于 Ubuntu。它和基于 Ubuntu 的 Linux Mint 一样容易使用，一样可靠。

不仅仅是基于 Debian，你还可以得到对 64 位和 32 位系统的支持。如果你不想在 32 位系统上使用一个你从未听说过的 Linux 发行版，这应该是一个不错的选择。

最低系统要求：

* 1GB 内存（建议使用 2GB，以便舒适地使用）
* 15GB 的磁盘空间（建议 20GB）

#### 13、Sparky Linux

![](/data/attachment/album/202104/24/144425p5yzmktoveo5cfie.jpg)

[Sparky Linux](https://sparkylinux.org/download/stable/) 是 [为初学者定制的最好的轻量级 Linux 发行版](https://itsfoss.com/lightweight-linux-beginners/) 之一。它很容易定制，而且资源占用很少。

它可以根据你的要求提供不同的版本，但它确实支持 32 位版本。考虑到你想为你的旧电脑买点东西，我建议你看看它的 MinimalGUI 版本，除非你真的需要像 Xfce 或 LXQt 这样成熟的桌面环境。

最低系统要求：

* 内存：512 MB
* CPU：奔腾 4，或 AMD Athlon
* 磁盘空间：2GB（命令行版），10GB（家庭版），20GB（游戏版）

#### 14、Mageia

![](/data/attachment/album/202104/24/144426mez8xeiieexepqxe.jpg)

作为 [Mandriva Linux](https://en.wikipedia.org/wiki/Mandriva_Linux) 的分支，[Mageia Linux](https://www.mageia.org/en/) 是一个由社区推动的 Linux 发行版，支持 32 位系统。

通常情况下，你会注意到每年都有一个重大版本。他们的目的是贡献他们的工作，以提供一个自由的操作系统，这也是潜在的安全。对于 32 位系统来说，它可能不是一个流行的选择，但它支持很多桌面环境（如 KDE Plasma、GNOME），如果你需要，你只需要从它的软件库中安装它。

你应该可以从他们的官方网站上得到下载桌面环境特定镜像的选项。

最低系统要求：

* 512MB 内存（推荐 2GB）
* 最小安装需 5GB 存储空间（常规安装 20GB）
* CPU：奔腾4，或 AMD Athlon

### 荣誉提名：Funtoo & Puppy Linux

[Funtoo](https://www.funtoo.org/Welcome) 是基于 Gentoo 的由社区开发的 Linux 发行版。它着重于为你提供 Gentoo Linux 的最佳性能以及一些额外的软件包，以使用户获得完整的体验。有趣的是，该开发实际上是由 Gentoo Linux 的创建者 Daniel Robbins 领导的。

[Puppy Linux](http://puppylinux.com/) 是一个很小的 Linux 发行版，除了基本的工具，几乎没有捆绑的软件应用。如果其他选择都不行，而你又想要最轻量级的发行版，Puppy Linux 可能是一个选择。

当然，如果你不熟悉 Linux，这两个可能都不能提供最好的体验。但是，它们确实支持 32 位系统，并且可以在许多较旧的 Intel/AMD 芯片组上很好地工作。可以在它们的官方网站上探索更多的信息。

### 总结

我将列表重点放在基于 Debian 的发行版和一些独立发行版上。但是，如果你不介意长期支持条款，而只想获得一个支持 32 位的镜像，也可以尝试使用任何基于 Ubuntu 18.04 的发行版（或任何官方版本）。

在撰写本文时，它们只剩下几个月的软件支持。因此，我避免将其作为主要选项提及。但是，如果你喜欢基于 Ubuntu 18.04 的发行版或其它任何版本，可以选择 [LXLE](https://www.lxle.net/)、[Linux Lite](https://www.linuxliteos.com)、[Zorin Lite 15](https://zorinos.com/download/15/lite/32/) 及其他官方版本。

即使大多数基于 Ubuntu 的现代桌面操作系统都放弃了对 32 位的支持。你仍然有很多选项可以选择。

在 32 位系统中更喜欢哪一个？在下面的评论中让我知道你的想法。

---

via: <https://itsfoss.com/32-bit-linux-distributions/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | 财务软件 bug 导致数百人被错误定罪

Summary: 更多：• IBM 澄清：倡导和鼓励员工以任何形式参与开源项目 • Ubuntu 21.04 性能有所提升，但是仍不及英特尔的 Clear Linux

![](/data/attachment/album/202104/24/180357dd0wadpavi5xxr05.jpg)

### 财务软件 bug 导致数百人被错误定罪

![](/data/attachment/album/202104/24/175930bey59g7yehz13ep3.jpg)

英国邮政局从 1999 年开始使用存在 bug 的 Horizon 管理财务。Horizon 由日本富士通公司开发，它的早期版本被发现存在致命缺陷，会让员工看起来窃取了数万英镑。因为邮局顽固地坚持认为该软件可以信任，这导致来自 Horizon 的证据成功起诉了 736 名邮政工作人员，有人因此被关到监狱，生活被彻底改变。而据前开发者透露的信息，富士通公司[早就知道它的软件存在问题](https://www.computerweekly.com/news/252496560/Fujitsu-bosses-knew-about-Post-Office-Horizon-IT-flaws-says-insider)。

英国法官[洗清了 39 名前邮政工作人员的罪名](https://www.bbc.com/news/business-56859357)，这起丑闻被认为是英国最大规模的司法不公案。

当软件吞噬了世界，很多人的命运就被软件所左右。

### IBM 澄清：倡导和鼓励员工以任何形式参与开源项目

![](/data/attachment/album/202104/24/180003fvlg6lege550m2gz.jpg)

本周早些时候出现了一条颇令人意外的 Linux 内核的提交，要求将 IBM 的一位工程师名字从 IBM Power SR-IOV 虚拟网卡驱动程序的维护者清单中[除名](https://www.phoronix.com/scan.php?page=news_item&px=IBM-Employee-100p-Time)。因为他的上级经理不允许该员工以其个人 Gmail 账号提交内核贡献，“作为 IBM 员工，你不被允许以任何形式使用你的 Gmail 帐号参与到 VNIC 中。你不被允许使用你的个人电子邮件帐号作为‘爱好’。”

这一事件令开源社区错愕，与大家印象中的 IBM 完全不同。IBM 事后官方发表了相反的澄清：“IBM 提倡并鼓励参与 Linux 社区，无论使用的是 IBM 电子邮件 ID 还是个人电子邮件 ID”。IBM 开放技术副总裁 Todd Moore [解释](https://www.phoronix.com/scan.php?page=news_item&px=IBM-Open-Source-Leisure-Work)说：“这是一个一次性的分歧，不应该公开，因为有内部的准则来解决它。通常我们的贡献者会有一个个人 GitHub ID 和一个 IBM GitHub ID。我们使用工具来跟踪这两个 ID 下的贡献，以确保每个人都能在我们的表彰计划中获得荣誉。”

总算是不错的进展，希望这只是误会，而不是某种新的战略。

### Ubuntu 21.04 性能有所提升，但是仍不及英特尔的 Clear Linux

![](/data/attachment/album/202104/24/180022vrmdd98mskoduz58.jpg)

据 Phoronix [测评](https://www.phoronix.com/scan.php?page=article&item=ubuntu-2104-clear&num=1)，Ubuntu 21.04 在性能上总体上领先于 Ubuntu 20.10 和 20.04 LTS。Ubuntu 21.04 采用了 Linux 5.11 内核和其它的一些优化，其性能状况良好。

在近 100 项测试中，Ubuntu 21.04 总体上比 Ubuntu 20.10 快 4%，而英特尔的 Clear Linux 比 Ubuntu 21.04 有 8% 的优势。

看来果然是 CPU 厂商更清楚如何发挥他们的硬件性能啊，不过似乎英特尔进来对 Clear Linux 的关注不多了。


Arch Linux 中的引导式安装程序是迈向正确的一步

>
> 在 Arch ISO 中加入一个可选的引导式安装程序，对新手和高级用户都有好处。
>
>
>

![](/data/attachment/album/202104/25/103418idzgzxwco47s2mdu.png)

20 年来，Arch Linux 为用户提供了一个完全定制、独特的系统。这些年来，它以牺牲用户友好性为代价，赢得了在定制方面独有的声誉。

作为滚动发行版本，Arch Linux 不提供任何固定发行版本，而是每月更新一次。但是，如果你在最近几周下载了 Arch Linux，那么你很可能已经注意到了一个新的附加功能：archinstall。它使 Arch Linux 更加易于安装。

![](/data/attachment/album/202104/25/103419l8to8ybzl6oot68t.png)

今天，我将探讨 archinstall 的发布对未来的 Arch Linux 项目和发行版意味着什么。

### Arch Linux 新的发展方向？

![](/data/attachment/album/202104/25/103420xpjlpo7tvvl8vr7o.png)

尽管很多人对此感到惊讶，但默认情况下包含官方安装程序实际上是非常明智的举动。这意味着 Arch Linux 的发展方向发生变化，即在保留使其知名的定制性同时更加侧重用户的易用性。

在该安装程序的 GitHub 页面上有这样的描述：

>
> “引导性安装程序会给用户提供一个友好的逐步安装方式，但是关键在于这个安装程序是个选项，它是可选的，绝不会强迫用户使用其进行安装。”
>
>
>

这意味着新的安装程序不会影响高级用户，同时也使得其可以向更广泛的受众开放，在这一改动所带来的许多优点之中，一个显著的优点即是：更广泛的用户。

更多的用户意味着对项目的更多支持，不管其是通过网络捐赠或参与 Arch Linux 的开发，随着这些项目贡献的增加，不管是新用户还是有经验的用户的使用体验都会得到提升。

### 这必然要发生

回顾过去，我们可以看到安装介质增加了许多对新用户有所帮助的功能。这些示例包括 pacstrap（一个安装基本系统的工具）和 reflector（查找最佳 pacman 镜像的工具）。

另外，多年来，用户一直在追求使用脚本安装的方法，新安装程序允许了用户使用安装脚本。它能够使用 Python 编写脚本，这使得管理员的部署更加容易，成为一个非常有吸引力的选择。

### 更多可定制性（以某种方式？）

尽管这看上去可能有些反直觉，但是这个安装程序实际上能够增进 Arch Linux 的可定制性。当前，Arch Linux 定制性的最大瓶颈是用户的技术水平，而这一问题能够通过 archinstall 解决。

有了新的安装程序，用户不需要掌握创建完美开发环境的技巧，安装程序可以帮助用户完成这些工作，这提供了广泛的自定义选项，是普通用户难以实现的。

### 总结

有了这一新功能，Arch Linux 似乎正在向着“用户友好”这一软件设计哲学靠近，新安装程序为新手和高级用户提供了广泛的好处。其中包括更广泛的定制性和更大的用户社区。

总而言之，这个新变动对整个 Arch Linux 社区都会产生积极的影响。

你对这个 Arch Linux 安装程序怎么看？是否已经尝试过它了呢？

---

via: <https://news.itsfoss.com/arch-new-guided-installer/>

作者：[Jacob Crume](https://news.itsfoss.com/author/jacob/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Kevin3599](https://github.com/Kevin3599) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


11 个可以部署在 Linux 服务器上的开源论坛软件

Discourse +1

test

>
> 是否想要建立社区论坛或客户支持门户站点？以下是一些可以在服务器上部署的最佳开源论坛软件。
>
>
>

就像我们的论坛一样，重要的是建立一个让志趣相投的人可以讨论，互动和寻求支持的平台。

论坛为用户（或客户）提供了一个空间，让他们可以接触到在互联网上大多数情况下不容易找到的东西。

如果你是一家企业，则可以聘请开发人员团队并按照自己的方式建立自己的论坛，但这会增加大量预算。

幸运的是，有几个令人印象深刻的开源论坛软件，你只需要将其部署在你的服务器上就万事大吉了！在此过程中，你将节省很多钱，但仍能获得所需的东西。

在这里，我列出了可以在 Linux 服务器上安装的最佳开源论坛软件列表。

### 建立社区门户的最佳开源论坛软件

![](/data/attachment/album/202104/25/174117o4px4seixfsm8sss.png)

如果你尚未建立过网站，则在部署论坛之前，可能需要看一下 [某些开源网站创建工具](https://itsfoss.com/open-source-cms/)。

**注意：** 此列表没有特定的排名顺序。

#### 1、Discourse（现代、流行）

![](/data/attachment/album/202104/25/174119uiqsuqike73sqisk.jpg)

[Discourse](https://www.discourse.org/) 是人们用来部署配置讨论平台的最流行的现代论坛软件。实际上，[It's FOSS 社区](https://itsfoss.community/) 论坛使用了 Discourse 平台。

它提供了我所知道的大多数基本功能，包括电子邮件通知、审核工具、样式自定义选项，Slack/WordPress 等第三方集成等等。

它的自托管是完全免费的，你也可以在 [GitHub](https://github.com/discourse/discourse) 上找到该项目。如果你要减少将其部署在自托管服务器上的麻烦，可以选择 [Discourse 提供的托管服务](https://discourse.org/buy)（肯定会很昂贵）。

#### 2、Talkyard（受 Discourse 和 StackOverflow 启发）

![](/data/attachment/album/202104/25/174120ra443j4g0j4djjmm.jpg)

[Talkyard](https://www.talkyard.io/) 是完全免费使用的，是一个开源项目。它看起来很像 Discourse，但是如果你深入了解一下，还是有区别的。

你可以在这里获得 StackOverflow 的大多数关键功能，以及在论坛平台上期望得到的所有基本功能。它可能不是一个流行的论坛解决方案，但是如果你想要类似于 Discourse 的功能以及一些有趣的功能，那么值得尝试一下。

你可以在他们的 [GitHub 页面](https://github.com/debiki/talkyard) 中进一步了解它。

#### 3、Forem （一种独特的社区平台，正在测试中）

![](/data/attachment/album/202104/25/174122jvvwqidbdc7dmaaz.png)

你可能以前没有听说过 [Forem](https://www.forem.com/)，但它支持了 [dev.to](https://dev.to/)（这是一个越来越受欢迎的开发者社区网站）。

它仍然处于测试阶段，所以你或许不会选择在生产服务器上实验。但是，你可以通过在他们的官方网站上填写一个表格并与他们取得联系，让他们为你托管。

尽管没有官方的功能列表来强调所有的东西，但如果我们以 [dev.to](https://dev.to/) 为例，你会得到许多基本的特性和功能，如社区列表、商店、帖子格式化等。你可以在他们的 [公告帖子](https://dev.to/devteam/for-empowering-community-2k6h) 中阅读更多关于它提供的内容，并在 [GitHub](https://github.com/forem/forem) 上探索该项目。

#### 4、NodeBB（现代化、功能齐全）

![](/data/attachment/album/202104/25/174124wpjiljdqtyy8jjgy.jpg)

[NodeBB](https://nodebb.org/) 是一个基于 [Node.js](https://nodejs.org/en/) 的开源论坛软件。它的目标是简单、优雅和快速。首先，它面向有托管计划的组织和企业。但是，你也可以选择自己托管它。

你还可以获得实时本地分析功能，以及聊天和通知支持。它还提供一个 API，可以将其与你的现有产品集成。它还支持审核工具和打击垃圾邮件的工具。

你可以获得一些开箱即用的第三方集成支持，例如 WordPress、Mailchimp 等。

请在他们的 [GitHub 页面](https://github.com/NodeBB/NodeBB) 或官方网站上可以进一步了解它。

#### 5、Vanilla 论坛（面向企业）

![](/data/attachment/album/202104/25/174126t9f4nugdfdd4gq3f.png)

[Vanilla 论坛](https://vanillaforums.com/en/) 主要是一款以企业为中心的论坛软件，它的基本功能是为你的平台打造品牌，为客户提供问答，还可以对帖子进行投票。

用户体验具有现代的外观，并且已被像 EA、Adobe 和其他一些大公司使用。

当然，如果你想尝试基于云的 Vanilla 论坛（由专业团队管理）以及对某些高级功能的访问权，可以随时申请演示。无论哪种情况，你都可以选择社区版，该社区版可以免费使用大多数最新功能，但需要自己托管和管理。

你可以在他们的官方网站和 [GitHub 页面](https://github.com/Vanilla) 上进一步了解它。

#### 6、bbPress （来自 WordPress）

![](/data/attachment/album/202104/25/174127okzz3mscshc5hhqe.jpg)

[bbPress](https://bbpress.org/) 是一个可靠的论坛软件，由 WordPress 的创建者建立。旨在提供一个简单而迅速的论坛体验。

用户界面看起来很老旧，但易于使用，它提供了你通常在论坛软件中需要的基本功能。审核工具很好用，易于设置。你可以使用现有的插件扩展功能，并从几个可用的主题中进行选择以调整论坛的外观。

如果你只想要一个没有花哨功能的简单论坛平台，bbPress 应该是完美的。你也可以查看他们的 [GitHub 页面](https://github.com/bbpress) 了解更多信息。

#### 7、phpBB（经典论坛软件）

![](/data/attachment/album/202104/25/174130oo4p0qf0nbvbp1gb.png)

如果你想要传统的论坛设计，只想要基本功能，则 [phpBB](https://www.phpbb.com/) 软件是一个不错的选择。当然，你可能无法获得最佳的用户体验或功能，但是作为按传统设计的论坛平台，它是实用的并且非常有效。

尤其是，对于习惯使用传统方式的用户而言，这将是一种简单而有效的解决方案。

不仅仅是简单，而且在一般的托管供应商那里，它的设置也是非常容易的。在任何共享主机平台上，你都能获得一键式安装功能，因此也不需要太多的技术知识来进行设置。

你可以在他们的官方网站或 [GitHub 页面](https://github.com/phpbb/phpbb) 上找到更多有关它的信息。

#### 8、Simple Machines 论坛（另一个经典）

![](/data/attachment/album/202104/25/174131l71c21ty90237y7q.jpg)

与 phpBB 类似，[Simple Machines 论坛](https://www.simplemachines.org/) 是另一种基本（或简单）的论坛。很大程度上你可能无法自定义外观（至少不容易），但是默认外观是干净整洁的，提供了良好的用户体验。

就个人而言，相比 php BB 我更喜欢它，但是你可以前往他们的 [官方网站](https://www.simplemachines.org/) 进行进一步的探索。同样，你可以使用一键安装方法在任何共享托管服务上轻松安装 Simple Machines 论坛。

#### 9、FluxBB（古典）

![](/data/attachment/album/202104/25/174133dvvbmssebku0elsj.jpg)

[FluxBB](https://fluxbb.org/) 是另一个简单、轻量级的开源论坛。与其他的相比，它可能维护的不是非常积极，但是如果你只想部署一个只有很少几个用户的基本论坛，则可以轻松尝试一下。

你可以在他们的官方网站和 [GitHub 页面](https://github.com/fluxbb/fluxbb/) 上找到更多有关它的信息。

#### 10、MyBB（不太流行，但值得看看）

![](/data/attachment/album/202104/25/174135pdj0zgfx0fl62b02.png)

[MyBB](https://mybb.com/) 是一款独特的开源论坛软件，它提供多种样式，并包含你需要的基本功能。

从插件支持和审核工具开始，你将获得管理大型社区所需的一切。它还支持类似于 Discourse 和同类论坛软件面向个人用户的私人消息传递。

它可能不是一个流行的选项，但是它可以满足大多数用例，并且完全免费。你可以在 [GitHub](https://github.com/mybb/mybb) 上得到支持和探索这个项目。

#### 11、Flarum（测试版）

![](/data/attachment/album/202104/25/174136jn7776199y2mdc6s.png)

如果你想要更简单和独特的论坛，请看一下 [Flarum](https://flarum.org/)。它是一款轻量级的论坛软件，旨在以移动为先，同时提供快速的体验。

它支持某些第三方集成，也可以使用扩展来扩展功能。就我个人而言，它看起来很漂亮。我没有机会尝试它，你可以看一下它的 [文档](https://docs.flarum.org/)，可以肯定它具有论坛所需的所有必要功能的特征。

值得注意的是 Flarum 是相当新的，因此仍处于测试阶段。你可能需要先将其部署在测试服务器上测试后，再应用到生产环境。请查看其 [GitHub 页面](https://github.com/flarum) 了解更多详细信息。

#### 补充：Lemmy（更像是 Reddit 的替代品，但也是一个不错的选择）

![](/data/attachment/album/202104/25/174138mdmimmnbmhdnipae.png)

一个用 [Rust](https://www.rust-lang.org/) 构建的 Reddit 的联盟式论坛的替代品。它的用户界面很简单，有些人可能觉得它不够直观，无法获得有吸引力的论坛体验。

其联盟网络仍在构建中，但如果你想要一个类似 Reddit 的社区平台，你可以很容易地将它部署在你的 Linux 服务器上，并制定好管理规则、版主，然后就可以开始了。它支持跨版发帖（参见 Reddit），以及其他基本功能，如标签、投票、用户头像等。

你可以通过其 [官方文档](https://lemmy.ml/docs/about.html) 和 [GitHub 页面](https://github.com/LemmyNet/lemmy) 探索更多信息。

### 总结

大多数开源论坛软件都为基本用例提供了几乎相同的功能。如果你正在寻找特定的功能，则可能需要浏览其文档。

就个人而言，我推荐 Discourse。它很流行，外观现代，拥有大量的用户基础。

你认为最好的开源论坛软件是什么？我是否错过了你的偏爱？在下面的评论中让我知道。

---

via: <https://itsfoss.com/open-source-forum-software/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


明尼苏达大学 Linux 内核“伪君子提交”研究人员发表公开信

Summary: 此事件中的主要负责人 Kangjie Lu 助理教授昨日发表了一篇英文公开信进行澄清，我们将其翻译并点评如下

shamed on them.

how dare you？

![](/data/attachment/album/202104/25/190414j1iyhrrhksos7iip.jpg)

就如我们之前[报道](/article-13320-1.html)的，因为对 Linux 内核提交了一些作用不明的补丁，并疑似以 Linux 内核作为其研究论文的试验场，Linux 内核社区决定撤销该大学所有近 200 个补丁贡献，并将明尼苏达大学“拉黑”。

此事件曝光并发酵之后，引来了全球技术社区的大量关注、抨击和一些反思。之后，明尼苏达大学计算机科学系表示暂停该研究项目，而陷入此事件的三位研究人员更是一时之间处于风口浪尖，招致了大量批评甚至谩骂。

此事件中的主要负责人 Kangjie Lu 助理教授昨日发表了一篇[英文公开信](https://lore.kernel.org/lkml/CAK8KejpUVLxmqp026JY7x5GzHU2YJLPU8SzTZUNXU2OXC70ZQQ@mail.gmail.com/T/#u)进行澄清，我们将其翻译并点评如下，如有表达不到位或误解之处，敬请参照[原文](https://lore.kernel.org/lkml/CAK8KejpUVLxmqp026JY7x5GzHU2YJLPU8SzTZUNXU2OXC70ZQQ@mail.gmail.com/T/#u)。

这封信是由此事件中三位研究人员联合署名发表的：

>
> Kangjie Lu, Qiushi Wu, and Aditya Pakki
> University of Minnesota
>
>
>

其中 Kangjie Lu 是负责该项目的助理教授，而 Qiushi Wu 和 Aditya Pakki 都是 Lu 助理教授带的博士生，其中 Qiushi Wu 是那篇论文《[论通过伪装提交在开源软件中隐蔽地引入漏洞的可行性](https://github.com/QiushiWu/QiushiWu.github.io/blob/main/papers/OpenSourceInsecurity.pdf)》的一作，而 Aditya Pakki 不是该论文的作者，但是是引发这场争议的补丁提交者。

信件开头首先对 Linux 内核社区致歉：

>
> 亲爱的社区成员：
>
>
> 我们为我们的研究小组对 Linux 内核社区造成的任何伤害真诚地道歉。我们的目标是找出修补过程中的问题以及解决这些问题的方法，我们非常抱歉，在“伪君子提交”论文中使用的方法是不恰当的。正如许多观察家向我们指出的那样，我们犯了一个错误，在进行这项研究之前没有找到咨询社区并获得许可的方法；我们这样做是因为我们知道我们不能向 Linux 的维护者征求许可，否则他们会对伪装者的补丁进行监视。虽然我们的目标是提高 Linux 的安全性，但我们现在明白，让社区成为我们研究的对象，并在社区不知情或未经其许可的情况下浪费其精力审查这些补丁，是对社区的伤害。
>
>
> 我们只想让你知道，我们绝不会故意伤害 Linux 内核社区，也绝不会引入安全漏洞。我们的工作是抱着最好的目的进行的，都是为了寻找和修复安全漏洞。
>
>
>

然后介绍了该研究项目的情况，并进行了澄清：

>
> “伪君子提交”的工作是在 2020 年 8 月进行的；它的目的是提高 Linux 中修补程序的安全性。作为项目的一部分，我们研究了 Linux 打补丁过程中的潜在问题，包括问题的原因和解决这些问题的建议。
>
>
>

按 Lu 助理教授的解释，这个“伪君子提交”的研究已经于 2020 年 12 月结束，并且用于研究而提交的三个补丁也只是在邮件列表讨论中进行的，从未获得进入 Linux 内核的机会。而且，Linux 内核社区是知道这件事的。

>
> * 这项工作并没有在 Linux 代码中引入漏洞。三个不正确的补丁是在 Linux 留言板的交流中讨论和停止的，从未提交到代码中。在提交论文之前，我们向 Linux 社区报告了这项工作的发现和结论（不包括不正确的补丁），收集了他们的反馈，并将其纳入论文中。
>
>
>

Lu 助理教授还提到，这次事件发酵而招致 Linux 内核负责人 GKH 全部撤销的 190 个历史补丁，是和该项目无关的，是出于善意和服务提交的。但是这个事情发展到现在，按照 GKH 的说法，要对这 190 个补丁进行重新审核，不过这个工作是在 GKH 自己的仓库内进行，无论审核结果如何，目前这 190 个补丁并没有在 Linux 主线内核中发生变更。

>
> * 所有其他 190 个被撤销和重新评估的补丁都是作为其它项目的一部分和对社区的服务而提交的；它们与 “伪君子提交”论文无关。
> * 这 190 个补丁是对代码中真正的错误的回应，并且在我们提交时都是正确的 —— 就我们所能辨别的而言。
>
>
>

对于“伪君子提交”所涉及的三个研究性的补丁，正在努力进行披露：

>
> * 我们理解社区希望获得并检查这三个错误的补丁的愿望。这样做会暴露在留言板上对这些补丁做出反应的社区成员的身份。因此，我们正在努力在披露这些补丁之前获得他们的同意。
>
>
>

对于引发这次事件的几个由 Aditya Pakki 提交的补丁，是和这 190 个补丁无关，也和“伪君子提交”研究无关，是另外一个项目所产生的。

>
> * 我们最近在 2021 年 4 月的补丁也不属于“伪君子提交”文件的范围。我们一直在进行一个新的项目，旨在自动识别由其他补丁（不是来自我们）引入的 bug。我们的补丁是为了修复被识别的 bug 而准备和提交的，以遵循责任披露的规则，我们很高兴与 Linux 社区分享这个较新项目的细节。
>
>
>

只是这些补丁看起来质量不佳，按 Aditya Pakki 的说法，“它的灵敏度显然不是很高”。正是由于这些糟糕的补丁，引发了 Linux 内核社区的愤怒，并将其和之前的“伪君子提交”研究联系到一起。

在公开信中，Lu 助理教授等继续认错：

>
> 我们是一个研究小组，其成员致力于改善 Linux 内核的工作。在过去的五年里，我们一直致力于寻找和修补 Linux 的漏洞。过去对修补过程的观察促使我们也研究和解决修补过程本身的问题。目前这一事件在 Linux 社区引起了对我们、研究小组和明尼苏达大学的极大愤怒。我们为我们现在认识到的违反开源社区共同信任的行为无条件地道歉，并为我们的错误行为寻求宽恕。
>
>
>

并请求社区原谅：

>
> 我们寻求从谦逊的角度重建与 Linux 基金会和 Linux 社区的关系，以创建一个基础，我们希望从这个基础上，我们可以再次为我们的共同目标作出贡献，即提高 Linux 软件的质量和安全性。我们将与我们的院系合作，因为他们为寻求在开源项目、同行生产网站和其他在线社区进行研究的师生开发新的培训和支持。我们致力于遵循合作研究的最佳实践，就我们研究项目的性质与社区领导人和成员进行协商，并确保我们的工作不仅符合 IRB（学术伦理委员会） 的要求，而且符合社区在此事件后向我们阐述的期望。
>
>
> 虽然这个问题对我们来说也很痛苦，我们对 Linux 内核社区所承担的额外工作感到由衷的抱歉，但我们从这次事件中吸取了一些关于与开源社区研究的重要教训。我们可以而且会做得更好，我们相信我们在未来还有很多贡献，并将努力工作以重新获得你们的信任。
>
>
>

### 我的看法

这件事到此算是告一段落了，如果这封公开信披露的信息属实，而 Linux 内核社区也愿意接受的话，那不失一个还算美好的结局。

就我个人的感受，Lu 助理教授的这封道歉的公开信，算得上谦卑，或许心中有所委屈，但还是就能道歉的地方都低头道歉了。在这个事件发酵后，我们其实看到了很多对这个研究团队的、对这些研究人员个人的谩骂和指责，鲜少能看到理智而独立的看法——这还仅仅只是中文社区的一个小角落。所以，可以想象身处美国的 Lu 助理教授和他的学生们会招致什么样的压力和语言暴力。

事实上，初看到这个新闻时，我也非常愤怒，也为其中两位研究人员是华人而感觉蒙羞。但是，在我仔细梳理了内核社区的邮件列表对话、综合了各处信源之后，得出的结论和看法，是和这份公开信相似的。也许 Lu 助理教授他们在此事件中有些不当，但内核社区的负责人的处置也或许有点过激。那么，社区是否真正能做到公平公正和公开决策？作为知名领袖和多年的社区元老，个人所做的处置和反应带来的影响可能要比预想的更高，在决策前是否应该三思？

另外，从这个事件中，还反映出的一个情况是，Linux 内核社区的管理和审核，似乎还是人治为主，对于来自外部的恶意或无意的破坏，应该具有更有效的反应机制。

好了，对于这件事，你如何看呢？

### 更新

周六深夜，内核团队的 GKH [回复](https://lore.kernel.org/lkml/YIV+pLR0nt94q0xQ@kroah.com/)说：

>
> 谢谢你的回应。
>
>
> 如你所知，Linux 基金会和 Linux 基金会的技术顾问委员会在周五向贵校提交了一封信，概述了需要采取的具体行动，以便贵组和贵校能够努力重新获得 Linux 内核社区的信任。
>
>
> 在采取这些行动之前，我们不会就这个问题进一步讨论。
>
>
> 谢谢
>
>
>


硬核观察 | 神秘实体 BGP 宣告了大量五角大楼未用 IPv4 空间

Summary: 更多：• Passwordstate 密码管理器遭黑客入侵 • 微软发布 Rust for Windows 预览版

![](/data/attachment/album/202104/25/195303e1ihi550dqt1hy7t.jpg)

### 神秘实体 BGP 宣告了大量五角大楼未用 IPv4 空间

![](/data/attachment/album/202104/25/195312necvnetcxt3eqr28.jpg)

互联网是源自于美国国防部的项目，五角大楼因而控制了大量的 IPv4 地址段。至今五角大楼只使用了很少一部分它控制的地址空间，以至于众多云服务商在其内部网络使用了未用的美国国防部 IPv4 地址段。但在 1 月 20 日，一个神秘实体 AS8003 开始发布 BGP 广播宣告原五角大楼的未用 IPv4 地址段。到 4 月 20 日，它宣布的 IP 地址数量已经达到了 1.75 亿，超过中国电信的 6100 万，超过美国最大 ISP Comcast 的 1 亿。它宣告的 IPv4 空间占到了 IPv4 全球路由表的 [5.7%](https://www.kentik.com/blog/the-mystery-of-as8003/)。AS8003 究竟是谁？本周五，美国国防部的发表声明这是它授权进行的[一个试点项目](https://www.washingtonpost.com/technology/2021/04/24/pentagon-internet-address-mystery/)，旨在评估和防止未经授权使用国防部的 IP 地址空间，以及发现潜在的漏洞。

虽然心里很不平衡，但是毕竟互联网原来就是人家发明的，还好这些年我们都往 IPv6 转了。

### Passwordstate 密码管理器遭黑客入侵

![](/data/attachment/album/202104/25/195324fgf84e4e24ynyyle.jpg)

据[报道](https://arstechnica.com/gadgets/2021/04/hackers-backdoor-corporate-password-manager-and-steal-customer-data/)，黑客攻破了 [Passwordstate](https://www.clickstudios.com.au/passwordstate.aspx) 密码管理器应用程序的更新机制，并在其用户设备（大多数为企业客户）上部署了恶意软件，可能影响到了 2.9 万名企业客户。丹麦安全公司 CSIS 今日发布了针对该供应链恶意软件攻击的分析，指出攻击者迫使 Passwordstate 应用程序下载了另一个恶意的压缩包。在受害者机器上安装后，将会尝试 ping 通远程的命令与控制服务器，而后服务器端会给出特定的响应，比如检索其它有效负载。

使用密码管理器是好，但是密码管理器就成为了关键点，如果密码管理器软件被攻击，那带来的打击可能是毁灭性的。

### 微软发布 Rust for Windows 预览版

![](/data/attachment/album/202104/25/195340l1s4o6gsqg1zohr8.jpg)

有了 [Rust for Windows](https://docs.microsoft.com/en-us/windows/dev-environment/rust/rust-for-windows)，开发人员现在不仅可以在 Windows 上使用 Rust 进行开发，还可以使用 Rust 为 Windows 编写应用程序。Rust for Windows 可以“让你通过 Windows crate 直接和无缝地使用任何 Windows API，你可以像调用另一个 Rust 模块一样调用它们。”

微软寄希望于 Rust 能解决其使用 C++ 带来的大量内存漏洞，可能事情没那么简单。


Fedora Linux 中有 Bug 吗？一起来修复它！

Summary: 本文介绍了 bug 修复过程以及如何确定 bug 优先级。

我觉得Debian Gnu/Linux定期得全套组件蓝光DVD发布方式好一点点，等Fedora能那样发布了，我觉得她是个真的自由开源社区

本文介绍了 bug 修复过程以及如何确定 bug 优先级。

![](/data/attachment/album/202104/26/094553vejbe2w01w1jnu2i.jpg)

软件有 bug。任何复杂系统都无法保证每个部分都能按计划工作。Fedora Linux 是一个 *非常* 复杂的系统，包含几千个包，这些包由全球无数个独立的上游项目创建。每周还有数百个更新。因此，问题是不可避免的。本文介绍了 bug 修复过程以及如何确定 bug 优先级。

### 发布开发过程

作为一个 Linux 发行项目，我们希望为用户提供完善的、一切正常的体验。我们的发布起始于 “Rawhide”。我们在 Rawhide 中集成了所有更新的自由及开源软件的新版本。我们一直在不断改进正在进行的测试和<ruby> 持续集成 <rt>  Continuous Integration </rt></ruby>过程，为了让即使是 Rawhide 也能被冒险者安全使用。可是，从本质来讲，Rawhide 始终有点粗糙。

每年两次，我们把这个粗糙的操作系统先后分支到测试版本、最终版本。当我们这么做时，我们齐心协力地寻找问题。我们在<ruby> 测试日 <rt>  Test Days </rt></ruby>检查特定的区域和功能。制作“<ruby> 候选版本 <rt>  Candidate builds </rt></ruby>”，并根据我们的 [发布验证测试计划](https://fedoraproject.org/wiki/QA:Release_validation_test_plan) 进行检测。然后我们进入<ruby> 冻结状态 <rt>  freeze state </rt></ruby>，只有批准的更改可以并入候选版本。这就把候选版本从持续的开发隔离开来，持续的开发不断并入 Rawhide 中。所以，不会引入新的问题。

在发布过程中许多 bug 被粉碎去除，这些 bug 有大有小。当一切按计划进行时，我们为所有用户提供了按计划发布的崭新的 Fedora Linux 版本。（在过去几年里，我们已经可靠地重复这一动作——感谢每一个为之努力工作的人！）如果确实有问题，我们可以将其标记为<ruby> 发布阻碍 <rt>  release blocker </rt></ruby>。这就意味着我们要等到修复后才能发布。发布阻碍通常代表重大问题，该表达一定会引发对 bug 的关注。

有时，我们遇到的一些问题是持续存在的。可能一些问题已经持续了一两个版本，或者我们还没有达成共识的解决方案。有些问题确实困扰着许多用户，但个别问题并没有达到阻碍发布的程度。我们可以将这些东西标记为<ruby> 阻碍 <rt>  blocker </rt></ruby>。但这会像锤子一样砸下来。阻碍可能导致最终粉碎该 bug，但也可能导致破坏了周围。如果进度落后，所有其它的 bug 修复、改进以及人们一直在努力的功能，都不能到达用户手中。

### 按优先顺序排列 bug 流程

所以，我们有另一种方法来解决烦人的 bug。[按优先顺序排列 bug 流程](https://docs.fedoraproject.org/en-US/program_management/prioritized_bugs/)，与其他方式不同，可以标出导致大量用户不满意的问题。这里没有锤子，更像是聚光灯。与发布阻碍不同，按优先顺序排列 bug 流程没有一套严格定义的标准。每个 bug 都是根据影响范围和严重性来评估的。

一个由感兴趣的贡献者组成的团队帮助策划一个简短列表，上面罗列着需要注意的问题。然后，我们的工作是将问题匹配到能够解决它们的人。这有助于减轻发布过程中的压力，因为它没有给问题指定任何特定的截止时间。理想情况下，我们能在进入测试阶段之前就发现并解决问题。我们尽量保持列表简短，不会超过几个，这样才会真正有重点。这种做法有助于团队和个人解决问题，因为他们知道我们尊重他们捉襟见肘的时间与精力。

通过这个过程，Fedora 解决了几十个严重而恼人的问题，包括从键盘输入故障到 SELinux 错误，再到数千兆字节大小的旧包更新会逐渐填满你的磁盘。但是我们可以做得更多——我们实际上收到的提案没有达到我们的处理能力上限。因此，如果你知道有什么事情导致了长期挫折或影响了很多人，至今没有达成解决方案，请遵循 [按优先顺序排列 bug 流程](https://docs.fedoraproject.org/en-US/program_management/prioritized_bugs/)，提交给我们。

### 你可以帮助我们

邀请所有 Fedora 贡献者参与按优化顺序排列 bug 的流程。评估会议每两周在 IRC 上举办一次。欢迎任何人加入并帮助我们评估提名的 bug。会议时间和地点参见 [日历](https://calendar.fedoraproject.org/base/)。Fedora 项目经理在会议开始的前一天将议程发送到 [triage](https://lists.fedoraproject.org/archives/list/triage%40lists.fedoraproject.org/) 和 [devel](https://lists.fedoraproject.org/archives/list/devel%40lists.fedoraproject.org/) 邮件列表。

### 欢迎报告 bug

当你发现 bug 时，无论大小，我们很感激你能报告 bug。在很多情况下，解决 bug 最好的方式是交给创建该软件的项目。例如，假设渲染数据相机照片的 Darktable 摄影软件出了问题，最好把它带给 Darktable 摄影软件的开发人员。再举个例子，假设 GNOME 或 KDE 桌面环境或组成部分软件出了问题，将这些问题交给这些项目中通常会得到最好的结果。

然而， 如果这是一个特定的 Fedora 问题，比如我们的软件构建或配置或者它的集成方式的问题，请毫不犹豫地 [向我们提交 bug](https://docs.fedoraproject.org/en-US/quick-docs/howto-file-a-bug/)。当你知道有一个问题是我们还没有解决的，也要提交给我们。

我知道这很复杂……最好有一个一站式的地方来处理所有 bug。但是请记住，Fedora 打包者大部分是志愿者，他们负责获取上游软件并将其配置到我们系统中。他们并不总是对他们正在使用的软件的代码有深入研究的专家。有疑问的时候，你可以随时提交一个 [Fedora bug](https://docs.fedoraproject.org/en-US/quick-docs/howto-file-a-bug/)。Fedora 中负责相应软件包的人可以通过他们与上游软件项目的联系提供帮助。

请记住，当你发现一个已通过诊断但尚未得到良好修复的 bug 时，当你看到影响很多人的问题时，或者当有一个长期存在的问题没有得到关注时，请将其提名为高优先级 bug。我们会看以看能做些什么。

*附言：标题中的著名图片当然是来自哈佛大学马克 2 号计算机的日志，这里曾是格蕾丝·赫柏少将工作的地方。但是与这个故事的普遍看法相背，这并不是 “bug” 一词第一次用于表示系统问题——它在工程中已经很常见了，这就是为什么发现一个字面上的 “bug” 作为问题的原因是很有趣的。 #nowyouknow #jokeexplainer*

---

via: <https://fedoramagazine.org/something-bugging-you-in-fedora-linux-lets-get-it-fixed/>

作者：[Matthew Miller](https://fedoramagazine.org/author/mattdm/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[DCOLIVERSUN](https://github.com/DCOLIVERSUN) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | 比特币十日大跌 26%

Summary: 更多：Mozilla 剥离 Pyodide 项目：可以在浏览器中运行的 Python • Linux 5.12 发布，但下一个版本可能会相当庞大

![](/data/attachment/album/202104/26/112731dblw6rt1whz60611.jpg)

### 比特币十日大跌 26%

![](/data/attachment/album/202104/26/112744z6zjbeeorj44zxjb.jpg)

据非小号行情数据，自比特币 2021 年 4 月 14 日涨至 64354 美元大关刷新历史新高后，很快价格便出现逐步回调。第一次大跌出现在 4 月 18 日，一度跌至 54009 美元；第二次大跌则在 4 月 23 日，比特币价格再次从 55000 美元跳水至 47600 美元。十日内，比特币价格已大跌 26%，市值蒸发数千亿美元。其他主流虚拟货币也出现下跌。截至 4 月 25 日18时，以太坊、瑞波币、莱特币等币种，价格均较前段时间的高位下跌逾 10%-20% 不等。

据分析，比特币近期大跌主要是受外部因素影响。有人称“比特币是乌托邦，目前已进入‘自娱自乐’的泡沫最后阶段”。也有人认为，比特币在不依赖任何中心化机构的情况下良好运营了十余年，自然有其内在的技术与价值逻辑，业内应当理性看待比特币的投资价值。

作为比特币的坚定支持者，我是希望过热的比特币价格应该降温一下，按历史轨迹，每次大周期调整幅度要远远高于现在的跌幅。

### Mozilla 剥离 Pyodide 项目：可以在浏览器中运行的 Python

![](/data/attachment/album/202104/26/112802go374e18ee7w4799.jpg)

Pyodide 已经被 Mozilla 剥离出来，成为一个独立的、由社区驱动的项目。Pyodide 由编译成 WebAssembly 的 CPython 3.8 解释器组成，允许 Python 在网页浏览器中运行。[Pyodide 项目](https://pyodide.org/)将在 GitHub 拥有一个[新的家](https://github.com/pyodide)。

Pyodide 可以安装来自 PyPi 的任何 Python 包。Pyodide 还包括一个外部函数接口，可以将 Python 包暴露给 JavaScript，并将浏览器 UI，包括 DOM，暴露给 Python。该项目还使许多 Python 科学包，包括 NumPy、Pandas、Matplotlib、SciPy 和 Scikit-learn，可以在浏览器中运行。

“你已经是一个大孩子了，可以自己生活了”，感觉 Mozilla 孵化出来了很多有趣的项目。

### Linux 5.12 发布，但下一个版本可能会相当庞大

![](/data/attachment/album/202104/26/112820umzm57bh8bd53ma8.jpg)

Linus Torvalds 已经[发布](http://lkml.iu.edu/hypermail/linux/kernel/2104.3/00596.html)了 5.12 版本的 Linux 内核。新版本中：Linux 可以作为 Hyper-V 的[根分区](https://www.theregister.com/2021/02/17/linux_as_root_partition_on_hyper_v/)；对用于物联网设备的管理程序 ACRN 的更多支持；识别博通公司的 VK 加速器，可以将视频转码等工作负载转移到专用设备上。

Linus Torvalds 写道：“尽管多花了一周时间，但这实际上是一个相当小的版本。从 Linux-next 来看，5.13 将会更大。”在 5.13 中会增加对苹果 M1 芯片的支持。


如何在 Ubuntu 中添加指纹登录

Summary: 在桌面 Linux 中，对指纹登录的支持更多需要极客的调整，但 GNOME 和 KDE 已经开始通过系统设置来支持它。

在Ubuntu 16.04及更早版本,已经可以通过fprint实现指纹登录,而且可以用于sudo密码验证,转到GNOME以后虽然还是可以指纹登录,但是却失去了sudo验证功能.另外,不能在指纹登录时同步解锁钥匙环也是一直以来的痛点.

![](/data/attachment/album/202104/26/191530msmenm3ges3kgyet.jpg)

现在很多高端笔记本都配备了指纹识别器。Windows 和 macOS 支持指纹登录已经有一段时间了。在桌面 Linux 中，对指纹登录的支持更多需要极客的调整，但 [GNOME](https://www.gnome.org/) 和 [KDE](https://kde.org/) 已经开始通过系统设置来支持它。

这意味着在新的 Linux 发行版上，你可以轻松使用指纹识别。在这里我将在 Ubuntu 中启用指纹登录，但你也可以在其他运行 GNOME 3.38 的发行版上使用这些步骤。

>
> **前提条件**
>
>
> 当然，这是显而易见的。你的电脑必须有一个指纹识别器。
>
>
> 这个方法适用于任何运行 GNOME 3.38 或更高版本的 Linux 发行版。如果你不确定，你可以[检查你使用的桌面环境版本](https://itsfoss.com/find-desktop-environment/)。
>
>
> KDE 5.21 也有一个指纹管理器。当然，截图看起来会有所不同。
>
>
>

### 在 Ubuntu 和其他 Linux 发行版中添加指纹登录功能

进入 “设置”，然后点击左边栏的 “用户”。你应该可以看到系统中所有的用户账号。你会看到几个选项，包括 “指纹登录”。

点击启用这里的指纹登录选项。

![Enable fingerprint login in Ubuntu](/data/attachment/album/202104/26/191603ykjk2n8g3a2krr34.png)

它将立即要求你扫描一个新的指纹。当你点击 “+” 号来添加指纹时，它会提供一些预定义的选项，这样你就可以很容易地识别出它是哪根手指或拇指。

当然，你可以点击右手食指但扫描左手拇指，不过我看不出你有什么好的理由要这么做。

![Adding fingerprint](/data/attachment/album/202104/26/191604e8zvz8dpbt8ismm8.png)

在添加指纹时，请按照指示旋转你的手指或拇指。

![Rotate your finger](/data/attachment/album/202104/26/191605chp049mp664p6up9.png)

系统登记了整个手指后，就会给你一个绿色的信号，表示已经添加了指纹。

![Fingerprint successfully added](/data/attachment/album/202104/26/191605mmzigg5la4xmsskx.png)

如果你想马上测试一下，在 Ubuntu 中按 `Super+L` 快捷键锁定屏幕，然后使用指纹进行登录。

![Login With Fingerprint in Ubuntu](/data/attachment/album/202104/26/191607qzrr0avvpm7dqg4m.jpg)

#### 在 Ubuntu 上使用指纹登录的经验

指纹登录顾名思义就是使用你的指纹来登录系统。就是这样。当要求对需要 `sudo` 访问的程序进行认证时，你不能使用手指。它不能代替你的密码。

还有一件事。指纹登录可以让你登录，但当系统要求输入 `sudo` 密码时，你不能用手指。Ubuntu 中的 [钥匙环](https://itsfoss.com/ubuntu-keyring/) 也仍然是锁定的。

另一件烦人的事情是因为 GNOME 的 GDM 登录界面。当你登录时，你必须先点击你的账户才能进入密码界面。你在这可以使用手指。如果能省去先点击用户帐户 ID 的麻烦就更好了。

我还注意到，指纹识别没有 Windows 中那么流畅和快速。不过，它可以使用。

如果你对 Linux 上的指纹登录有些失望，你可以禁用它。让我在下一节告诉你步骤。

### 禁用指纹登录

禁用指纹登录和最初启用指纹登录差不多。

进入 “设置→用户”，然后点击指纹登录选项。它会显示一个有添加更多指纹或删除现有指纹的页面。你需要删除现有的指纹。

![Disable Fingerprint Login](/data/attachment/album/202104/26/191609ktkchqmxwwrq76w6.png)

指纹登录确实有一些好处，特别是对于我这种懒人来说。我不用每次锁屏时输入密码，我也对这种有限的使用感到满意。

用 [PAM](https://tldp.org/HOWTO/User-Authentication-HOWTO/x115.html) 启用指纹解锁 `sudo` 应该不是完全不可能。我记得我 [在 Ubuntu 中设置脸部解锁](https://itsfoss.com/face-unlock-ubuntu/)时，也可以用于 `sudo`。看看以后的版本是否会增加这个功能吧。

你有带指纹识别器的笔记本吗？你是否经常使用它，或者它只是你不关心的东西之一？

---

via: <https://itsfoss.com/fingerprint-login-ubuntu/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


使用 C 优化你的 Python 代码

>
> Cython 创建的 C 模块可以加速 Python 代码的执行，这对使用效率不高的解释型语言编写的复杂应用是很重要的。
>
>
>

![](/data/attachment/album/202104/26/230709qz64z4af3t9b9jab.jpg "Hands on a keyboard with a Python book ")

Cython 是 Python 编程语言的编译器，旨在优化性能并形成一个扩展的 Cython 编程语言。作为 Python 的扩展，[Cython](https://cython.org/) 也是 Python 语言的超集，它支持调用 C 函数和在变量和类属性上声明 C 类型。这使得包装外部 C 库、将 C 嵌入现有应用程序或者为 Python 编写像 Python 一样简单的 C 语言扩展语法变得容易。

Cython 一般用于创建 C 模块来加速 Python 代码的执行。这在使用解释型语言编写的效率不高的复杂应用中非常重要。

### 安装 Cython

你可以在 Linux、BSD、Windows 或 macOS 上安装 Cython 来使用 Python：

```
$ python -m pip install Cython

```

安装好后，就可以使用它了。

### 将 Python 转换成 C

使用 Cython 的一个好的方式是从一个简单的 “hello world” 开始。这虽然不是展示 Cython 优点的最好方式，但是它展示了使用 Cython 时发生的情况。

首先，创建一个简单的 Python 脚本，文件命名为 `hello.pyx`（`.pyx` 扩展名并不神奇，从技术上它可以是任何东西，但它是 Cython 的默认扩展名）：

```
print("hello world")

```

接下来，创建一个 Python 设置脚本。一个像 Python 的 makefile 一样的 `setup.py`，Cython 可以使用它来处理你的 Python 代码：

```
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("hello.pyx")
)

```

最后，使用 Cython 将你的 Python 脚本转换为 C 代码：

```
$ python setup.py build_ext --inplace

```

你可以在你的工程目录中看到结果。Cython 的 `cythonize` 模块将 `hello.pyx` 转换成一个 `hello.c` 文件和一个 `.so` 库。这些 C 代码有 2648 行，所以它比一个一行的 `hello.pyx` 源码的文本要多很多。`.so` 库也比它的源码大 2000 倍（即 54000 字节和 20 字节相比）。然后，Python 需要运行单个 Python 脚本，所以有很多代码支持这个只有一行的 `hello.pyx` 文件。

要使用 Python 的 “hello world” 脚本的 C 代码版本，请打开一个 Python 提示符并导入你创建的新 `hello` 模块：

```
>>> import hello
hello world

```

### 将 C 代码集成到 Python 中

测试计算能力的一个很好的通用测试是计算质数。质数是一个比 1 大的正数，且它只有被 1 或它自己除后才会产生正整数。虽然理论很简单，但是随着数的变大，计算需求也会增加。在纯 Python 中，可以用 10 行以内的代码完成质数的计算。

```
import sys

number = int(sys.argv[1])
if not number <= 1:
    for i in range(2, number):
        if (number % i) == 0:
            print("Not prime")
            break
else:
    print("Integer must be greater than 1")

```

这个脚本在成功的时候是不会提醒的，如果这个数不是质数，则返回一条信息：

```
$ ./prime.py 3
$ ./prime.py 4
Not prime.

```

将这些转换为 Cython 需要一些工作，一部分是为了使代码适合用作库，另一部分是为了提高性能。

#### 脚本和库

许多用户将 Python 当作一种脚本语言来学习：你告诉 Python 想让它执行的步骤，然后它来做。随着你对 Python（以及一般的开源编程）的了解越多，你可以了解到许多强大的代码都存在于其他应用程序可以利用的库中。你的代码越 *不具有针对性*，程序员（包括你）就越可能将其重用于其他的应用程序。将计算和工作流解耦可能需要更多的工作，但最终这通常是值得的。

在这个简单的质数计算的例子中，将其转换成 Cython，首先是一个设置脚本：

```
from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("prime.py")
)

```

将你的脚本转换成 C：

```
$ python setup.py build_ext --inplace

```

到目前为止，一切似乎都工作的很好，但是当你试图导入并使用新模块时，你会看到一个错误：

```
>>> import prime
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "prime.py", line 2, in init prime
    number = sys.argv[1]
IndexError: list index out of range

```

这个问题是 Python 脚本希望从一个终端运行，其中参数（在这个例子中是要测试是否为质数的整数）是一样的。你需要修改你的脚本，使它可以作为一个库来使用。

#### 写一个库

库不使用系统参数，而是接受其他代码的参数。对于用户输入，与其使用 `sys.argv`，不如将你的代码封装成一个函数来接收一个叫 `number`（或者 `num`，或者任何你喜欢的变量名）的参数：

```
def calculate(number):
    if not number <= 1:
        for i in range(2, number):
            if (number % i) == 0:
                print("Not prime")
                break
    else:
        print("Integer must be greater than 1")

```

这确实使你的脚本有些难以测试，因为当你在 Python 中运行代码时，`calculate` 函数永远不会被执行。但是，Python 编程人员已经为这个问题设计了一个通用、还算直观的解决方案。当 Python 解释器执行一个 Python 脚本时，有一个叫 `__name__` 的特殊变量，这个变量被设置为 `__main__`，但是当它被作为模块导入的时候，`__name__` 被设置为模块的名字。利用这点，你可以写一个既是 Python 模块又是有效 Python 脚本的库：

```
import sys

def calculate(number):
    if not number <= 1:
        for i in range(2, number):
            if (number % i) == 0:
                print("Not prime")
                break
    else:
        print("Integer must be greater than 1")

if __name__ == "__main__":
    number = sys.argv[1]
    calculate( int(number) )

```

现在你可以用一个命令来运行代码了：

```
$ python ./prime.py 4
Not a prime

```

你可以将它转换为 Cython 来用作一个模块：

```
>>> import prime
>>> prime.calculate(4)
Not prime

```

### C Python

用 Cython 将纯 Python 的代码转换为 C 代码是有用的。这篇文章描述了如何做，然而，Cython 还有功能可以帮助你在转换之前优化你的代码，分析你的代码来找到 Cython 什么时候与 C 进行交互，以及更多。如果你正在用 Python，但是你希望用 C 代码改进你的代码，或者进一步理解库是如何提供比脚本更好的扩展性的，或者你只是好奇 Python 和 C 是如何协作的，那么就开始使用 Cython 吧。

---

via: <https://opensource.com/article/21/4/cython>

作者：[Alan Smithee](https://opensource.com/users/alansmithee) 选题：[lujun9972](https://github.com/lujun9972) 译者：[ShuyRoy](https://github.com/ShuyRoy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | 报告称全球半年增加了 300 万开发者，JavaScript 开发人员占一半

Summary: 更多：• 微软 Defender 利用机器学习技术来检测恶意挖矿 • 诺基亚将在月球上部署 4G 网络

![](/data/attachment/album/202104/27/100244bcaizxyci0yxvcz0.jpg)

### 报告称全球半年增加了 300 万开发者，JavaScript 开发人员占一半

![](/data/attachment/album/202104/27/100253o5tyznxxjnfyygnl.jpg)

SlashData 半年一次的《[State of the Developer Nation](https://www.slashdata.co/free-resources/developer-economics-state-of-the-developer-nation-20th-edition)》报告称，全球开发者已经从 2020 年 10 月的 2130 万增加到今天的 2430 万，增长了约 14%，300 万人。

现在有 1380 万 JavaScript 开发人员（包括 TypeScript 和 CoffeeScript），比去年 10 月增加了 140 万人。这意味着超过 50% 的活跃开发者使用 JavaScript。但他们并不只使用 JavaScript；即使主要语言是 Java、C# 或 PHP，在许多项目中也至少需要一丁点 JavaScript。即使在数据科学或嵌入式开发等领域，也有大约 1/4 的开发人员在他们的项目中使用 JavaScript。

Python 开发者 1010 万，排名第二，增长率为 20%，是所有大型编程语言社区中最高的。Rust 的增长速度更快，但基数较小，从 80 万增加到了 130 万活跃开发者。

PHP 的数量为 630万，已经滑落到第六位，被 C# 超过了。虽然 PHP 是使用最广泛的服务器端编程语言，但是其大多数用户不是开发者。

好吧，我觉得 JavaScript 开发者的门槛也太低了。如果抛开专业开发人员不说，编程开发技能以后或许会像 Excel 一样会一点就算会用——哦，说起来，[Excel 及其用户才是全球最大的编程语言和开发者群体](/article-13078-1.html)。

### 微软 Defender 利用机器学习技术来检测恶意挖矿

![](/data/attachment/album/202104/27/100309pe2oezgaoes2awno.jpg)

加密劫持是一种恶意行为，攻击者在主机设备上安装恶意软件，然后利用计算机的资源来挖掘加密货币导致性能受到影响，或者干脆直接窃取加密货币钱包。微软和英特尔联合宣布，在微软 Defender 中使用基于后者的威胁检测技术（TDT）来检测加密货币恶意挖矿程序的新功能。该解决方案利用 CPU 遥测和机器学习启发式算法来识别异常活动。一旦检测到潜在的恶意行为，它就会向端点检测和响应 EDR 机制发送信号，进而触发修复工作流程，以保护受感染的 PC 和网络上的其他设备。

确实，在 PC 中集成挖矿劫持检测功能是有必要的，反正现在自己用 PC 挖矿也不现实，如果你的 PC 在挖矿，那几乎都是被劫持用来大规模挖矿了。

### 诺基亚将在月球上部署 4G 网络

![](/data/attachment/album/202104/27/100332iuvut2uqs3u29u2h.jpg)

美国 NASA 正[计划](https://www.zdnet.com/article/the-moon-is-going-to-get-its-own-4g-network-thanks-to-this-rugged-lunar-rover/)在本世纪末在月球上建立一个可持续的人类存在，去年 NASA 向诺基亚提出了一个不同寻常的要求：设计一个系统，建立一个 4G 网络，供未来的月球漫步宇航员使用。

在太空里使用网络并不新鲜，国际空间站（ISS）上的宇航员自 2008 年以来一直在使用 Wi-Fi，甚至可以将他们的宇航服连接到网络上。诺基亚的方案略有不同，该公司的任务是在月球上建立一个本地网络，该网络将只延伸大约 5 公里，以实现宇航员和地面设备之间的通信。

虽然现在都在吵吵 5G ，但是我觉得 4G 就挺好的。


使用 Stratis 的网络绑定磁盘加密

Summary: 网络绑定磁盘加密 （NBDE）有助于自动解锁 Stratis 卷的过程。

网络绑定磁盘加密 （NBDE）有助于自动解锁 Stratis 卷的过程。

![](/data/attachment/album/202104/27/221704gyzyvyroyyrybany.jpg)

在一个有许多加密磁盘的环境中，解锁所有的磁盘是一项困难的任务。<ruby> 网络绑定磁盘加密 <rt>  Network bound disk encryption </rt></ruby>（NBDE）有助于自动解锁 Stratis 卷的过程。这是在大型环境中的一个关键要求。Stratis 2.1 版本增加了对加密的支持，这在《[Stratis 加密入门](/article-13311-1.html)》一文中介绍过。Stratis 2.3 版本最近在使用加密的 Stratis 池时引入了对网络绑定磁盘加密（NBDE）的支持，这是本文的主题。

[Stratis 网站](https://stratis-storage.github.io/) 将 Stratis 描述为一个“*易于使用的 Linux 本地存储管理*”。短视频《[使用 Stratis 管理存储](https://www.youtube.com/watch?v=CJu3kmY-f5o)》对基础知识进行了快速演示。该视频是在 Red Hat Enterprise Linux 8 系统上录制的，然而，视频中显示的概念也适用于 Fedora Linux 中的 Stratis。

### 先决条件

本文假设你熟悉 Stratis，也熟悉 Stratis 池加密。如果你不熟悉这些主题，请参考这篇 [文章](/article-13311-1.html) 和前面提到的 [Stratis 概述视频](https://www.youtube.com/watch?v=CJu3kmY-f5o)。

NBDE 需要 Stratis 2.3 或更高版本。本文中的例子使用的是 Fedora Linux 34 的预发布版本。Fedora Linux 34 的最终版本将包含 Stratis 2.3。

### 网络绑定磁盘加密（NBDE）概述

加密存储的主要挑战之一是有一个安全的方法在系统重启后再次解锁存储。在大型环境中，手动输入加密口令并不能很好地扩展。NBDE 解决了这一问题，允许以自动方式解锁加密存储。

在更高层次上，NBDE 需要环境中的 Tang 服务器。客户端系统（使用 Clevis Pin）只要能与 Tang 服务器建立网络连接，就可以自动解密存储。如果网络没有连接到 Tang 服务器，则必须手动解密存储。

这背后的想法是，Tang 服务器只能在内部网络上使用，因此，如果加密设备丢失或被盗，它将不再能够访问内部网络连接到 Tang 服务器，因此不会被自动解密。

关于 Tang 和 Clevis 的更多信息，请参见手册页（`man tang`、`man clevis`）、[Tang 的 GitHub 页面](https://github.com/latchset/tang) 和 [Clevis 的 GitHub 页面](https://github.com/latchset/clevis)。

### 设置 Tang 服务器

本例使用另一个 Fedora Linux 系统作为 Tang 服务器，主机名为 `tang-server`。首先安装 `tang` 包。

```
dnf install tang

```

然后用 `systemctl` 启用并启动 `tangd.socket`。

```
systemctl enable tangd.socket --now

```

Tang 使用的是 TCP 80 端口，所以你也需要在防火墙中打开该端口。

```
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=80/tcp

```

最后，运行 `tang-show-keys` 来显示输出签名密钥指纹。你以后会需要这个。

```
# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s

```

### 创建加密的 Stratis 池

上一篇关于 Stratis 加密的文章详细介绍了如何设置加密的 Stratis 池，所以本文不会深入介绍。

第一步是捕获一个将用于解密 Stratis 池的密钥。即使使用 NBDE，也需要设置这个，因为在 NBDE 服务器无法到达的情况下，可以用它来手动解锁池。使用以下命令捕获 `pool1` 密钥。

```
# stratis key set --capture-key pool1key
Enter key data followed by the return key:

```

然后我将使用 `/dev/vdb` 设备创建一个加密的 Stratis 池（使用刚才创建的 `pool1key`），命名为 `pool1`。

```
# stratis pool create --key-desc pool1key pool1 /dev/vdb。

```

接下来，在这个 Stratis 池中创建一个名为 `filesystem1` 的文件系统，创建一个挂载点，挂载文件系统，并在其中创建一个测试文件：

```
# stratis filesystem create pool1 filesystem1
# mkdir /filesystem1
# mount /dev/stratis/pool1/filesystem1 /filesystem1
# cd /filesystem1
# echo "this is a test file" > testfile

```

### 将 Stratis 池绑定到 Tang 服务器上

此时，我们已经创建了加密的 Stratis 池，并在池中创建了一个文件系统。下一步是将你的 Stratis 池绑定到刚刚设置的 Tang 服务器上。使用 `stratis pool bind nbde` 命令进行。

当你进行 Tang 绑定时，需要向该命令传递几个参数：

* 池名（在本例中，`pool1`）
* 钥匙描述符名称（本例中为 `pool1key`）
* Tang 服务器名称（在本例中，`http://tang-server`）

记得之前在 Tang 服务器上，运行了 `tang-show-keys`，显示 Tang 输出的签名密钥指纹是 `l3fZGUCmnvKQF_OA6VZF9jf8z2s`。除了前面的参数外，还需要用参数 `-thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s` 传递这个指纹，或者用 `-trust-url` 参数跳过对指纹的验证。

使用 `-thumbprint` 参数更安全。例如：

```
# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint l3fZGUCmnvKQF_OA6VZF9jf8z2s

```

### 用 NBDE 解锁 Stratis 池

接下来重启主机，并验证你可以用 NBDE 解锁 Stratis 池，而不需要使用密钥口令。重启主机后，该池不再可用：

```
# stratis pool list
Name Total Physical Properties

```

要使用 NBDE 解锁池，请运行以下命令：

```
# stratis pool unlock clevis

```

注意，你不需要使用密钥口令。这个命令可以在系统启动时自动运行。

此时，Stratis 池已经可以使用了：

```
# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr

```

你可以挂载文件系统，访问之前创建的文件：

```
# mount /dev/stratis/pool1/filesystem1 /filesystem1/
# cat /filesystem1/testfile
this is a test file

```

### 轮换 Tang 服务器密钥

最好定期轮换 Tang 服务器密钥，并更新 Stratis 客户服务器以使用新的 Tang 密钥。

要生成新的 Tang 密钥，首先登录到 Tang 服务器，查看 `/var/db/tang` 目录的当前状态。然后，运行 `tang-show-keys` 命令：

```
# ls -al /var/db/tang
total 8
drwx------. 1 tang tang 124 Mar 15 15:51 .
drwxr-xr-x. 1 root root 16 Mar 15 15:48 ..
-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk
# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s

```

要生成新的密钥，运行 `tangd-keygen` 并将其指向 `/var/db/tang` 目录：

```
# /usr/libexec/tangd-keygen /var/db/tang

```

如果你再看看 `/var/db/tang` 目录，你会看到两个新文件：

```
# ls -al /var/db/tang
total 16
drwx------. 1 tang tang 248 Mar 22 10:41 .
drwxr-xr-x. 1 root root 16 Mar 15 15:48 ..
-rw-r--r--. 1 tang tang 361 Mar 15 15:51 hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
-rw-r--r--. 1 root root 354 Mar 22 10:41 iyG5HcF01zaPjaGY6L_3WaslJ_E.jwk
-rw-r--r--. 1 root root 349 Mar 22 10:41 jHxerkqARY1Ww_H_8YjQVZ5OHao.jwk
-rw-r--r--. 1 tang tang 367 Mar 15 15:51 l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk

```

如果你运行 `tang-show-keys`，就会显示出 Tang 所公布的密钥：

```
# tang-show-keys
l3fZGUCmnvKQF_OA6VZF9jf8z2s
iyG5HcF01zaPjaGY6L_3WaslJ_E

```

你可以通过将两个原始文件改名为以句号开头的隐藏文件，来防止旧的密钥（以 `l3fZ` 开头）被公布。通过这种方法，旧的密钥将不再被公布，但是它仍然可以被任何没有更新为使用新密钥的现有客户端使用。一旦所有的客户端都更新使用了新密钥，这些旧密钥文件就可以删除了。

```
# cd /var/db/tang
# mv hbjJEDXy8G8wynMPqiq8F47nJwo.jwk   .hbjJEDXy8G8wynMPqiq8F47nJwo.jwk
# mv l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk   .l3fZGUCmnvKQF_OA6VZF9jf8z2s.jwk

```

此时，如果再运行 `tang-show-keys`，Tang 只公布新钥匙：

```
# tang-show-keys
iyG5HcF01zaPjaGY6L_3WaslJ_E

```

下一步，切换到你的 Stratis 系统并更新它以使用新的 Tang 密钥。当文件系统在线时， Stratis 支持这样做。

首先，解除对池的绑定：

```
# stratis pool unbind pool1

```

接下来，用创建加密池时使用的原始口令设置密钥：

```
# stratis key set --capture-key pool1key
Enter key data followed by the return key:

```

最后，用更新后的密钥指纹将 Stratis 池绑定到 Tang 服务器上：

```
# stratis pool bind nbde pool1 pool1key http://tang-server --thumbprint iyG5HcF01zaPjaGY6L_3WaslJ_E

```

Stratis 系统现在配置为使用更新的 Tang 密钥。一旦使用旧的 Tang 密钥的任何其他客户系统被更新，在 Tang 服务器上的 `/var/db/tang` 目录中被重命名为隐藏文件的两个原始密钥文件就可以被备份和删除了。

### 如果 Tang 服务器不可用怎么办？

接下来，关闭 Tang 服务器，模拟它不可用，然后重启 Stratis 系统。

重启后，Stratis 池又不可用了：

```
# stratis pool list
Name Total Physical Properties

```

如果你试图用 NBDE 解锁，会因为 Tang 服务器不可用而失败：

```
# stratis pool unlock clevis
Execution failed:
An iterative command generated one or more errors: The operation 'unlock' on a resource of type pool failed. The following errors occurred:
Partial action "unlock" failed for pool with UUID 4d62f840f2bb4ec9ab53a44b49da3f48: Cryptsetup error: Failed with error: Error: Command failed: cmd: "clevis" "luks" "unlock" "-d" "/dev/vdb" "-n" "stratis-1-private-42142fedcb4c47cea2e2b873c08fcf63-crypt", exit reason: 1 stdout: stderr: /dev/vdb could not be opened.

```

此时，在 Tang 服务器无法到达的情况下，解锁池的唯一选择就是使用原密钥口令：

```
# stratis key set --capture-key pool1key
Enter key data followed by the return key:

```

然后你可以使用钥匙解锁池：

```
# stratis pool unlock keyring

```

接下来，验证池是否成功解锁：

```
# stratis pool list
Name Total Physical Properties
pool1 4.98 GiB / 583.65 MiB / 4.41 GiB ~Ca, Cr

```

---

via: <https://fedoramagazine.org/network-bound-disk-encryption-with-stratis/>

作者：[briansmith](https://fedoramagazine.org/author/briansmith/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


用 Linux 翻新旧的 MacBook

原文明确标注使用 CC BY-SA 4.0 许可证（见原文底部图标），按照该许可证要求，即使是翻译作品也必须使用相同许可发布，希望贵团队及时纠正错误

Linux 中国的文章都是按照 CC BY-SA 协议发布的，看眼评论区底部就知道 ……

来自223.104.39.39的 Firefox 93.0|GNU/Linux 用户

>
> 不要把你又旧又慢的 MacBook 扔进垃圾桶。用 Linux Mint 延长它的寿命。
>
>
>

![](/data/attachment/album/202104/27/225241mdbp59t67699r9de.jpg "Writing Hand")

去年，我写了篇关于如何用 Linux 赋予[旧 MacBook 的新生命](https://opensource.com/article/20/2/macbook-linux-elementary)的文章，在例子中提到了 Elementary OS。最近，我用回那台 2015 年左右的 MacBook Air，发现遗失了我的登录密码。我下载了最新的 Elementary OS 5.1.7 Hera，但无法让实时启动识别我的 Broadcom 4360 无线芯片组。

最近，我一直在使用 [Linux Mint](https://linuxmint.com/) 来翻新旧的笔记本电脑，我想在这台 MacBook Air 上试一下。我下载了 Linux Mint 20.1 ISO，并在我的 Linux 台式电脑上使用 [Popsicle](https://github.com/pop-os/popsicle) 创建了一个 USB 启动器。

![Popsicle ISO burner](/data/attachment/album/202104/27/225300eauz8v83uyaytf8z.png "Popsicle ISO burner")

接下来，我将 Thunderbolt 以太网适配器连接到 MacBook，并插入 USB 启动器。我打开系统电源，按下 MacBook 上的 Option 键，指示它从 USB 驱动器启动系统。

Linux Mint 在实时启动模式下启动没问题，但操作系统没有识别出无线连接。

### 我的无线网络在哪里？

这是因为为苹果设备制造 WiFi 卡的公司 Broadcom 没有发布开源驱动程序。这与英特尔、Atheros 和许多其他芯片制造商形成鲜明对比，但它是苹果公司使用的芯片组，所以这是 MacBook 上的一个常见问题。

我通过我的 Thunderbolt 适配器有线连接到以太网，因此我 *是* 在线的。通过之前的研究，我知道要让无线适配器在这台 MacBook 上工作，我需要在 Bash 终端执行三条独立的命令。然而，在安装过程中，我了解到 Linux Mint 有一个很好的内置驱动管理器，它提供了一个简单的图形用户界面来协助安装软件。

![Linux Mint Driver Manager](/data/attachment/album/202104/27/225300q8cj4l4pdmsmncnl.png "Linux Mint Driver Manager")

该操作完成后，我重启了安装了 Linux Mint 20.1 的新近翻新的 MacBook Air。Broadcom 无线适配器工作正常，使我能够轻松地连接到我的无线网络。

### 手动安装无线

你可以从终端完成同样的任务。首先，清除 Broadcom 内核源码的残余。

```
$ sudo apt-get purge bcmwl-kernel-source

```

然后添加一个固件安装程序：

```
$ sudo apt install firmware-b43-installer

```

最后，为系统安装新固件：

```
$ sudo apt install linux-firmware

```

### 将 Linux 作为你的 Mac 使用

我安装了 [Phoronix 测试套件](https://www.phoronix-test-suite.com/) 以获得 MacBook Air 的系统信息。

![MacBook Phoronix Test Suite output](/data/attachment/album/202104/27/225301cnu6p7lx707uzh77.png "MacBook Phoronix Test Suite output")

系统工作良好。对内核 5.4.0-64-generic 的最新更新显示，无线连接仍然存在，并且我与家庭网络之间的连接为 866Mbps。Broadcom 的 FaceTime 摄像头不能工作，但其他东西都能正常工作。

我非常喜欢这台 MacBook 上的 [Linux Mint Cinnamon 20.1](https://www.linuxmint.com/edition.php?id=284) 桌面。

![Linux Mint Cinnamon](/data/attachment/album/202104/27/225301v52cpz6ctddh85ut.png "Linux Mint Cinnamon")

如果你有一台因 macOS 更新而变得缓慢且无法使用的旧 MacBook，我建议你试一下 Linux Mint。我对这个发行版印象非常深刻，尤其是它在我的 MacBook Air 上的工作情况。它无疑延长了这个强大的小笔记本电脑的寿命。

---

via: <https://opensource.com/article/21/4/restore-macbook-linux>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | DroidScript 软件被谷歌关闭后，开发者被蒙在鼓里

Summary: 更多：• Fedora 34 正式版发布 • 微软称 Windows 10 目前已有 13 亿台月活设备

![](/data/attachment/album/202104/28/083237xt545jj1tbt5a9l1.jpg)

### DroidScript 软件被谷歌关闭后，开发者被蒙在鼓里

![](/data/attachment/album/202104/28/083250vc0yzwiyuiemiqe5.jpg)

据[报道](https://www.theregister.com/2021/04/27/droidscript_google_ban/)，3 月的最后一天，[DroidScript](https://droidscript.org/)，一个用于编写 JavaScript 代码的流行的安卓应用，因涉嫌广告欺诈，其谷歌广告账户被暂停，一周后被从谷歌商店中删除。该应用背后的公司称，这个应用程序只有一个横幅，是“为了支付我们的开发和托管费用而勉强添加的”，要求谷歌解释它是如何得出这一结论的，并重新考虑暂停DroidScript的做法，但只得到形式上的信件回复。

即便是该公司又创建了一个没有 AdMob 横幅广告的新版本，但谷歌在 4 月 7 日暂停了该应用在 Google Play 上的使用，阻止了任何新版本的发布。

现在这个被包括学生、教师和专业人士在内的 10 多万名开发者使用的应用程序正在失去高级用户以及广告收入。

我觉得至少该给一个申诉的机会吧。

### Fedora 34 正式版发布

![](/data/attachment/album/202104/28/083324jxd5bxnb7xo5cbbn.jpg)

Fedora 34 已经成功地从 PulseAudio 切换到 PipeWire 来满足其音频需求，并继续使用 Btrfs 作为默认的文件系统，而在此基础上已经默认启用了基于 Zstd 的透明文件系统压缩能力。系统工具链升级为GCC 11 / Binutils 2.35 / Glibc 2.33 / LLVM 12 的组合。除了GNOME 40作为Fedora工作站34的默认桌面，Fedora 34 还提供了最新的 KDE、Xfce 4.16、LXQt 0.16 和其他桌面选择。Wayland 默认用于 Fedora KDE Plasma 桌面版本。

喜欢尝鲜的同学可以马上去试试了。

### 微软称 Windows 10 目前已有 13 亿台月活设备

![](/data/attachment/album/202104/28/083402j7i7vwikiwcfww6i.jpg)

去年 3 月，微软表示，Windows 10 已经达到其长期承诺的 10 亿台月活设备目标。4 月 27 日，微软正式[表示](https://www.zdnet.com/article/microsoft-says-windows-10-now-on-1-3-billion-monthly-active-devices/)，Windows 10 现在已经达到 13 亿台月活设备目标。

2015 年，微软表示，他们预计到 2018 年夏末，Windows 10 将出现在 10 亿台设备上。但实际上我们看到这一目标在 2020 年才达到。

全球疫情改变了很多，但是远程办公意外地对某些行业形成了极大助推。


Blanket：拥有各种环境噪音的应用，帮助保持注意力集中

Summary: 一个开源的环境噪音播放器，提供各种声音，帮助你集中注意力或入睡。

一个开源的环境噪音播放器，提供各种声音，帮助你集中注意力或入睡。

>
> 一个开源的环境噪音播放器，提供各种声音，帮助你集中注意力或入睡。
>
>
>

![](/data/attachment/album/202104/29/094813oxcitipetajxjiex.jpg)

随着你周围活动的增加，要保持冷静和专注往往是很困难的。

有时，音乐会有所帮助，但在某些情况下也会分散注意力。但是，环境噪音如何？这总是让人听起来很舒心。谁不想在餐厅里听到鸟叫声、雨滴声和人群的交谈声？好吧，可能不是最后一个，但听自然的声音可以帮助放松和集中注意力。这间接地提高了你的工作效率。

最近，我发现了一个专门的播放器，其中包含了不同的声音，可以帮助任何人集中注意力。

### 使用 Blanket 播放不同的环境声音

Blanket 是一个令人印象深刻的环境噪音播放器，它具有不同的声音，可以帮助你入睡或只是通过帮助你忘记周围的干扰来重获注意力。

它包括自然界的声音，像雨声、海浪声、鸟鸣声、风暴声、风声、水流声、夏夜声。

![](/data/attachment/album/202104/29/094825n88zibrzrrgi6y5d.png)

此外，如果你是一个通勤者或在轻微繁忙的环境中感到舒适的人，你可以找到火车、船、城市、咖啡馆或壁炉的声音。

如果你喜欢白噪声或粉红噪声，它结合了人类能听到的所有声音频率，这里也可以找到。

它还可以让你在每次开机时自动启动，如果你喜欢这样的话。

![](/data/attachment/album/202104/29/094826b0n074et3h1211nz.png)

### 在 Linux 上安装 Blanket

安装 Blanket 的最好方法是来自 [Flathub](https://flathub.org/apps/details/com.rafaelmardojai.Blanket)。考虑到你已经启用了 [Flatpak](https://itsfoss.com/what-is-flatpak/)，你只需在终端键入以下命令就可以安装它：

```
flatpak install flathub com.rafaelmardojai.Blanket

```

如果你是 Flatpak 的新手，你可能想通过我们的 [Flatpak 指南](https://itsfoss.com/flatpak-guide/)了解。

如果你不喜欢使用 Flatpak，你可以使用该项目中的贡献者维护的 PPA 来安装它。对于 Arch Linux 用户，你可以在 [AUR](https://itsfoss.com/aur-arch-linux/) 中找到它，以方便安装。

此外，你还可以找到 Fedora 和 openSUSE 的软件包。要探索所有现成的软件包，你可以前往其 [GitHub 页面](https://github.com/rafaelmardojai/blanket)。

### 结束语

对于一个简单的环境噪音播放器来说，用户体验是相当好的。我有一副 HyperX Alpha S 耳机，我必须要说，声音的质量很好。

换句话说，它听起来很舒缓，如果你想体验环境声音来集中注意力，摆脱焦虑或只是睡着，我建议你试试。

你试过它了吗？欢迎在下面分享你的想法。

---

via: <https://itsfoss.com/blanket-ambient-noise-app/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


我最喜欢的开源项目管理工具

Summary: 如果你要管理大型复杂的项目，请尝试利用开源选择替换 MS-Project。

辛苦校对大佬了。

国内的禅道软件也是不错的，希望能有帮忙推荐一下。已经支持了多语言版本了。

如果你要管理大型复杂的项目，请尝试利用开源选择替换 MS-Project。

>
> 如果你要管理大型复杂的项目，请尝试利用开源选择替换 MS-Project。
>
>
>

![](/data/attachment/album/202104/29/145942py6qcc3lz1dyt1s6.jpg "Kanban-style organization action")

诸如建造卫星、开发机器人或推出新产品之类的项目都是昂贵的，涉及不同的提供商，并且包含必须跟踪的硬依赖性。

大型项目领域中的项目管理方法非常简单（至少在理论上如此）。你可以创建项目计划并将其拆分为较小的部分，直到你可以合理地将成本、持续时间、资源和依赖性分配给各种活动。一旦项目计划获得负责人的批准，你就可以使用它来跟踪项目的执行情况。在时间轴上绘制项目的所有活动将产生一个称为<ruby> <a href="https://en.wikipedia.org/wiki/Gantt_chart">  甘特图 </a> <rt>  Gantt chart </rt></ruby>的条形图。

甘特图一直被用于 [瀑布项目方法](https://opensource.com/article/20/3/agiles-vs-waterfall)，也可以用于敏捷方法。例如，大型项目可能将甘特图用于 Scrum 冲刺，而忽略其他像用户需求这样的细节，从而嵌入敏捷阶段。其他大型项目可能包括多个产品版本（例如，最低可行产品 [MVP]、第二版本、第三版本等）。在这种情况下，上层结构是一种敏捷方法，而每个阶段都计划为甘特图，以处理预算和复杂的依赖关系。

### 项目管理工具

不夸张地说，有数百种现成的工具使用甘特图管理大型项目，而 MS-Project 可能是最受欢迎的工具。它是微软办公软件家族的一部分，可支持到成千上万的活动，并且有大量的功能，支持几乎所有可以想象到的管理项目进度的方式。对于 MS-Project，有时候你并不知道什么更昂贵：是软件许可证还是该工具的培训课程。

另一个缺点是 MS-Project 是一个独立的桌面应用程序，只有一个人可以更新进度表。如果要多个用户进行协作，则需要购买微软 Project 服务器、Web 版的 Project 或 Planner 的许可证。

幸运的是，专有工具还有开源的替代品，包括本文中提及的应用程序。所有这些都是开源的，并且包括基于资源和依赖项的分层活动调度的甘特图。ProjectLibre、GanttProject 和 TaskJuggler 都针对单个项目经理的桌面应用程序。ProjeQtOr 和 Redmine 是用于项目团队的 Web 应用程序，而 ]project-open[ 是用于管理整个组织的 Web 应用程序。

我根据一个单用户计划和对一个大型项目的跟踪评估了这些工具。我的评估标准包括甘特图编辑器功能、Windows/Linux/macOS 上的可用性、可扩展性、导入/导出和报告。（背景披露：我是 ]project-open[ 的创始人，我在多个开源社区中活跃了很多年。此列表包括我们的产品，因此我的观点可能有偏见，但我尝试着眼于每个产品的最佳功能。）

### Redmine 4.1.0

![Redmine](/data/attachment/album/202104/29/150023ooasa70va32xi8s8.png "Redmine")

[Redmine](https://www.redmine.org/) 是一个基于 Web 的专注于敏捷方法论的项目管理工具。

其标准安装包括一个甘特图时间轴视图，但缺少诸如调度、拖放、缩进（缩排和凸排）以及资源分配之类的基本功能。你必须单独编辑任务属性才能更改任务树的结构。

Redmine 具有甘特图编辑器插件，但是它们要么已经过时（例如 [Plus Gantt](https://redmine.org/plugins/plus_gantt)），要么是专有的（例如 [ANKO 甘特图](https://www.redmine.org/plugins/anko_gantt_chart)）。如果你知道其他开源的甘特图编辑器插件，请在评论中分享它们。

Redmine 用 Ruby on Rails 框架编写，可用于 Windows、Linux 和 macOS。其核心部分采用 GPLv2 许可证。

* **适合于：** 使用敏捷方法的 IT 团队。
* **独特卖点：** 这是 OpenProject 和 EasyRedmine 的原始“上游”父项目。

### ]project-open[ 5.1

![]project-open[](/data/attachment/album/202104/29/150024ajim3fma2loniapb.png "]project-open[")

[]project-open[](https://www.project-open.com) 是一个基于 Web 的项目管理系统，从整个组织的角度看类似于<ruby> 企业资源计划 <rt>  enterprise resource planning </rt></ruby>（ERP）系统。它还可以管理项目档案、预算、发票、销售、人力资源和其他功能领域。有一些不同的变体，如用于管理项目公司的<ruby> 专业服务自动化 <rt>  professional services automation </rt></ruby>（PSA）、用于管理企业战略项目的<ruby> 项目管理办公室 <rt>  project management office </rt></ruby>（PMO）和用于管理部门项目的<ruby> 企业项目管理 <rt>  enterprise project management </rt></ruby>（EPM）。

]project-open[ 甘特图编辑器包括按等级划分的任务、依赖关系和基于计划工作和分配资源的调度。它不支持资源日历和非人力资源。]project-open[ 系统非常复杂，其 GUI 可能需要刷新。

]project-open[ 是用 TCL 和 JavaScript 编写的，可用于 Windows 和 Linux。 ]project-open[ 核心采用 GPLv2 许可证，并具有适用于大公司的专有扩展。

* **适合于：** 需要大量财务项目报告的大中型项目组织。
* **独特卖点：** ]project-open[ 是一个综合系统，可以运行整个项目公司或部门。

### ProjectLibre 1.9.3

![ProjectLibre](/data/attachment/album/202104/29/150025p4wrdukwwnwnlddu.png "ProjectLibre")

在开源世界中，[ProjectLibre](http://www.projectlibre.org) 可能是最接近 MS-Project 的产品。它是一个桌面应用程序，支持所有重要的项目计划功能，包括资源日历、基线和成本管理。它还允许你使用 MS-Project 的文件格式导入和导出计划。

ProjectLibre 非常适合计划和执行中小型项目。然而，它缺少 MS-Project 中的一些高级功能，并且它的 GUI 并不是最漂亮的。

ProjectLibre 用 Java 编写，可用于 Windows、Linux 和macOS，并在开源的<ruby> 通用公共署名许可证 <rt>  Common Public Attribution License </rt></ruby>（CPAL）下授权。ProjectLibre 团队目前正在开发一个名为 ProjectLibre Cloud 的 Web 产品，并采用专有许可证。

* **适合于：** 负责中小型项目的个人项目管理者，或者作为没有完整的 MS-Project 许可证的项目成员的查看器。
* **独特卖点：** 这是最接近 MS-Project 的开源软件。

### GanttProject 2.8.11

![GanttProject](/data/attachment/album/202104/29/150026j60ffm5avu7n4fq1.png "GanttProject")

[GanttProject](https://www.ganttproject.biz) 与 ProjectLibre 类似，它是一个桌面甘特图编辑器，但功能集更为有限。它不支持基线，也不支持非人力资源，并且报告功能比较有限。

GanttProject 是一个用 Java 编写的桌面应用程序，可在 GPLv3 许可下用于 Windows、Linux 和 macOS。

* **适合于：** 简单的甘特图或学习基于甘特图的项目管理技术。
* **独特卖点：** 它支持<ruby> 流程评估和审阅技术 <rt>  program evaluation and review technique </rt></ruby>（[PERT](https://en.wikipedia.org/wiki/Program_evaluation_and_review_technique)）图表，并使用 WebDAV 的协作。

### TaskJuggler 3.7.1

![TaskJuggler](/data/attachment/album/202104/29/150027eymfypm88a4atya0.png "TaskJuggler")

[TaskJuggler](https://taskjuggler.org/) 用于在大型组织中安排多个并行项目，重点是自动解决资源分配冲突（即资源均衡）。

它不是交互式的甘特图编辑器，而是一个命令行工具，其工作方式类似于一个编译器：它从文本文件中读取任务列表，并生成一系列报告，这些报告根据分配的资源、依赖项、优先级和许多其他参数为每个任务提供最佳的开始和结束时间。它支持多个项目、基线、资源日历、班次和时区，并且被设计为可扩展到具有许多项目和资源的企业场景。

使用特定语法编写 TaskJuggler 输入文件可能超出了普通项目经理的能力。但是，你可以使用 ]project-open[ 作为 TaskJuggler 的图形前端来生成输入，包括缺勤、任务进度和记录的工作时间。当以这种方式使用时，TaskJuggler 就成为了功能强大的假设情景规划器。

TaskJuggler 用 Ruby 编写，并且在 GPLv2 许可证下可用于 Windows、Linux 和 macOS。

* **适合于：** 由真正的技术极客管理的中大型部门。
* **独特卖点：** 它在自动资源均衡方面表现出色。

### ProjeQtOr 9.0.4

![ProjeQtOr](/data/attachment/album/202104/29/150028ddn5no6x0nn6nwnn.png "ProjeQtOr")

[ProjeQtOr](https://www.projeqtor.org) 是适用于 IT 项目的、基于 Web 的项目管理应用程序。除了项目、工单和活动外，它还支持风险、预算、可交付成果和财务文件，以将项目管理的许多方面集成到单个系统中。

ProjeQtOr 提供了一个甘特图编辑器，与 ProjectLibre 功能类似，包括按等级划分的任务、依赖关系以及基于计划工作和分配资源。但是，它不支持取值的就地编辑（例如，任务名称、估计时间等）；用户必须在甘特图视图下方的输入表单中更改取值，然后保存。

ProjeQtOr 用 PHP 编写，并且在 Affero GPL3 许可下可用于 Windows、Linux 和 macOS。

* **适合于：** 跟踪项目列表的 IT 部门。
* **独特卖点：** 让你为存储每个项目的大量信息，将所有信息保存在一个地方。

### 其他工具

对于特定的用例，以下系统可能是有效的选择，但由于各种原因，它们被排除在主列表之外。

![LIbrePlan](/data/attachment/album/202104/29/150029yiajbjyb8jb8ujbu.png "LIbrePlan")

* [LibrePlan](https://www.libreplan.dev/) 是一个基于 Web 的项目管理应用程序，专注于甘特图。由于其功能集，它本来会在上面的列表中会占主导地位，但是没有可用于最新 Linux 版本（CentOS 7 或 8）的安装。作者说，更新的说明将很快推出。
* [dotProject](https://dotproject.net/) 是一个用 PHP 编写的基于 Web 的项目管理系统，可在 GPLv2.x 许可证下使用。它包含一个甘特图时间轴报告，但是没有编辑它的选项，并且依赖项还不起作用（它们“仅部分起作用”）。
* [Leantime](https://leantime.io) 是一个基于 Web 的项目管理系统，具有漂亮的用 PHP 编写的 GUI，并且可以在 GPLv2 许可证下使用。它包括一个里程碑的甘特时间线，但没有依赖性。
* [Orangescrum](https://orangescrum.org/) 是基于 Web 的项目管理工具。甘特图图可以作为付费附件或付费订阅使用。
* [Talaia/OpenPPM](http://en.talaia-openppm.com/) 是一个基于 Web 的项目组合管理系统。但是，版本 4.6.1 仍显示“即将推出：交互式甘特图”。
* [Odoo](https://odoo.com) 和 [OpenProject](http://openproject.org) 都将某些重要功能限制在付费企业版中。

在这篇评论中，目的是包括所有带有甘特图编辑器和依赖调度的开源项目管理系统。如果我错过了一个项目或误导了什么，请在评论中让我知道。

---

via: <https://opensource.com/article/21/3/open-source-project-management>

作者：[Frank Bergmann](https://opensource.com/users/fraber) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | 雅虎可能又要被卖了

Summary: 更多：• 奇虎 360 发现一个潜伏多年的 Linux 后门 • 微软加入推进 WebAssembly 的字节码联盟

认真的在我的Debian Gnu/Linux 10.9上并没有找到相应的脚本和服务。。。

AOL YAHOO都曾是数一数二的互联网公司 变化太快

![](/data/attachment/album/202104/29/204449epwwwfgrpphwpipu.jpg)

### 雅虎可能又要被卖了

![](/data/attachment/album/202104/29/204501oanzwaxmyeexxzm5.jpg)

据消息人士透露，美国移动运营商 Verizon 正考虑出售[旗下媒体业务](https://deadline.com/2021/04/verizon-media-assets-yahoo-aol-buzzfeed-huffpost-1234746126/)，该业务包括多个互联网早期的知名品牌，如雅虎和 AOL。Verizon 目前正逐步剥离媒体资产，放弃了向在线广告业务的进军，进一步专注于移动通信业务，

去年，Verizon 已经将互联网媒体赫芬顿邮报出售给 BuzzFeed，并于 2019 年出售了轻博客平台 Tumblr。2017 年，Verizon 以约 45 亿美元的价格收购了雅虎的互联网资产，此前还于 2015 年以约 44 亿美元的价格收购了 AOL。

当年的互联网一代巨头，一时传奇，如今只能算作资产卖来卖去。

### 奇虎 360 发现一个潜伏多年的 Linux 后门

![](/data/attachment/album/202104/29/204521q3lkfuo12kk3xkvt.jpg)

该[后门](https://blog.netlab.360.com/stealth_rotajakiro_backdoor_en/) 3 月 25 日首次被发现，虽然早在 2018 年就已经发现了样本。该后门有 12 项功能，包括渗出和窃取数据、文件和插件管理和报告设备信息等。但是大多数病毒检测引擎[尚不能发现](https://www.zdnet.com/article/rotajakiro-a-linux-backdoor-that-has-flown-under-the-radar-for-years/)该后门。该 Linux 恶意软件改变了它对加密的使用，这包括 ZLIB 压缩和 AES、异或和密钥轮转的组合，因而很难被发现。360 表示，他们不知道该恶意软件的“真正目的”，除了专注于破坏 Linux 系统。

专门潜伏在 Linux 上的后门，但是 Linux 上往往没有任何反病毒和木马的软件。

### 微软加入推进 WebAssembly 的字节码联盟

![](/data/attachment/album/202104/29/204547nnofmu4omu9oxr96.jpg)

字节码联盟旨在将 WebAssembly 从浏览器和 JavaScript 扩展到桌面和移动平台的本地应用程序。它是由英特尔、Mozilla、RedHat 于 2019 年组建的，谷歌和 ARM 也是其成员。字节码联盟得到了四个主要浏览器供应商中三个的支持，只缺 Safari 背后的苹果了。

WebAssembly 也承诺可以让开发者编写一个应用程序，在浏览器之外的多个操作系统上运行。微软的[加入](https://www.zdnet.com/article/microsoft-google-back-bytecode-alliance-to-move-webassembly-beyond-the-browser/)，使 [C# 和 .NET 开发人员](https://www.zdnet.com/article/microsoft-heres-programming-language-c-9-preview-for-net-plus-full-blazor-webassembly/)可以使用 WebAssembly 构建在浏览器中运行的应用程序，以及可以构建原生的 iOS 和 Android 应用。

这种中间字节码的方式其实并不是什么新发明，不知道 WebAssembly 和以前的方案有什么突破，能否取得成功？


如何在 Linux 中删除分区

Summary: 管理分区是一件严肃的事情，尤其是当你不得不删除它们时。

怎么能不提一下 GNOME 默认安装的磁盘工具 GNOME Disk Utility 呢？<br />
另外，现在 fdisk 支持 GPT 分区了吗？

管理分区是一件严肃的事情，尤其是当你不得不删除它们时。

![](/data/attachment/album/202104/30/095353uhtbhm2fqx44aqfo.jpg)

管理分区是一件严肃的事情，尤其是当你不得不删除它们时。我发现自己经常这样做，特别是在使用 U 盘作为实时磁盘和 Linux 安装程序之后，因为它们创建了几个我以后不需要的分区。

在本教程中，我将告诉你如何使用命令行和 GUI 工具在 Linux 中删除分区。

>
> 警告!
>
>
> 删除了分区，就会失去你的数据。无论何时，当你在操作分区时，一定要备份你的数据。一个轻微的打字错误或手滑都可能是昂贵的。不要说我们没有警告你！
>
>
>

### 使用 GParted 删除磁盘分区 （GUI 方法）

作为一个桌面 Linux 用户，你可能会对基于 GUI 的工具感到更舒服，也许更安全。

有 [几个让你在 Linux 上管理分区的工具](https://itsfoss.com/partition-managers-linux/)。根据你的发行版，你的系统上已经安装了一个甚至多个这样的工具。

在本教程中，我将使用 [GParted](https://gparted.org/index.php)。它是一个流行的开源工具，使用起来非常简单和直观。

第一步是 [安装 GParted](https://itsfoss.com/gparted/)，如果它还没有在你的系统中。你应该能够在你的发行版的软件中心找到它。

![](/data/attachment/album/202104/30/095433m4m5oc4cqhfbc4jq.png)

或者，你也可以使用你的发行版的软件包管理器来安装它。在基于 Debian 和 Ubuntu 的 Linux 发行版中，你可以 [使用 apt install 命令](https://itsfoss.com/apt-command-guide/)：

```
sudo apt install gparted

```

安装完毕后，让我们打开 **GParted**。由于你正在处理磁盘分区，你需要有 root 权限。它将要求进行认证，打开后，你应该看到一个类似这样的窗口：

![](/data/attachment/album/202104/30/095433uqy1f7y7sukz1yks.png)

在右上角，你可以选择磁盘，在下面选择你想删除的分区。

接下来，从分区菜单中选择 “删除” 选项：

![](/data/attachment/album/202104/30/095433dm8vmum2vyvmnm2p.png)

这个过程是没有完整完成的，直到你重写分区表。这是一项安全措施，它让你在确认之前可以选择审查更改。

要完成它，只需点击位于工具栏中的 “应用所有操作” 按钮，然后在要求确认时点击 “应用”。

![](/data/attachment/album/202104/30/095434rygy7byuczwd2eu5.png)

点击 “应用” 后，你会看到一个进度条和一个结果消息说所有的操作都成功了。你可以关闭该信息和主窗口，并认为你的分区已从磁盘中完全删除。

现在你已经知道了 GUI 的方法，让我们继续使用命令行。

### 使用 fdisk 命令删除分区（CLI 方法）

几乎每个 Linux 发行版都默认带有 [fdisk](https://man7.org/linux/man-pages/man8/fdisk.8.html)，我们今天就来使用这个工具。你需要知道的第一件事是，你想删除的分区被分配到哪个设备上了。为此，在终端输入以下内容：

```
sudo fdisk --list

```

这将打印出我们系统中所有的驱动器和分区，以及分配的设备。你 [需要有 root 权限](https://itsfoss.com/root-user-ubuntu/)，以便让它发挥作用。

在本例中，我将使用一个包含两个分区的 USB 驱动器，如下图所示：

![](/data/attachment/album/202104/30/095434pv69vwnzwonrzzo5.png)

系统中分配的设备是 `/sdb`，它有两个分区：`sdb1` 和 `sdb2`。现在你已经确定了哪个设备包含这些分区，你可以通过使用 `fdisk` 和设备的路径开始操作：

```
sudo fdisk /dev/sdb

```

这将在命令模式下启动 `fdisk`。你可以随时按 `m` 来查看选项列表。

接下来，输入 `p`，然后按回车查看分区信息，并确认你正在使用正确的设备。如果使用了错误的设备，你可以使用 `q` 命令退出 `fdisk` 并重新开始。

现在输入 `d` 来删除一个分区，它将立即询问分区编号，这与 “Device” 列中列出的编号相对应，在这个例子中是 1 和 2（在下面的截图中可以看到），但是可以也会根据当前的分区表而有所不同。

![](/data/attachment/album/202104/30/095435i6jpszeg6216ss6z.png)

让我们通过输入 `2` 并按下回车来删除第二个分区。你应该看到一条信息：**“Partition 2 has been deleted”**，但实际上，它还没有被删除。`fdisk` 还需要一个步骤来重写分区表并应用这些变化。你看，这就是完全网。

你需要输入 `w`，然后按回车来使这些改变成为永久性的。没有再要求确认。

在这之后，你应该看到下面这样的反馈：

![](/data/attachment/album/202104/30/095435w2ya24xjl2x03v23.png)

现在，使用 `sudo fdisk --list /dev/sdb` 查看该设备的当前分区表，你可以看到第二个分区已经完全消失。你已经完成了使用终端和 `fdisk` 命令来删除你的分区。成功了！

#### 总结

这样，这个关于如何使用终端和 GUI 工具在 Linux 中删除分区的教程就结束了。记住，要始终保持安全，在操作分区之前备份你的文件，并仔细检查你是否使用了正确的设备。删除一个分区将删除其中的所有内容，而几乎没有 [恢复](https://itsfoss.com/recover-deleted-files-linux/) 的机会。

---

via: <https://itsfoss.com/delete-partition-linux/>

作者：[Chris Patrick Carias Stas](https://itsfoss.com/author/chris/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


使用 Linux 自动化工具提高生产率

Summary: 用 AutoKey 配置你的键盘，纠正常见的错别字，输入常用的短语等等。

用 AutoKey 配置你的键盘，纠正常见的错别字，输入常用的短语等等。

>
> 用 AutoKey 配置你的键盘，纠正常见的错别字，输入常用的短语等等。
>
>
>

![](/data/attachment/album/202104/30/111130s7ffji6cmb7rkcfx.jpg "Linux keys on the keyboard for a desktop computer")

[AutoKey](https://github.com/autokey/autokey) 是一个开源的 Linux 桌面自动化工具，一旦它成为你工作流程的一部分，你就会想，如何没有它，那该怎么办。它可以成为一种提高生产率的变革性工具，或者仅仅是减少与打字有关的身体压力的一种方式。

本文将研究如何安装和开始使用 AutoKey ，介绍一些可以立即在工作流程中使用的简单方法，并探讨 AutoKey 高级用户可能会感兴趣的一些高级功能。

### 安装并设置 AutoKey

AutoKey 在许多 Linux 发行版中都是现成的软件包。该项目的 [安装指南](https://github.com/autokey/autokey/wiki/Installing) 包含许多平台的说明，也包括了从源代码进行构建的指导。本文使用 Fedora 作为操作平台。

AutoKey 有两个变体：为像 GNOME 等基于 [GTK](https://www.gtk.org/) 环境而设计的 autokey-gtk 和基于 [QT](https://www.qt.io/) 的 autokey-qt。

你可以从命令行安装任一变体：

```
sudo dnf install autokey-gtk

```

安装完成后，使用 `autokey-gtk`（或 `autokey-qt`）运行它。

### 探究界面

在将 AutoKey 设置为在后台运行并自动执行操作之前，你首先需要对其进行配置。调出用户界面（UI）配置：

```
autokey-gtk -c

```

AutoKey 提供了一些预设配置的示例。你可能希望在熟悉 UI 时将他们留作备用，但是可以根据需要删除它们。

![AutoKey 用户界面](/data/attachment/album/202104/30/111205r73r3nn3wxar33nx.png "AutoKey UI")

左侧窗格包含一个文件夹式的短语和脚本的层次结构。“<ruby> 短语 <rt>  Phrases </rt></ruby>” 代表要让 AutoKey 输入的文本。“<ruby> 脚本 <rt>  Scripts </rt></ruby>” 是动态的、程序化的等效项，可以使用 Python 编写，并且获得与键盘击键发送到活动窗口基本相同的结果。

右侧窗格构建和配置短语和脚本。

对配置满意后，你可能希望在登录时自动运行 AutoKey，这样就不必每次都启动它。你可以通过在 “<ruby> 首选项 <rt>  Preferences </rt></ruby>”菜单（“<ruby> 编辑 -> 首选项 <rt>  Edit -> Preferences” </rt></ruby>”）中勾选 “<ruby> 登录时自动启动 AutoKey <rt>  Automatically start AutoKey at login </rt></ruby>”进行配置。

![登录时自动启动 AutoKey](/data/attachment/album/202104/30/111205wpjo49ophu724tt2.png "Automatically start AutoKey at login")

### 使用 AutoKey 纠正常见的打字排版错误

修复常见的打字排版错误对于 AutoKey 来说是一个容易解决的问题。例如，我始终键入 “gerp” 来代替 “grep”。这里是如何配置 AutoKey 为你解决这些类型问题。

创建一个新的子文件夹，可以在其中将所有“打字排版错误校正”配置分组。在左侧窗格中选择 “My Phrases” ，然后选择 “<ruby> 文件 -> 新建 -> 子文件夹 <rt>  File -> New -> Subfolder </rt></ruby>”。将子文件夹命名为 “Typos”。

在 “<ruby> 文件 -> 新建 -> 短语 <rt>  File -> New -> Phrase </rt></ruby>” 中创建一个新短语。并将其称为 “grep”。

通过高亮选择短语 “grep”，然后在 <ruby> 输入短语内容 <rt>  Enter phrase contents </rt></ruby>部分（替换默认的 “Enter phrase contents” 文本）中输入 “grep” ，配置 AutoKey 插入正确的关键词。

接下来，通过定义缩写来设置 AutoKey 如何触发此短语。点击用户界面底部紧邻 “<ruby> 缩写 <rt>  Abbreviations </rt></ruby>” 的 “<ruby> 设置 <rt>  Set </rt></ruby>”按钮。

在弹出的对话框中，单击 “<ruby> 添加 <rt>  Add </rt></ruby>” 按钮，然后将 “gerp” 添加为新的缩写。勾选 “<ruby> 删除键入的缩写 <rt>  Remove typed abbreviation </rt></ruby>”；此选项让 AutoKey 将任何键入 “gerp” 一词的替换为 “grep”。请不要勾选“<ruby> 在键入单词的一部分时触发 <rt>  Trigger when typed as part of a word </rt></ruby>”，这样，如果你键入包含 “grep”的单词（例如 “fingerprint”），就不会尝试将其转换为 “fingreprint”。仅当将 “grep” 作为独立的单词键入时，此功能才有效。

![在 AutoKey 中设置缩写](/data/attachment/album/202104/30/111206en1zhspvlnbjghlh.png "Set abbreviation in AutoKey")

### 限制对特定应用程序的更正

你可能希望仅在某些应用程序（例如终端窗口）中打字排版错误时才应用校正。你可以通过设置 <ruby> 窗口过滤器 <rt>  Window Filter </rt></ruby>进行配置。单击 “<ruby> 设置 <rt>  Set </rt></ruby>” 按钮来定义。

设置<ruby> 窗口过滤器 <rt>  Window Filter </rt></ruby>的最简单方法是让 AutoKey 为你检测窗口类型：

1. 启动一个新的终端窗口。
2. 返回 AutoKey，单击 “<ruby> 检测窗口属性 <rt>  Detect Window Properties </rt></ruby>”按钮。
3. 单击终端窗口。

这将自动填充窗口过滤器，可能的窗口类值为 `gnome-terminal-server.Gnome-terminal`。这足够了，因此单击 “OK”。

![AutoKey 窗口过滤器](/data/attachment/album/202104/30/111206emyyozpeyy59coyc.png "AutoKey Window Filter")

### 保存并测试

对新配置满意后，请确保将其保存。 单击 “<ruby> 文件 <rt>  File </rt></ruby>” ，然后选择 “<ruby> 保存 <rp>  （ </rp> <rt>  Save </rt> <rp>  ） </rp></ruby>” 以使更改生效。

现在进行重要的测试！在你的终端窗口中，键入 “gerp” 紧跟一个空格，它将自动更正为 “grep”。要验证窗口过滤器是否正在运行，请尝试在浏览器 URL 栏或其他应用程序中键入单词 “gerp”。它并没有变化。

你可能会认为，使用 [shell 别名](https://opensource.com/article/19/7/bash-aliases) 可以轻松解决此问题，我完全赞成！与别名不同，只要是面向命令行，无论你使用什么应用程序，AutoKey 都可以按规则纠正错误。

例如，我在浏览器，集成开发环境和终端中输入的另一个常见打字错误 “openshfit” 替代为 “openshift”。别名不能完全解决此问题，而 AutoKey 可以在任何情况下纠正它。

### 键入常用短语

你可以通过许多其他方法来调用 AutoKey 的短语来帮助你。例如，作为从事 OpenShift 的站点可靠性工程师（SRE），我经常在命令行上输入 Kubernetes 命名空间名称：

```
oc get pods -n openshift-managed-upgrade-operator

```

这些名称空间是静态的，因此它们是键入特定命令时 AutoKey 可以为我插入的理想短语。

为此，我创建了一个名为 “Namespaces” 的短语子文件夹，并为我经常键入的每个命名空间添加了一个短语条目。

### 分配热键

接下来，也是最关键的一点，我为子文件夹分配了一个 “<ruby> 热键 <rt>  hotkey </rt></ruby>”。每当我按下该热键时，它都会打开一个菜单，我可以在其中选择（要么使用 “方向键”+回车键要么使用数字）要插入的短语。这减少了我仅需几次击键就可以输入这些命令的击键次数。

“My Phrases” 文件夹中 AutoKey 的预配置示例使用 `Ctrl+F7` 热键进行配置。如果你将示例保留在 AutoKey 的默认配置中，请尝试一下。你应该在此处看到所有可用短语的菜单。使用数字或箭头键选择所需的项目。

### 高级自动键入

AutoKey 的 [脚本引擎](https://autokey.github.io/index.html) 允许用户运行可以通过相同的缩写和热键系统调用的 Python 脚本。这些脚本可以通过支持的 API 的函数来完成诸如切换窗口、发送按键或执行鼠标单击之类的操作。

AutoKey 用户非常欢迎这项功能，发布了自定义脚本供其他用户采用。例如，[NumpadIME 脚本](https://github.com/luziferius/autokey_scripts) 将数字键盘转换为旧的手机样式的文本输入方法，[Emojis-AutoKey](https://github.com/AlienKevin/Emojis-AutoKey) 可以通过将诸如: `:smile:` 之类的短语转换为它们等价的表情符号来轻松插入。

这是我设置的一个小脚本，该脚本进入 Tmux 的复制模式，以将前一行中的第一个单词复制到粘贴缓冲区中：

```
from time import sleep

# 发送 Tmux 命令前缀（b 更改为 s）
keyboard.send_keys("<ctr>+s")
# Enter copy mode
keyboard.send_key("[")
sleep(0.01)
# Move cursor up one line
keyboard.send_keys("k")
sleep(0.01)
# Move cursor to start of line
keyboard.send_keys("0")
sleep(0.01)
# Start mark
keyboard.send_keys(" ")
sleep(0.01)
# Move cursor to end of word
keyboard.send_keys("e")
sleep(0.01)
# Add to copy buffer
keyboard.send_keys("<ctrl>+m")

```

之所以有 `sleep` 函数，是因为 Tmux 有时无法跟上 AutoKey 发送击键的速度，并且它们对整体执行时间的影响可忽略不计。

### 使用 AutoKey 自动化

我希望你喜欢这篇使用 AutoKey 进行键盘自动化的探索，它为你提供了有关如何改善工作流程的一些好主意。如果你在使用 AutoKey 时有什么有用的或新颖的方法，一定要在下面的评论中分享。

---

via: <https://opensource.com/article/21/2/linux-autokey>

作者：[Matt Bargenquast](https://opensource.com/users/mbargenquast) 选题：[lujun9972](https://github.com/lujun9972) 译者：[stevenzdg988](https://github.com/stevenzdg988) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | 曾经苹果也想让 Flash 运行在 iPhone 上

Summary: 更多：• 争议之下，纽约警方将其配备的机器狗退回波士顿动力 • 《DNF》开发商购买 1 亿美元的比特币

![](/data/attachment/album/202104/30/180925csd9ybiggg7y71dz.jpg)

### 曾经苹果也想让 Flash 运行在 iPhone 上

![](/data/attachment/album/202104/30/180937m566r55shz45hb4q.jpg)

iPhone 和 iPad 从未支持过 Flash，对许多人来说，这是一个相当大的缺点。乔布斯本人表示过，苹果公司无意将 Flash 引入 iOS。但事实证明，乔布斯并不是不想让 Flash 出现在 iPhone 和 iPad 上。苹果公司的前高管在 Epic 诉苹果案中提供了一份[证词](https://9to5mac.com/2021/04/27/apple-tried-to-help-adobe-bring-flash-to-ios-but-the-results-were-embarrassing/)，泄漏了 Adobe 和苹果在 Flash 方面的工作，“我们试图让 Flash 发挥作用……我们绝对有兴趣。当我们让它在 iOS 上运行时，它的性能简直是糟糕透顶，令人尴尬。”

当年如此流行的 Flash 最终却是因为问题多到补不胜补而被放弃。

### 争议之下，纽约警方将其配备的机器狗退回波士顿动力

![](/data/attachment/album/202104/30/180949z1ytwkby1ryerw2w.jpg)

纽约警察局去年开始租赁这种昵称为 Digidog 的机器人。该机器人在其任期内被[部署](/article-13312-1.html)了大约六次，主要是在潜在的敌对环境中充当移动摄像机。该部门在 2 月份说，“纽约市警察局自 20 世纪 70 年代以来一直在使用机器人，在人质及危险品事件中拯救生命。这个型号的机器人正在接受测试，以评估它的能力，与我们的紧急服务单位和拆弹小组使用的其他型号相比较。”

然而，许多人认为该机器人象征着警察开支的浪费和执法部门正在部署的越来越积极的战术。波士顿动力公司称这种机器从未被武器化，因为这样做会违反公司的服务条款，但它正被部署在越来越有争议的场合。巨大争议之下，纽约警察局取消了对美国公司波士顿动力公司制造的机器狗的试验。

虽然机器人（狗）用在特殊场景能减少很多危险，但是需要警惕的是机器人的使用是否会侵犯人类的空间。

### 《DNF》开发商购买 1 亿美元的比特币

![](/data/attachment/album/202104/30/180959o4064f9560w7364w.jpg)

韩国游戏戏开发商 Nexon 开发了《地下城与勇士》（DNF）、《冒险岛》等多款作品。据报道，Nexon 宣布已购买了价值 1 亿美元的 1717 枚比特币，成功加入了特斯拉等拥有数字货币的科技公司阵营。Nexon 表示，购买比特币也是 Nexon 的战略方向之一，在当下的经济环境当中，Nexon 相信，在确保公司未来投资和资产价值的同时，比特币能为公司资产提供持续的稳定性及流动性。

看来比特币是保持盈利的重要方法了。


Ubuntu MATE 21.04 更新，多项新功能来袭

>
> 与 Yaru 团队合作，Ubuntu MATE 带来了一个主题大修、一系列有趣的功能和性能改进。
>
>
>

![](/data/attachment/album/202105/01/105355ccrggizcqg52zcgc.png)

自从 18.10 发行版以来，Yaru 一直都是 Ubuntu 的默认用户桌面，今年，Yaru 团队与Canonical Design 和 Ubuntu 桌面团队携手合作，为 Ubuntu MATE 21.04 创建了新的外观界面。

### Ubuntu MATE 21.04 有什么新变化？

以下就是 Ubuntu MATE 21.04 此次发布中的关键变化：

#### MATE 桌面

此次更新的 MATE 桌面相比以往并没有较大改动，此次只是修复了错误 BUG 同时更新了语言翻译，Debian 中的 MATE 软件包已经更新，用户可以下载所有的 BUG 修复和更新。

#### Avatana 指示器

![](/data/attachment/album/202105/01/105357sl2m263axdzdzdnp.jpg)

这是一个控制面板指示器（也称为系统托盘）的动作、布局和行为的系统。现在，你可以从控制中心更改 Ayatana 指示器的设置。

添加了一个新的打印机标识，并删除了 RedShift 以保持稳定。

#### Yaru MATE 主题

Yaru MATE 现在是 Yaru 主题的派生产品。Yaru MATE 将提供浅色和深色主题，浅色作为默认主题。来确保更好的应用程序兼容性。

从现在开始，用户可以使用 GTK 2.x、3.x、4.x 浅色和深色主题，也可以使用 Suru 图标以及一些新的图标。

LibreOffice 在 MATE 上会有新的默认桌面图标，字体对比度也得到了改善。你会发现阅读小字体文本或远距离阅读更加容易。

如果在系统层面选择了深色模式，网站将维持深色。要让网站和系统的其它部分一起使用深色主题，只需启用 Yaru MATE 深色主题即可。

现在，Macro、Metacity 和 Compiz 的管理器主题使用了矢量图标。这意味着，如果你的屏幕较大，图标不会看起来像是像素画，又是一个小细节！

#### Yaru MATE Snap 包

尽管你现在无法安装 MATE 主题，但是不要着急，它很快就可以了。gtk-theme-yaru-mate 和 icon-theme-yaru-mate Snap 包是预安装的，可以在需要将主题连接到兼容的 Snap 软件包时使用。

根据官方发布的公告，Snapd 很快就会自动将你的主题连接到兼容的 Snap 包：

>
> Snapd 很快就能自动安装与你当前活动主题相匹配的主题的 snap 包。我们创建的 snap 包已经准备好在该功能可用时与之整合。
>
>
>

#### Mutiny 布局的新变化

![应用了深色主题的 Mutiny 布局](/data/attachment/album/202105/01/105357sl2m263axdzdzdnp.jpg)

Mutiny 布局模仿了 Unity 的桌面布局。删除了 MATE 软件坞小应用，并且对 Mutiny 布局进行了优化以使用 Plank。Plank 会被系统自动应用主题。这是通过 Mate Tweak 切换到 Mutiny 布局完成的。Plank 的深色和浅色 Yaru 主题都包含在内。

其他调整和更新使得 Mutiny 在不改变整体风格的前提下具备了更高的可靠性

#### 主要应用升级

* Firefox 87（火狐浏览器）
* LibreOffice 7.1.2.2（办公软件）
* Evolution 3.40（邮件）
* Celluloid 0.20（视频播放器）

#### 其他更改

* Linux 命令的忠实用户会喜欢在 Ubuntu MATE 中默认安装的 `neofetch`、`htop` 和 `inxi` 之类的命令。
* 树莓派的 21.04 版本很快将会发布。
* Ubuntu MATE 上没有离线升级选项。
* 针对侧边和底部软件坞引入了新的 Plank 主题，使其与 Yaru MATE 的配色方案相匹配。
* Yaru MATE 的窗口管理器为侧边平铺的窗口应用了简洁的边缘风格。
* Ubuntu MATE 欢迎窗口有多种色彩可供选择。
* Yaru MATE 主题和图标主题的快照包已在 Snap Store 中发布。
* 为 Ubuntu MATE 20.04 LTS 的用户发布了 Yaru MATE PPA。

### 下载 Ubuntu MATE 21.04

你可以从官网上下载镜像：

* [Ubuntu MATE 21.04](https://ubuntu-mate.org/download/)

如果你对此感兴趣，[请查看发行说明](https://discourse.ubuntu.com/t/hirsute-hippo-release-notes/19221)。

你对尝试新的 Yaru MATE 感到兴奋吗？你觉得怎么样？请在下面的评论中告诉我们。

---

via: <https://news.itsfoss.com/ubuntu-mate-21-04-release/>

作者：[Asesh Basu](https://news.itsfoss.com/author/asesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Kevin3599](https://github.com/Kevin3599) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


我们能从明尼苏达大学事件吸取什么教训？

Summary: 本文是 LWN 编辑对事件后继发展的总结和观点。

测试和直接搞是两回事。搞事的人都道歉了，别洗了。

来自223.104.212.196的 Chrome Mobile 77.0|Android 10 用户

严格来说内核社区维护者大部分情况下都保证不了提交的代码是安全有效的，很多问题都是在某些场景下才会暴露出来，单看代码根本看不出问题，而为了验证提交的代码去复现问题可能会有很高的成本，内核社区缺人缺钱，更是做不了了

不尊重别人的劳动成果，自己树靶子自己打，无良，这篇博客原文底下的的评论一样是批判。为了论文功利至此脸都不要了。这样的论文对科研也没什么价值。

附上查到的作者本人

软件学院三下乡人物专访--卢康杰

卢康杰，2005年到重庆大学软件学院读本科

作者：本科阶段对自己能力提升最大的事情是什么？

答：参加了一些学生工作，给我印象最深的就是当有一个机会在眼前的时候，一定要抓住它，机会稍纵即逝，要把握住自己的命运。

不是所有机会的都要去，那是不是犯罪也可以？专访通篇未提到个人品质该包含道德

目的性不讨论，不过行为本身值得深思，如果有些人已经开始那么干了，而且没被发现，细思极恐。

这位中国的研究人员不一定是第一个有这个想法的人。

Linux内核安全重要性日益凸显，内核的合入维护越来越庞大，如果真有这种行为存在，维护者很难发现漏洞。

本文是 LWN 编辑对事件后继发展的总结和观点。

![](/data/attachment/album/202105/01/201924ok344z553z542nw5.jpg)

4 月 20 日，全世界都知道了明尼苏达大学（UMN）进行的一项研究计划，该计划涉及提交有意的错误补丁以纳入 Linux 内核。[从那时起](/article-13320-1.html)，由这项工作产生的一篇论文被撤回了，各种信件来来回回，来自 UMN 的许多补丁被审计。显然，现在是时候对情况进行更新了。

>
> LCTT 译注：明尼苏达大学“伪君子提交”这件事引发了开源和技术社区的很多争议，我们也一直关注此事，本文是 LWN 编辑对事件后继发展的总结和观点。
>
>
>

关于[这项研究的论文](https://github.com/QiushiWu/QiushiWu.github.io/blob/main/papers/OpenSourceInsecurity.pdf)的撰写并不是最近事件的直接原因；相反，它是由 UMN 的另一位开发者发布的一个源于实验性静态分析工具的错误补丁引起的。这导致内核社区的开发者怀疑，提交故意恶意补丁的工作仍在进行。情况显然不是这样的，但当整个故事变得清晰时，讨论已经全面进行了。

>
> LCTT 译注：提交“实验性静态分析工具的错误补丁”的开发者也是 UMN “伪君子提交”研究团队的成员，只是按该团队的说法，“伪君子提交”研究已经结束，最近引发争议的补丁来自另外一个项目。
>
>
>

老话仍然适用：**不应该把那些可以充分解释为无能的东西归结为恶意。**

4 月 22 日，Linux 基金会技术顾问委员会（TAB，写作本文的 LWN 编辑是该委员会的成员）发表了一份[简短的声明](https://lwn.net/Articles/854064/)，指出，除其他事项外，最近的补丁似乎是真诚地提交的。同时，Linux 基金会和 TAB 给 UMN 的研究人员发了一封信，概述了应该如何处理这种情况；该信没有公开发布，但 ZDNet 显然从某个地方[得到了一份副本](https://www.zdnet.com/article/the-linux-foundations-demands-to-the-university-of-minnesota-for-its-bad-linux-patches/)。除其他事项外，信中要求完全公开作为 UMN 项目的一部分而发送的错误补丁，并要求撤回这项工作所产生的论文。

作为回应，UMN 的研究人员发布了一封[公开信](/article-13330-1.html)，向社区道歉，几天后又发布了他们作为“伪君子提交”项目的一部分所做工作的[总结](https://www-users.cs.umn.edu/~kjlu/papers/full-disclosure.pdf)。总共有五个补丁是从两个 sock-puppet 账户提交的，但其中[一个](https://lwn.net/ml/linux-kernel/20200804183650.4024-1-jameslouisebond@gmail.com/)是普通的 bug 修复，被错误地从这个错误的账户发送。在剩下的四个补丁中，[其中一个](https://lwn.net/ml/linux-kernel/20200821031209.21279-1-acostag.ubuntu@gmail.com/#t)是试图插入一个 bug，但是它本身没插入成功，所以这个补丁实际上是有效的；另外三个（[1](https://lwn.net/ml/linux-kernel/20200809221453.10235-1-jameslouisebond@gmail.com/)、[2](https://lwn.net/ml/linux-kernel/20200821034458.22472-1-acostag.ubuntu@gmail.com/)、[3](https://lwn.net/ml/linux-kernel/20200821070537.30317-1-jameslouisebond%40gmail.com/)）包含真正的 bug，这三个都没有被维护者接受，尽管拒绝的原因不一定是有关的 bug。

>
> LCTT 译注：根据 UMN 团队发布的总结：
>
>
> * 第一个补丁是以“伪君子提交”而发出的，但是后来实际检查发现实际解决了问题，于是 UMN 团队就没有阻止该补丁被合入。
> * 第二个补丁没有合入，但是内核维护者说之前有个别人的类似实现的补丁合并过，后来发现有问题而被别人撤销了。
> * 第三个补丁没有合入，内核维护者发现了一个问题而没有接受，但是其实该补丁还有另外一个问题并没有被发现。
> * 第四个补丁没有合入，和上一个类似，内核维护者没有发现有意放入的缺陷，而是找到另外的编码问题，因此没有合入。
> * 第五个补丁是有效的补丁，但不是这个项目的，使用了错误的邮箱发出的。
>
>
>

论文本身已被撤回，不会按原计划在 5 月提交。希望大家可以认为 UMN 在短期内不会再进行类似的研究了。

>
> LCTT 译注：在原文下面有不少评论认为这个研究方向应该继续下去，只是方式方法需要改善。
>
>
>

### 补丁的重新审查

UMN 活动引起的关注的一个直接结果是，人们对其开发者失去了信任，加上某些方面希望采取某种惩罚性行动。因此，当整个事件爆发时，首先发生的事情之一是 Greg Kroah-Hartman（GKH）发布了一个由 [190 个部分组成的补丁系列](https://lwn.net/ml/linux-kernel/20210421130105.1226686-1-gregkh@linuxfoundation.org/)，以撤销他能找到的尽可能多的 UMN 的补丁。事实上，这并不是所有的补丁；他提到了另外 68 个需要人工审查的补丁清单，因为它们不容易撤销。

碰巧的是，这些“容易撤销”的补丁也需要人工审查；一旦最初的愤怒过去，就没有什么愿望去恢复那些实际上没有错误的补丁。在过去的一周里，这种审查过程一直在进行，一些开发人员在为之努力。大多数可疑的补丁被证明是可以接受的（即使不是很好），已经从撤销列表中删除了；如果本文作者的计数是正确的，仍有 42 个补丁将被从内核中撤出。

对于这 42 个补丁，撤销背后的原因各不相同。在某些情况下，这些补丁适用于旧的、可能是未使用的驱动程序，而且没有人愿意去适当地审查它们。在其他情况下，其希望实现的变更做得很差，将以更好的方式重新实现。而有些补丁包含了严重的错误；这些肯定需要被恢复（而且一开始就不应该被接受）。

不过，看一下全套的 UMN 补丁，印证了一些我们的早期印象。首先，几乎所有的补丁都解决了某种真正的（即使是晦涩难懂的且难以解决）问题；为之写一个补丁是有理由的。虽然这些补丁中有许多显示出对代码的理解程度很低，因此包含了错误，但似乎其中任何一个修复程序的意图都不大可能是恶意的。

也就是说，“恶意”有多种定义。对一些相关的开发者来说，发布未经验证的实验性静态分析工具的补丁而不披露其性质是一种恶意行为。这是另一种涉及未经同意的人类的实验形式。至少，这是对内核开发社区有效工作所需的信任的一种侵犯。

>
> LCTT 译注：如果研究涉及到人类，为了避免人类受到伤害，需要取得人类同意，这就是研究需要得到 IRB 许可的原因。UMN 认为 “伪君子提交” 不是针对人类的研究，给予了 IRB 免除许可。在这个事件中，有人对 UMN IRB 的意见也很大，而且怀疑 IRB 是否有能力对计算机相关研究给出有效判断。
>
>
>

这 190 个补丁中有 42 个坏补丁，坏补丁比率是 22%。很有可能，对几乎任何一个内核开发者的 190 个补丁进行详细审查，都会发现一些回想起来并不是一个好主意的补丁。但愿这个比率不会接近 22%。但必须说的是，所有这些补丁都被整个内核的子系统维护者所接受，这不是一个好的结果。也许这比最初的“伪君子提交”的研究人员所寻找的结果更有意思。**他们故意插入 bug 的努力失败了，但却在无意中增加几十个 bug**。

同时，还有一份不能干净地撤销的补丁清单。这个名单还没有公布，但 GKH 是从其中的七个子集开始的。他还指出，TAB 将在所有这些补丁的审计工作完成后公布一份完整的报告。到目前为止，这些补丁中还没有任何一个在主线上被撤销；这似乎有可能在 5.13 合并窗口结束时发生。

### 吸取的教训

从这一系列事件中得到的关键教训之一显然是：**不要把自由软件开发社区作为你的实验性工具的一种免费验证服务**。内核开发者很高兴看到新工具的产生，并且 —— 如果这些工具能带来好的结果 —— 就使用它们。他们也会帮助测试这些工具，但他们不太乐意成为缺乏适当审查和解释的工具产生的补丁的接受者。

另一个教训是我们已经知道的：内核维护者（以及许多其他自由软件项目的维护者）工作压力过度，没有时间正确地审查经过他们手中的每一个补丁。因此，他们不得不依赖向他们提交补丁的开发者的可信度。可以说，当这种信任得到妥善建立时，内核开发过程是勉强可持续的；如果通常无法信任进入的补丁时，那么它将无法维持下去。

推论 —— 也是我们已经知道的 —— 是**进入内核的代码往往不像我们所想的那样得到很好的审查**。我们希望相信每一行被合并的代码都经过了高质量的内核开发人员的仔细审查。有些代码确实得到了这种审查，但不是所有的代码。例如，考虑一下 5.12 开发周期（一个相对较小的周期），它在十周的时间里向内核添加了超过 50 万行的代码。仔细审查 50 万行代码所需的资源将是巨大的，因此，不幸的是，其中许多行在被合并之前只得到了粗略的审查而已。

最后一个教训是，人们可能倾向于认为内核正面临着被具有比 UMN 研究人员所展示的更多技能和资源的行为者插入恶意补丁的可怕风险。这可能是事实，但事情的简单真相是，**正规的内核开发者继续以这样的速度插入错误，恶意行为者应该没有什么必要增加更多**。2 月份发布的 5.11 内核，到 5.11.17 为止，在稳定更新中已经积累了 2281 个修复。如果我们做一个（过于简单的）假设，即每个修复都会修正一个原始的 5.11 补丁，那么进入 5.11 的补丁中有 16%（到目前为止）被证明是有错误的。这并不比 UMN 补丁的比率好多少。

所以，这也许是我们从整个经历中得到的真正教训：内核处理流程的速度是它最好的属性之一，我们都依赖它来尽可能快地获得功能。但是**这种速度可能与严肃的补丁审查和低数量的错误不相容**。在一段时间内，我们可能会看到处理变得有点慢，因为维护者觉得有必要更仔细地审查变化，特别是那些来自新的开发人员。但是，如果我们不能将更谨慎的处理流程制度化，我们将继续看到大量的 bug，而这些 bug 是否是故意插入的，其实并不重要。

---

via: <https://lwn.net/SubscriberLink/854645/334317047842b6c3/>

作者：Jonathan Corbet 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-13349-1.html) 荣誉推出


硬核观察 | Linus Torvalds 认为 GPL 是 Linux 成功的重要部分

Summary: 更多：• 奇亚币占用超过 1EB 存储空间 • Opera 原生支持 IPFS

只支持IPFS+filecoin，反对其他虚拟货币

不看好filecoin。

来自223.104.212.63的 Chrome Mobile 77.0|Android 10 用户

更多：• 奇亚币占用超过 1EB 存储空间 • Opera 原生支持 IPFS

![](/data/attachment/album/202105/01/212503y22k8kn8m4f5204y.jpg)

### Linus Torvalds 认为 GPL 是 Linux 成功的重要部分

![](/data/attachment/album/202105/01/212519hhgq7irysqg1gr7q.jpg)

Linux 创始人 Linus Torvalds 接受[邮件采访](https://www.tag1consulting.com/blog/interview-linus-torvalds-linux-and-git)回顾了 Linux 的三十年。Torvalds 说开发 Linux 时他真的没有想得太远，更多是一种概念验证，向外展示下他过去几个月的工作成果，更好的理解他的新 PC 硬件。Linux 最初是作为替代品提供给负担不起昂贵的商业 UNIX 系统的人，因此它采用的许可证是不能商业使用。当有人想通过软盘在本地的 Unix 用户组分发 Linux 但想要至少收回软盘的费用后，他切换到了 GPL 许可证。随后基于软盘的发行版 SLS 和 Slackware 就诞生了。他相信选择 GPL 是 Linux 以及 Git 成功的一个重要部分。他认为 GPLv2 完美的平衡了“每个人在相同规则下的工作”。

虽然不是每个开源软件都喜欢 GPL，但是如果没有 GPL ，或许不会有如今的 Linux 和整个开源世界。

### 奇亚币占用超过 1EB 存储空间

![](/data/attachment/album/202105/01/212529k3wk73161wgt9oor.jpg)

据报道，在过去的一个月时间里，分配给奇亚币（CHIA）的硬盘空间从 120PB 一直增加到 1143PB，也就是 1.14 EB，相当于 6 万多个 20TB 硬盘，奇亚币已经让硬件市场形成了一个新的领域。

奇亚币是以硬盘空间和时间来作为资源，利用 CPU 或者显卡通过某种算法将硬盘空间写入数据，用户将数据存储在硬盘上一段时间，赢得奖励的机会和分配的空间成正比。简单来说的话就是程序在你硬盘上写满了彩票号码，服务器会不时随机抽奖，分配的硬盘空间越大，在线时间越长，中奖的可能性越大。这迫使挖奇亚币需要尽可能扩充存储空间容量和长时间运行，事实上除了耗损硬盘，内存的消耗也很大，整个系统各个模块加起来的耗电量也不低。

比特币、以太坊等一直被批评空耗能源和处理能力而挖掘无用的加密货币，而奇亚币则把没被其它加密货币利用的存储能力也利用了。以至于计算机用户们哀叹显卡、CPU 之后，硬盘也买不到了。

### Opera 原生支持 IPFS

![](/data/attachment/album/202105/01/212540oezjx30exjx20xxd.jpg)

Opera [宣布](https://blogs.opera.com/tips-and-tricks/2021/04/say-hello-to-web3-as-opera-adds-native-support-to-unstoppable-domains/)原生支持点对点协议 IPFS（星际文件系统）。在这之前，Brave 成为首个支持 IPFS 点对点协议的浏览器。IPFS 类似 BitTorrent，设计作为去中心化储存系统，允许用户在数百甚至数千个节点之间共享内容。

IPFS 的理想非常好，但是可能与现实的兼容性有点问题。


使用 Apache Kafka 和 SigNoz 实现应用可观测性

Summary: SigNoz 帮助开发者使用最小的精力快速实现他们的可观测性目标。

SigNoz 帮助开发者使用最小的精力快速实现他们的可观测性目标。

>
> SigNoz 帮助开发者使用最小的精力快速实现他们的可观测性目标。
>
>
>

![](/data/attachment/album/202105/01/231703oy5ln5nnqkuhxt1t.jpg "Ship captain sailing the Kubernetes seas")

SigNoz 是一个开源的应用可观察性平台。SigNoz 是用 React 和 Go 编写的，它从头到尾都是为了让开发者能够以最小的精力尽快实现他们的可观察性目标。

本文将详细介绍该软件，包括架构、基于 Kubernetes 的部署以及一些常见的 SigNoz 用途。

### SigNoz 架构

SigNoz 将几个组件捆绑在一起，创建了一个可扩展的、耦合松散的系统，很容易上手使用。其中一些最重要的组件有：

* OpenTelemetry Collector
* Apache Kafka
* Apache Druid

[OpenTelemetry Collector](https://github.com/open-telemetry/opentelemetry-collector) 是跟踪或度量数据收集引擎。这使得 SigNoz 能够以行业标准格式获取数据，包括 Jaeger、Zipkin 和 OpenConsensus。之后，收集的数据被转发到 Apache Kafka。

SigNoz 使用 Kafka 和流处理器来实时获取大量的可观测数据。然后，这些数据被传递到 Apache Druid，它擅长于存储这些数据，用于短期和长期的 SQL 分析。

当数据被扁平化并存储在 Druid 中，SigNoz 的查询服务可以查询并将数据传递给 SigNoz React 前端。然后，前端为用户创建漂亮的图表，使可观察性数据可视化。

![SigNoz architecture](/data/attachment/album/202105/01/231722jhxch2akvpcsusss.png "SigNoz architecture")

### 安装 SigNoz

SigNoz 的组件包括 Apache Kafka 和 Druid。这些组件是松散耦合的，并协同工作，以确保终端用户的无缝体验。鉴于这些组件，最好将 SigNoz 作为 Kubernetes 或 Docker Compose（用于本地测试）上的微服务组合来运行。

这个例子使用基于 Kubernetes Helm Chart 的部署在 Kubernetes 上安装 SigNoz。作为先决条件，你需要一个 Kubernetes 集群。如果你没有可用的 Kubernetes 集群，你可以使用 [MiniKube](https://minikube.sigs.k8s.io/docs/start/) 或 [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) 等工具，在你的本地机器上创建一个测试集群。注意，这台机器至少要有 4GB 的可用空间才能工作。

当你有了可用的集群，并配置了 kubectl 来与集群通信，运行：

```
$ git clone https://github.com/SigNoz/signoz.git && cd signoz
$ helm dependency update deploy/kubernetes/platform
$ kubectl create ns platform
$ helm -n platform install signoz deploy/kubernetes/platform
$ kubectl -n platform apply -Rf deploy/kubernetes/jobs
$ kubectl -n platform apply -f deploy/kubernetes/otel-collector

```

这将在集群上安装 SigNoz 和相关容器。要访问用户界面 （UI），运行 `kubectl port-forward` 命令。例如：

```
$ kubectl -n platform port-forward svc/signoz-frontend 3000:3000

```

现在你应该能够使用本地浏览器访问你的 SigNoz 仪表板，地址为 `http://localhost:3000`。

现在你的可观察性平台已经建立起来了，你需要一个能产生可观察性数据的应用来进行可视化和追踪。对于这个例子，你可以使用 [HotROD](https://github.com/jaegertracing/jaeger/tree/master/examples/hotrod)，一个由 Jaegar 团队开发的示例应用。

要安装它，请运行：

```
$ kubectl create ns sample-application
$ kubectl -n sample-application apply -Rf sample-apps/hotrod/

```

### 探索功能

现在你应该有一个已经安装合适仪表的应用，并可在演示设置中运行。看看 SigNoz 仪表盘上的指标和跟踪数据。当你登录到仪表盘的主页时，你会看到一个所有已配置的应用列表，这些应用正在向 SigNoz 发送仪表数据。

![SigNoz dashboard](/data/attachment/album/202105/01/231722afr4g9r9z9boz45f.png "SigNoz dashboard")

#### 指标

当你点击一个特定的应用时，你会登录到该应用的主页上。指标页面显示最近 15 分钟的信息（这个数字是可配置的），如应用的延迟、平均吞吐量、错误率和应用目前访问最高的接口。这让你对应用的状态有一个大概了解。任何错误、延迟或负载的峰值都可以立即看到。

![Metrics in SigNoz](/data/attachment/album/202105/01/231723a4h7uhbhh4b6ahxx.png "Metrics in SigNoz")

#### 追踪

追踪页面按时间顺序列出了每个请求的高层细节。当你发现一个感兴趣的请求（例如，比预期时间长的东西），你可以点击追踪，查看该请求中发生的每个行为的单独时间跨度。下探模式提供了对每个请求的彻底检查。

![Tracing in SigNoz](/data/attachment/album/202105/01/231723meexmz14ioor8g13.png "Tracing in SigNoz")

![Tracing in SigNoz](/data/attachment/album/202105/01/231723ttzi3iqdi0wz3rei.png "Tracing in SigNoz")

#### 用量资源管理器

大多数指标和跟踪数据都非常有用，但只在一定时期内有用。随着时间的推移，数据在大多数情况下不再有用。这意味着为数据计划一个适当的保留时间是很重要的。否则，你将为存储支付更多的费用。用量资源管理器提供了每小时、每一天和每一周获取数据的概况。

![SigNoz Usage Explorer](/data/attachment/album/202105/01/231723f6cc5um366mjei68.png "SigNoz Usage Explorer")

### 添加仪表

到目前为止，你一直在看 HotROD 应用的指标和追踪。理想情况下，你会希望对你的应用进行检测，以便它向 SigNoz 发送可观察数据。参考 SigNoz 网站上的[仪表概览](https://signoz.io/docs/instrumentation/overview/)。

SigNoz 支持一个与供应商无关的仪表库，OpenTelemetry，作为配置仪表的主要方式。OpenTelemetry 提供了各种语言的仪表库，支持自动和手动仪表。

### 了解更多

SigNoz 帮助开发者快速开始度量和跟踪应用。要了解更多，你可以查阅 [文档](https://signoz.io/docs/)，加入[社区](https://github.com/SigNoz/signoz#community)，并访问 [GitHub](https://github.com/SigNoz/signoz) 上的源代码。

---

via: <https://opensource.com/article/21/4/observability-apache-kafka-signoz>

作者：[Nitish Tiwari](https://opensource.com/users/tiwarinitish86) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


dnspeep：监控 DNS 查询的工具

Summary: 在过去的几天中，我编写了一个叫作 dnspeep 的小工具。我会讨论如何去尝试它、能做什么、为什么我要编写它，以及当我在开发时所遇到的问题。

![](/data/attachment/album/202105/02/191521i4ycjm7veln426vy.jpg)

在过去的几天中，我编写了一个叫作 [dnspeep](https://github.com/jvns/dnspeep) 的小工具，它能让你看到你电脑中正进行的 DNS 查询，并且还能看得到其响应。它现在只有 [250 行 Rust 代码](https://github.com/jvns/dnspeep/blob/f5780dc822df5151f83703f05c767dad830bd3b2/src/main.rs)。

我会讨论如何去尝试它、能做什么、为什么我要编写它，以及当我在开发时所遇到的问题。

### 如何尝试

我构建了一些二进制文件，因此你可以快速尝试一下。

对于 Linux（x86）：

```
wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-linux.tar.gz
tar -xf dnspeep-linux.tar.gz
sudo ./dnspeep

```

对于 Mac：

```
wget https://github.com/jvns/dnspeep/releases/download/v0.1.0/dnspeep-macos.tar.gz
tar -xf dnspeep-macos.tar.gz
sudo ./dnspeep

```

它需要以<ruby> 超级用户 <rt>  root </rt></ruby>身份运行，因为它需要访问计算机正在发送的所有 DNS 数据包。 这与 `tcpdump` 需要以超级身份运行的原因相同：它使用 `libpcap`，这与 tcpdump 使用的库相同。

如果你不想在超级用户下运行下载的二进制文件，你也能在 <https://github.com/jvns/dnspeep> 查看源码并且自行编译。

### 输出结果是什么样的

以下是输出结果。每行都是一次 DNS 查询和响应：

```
$ sudo dnspeep
query   name                 server IP      response
A       firefox.com          192.168.1.1    A: 44.235.246.155, A: 44.236.72.93, A: 44.236.48.31
AAAA    firefox.com          192.168.1.1    NOERROR
A       bolt.dropbox.com     192.168.1.1    CNAME: bolt.v.dropbox.com, A: 162.125.19.131

```

这些查询是来自于我在浏览器中访问的 `neopets.com`，而 `bolt.dropbox.com` 查询是因为我正在运行 Dropbox 代理，并且我猜它不时会在后台运行，因为其需要同步。

### 为什么我要开发又一个 DNS 工具？

之所以这样做，是因为我认为当你不太了解 DNS 时，DNS 似乎真的很神秘！

你的浏览器（和你电脑上的其他软件）一直在进行 DNS 查询，我认为当你能真正看到请求和响应时，似乎会有更多的“真实感”。

我写这个也把它当做一个调试工具。我想“这是 DNS 的问题？”的时候，往往很难回答。我得到的印象是，当尝试检查问题是否由 DNS 引起时，人们经常使用试错法或猜测，而不是仅仅查看计算机所获得的 DNS 响应。

### 你可以看到哪些软件在“秘密”使用互联网

我喜欢该工具的一方面是，它让我可以感知到我电脑上有哪些程序正使用互联网！例如，我发现在我电脑上，某些软件出于某些理由不断地向 `ping.manjaro.org` 发送请求，可能是为了检查我是否已经连上互联网了。

实际上，我的一个朋友用这个工具发现，他的电脑上安装了一些以前工作时的企业监控软件，但他忘记了卸载，因此你甚至可能发现一些你想要删除的东西。

### 如果你不习惯的话， tcpdump 会令人感到困惑

当我试图向人们展示他们的计算机正在进行的 DNS 查询时，我的第一感是想“好吧，使用 tcpdump”！而 `tcpdump` 确实可以解析 DNS 数据包！

例如，下方是一次对 `incoming.telemetry.mozilla.org.` 的 DNS 查询结果：

```
11:36:38.973512 wlp3s0 Out IP 192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)
11:36:38.996060 wlp3s0 In  IP 192.168.1.1.53 > 192.168.1.181.42281: 56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)

```

绝对可以学着去阅读理解一下，例如，让我们分解一下查询：

`192.168.1.181.42281 > 192.168.1.1.53: 56271+ A? incoming.telemetry.mozilla.org. (48)`

* `A?` 意味着这是一次 A 类型的 DNS **查询**
* `incoming.telemetry.mozilla.org.` 是被查询的名称
* `56271` 是 DNS 查询的 ID
* `192.168.1.181.42281` 是源 IP/端口
* `192.168.1.1.53` 是目的 IP/端口
* `(48)` 是 DNS 报文长度

在响应报文中，我们可以这样分解：

`56271 3/0/0 CNAME telemetry-incoming.r53-2.services.mozilla.com., CNAME prod.data-ingestion.prod.dataops.mozgcp.net., A 35.244.247.133 (180)`

* `3/0/0` 是在响应报文中的记录数：3 个回答，0 个权威记录，0 个附加记录。我认为 tcpdump 甚至只打印出回答响应报文。
* `CNAME telemetry-incoming.r53-2.services.mozilla.com`、`CNAME prod.data-ingestion.prod.dataops.mozgcp.net.` 和 `A 35.244.247.133` 是三个响应记录。
* `56271` 是响应报文 ID，和查询报文的 ID 相对应。这就是你如何知道它是对前一行请求的响应。

我认为，这种格式最难处理的是（作为一个只想查看一些 DNS 流量的人），你必须手动匹配请求和响应，而且它们并不总是相邻的行。这就是计算机擅长的事情！

因此，我决定编写一个小程序（`dnspeep`）来进行匹配，并排除一些我认为多余的信息。

### 我在编写时所遇到的问题

在撰写本文时，我遇到了一些问题：

* 我必须给 `pcap` 包打上补丁，使其能在 Mac 操作系统上和 Tokio 配合工作（[这个更改](https://github.com/ebfull/pcap/pull/168)）。这是其中的一个 bug，花了很多时间才搞清楚，用了 1 行代码才解决 :smiley:
* 不同的 Linux 发行版似乎有不同的 `libpcap.so` 版本。所以我不能轻易地分发一个动态链接 libpcap 的二进制文件（你可以 [在这里](https://github.com/google/gopacket/issues/734) 看到其他人也有同样的问题）。因此，我决定在 Linux 上将 libpcap 静态编译到这个工具中。但我仍然不太了解如何在 Rust 中正确做到这一点作，但我通过将 `libpcap.a` 文件复制到 `target/release/deps` 目录下，然后直接运行 `cargo build`，使其得以工作。
* 我使用的 `dns_parser` carte 并不支持所有 DNS 查询类型，只支持最常见的。我可能需要更换一个不同的工具包来解析 DNS 数据包，但目前为止还没有找到合适的。
* 因为 `pcap` 接口只提供原始字节（包括以太网帧），所以我需要 [编写代码来计算从开头剥离多少字节才能获得数据包的 IP 报头](https://github.com/jvns/dnspeep/blob/f5780dc822df5151f83703f05c767dad830bd3b2/src/main.rs#L136)。我很肯定我还遗漏了一些情形。

我对于给它取名也有过一段艰难的时光，因为已经有许多 DNS 工具了（dnsspy！dnssnoop！dnssniff！dnswatch！）我基本上只是查了下有关“监听”的每个同义词，然后选择了一个看起来很有趣并且还没有被其他 DNS 工具所占用的名称。

该程序没有做的一件事就是告诉你哪个进程进行了 DNS 查询，我发现有一个名为 [dnssnoop](https://github.com/lilydjwg/dnssnoop) 的工具可以做到这一点。它使用 eBPF，看上去很酷，但我还没有尝试过。

### 可能会有许多 bug

我只在 Linux 和 Mac 上简单测试了一下，并且我已知至少有一个 bug（不支持足够多的 DNS 查询类型），所以请在遇到问题时告知我！

尽管这个 bug 没什么危害，因为这 libpcap 接口是只读的。所以可能发生的最糟糕的事情是它得到一些它无法解析的输入，最后打印出错误或是崩溃。

### 编写小型教育工具很有趣

最近，我对编写小型教育的 DNS 工具十分感兴趣。

到目前为止我所编写的工具：

* <https://dns-lookup.jvns.ca>（一种进行 DNS 查询的简单方法）
* <https://dns-lookup.jvns.ca/trace.html>（向你显示在进行 DNS 查询时内部发生的情况）
* 本工具（`dnspeep`）

以前我尽力阐述已有的工具（如 `dig` 或 `tcpdump`）而不是编写自己的工具，但是经常我发现这些工具的输出结果让人费解，所以我非常关注以更加友好的方式来看这些相同的信息，以便每个人都能明白他们电脑正在进行的 DNS 查询，而不仅仅是依赖 tcmdump。

---

via: <https://jvns.ca/blog/2021/03/31/dnspeep-tool/>

作者：[Julia Evans](https://jvns.ca/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wyxplus](https://github.com/wyxplus) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


硬核观察 | AI 赢得填字游戏冠军

Summary: 更多：• 勒索软件已经成为影响国家安全的全球性威胁 • 微软准备更换 Office 软件的默认字体

![](/data/attachment/album/202105/02/212823wjzpipotptmzjpai.jpg)

### AI 赢得填字游戏冠军

![](/data/attachment/album/202105/02/212836bh0pb30v9ufw0nv9.jpg)

上周，今年的美国填字游戏锦标赛（ACPT）落下了帷幕，共有 1300 多名人员线上参与。但是官方认定的冠军并不是得分第一名。此次参赛一位选手 Dr.Fill，以 12825 分高居榜首，高出人类冠军 65 分，但并没有得到冠军。为什么最高分反而不是冠军？因为 Dr.Fill 是一“只” AI。AI 又一次在比赛中，战胜了人类。

Dr. Fill 诞生于十年前，不过刚开始的排名并不尽如人意。多年以来，它的排名一直稳步上升，但是最高只达到第 11 名。今年它得到了伯克利 NLP 小组的协助，并运行在一台更好的服务器上，因此，Dr. Fill 只用了 49 秒就完成了谜题，而人类冠军用了三分钟。

以后的棋牌类游戏可能应该分成两个榜单：硅基榜单和碳基榜单。

### 勒索软件已经成为影响国家安全的全球性威胁

![](/data/attachment/album/202105/02/212858fn7aa5na3aini7jh.jpg)

微软、亚马逊和 FBI 等加入了全球的勒索软件任务组（RTF），[呼吁](https://www.bbc.com/news/technology-56933733)对勒索软件采取积极和紧急的行动，他们警告称，短短数年内勒索软件变成了一个严重的国家安全威胁、公共健康和安全问题。

勒索软件黑帮经常将学校和医院作为攻击目标。FBI 称，去年有接近 2400 家美国公司、地方政府、医疗机构和学校成为勒索软件的受害者。英国国家网络安全中心称去年处理的勒索软件事故数量是之前任何一年的三倍以上。安全公司 Emsisoft 估计去年全球勒索软件造成的损失在 420 亿美元到 1700 亿美元之间。

勒索病毒已经不完全是技术的问题了。应该引起全世界的警惕和打击。

### 微软准备更换 Office 软件的默认字体

![](/data/attachment/album/202105/02/212931g4hyilbmebyh99ig.jpg)

微软上次改变 Office 的默认字体是在 2007 年，用 Calibri 取代了 Times New Roman。当时微软说它想要一种在屏幕上看起来更好的字体。而现在，在 Calibri 没有明显缺点的情况下，微软委托制作了五种新字体，准备从中[选择一个](https://www.microsoft.com/en-us/microsoft-365/blog/2021/04/28/beyond-calibri-finding-microsofts-next-default-font/)作为新的默认字体。

默认字体也许最值得注意的是它们没有给人留下印象，这样人们就可以直接进入创意过程，而不是考虑这些想法的形式。不过默认字体也可以在不打搅人们的同时，传达一些个性。

还是英文字体比较简单，总共也没多少字形。


爱了！3 个受欢迎的 U 盘 Linux 发行版

Summary: 开源技术人员对此深有体会。

开源技术人员对此深有体会。

>
> 开源技术人员对此深有体会。
>
>
>

![](/data/attachment/album/202105/03/104610np5piwaavaa5qu2u.jpg "Linux keys on the keyboard for a desktop computer")

Linux 用户几乎都会记得他们第一次发现无需实际安装，就可以用 Linux 引导计算机并在上面运行。当然，许多用户都知道可以引导计算机进入操作系统安装程序，但是 Linux 不同：它根本就不需要安装！你的计算机甚至不需要有一个硬盘。你可以通过一个 U 盘运行 Linux 几个月甚至几 *年*。

自然，有几种不同的 “<ruby> 临场 <rt>  live </rt></ruby>” Linux 发行版可供选择。我们向我们的作者们询问了他们的最爱，他们的回答如下。

### 1、Puppy Linux

“作为一名前 **Puppy Linux** 开发者，我对此的看法自然有些偏见，但 Puppy 最初吸引我的地方是：

* 它专注于第三世界国家容易获得的低端和老旧硬件。这为买不起最新的现代系统的贫困地区开放了计算能力
* 它能够在内存中运行，可以利用该能力提供一些有趣的安全优势
* 它在一个单一的 SFS 文件中处理用户文件和会话，使得备份、恢复或移动你现有的桌面/应用/文件到另一个安装中只需一个拷贝命令”

—— [JT Pennington](https://opensource.com/users/jtpennington)

“对我来说，一直就是 **Puppy Linux**。它启动迅速，支持旧硬件。它的 GUI 很容易就可以说服别人第一次尝试 Linux。” —— [Sachin Patil](https://opensource.com/users/psachin)

“Puppy 是真正能在任何机器上运行的临场发行版。我有一台废弃的 microATX 塔式电脑，它的光驱坏了，也没有硬盘（为了数据安全，它已经被拆掉了），而且几乎没有多少内存。我把 Puppy 插入它的 SD 卡插槽，运行了好几年。” —— [Seth Kenlon](http://opensource.com/users/seth)

“我在使用 U 盘上的 Linux 发行版没有太多经验，但我把票投给 **Puppy Linux**。它很轻巧，非常适用于旧机器。” —— [Sergey Zarubin](https://opensource.com/users/sergey-zarubin)

### 2、Fedora 和 Red Hat

“我最喜欢的 USB 发行版其实是 **Fedora Live USB**。它有浏览器、磁盘工具和终端仿真器，所以我可以用它来拯救机器上的数据，或者我可以浏览网页或在需要时用 ssh 进入其他机器做一些工作。所有这些都不需要在 U 盘或在使用中的机器上存储任何数据，不会在受到入侵时被泄露。” —— [Steve Morris](https://opensource.com/users/smorris12)

“我曾经用过 Puppy 和 DSL。如今，我有两个 U 盘：**RHEL7** 和 **RHEL8**。 这两个都被配置为完整的工作环境，能够在 UEFI 和 BIOS 上启动。当我有问题要解决而又面对随机的硬件时，在现实生活中这就是时间的救星。” —— [Steven Ellis](https://opensource.com/users/steven-ellis)

### 3、Porteus

“不久前，我安装了 Porteus 系统每个版本的虚拟机。很有趣，所以有机会我会再试试它们。每当提到微型发行版的话题时，我总是想起我记得的第一个使用的发行版：**tomsrtbt**。它总是安装适合放在软盘上来设计。我不知道它现在有多大用处，但我想我应该把它也算上。” —— [Alan Formy-Duval](https://opensource.com/users/alanfdoss)

“作为一个 Slackware 的长期用户，我很欣赏 **Porteus** 提供的 Slack 的最新版本和灵活的环境。你可以用运行在内存中的 Porteus 进行引导，这样就不需要把 U 盘连接到你的电脑上，或者你可以从驱动器上运行，这样你就可以保留你的修改。打包应用很容易，而且 Slacker 社区有很多现有的软件包。这是我唯一需要的实时发行版。” —— [Seth Kenlon](http://opensource.com/users/seth)

### 其它：Knoppix

“我已经有一段时间没有使用过 **Knoppix** 了，但我曾一度经常使用它来拯救那些被恶意软件破坏的 Windows 电脑。它最初于 2000 年 9 月发布，此后一直在持续开发。它最初是由 Linux 顾问 Klaus Knopper 开发并以他的名字命名的，被设计为临场 CD。我们用它来拯救由于恶意软件和病毒而变得无法访问的 Windows 系统上的用户文件。” —— [Don Watkins](https://opensource.com/users/don-watkins)

“Knoppix 对临场 Linux 影响很大，但它也是对盲人用户使用最方便的发行版之一。它的 [ADRIANE 界面](https://opensource.com/life/16/7/knoppix-adriane-interface) 被设计成可以在没有视觉显示器的情况下使用，并且可以处理任何用户可能需要从计算机上获得的所有最常见的任务。” —— [Seth Kenlon](https://opensource.com/article/21/4/opensource.com/users/seth)

### 选择你的临场 Linux

有很多没有提到的，比如 [Slax](http://slax.org)（一个基于 Debian 的实时发行版）、[Tiny Core](http://www.tinycorelinux.net/)、[Slitaz](http://www.slitaz.org/en/)、[Kali](http://kali.org)（一个以安全为重点的实用程序发行版）、[E-live](https://www.elivecd.org/)，等等。如果你有一个空闲的 U 盘，请把 Linux 放在上面，在任何时候都可以在任何电脑上使用 Linux！

---

via: <https://opensource.com/article/21/4/usb-drive-linux-distro>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


使用 requests 访问 Python 包索引（PyPI）的 JSON API

>
> PyPI 的 JSON API 是一种机器可直接使用的数据源，你可以访问和你浏览网站时相同类型的数据。
>
>
>

![](/data/attachment/album/202105/03/111943du0lgbjj6br6sruu.jpg "Python programming language logo with question marks")

PyPI（Python 软件包索引）提供了有关其软件包信息的 JSON API。本质上，它是机器可以直接使用的数据源，与你在网站上直接访问是一样的的。例如，作为人类，我可以在浏览器中打开 [Numpy](https://pypi.org/project/numpy/) 项目页面，点击左侧相关链接，查看有哪些版本，哪些文件可用以及发行日期和支持的 Python 版本等内容：

![NumPy project page](/data/attachment/album/202105/03/112014gwknqnfnauunun6w.png "NumPy project page")

但是，如果我想编写一个程序来访问此数据，则可以使用 JSON API，而不必在这些页面上抓取和解析 HTML。

顺便说一句：在旧的 PyPI 网站上，还托管在 `pypi.python.org` 时，NumPy 的项目页面位于 `pypi.python.org/pypi/numpy`，访问其 JSON API 也很简单，只需要在最后面添加一个 `/json` ，即 `https://pypi.org/pypi/numpy/json`。现在，PyPI 网站托管在 `pypi.org`，NumPy 的项目页面是 `pypi.org/project/numpy`。新站点不会有单独的 JSON API URL，但它仍像以前一样工作。因此，你不必在 URL 后添加 `/json`，只要记住 URL 就够了。

你可以在浏览器中打开 NumPy 的 JSON API URL，Firefox 很好地渲染了数据：

![JSON rendered in Firefox](/data/attachment/album/202105/03/112014ze99pm77pmerzpr8.png "JSON rendered in Firefox")

你可以查看 `info`，`release` 和 `urls` 其中的内容。或者，你可以将其加载到 Python Shell 中，以下是几行入门教程：

```
import requests
url = "https://pypi.org/pypi/numpy/json"
r = requests.get(url)
data = r.json()

```

获得数据后（调用 `.json()` 提供了该数据的 [字典](https://docs.python.org/3/tutorial/datastructures.html#dictionaries)），你可以对其进行查看：

![Inspecting data](/data/attachment/album/202105/03/112014zzr80jv8yj5vyx0r.png "Inspecting data")

查看 `release` 中的键：

![Inspecting keys in releases](/data/attachment/album/202105/03/112014rcc5b8xc8vbscc6c.png "Inspecting keys in releases")

这表明 `release` 是一个以版本号为键的字典。选择一个并查看以下内容：

![Inspecting version](/data/attachment/album/202105/03/112015g9a4mxgaxmfnnla9.png "Inspecting version")

每个版本都包含一个列表，`release` 包含 24 项。但是每个项目是什么？由于它是一个列表，因此你可以索引第一项并进行查看：

![Indexing an item](/data/attachment/album/202105/03/112015u05ktukzcw16k0zc.png "Indexing an item")

这是一个字典，其中包含有关特定文件的详细信息。因此，列表中的 24 个项目中的每一个都与此特定版本号关联的文件相关，即在 <https://pypi.org/project/numpy/1.20.1/#files> 列出的 24 个文件。

你可以编写一个脚本在可用数据中查找内容。例如，以下的循环查找带有 sdist（源代码包）的版本，它们指定了 `requires_python` 属性并进行打印：

```
for version, files in data['releases'].items():
    for f in files:
        if f.get('packagetype') == 'sdist' and f.get('requires_python'):
            print(version, f['requires_python'])

```

![sdist files with requires_python attribute](/data/attachment/album/202105/03/112015lzuqnbu95ll52qlu.png "sdist files with requires_python attribute ")

### piwheels

去年，我在 piwheels 网站上[实现了类似的 API](https://blog.piwheels.org/requires-python-support-new-project-page-layout-and-a-new-json-api/)。[piwheels.org](https://www.piwheels.org/) 是一个 Python 软件包索引，为树莓派架构提供了 wheel（预编译的二进制软件包）。它本质上是 PyPI 软件包的镜像，但带有 Arm wheel，而不是软件包维护者上传到 PyPI 的文件。

由于 piwheels 模仿了 PyPI 的 URL 结构，因此你可以将项目页面 URL 的 `pypi.org` 部分更改为 `piwheels.org`。它将向你显示类似的项目页面，其中详细说明了构建的版本和可用的文件。由于我喜欢旧站点允许你在 URL 末尾添加 `/json` 的方式，所以我也支持这种方式。NumPy 在 PyPI 上的项目页面为 [pypi.org/project/numpy](https://pypi.org/project/numpy)，在 piwheels 上，它是 [piwheels.org/project/numpy](https://www.piwheels.org/project/numpy)，而 JSON API 是 [piwheels.org/project/numpy/json](https://www.piwheels.org/project/numpy/json) 页面。

没有必要重复 PyPI API 的内容，所以我们提供了 piwheels 上可用内容的信息，包括所有已知发行版的列表，一些基本信息以及我们拥有的文件列表：

![JSON files available in piwheels](/data/attachment/album/202105/03/112016nfk00450ukq75kku.png "JSON files available in piwheels")

与之前的 PyPI 例子类似，你可以创建一个脚本来分析 API 内容。例如，对于每个 NumPy 版本，其中有多少 piwheels 文件：

```
import requests

url = "https://www.piwheels.org/project/numpy/json"
package = requests.get(url).json()

for version, info in package['releases'].items():
    if info['files']:
        print('{}: {} files'.format(version, len(info['files'])))
    else:
        print('{}: No files'.format(version))

```

此外，每个文件都包含一些元数据：

![Metadata in JSON files in piwheels](/data/attachment/album/202105/03/112016j2a9mo2io23xab6b.png "Metadata in JSON files in piwheels")

方便的是 `apt_dependencies` 字段，它列出了使用该库所需的 Apt 软件包。本例中的 NumPy 文件，或者通过 `pip` 安装 Numpy，你还需要使用 Debian 的 `apt` 包管理器安装 `libatlas3-base` 和 `libgfortran`。

以下是一个示例脚本，显示了程序包的 Apt 依赖关系：

```
import requests

def get_install(package, abi):
    url = 'https://piwheels.org/project/{}/json'.format(package)
    r = requests.get(url)
    data = r.json()
    for version, release in sorted(data['releases'].items(), reverse=True):
        for filename, file in release['files'].items():
            if abi in filename:
                deps = ' '.join(file['apt_dependencies'])
                print("sudo apt install {}".format(deps))
                print("sudo pip3 install {}=={}".format(package, version))
                return

get_install('opencv-python', 'cp37m')
get_install('opencv-python', 'cp35m')
get_install('opencv-python-headless', 'cp37m')
get_install('opencv-python-headless', 'cp35m')

```

我们还为软件包列表提供了一个通用的 API 入口，其中包括每个软件包的下载统计：

```
import requests

url = "https://www.piwheels.org/packages.json"
packages = requests.get(url).json()
packages = {
    pkg: (d_month, d_all)
    for pkg, d_month, d_all, \*_ in packages
}

package = 'numpy'
d_month, d_all = packages[package]

print(package, "has had", d_month, "downloads in the last month")
print(package, "has had", d_all, "downloads in total")

```

### pip search

`pip search` 因为其 XMLRPC 接口过载而被禁用，因此人们一直在寻找替代方法。你可以使用 piwheels 的 JSON API 来搜索软件包名称，因为软件包的集合是相同的：

```
#!/usr/bin/python3
import sys

import requests

PIWHEELS_URL = 'https://www.piwheels.org/packages.json'

r = requests.get(PIWHEELS_URL)
packages = {p[0] for p in r.json()}

def search(term):
    for pkg in packages:
        if term in pkg:
            yield pkg

if __name__ == '__main__':
    if len(sys.argv) == 2:
        results = search(sys.argv[1].lower())
        for res in results:
            print(res)
    else:
        print("Usage: pip_search TERM")

```

有关更多信息，参考 piwheels 的 [JSON API 文档](https://www.piwheels.org/json.html).

---

*本文最初发表在 Ben Nuttall 的 [Tooling Tuesday 博客上](https://tooling.bennuttall.com/accessing-python-package-index-json-apis-with-requests/)，经许可转载使用。*

---

via: <https://opensource.com/article/21/3/python-package-index-json-apis-requests>

作者：[Ben Nuttall](https://opensource.com/users/bennuttall) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出