FreeBSD之旅

2021-02-17 18:35:50

我通常会处理Linux机器。 Linux是我所知道的,这是我上大学以来一直使用的Linux。我的一个朋友一直在哄我试用FreeBSD,所以我决定尝试一下,看看它是什么样子。以下是有关我的经历和我所学的内容的一些详细信息。

我对Raspberry Pi 3的运气最大。在安装过程等待邮件服务对其自己的主机名进行DNS探测后,KVM计算机将无限挂起(我的虚拟机没有托管automagic FQDNS)。我很确定自己在那儿做错了什么,但是我无法弄清楚我需要做些什么才能禁用DNS探针阻止启动。

如果您知道我们在这里做错了什么,请随时与我们联系以解决我们的问题。

等待约5分钟后,我放弃了,并决定尝试RaspberryPi4。RaspberryPi 4是我拥有的功能最强大的主板。它具有4 GB的OFRAM和一个四核处理器,足以满足我的需求。我希望在那台机器上使用FreeBSD,这样我就可以从硬件中受益最多。按照Wiki页面上的说明,我下载了12.2 RPIimage并使用Etcher将其闪存到SD卡中。我将SD卡放入其中,打开raspi,然后等待它显示在网络上。

除非它从未出现在网络上。我使用nmap进行扫描(特别是使用sudo nmap -sS -p 22 192.168.0.0/24命令),并且IP地址从未显示出来。我也没有在网络上看到任何新的MAC地址,因此导致我相信pi无法启动。我下载了13-BETA的图片,并遵循了该指南的要求,声称可以在pi 4上使用,但是我遇到了同样的问题。遗憾的是RaspberryPi 4上有一个微型HDMI端口,因此我无法将其连接到显示器上以查看任何错误消息。尝试了一会儿看是否可以设置一个串行端口以获取串行日志消息(破坏者:我无法)之后,我挖出了Pi 3并将相同的SD卡插入其中,并将其连接到我的显示器,将备用键盘连接到它,并首先尝试进入FreeBSD。

FreeBSD是一个非常扎实的操作系统。它还具有一本手册,该手册合法地包含了您启动和运行所需的所有信息。按照手册,我设置了一个新密码,安装了pkg工具,设置了fish,然后还安装了Go编译器工具链。

pkg是一个非常简单的软件包管理器。它没有太多的装饰,并且很好地集成到了系统中。似乎它喜欢将所有内容都放在/ usr / local中,包括初始化脚本和其他配置文件。

有趣的是,这使您可以将基本系统的关注与单个本地计算机的配置分开。我不确定这是否也可以与/etc/resolv.conf等文件或其他系统配置文件一起使用,但确实确实为/ usr / local提供了一个理由,使其成为可能无法安装或无法安装的常规位置。单独升级。

说到服务,我想看看在FreeBSD机器上运行定制服务有多困难。至少我需要以下内容:

构建服务很容易,我进入目录并运行go build,然后得到一个二进制文件。在另一个tmux标签中运行它,我们可以看到它的运行情况:

等一下,做吗?什么是做事?看起来它在做类似于whatsudo的事情。

doas是一个程序,它执行sudo所做的大部分相同的事情,但是它的代码库要小得多。我决定为此安装尝试doas,除了我认为这将是一件很酷的事情之外,没有其他原因。它实际上非常简单,我将考虑在其他地方使用itel(在sudo-> doas中使用别名)。

该手册说,我们使用adduser命令将用户添加到系统中。因此,让我们运行adduser创建一个whatsmyip用户:

#adduserUsername:whatsmyip全名:github.com/Xe/whatsmyipUid(默认为空):666登录组[whatsmyip]:登录组为whatsmyip。邀请whatsmyip加入其他群组? []:登录类[默认]:Shell(sh csh tcsh bash rbash git-shell fish nologin)[sh]:shHome目录[/ home / whatsmyip]:/ var / db / whatsmyipHome目录权限(默认为空):使用基于密码的身份验证? [是]:no在创建后锁定帐户吗? [否]:yesUsername:whatsmyipPassword:< disabled>全名:github.com/Xe/whatsmyipUid:666Class:Groups:whatsmyipHome:/ var / db / whatsmyipHome Mode:Shell:/ bin / shLocked:yesOK吗? (是/否):yesadduser:INFO:已成功添加(whatsmyip)到用户数据库。adduser:INFO:帐户(whatsmyip)已被锁定。添加其他用户? (是/否):否再见!

