PiFlash 入门:在 Linux 上启动你的 Raspberry Pi

Linux 用户可以使用 PiFlash 告别手动创建 Raspberry Pi 可引导 SD 卡的时代。
187 位读者喜欢这篇文章。
Vector, generic Raspberry Pi board

大多数人在设置 Raspberry Pi 计算机时都会安装某种形式的 Linux。直到最近,用于创建可引导 SD 卡的安装工具才仅适用于 Windows 和 MacOS 桌面系统。 如果你在桌面上运行 Linux,你将会得到一个从命令行手动执行安装的说明页面。

这可行。但是如果你尝试使用多个 Raspberry Pi 板,随着时间的推移,这会变得很繁琐。作为一名工程师和程序员,我开始考虑自动化这个过程,使其更容易,并且以开源项目通常的启动方式,我推出了 PiFlash

我在 2016 年编写 PiFlash 只是为了我自己。到 2017 年 2 月,它已经发展到足以在 SVPerl(硅谷 Perl)上展示有关在 Raspberry Pi 上使用 Perl 的信息,然后我被邀请为 Opensource.com 撰写两篇文章:Raspberry Pi 上的 Perl 入门如何保护你的 Raspberry Pi

PiFlash 的特点

PiFlash 具有吸引初学者和专家的功能。

像大多数其他开源软件工具一样,如果你不感兴趣,则无需查看它所使用的语言。但是源代码可供高级用户和参与者使用。

对于专家用户,PiFlash 简化了写入 SD 卡的过程。当你下载可引导操作系统“镜像”文件时,它通常位于 ZIP 存档中或被压缩。所有发行版的打包方式都略有不同。 使用 PiFlash,你无需解压缩镜像。只需指定下载的文件作为输入,PiFlash 将完成提取的繁琐部分。

对于初学者,有一个重要的安全功能:PiFlash 写入 SD 卡,并拒绝写入任何其他类型的设备。由于你必须使用 root 权限才能写入卡,因此系统将执行你告诉它的任何操作。 因此,在尝试为新的 Raspberry Pi 手动刷写 SD 卡时,可能会意外擦除错误的设备,也许是你想保留的硬盘驱动器。

这就是 PiFlash 保护你免受危险的地方。在内部,它使用 util-linux 包中的 lsblk 命令查找设备属性,该包是所有 Linux 发行版的一部分。它可以识别使用各种驱动程序的 SD 卡。如果不是 SD 卡,它将拒绝写入块设备。

幸运的是,Raspberry Pi 基金会在其 Windows 和 MacOS 用户说明中使用的 Etcher GUI 工具已扩展到 Linux,因此现在 Linux 上有一个 GUI 选项供那些喜欢 GUI 的人使用。但是,如果你想自动化该过程,或者如果你想要高级用户的自定义级别,则只有命令行工具才能完成这项工作。

最新版本的 PiFlash 添加了插件模块,可以在安装操作系统镜像后修改 SD 卡的文件系统,因此你可以开始探索自动化新选项。

安装 PiFlash

PiFlash 可从 CPAN(Comprehensive Perl Archive Network,综合 Perl 档案网络)获得——但在继续之前,请确保已安装所有依赖包。要安装依赖项

在基于 RPM 的 Linux 系统上(Red Hat Enterprise、Fedora、CentOS 等)

sudo dnf install coreutils util-linux perl file-libs perl-File-LibMagic perl-IO perl-Exception-Class perl-Try-Tiny perl-Module-Pluggable perl-File-Path perl-YAML-LibYAML gzip unzip xz e2fsprogs dosfstools

在基于 Debian 的 Linux 系统上(Debian、Ubuntu、Raspbian 等)

sudo apt-get install coreutils util-linux klibc-utils perl-base libmagic1 libfile-libmagic-perl libio-all-perl libexception-class-perl libtry-tiny-perl libmodule-pluggable-perl libyaml-libyaml-perl gzip xz-utils e2fsprogs dosfstools

对于基于源代码的发行版或其他打包系统,请参阅 CPAN 文档以获取依赖项列表。

接下来,使用 CPAN 工具安装 PiFlash

cpan PiFlash

我已设置了基于 Dist::Zilla 的构建来制作 DEB 和 RPM 包,但它尚未包含在任何主要的包档案中。将来可能会实现。

运行 PiFlash

如果你只运行 piflash 命令而不带任何参数,它将打印用法信息。

usage: piflash [--verbose] [--resize] [--config conf-file] input-file output-device
       piflash [--verbose] [--config conf-file] --SDsearch
       piflash --version

扫描系统以查找 SD 卡,以获取确切的设备名称,你将在下面的 Pi-Flash output-device 参数中使用它。

piflash --sdsearch

如果没有找到 SD 卡,它会提示找不到任何东西。

no SD cards found on system

顺便说一句,如果你有一个 PiFlash 不知道的 SD 卡写入器,请通过在 GitHub 上提交报告告诉我。对于问题报告和故障排除,请使用 --verbose 选项收集程序的内部信息,以便我可以看到你的系统具有 PiFlash 无法识别的驱动程序。

你的确切设备名称可能因驱动程序和系统上其他设备使用的名称而异。如果你有基于 USB 的 SD 读/写器,它可能会显示类似以下内容

SD cards found: /dev/sdb

或者,如果你有一个内置的 SD 卡插槽,它可能会使用不同的驱动程序,并且其名称表明它正在使用 MMC(MultiMediaCard)驱动程序使用 SD 卡

