是否有办法将我使用raspi-config进行的所有设置提取到我可以用wget下载到我设置的每个新pi的可执行脚本?
具有相同效果的类似解决方案也将受到赞赏。我想我可以尝试其中一种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-8
和us
。 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
中的文件进行备份。(*)显然并不明显,因此要消除所有误解,我的意思是您应该运行类似
/boot
和diff -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卡,而不是从头开始。 。
评论
这取决于您要做什么配置? 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解决方案是什么?