首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置多个Raspberry Pi不同网络配置

设置多个Raspberry Pi不同网络配置
EN

DevOps用户
提问于 2022-05-05 08:52:46
回答 1查看 223关注 0票数 1

对于多个项目,我们将为每个项目设置2-6个RPi。每个项目运行在不同的网络上,对于其中的一些网络,我们可以使用DHCP,对于其他RPi必须使用静态IP地址进行连接。

而且,每个RPi都需要一个顺序不同的主机名。例如,对于一个具有三个RPi的项目,主机名需要是PROCCESS1、PROCESS2、PROCESS3。

所有的RPi都运行完全相同的软件,每个RPi都有一个连接的监视器。

目前的工作流程是:

  1. 为RPi上的每个microSD刻录已准备好的操作系统映像
  2. 使用RPi启动microSD并手动设置主机名
  3. 如果需要,将IP地址设置为静态地址。
  4. 打开覆盖文件系统,使系统成为只读系统。
  5. 重复RPi所需的数量

这是一项繁琐的任务,在那里会出现错误,需要花费大量的时间。步骤1不能被自动化,因为我们没有硬件(尽管EtcherPro最终会节省很多时间)。自动化的步骤3和4将是伟大的,如果这可以实现。我读过一些关于Ansible的文章,也遇到过厨师和木偶,但我还没有深入其中的任何一个。

使用Ansible和剧本是一个好的方向,进一步发展吗?是否可以使用此工具实现安装自动化?是否有更好/更容易的解决办法,还是根本不可能?如果有人有一些提示,或可以指导正确的方向,那将是很好的。

EN

回答 1

DevOps用户

回答已采纳

发布于 2022-05-06 02:54:04

即使没有Ansible或其他配置管理工具,这些步骤也没有理由是手动的:您可以使用shell脚本驱动所有东西,从而获得自动化的所有好处:不再有错误、一致的部署和更快的配置。使用Ansible可以帮助使流程更加模块化和结构化,但它根本不允许您做任何新的事情。

忽略了使用什么工具来驱动配置的问题,我想建议一个您可能没有考虑过的选项:在将其烧录到microsd卡之前,可以在映像上执行所有配置。您可以在本地目录上挂载raspberry pi os映像,然后在该目录中进行所有配置更改。我使用这样的程序:

  1. 下载并解压缩raspberry pi os映像
  2. 制作映像的工作副本(这样您可以多次使用基本映像来创建不同的配置映像):# cp 2022-01-28-raspios-bullseye armhf-lite.img work.img i喜欢将映像扩展一点,以便有安装新软件的空间:#截断-s 2500-s work.img
  3. 将工作映像附加到循环设备上:# losetup -fnP --显示work.img /dev/ loop 0
  4. 增长文件系统以使用额外的空间:# parted /dev/头0大小-第2部分100% # e2fsck -f /dev/环0p2# resize2fs /dev/dev/环0p2
  5. 本地挂载文件系统:#挂载/dev/line0p2 /mnt #挂载/dev/环0p1 /mnt/boot

现在,您可以在映像上创建和修改配置文件,以便.

  • 配置网络
  • 配置主机名
  • 启用ssh
  • 配置wifi
  • 安装ssh键
  • 等。

但是,如果您想做其他事情,比如更新或安装软件包呢?如果安装qemu-user-static包并正确配置binfmt_misc模块( qemu-user-static包的现代版本将自动完成此操作),您将能够在主机上运行Raspberry二进制文件。这允许您在映像中运行命令,如下所示:

代码语言:javascript
复制
# systemd-nspawn -D /mnt apt update
# systemd-nspawn -D /mnt apt upgrade -y
# systemd-nspawn -D /mnt apt install -y git

或者注入shell脚本:

代码语言:javascript
复制
# systemd-nspawn -D /mnt --bind=$PWD/config.sh:/config.sh sh /config.sh

这里我使用的是systemd-nspawn,它有点像chroot (在本例中),但它负责安装特殊的文件系统(如/sys和/proc ),并且有各种有趣的选项(比如将文件或目录绑定到映像中的--bind选项)。

完成之后,卸载文件系统并断开循环设备:

代码语言:javascript
复制
# umount /mnt/boot /mnt
# losetup -d /dev/loop0

并将自定义的映像写入sd卡:

代码语言:javascript
复制
# dd if=work.img of=/dev/sdb bs=4M

您可以将这里描述的整个过程包装在脚本中,并让它使用参数来配置网络(指定静态地址或使用dhcp)等等。

票数 2
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/15915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档