2019年11月

上一篇文章中,我们研究了什么是 RPM 软件包。它们是包含文件和元数据的档案文件。当安装或卸载 RPM 时,此元数据告诉 RPM 在哪里创建或删除文件。正如你将在上一篇文章中记住的,元数据还包含有关“依赖项”的信息,它可以是“运行时”或“构建时”的依赖信息。

例如,让我们来看看 fpaste。你可以使用 dnf 下载该 RPM。这将下载 Fedora 存储库中可用的 fpaste 最新版本。在 Fedora 30 上,当前版本为 0.3.9.2:

$ dnf download fpaste

...
fpaste-0.3.9.2-2.fc30.noarch.rpm

由于这是个构建 RPM,因此它仅包含使用 fpaste 所需的文件:

$ rpm -qpl ./fpaste-0.3.9.2-2.fc30.noarch.rpm
/usr/bin/fpaste
/usr/share/doc/fpaste
/usr/share/doc/fpaste/README.rst
/usr/share/doc/fpaste/TODO
/usr/share/licenses/fpaste
/usr/share/licenses/fpaste/COPYING
/usr/share/man/man1/fpaste.1.gz

源 RPM

在此链条中的下一个环节是源 RPM。Fedora 中的所有软件都必须从其源代码构建。我们不包括预构建的二进制文件。因此,要制作一个 RPM 文件,RPM(工具)需要:

  • 给出必须要安装的文件,
  • 例如,如果要编译出这些文件,则告诉它们如何生成这些文件,
  • 告知必须在何处安装这些文件,
  • 该特定软件需要其他哪些依赖才能正常工作。

源 RPM 拥有所有这些信息。源 RPM 与构建 RPM 相似,但顾名思义,它们不包含已构建的二进制文件,而是包含某个软件的源文件。让我们下载 fpaste 的源 RPM:

$ dnf download fpaste --source

...
fpaste-0.3.9.2-2.fc30.src.rpm

注意文件的结尾是 src.rpm。所有的 RPM 都是从源 RPM 构建的。你也可以使用 dnf 轻松检查“二进制” RPM 的源 RPM:

$ dnf repoquery --qf "%{SOURCERPM}" fpaste
fpaste-0.3.9.2-2.fc30.src.rpm

另外,由于这是源 RPM,因此它不包含构建的文件。相反,它包含有关如何从中构建 RPM 的源代码和指令:

$ rpm -qpl ./fpaste-0.3.9.2-2.fc30.src.rpm
fpaste-0.3.9.2.tar.gz
fpaste.spec

这里,第一个文件只是 fpaste 的源代码。第二个是 spec 文件。spec 文件是个配方,可告诉 RPM(工具)如何使用源 RPM 中包含的源代码创建 RPM(档案文件)— 它包含 RPM(工具)构建 RPM(档案文件)所需的所有信息。在 spec 文件中。当我们软件包维护人员添加软件到 Fedora 中时,我们大部分时间都花在编写和完善 spec 文件上。当软件包需要更新时,我们会回过头来调整 spec 文件。你可以在 https://src.fedoraproject.org/browse/projects/ 的源代码存储库中查看 Fedora 中所有软件包的 spec 文件。

请注意,一个源 RPM 可能包含构建多个 RPM 的说明。fpaste 是一款非常简单的软件,一个源 RPM 生成一个“二进制” RPM。而 Python 则更复杂。虽然只有一个源 RPM,但它会生成多个二进制 RPM:

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3
python3-3.7.3-1.fc30.src.rpm
python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-devel
python3-3.7.3-1.fc30.src.rpm
python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-libs
python3-3.7.3-1.fc30.src.rpm
python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-idle
python3-3.7.3-1.fc30.src.rpm
python3-3.7.4-1.fc30.src.rpm

$ sudo dnf repoquery --qf "%{SOURCERPM}" python3-tkinter
python3-3.7.3-1.fc30.src.rpm
python3-3.7.4-1.fc30.src.rpm

用 RPM 行话来讲,“python3” 是“主包”,因此该 spec 文件将称为 python3.spec。所有其他软件包均为“子软件包”。你可以下载 python3 的源 RPM,并查看其中的内容。(提示:补丁也是源代码的一部分):

$ dnf download --source python3
python3-3.7.4-1.fc30.src.rpm

