Bagaimana seseorang mengotomatiskan pengaturan raspi-raspi?

17

Saya telah menemukan diri saya berulang kali mengatur semua pi saya dengan raspbian dengan cara yang hampir sama menggunakan raspi-config.

Apakah ada cara untuk mengekstrak semua pengaturan yang saya buat menggunakan raspi-config ke dalam skrip yang dapat dieksekusi yang dapat saya unduh dengan wget ke setiap pi baru yang saya atur?

Solusi serupa dengan efek yang sama juga akan dihargai. Saya kira saya bisa mencoba salah satu implementasi docker rpi tapi saya tidak begitu bersemangat untuk mencari tahu bagaimana hal itu.

8DH
sumber
1
itu tergantung pada konfigurasi apa yang ingin Anda lakukan? raspi-config memodifikasi file konfigurasi yang dapat Anda modifikasi menggunakan cara lain (/boot/config.txt,/etc/module.conf ...)
mpromonet
1
Ini adalah script shell 1000 baris yang cukup sederhana /usr/bin, jika itu membantu. Jika Anda ingin menonaktifkannya dimulai dengan gambar baru, hapus /etc/init.d/apply_noobs_os_configtautannya /etc/rc2.d.
goldilocks
Sama seperti raspi-config memusatkan semua tugas pengaturan dasar ke satu tempat tanpa mengharuskan saya untuk mengetahui bagaimana melakukan setiap tugas, saya ingin DSL sederhana yang memungkinkan saya menentukan semua pengaturan dalam satu file. Jenis seperti buruh pelabuhan.
8DH
Mengapa tidak menggunakan buruh pelabuhan?
Tim Holt
Ya kenapa tidak? Apa solusi buruh pelabuhan pilihan untuk rpi?
8DH

Jawaban:

20

Setidaknya saat ini, raspi-configtampaknya mendukung mode noninteraktif:

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

dengan ini, Anda dapat menulis skrip pengaturan yang dapat melakukan apa pun yang dapat Anda lakukan melalui perintah interaktif, dan itu akan melakukan hal yang persis sama. Anda perlu menemukan perintah yang relevan dan penggunaannya dari sumber skrip.

Freak konyol
sumber
1
Itu luar biasa!
8DH
Jadi ketika saya menyiapkan kartu SD saya bisa meletakkan gambar di sana, tambahkan skrip saya ke folder dan kemudian jalankan skrip ketika pi telah boot.
8DH
Apakah ada perbaikan lain pada prosedur ini yang saya lewatkan?
8DH
1
Itu semua yang saya ketahui - jika ada lebih banyak, itu tidak terlalu didokumentasikan. Saya menemukan ini sambil melihat ke dalam skrip, dan tidak mencari informasi lebih lanjut setelah saya menemukan fitur ini.
Silly Freak
1
@ 8DH Apakah ada sesuatu yang tidak bisa Anda tangani dengan metode ini? (jika itu masih relevan bagi Anda secara pribadi)
Silly Freak
16

Ini masih belum didokumentasikan di mana pun, tetapi alat rc_gui (saya berasumsi itu akan menjadi antarmuka pengguna grafis ke raspi-config jika saya menginstal desktop lengkap) menggunakan opsi baris perintah ke skrip bash raspi-config. Anda dapat melihat daftar lengkap dari pilihan di kode sumber C . UPDATE: Repo resmi telah menghilang karena suatu alasan. Ini adalah garpu paling aktif yang bisa saya temukan.

/* 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: Saya perhatikan bahwa tidak ada di sana tentang pengaturan lokal atau keyboard. Jadi, itu menunjukkan kepada saya bahwa kita harus memeriksa sumber raspi-config. Untungnya kami memiliki banyak contoh di atas untuk mendapatkan ide tentang bagaimana menggunakan skrip itu secara nonintefektif. Jadi, apa yang perlu saya lakukan untuk menyelesaikan masalah ini tanpa kepala adalah:

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

Variabelnya adalah nilai yang saya pilih dari UI kutukan. Opsi lokal adalah bidang pertama dalam file /usr/share/i18n/SUPPORTED. Opsi tata letak keyboard adalah nama direktori di /usr/share/X11/xkb/symbols/. Berada di AS, saya menggunakan en_US.UTF-8dan us. YMMV

Bruno Bronosky
sumber
2
Jika Anda tertarik untuk mengotomatisasi pengaturan Raspberry Pis, Anda harus memeriksa proyek pi-init2 saya di github. Ini menyediakan fitur yang lama diminta dari "menjalankan skrip saat boot (tanpa kepala)".
Bruno Bronosky
Ada juga sudo raspi-config nonint do_audio %duntuk memilih output audio (0 = otomatis, 1 = jack, 2 = HDMI)
golimar
@ Gimar, di mana Anda mendapatkan itu? Proyek asli rc_gui telah menghilang dan garpu terbaik yang dapat saya temukan (jawaban diperbarui) tidak termasuk do_audio. Tapi itu memang fungsi yang ditemukan dicurl -sL https://github.com/RPi-Distro/raspi-config/raw/master/raspi-config | grep -E '(do|get)_[a-zA-Z0-9_ ]+\(' | sort | uniq
Bruno Bronosky
Di sini: gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1be , tetapi perintah Anda hebat untuk menemukan semuanya, terima kasih
golimar
3

Yang raspi-configdilakukan hanyalah mengedit beberapa file konfigurasi, yang juga dapat Anda edit dengan skrip. Periksa sedmanual untuk melihat bagaimana pengeditan tersebut dapat dilakukan secara efisien.

Jika Anda memiliki banyak perubahan untuk diterapkan dengan cara ini, saya akan mempertimbangkan untuk menyiapkan gambar RPi bersih seperti yang Anda inginkan, diffsistem file lengkap * terhadap gambar vanilla, dan kemudian menerapkan perubahan dengan patchketika Anda perlu mengatur yang baru instalasi.

Akhirnya, lihat alat-alat seperti etckeeper- yang secara khusus dirancang untuk memanipulasi perubahan konfigurasi dan dapat melacak perubahan halus yang difftidak ada, seperti izin. Perhatikan bahwa bertentangan dengan namanya, etckeepertidak terbatas pada /etc, misalnya menjalankan etckeeper -d /boot init; etckeeper -d /boot commitakan membuat cadangan file di /boot.

(*) Tampaknya tidak jelas , jadi untuk menghapus semua kesalahpahaman, maksud saya Anda harus menjalankan sesuatu seperti diff -r /etc /mnt/vanilla_root/etc > etc.diffdan diff -r /boot /mnt/vanilla_boot > boot.diff, tidak diff my.img vanilla.img.

Dmitry Grigoryev
sumber
1

Gunakan dd (atau serupa) untuk menyalin gambar Pi yang berfungsi ke PC Anda.

Gunakan dd (atau serupa) untuk menyalin gambar yang disalin dari PC Anda ke Pi Anda.

bung

joan
sumber
Ya, tentu saja ada cara gambar tetapi kemudian saya harus menjaga gambar dengan pembaruan dan hal-hal lainnya. (kecuali ada solusi elegan untuk itu juga ...)
8DH
3
@ 8DH, saran Anda untuk mengunduh pengaturan kemudian mengunggah juga berarti Anda harus memelihara "gambar" dengan pembaruan juga.
Tim Holt
0

Saya memiliki 1 SD-card yang diatur 100% untuk keinginan saya yang saya simpan sebagai basis untuk semua instalasi baru.

Saat mengatur Pi baru saya hanya mengkloning SD-card itu dan bukannya memulai dari awal.

ON5MF Jurgen
sumber