我发现自己使用raspi-config以几乎相同的方式反复用raspbian设置了所有pi。

是否有办法将我使用raspi-config进行的所有设置提取到我可以用wget下载到我设置的每个新pi的可执行脚本?

具有相同效果的类似解决方案也将受到赞赏。我想我可以尝试其中一种rpi docker实现,但是我并不急于找出这些东西的尖端程度。

评论

这取决于您要做什么配置? raspi-config修改您可以使用其他方式修改的配置文件(/boot/config.txt、/etc/module.conf ...)

如果有帮助的话,它是/ usr / bin中一个非常简单的1000行shell脚本。如果要禁用它以全新的图像启动,请删除/etc/init.d/apply_noobs_os_config和/etc/rc2.d中的链接。

就像raspi-config将所有基本设置任务集中到一个地方,而无需我知道如何完成每个任务一样,我想要一个简单的DSL,让我在一个文件中指定所有设置。有点像码头工人。

为什么不只使用Docker?

是的,为什么不呢? rpi首选的docker解决方案是什么?

#1 楼

至少在今天,raspi-config似乎支持非交互模式:

cat /boot/cmdline.txt            # show original cmdline.txt
raspi-config nonint do_serial 1  # disable serial console
cat /boot/cmdline.txt            # confirm changes
raspi-config nonint do_serial 0  # enable serial console
cat /boot/cmdline.txt            # confirm changes


这样,您可以编写设置脚本,该脚本可以执行通过交互式命令可以执行的任何操作,并且将做完全一样的事情。不过,您将需要从脚本的源代码中找到相关的命令及其用法。

评论


太好了!

– 8DH
16年5月31日在13:16

因此,当我准备SD卡时,可以将映像放在此处,将脚本添加到该文件夹​​中,然后在pi启动时运行该脚本。

– 8DH
16年5月31日在13:18

我缺少此程序的其他改进吗?

– 8DH
16年5月31日在13:18

这就是我所知道的一切-如果还有更多内容,则没有非常明显的记录在案。在浏览脚本时,我偶然发现了这一点,发现此功能后,我并没有寻找更多信息。

–愚蠢的怪物
16年5月31日在14:43

@ 8DH使用此方法无法处理某些事情吗? (如果它仍然与您个人相关)

–愚蠢的怪物
16年5月31日在14:45

#2 楼

仍然没有任何文档,但是rc_gui工具(如果我要安装完整的桌面,我假设它会是raspi-config的图形用户界面)对raspi-config bash脚本使用命令行选项。您可以在C源代码中看到选项的完整列表。更新:官方回购由于某种原因而消失了。这是我能找到的最活跃的fork。

/* Command strings */
#define GET_CAN_EXPAND  "sudo raspi-config nonint get_can_expand"
#define EXPAND_FS       "sudo raspi-config nonint do_expand_rootfs"
#define GET_HOSTNAME    "sudo raspi-config nonint get_hostname"
#define SET_HOSTNAME    "sudo raspi-config nonint do_hostname %s"
#define GET_BOOT_CLI    "sudo raspi-config nonint get_boot_cli"
#define GET_AUTOLOGIN   "sudo raspi-config nonint get_autologin"
#define SET_BOOT_CLI    "sudo raspi-config nonint do_boot_behaviour B1"
#define SET_BOOT_CLIA   "sudo raspi-config nonint do_boot_behaviour B2"
#define SET_BOOT_GUI    "sudo raspi-config nonint do_boot_behaviour B3"
#define SET_BOOT_GUIA   "sudo raspi-config nonint do_boot_behaviour B4"
#define GET_BOOT_WAIT   "sudo raspi-config nonint get_boot_wait"
#define SET_BOOT_WAIT   "sudo raspi-config nonint do_boot_wait %d"
#define GET_SPLASH      "sudo raspi-config nonint get_boot_splash"
#define SET_SPLASH      "sudo raspi-config nonint do_boot_splash %d"
#define GET_OVERSCAN    "sudo raspi-config nonint get_overscan"
#define SET_OVERSCAN    "sudo raspi-config nonint do_overscan %d"
#define GET_CAMERA      "sudo raspi-config nonint get_camera"
#define SET_CAMERA      "sudo raspi-config nonint do_camera %d"
#define GET_SSH         "sudo raspi-config nonint get_ssh"
#define SET_SSH         "sudo raspi-config nonint do_ssh %d"
#define GET_VNC         "sudo raspi-config nonint get_vnc"
#define SET_VNC         "sudo raspi-config nonint do_vnc %d"
#define GET_SPI         "sudo raspi-config nonint get_spi"
#define SET_SPI         "sudo raspi-config nonint do_spi %d"
#define GET_I2C         "sudo raspi-config nonint get_i2c"
#define SET_I2C         "sudo raspi-config nonint do_i2c %d"
#define GET_SERIAL      "sudo raspi-config nonint get_serial"
#define GET_SERIALHW    "sudo raspi-config nonint get_serial_hw"
#define SET_SERIAL      "sudo raspi-config nonint do_serial %d"
#define GET_1WIRE       "sudo raspi-config nonint get_onewire"
#define SET_1WIRE       "sudo raspi-config nonint do_onewire %d"
#define GET_RGPIO       "sudo raspi-config nonint get_rgpio"
#define SET_RGPIO       "sudo raspi-config nonint do_rgpio %d"
#define GET_PI_TYPE     "sudo raspi-config nonint get_pi_type"
#define GET_OVERCLOCK   "sudo raspi-config nonint get_config_var arm_freq /boot/config.txt"
#define SET_OVERCLOCK   "sudo raspi-config nonint do_overclock %s"
#define GET_GPU_MEM     "sudo raspi-config nonint get_config_var gpu_mem /boot/config.txt"
#define GET_GPU_MEM_256 "sudo raspi-config nonint get_config_var gpu_mem_256 /boot/config.txt"
#define GET_GPU_MEM_512 "sudo raspi-config nonint get_config_var gpu_mem_512 /boot/config.txt"
#define GET_GPU_MEM_1K  "sudo raspi-config nonint get_config_var gpu_mem_1024 /boot/config.txt"
#define SET_GPU_MEM     "sudo raspi-config nonint do_memory_split %d"
#define GET_HDMI_GROUP  "sudo raspi-config nonint get_config_var hdmi_group /boot/config.txt"
#define GET_HDMI_MODE   "sudo raspi-config nonint get_config_var hdmi_mode /boot/config.txt"
#define SET_HDMI_GP_MOD "sudo raspi-config nonint do_resolution %d %d"
#define GET_WIFI_CTRY   "sudo raspi-config nonint get_wifi_country"
#define SET_WIFI_CTRY   "sudo raspi-config nonint do_wifi_country %s"
#define CHANGE_PASSWD   "(echo \"%s\" ; echo \"%s\" ; echo \"%s\") | passwd"


