创建预先准备的SD卡映像


19

对于我正在从事的项目,我想基于Raspbian创建一个“股票”图像,该图像可以安装在许多Pis上。

理想情况下,我希望能够(在我的计算机上)获取Raspbian映像,轻松获取一些软件包,编辑一些配置,然后从中创建一个SD卡映像并放入我的Pis中。

有没有简单或推荐的方法可以做到这一点?我可能遇到任何陷阱吗?

我希望避免手动修改pi,然后再克隆该图像。大概是说Raspbian是用某种方式制作的,而不是有人手动单击Pi上的按钮。如果可以的话,我想这样做。

理想情况下,我想创建可以在连续集成服务器上自动构建的内容-我不需要涉及“写入SD卡,将其放入Pi中”的构建过程,因为我想大胆地创建没有任何图像的图像物理访问Raspberry Pi。


3
可能派上用场: 如何安装Raspberry Pi Linux发行映像?-请注意已接受答案中强调的一行,“如果您进行了任何更改,则这些更改将包含在.img文件中。” 不幸的是,这没有提供申请的机会apt-get;最简单的方法是使用一台虚拟机,并rsync使用与用于启动该虚拟机的映像相同的挂载映像(因为虚拟机映像本身并不适合这样做),但我认为这里唯一的虚拟机选项是QEMU,即AFAICT是PITA。
goldilocks

另一种方法是网络启动。
lexu

Win32DiskImager具有读取功能,您是否尝试过?
孔刍嗯浩

Answers:


6

Raspberry Pi基金会使用一组bash脚本来自动化QEMU生成其图像。您仍然应该研究“行业标准” buildroot和Yocto。

https://github.com/RPi-Distro/pi-gen

http://cellux.github.io/articles/diy-linux-with-buildroot-part-1/


如果OP希望创建行业标准的发布映像,是的,这就是要走的路,但是它的学习曲线很大,我希望在这条路上没有爱好者。
Piotr Kula 2016年

1
这听起来像我要找的东西!是否有使用指南?build.sh似乎假设设置了许多环境变量。
安迪·史密斯

可能在TODO下被#4涵盖了;)几个月没有被触摸过,因此涉及的人员正在忙于其他事情或对此失去了兴趣。
goldilocks

@goldilocks,所以这不是基本的阿拉伯图像的来源吗?
安迪·史密斯

3
老实说,我的印象是您追求的是XY问题的Y面,而且活力太大了-这意味着您认为更简单的方法(只需在pi上设置图像,这可以通过通过远程登录,而且本身调整了通过安装图像,可在PC上进行,而所有这一切都可以通过脚本来自动)计算机是太麻烦,所以你已经把你的希望寄托在了一种方法,实际上是多更麻烦
goldilocks


0

我认为,按照您建议的方式(安装,进行更新和配置的解决方法等)进行操作比实际解决方案面临更多挑战。当然,如果您有兴趣的话,按照自己的方式做可能会很有趣,但是最好和最简单的方法就是避免使用。

我建议您购买一个Pi,然后对其进行操作,然后对其SD卡进行映像。然后,由于该映像已经配置,因此可以在其他Pi上使用该映像。

注意:我假设您将使用Raspbian。我还假设您只是普通人,而不是经常准备图像的人(例如Raspberry Pi Foundation)。


如果您 Pi 进行修补,请执行以下步骤:

  1. 下载并安装您选择的新操作系统映像
  2. 插入以太网电缆/连接到WiFi
    • 如果您不知道Pi的IP地址,则可能进行LAN扫描
  3. 通过SSH进行操作
    • apt-get update -y && apt-get upgrade 更新软件包
    • 您的个人配置需求
  4. 制作图像,然后将该图像用于其他Pi。

如果您修改Pi的步骤(请参见上面的注释):

  1. 下载新的操作系统映像
  2. 使用来自/raspberrypi//a/13138/24224的说明挂载映像(您还必须考虑所拥有的OS /映像,因为某些OS /映像具有不同的FS布局)
    • 准备好计算器。
  3. 查找要更新的每个软件包deb文件,及其依赖项,以及这些依赖项的依赖项,以及这些依赖项的依赖项。很麻烦。参考此链接apt-offline
    • 然后找到一种无需使用Pi进行修补就可以安装所有这些软件包的方法。apt-get将无法离线工作。deb 在此处归档详细信息。祝好运。
  4. 使用Hexxeh的工具更新Pi内核和低级内容
  5. 根据您的要求进行配置
  6. 将修改后的图像写入Pis的SD卡。

如果不修改您的Pi,我看不出任何好处。

减少自己的懈怠和修补工作。您只需要做一次。


通过获取,依赖关系以及那里的依赖关系以及那里的依赖关系等来手动获取程序几乎是不可能的。但是,如果您使用apt-get并说要使用VLC,那么apt-get install vlc --yes --print- uris。这将给出链接列表;下载完成后,将其放入/ var / cache / apt / archives / partial并运行dpkg -i partial / *。deb进行安装。更好的是,如果您获得Synaptics,则可以选择生成软件包下载脚本。在Linux计算机上运行该脚本,即可获得软件包。然后,您可以再次使用突触安装它们。
NULL

@NULLThen find a way to install all of those packages without using/tinkering with your Pi.
PNDA

@NULL据我所知,您只能dpkg在系统本身上使用,不能在已挂载的映像上使用。另外,OP还计划使用他/她的PC,因此,*.deb您拥有的文件首先是针对错误体系结构的(PC是x86 / x64,Pi是ARMv6 / v7)
PNDA

正如我在问题中所指出的,我不想做1。至于2,这听起来很疯狂:)。是什么让您认为@flakeshakes的建议从2开始会更加困难?
安迪·史密斯

@AndySmith我会引用goldilock的评论:I'll be honest and say that my impression is you are pursuing the Y side of an XY problem with too much vigour -- it's implied you think the simpler method (just set up an image on a pi, which can be done from a computer via remote login, and the image itself tweaked by mounting, which can be done on a PC, and all of this can be automated with scripting) is too much hassle, and so you have put your hopes in a method that is actually much more hassle.
PNDA

0

我认为您正在寻找某种东西(software) configuration management。有了这个,您将能够启动一个原始的raspbian映像,然后推送您自己的配置(包括新软件包等)。那里有很多SCM系统。缺点是这些系统中大多数都旨在支持大规模网络,因此对于您的目的而言可能有些过大。您还需要某种配置服务器。最受欢迎的SCM似乎是PuppetChefAnsible。入门文章:

这是一个通用的答案,但是SCM是一个广泛的领域。也许值得根据您的计划进行深入研究。


Ansible似乎很有前途,因为它是无代理的,并且您不需要功能强大的服务器即可运行它。
Duenni '16

1
不完全是,我希望图像已经生成,而不是我需要添加的内容。如果我的Pi没有网络连接,则此建议不起作用。
安迪·史密斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.