手头上的问题

手头上的问题

我正在使用以下命令构建 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.在你的情况下,最有可能的是armhfarm64

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 上以及操作方法页面以及有关的信息添加缺少的固件。可以找到无线固件这里是树莓派

如果您对此答案有任何疑问或疑问,请发表评论。我强烈建议您在尝试命令之前仔细阅读我提供的每个链接。我感谢您提供反馈来纠正任何误解并改进我的帖子。我可以根据需要更新我的答案。

祝你好运!

相关内容