모니터와 키보드 없이 라즈베리파이 초기화 하기
이현수 책임
문제: 매우 귀찮은 라즈베리파이 초기화
라즈베리파이를 초기화하려면 이런 절차가 필요합니다.
- SD 카드를 포맷
- Raspberry Pi OS 이미지(혹은 Ubuntu 등)를 SD카드에 쓰기
- SD카드를 라즈베리파이 보드에 삽입
- 라즈베리파이 보드에 붙은 HDMI 포트로 모니터에 연결하고, 키보드를 연결
- 라즈베리파이에 전원 인가 (Power On)
- 로컬 사용자로 Raspberry OS의 쉘에 연결 (혹은 GUI)
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
이렇게 파일을 생성하시면 되고요, 내용은 없어도 됩니다.
그냥 파일이 존재하기만 하면 됩니다.
기타 설정 파일
말씀 드렸다시피, 아직 모르는 건 안 건드리기로 했지요.
궁금한 것은 아래 문서를 참조하시고, 더 알아보셔서 활용해보시기 바랍니다.
실행 및 검증
그럼 이제 잘 되는지 해보겠습니다.
작업한 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를 부여받습니다. 유용한 설정이니 참고하십시오.
결과 및 소감: 귀찮음이 감소, 효율성이 증가
말할 것도 없이,
정말 편합니다.
이제 모니터, 키보드가 없어도 라즈베리파이를 초기화 할 수 있습니다.
아무쪼록 도움이 되었길 바랍니다.
감사합니다.