SD cards found: /dev/mmcblk0

接下来,下载要安装的系统镜像。 Raspberry Pi 基金会有一个旧的 可能性列表,该列表不再更新。由于 Raspbian 是 Raspberry Pi 的官方 Linux 发行版,因此驱动程序支持首先会出现在那里。 但其他发行版也有效:Ubuntu 在列表中,但 Fedora 不在,因为 ARM 和 Raspberry Pi 支持是在列表创建之后出现的,但是你可以下载它

用于刷写 SD 卡的命令是 piflash <input-file> <output-device>。以下是一些用于刷写它的命令示例,具体取决于你下载的系统以及哪个块设备具有你的 SD 卡

piflash 2018-11-13-raspbian-stretch-full.zip /dev/mmcblk0
piflash Fedora-LXDE-armhfp-29-1.2-sda.raw.xz /dev/sdb

PiFlash 现在有一个 --resize 选项,它将调整 SD 卡上的根分区大小以填充设备的其余部分。它仅在根是 Linux ext2/3/4 文件系统时有效。 大多数发行版都提供此选项,你可以在安装后手动执行,但是此选项将其自动化为一个步骤。

插件、自动化和未来发展

在撰写本文时,PiFlash 0.3.1 是当前版本。

PiFlash 0.1.0 引入了插件模块,这意味着诸如 PiFlash::Plugin::Something 之类的 Perl 模块将可供程序使用。作为一项安全预防措施,因为 PiFlash 可以作为 sudo-root 运行命令,所以不会自动加载插件。相反,必须通过命令行或配置文件中的 --plugin 启用它们。 插件的名称是不带 PiFlash::Plugin:: 前缀的 Perl 模块名称。对于多个插件,它是一个逗号分隔的名称列表。启用插件可以使用在写入 SD 卡后安装 boot 和 root 文件系统时调用的钩子。 有关插件的更多信息,请访问 PiFlash::Plugin 模块文档。

以下是我自己的待办事项列表中有关即将推出的插件模块的一些想法...

  • 在 SD 卡启动之前,更改 SD 卡上用户和 root 帐户的密码
  • 设置网络参数和主机名
  • 修改通常需要手动运行 raspi-config 或编辑 config.txt 的系统配置参数
  • 围绕你构建的 ARM 内核设置一个自定义的 Linux 环境

我的想法当然受到我想做什么的影响。你可能希望朝其他方向发展,因此请考虑贡献补丁和插件。

PiFlash 的源代码存储库位于 GitHub 上。 也请在那里提交问题报告和代码/文档贡献。

User profile image.
自小学以来,Ian 就对计算和飞行有着浓厚的兴趣。他在 Linux 出现之前就在 Unix 上进行编码,并在内核发布 6 个月后开始使用 Linux。 他拥有计算机科学硕士学位,并且是 CSSLP(Certified Secure Software Lifecycle Professional,认证安全软件生命周期专业人员)。 另一方面,他是一名飞行员和一名认证的飞行教练。

5 条评论

干得好。你是否发现人们仍然积极地为 perl 项目做出贡献?

是的。没有占主导地位的编程语言。如果一种语言得到积极维护并拥有一个开发人员社区,它就有资格成为你工具箱中的工具。 任何程序员都应该拥有多个工具以扩展经验。 听取积极的方面——因为负面的评论通常只是来自宣传其他东西的人。

特别是对于 PiFlash,我从 Perl 社区的成员(称为 CPAN 测试人员)那里获得了一些意想不到的帮助,他们为上传到 CPAN(综合 Perl 档案网络)的模块拥有自动化测试系统 - 他们告诉我 PiFlash 的一些单元测试用例(我编写作为 PiFlash 的一部分)在基于 Debian 的 Linux 发行版和 FreeBSD 上失败。对于 Debian,我发现并修复了他们报告的问题。 CPAN 测试人员提供了很大的帮助。

对于 FreeBSD,这是一个更大的问题,无法尽快解决。我必须将其标记为当前不受支持,这样他们就不会浪费时间运行这些测试。由于 PiFlash 使用 util-linux 中的 lsblk 命令,因此它与 Linux 内核的功能相关。 PiFlash 最初是使用 Linux。为了扩展到支持 FreeBSD 和其他 *BSD 内核,它将需要一个操作系统内核抽象层。 我需要其他运行 BSD 的人来帮助处理它必须在 BSD 系统上采取的特定操作。 如果其他人想帮助处理 BSD 部分,我愿意添加 BSD 支持。

回复 ,作者:Lewis Cowles(未验证)

我应该补充一点... 关于学习编程语言以在你的工具箱中添加更多工具,你可以自己选择。选择你喜欢的。我喜欢 Perl,因为它非常强大,可以让我看起来像是在施展魔法。

回复 ,作者:ikluft

感谢你的工作,但我猜你从未听说过 EtcherIO。它作为 AppImage 分发,你只需下载并在 Linux 上运行。 如果我没记错的话,它也适用于 Windows 和 Mac。

是的,我用过 - 那就是我提到的 GUI。当 PiFlash 开始时,它不适用于 Linux。 PiFlash 通过插件自动化任务的方式有自己的优势,而这些插件是 GUI 工具无法实现的。选择适合你的工具。 但不要忽视其他人追求的优势。

回复 ,作者:wb666greene (未验证)

© . All rights reserved.