문제: 매우 귀찮은 라즈베리파이 초기화

라즈베리파이를 초기화하려면 이런 절차가 필요합니다.

  1. SD 카드를 포맷
  2. Raspberry Pi OS 이미지(혹은 Ubuntu 등)를 SD카드에 쓰기
  3. SD카드를 라즈베리파이 보드에 삽입
  4. 라즈베리파이 보드에 붙은 HDMI 포트로 모니터에 연결하고, 키보드를 연결
  5. 라즈베리파이에 전원 인가 (Power On)
  6. 로컬 사용자로 Raspberry OS의 쉘에 연결 (혹은 GUI)
  7. sudo raspi-config로 Locale, TimeZone, WiFi, SSH 활성화, 주변장치(I2C, SPI) 등 설정

이렇게 하면 되긴 한데,

문제는 제가 랩탑(맥북)만 사용하고, 모니터와 키보드를 따로 쓰지 않는다는 것입니다.

설령 모니터와 키보드가 있다고 하더라도, 매번 이런 식으로 라즈베리파이를 하나하나 초기화하는 것은 어쩐지 짜증스럽습니다.

또 귀찮은 것은 둘째 치더라도,

사람이 일일이 수작업으로 세팅하는 것은 에러를 내기에 딱 좋은 조건이죠.

그렇다면 좀 제대로 된, 편하고 간단한 방법은 없을까요?


해결: 모니터와 키보드 없이(headless) 라즈베리파이 초기화 하기

네, 방법이 있습니다.

하나씩 알아보도록 하겠습니다.


boot/

SD카드에 이미지를 쓰고 나면 boot/ 디렉터리 파티션이 생성되고,

참고: macOS에서는 boot/ 자체가 볼륨의 루트 디렉터리처럼 보입니다.

그 안에 이런 파일들이 들어 있습니다.

아래와 같이 CLI로도 접근할 수 있습니다. (macOS 기준)

$ cd /Volumes/[SD카드 볼륨 이름]

잘 보시면 elf 파일kernel.img, 그리고 config.txt 같은 파일이 있습니다.

자 그럼, 잘 모르는 파일들은 건드리지 않기로 하고,

뻔한 파일 몇 개만 살펴보겠습니다.


config.txt

The Raspberry Pi uses a configuration file instead of the BIOS you would expect to find on a conventional PC. The system configuration parameters, which would traditionally be edited and stored using a BIOS, are stored instead in an optional text file named config.txt.

이 파일은 라즈베리파이에서 BIOS를 대신하기 위해 존재합니다.

간단하게 말하면, 원래 sudo raspi-config로 설정했던 Locale, TimeZone, 주변장치 활성화 등의 설정을 저장하는 곳이 바로 config.txt 라는 것입니다.

즉, 이 파일을 수정한 뒤 라즈베리파이의 전원을 키면 sudo raspi-config를 수정한 것과 같은 효과가 있습니다.

다음은 파일 내용의 일부입니다.

# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on

...

# Enable audio (loads snd_bcm2835)
dtparam=audio=on

사실 sudo raspi-config 중에서 일부만 이 파일에서 설정할 수 있습니다.

이 중에서 제가 변경하고 싶은 내용은 이렇습니다.

Enable SPI

SPI Interface 사용 하기 위해

앞의 주석 표시 #를 제거합니다.

dtparam=spi=on

디바이스에 따라 SPI 인터페이스를 사용할 때가 있는데, 이렇게 설정을 하면 되겠습니다.

Disable Audio

오디오를 사용할 일이 없어서, #를 앞에 붙였습니다.

# Enable audio (loads snd_bcm2835)
#dtparam=audio=on

그런데 생각보다 config.txt 파일에서 할게 별로 없네요.

다음으로 넘어가겠습니다.


wpa_supplicant.conf

이 파일은 /etc/wpa_supplicant/wpa_supplicant.conf에 생성되는 WiFi 접속 정보를 설정하는 파일입니다.

생성해보겠습니다.

$ cd /Volume/[SD카드 볼륨 이름]
$ touch wpa_supplicant.conf
$ vi wpa_supplicant.conf

그리고 아래의 틀에 맞춰 입력하면 됩니다.

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=US

network={
 ssid="[SSID]"
 psk="[비밀번호]"
}

주의사항: country=KR 하면 WiFi 안 됨

한국이라고, ‘country=KR’ 이라고 쓰면 WiFi가 안 됩니다. 공유기 설정은 ‘대한민국’으로 되어 있는데, 이상하게도 ‘US’나 ‘GB’를 입력해야 WiFi가 됩니다.

이렇게 작성해서 boot/ 파티션에 저장해놓으면,

라즈베리파이가 부팅될 때 /boot/wpa_supplicant.conf에서 /etc/wpa_supplicant/wpa_supplicant.conf 로 이동하게 되고,

자동으로 WiFi 네트워크에 접속합니다.

다음으로 ssh 접속을 활성화하는 방법을 알아보겠습니다.


ssh

이 파일이 boot/ 파티션에 존재하면,

라즈베리파이를 부팅하면서 자동으로 SSH 접속을 활성화합니다.

$ cd /Volume/[SD카드 볼륨 이름]
$ touch ssh

이렇게 파일을 생성하시면 되고요, 내용은 없어도 됩니다.

그냥 파일이 존재하기만 하면 됩니다.


기타 설정 파일

말씀 드렸다시피, 아직 모르는 건 안 건드리기로 했지요.

궁금한 것은 아래 문서를 참조하시고, 더 알아보셔서 활용해보시기 바랍니다.

boot folder


실행 및 검증

그럼 이제 잘 되는지 해보겠습니다.

작업한 SD카드를 라즈베리파이에 꽂고, 전원을 인가합니다.

SSH로 접속해보겠습니다.

(제 라즈베리파이의 IP 주소는 192.168.0.203으로 할당되었습니다.)

$ ssh pi@192.168.0.203

The authenticity of host '192.168.0.203 (192.168.0.203)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.203' (ECDSA) to the list of known hosts.

pi@192.168.0.203's password: 

Linux raspberrypi 5.4.83-v7+ #1379 SMP Mon Dec 14 13:08:57 GMT 2020 armv7l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.

SSH is enabled and the default password for the 'pi' user has not been changed.
This is a security risk - please login as the 'pi' user and type 'passwd' to set a new password.

pi@raspberrypi:~ $

네, 잘 됩니다.

팁: WiFi 접속시 정해진 IP를 받도록 설정

WiFi 공유기(ipTime 등)의 MAC 주고 관리 메뉴에서 라즈베리파이 무선 인터페이스의 MAC 주소와 IP 주소를 바인딩해놓으면, WiFi 접속시 항상 그 IP를 부여받습니다. 유용한 설정이니 참고하십시오.


결과 및 소감: 귀찮음이 감소, 효율성이 증가

말할 것도 없이,

정말 편합니다.

이제 모니터, 키보드가 없어도 라즈베리파이를 초기화 할 수 있습니다.

아무쪼록 도움이 되었길 바랍니다.

감사합니다.



References