消防部门的实用 Tiny Core

我相信你们很多人至少听说过 Tiny Core Linux——关于它有多小的传说,运行一个系统需要多小的代价,甚至现在它已经被移植到 Raspberry Pi 上运行。这是一个深奥的极简主义发行版。Joey Bernard 在 Linux Journal 上发表了一篇非常好的2011 年 9 月的评论文章

我在长期寻求一个好的解决方案来解决我遇到的问题后,才接触到 Tiny Core Linux。我是一名消防员和急救医疗技术员,在宾夕法尼亚州的 Bushkill 消防公司工作。作为一个完全由志愿者组成的消防部门,同时也是我们整个覆盖区域的主要服务提供商,这带来了一些独特的挑战。当调度到来时,消防车和救援设备需要快速出门并上路。

我们每次出警时执行的部分后勤杂技是弄清楚谁会来。不同的人员带来不同的技能、技能水平、责任和能力。有些人是操作特定和专用设备的专家,而另一些人可能带来特定类型的技术诀窍。根据呼叫的不同,指挥官喜欢了解有哪些人员到达,以便他们计划出解决给定紧急情况的最佳方法。知道您最好的车辆解救技术人员正在响应一起涉及两辆汽车并可能有人被困的交通事故,这很好,简直是势在必行。

技术一直处于紧急服务部门解决众多问题的最前沿。一些公司发布了专为消防部门设计的 Web 应用程序,以解决“谁会来”的问题。这些系统由一个 Web 页面组成,该页面充当仪表板并在消防站中显示。每个响应者拨打一个号码,将其姓名注册为响应呼叫。然后,指挥官可以通过查看消防站的监视器来评估他们的人力情况,并快速决定是否需要更多资源。这些应用程序的功能不止于此,但这是它们设计的核心。

这听起来很棒,而且确实是一个巨大的帮助和资源。作为我们消防站的 IT 负责人,我幸运地承担了让这个系统为我们工作的任务。当然,最简单的解决方案就是启动带有 IE 的 Windows,让显示器放在那里——事实上,供应商也向我建议这样做。我想当您试图销售一些易于使用的东西时,您就会这样做。不用说,这个解决方案令人不满意。从预算的角度来看,我被鼓励尽量降低成本。第一个也是最简单的决定是使用 Linux。我只是省去了 Windows 许可证的费用。

最初的要求和约束条件如下:

  1. 拥有一台低功耗计算机来运行 Web 浏览器——越小越好。

  2. 显示器必须为 32 英寸或更大。

  3. 计算机和显示器位于不同的房间。

  4. 建筑物使用发电机备用电源,系统必须能够承受主电源断电到发电机启动之间的最小功率损失。

  5. 显示器需要安装在 10-12 英尺的高度,以便每个进入建筑物的人都能轻松看到。

我继续购买了一台迷你 PC,价格约为 160 美元(我用的是 Zotac Mag)。考虑到距离要求,显示器与计算机位于不同的房间,我决定使用 HDMI 连接和有源扩展器(Cat 5 以太网到 HDMI 扩展器)。显示器是一台 32 英寸 720p LCD 电视。

我的第一反应是抓取最新的 Ubuntu 并安装它,我也是这么做的。当时,大概是两三年前,那是 Ubuntu 11。我天真地安装了它,设置了无线网络,并让 Firefox 在启动时加载。我还将 Firefox 设置为保存会话,以便它始终以相同的会话启动。确保关闭屏幕保护也很重要。一切都运行良好,或者我是这么认为的。随着时间的推移,我开始遇到一些我没有想到的问题。让我在这里介绍一下其中的一些问题。

第一个最明显的问题是当互联网连接中断时会发生什么。Ubuntu 的 Wi-Fi 管理是为桌面环境构建的。它在该环境中表现出色。然而,对于本质上是信息亭的东西,它有一些缺点。它仍然需要一定程度的交互,就像大多数为桌面设计的东西一样。最简洁的说法是,对于我的需求来说,它只是操作系统太多了。我不需要 Unity;我不需要合成窗口系统;我不需要被更新困扰;我不需要花哨的软件包管理系统,也不需要到处寻找我想要更改的每个设置在哪里。我的方法是错误的。我发现自己通过拆解操作系统来解决问题。我相信你们很多人也这样做过。最后,它是可损坏的。如果您愿意,可以更改设置。这对于桌面来说非常棒,因为它意味着我可以根据自己的需要自定义它。相反,这对于信息亭来说非常糟糕,因为它意味着每个接触到它的人,即使是出于好意,也可以更改设置,并在您需要它完全恢复到最初设置状态时给您带来更多的麻烦。这也发生了。一位消防员同事进来,想知道页面是否正确刷新,拿起键盘和鼠标,然后我才知道,浏览器被设置为从 yahoo.com 启动,并带有体育新闻滚动条。这仅仅是拥有公共系统的自然结果。