$ rpm -qpl ./python3-3.7.4-1.fc30.src.rpm
00001-rpath.patch
00102-lib64.patch
00111-no-static-lib.patch
00155-avoid-ctypes-thunks.patch
00170-gc-assertions.patch
00178-dont-duplicate-flags-in-sysconfig.patch
00189-use-rpm-wheels.patch
00205-make-libpl-respect-lib64.patch
00251-change-user-install-location.patch
00274-fix-arch-names.patch
00316-mark-bdist_wininst-unsupported.patch
Python-3.7.4.tar.xz
check-pyc-timestamps.py
idle3.appdata.xml
idle3.desktop
python3.spec

从源 RPM 构建 RPM

现在我们有了源 RPM,并且其中有什么内容,我们可以从中重建 RPM。但是,在执行此操作之前,我们应该设置系统以构建 RPM。首先,我们安装必需的工具:

$ sudo dnf install fedora-packager

这将安装 rpmbuild 工具。rpmbuild 需要一个默认布局,以便它知道源 RPM 中每个必需组件的位置。让我们看看它们是什么:

# spec 文件将出现在哪里?
$ rpm -E %{_specdir}
/home/asinha/rpmbuild/SPECS

# 源代码将出现在哪里?
$ rpm -E %{_sourcedir}
/home/asinha/rpmbuild/SOURCES

# 临时构建目录是哪里?
$ rpm -E %{_builddir}
/home/asinha/rpmbuild/BUILD

# 构建根目录是哪里?
$ rpm -E %{_buildrootdir}
/home/asinha/rpmbuild/BUILDROOT

# 源 RPM 将放在哪里?
$ rpm -E %{_srcrpmdir}
/home/asinha/rpmbuild/SRPMS

# 构建的 RPM 将放在哪里?
$ rpm -E %{_rpmdir}
/home/asinha/rpmbuild/RPMS

我已经在系统上设置了所有这些目录:

$ cd
$ tree -L 1 rpmbuild/
rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS

6 directories, 0 files

RPM 还提供了一个为你全部设置好的工具:

$ rpmdev-setuptree

然后,确保已安装 fpaste 的所有构建依赖项:

sudo dnf builddep fpaste-0.3.9.2-3.fc30.src.rpm

对于 fpaste,你只需要 Python,并且它肯定已经安装在你的系统上(dnf 也使用 Python)。还可以给 builddep 命令一个 spec 文件,而不是源 RPM。在手册页中了解更多信息:

$ man dnf.plugin.builddep

现在我们有了所需的一切,从源 RPM 构建一个 RPM 就像这样简单:

$ rpmbuild --rebuild fpaste-0.3.9.2-3.fc30.src.rpm
..
..

$ tree ~/rpmbuild/RPMS/noarch/
/home/asinha/rpmbuild/RPMS/noarch/
└── fpaste-0.3.9.2-3.fc30.noarch.rpm

0 directories, 1 file

rpmbuild 将安装源 RPM 并从中构建你的 RPM。现在,你可以使用 dnf 安装 RPM 以使用它。当然,如前所述,如果你想在 RPM 中进行任何更改,则必须修改 spec 文件,我们将在下一篇文章中介绍 spec 文件。

总结

总结一下这篇文章有两点:

  • 我们通常安装使用的 RPM 是包含软件的构建版本的 “二进制” RPM
  • 构建 RPM 来自于源 RPM,源 RPM 包括用于生成二进制 RPM 所需的源代码和规范文件。

如果你想开始构建 RPM,并帮助 Fedora 社区维护我们提供的大量软件,则可以从这里开始: https://fedoraproject.org/wiki/Join_the_package_collection_maintainers

如有任何疑问,请发邮件到 Fedora 开发人员邮件列表,我们随时乐意为你提供帮助!


via: https://fedoramagazine.org/how-rpm-packages-are-made-the-source-rpm/

作者:Ankur Sinha FranciscoD 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

当大多数人考虑为末日后的世界做准备时,想到的第一件事就是准备食物和其他生活必需品。最近,有一个程序员觉得,在社会崩溃之后,创建一个多功能的、且可生存的操作系统同样重要。我们今天将尽我们所能地来了解一下它。

Collapse OS:当文明被掩埋在垃圾中

这里说的操作系统称为 Collapse OS(崩溃操作系统)。根据该官方网站的说法,Collapse OS 是 “z80 内核以及一系列程序、工具和文档的集合”。 它可以让你:

  • 可在最小的和临时拼凑的机器上运行。
  • 通过临时拼凑的方式(串行、键盘、显示)进行接口。
  • 可编辑文本文件。
  • 编译适用于各种 MCU 和 CPU 的汇编源代码文件。
  • 从各种存储设备读取和写入。
  • 自我复制。

