Làm thế nào một người có thể tự động hóa thiết lập raspi-config raspbian?


17

Tôi đã thấy mình liên tục thiết lập tất cả các pi của mình với raspbian theo cách tương tự như cách sử dụng raspi-config.

Có cách nào để trích xuất tất cả các cài đặt mà tôi đã thực hiện bằng cách sử dụng raspi-config thành một tập lệnh thực thi mà tôi có thể tải xuống với wget cho mỗi pi mới tôi thiết lập không?

Một giải pháp tương tự với hiệu quả tương tự cũng sẽ được đánh giá cao. Tôi đoán rằng tôi có thể thử một trong những triển khai docker rpi nhưng tôi không háo hức tìm hiểu xem công cụ đó bị chảy máu như thế nào.


1
Nó phụ thuộc vào cấu hình bạn muốn làm gì? raspi-config sửa đổi các tệp cấu hình mà bạn có thể sửa đổi bằng cách khác (/boot/config.txt,/etc/module.conf ...)
mpromonet 22/03/2015

1
Đó là một kịch bản shell 1000 dòng khá đơn giản /usr/bin, nếu điều đó có ích. Nếu bạn muốn vô hiệu hóa nó bắt đầu với một hình ảnh mới, hãy xóa /etc/init.d/apply_noobs_os_configvà liên kết trong /etc/rc2.d.
goldilocks

Giống như raspi-config tập trung tất cả các tác vụ thiết lập cơ bản vào một nơi mà không yêu cầu tôi biết cách thực hiện từng tác vụ Tôi muốn một DSL đơn giản cho phép tôi chỉ định tất cả các cài đặt trong một tệp. Kiểu như docker.
8DH

Tại sao không chỉ sử dụng docker?
Tim Holt

Vâng, tại sao không? Các giải pháp docker ưa thích cho rpi là gì?
8DH

Câu trả lời:


20

Ít nhất hiện nay, raspi-configdường như hỗ trợ chế độ không tương tác:

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

với điều này, bạn có thể viết các tập lệnh thiết lập có thể làm bất cứ điều gì bạn có thể làm thông qua lệnh tương tác và nó sẽ thực hiện chính xác những điều tương tự. Tuy nhiên, bạn sẽ cần tìm các lệnh có liên quan và cách sử dụng chúng từ nguồn của tập lệnh.


1
Điều đó thật tuyệt vời!
8DH

Vì vậy, khi tôi chuẩn bị thẻ SD, tôi có thể đặt hình ảnh ở đó, thêm tập lệnh của tôi vào thư mục và sau đó chạy tập lệnh khi pi đã khởi động.
8DH

Có bất kỳ cải tiến nào khác cho thủ tục này mà tôi đang thiếu không?
8DH

1
Đó là tất cả mọi thứ tôi biết - nếu có nhiều hơn, nó không được ghi lại rõ ràng. Tôi tình cờ phát hiện ra điều này trong khi xem kịch bản và không tìm kiếm thêm thông tin sau khi tôi tìm thấy tính năng này.
Ngớ ngẩn

1
@ 8DH Có điều gì bạn không thể xử lý với phương pháp này không? (nếu nó vẫn phù hợp với cá nhân bạn)
Silly Freak

16

Điều này vẫn chưa được ghi nhận ở bất cứ đâu, nhưng công cụ RC_gui (Tôi cho rằng nó sẽ là giao diện người dùng đồ họa cho raspi-config nếu tôi đã từng cài đặt máy tính để bàn đầy đủ) sử dụng các tùy chọn dòng lệnh cho tập lệnh bash raspi-config. Bạn có thể xem toàn bộ danh sách các tùy chọn trong mã nguồn C . CẬP NHẬT: Repo chính thức đã biến mất vì một số lý do. Đây là ngã ba tích cực nhất mà tôi có thể tìm thấy.

