어떻게 Raspbian raspi-config 설정을 자동화 할 수 있습니까?


17

raspi-config를 사용하여 거의 동일한 방식으로 rasbian으로 모든 pi를 반복적으로 설정하는 것을 발견했습니다.

raspi-config를 사용하여 설정 한 모든 설정을 내가 설정 한 각각의 새로운 pi에 wget으로 다운로드 할 수있는 실행 가능한 스크립트로 추출하는 방법이 있습니까?

동일한 효과를 갖는 유사한 해결책이 또한 이해 될 것이다. 나는 rpi 도커 구현 중 하나를 시도 할 수 있다고 생각하지만 그 물건이 얼마나 번지는 지 알아 내려고 열망하지는 않는다.


1
어떤 구성을 하시겠습니까? 다른 방법으로 수정할 수있는 raspi-config 구성 파일 수정 (/boot/config.txt,/etc/module.conf ...)
mpromonet

1
/usr/bin도움이된다면 매우 간단한 1000 줄 셸 스크립트입니다 . 새로운 이미지로 시작하지 않으려면 삭제 /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 bash 스크립트에 명령 행 옵션을 사용합니다. 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"

업데이트 : 로캘 또는 키보드 설정에 관한 내용이 없습니다. 그렇기 때문에의 출처를 조사해야한다고 제안합니다 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

변수는 curses UI에서 선택한 값입니다. 로케일 옵션은 파일의 첫 번째 필드입니다 /usr/share/i18n/SUPPORTED. 키보드 레이아웃 옵션은의 디렉토리 이름입니다 /usr/share/X11/xkb/symbols/. 미국에 있기 때문에 en_US.UTF-8와를 사용 us합니다. YMMV


2
Raspberry Pis 설정을 자동화하려면 github에서 pi-init2 프로젝트를 확인하십시오 . "부트시 스크립트 실행 (헤드리스)"의 오랜 요청 기능을 제공합니다.
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. 예를 들어 running 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.


1

dd (또는 유사한)를 사용하여 작동중인 Pi 이미지를 PC에 복사하십시오.

dd (또는 이와 유사한)를 사용하여 PC에서 Pi로 복사 된 이미지를 복사하십시오.

남자 dd


예, 물론 이미지 방식이 있지만 이미지를 업데이트하고 유지해야합니다. (
그것도

3
@ 8DH, 설정 다운로드 및 업로드 제안은 업데이트와 함께 "이미지"를 유지해야 함을 의미합니다.
Tim Holt

0

모든 새 설치의 기반으로 유지하고자하는 SD 카드 100 %를 원하는대로 설정했습니다.

새로운 Pi를 설정할 때 처음부터 시작하는 대신 SD 카드를 복제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.