其创造者 Virgil Dupras 之所以开始这个项目,是因为他认为“我们的全球供应链在我们到达 2030 年之前就会崩溃”。他是根据 巴勃罗·塞维尼 Pablo Servigne 的作品得出了这一结论的。他似乎也觉得并非所有人都会认可他的观点,“话虽如此,我认为不相信到 2030 年可能会发生崩溃也是可以理解的,所以请不要为我的信念而感到受到了冲击。”

该项目的总体目标是迅速让瓦解崩溃后的文明重新回到计算机时代。电子产品的生产取决于非常复杂的供应链。一旦供应链崩溃,人类将回到一个技术水平较低的时代。要恢复我们以前的技术水平,将需要数十年的时间。Dupras 希望通过创建一个生态系统来跨越几个步骤,该生态系统将与从各种来源搜寻到的更简单的芯片一起工作。

z80 是什么?

最初的 Collapse OS 内核是为 z80 芯片编写的。作为复古计算机历史的爱好者,我对 Zilog 和 z80 芯片很熟悉。在 1970 年代后期,Zilog 公司推出了 z80,以和 Intel 的 8080 CPU 竞争。z80 被用于许多早期的个人计算机中,例如 Sinclair ZX SpectrumTandy TRS-80。这些系统中的大多数使用了 CP/M 操作系统,这是当时最流行的操作系统。(有趣的是,Dupras 最初希望使用一个开源版本的 CP/M,但最终决定从头开始。)

在 1981 年 IBM PC 发布之后,z80 和 CP/M 的普及率开始下降。Zilog 确实发布了其它几种微处理器(Z8000 和 Z80000),但并没有获得成功。该公司将重点转移到了微控制器上。今天,更新后的 z80 后代产品可以在图形计算器、嵌入式设备和消费电子产品中找到。

Dupras 在 Reddit 上说,他为 z80 编写了 Collapse OS,因为“它已经投入生产很长时间了,并且因为它被用于许多机器上,所以拾荒者有很大的机会拿到它。”

该项目的当前状态和未来发展

Collapse OS 的起步相当不错。有足够的内存和存储空间它就可以进行自我复制。它可以在 RC2014 家用计算机或世嘉 Master System / MegaDrive(Genesis)上运行。它可以读取 SD 卡。它有一个简单的文本编辑器。其内核由用粘合代码连接起来的模块组成。这是为了使系统具有灵活性和适应性。

还有一个详细的路线图列出了该项目的方向。列出的目标包括:

  • 支持其他 CPU,例如 8080 和 6502
  • 支持临时拼凑的外围设备,例如 LCD 屏幕、电子墨水显示器和 ACIA 设备
  • 支持更多的存储方式,例如软盘、CD、SPI RAM/ROM 和 AVR MCU。
  • 使它可以在其他 z80 机器上工作,例如 TI-83+TI-84+ 图形计算器和 TRS-80s。

如果你有兴趣帮助或只是想窥视一下这个项目,请访问其 GitHub 页面

最后的思考

坦率地说,我认为 Collapse OS 与其说是一个有用的项目,倒不如说更像是一个有趣的爱好项目(对于那些喜欢构建操作系统的人来说)。当崩溃真的到来时,我认为 GitHub 也会宕机,那么 Collapse OS 将如何分发?我无法想像,得具有多少技能的人才能够从捡来的零件中创建出一个系统。到时候会有新一代的创客们,但大多数创客们会习惯于选择 Arduino 或树莓派来构建项目,而不是从头开始。

与 Dupras 相反,我最担心的是电磁脉冲炸弹(EMP) 的使用。这些东西会炸毁所有的电气系统,这意味着将没有任何构建系统的可能。如果没有发生这种事情,我想我们将能够找到过去 30 年制造的那么多的 x86 组件,以保持它们运行下去。

话虽如此,对于那些喜欢为奇奇怪怪的应用编写低级代码的人来说,Collapse OS 听起来是一个有趣且具有高度挑战性的项目。如果你是这样的人,去检出 Collapse OS 代码吧。

让我提个假设的问题:你选择的世界末日操作系统是什么?请在下面的评论中告诉我们。

如果你觉得这篇文章有趣,请花一点时间在社交媒体、Hacker News 或 Reddit 上分享。


via: https://itsfoss.com/collapse-os/

作者:John Paul 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