UPDATE:
我注意到语言环境或键盘设置没有任何内容。因此,这向我建议我们必须检查raspi-config的来源。幸运的是,我们在上面有很多示例来了解如何主动使用该脚本nonint。因此,我需要彻底解决此问题的方法是:

locale=en_US.UTF-8
layout=us
sudo raspi-config nonint do_change_locale $locale
sudo raspi-config nonint do_configure_keyboard $layout


变量是我将从curses UI中选择的值。语言环境选项是文件/usr/share/i18n/SUPPORTED中的第一个字段。键盘布局选项是/usr/share/X11/xkb/symbols/中的目录名称。在美国,我使用en_US.UTF-8us。 YMMV

评论


如果您对自动化Raspberry Pi的安装感兴趣,则应在github上查看我的pi-init2项目。它提供了长期以来要求的“启动时(无头)运行脚本”的功能。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
18年4月11日在16:18

还有sudo raspi-config nonint do_audio%d用于选择音频输出(0 =自动,1 =插孔,2 = HDMI)

– golimar
19年7月11日在20:06

@golimar你从哪儿得到的?原始的rc_gui项目已消失,我能找到的最好的fork(更新的答案)不包含do_audio。但这确实是curl -sL https://github.com/RPi-Distro/raspi-config/raw/master/raspi-config中找到的功能| grep -E'(do | get)_ [a-zA-Z0-9_] + \('| sort | uniq

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
19年7月12日在5:16



此处:gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1be,但是您的命令非常有用,可以找到所有这些,谢谢

– golimar
19年7月15日在17:56

#3 楼

raspi-config所做的只是编辑一些配置文件,您也可以使用脚本进行编辑。请查阅sed手册,以了解如何有效地进行此类编辑。

如果您要通过这种方式进行大量更改,我会考虑以所需的方式设置一个干净的RPi图像。完整的文件系统*(针对原始图像),然后在需要设置新安装时应用diff进行更改。最后,看看patch之类的工具-这些工具专门用于操作配置更改,并能够跟踪简单的etckeeper可能会遗漏的细微更改,例如权限。请注意,与其名称相反,diff不限于etckeeper,例如运行/etc将对etckeeper -d /boot init; etckeeper -d /boot commit中的文件进行备份。

(*)显然并不明显,因此要消除所有误解,我的意思是您应该运行类似/bootdiff -r /etc /mnt/vanilla_root/etc > etc.diff的东西,而不是diff -r /boot /mnt/vanilla_boot > boot.diff

#4 楼

使用dd(或类似名称)将工作的Pi映像复制到PC。

使用dd(或类似名称)将复制的图像从PC复制到您的Pi。

男人dd

评论


是的,当然有映像的方式,但是接下来我需要使用更新和内容来维护映像。 (除非也有一个优雅的解决方案...)

– 8DH
15年3月22日在16:59

@ 8DH,您建议先下载设置然后再上传,这也意味着您还必须维护带有更新的“映像”。

–蒂姆·霍尔特(Tim Holt)
15年3月22日在18:26

#5 楼

我有1张SD卡100%设置为我希望作为所有新安装的基础。

设置新Pi时,我只是克隆了该SD卡,而不是从头开始。 。