PiFlash入门:在Linux上启动你的树莓派

有了PiFlash,Linux用户可以告别手动创建树莓派启动SD卡的方式了。
187 位读者喜欢这篇文章。
Vector, generic Raspberry Pi board

大多数人在设置树莓派电脑时都会安装某种形式的 Linux。直到最近,创建可启动 SD 卡的安装工具仅适用于 Windows 和 MacOS 桌面系统。 如果你在桌面上运行 Linux,你将获得一个从命令行手动执行它的说明页面。

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

2016 年我编写 PiFlash 只是为了自己使用。 到 2017 年 2 月,它已经发展到足以让我在 SVPerl(硅谷 Perl)上关于在树莓派上使用 Perl 的演示文稿中介绍它,然后我被邀请为 Opensource.com 撰写两篇文章:树莓派上的 Perl 入门如何保护你的树莓派

PiFlash 功能

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

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

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

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

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

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

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

安装 PiFlash

PiFlash 可从 CPAN (Comprehensive Perl Archive Network) 获得 - 但在继续之前,请确保你已安装所有依赖包。 要安装依赖项

在基于 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 输出设备参数中需要它。

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

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

刷写 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 或配置文件启用它们。 插件的名称是 Perl 模块名称,没有 PiFlash::Plugin:: 前缀。 对于多个插件,它是一个逗号分隔的名称列表。 启用插件可以使用一个钩子,该钩子在写入 SD 卡后挂载启动和根文件系统时调用。 有关插件的更多信息,请访问 PiFlash::Plugin 模块文档。

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

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

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

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

标签
User profile image.
自小学起,Ian 就对计算和飞行有着并行的兴趣。 在 Linux 出现之前,他就在 Unix 上进行编码,并在内核发布 6 个月后开始使用 Linux。 他拥有计算机科学硕士学位,并且是 CSSLP(认证安全软件生命周期专业人员)。 业余时间,他是一名飞行员和认证的飞行教官。

5 条评论

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

是的。 没有占主导地位的编程语言。 如果一种语言得到积极维护并且拥有开发人员社区,那么它就有资格成为你工具箱中的工具。 任何程序员都应该有不止一个,以获得广泛的经验。 听取积极的评价 - 因为负面的言论通常只是来自推广其他东西的人。

特别是对于 PiFlash,我从 Perl 社区的成员 CPAN Testers 获得了一些意想不到的帮助,他们拥有用于上传到 CPAN(Comprehensive Perl Archive Network)的模块的自动化测试系统 - 他们告诉我 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.