一个月多前,我们发起了 Linux 中国徽标征集活动,陆续得到了诸位朋友的鼎力支持,并于 10 天前进入了公开评选意见征集阶段。

说实话,这次活动的举办有点仓促,我们并没有做好完美的活动计划。所以,活动中也出现了一些不足,如一些对 GitHub 操作不熟悉或非技术圈的朋友对如何通过 GitHub 提交投稿感到困难;也有一些朋友从根本上不认可征集活动,觉得原来的徽标就挺习惯,或者适当改改就行;最后,我们在公开征集过程中,通过微信投票时还出了乌龙,过多的投稿选项导致不恰当地分成了两个问题,从而影响了投票公正性。

后来,不得已,又再次根据投票结果筛选掉部分票数较低的作品,重新发起了投票。(在这次投票中,误筛选掉 water0902 这份作品,特别不好意思,再次向作者道歉。)

其实,在第一次投票后期,我们就尴尬的发现,居然还是我们原本的徽标得到票数最高。而在第二次投票结果中,原本的徽标的票数位列第二名。而 JUNEN-1 这个作品在第一次投票中的票数几乎和原本的徽标所得票数一样,第二次投票中得到了更高的票数,位列第一名。具体得票情况如下:

投稿作品名第一次投票数第二次投票数
原本的徽标182149
JUNEN-1181163
JUNEN-2167136
whsasf\_work31268
whsasf\_work21208
alim0x8655
garywill6138
Logo09646035
wxy5827
tinnx5730
lightyisu5626
RedInLinux5524
lightyisu24737
aimeDesign4471
14665875944032
CodingOctocat3616
logoyk3630
water090232N/A
SmarterC2918
hacker2719
WSJ2719
long257
icekylin-design-22422
ZIN2310
icekylin-design-3208
OLC19N/A
schiway17N/A
flag14N/A
icekylin-design-114N/A
logo028113N/A
Fine11N/A
kokialoves80
lartpang80
whsasf\_work80

在这次徽标征集活动当中,这些投票数是我们的重要参考依据,但是不是唯一依据,经过团队内部合议,我们决定仍维持原本的徽标,但是会做精简风格处理。因此,一等奖空缺。

二等奖我们决定授予 JUNEN,空缺一名,他提交了多份作品,而且作品均得到了比较广泛的好评。考虑到一等奖空缺,我决定将二等奖的单个奖金提升至 1000 元。

三等奖我们决定扩大到十名,授予 alim0xgarywillicekylinwater0902aimeDesignwhsasf\_work3liujiacode(logo0964 和 logo0281)、WSJlongfine。同样,奖金翻倍为 200 元。

同时,按照活动规则,由于一等奖空缺,二、三等奖作品的版权仍然归作者所有,我们并不取得版权。

请上述中奖者加我微信 linux\_china ,我在验证中奖者身份后会颁发奖金。

最后,在这个征集活动中,无论您是否提交了作品,也无论是否评选中奖,我们都对诸位的积极参与和贡献致以最热忱的谢意,是你们大家,让我们觉到了社区的温暖和支持!我们必将在诸位的陪伴和支持下发展的更好!

此致敬礼,

Linux 中国 / 老王

你可以通过多种方法来调整 Ubuntu,以自定义其外观和行为。我发现最简单的方法是使用 GNOME 优化工具。它也被称为 GNOME Tweak 或简单地称为 Tweak(优化)。

在过去的教程中,我已经多次介绍过它。在这里,我列出了你可以使用此工具执行的所有主要优化。

我在这里使用的是 Ubuntu,但是这些步骤应该适用于使用 GNOME 桌面环境的任何 Linux 发行版。

在 Ubuntu 18.04 或其它版本上安装 GNOME 优化工具

GNOME 优化工具可从 Ubuntu 中的 Universe 存储库中安装,因此请确保已在“软件和更新”工具中启用了该仓库:

在 Ubuntu 中启用 Universe 存储库

之后,你可以从软件中心安装 GNOME 优化工具。只需打开软件中心并搜索 “GNOME Tweaks” 并从那里安装它:

从软件中心安装 GNOME 优化工具

或者,你也可以使用命令行通过 apt 命令安装此软件:

sudo apt install gnome-tweaks

用优化工具定制 GNOME 桌面

GNOME 优化工具使你可以进行许多设置更改。其中的某些更改(例如墙纸更改、启动应用程序等)也可以在官方的“系统设置”工具中找到。我将重点介绍默认情况下“设置”中不可用的优化。