在不断修复这些小问题后,我已经受够了。我决定一定有更好的方法。我从头开始,跳转到 Distrowatch.com,开始搜索更合适的发行版。我考虑过的几个发行版是 Vector Linux、Puppy Linux、Damn Small 和 SliTaz。这些都是非常棒的发行版,这绝不是对每个发行版的功能的阐述。这只是我对我所做的事情的描述。

我最终接受了现实,我将制作一个满足我需求的发行版——不多也不少。换句话说,我想要 Just Enough Operating System (JeOS)。最终,我选择了 Tiny Core Linux。它让我可以做到这一点。

我可能应该退一步,以免冒犯 Tiny Core 专家。Tiny Core Linux 不应被视为发行版。它应该被视为一组用于构建您认为合适的 Linux 系统的工具。我只需要足够的东西来完成这项特定的工作。

Tiny Core 在其网站上提供三种版本。Core 是三者中最小的,只有 9MB。Core 提供命令行界面。TinyCore 提供基本的 FLTK/FLWM GUI,最后,CorePlus 提供七种不同的窗口管理器、Wi-Fi 支持、重新制作工具和对非美国键盘的支持。

我将 CorePlus 安装到 USB 驱动器上并启动了它。我开始了解 Tiny Core 的工作原理,毫无疑问,这里有一个相当陡峭的学习曲线。对于我的目的来说,这是非常值得的。此外,谁不喜欢学习新事物呢?关于 Tiny Core Linux 最重要的事情之一是它是不可损坏的。我可以完全按照我的意愿设置它,并且它始终会启动到该状态。没有任何东西被保存。Tiny Core 启动并完全在 RAM 磁盘中运行。它打开您创建的映像文件,将其加载到内存中并运行。无论您是从硬盘驱动器还是 USB 驱动器启动它,它都会简单地将映像文件加载到内存中,其中包含您构建到其中的所有程序、设置、文件等等。Tiny Core 使用扩展的概念来安装应用程序。Tiny Core 网站上有一篇关于扩展的优秀文章。有关 Tiny Core 的更多细节,还有我之前提到的优秀的 Linux Journal 文章,我建议您阅读一下。

对 Tiny Core Linux 的工作原理有了更好的了解后,我决定它是最适合我的选择。因此,我开始按照我想要的方式设置系统。

  • 选择 X 服务器:Tiny Core 默认为 xvesa。我不需要任何花哨的东西,但决定使用 Xorg,因为它易于配置。高清电视有两种分辨率:1920x1080 (1080p) 和 1280x720 (720p)。因此配置问题不大。我的显示器是 720p。

  • 选择窗口管理器:在可用的选项中,我选择了 Joe 的窗口管理器。选择任何舒适且适合您需求的管理器。

  • 选择我的扩展:我选择了以下扩展:Firefox 作为我选择的浏览器;lxrandr,用于在 Xorg 下配置分辨率;wifi,包括所有必需的 Wi-Fi 库和固件 Xorg 作为依赖项,如前所述。

  • 可选:wicd,用于 Wi-Fi 的图形配置。

真正完全定制您的系统的唯一方法是通过反复试验。活到老,学到老,变得更好。一旦我有了我想要的扩展,我选择在启动时将它们加载到 initrd 应用程序中。Tiny Core Wiki 对差异进行了很好的解释。我选择这样做是因为没有太多扩展需要加载,而且它们都适合我正在使用的机器的 RAM。这也使我免于对闪存驱动器进行过多的写入(如果系统正在运行闪存驱动器),甚至不需要硬盘驱动器。我使用的系统有一个 160GB 的硬盘驱动器,我安装了它。它还可以节省功耗。

我很幸运有一台旧笔记本电脑可以用来试验,因为我定制了我的系统。我也在我的 Ubuntu 机器上使用了 VirtualBox。选择了我所有的扩展后,我重新制作了它,最终得到了一个小于 70MB 的系统。您可以根据自己的意愿进行细致的调整,但我需要尽快让它工作;虽然我承认,我有一天会回去看看我能把它做得多小!