有点奇怪,没有用于创建系统用户的流程。它会自动设置我期望从Linux系统管理中获得的标志,但是我能够手动指定这些值而无需花费太多精力。

有趣的是,当我将用户帐户设置为nologin时,实际上无法以该用户身份登录。通常,在Linux中,您可以使用su标志来解决这个问题,但是FreeBSD没有这种逃生方法。整洁的。

现在我已经设置了服务帐户,我需要编写一个初始化服务,该服务将在启动时启动该程序。按照手册的其他部分,我可以得到一个基本的脚本,如下所示:

#!/ bin / sh ##提供:whatsmyip#要求:DAEMON#关键字:关机。 /etc/rc.subrname=whatsmyiprcvar=whatsmyip_enablecommand="/usr/sbin/daemon"command_args=" -S -u whatsmyip -r -f -p /var/run/whatsmyip.pid / usr / local / bin / whatsmyip" load_rc_config $ name ##不要在这里更改这些默认值#在/etc/rc.conf文件中设置它们## whatsmyip_enable = $ {whatsmyip_enable-" NO"} pidfile = $ {whatsmyip_pidfile-" /var/run/whatsmyip.pid"} run_rc_command" $ 1"

现在,我可以将此文件复制到/usr/local/etc/rc.d/whatsmyip,然后使用类似以下方法确保将其设置为权限0555:

将文件放在正确的位置后,便在/etc/rc.conf中启用了服务,如下所示:

然后,我使用服务whatsmyip start启动了该服务,但无法启动该服务。我收到此错误:

没有其他有用的信息可帮助我真正解决问题。我假设存在一些奇怪的权限问题,所以现在暂时避开用户帐户,并通过更改/usr/local/etc/rc.d/whatsmyip中的command_args直接以root用户身份运行服务:

重新启动服务,一切正常!我可以随心所欲地使用该服务,然后获得用于该服务的IP地址。

FreeBSD具有出色的文档。文档团队中的人们非常关心使手册有用。我希望它详细介绍了制作自己的服务的最佳实践(我不得不从其他一些服务文件中获取信息,同时还要搜索一个最小的模板),但总的来说,它为您提供了足够的信息来帮助您起步。

FreeBSD也很奇怪。这是很熟悉的,但是却是完全不同的经历。它也是极小的。从ps x的输出来看,系统上只有45个进程在运行,包括内核线程。

仅有的进程是init,dhclient,设备管理器,syslog,tailscaled,sshd,cron,whatsmyip,fish和getty的一些实例,这些可以让我用HDMI监视器和键盘登录。那坐。这就是所有正在运行的东西。它仅使用96 MB的ram,而机器的大部分功能都留给了我。

FreeBSD对编程语言的支持如此之差,实在令人遗憾。 Go可以在上面很好地工作,但是Rust没有任何预编译的二进制文件可供使用(并且选择使用ports / pkg是不可行的,因为aarch64是FreeBSD领域中的第2层体系结构,这意味着它是&#39 ; s不保证所有内容都已预构建二进制文件)。从源代码编译Rust也确实不是一种选择,因为我在raspi上没有足够的内存来做到这一点。努力工作。

我真的很想知道,这种网络效应将如何随着越来越多的安全库(例如将Rust更深入地集成到核心安全组件中的pyca)而消失。这可能意味着人们将不得不加紧努力,实际要做使Rust在更多平台上工作所需的繁琐工作,但是,如果我们不这样做,肯定会遗留下一些较旧的硬件或不常用的配置(例如aarch64 FreeBSD)。 39;小心也许这不是技术问题,但绝对值得考虑。

总的来说,FreeBSD是一个有趣的工具,如果我在服务器基础结构中很好地使用过它,我肯定会给它一个漂亮的外观。 我只是希望管理FreeBSD系统就像管理NixOS系统一样容易。 如果是这样的话,我在rc.conf和rc脚本上的许多工作就不需要停下来了。 本文发布于M02 132021。事实和情况自发布以来可能已经改变。 如果出现问题或不清楚,请先与我联系,然后再得出结论。