我写了一个脚本来配置图像并将其转换到sd卡,以便在Raspberry Pi上使用。
在这个脚本的第418行,你会发现以下代码:
if["$encrypt_system"=="y"]然后#@seehttps://gist.github.com/gea0/4fc2be0cb7a74d0e7cc4322aed710d38rescue_suffix=".$(日期+%s).recue"search_hooks="hooks=(基本udev自动检测modconf块文件系统键盘fsck)"replace_hooks="hooks=(基本udev自动检测modconf块睡眠netconf dropbear加密ssh文件系统键盘fsck)"mkinitcpio_path="/etc/mkinitcpio.conf"mkinitcpio_rescue_path="$mkinitcpio _path$rescue_suffix"search_modules="模块=()"replace_modules="模块=(g_cdc usb_f_acm usb_f_ecm smsc95xx g_ether)"root_mapper_path="/dev/mapper/root"fstab_path="/mnt/etc/fstab"fstab_rescue_path="$fstab_path$rescue_suffix"crypttab_path="/mnt/etc/crypttab"cryptttab_rescue_path="$crypttab_path$rescue_suffix"boot_txt_path="/boot/boot.txt"boot_txt_rescue_path="$boot_txt_path$rescue_suffix"boot_txt_delete_line=$(echo"part uuid \${devtype}\${devnum}:2 uuid"|sed-e's/[]\/$*.^[]/\&&g')boot_txt_setenv_origin=$boot_txt_setenv_replace=$info"设置加密…"&&问题"键入加密密码:"&&read-r luks_password问题"重复加密密码:"&&read-r luks_password_repeakif["$luks_password"!="$lucks_password_repeak"]然后错误"密码不匹配。"fi(echo"pacman--noconfirm-S--needed$(get_packages"server/loks")&&"echo"cp-v/home/$target_username/.ssh/authorized_keys/etc/dropbear/root_key&&"echo"cp-v$mkinitcpio_path$mkinitcpio_rescue_path&&"echo"sed-i的/$search_modules/$replace_modules/g'$mkinitcpio_path&&"echo"sed-i的/$search_hooks/$replace_hooks/g'$mkinitcpio_path&&"echo"echo\"$mkinitcpio_path的内容:\$(cat\"$mkinitcpio_path")\"&&"#关于mkinitcpio警告,请参阅https://gist.github.com/imrvelj/c65cd5ca7f5505a65e59204f5a3f7a6decho"mkinitcpio-P&&"echo"echo'$luks_password'| sudo cryptssetup-v luksFormat-c aes-xts-platin64-s 512-h sha512--使用随机-i 1000$encrypted_partition_path&&"echo"echo'$luks_password'|sudo cryptsetup-v luksOpen$encrypted_partition_path root&&"echo"mkfs.ext4$root_mapper_path&&"echo"装载$root_mapper_path/mnt&&"echo"rsync--info=progress2-axHAX//mnt/&&"echo"cp-v$fstab_path$fstab_rescue_path&&"echo"echo$root_mapper_path'/ext4默认值,noatime 0 1'>>$fstab_path&&"echo"echo\"$fstab_path的内容:\$(cat\"$fstab/path\")\"&&"echo"cp-v$crypttab_path$crypttab_rescue_path&&"echo"echo'root'$encrypted_partition_path'none-luks'>>$crypttab_path&&"echo"echo\"$crypttab_path的内容:\$(cat\"$crypttab_path")\"&&"#boot.txt仅适用于树莓派3@todo需要为arch raspberry派4实现echo"cp-v$boot_txt_path$boot_text_rescue_path&&"echo"sed-i的/$boot_txt_delete_line//g'$boot_text_path&&"echo"sed-i的/$boot_txt_setenv_origina/$boot_txt_setenv_replace/g'$boot_text_path&&"echo"echo\"$boot_txt_path的内容:\$(cat\"$boot_text_path")\"&&"echo"cd/boot/&&./mkscr&&"echo"umount$root_mapper_path&&"echo"sudo cryptsetup-v luksClose root&&"echo"exit||echo'chroot环境中出错!'echo'试图关闭解密的根。';sudo cryptsetup-v luksClose root")|chroot"$root_mount_path"/bin/bash||错误fi
这会生成以下输出:
[INF]:设置加密。。。[问题]:键入加密密码:测验[问题]:重复加密密码:测验警告:rsync-3.2.3-1是最新的--正在跳过警告:autoconf-2.69-7是最新的--正在跳过警告:automake-1.16.2-3是最新的--正在跳过警告:binutils-2.335-1是最新的--正在跳过警告:bison-3.6.4-1是最新的--正在跳过警告:fakroot-1.24-2是最新的--正在跳过警告:文件-5.39-1是最新的--正在跳过警告:findutils-4.7.0-2是最新的--正在跳过警告:flex-2.6.4-3是最新的--正在跳过警告:gawk-5..1.0-1是最新的--正在跳过警告:gcc-10.2.0-1是最新的--正在跳过警告:gettext-0.21-1是最新的--正在跳过警告:grep-3.4-1是最新的--正在跳过警告:groff-1.22.4-3是最新的--跳过警告:gzip-10-3是最新的--正在跳过警告:libtool-2.4.6+44+gb9b44533-14是最新的--正在跳过警告:m4-1.4.18-3是最新的--正在跳过警告:make-4.3-3是最新的--正在跳过警告:pacman-5..2.2-1是最新的--正在跳过警告:补丁-2.7.6-8是最新的--正在跳过警告:pkgconf-1.7.3-1是最新的--正在跳过警告:sed-4.8-1是最新的--正在跳过警告:sudo-19.3.p1-1是最新的--正在跳过警告:texinfo-6.7-3是最新的--正在跳过警告:哪个-2.21-5是最新的--跳过警告:uboot-tools-2020.04-1是最新的--正在跳过警告:dropbear--2020.80-1是最新的--正在跳过警告:mkinitcpio-utils-0.0.3-5是最新的--正在跳过警告:mkinitcpio-netconf-0.0.5-2是最新的--正在跳过警告:mkinitcpio-dropbear-0.03-6是最新的--正在跳过没有什么可做的'/home/alarm/.ssh/authorized_keys'->'/etc/dropbear/root_key''/etc/mkinitcpio.conf'->'/etc/mknitcpio.coff1601472644.rescue'/etc/mkinitcpio.conf:#vim:set ft=sh的内容#模块#在加载任何引导挂钩之前加载以下模块#跑步。高级用户可能希望指定所有系统模块#在这个数组中。例如:#模块=(piix ide_disk reiserfs)模块=(g_cdc usb_f_acm usb_f_ecm smsc95xx g_ether)#二进制文件#此设置包括给定用户可能使用的任何其他二进制文件#希望进入CPIO图像。这是最后一次运行,因此它可能用于#覆盖给定钩子包含的实际二进制文件#BINARIES是依赖解析的,因此您可以安全地忽略库二进制文件=()#文件#此设置类似于上面的BINARIES,但是添加了文件#照原样,不以任何方式解析。这对配置文件很有用。FILES=()#挂钩#这是该文件中最重要的设置。挂钩控制#添加到映像中的模块和脚本,以及启动时会发生什么。#订单很重要,建议您不要更改#添加HOOKS的顺序。为运行"mkinitcpio-H"#在特定的钩子上提供帮助。#除非你确切地知道自己在做什么,否则"基本"是必需的。#"udev"是必需的,以便自动加载模块#除非您在modules中指定了fs模块,否则"文件系统"是必需的#示例:##此设置指定上面modules(模块)设置中的所有模块。##不需要raid、lvm2或加密根。#挂钩=(底座)###此设置将自动检测系统的所有模块,并且应该##作为一个正常的默认#HOOKS=(基本udev自动检测块文件系统)###此设置将生成支持大多数系统的"完整"图像。##不进行自动检测。#HOOKS=(基本udev块文件系统)###此安装程序使用加密的根FS组装pata-mdadm阵列。##注意:有关raid设备的更多信息,请参阅"mkinitcpio-H mdadm"。#HOOKS=(基本udev块mdadm加密文件系统)###此设置在usb设备上加载一个lvm2卷组。#HOOKS=(基本udev块lvm2文件系统)###注意:如果在单独的分区上有/usr/,则必须包含#usr、fsck和shutdown挂钩。HOOKS=(基本udev自动检测modconf块睡眠netconf dropbear加密ssh文件系统键盘fsck)#压缩#使用此选项可以压缩initramfs映像。默认情况下,gzip压缩#使用。使用"cat"创建未压缩的图像。#压缩="gzip"#压缩="bzip2"#压缩="lzma"#压缩="xz"#压缩="lzop"#压缩="lz4"#压缩选项#压缩机的附加选项#压缩选项=()===>根据预设构建图像:/etc/mkinitcpio.d/linux-arch64.preset:'default'->-k 5.8.9-2-ARCH-c/etc/mkinitcpio.conf-g/boot/initramfs-linux.img===>开始构建:5.8.9-2-ARCH->正在运行构建挂钩:[base]->正在运行构建挂钩:[udev]->正在运行生成挂钩:[autodetect]->正在运行构建挂钩:[modconf]->正在运行构建挂钩:[块]->正在运行构建挂钩:[sleep]->正在运行构建挂钩:[netconf]->正在运行构建挂钩:[dropbear]正在为dropbear生成dss主机密钥。。。未知密钥类型"dss"用法:/usr/sbin/dropbearkey-t-f[-s bits]-t type要生成的密钥的类型。其中之一:rsaecdsaed25519-f filename使用文件名作为密钥。~/.ssh/id_dropbear建议用于客户端密钥。-s位以位为单位的密钥大小,应为8的倍数(可选)ECDSA的尺寸为256 384 521Ed25519的固定大小为256位-y只需打印公钥和指纹中的私钥。dropbear_rsa_host_key:sha1!!a1:7b:17:e0:43:2c:d2:8e:d3:17:21:15:fb:45:7f:7e:96:57dropbear_cdsa_host_key:sha1!!14:7e:96:5c:1d:8e:60:bd:fb:70:21:93:d5:c7:1e:71:85:49:02:ef->正在运行构建挂钩:[encryptssh]->正在运行构建挂钩:[文件系统]->正在运行构建挂钩:[keyboard]->正在运行构建挂钩:[fsck]===>生成模块依赖项===>创建gzip压缩的initcpio映像:/boot/initramfs-linux.imgbsdtar:无法设置默认区域设置bsdtar:无法设置默认区域设置===>图像生成成功===>从预设构建映像:/etc/mkinitcpio.d/linux-arch64.preset:"回退"->-k 5.8.9-2-ARCH-c/etc/mkinitcpio.conf-g/boot/initramfs-linux-fallback.img-S自动检测===>开始构建:5.8.9-2-ARCH->正在运行构建挂钩:[base]->正在运行构建挂钩:[udev]->正在运行构建挂钩:[modconf]->正在运行构建挂钩:[块]===>警告:模块wd719x可能缺少固件->正在运行构建挂钩:[sleep]->正在运行构建挂钩:[netconf]===警告:模块rsi_sdio可能缺少固件===警告:模块可能缺少固件:rsi_usb===>警告:模块可能缺少固件:atmel===警告:模块可能缺少固件:at76c50x_usb===>警告:模块rtl8723ae可能缺少固件===>警告:模块zd1201可能缺少固件===>警告:模块zd11211rw可能缺少固件===>警告:模块可能缺少固件:棱镜54===>警告:模块可能缺少固件:p54pci===>警告:模块可能缺少固件:p54usb===>警告:模块orinco_usb可能缺少固件===>警告:模块可能缺少固件:wcn36xx===>警告:模块b43legacy可能缺少固件===>警告:模块b43可能缺少固件===>警告:模块可能缺少固件:ipw2100===>警告:模块可能缺少固件:ipw2200===>警告:模块可能缺少固件:mt7603e->正在运行构建挂钩:[dropbear]正在为dropbear生成dss主机密钥。。。未知密钥类型"dss"用法:/usr/sbin/dropbearkey-t-f[-s bits]-t type要生成的密钥的类型。其中之一:rsaecdsaed25519-f filename使用文件名作为密钥。~/.ssh/id_dropbear建议用于客户端密钥。-s位以位为单位的密钥大小,应为8的倍数(可选)ECDSA的尺寸为256 384 521Ed25519的固定大小为256位-y只需打印公钥和指纹中的私钥。dropbear_rsa_host_key:sha1!!a1:7b:17:e0:43:2c:d2:8e:d3:17:21:15:fb:45:7f:7e:96:57dropbear_cdsa_host_key:sha1!!14:7e:96:5c:1d:8e:60:bd:fb:70:21:93:d5:c7:1e:71:85:49:02:ef->正在运行构建挂钩:[encryptssh]->正在运行构建挂钩:[文件系统]->正在运行构建挂钩:[keyboard]->正在运行构建挂钩:[fsck]===>生成模块依赖项===>创建gzip压缩的initcpio映像:/boot/initramfs-linux-fallback.imgbsdtar:无法设置默认区域设置bsdtar:无法设置默认区域设置===>图像生成成功未知主机QEMU_IFLA类型:54未知主机QEMU_IFLA类型:54警告:设备/dev/mmcblk1p3已包含"crypto_LUKS"超级块签名。设备/dev/mmcblk1p3上现有的"crypto_LUKS"超级块签名(偏移量:0字节)将被擦除。设备/dev/mmcblk1p3上现有的"crypto_LUKS"超级块签名(偏移量:16384字节)将被擦除。已创建密钥槽0。命令成功。未知主机QEMU_IFLA类型:54未知主机QEMU_IFLA类型:54钥匙槽0已解锁。命令成功。mke2fs 1.45.6(2020年3月20日)创建具有14724352个4k块和3686400个索引节点的文件系统文件系统UUID:da0071a7-ef0d-4051-9461-145add2be871存储在块上的超级块备份:32768、98304、163840、229376、294912、819200、884736、1605632、2654208,4096000、7962624、11239424分配组表:已完成正在写入索引节点表:已完成正在创建日志(65536个块):已完成编写超级块和文件系统记帐信息:已完成1924493579 99%5.42MB/s 0:05:38(xfr#32483,至chk=0/43361)'/mnt/etc/fstab'->'/mnt/etc/fstab.1601472644.rescue'/mnt/etc/fstab的内容:#关于文件系统的静态信息。#有关详细信息,请参见fstab(5)。#/dev/mmcblk0p1/boot vfat默认值0 0//dev/mapper/root/ext4默认值,noatime 0 1'/mnt/etc/crypttab'->'/mnt/etc/cryttab.1601472644.rescue'/mnt/etc/crypttab的内容:#加密块设备的配置。#有关详细信息,请参阅crypttab(5)。#注意:不要在此处列出您的根(/)分区,必须进行设置#事先通过initramfs(/etc/mkinitcpio.conf)。##家庭UUID=b8ad5c18-f445-495d-9095-c9ec4f9d2f37/etc/mypassword1#数据1/dev/sda3/etc/mypassword2#data2/dev/sda5/etc/cryptfs.key#swap/dev/sdx4/dev/urandom swap,cipher=aes cbc ssiv:sha256,size=256#vol/dev/sdb7无root/dev/mmcblk1p3无luks'/boot/boot.txt'->'/boot/boot.txt.160147664.rescue'/boot/boot.txt的内容:#修改后,运行/mkscr#将根分区设置为启动设备的第二个分区setenv bootargs console=ttyS115200 console=tti0 ip=:::主服务器:eth0:dhcp cryptdevice=/dev/mmcblk1p3:root root=/dev/mapper/root rw-rootwait smsc95xx.macaddr="${usbethadr}"如果加载${devtype}${devnum}:${bootpart}${kernel_addr_r}/Image;然后如果加载${devtype}${devnum}:${bootpart}${fdt_addr_r}/dtbs/${fdtfile};然后如果加载${devtype}${devnum}:${bootpart}${ramdisk_addr_r}/initramfs-linux.img;然后booti${kernel_addr_r}${ramdisk_addr_}:${filesize}${fdt_addr_r};其他的booti${kernel_addr_r}-${fdt_addr_r};fi;fi;fi映像名称:U-Boot引导脚本创建时间:2020年9月30日星期三13:43:18图像类型:ARM Linux脚本(未压缩)数据大小:668字节=0.65 KiB=0.00 MiB加载地址:00000000入口点:00000000内容:图像0:660字节=0.64 KiB=0.00 MiB未知主机QEMU_IFLA类型:54未知主机QEMU_IFLA类型:54命令成功
当我启动树莓pi并尝试连接到它时,我在终端上得到以下输出:
sshroot@192.168.178.61cat:无法打开"/.cryptdev":没有这样的文件或目录命令需要设备和映射的名称作为参数。已关闭与192.168.178.61的连接
如果有人能告诉我bug在哪里以及我如何解决这个问题,我会很高兴!:)
问题解决了。错误在于在编译和生产系统中使用了不同的设备名称。看见https://bbs.archlinux.de/viewtopic.php?pid=377823