我發現自己使用raspi-config以幾乎相同的方式用raspbian反復設置了所有pi。
有沒有辦法提取我使用raspi-進行的所有設置配置成可執行腳本,可以使用wget下載到我設置的每個新pi?
具有相同效果的類似解決方案也將受到讚賞。我想我可以嘗試其中一種rpi docker實現,但是我並不急於發現這些東西的尖端程度。
我發現自己使用raspi-config以幾乎相同的方式用raspbian反復設置了所有pi。
有沒有辦法提取我使用raspi-進行的所有設置配置成可執行腳本,可以使用wget下載到我設置的每個新pi?
具有相同效果的類似解決方案也將受到讚賞。我想我可以嘗試其中一種rpi docker實現,但是我並不急於發現這些東西的尖端程度。
至少在今天, raspi-config
似乎支持非交互模式:
cat /boot/cmdline.txt#顯示原始cmdline.txtraspi-config nonint do_serial 1#禁用串行consolecat /boot/cmdline.txt#確認更改raspi-config nonint do_serial 0#啟用串行consolecat /boot/cmdline.txt#確認更改
使用此命令,您可以編寫設置腳本可以執行您可以通過交互式命令執行的任何操作,並且可以執行完全相同的操作。不過,您將需要從腳本的源代碼中找到相關的命令及其用法。
這在任何地方都沒有記錄,但是rc_gui工具(如果我要安裝完整的桌面,我假設它會是raspi-config的圖形用戶界面)對raspi-config使用命令行選項bash腳本。您可以在 C源代碼 s>中查看選項的完整列表。 更新:官方存儲庫由於某種原因而消失。這是我找到的最活躍的fork。
/ *命令字符串* /#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_AU “ #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_GUI_sudo ras_pi定義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 nonin t 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 %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” 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”# 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 nonconfig get_config_ / arm_freq“定義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"#s定義SET_GPU_MEM“ 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 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 \”;迴聲\“%s \”;迴聲\“%s \”)| passwd“
更新:
我注意到那裡沒有關於語言環境或鍵盤設置的信息。因此,這向我建議我們必須檢查 raspi-config
的來源。幸運的是,我們在上面有很多示例來了解如何主動使用該腳本 nonint
。因此,我需要無私地解決這個問題的事情是:
locale = en_US.UTF-8layout = ussudo raspi-config nonint do_change_locale $ localesudo raspi-config nonint do_configure_keyboard $ layout
變量是我將從curses UI中選擇的值。語言環境選項是文件 / usr / share / i18n / SUPPORTED
中的第一個字段。鍵盤佈局選項是 / usr / share / X11 / xkb / symbols /
中的目錄名稱。在美國,我使用 en_US.UTF-8
和 us
。 YMMV
所有 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
,而不是 diff my.img vanilla.img
。