วิธีการหนึ่งโดยอัตโนมัติการตั้งค่า raspbian raspi-config


17

ฉันพบว่าตัวเองติดตั้ง riPi ของฉันกับ raspbian หลายครั้งในลักษณะเดียวกันโดยใช้ raspi-config

มีวิธีที่จะแยกการตั้งค่าทั้งหมดที่ฉันทำโดยใช้ raspi-config ลงในสคริปต์ปฏิบัติการที่ฉันสามารถดาวน์โหลดด้วย wget ไปยัง pi ใหม่ที่ฉันตั้งค่าไว้หรือไม่

วิธีการแก้ปัญหาที่คล้ายกันที่มีผลเดียวกันจะได้รับการชื่นชม ฉันเดาว่าฉันสามารถลองใช้การใช้งาน rpi docker อย่างใดอย่างหนึ่ง แต่ฉันไม่อยากรู้เลยว่าขอบเลือดนั้นเป็นอย่างไร


1
มันขึ้นอยู่กับการกำหนดค่าที่คุณต้องการจะทำอย่างไร raspi-config แก้ไขไฟล์การกำหนดค่าที่คุณสามารถแก้ไขได้โดยใช้วิธีอื่น (/boot/config.txt,/etc/module.conf ... )
mpromonet

1
มันเป็นสคริปต์เชลล์บรรทัดที่เรียบง่าย 1,000 บรรทัด/usr/binถ้ามันช่วยได้ หากคุณต้องการที่จะปิดการใช้งานเริ่มต้นขึ้นด้วยภาพสดลบและการเชื่อมโยงใน/etc/init.d/apply_noobs_os_config /etc/rc2.d
goldilocks

เช่นเดียวกับ raspi-config ที่มุ่งเน้นการตั้งค่าพื้นฐานทั้งหมดไว้ในที่เดียวโดยไม่ต้องให้ฉันรู้วิธีทำงานแต่ละอย่างฉันต้องการ DSL ที่เรียบง่ายที่ให้ฉันระบุการตั้งค่าทั้งหมดในไฟล์เดียว ชนิดของนักเทียบท่าเหมือน
8DH

ทำไมไม่ใช้แค่นักเทียบท่า?
Tim Holt

ใช่ทำไมล่ะ โซลูชันตัวเทียบท่าที่ต้องการสำหรับ rpi คืออะไร
8DH

คำตอบ:


20

อย่างน้อยในปัจจุบัน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

ด้วยสิ่งนี้คุณสามารถเขียนสคริปต์การตั้งค่าที่สามารถทำสิ่งใดก็ได้ที่คุณสามารถทำได้ผ่านคำสั่งแบบโต้ตอบและมันจะทำสิ่งเดียวกัน คุณจะต้องค้นหาคำสั่งที่เกี่ยวข้องและการใช้งานจากแหล่งที่มาของสคริปต์


1
นั่นวิเศษไปเลย!
8DH

ดังนั้นเมื่อฉันเตรียมการ์ด SD ฉันสามารถใส่ภาพที่นั่นเพิ่มสคริปต์ของฉันไปที่โฟลเดอร์แล้วเรียกใช้สคริปต์เมื่อ pi บูต
8DH

มีการปรับปรุงอื่น ๆ ของขั้นตอนนี้ที่ฉันขาดหายไปหรือไม่?
8DH

1
นั่นคือทุกสิ่งที่ฉันรู้ - ถ้ามีมากกว่านั้นก็ไม่ใช่เอกสารที่ชัดเจน ฉันสะดุดกับสิ่งนี้ขณะดูสคริปต์และไม่ได้หาข้อมูลเพิ่มเติมหลังจากพบคุณสมบัตินี้
Silly Freak

1
@ 8DH มีบางอย่างที่คุณไม่สามารถจัดการกับวิธีนี้ได้หรือไม่? (ถ้ายังเกี่ยวข้องกับคุณเป็นการส่วนตัว)
Silly Freak

16

นี่ยังไม่ได้บันทึกไว้ที่ใดก็ได้ แต่เครื่องมือ rc_gui (ฉันสมมติว่ามันจะเป็นส่วนต่อประสานผู้ใช้แบบกราฟิกกับ raspi-config ถ้าหากฉันเคยติดตั้งเดสก์ท็อปเต็ม) เคยใช้ตัวเลือกบรรทัดคำสั่งไปยังสคริปต์ทุบตี raspi-config คุณสามารถดูรายการเต็มรูปแบบของตัวเลือกในรหัสที่มา C อัปเดต:ธุรกรรมซื้อคืนอย่างเป็นทางการได้หายไปด้วยเหตุผลบางประการ นี่คือส้อมที่ใช้งานมากที่สุดที่ฉันสามารถหาได้

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

ตัวแปรคือค่าที่ฉันจะเลือกจาก UI ของ curses /usr/share/i18n/SUPPORTEDตัวเลือกสถานที่เกิดเหตุเป็นสนามแรกในแฟ้ม /usr/share/X11/xkb/symbols/ตัวเลือกรูปแบบแป้นพิมพ์เป็นชื่อไดเรกทอรี อยู่ในสหรัฐอเมริกาผมใช้และen_US.UTF-8 usYMMV


2
หากคุณมีความสนใจในการตั้งค่า Raspberry Pis โดยอัตโนมัติคุณควรตรวจสอบโครงการpi-init2ของฉันบน github มันมีคุณสมบัติที่ขอยาวของ "เรียกใช้สคริปต์ในการบูต (หัวขาด)"
Bruno Bronosky

นอกจากนี้ยังมีsudo raspi-config nonint do_audio %dให้เลือกเอาต์พุตเสียง (0 = อัตโนมัติ, 1 = แจ็ค, 2 = HDMI)
golimar

@golimar คุณได้รับมาจากไหน โครงการ rc_gui ดั้งเดิมหายไปแล้วและไม่มีทางแยกที่ดีที่สุดที่ฉันจะหาได้ (คำตอบล่าสุด) ไม่รวม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

ที่นี่: gist.github.com/damoclark/ab3d700aafa140efb97e510650d9b1beแต่คำสั่งของคุณยอดเยี่ยมในการค้นหาทั้งหมดของพวกเขาขอบคุณ
golimar

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.diffdiff my.img vanilla.img


1

ใช้ dd (หรือคล้ายกัน) เพื่อคัดลอกอิมเมจ Pi ที่ใช้งานได้ไปยังพีซีของคุณ

ใช้ dd (หรือคล้ายกัน) เพื่อคัดลอกภาพที่คัดลอกจากพีซีของคุณไปยัง Pi ของคุณ

ผู้ชายวว


ใช่มีวิธีภาพแน่นอน แต่แล้วฉันจะต้องรักษาภาพด้วยการปรับปรุงและสิ่งต่าง ๆ (เว้นแต่จะมีวิธีแก้ปัญหาที่สง่างามสำหรับสิ่งนั้นเช่นกัน ... )
8DH

3
@ 8DH ข้อเสนอแนะของคุณในการดาวน์โหลดการตั้งค่าจากนั้นการอัปโหลดหมายความว่าคุณต้องรักษา "ภาพ" ด้วยการอัปเดตด้วย
Tim Holt

0

ฉันมีการ์ด SD 1% ตั้งค่าตามความต้องการของฉันที่ฉันเก็บไว้เป็นฐานสำหรับการติดตั้งใหม่ทั้งหมด

เมื่อตั้งค่า Pi ใหม่ฉันเพิ่งโคลนการ์ด SD ที่แทนที่จะเริ่มต้นจากศูนย์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.