/* 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"

CẬP NHẬT: Tôi nhận thấy rằng không có gì trong đó về cài đặt ngôn ngữ hoặc bàn phím. Vì vậy, điều đó gợi ý cho tôi rằng chúng ta phải kiểm tra nguồn gốc của raspi-config. May mắn thay, chúng tôi có rất nhiều ví dụ ở trên để có được ý tưởng về cách sử dụng kịch bản đó một cách chính nonintxác. Vì vậy, điều tôi cần làm để giải quyết vấn đề này một cách không mệt mỏi là:

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

Các biến là các giá trị mà tôi đã chọn từ UI chửi rủa. Tùy chọn ngôn ngữ là trường đầu tiên trong tệp /usr/share/i18n/SUPPORTED. Tùy chọn bố trí bàn phím là tên thư mục trong /usr/share/X11/xkb/symbols/. Ở Mỹ, tôi sử dụng en_US.UTF-8us. YMMV


2
Nếu bạn quan tâm đến việc tự động hóa việc thiết lập Raspberry Pis, bạn nên kiểm tra dự án pi-init2 của tôi trên github. Nó cung cấp tính năng được yêu cầu từ lâu là "chạy tập lệnh khi khởi động (không đầu)".
Bruno Bronosky

Ngoài ra còn có sudo raspi-config nonint do_audio %dcách chọn đầu ra âm thanh (0 = auto, 1 = jack, 2 = HDMI)
golimar

@golimar bạn lấy cái đó ở đâu? Dự án RC_gui ban đầu đã biến mất và ngã ba tốt nhất tôi có thể tìm thấy (câu trả lời được cập nhật) không bao gồm do_audio. Nhưng đó thực sự là một chức năng được tìm thấy trongcurl -sL https://github.com/RPi-Distro/raspi-config/raw/master/raspi-config | grep -E '(do|get)_[a-zA-Z0-9_ ]+\(' | sort | uniq
Bruno Bronosky

Ở đây: gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1be , nhưng lệnh của bạn thật tuyệt khi tìm thấy tất cả chúng, cảm ơn
golimar

3

Tất cả raspi-configđều là chỉnh sửa một vài tệp cấu hình, mà bạn cũng có thể chỉnh sửa bằng một tập lệnh. Kiểm tra sedhướng dẫn để xem cách chỉnh sửa như vậy có thể được thực hiện một cách hiệu quả.

Nếu bạn có nhiều thay đổi để áp dụng theo cách này, tôi sẽ xem xét việc thiết lập hình ảnh RPi sạch theo cách bạn muốn, diffhệ thống tệp hoàn chỉnh của nó * đối với hình ảnh vanilla, sau đó áp dụng các thay đổi patchkhi bạn cần thiết lập mới cài đặt.

Cuối cùng, hãy xem các công cụ như etckeeper- những công cụ được thiết kế đặc biệt để thao tác thay đổi cấu hình và có thể theo dõi các thay đổi tinh tế mà một đơn giản diffsẽ bỏ lỡ, chẳng hạn như quyền. Lưu ý rằng trái với tên của nó, etckeeperkhông bị hạn chế /etc, ví dụ như việc chạy etckeeper -d /boot init; etckeeper -d /boot commitsẽ tạo bản sao lưu của các tệp trong đó /boot.

(*) Rõ ràng điều đó không rõ ràng , vì vậy để xóa tất cả những hiểu lầm, ý tôi là bạn nên chạy một cái gì đó như diff -r /etc /mnt/vanilla_root/etc > etc.diffdiff -r /boot /mnt/vanilla_boot > boot.diffkhông diff my.img vanilla.img.


1

Sử dụng dd (hoặc tương tự) để sao chép hình ảnh Pi đang hoạt động vào PC của bạn.

Sử dụng dd (hoặc tương tự) để sao chép hình ảnh được sao chép từ PC sang Pi của bạn.

người đàn ông


Vâng, tất nhiên là có cách hình ảnh nhưng sau đó tôi sẽ cần phải duy trì hình ảnh với các bản cập nhật và công cụ. (trừ khi có một giải pháp tao nhã cho điều đó ...)
8DH

3
@ 8DH, đề xuất tải xuống cài đặt của bạn sau đó tải lên cũng có nghĩa là bạn phải duy trì "hình ảnh" với các bản cập nhật.
Tim Holt

0

Tôi có 1 thẻ SD được thiết lập 100% theo mong muốn của tôi mà tôi giữ làm cơ sở cho tất cả các cài đặt mới.

Khi thiết lập Pi mới, tôi chỉ sao chép thẻ SD đó thay vì bắt đầu từ đầu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.