系统启动后,一切都正常了。当然,这是在重新制作了大约四次之后才实现的。就像我说的,这是一个学习过程,您会边做边调整。现在开始进行让它在启动时执行我想要的操作的工作。第一个问题是我需要 Wi-Fi。我使用 wifi 实用程序连接到 Wi-Fi 网络。Tiny Core 的 wifi 扩展提供的标准命令行 Wi-Fi 实用程序将您提供的 SSID 和密码设置保存在 wifi.db 文件中。

图 1. bootlocal.sh 在此文件中被调用。在这里,我正在从 opt/wifi.db 加载 Wi-Fi 设置。连接后,启动过程继续。

图 2. wifi.db 的示例——请注意 SSID 在前,密码(明文)在后。

保存设置后,我将 Wi-Fi 设置为在启动时自动连接。Tiny Core 有两个位置用于在启动时加载命令和脚本,即 /opt 中的 bootlocal.sh 和 bootsync.sh。两者之间存在细微但重要的区别。bootsync.sh,顾名思义,不是异步的;命令会运行,并且它们会阻塞启动过程,直到完成。bootlocal.sh 从 bootsync.sh 在后台运行。我需要在任何尝试使用互联网之前加载 Wi-Fi。如果浏览器加载并尝试在 Wi-Fi 脚本仍在尝试连接时加载页面,那将是灾难性的。需要注意的一个非常重要的陷阱是,如果 Tiny Core 的 wifi.sh 脚本未连接,它将关闭 WLAN 接口。这起初让我感到困惑,让我认为我遇到了内核模块问题。唉,我没有,所以我保存了正确的 Wi-Fi 凭据,然后我又一次启动并运行了。

接下来要处理的特定于操作系统的配置是 DPMS 和屏幕保护程序设置——毕竟,我不能让屏幕在工作站显示器上每 15 分钟变黑。有几种方法可以禁用自动变黑和睡眠。这是我所做的:我将以下内容放入 ~/.xsession 文件中(因为它们是特定于 X 的选项,所以它们属于这里):


xset s off
xset s noblank
xset -dpms

s off 选项关闭屏幕保护程序功能;noblank 告诉它不要使屏幕变黑,最后,-dpms 告诉 Xorg 禁用 DPMS Energy Star 功能。

我快完成了。这个难题的最后一个,也是很大的一个部分是在启动时加载带有正确设置的浏览器。为此,我在 ~/.X.d 中放置了一个脚本。我只是创建了一个名为 firefox 的文件,并在其中放入了 firefox &。它不需要是可执行文件,因此无需修改其权限。现在浏览器在启动时加载了。我可以写一篇关于配置浏览器的完整文章,但这里简要介绍一下它是如何进行的。

我使用 Firefox 的 Session Manager 扩展来保存我想要的会话。Session Manager 有用于自动加载会话的设置;根据您的需要调整这些设置。我还确保 Session Manager 不会覆盖我的会话,以防出现任何问题。除了 Session Manager,我还安装了以下内容:

  • FF 全屏:以全屏模式启动浏览器。

  • Reload Every:按指定的间隔刷新页面。

  • Memory Restart:当浏览器的内存使用量达到阈值时自动重启浏览器。

在将浏览器设置为我想要的方式后,是时候保存我的设置了。我已经说过 Tiny Core 是不可损坏的;我所说的不可损坏是指它始终以相同的状态启动。您的设置和完成的任何其他操作都不会在关机时保存。一切都驻留在 RAM 中。当它再次启动时,它只是将其映像文件解压缩到内存中。那么当您需要保存设置时该怎么办?Tiny Core 允许您以备份的形式保存您对文件系统所做的任何更改。备份只是您指定的任何内容的 tarball。然后可以将 Tiny Core 配置为在每次启动时恢复此文件。Tiny Core 包括一个备份实用程序。备份实用程序创建一个 tarball 文件,其中包含您在 /opt/.filetool.lst 中指定的任何内容,并排除 /opt/.xfiletool.lst 中的任何内容。我的文件包含列表包括:

  • home

  • opt

我的 home 和 opt 目录都包含在备份中,但我不需要所有内容:

  • Cache

  • cache

  • .cache

  • XUL.mfasl

  • XPC.mfasl

  • mnt

  • ./adobe/Flash_Player/AssetCache

  • .macromedia/Flash_Player

  • .opera/opcache

  • .opera/cache4

  • .Xauthority

  • .wmx

  • *.iso

