我正在使用以下命令构建 Raspberry Pi 映像raspi3 图像规范项目。由于它不是传统安装的结果d-i
,因此它显然既不会询问根目录,也不会使用 WiFi 信息配置根目录以在启动时进行连接。
因此,我想知道如何准确d-i
存储 WiFi 详细信息并使其在第一次启动时自动连接。我想在我的 RPi 映像上执行相同的操作,这样我就不必连接到以太网或键盘和显示器来配置其 WiFi 连接。
我不是在问如何使用命令连接到 WiFi,我已经知道如何做到这一点。我所要问的是预配置是如何完成的
d-i
。根据 @kemotep 的解决方案,我不仅需要运行命令来连接 WiFi,还必须手动激活
dhcpd
或分配静态 IP 地址。我还知道如何使用/etc/network/interfaces
文件自动执行这些步骤,但这不是重点。我想知道的是
d-i
它是如何做到的,因此它符合常规的 Debian 安装,并且我的 WiFi 配置文件在更新等过程中不会被意外删除。
答案1
手头上的问题
您想知道如何设置debian-installer
以预配置您的 WiFi 设置。你提到使用这个构建为 Raspberry Pi 3 创建 Debian 映像。
他们使用debootstrap
而不是标准debian-installer
在 Raspberry Pi 上安装 Debian。我将提供有关如何使用这两个过程预配置 WiFi 的信息。
使用debian-installer
如果您想了解各个组件的debian-installer
工作原理,请阅读本手册。第 6.3.1.5 节介绍了网络配置。第3.3.4节帮助提供有关您需要提供什么来debian-installer
建立网络的信息。
然而,所有这一切都是一个手动过程,可以通过“预置”或提供debian-installer
预配置文件来实现自动化。
这里是Debian 维基页面关于如何编辑预置文件。我也包括另一个手册页帮助提供有关预置的更多信息。
这是 preseed.cfg 的示例供您查看。编辑它以包括添加无线固件的步骤(d-i hw-detect/load_firmware boolean true
这是此处的关键行)。
preseed.cfg
在添加用于加载固件的线路后,添加这些线路以预置无线 WPA2 网络。请在此处查看有关如何在期间加载固件的信息debian-installer
d-i netcfg/wireless_essid [string] // Name of wireless network
d-i netcfg/wireless_security_type [select] // Options are wep/open or wpa
d-i netcfg/wireless_wpa [string] // Password
这是一个相当全面的列表向您展示可能的netcfg
选择。preseed.cfg
如果我列出的内容不能满足您的需求,请根据需要添加更多内容。创建后,preseed.cfg
请使用以下步骤添加它。
要添加预置文件,您需要安装debian.iso
并提取内容以复制到您的preseed.cfg
. [arch] 指的是您的.iso
.在你的情况下,最有可能的是armhf
或arm64
。
udevil mount debian.iso
cp -rT /media/debian.iso/ isofiles/
chmod +w -R isofiles/install.[arch]/
gunzip isofiles/install.[arch]/initrd.gz
echo preseed.cfg | cpio -H newc -o -A -F isofiles/install.[arch]/initrd
gzip isofiles/install.386/initrd
chmod -w -R isofiles/install.[arch]/
以下是修复 md5sum.txt 的方法:
# cd isofiles
# md5sum `find -follow -type f` > md5sum.txt
# cd ..
以下是创建新的可启动 ISO 映像的方法:
genisoimage -r -J -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-o preseed-debian.iso isofiles
现在,您已创建可启动 ISO 映像,该映像将写入包含预配置的安装程序 USB 或磁盘。请务必阅读维基页面和手册仔细帮助解决任何问题。
使用debootstrap
安装 Debian 的另一种方法是使用debootstrap
.这是 Debian Wiki 的链接和另一个链接到联机帮助页。Debootstrap
可用于从现有 Unix 或 Linux 计算机创建 Debian 安装。
使用debootstrap
仅需要一个chroot
或其他磁盘/分区和网络连接即可从存储库下载软件包。然后,您可以chroot
进入新的 Debianrootfs
并根据需要对其进行配置,然后将其传播到您希望安装的任何设备。这与 Arch Linux 安装过程非常相似。
但是,如果您正在使用这个脚本来自 GitHub,并且您希望预先准备您的无线配置,那么您将需要编辑raspi3.yaml
和使用vmdb2
.
安装vmdb2
:(这假设您使用的是 Debian Stretch!)
apt install kpartx parted qemu-utils qemu-user-static python3-cliapp \
python3-jinja2 python3-yaml
请注意,
python3-cliapp
在 Stretch 中不可用,但由于它不带有任何依赖项,因此可以通过以下方式手动安装获取其 .deb 包并手动安装。
接下来下载图像的副本:
git clone --recursive https://github.com/Debian/raspi3-image-spec
cd raspi3-image-spec
现在编辑raspi3.yaml
以包含以下内容:
在第 68 行之后- apt: install
添加以下行:
- iw
现在,在第 90 行 ( - shell: |
) 之后,您可以将此代码添加到其自己的行中:
wpa_passphrase [WiFi SSID] [WiFI Password] > /etc/wpa_supplicant.conf
只要wpa_supplicant
在图像处理过程中正确安装,这一行就应该添加您的 WiFi 配置以允许您自动连接。您可能仍然需要在启动后运行这些命令,但它们也可能被添加到脚本中。
ip link set wlan0 down
ip link set wlan0 up
wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf -Dwext
dhclient wlan0
编辑后
raspi3.yaml
,您可以通过发出以下命令来生成图像。如果您使用的是系统范围vmdb2
:umask 022 sudo env -i LC_CTYPE=C.UTF-8 PATH="/usr/sbin:/sbin:$PATH" \ vmdb2 --output raspi3.img raspi3.yaml --log raspi3.log
或者,如果您从此存储库中的子模块使用它
umask 022 sudo env -i LC_CTYPE=C.UTF-8 PATH="/usr/sbin:/sbin:$PATH" \ ./vmdb2/vmdb2 --output raspi3.img raspi3.yaml --log raspi3.log
之后,您应该能够将新映像安装到 SD 卡上,并且它将遵循您在脚本中添加的额外步骤。您可以向该文件添加任何您想要的其他步骤。
这这个堆栈交换帖子的OP注意到用户 GAD3R 建议的第二种方法也可以通过命令行添加无线配置。
结论
如果您正在使用,debian-installer
则需要预先设置debian.iso
您想要的配置。
如果您正在使用,debootstrap
则必须包含您希望在安装过程中或chroot
安装后执行的任何其他步骤。
我将包括Debian 维基页面在 WiFi 上以及操作方法页面以及有关的信息添加缺少的固件。可以找到无线固件这里是树莓派
如果您对此答案有任何疑问或疑问,请发表评论。我强烈建议您在尝试命令之前仔细阅读我提供的每个链接。我感谢您提供反馈来纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。
祝你好运!