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

Linux用户可以告别手动创建树莓派可启动SD卡的时代,使用PiFlash。
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卡的过程。 当你下载可启动的操作系统“镜像”文件时,它通常采用ZIP存档或压缩格式。 所有发行版都以略有不同的方式打包它们。 使用PiFlash,你无需解压缩镜像。 只需将下载的文件指定为输入,PiFlash将完成提取它的繁琐部分。

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

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

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

最新版本的PiFlash添加了插件模块,可以在安装操作系统镜像后修改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卡上的根分区调整为填充设备的其余部分。 它仅在root是Linux ext2 / 3/4文件系统时才有效。 大多数发行版都将其提供为你可以在安装后手动执行的选项,但是这可以将其自动化为一个步骤。

插件,自动化和未来发展

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

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

以下是我自己的待办事项清单上的一些想法,用于即将推出的插件模块...

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

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

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

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

5 条评论

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

是的。没有占多数的编程语言。 如果一种语言得到积极维护并拥有一个开发人员社区,它就有资格成为你工具箱中的一个工具。 并且任何程序员都应该拥有不止一个工具,以获得更广泛的经验。 倾听积极的信息 - 因为消极的言论通常只是来自推销其他东西的人。

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

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

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

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

回复 作者:ikluft

感谢你的工作,但我想你可能没听说过 EtcherIO。它以 AppImage 格式分发,你只需下载并运行即可在 Linux 上使用。如果我没记错的话,它也适用于 Windows 和 Mac。

是的,我知道 - 那就是我提到的 GUI。当 PiFlash 刚开始时,它不适用于 Linux。 PiFlash 拥有自己的利基市场,通过插件实现 GUI 工具无法完成的自动化任务。 选择适合你的工具。 但不要忽视其他人追求的利基市场。

回复 作者 wb666greene (未验证)

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.