这里的一切都是默认的,除了 *.iso。这是因为重新制作过程可以为您创建一个可启动的 ISO,而我不想将其包含在我的备份中。确保您要保存的任何设置都位于备份中包含的文件中。在我的例子中,Firefox 扩展和设置都包含在 home 目录中的 .mozilla 中。您甚至可以进行试运行,以查看根据您提供的规则将保存哪些文件。一旦我满意了,我就进行了备份,我生成的备份文件 mydata.tar.gz 大约为 800KB。

图 3. 备份实用程序是您创建 .tgz 备份文件的地方。“试运行”选项始终是一个好主意,这样您就可以确切地知道它将要做什么。

现在我有了备份文件,我准备好重新制作了。我使用包含的实用程序重新制作,但还有其他重新制作方法(快速访问 Tiny Core 文档将向您展示它们)。在重新制作过程中,我选择了我的扩展(如前所述)和我想要的启动代码。

Tiny Core 有许多启动代码。让我在这里回顾一些重要的启动代码。您可以定义 home 目录和 opt 目录的位置。因为我安装 Tiny Core 的系统有硬盘驱动器,所以我将启动代码指定为:


opt=sda1 home=sda1

文档中列出并描述了一个 norestore 选项,它告诉 Tiny Core 不要恢复任何备份。因为我希望在每次启动时都恢复我的确切设置,所以我没有使用该选项。在 Ezremaster 过程中,我指定了我的备份文件。我还告诉 Ezremaster 过程为我创建一个 ISO 文件。

图 4. 选择要加载的内容以及最佳加载方式将是您项目的重要组成部分。如果需要,您可以创建自己的扩展。

图 5. Ezremaster 实用程序使您可以非常轻松地进行自己的重新制作。这为我的项目节省了大量时间。

重新制作完成后,我将新的 Tiny Core 构建加载到 USB 驱动器上。它完美启动。现在有了一个我需要的可用副本,我继续将其安装到我们的迷你 PC 上。安装过程涉及运行 Tiny Core 安装程序。我不需要任何特定的分区方案,所以我只使用了整个驱动器。我指定 sda1 作为我的 opt 和 home,如前所述。系统安装完成后,我将我的备份 tarball 放在新创建的文件系统上。然后,我取下 USB 拇指驱动器并重新启动了它。我现在有了我的自定义 Tiny Core Linux 显示信息亭,它可以完全正常工作。每次重启都为我提供了一个根据我的规范量身定制的干净环境。

学习 Tiny Core 工作原理的时间是值得的。一直没有问题,而且系统非常稳定。即使断电,它也会启动并加载我们的页面,显示调度信息以及谁将到达呼叫现场(如果有呼叫)。它不需要任何管理,因为设置不会更改。它对我来说是 Just Enough Operating System!

图 6. 这是我们的显示板,显示我们的呼叫、单位和到达信息。

图 7. 我们在消防站的显示器:带有有源 HDMI-to-以太网扩展器的 LED 电视——全部启动并运行我们定制的 Tiny Core Linux!

图 8. 这是我们车库的前视图。当进入消防站时,进入这些消防车的队员能够看到显示器(未图示)。

以下是我希望在我的下一个版本中改进的一些内容:

  • 将设置从备份文件移动到扩展。Tiny Core 文档概述了此过程,我迫不及待地想尝试一下。这应该简化加载设置和用户创建文件的过程。

  • 为 1080p 和 720p 创建显示配置文件。通过为两种电视类型提供两个配置文件,如果 Xorg 无法自动检测特定显示器的分辨率,则可以轻松选择它们。

  • 远程监控——安装类似 monit 的东西以启用监控。

  • 创建一个包含初始设置脚本的扩展。这些脚本将设置信息,例如 Wi-Fi 凭据、显示器类型等,并处理这些设置的持久性。

  • 与 UPS 集成。安装 NUTS 软件包以与 UPS 接口,尽管这可能是不必要的复杂化。我相信有人会用到它。

Tiny Core Linux 为我们节省了资金,为我节省了一些理智,并让我们的消防员同事了解情况并准备好执行任务。消防员必须 24/7 全天候待命,因此技术应该帮助我们实现这一目标,而不是妨碍我们。Linux 已被证明非常胜任,我将根据需要进行更改和改进。我希望您也尝试一下,并告诉我们进展如何。

加载 Disqus 评论