预安装带有无线 PEAP 身份验证的 Ubuntu 18.04

预安装带有无线 PEAP 身份验证的 Ubuntu 18.04

我正在尝试配置 U​​buntu 18.04.2 的预置无人值守安装。我们的系统使用 Intel iwlwifi 驱动程序,设备名称为 wlp2s0。我们的无线使用 WPA 和 WPA2 Enterprise 安全性,采用 PEAP 身份验证,无证书。我输入用户名和密码来验证无线路由器。

我需要预先设定的措辞来允许这样做。如果没有网络连接,我的安装会在尝试访问镜像进行下载时失败。有人可以帮忙吗?

Wifi 配置

答案1

我希望您熟悉其中的许多步骤,因为您已经预先设定了。我仍在努力使这成为一个全面的答案。

请注意,该答案的主要部分将涉及 WPA2 网络,而不是关注 PEAP。


preseed/netcfg不起作用

以下安装程序组件的预置密钥将不会在 Ubiquity 中使用,通常是因为它们不符合 Ubiquity 的操作模式:

网络配置
LVM 和 RAID 分区
基础安装程序
pkgsel/tasksel
完成安装

来源:UbiquityAutomation(最后由 tsimonq2 于 2019-07-12 07:07:21 编辑)

从日志中/var/log/installer/debug我可以告诉你,这似乎netcfg/get_hostname仍在考虑之中。不过,这意味着我们不能像在旧版本中那样在预置文件中指定连接,例如

# wlp3s0b1 would be the device-specific wifi interface
d-i netcfg/choose_interface select wlp3s0b1
d-i netcfg/wireless_show_essids select manual
d-i netcfg/wireless_essid string myWifiName
d-i netcfg/wireless_essid_again string myWifiName
d-i netcfg/wireless_security_type select wpa

preseed/early_command不起作用

preseed/early_command从 casper 执行。我尝试从那里连接到 wifi,但命令似乎还不起作用。
当然preseed/late_command对我们来说也不起作用,因为它发生在镜像设置之后。但是如果你在安装后只需要互联网来执行其他一些后期命令,那么这种方式会比我将要解释的更容易。

修改 Ubiquity 安装程序以提供第三种选择

笔记
Evan 需要添加一个“比早期命令稍晚”的预置变量,以便测试脚本可以在桌面可用时运行。UbiquityAutomation
(最后由 tsimonq2 于 2019-07-12 07:07:21 编辑)

好吧,Evan 不在,所以我们自己做吧!

安装原始 Iso 并预置

