当前位置: 首页 > 科技观察

修改磁盘映像创建基于树莓派的家庭实验室

时间:2023-03-14 08:50:29 科技观察

使用树莓派或其他单板计算机创建“家庭私有云”。在学习新概念和试验新技术的同时,建造家庭实验室是一种娱乐自己的有趣方式。由于以RaspberryPi为首的单板计算机(SBC)的流行,在舒适的家中构建多计算机实验室变得轻而易举。与尝试在主流云服务提供商中建立相同的配置相比,这也是创建“家庭私有云”以体验云原生技术的绝佳方式。本文介绍如何修改RaspberryPi或其他单板计算机的磁盘映像、预配置主机的SSH以及禁用在首次启动时强制选择交互式配置的服务。这是让您的设备“启动并运行”的好方法,类似于云实例。之后,您可以使用自动化过程通过SSH连接以进行更专业和深入的配置。此外,在您的实验室中添加更多RaspberryPi时,可以修改磁盘映像,这样您就可以将映像写入SD卡,将其放入RaspberryPi即可!多台树莓派电脑,一台交换机,一个充电宝解压挂载镜像本项目需要修改一个服务器磁盘镜像。在测试期间,我使用的是FedoraServer31ARM。下载磁盘映像并验证其校验和后,您需要将其解压缩并将其安装在主机文件系统的某个位置,以便您可以根据需要对其进行修改。您可以使用xz命令通过--decompress选项解压缩FedoraServer映像:xz--decompressFedora-Server-armhfp-X-y.z-sda.raw.xz这会留下一个解压缩的原始磁盘映像(它会自动替换.xz档案)。这个原始磁盘映像正是它听起来的样子:一个包含格式化后挂载磁盘上所有数据的文件。这包含分区信息、引导分区、根分区和其他分区。您需要在其中挂载您计划修改的分区,但为此您需要知道分区的起始位置和磁盘映像中的扇区大小,以便您可以为文件挂载正确的扇区。幸运的是,您可以像在实际磁盘上一样轻松地在磁盘映像上使用fdisk命令。使用--list或-l参数查看分区列表及其信息:#使用fdisk列出原始镜像文件的分区:$fdisk-lFedora-Server-armhfp-31-1.9-sda.rawDiskFedora-Server-armhfp-X-y.z-sda.raw:3.2GiB,3242196992字节,6332416扇区单位:扇区1*512=512字节扇区大小(逻辑/物理):512字节/512字节I/O大小(最小/最佳):512bytes/512bytesDisklabeltype:dosDiskidentifier:0xdaad9f57DeviceBootStartEndSectorsSizeIdTypeFedora-Server-armhfp-X-y.z-sda.raw1819216383915564876McW95FFedora-Server-armhfp-X-y.z-sda.z-sda。999424488M83LinuxFedora-Server-armhfp-X-y.z-sda.raw31163264604774348844802.3G83Linux上面的输出中提供了您需要的所有信息。第3行指示扇区大小(逻辑和物理):512字节/512字节。设备列表显示原始磁盘映像中的分区。第一个Fedora-Server-armhfp-X-y.z-sda.raw1无疑是引导加载程序分区,因为它是第一个,很小(只有76MB)并且被识别为c型,即W95FAT32(LBA),这是一个从SD卡启动的FAT32分区。第二个分区也不是很大,只有488MB。这个分区是一个Linuxnativetype分区(Id83),很可能是一个包含kernel和initramfs的Linuxboot分区。第三个分区可能是您所需要的:它的大小为2.3GB,所以它应该包含发行版的主要部分,并且它是Linux原生分区类型,这是可以预料的。该分区应包含您需要修改的分区和数据。第三个分区从扇区1163264开始(在fdisk输出中显示为Start列),因此您的安装偏移量是595591168,计算方法是将扇区大小(512)乘以起始扇区(1163264)(即512*1163264)。这意味着您需要将文件挂载到偏移量595591168处,以便将其挂载到正确的位置。有了这些信息,您现在可以在主目录中挂载第三个分区:$mkdir~/mnt$sudomount-oloop,offset=595591168Fedora-Server-armhfp-X-y.z-sda。raw~/mnt$ls~/mnt直接在磁盘映像中工作在磁盘映像被解压并安装到主机上的某个位置后,您可以修改映像以满足您的需要。在我看来,更改映像的最简单方法是使用chroot将会话的工作根目录更改为已安装映像的工作根目录。不过,这有点棘手。更改根目录后,您的会话将使用新根目录中的二进制文件。除非您在ARM系统上执行所有这些操作,否则解压缩磁盘映像的体系结构将与您使用的主机系统不同。即使在chroot环境中,主机系统也不能使用不同架构的二进制文件。至少,不是原生的。幸运的是,这里有一个解决方案:qemu-user-static。来自DebianWiki:“[qemu-user-static]提供静态构建的用户模式仿真二进制文件。在这种模式下,QEMU可以在一个CPU上启动一个为另一个CPU编译的Linux进程......如果安装了binfmt-support包,qemu-user-static包注册了所提供的模拟器可以处理的二进制文件格式,以便它可以直接运行其他体系结构的二进制文件。”这正是您在chroot环境中需要的在非本地模式中工作所需要的。如果主机系统是Fedora,使用DNF安装qemu-user-static包,并重启systemd-binfmt.service:#使用DNF启用非本地archchroot环境,添加新的二进制文件格式信息#OutputmirroredStreamlining$dnfinstallqemu-user-static$systemctlrestartsystemd-binfmt.service使用此方法,您可以将根目录更改为已安装的磁盘映像,运行uname命令以验证一切正常:sudochroot~/mnt//usr/bin/uname-a-rLinuxmarvin5.5.16-200.fc31.x86_64#1SMPWedApr816:43:33UTC2020armv7larmv7larmv7lGNU/Linux在chroot环境中运行uname将在输出Showarmv7l,原始磁盘映像的体系结构,而不是主机的体系结构。一切如预期,可以继续修改镜像。修改磁盘映像现在您可以直接切换到这个基于ARM的磁盘映像并在此环境中工作,您可以修改映像本身。您需要设置映像,使其能够启动并立即访问,而无需在RaspberryPi上进行任何额外设置。为此,您需要安装并启用sshd(OpenSSH守护程序)并添加用于SSH访问的授权密码。为了让它表现得更像一个云环境并实现在家里拥有私有云的梦想,添加一个本地用户,赋予该用户sudo权限,并且(对于云重度用户)允许该用户在没有密码的情况下执行sudo。因此,您要做的是:安装并启用SSHD(SSHD已在FedoraARM映像中安装并启用,但您可能需要为您的发行版手动执行此操作)设置本地用户以允许本地用户使用sudo(否需要密码,可选)添加授权密钥允许root使用授权密码镜像SSH(可选)我使用GitHub功能,它允许您上传您的公共SSH密钥并且可以在https://github.com/.keys访问.我发现这是一种分发公钥的简便方法,但由于偏执,我总是检查下载的密钥是否与我期望的相符。如果您不想使用此方法,您可以将您的公钥从您的主机复制到chroot环境中,或者您可以将公钥托管在您控制的Web服务器上以使用相同的工作流程。要开始修改磁盘映像,再次将root更改为已安装的磁盘映像,这次启动shell以便可以运行多个命令:#为简洁起见,省略了这些命令(如果有)的输出$sudochroot~/mnt/bin/bash#安装并启用openssh-server(已在Fedora上完成)$dnfinstall-yopenssh-server$systemctlenablesshd.service#允许root使用授权密码访问SSH$mkdir/root/.ssh#下载或另外添加授权密钥文件,你的公钥#将URL替换为你自己的公钥路径$curl-o/root/.ssh/authorized_keys$chmod700/root/.ssh$chmod600/root/.ssh/authorized_keys#添加本地用户并将其放入wheel组#将组和用户更改为您想要的任何用户add-gchris-Gwheel-m-u1000chris#下载并添加您的授权密钥#像上面一样更改主目录和URLmkdir/home/chris/.sshcurl-o/home/chris/.ssh/authorized_keyschmod700/home/chris/.sshchmod600/home/chris/.ssh/authorized_keyschown-Rchris.chris/home/chris/.ssh/#允许wheel组(使用你的本地用户)不需要密码就可以使用susoecho"%wheelALL=(ALL)NOPASSWD:ALL">>/etc/sudoers.d/91-wheel-nopasswd这就是树莓派或其他SBC在首次启动时需要做的设置SSH的全部工作。但是,每个发行版都有自己的特点。例如,Raspbian已经包含一个本地用户:pi,并且不使用wheel组。所以对于Raspbian最好使用现有的用户,或者删除pi用户并替换为其他用户。对于FedoraARM,该映像将提示您在首次启动时完成设置。这违背了您在上面所做的修改的目的,特别是因为它会在设置完成之前完全阻止启动。您的目标是让RaspberryPi像私有云基础架构的一部分一样运行,此工作流涉及在主机启动时通过SSH远程设置主机。禁用由initial-setup.service控制的初始设置:#disableinitial-setup.serviceunlinkformulti-userandgraphicaltargets/etc/systemd/system/multi-user.target.wants/initial-setup.serviceunlink/etc/systemd/system/graphical.target.wants/initial-setup.service当您处于chroot环境中时,您可以根据云原生工作流是通过SSH配置的。重新压缩并安装修改后的映像完成这些更改后,剩下的就是重新压缩磁盘映像并将其安装到RaspberryPi的SD卡中。确保退出chroot环境,然后卸载磁盘映像:$sudoumount~/mnt/就像您最初解压缩映像一样,您可以再次使用xz命令压缩映像。通过使用--keep选项,xz将保留原始图像而不是清理它。虽然这需要更多的磁盘空间,但保留未压缩的图像将允许您对正在处理的图像进行增量更改,而无需每次都解压缩它。这对于在测试和调整图像时节省时间非常有用。#将压缩后的磁盘镜像压缩成.xz文件,但保留原始磁盘镜像xz--compressFedora-Server-armhfp-31-1.9-sda.raw--keep压缩过程需要一些时间,所以利用这次站起来,伸展你的身体,让你的血液再次流动起来。压缩完成后,可以将修改后的新磁盘映像复制到SD卡上,以便与RaspberryPi一起使用。将图像放在SD卡上的标准dd方法也可以正常工作,但我喜欢使用Fedora的arm-image-installer,因为它在处理未经编辑的图像时提供了一些选项。它也适用于编辑后的图像,并且比dd命令更友好。确保检查SD卡在哪个磁盘驱动器上,并与--media参数一起使用:#使用arm-image-installer将修改后的磁盘镜像复制到SD卡上arm-image-installer--image=Fedora-Server-armhfp-X-y.z-sda.raw.xz--target=rpi3--media=/dev/sdc--norootpass--resizefs-y现在你有一个新的RaspberryPi或其他SBC,修改过的FedoraServerARM图像,准备启动并立即通过SSH连接到修改后的图像。此方法也可用于进行其他修改,如果您更喜欢其他发行版而不是Fedora,也可以使用其他发行版的原始磁盘映像。这是开始构建家庭实验室私有云的良好基础。在以后的文章中,我将指导您使用云技术和自动化设置家庭实验室。