桌面上的OpenBSD(第一部分)

2020-09-29 14:50:00

让我们在联想ThinkPad X270上安装OpenBSD。我用这台电脑学习计算机科学。它同时安装了Arch Linux和Windows10作为双引导。现在我不再需要运行Windows,我可以抛弃DualBoot,安装我选择的操作系统。

首先,我拿起运行Arch Linux的Thinkpad和一些足以支持AMD64迷你内存(大约5兆字节)的USB加密狗。此小映像不包括文件集,这些文件集将在安装过程中下载。我还从瑞士镜像下载了SHA256校验和,并验证了下载的映像,然后将其复制到我的加密狗上:

Thinkpad X270通过以太网连接到我的网络。WiFi固件通常需要单独安装,因此只有以太网可以开箱即用。BIOS已激活UEFI。OpenBSD和UEFI在较旧的硬件上有问题(至少在我2014年的戴尔笔记本电脑上是这样),但不管怎样,还是让我们在这款笔记本电脑上试试吧。

我插上之前准备好的加密狗,然后启动电脑。我用Enter键中断了常规引导,并按F12键选择了另一种引导方法。现在,我选择了我的USB加密狗。大约一分钟后,安装程序已经启动。现在我遵循以下步骤:

作为主机名,我简单地选择了x270,因为它是Thinkpad X270,而我在命名东西时并不是很有创意。

从可用的网络选项(iwm0:WiFi、em0:以太网和vlan0:虚拟LAN)中,我选择em0。

我尝试通过DHCP获取IPv4地址,这似乎非常快。

默认情况下,我不启动SSHD,因为我不需要通过SSH连接到此计算机。它应该是工作站,而不是服务器。

X Window系统不应该由xnode m(1)启动,所以我将其设为no。

我用我的正名Patrick Bucher设置了我的用户Patrick,并设置了一个像样的密码。

时区已经被正确检测为欧洲/苏黎世,我只是让它保持原样。

安装程序检测到两个磁盘:sd0和sd1。由于sd0是在我的笔记本电脑中检测到的固态硬盘,因此我的戴尔笔记本电脑的UEFI问题在此计算机上不存在。我选择sd0作为根磁盘,因为sd1是我的USB加密狗。

我选择将整个磁盘与GPT分区模式一起使用,因为它是2020年。

提出了一种自动分配的SD0布局。它在我看来很不错,所以我就用那个自动布局。

由于Miniroot映像没有附带文件集,因此我选择http作为文件集的位置。

我不使用代理,而是按照建议使用镜像mirro.ungleich.ch和服务器目录pub/openbsd/6.7/amd64。

接下来,我通过输入-Game*取消选择游戏集。(我听说他们玩起来不太好玩。)。我让所有其他集合处于激活状态,包括稍后GUI所需的x集合。

安装完这些设置后,我按Enter键(完成)。现在安装程序执行各种任务,之后我选择暂停计算机。这让我有时间卸下USB加密狗。

我现在重新启动我的笔记本电脑,并启动OpenBSD。这比引导Arch Linux需要更多时间,后者使用systemd,而OpenBSD使用rc,后者按顺序执行启动任务。

有一条消息显示各种固件(英特尔固件、IWM固件、inteldrm固件、uvideo固件和VMM固件)已自动安装。确实很不错。

现在已经安装了IWM-Firmware,我可以立即连接到myWiFi网络frzbxpdb5。我创建了一个名为/etc/hostname.iwm0的文件,其中hostname是一个文字字符串,iwm0是WiFi网卡。与我的WiFi网络的连接只有一条线路:

而frzbxpdb5是我的WiFi网络的essid,[my-wpakey]需要用实际的WPA密钥替换。

此脚本非常友好,将/etc/hostname.iwm0的文件权限设置为640,然后连接到我的WiFi网络。

我在类Unix系统上的GUI基于动态窗口管理器(DWM)和许多其他工具,如dmenu、st、slstatus、slock,所有这些工具都是由Suckless社区创建和维护的。

此软件不附带配置工具,但需要在相应的C头文件config.h中进行配置,然后重新编译。尽管OpenBSD将DWM作为软件包提供,但自定义和配置窗口管理器需要从源代码构建它。

