使用树莓派或其他单板计算机创建“家庭私有云”。在学习新概念和试验新技术的同时,建造家庭实验室是一种娱乐自己的有趣方式。由于以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
