題:
如何使raspbian raspi-config設置自動化?
8DH
2015-03-22 17:46:48 UTC
view on stackexchange narkive permalink

我發現自己使用raspi-config以幾乎相同的方式用raspbian反復設置了所有pi。

有沒有辦法提取我使用raspi-進行的所有設置配置成可執行腳本,可以使用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解決方案是什麼?
您可能製作的腳本可以通過ssh注入正確的延遲和按鍵。如果您使用單個pi和各種SD卡,它仍將具有相同的MAC地址,因此您也可以為其保留IP。
我猜想這些在hypriot.com的人擁有我正在尋找的Docker解決方案。 http://blog.hypriot.com/
五 答案:
Silly Freak
2016-05-27 14:54:40 UTC
view on stackexchange narkive permalink

至少在今天, 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#確認更改 

使用此命令,您可以編寫設置腳本可以執行您可以通過交互式命令執行的任何操作,並且可以執行完全相同的操作。不過,您將需要從腳本的源代碼中找到相關的命令及其用法。

太好了!
因此,當我準備SD卡時,可以將映像放在此處,將腳本添加到該文件夾中,然後在pi啟動時運行該腳本。
我缺少此程序的其他改進嗎?
這就是我所知道的一切-如果還有更多內容,則沒有非常明顯的記錄在案。在瀏覽腳本時,我偶然發現了這一點,發現此功能後,我並沒有尋找更多信息。
@8DH使用此方法無法處理某些事情嗎? (如果它仍然與您個人相關)
Bruno Bronosky
2017-05-11 02:22:51 UTC
view on stackexchange narkive permalink

這在任何地方都沒有記錄,但是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

如果您對自動化Raspberry Pi的安裝感興趣,則應在github上查看我的[pi-init2](https://github.com/richardbronosky/pi-init2)項目。它提供了長期以來要求的“啟動時(無頭)運行腳本”的功能。
還有`sudo raspi-config nonint do_audio%d`用於選擇音頻輸出(0 =自動,1 =插孔,2 = HDMI)
-1
此處:https://gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1be,但是您的命令非常有用,可以找到所有這些,謝謝
Dmitry Grigoryev
2019-07-12 11:38:26 UTC
view on stackexchange narkive permalink

所有 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

joan
2015-03-22 20:04:51 UTC
view on stackexchange narkive permalink

使用dd(或類似名稱)將工作的Pi映像複製到PC。

使用dd(或類似名稱)將復制的圖像從PC複製到Pi。

人dd

是的,當然有映像的方式,但是接下來我需要使用更新和內容來維護映像。 (除非也有一個優雅的解決方案...)
@8DH,關於下載設置然後上傳的建議也意味著您還必須維護帶有更新的“映像”。
ON5MF Jurgen
2019-07-12 10:27:08 UTC
view on stackexchange narkive permalink

我有1張SD卡100%設置為我希望作為所有新安裝的基礎。

設置新的Pi時,我只是克隆了該SD卡而不是開始從頭開始。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...