此操作失败,并显示错误消息(';ft2build.h';file not find),提醒我大约一个月前在FreeBSD上构建DWM。因为我可以在另一个位置找到头文件:

Suckless的人们显然对OpenBSD很友好,这在其他地方也是可以理解的(更多证据将在下面进一步展示)。

默认情况下,如config.h所示,键盘组合[Alt]+[Shift]+[Enter](深深地刻在许多dwm用户的肌肉记忆中)启动st终端。这将在一段时间内建成。然而,我更喜欢使用Super或Windows键而不是Alt,因为前者在OpenBSD中没有用处,而后者在使用emacs readline模式时仍然很有用。因此,我将MODKEY从。

在这里,我们得到一个警告,函数保证(OpenBSD缓解,它内置于主分支中,但被ifdef预处理器语句包围,因此它将只为OpenBSD编译)被隐式导入。让我们暂时忽略这一警告。(##39;#*$$=。

如果您想编译用于OpenBSD的st,您必须从config.mk中删除-lrt,...。

在config.mk中完成此操作后,st编译时没有任何其他问题,因此可以重新构建和安装:

即使是使用Suckless工具的OpenBSD用户也必须偶尔打开另一个GUI应用程序,而不是终端仿真器。为此,Suckless提供了dmens。让我们切换到它并编译它:

同样,ft2build.h也有问题,可以像上面使用DWM一样解决这个问题:在config.mk中使用FREETYPEINC的正确路径。之后,构建成功,可以安装dMenu:

DWM的右上角有一个状态栏,可用于显示各种信息。我过去常常在.xinitrc中编写一些shell命令来组成这样的astatus行,然后通过xset-b每隔大约5秒设置一次。这种方法每隔几秒钟就会生成大量进程。

Slstatus是一个C程序,能够显示各种或多或少有用的信息。让我们切换到slstatus,看看config.def.h中有什么可用:

备注部分列出了不同的函数(batteryperc表示电池百分比,date time表示日期和时间信息,temp表示热错误信息,等等)。我通常会显示CPU负载、电池百分比、内存使用率、当前键盘布局以及当前日期和时间。

静态常量struct arg args[]={/*函数格式参数*/{datetime,";%s";,";%F%T";},};

我还希望包括工作日,但不包括秒,因此我定义了一个不同的参数字符串:

这样更好,所以让我们在config.h中使用它(在格式字符串中用一些空格括起来):

静态常量struct arg args[]={/*函数格式参数*/{datetime,";%s";,";%a%Y-%m-%d%H:%M";},};

我喜欢的其他设置不需要任何参数,至少在OpenBSD上不需要,因此我只需要为这些设置定义一个合适的格式字符串(使用|作为换算符):

静态常量struct arg args[]={/*函数格式参数*/{cpu_perc,";CPU:%s%%|";,null},{cell_perc,";,null},{ram_use,";;mem:%s|";,null},{keymap,";%s|";null},{datetime,";%s";,";%a%Y-%m-%d%H:%M";},};

现在所有软件都已编译和安装,让运行X。为此,需要用户目录中的文件.xinitrc(/home/patrick/.xinitrc):

这会将X的键盘映射设置为瑞士德语,在后台启动slstatus,然后执行dwm。

现在可以通过键入StartX来启动X。每次打字都有点麻烦,所以让我们定义一个指向它的符号链接:

如果一切配置正确,就会显示DWM,并且状态行显示整个系统仅使用大约60兆字节的RAM。那是微不足道的。用于打开st和d菜单的键盘组合也可以使用。

在OpenBSD上安装带有Suckless软件的基本GUI是相当流畅的体验。(对于FreeBSD,我特意选择了一种相当细粒度的方法来安装X包,这会带来一些额外的工作。)。但是,各种设置需要额外的调整。我还没有使用音频,这需要在DWM中相应地配置音量按钮。

我还需要设置sudo或DOA。当然,作为Linux的普通用户,我习惯于sudo,但DOA的简单性是尝试它作为替代方案的一个很好的理由。