大多数人在设置 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 上。 也请在那里提交问题报告和代码/文档贡献。
5 条评论