1、改变主题

你可以通过各种方式在 Ubuntu 中安装新主题。但是,如果要更改为新安装的主题,则必须安装GNOME 优化工具。

你可以在“ 外观 Appearance ”部分找到主题和图标设置。你可以浏览可用的主题和图标并设置你喜欢的主题和图标。更改将立即生效。

通过 GNOME 优化更改主题

2、禁用动画以提速你的桌面体验

应用程序窗口的打开、关闭、最大化等操作都有一些细微的动画。你可以禁用这些动画以稍微加快系统的速度,因为它会稍微使用一点资源。

禁用动画以获得稍快的桌面体验

3、控制桌面图标

至少在 Ubuntu 中,你会在桌面上看到“ 家目录 Home ”和“ 垃圾箱 Trash ”图标。如果你不喜欢,可以选择禁用它。你还可以选择要在桌面上显示的图标。

在 Ubuntu 中控制桌面图标

4、管理 GNOME 扩展

我想你可能知道 GNOME 扩展。这些是用于桌面的小型“插件”,可扩展 GNOME 桌面的功能。有大量的 GNOME 扩展,可用于在顶部面板中查看 CPU 消耗、获取剪贴板历史记录等等。

我已经写了一篇安装和使用 GNOME 扩展的详细文章。在这里,我假设你已经在使用它们,如果是这样,可以从 GNOME 优化工具中对其进行管理。

管理 GNOME 扩展

5、改变字体和缩放比例

你可以在 Ubuntu 中安装新字体,并使用这个优化工具在系统范围应用字体更改。如果你认为桌面上的图标和文本太小,也可以更改缩放比例。

更改字体和缩放比例

6、控制触摸板行为,例如在键入时禁用触摸板,使触摸板右键单击可以工作

GNOME 优化工具还允许你在键入时禁用触摸板。如果你在笔记本电脑上快速键入,这将很有用。手掌底部可能会触摸触摸板,并导致光标移至屏幕上不需要的位置。

在键入时自动禁用触摸板可解决此问题。

键入时禁用触摸板

你还会注意到当你按下触摸板的右下角以进行右键单击时,什么也没有发生。你的触摸板并没有问题。这是一项系统设置,可对没有实体右键按钮的任何触摸板(例如旧的 Thinkpad 笔记本电脑)禁用这种右键单击功能。两指点击可为你提供右键单击操作。

你也可以通过在“ 鼠标单击模拟 Mouse Click Simulation ”下设置为“ 区域 Area ”中而不是“ 手指 Fingers ”来找回这项功能。

修复右键单击问题

你可能必须重新启动 Ubuntu 来使这项更改生效。如果你是 Emacs 爱好者,还可以强制使用 Emacs 键盘绑定。

7、改变电源设置

电源这里只有一个设置。它可以让你在盖上盖子后将笔记本电脑置于挂起模式。

GNOME 优化工具中的电源设置

8、决定什么显示在顶部面板

桌面的顶部面板显示了一些重要的信息。在这里有日历、网络图标、系统设置和“ 活动 Activities ”选项。

你还可以显示电池百分比、添加日期及时间,并显示星期数。你还可以启用鼠标热角,以便将鼠标移至屏幕的左上角时可以获得所有正在运行的应用程序的活动视图。

GNOME 优化工具中的顶部面板设置

如果将鼠标焦点放在应用程序窗口上,你会注意到其菜单显示在顶部面板中。如果你不喜欢这样,可以将其关闭,然后应用程序菜单将显示应用程序本身。

9、配置应用窗口

你可以决定是否在应用程序窗口中显示最大化和最小化选项(右上角的按钮)。你也可以改变它们的位置到左边或右边。

应用程序窗口配置

这里还有其他一些配置选项。我不使用它们,但你可以自行探索。

10、配置工作区

GNOME 优化工具还允许你围绕工作区配置一些内容。

在 Ubuntu 中配置工作区

总结

对于任何 GNOME 用户,GNOME 优化(Tweaks)工具都是必备工具。它可以帮助你配置桌面的外观和功能。 我感到惊讶的是,该工具甚至没有出现在 Ubuntu 的主存储库中。我认为应该默认安装它,要不,你就得在 Ubuntu 中手动安装 GNOME 优化工具。

如果你在 GNOME 优化工具中发现了一些此处没有讨论的隐藏技巧,为什么不与大家分享呢?


via: https://itsfoss.com/gnome-tweak-tool/

作者:Abhishek Prakash 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出