大多数人在设置树莓派电脑时都会安装某种形式的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上。 另请在此处提交问题报告和代码/文档贡献。
5 条评论