# mount iso readonly because it is readonly anyhow
sudo mount -o loop -t iso9660 ~/ubuntu.iso /mnt/myiso -o ro
# copy data to a writeable directory
mkdir ~/Downloads/iso.new
cp -ra /mnt/myiso/* ~/Downloads/iso.new

iso.new/preseeding应用您通常的预置。我通过添加我在 中的启动参数中引用的文件来实现这一点iso.new/isolinux/isolinux.cfg

这是我的isolinux.cfg。我没有修改它的开头,只是附加了从 开始的部分label install。您也可以在menu.cfg或中执行此txt.cfg操作(这会被传递包含)。在这些文件中,您还应该找到可以用作模型的类似条目。

# file ~/Downloads/iso.new/isolinux/isolinux.cfg
path
include menu.cfg
default install
prompt 1
timeout 50
ui gfxboot bootlogo

label install
  menu label ^LucidBrot 18.04. Hello World
  kernel /casper/vmlinuz
  append auto=true file=/cdrom/preseed/my.seed boot=casper debug-ubiquity automatic-ubiquity initrd=/casper/initrd DEBCONF_DEBUG=5 debian-installer/locale=en_US.UTF-8 keyboard-configuration/layoutcode=ch languagechooser/language-name=English countrychooser/shortlist=CH localechooser/supported-locales=en_US.UTF-8

请注意,即使我将从 USB 启动,路径前缀仍为/cdrom
另请注意,您不需要所有这些选项。您可以安全地删除任何语言或键盘选项。两个调试选项是可选的,但有助于记录日志。其余的都很重要,包括automatic-ubiquity

当然,应该file=指向你的预置文件。

文件系统术语

有多个文件系统。

  1. 运行所有这些命令的文件系统
  2. 我们挂载了 iso/mnt/myiso并将 的内容复制到~/Downloads/iso.new。它包含一些引导加载程序的信息。
  3. ~/Downloads/iso.new/casper/initrd文件包含初始 RAM 文件系统,当您在 grub 中选择“安装 Ubuntu”时,该文件将被启动。
  4. 包含压缩文件系统的文件~/Downloads/iso.new/casper/filesystem.squashfs。在 initramfs 中完成一些初始设置后,将进入此文件系统。设置完成后,可以按CtrlAltF2(或F3) 并输入ubuntu用户名来登录 tty。squashfs 包含 ubiquity 的脚本 - 安装程序。
打开 Squashfs
# isohybrid and unmksquashfs
sudo apt-get install syslinux-utils squashfs-tools
# unpack the squashfs to a new dir
mkdir ~/Downloads/squashy && cd ~/Downloads/squashy
sudo unsquashfs ~/Downloads/iso.new/casper/filesystem.squashfs
# now we have a new directory "squashfs-root"

修改普遍性

根据脚本的数量,我们有几个选项,~/Downloads/squashy/squashfs-root/但我会选择插件管理器,因为它恰好执行得相当早:在 debian-installer 获取语言环境之前,但肯定在 initramfs 部分之后。可以通过添加打印语句和查看来验证/var/log/installer/debug

因此打开~/Downloads/squashy/squashfs-root/usr/bin/lib/ubiquity/ubiquity/plugin_manager.py(我想以 root 身份打开,但不确定是否有必要)并import subprocess在文件开头的所有其他导入之后添加导入语句。然后导航到def load_plugins():应该定义函数的第 42 行。
这是我在开头插入的内容,尽管打印语句仅用于日志,可以跳过。

def load_plugins():
    print("flappy plugin_manager: load_plugins()")
    mywifires = subprocess.run("/cdrom/preseed/inb4.sh", stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    print("flappy stdout wifi: {}".format(mywifires))
    print("flappy usr/lib/bin/ubiquity/ubiquity/plugin_manager: post-wifi", file=sys.stderr)

    modules = []

设置inb4.sh

现在我们可以在安装开始时通过在 中输入来运行任意 bash 命令~/Downloads/iso.new/preseed/inb4.sh
由于我只想连接到普通的 WPA2 网络,所以我的界面如下(请确保您使用自己的界面而不是ip link我的wlp3s0b1):

# file iso.new/preseed/inb4.sh
#!/bin/sh
set -ux
sudo ip link set dev wlp3s0b1 up
sudo nmcli d wifi connect myWiFiHotspot password MyPassw0rd

在 PEAP 网络上实现该功能应该不太难。请参阅这个答案这个要点或者这篇博文它们都依赖于与我相同的工具(nmcli,该工具已经安装):

nmcli> set 802-1x.eap peap  
nmcli> set 802-1x.phase2-auth mschapv2  
nmcli> set 802-1x.identity myusername
nmcli> set 802-1x.password mypassword  
nmcli> set wifi-sec.key-mgmt wpa-eap  
nmcli> save 
nmcli> activate 

 

nmcli connection add \
 type wifi con-name "MySSID" ifname wlp3s0 ssid "MySSID" -- \
 wifi-sec.key-mgmt wpa-eap 802-1x.eap tls 802-1x.identity "USERNAME" \
 802-1x.ca-cert ~/ca.pem 802-1x.client-cert ~/cert.pem \
 802-1x.private-key-password "..." 802-1x.private-key ~/key.pem

使inb4.sh可执行文件

只是为了安全。

sudo chmod a+rx ~/Downloads/iso.new/preseed/inb4.sh

包装壁球

filesystem.squashfs确保您当前目录中没有名为的文件squashy,因为这将导致下一个命令创建/dev_1而不是/dev诸如此类的东西......

cd ~/Downloads/squashy
sudo rm filesystem.squashfs
sudo mksquashfs squashfs-root/ filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e sudo cp filesystem.squashfs ../iso.new/casper/filesystem.squashfs

在我的笔记本电脑上,此命令大约需要 10 分钟 - 请耐心等待。
我不确定是否需要所有这些标志。我从这里。只需确保您没有/boot通过执行意外排除即可-e bootUbuntu 维基意味着它可以使用更少的标志来工作。

压缩 chroot
如果这个定制的 Remix 可能要安装在某些系统上,那么/boot将需要该文件夹。要允许定制 CD 成为安装程序 CD,请使用以下命令压缩整个 chroot 文件夹:

sudo mksquashfs chroot image/casper/filesystem.squashfs
然后写入 filesystem.size file安装程序所需的:

printf $(sudo du -sx --block-size=1 chroot | cut -f1) > image/casper/filesystem.size
但是,如果不打算安装它,而“仅”将其用作 LiveCD,则/boot可以排除该文件夹以节省 iso 映像上的空间。实时系统从 chroot 外部启动,因此/boot不使用该文件夹。

sudo mksquashfs chroot image/casper/filesystem.squashfs -e boot 值得注意的是,如果您在早期系统上构建 Karmic LiveCd,您将需要squashfs-tools来自 Karmic 的软件包,否则 LiveCD 将无法启动。

因为我们没有修改 squashfs(又名 chroot)中的任何包,所以我很确定我们不需要执行下图中的清单步骤,但我想至少执行上面引文中的 printf 步骤应该不会有什么坏处。如果你出于某种原因做过修改包,这超出了这个答案的范围,但我可以推荐这个帖子并且这个考虑了 gpg

修改清单说明

重新构建 iso

# copy the modified squashfs back to the iso filesystem data
sudo cp ~/Downloads/squashy/filesystem.squashfs ~/Downloads/iso.new/casper/filesystem.squashfs
# build iso. Again, the flags are beyond be, but they work
sudo mkisofs -J -l -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4 -c isolinux/isolinux.cat -o ~/Downloads/outputubuntu.iso -joliet-long iso.new
# make the iso bootable from an usb stick (it's only bootable from cdrom currently)
sudo isohybrid ~/Downloads/outputubuntu.iso

将其闪存到棒子上!

我犯了一个错误,在未插入记忆棒时使用ddon /dev/sda,这让我有点痛苦,直到我意识到我必须/dev/sda在拔出记忆棒时删除它才能使其再次运行。为了防止这种情况发生在您身上,我们首先确保记忆棒已插入并卸载。
sudo unmount /dev/sda1插入记忆棒后应该可以工作,因为 ubuntu 会自动挂载它。如果没有,请查看lsblk的输出并卸载已挂载的分区。请注意,您的记忆棒可能是另一个设备,如果您犯了错误/dev/sda,可能会非常严重。dd

# plug usb stick in. Unmount it and flash the iso
cd ~/Downloads
sudo umount /dev/sda1 && sudo dd bs=4M if=ubuntuoutput.iso of=/dev/sda conv=fdatasync status=progress

标志conv=fdatasync表示dd只有当所有数据都实际写入后才会完成。
此命令将需要几分钟,但比 squashfs 的打包速度更快。

启动它!

将棒插入要安装 ubuntu 的设备并启动它。Esc如果您想验证您的预置是否正在运行,请按下 grub 屏幕。它应该显示您指定的标签。

在 ubiquity 安装期间,wifi 应该会自动连接。如果没有,请检查CtrlAltF2tty 以查看日志/var/log/casper.log/var/log/installer/debug由于我们将调试级别设置得相当高,如果您让它打印某些内容,您应该会看到一些东西 - 或者只需修改命令以将其输出写入文件。

相关内容