본문 바로가기

Anything

Raspberry Pi 3 최초 설정하기!


  14년도 초에 라즈베리 파이 초기 모델을 가지고 놀았던 기억이 나서 이번에 3를 구매하게 되었습니다. 뭐, 블루투스랑 와이파이가 내장되서 편해진듯 합니다. USB 동글 안꼽아도 블루투스, 와이파이가 된다니! 흐흐!! USB as Serial TTY 기능이 있으면 더욱 좋겠지만 그런거 따위 있을리가 없죠. ㅋ HDMI를 지원하는 모니터는 있는데 여분 키보드가 없어서 애를 좀 많이 먹었는데 이걸 안해도 되게끔 하는 방법을 소개드리겠습니다.


  저는 라즈베리 파이3 최초 셋팅할 때 블루투스 키보드는 있는데, 그 블로투스 페어링을 시켜줄 방법이 없는 황당한 경험을 했습니다. 아무 생각없이 미니미니한 블루투스 키보드를 "우오~~ 이거 귀여운데? 이거 사야겠다" 이러고 샀죠... 아무 생각없이...ㅋㅋ CLI도 GUI도 쓸 수 없다는 걸 잊었습니다. 


  허허.... 허허... 자, 시작합니다.


1. Raspbian Stretch Lite (without Desktop Environment) 설치하기

1) 최초 설치하기 (dd)

   우선, 8 GB 이상 되는 MicroSD 카드(조금 내려가시면 MicroSD 카드 자체의 문제를 다룹니다)를 준비하시고 라즈베리파이 공식 홈페이지 (https://www.raspberrypi.org) 에서 라즈비안 이미지를 받으세요.



  DE쯤 없어도 상관없으니 Lite를 받아줍니다. 그리고 Ctrl + Alt + T 키를 눌러 콘솔을 뛰우시고 "dmesg -w"명령으로 MicroSD카드를 찾습니다.



  흠, 저는 mmcblk0, 그러니까 /dev/mmcblk0 가 MicroSD 카드네요. 뭔지 모르겠다면 뽑았다가 다시 꼽으면 됩니닷! ㅎㅎ


jaehoon@jaehoon ~ $ unzip 2017-09-07-raspbian-stretch-lite.zip

jaehoon@jaehoon ~ $ sudo dd if=~/2017-09-07-raspbian-stretch-lite.img of=/dev/mmcblk0 bs=4M conv=fsync

 이거, 다운받은 zip파일을 풀때 주의할 점이, 풀기전엔 340 MB정도인데, 알맹이가 1.8 GB 정도입니다. ㅡㅡ;ㅋ 요롷게 5분 ~ 10분정도 유튜브 보다가 오시면 다 쓰여져 있을겁니다. (fsync 옵션 주는거 필수)

2) 부팅이 안될때 (mkfs)

  간혹 여러번 썻다 지웟다를 반복한(혹은 다른 파일시스템 이미지를 쒸운적이 있는) MicroSD 카드의 경우 찌꺼기가 많이 남아있을 수 있습니다. 그게 원인이 되서 부팅이 안되는 경우도 발생하는데, 이 경우엔 fdisk 유틸로 MicroSD안에 만들어져 있는 파일시스템을 다 지워주시고 mkfs를 이용해서 ext4로 밀어주시면 됩니다.

jaehoon@jaehoon ~ $ sudo fdisk /dev/mmcblk0

Command (m for help): p --> 파티션 목록

Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 sectors

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x00000000


Device         Boot Start       End   Sectors  Size Id Type

/dev/mmcblk0p1      32768 124735487 124702720 59.5G  7 HPFS/NTFS/exFAT


Command (m for help): d  --> 삭제 (다지우세요)

(...생략...)

Command (m for help): w --> 변경사항 적용

이후에 mkfs로 ext4로 포멧시켜줘야합니다. (하기전에 MicroSD 카드를 뽑았다 꼽으세요.

jaehoon@jaehoon ~ $ sudo mkfs -t ext4 /dev/mmcblk0

그리고 나서

jaehoon@jaehoon ~ $ sudo dd if=~/2017-09-07-raspbian-stretch-lite.img of=/dev/mmcblk0 bs=4M conv=fsync

다시 써주시면 됩니다.




3) MicroSD 자체의 문제

  라즈베리 파이 3에서는 이런 경우는 정말 드물다고 합니다. 근데 라즈베리파이 1에서는 많았죠. 제가 몸소 헛짓이라는 걸 해봤거든요 ㅡㅡ; SD 카드엔 기본적으로 Speed Class라는 분류가 있습니다. (https://kb.sandisk.com/app/answers/detail/a_id/2520/~/sd%2Fsdhc%2Fsdxc-specifications-and-compatibility 참고)

  그리고, eLinux 위키에 올라온 자료도 있지요. (https://elinux.org/RPi_SD_cards#Working_.2F_Non-working_SD_cards 참고)

  MicroSD가 이런 경우에 해당된다면 새로 하나 구매하시는게....


2. Partition Resizing 돌려주기

  디스크 이미지를 쓰고나서 꼽고 한 2분? 넉넉하게 5분정도 기다렸다가 전원을 빼세요. 정확히는 부팅이 끝나고 "Login:" 메시지를 보고 꺼야됩니다. 부팅 초기에 Resizing Rootfs라는 TUI 다이얼로그가 하나 떠서 잠깐 기다리라고 합니다. 그게 끝나고 나서 전원을 내리면 되는겁니다. 보통 1분도채 안걸리는데 만약을 대비해서 5분 정도 대기해주시는게 안전합니다. (로그인 메시지가 떳으면 관계없이 그냥 끄세욧!)

  이게 실패하더라도 파티셔닝 툴로 사이즈를 조정해주면 되니 크게 신경쓰지 마세요. (두번째 파티션입니다. 첫번째 파티션은 /boot 용으로 쓰이거든요)


3. 설정을 해봅시닷!

1) SSH 접속 환경 구성하기

  MicroSD를 라즈베리파이에서 분리합니다. PC에 다시 꼽고 mmcblk0p2(PC나 환경, 리눅스 배포본마다 다른 이름으로 인식될 수 있습니다. 주의하세요)를 마운팅해줍니다. (자동 마운팅되는 경우도 있는데 그런 경우는 2번 째 파티션, rootfs 구조가 구성되어 있는 쪽으로 들어가시면 됩니다)



jaehoon@jaehoon ~ $ sudo -s

jaehoon ~ # mount -t ext4 /dev/mmcblk0p2 ~/raspberian

jaehoon ~ # cd /raspberian/etc

jaehoon ~/raspberian/etc # echo "ifconfig eth0 down" > ./rc.local.dbg

jaehoon ~/raspberian/etc # echo "ifconfig eth0 192.168.10.10" >> ./rc.local.dbg

jaehoon ~/raspberian/etc # echo "ifconfig eth0 up" >> ./rc.local.dbg

jaehoon ~/raspberian/etc # echo "service ssh start" >> ./rc.local.dbg

jaehoon ~/raspberian/etc # chmod +x ./rc.local.dbg

jaehoon ~/raspberian/etc # nano ./rc.local

#!/bin/sh -e

(.... 중략 ...)

/etc/rc.local.dbg & # 여기다가 이걸 넣어줍니다.

exit 0


  이거 해줄때 진짜 중요한건 ">>" 요놈입니다. ">"랑 ">>"는 엄연히 다른 놈들입니다. ">"는 Truncate를 한 뒤에 내용을 넣는 놈이고 ">>"는 Appending을 수행합니다. 주의하세욧! 일단 MicroSD 카드 마운팅시켜서 해줘야되는 작업은 끝났습니다. 라즈베리파이에 MicroSD카드 꼽으시고 랜케이블로 PC랑 라즈베리파이랑 연결해주시고 PC쪽 NIC카드에도 192.168.10.1로 아이피 잡아주시면 192.168.10.10으로 ssh 접속후 작업할 수 있습니다.





2) SSH 접속 후 유저 만들기

  기본 유저와 패스워드으로 로그인합니다. (pi / raspberry)


  그리고 나서 

pi@raspbian ~ $ sudo -s

pi@raspbian ~ # echo "set noconvert" >> /etc/nanorc

  이렇게 nano 에디터의 DOS/Mac 스타일 캐리지 리턴 삽입을 꺼줘야됩니다. 안그러면 개행문자가 "\r\n" 형태로 들어가서 정상적으로 동작하지 않을 수 있습니다.

pi@raspbian ~ $ sudo -s

pi@raspbian ~ # adduser jaehoon        # 유져 추가

pi@raspbian ~ # echo "jaehoon ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/011_jaehoon-nopasswd   # sudo비번 안물어보도록...

pi@raspbian ~ # userdel pi -r                   # 유저 삭제

pi@raspbian ~ # nano /etc/passwd

......

jaehoon:x:1001:1001.....  (마지막 줄에 생겨난 새 유져의 UID와 GID를 1000:1000으로 바꿔줍니다)

pi@raspbian ~ # nano /etc/groups

....

jaehoon:1001.... (그룹도 마찬가지로 1000으로 바꿔주세요)

pi@raspbian ~ # chown jaehoon:jaehoon /home/jaehoon -R

  기본 유저 pi를 없앴습니닷! 흐흐 그후 SSH 끊었다가 새 계정으로 로그인하시면 되겠습니다.


주의: 바꾸고나서 재접해야합니닷! 왜냐하면...

이거 때문입니다.


3) 호스트 네임 바꾸기

    호스트 네임을 바꾸기 전에, 호스트 파일에 이름먼저 추가(/etc/hosts 파일)해주고 /etc/hostname 파일을 바꾸고 hostname 명령을 수행해줘야됩니다.

jaehoon@raspbian ~ $ sudo -s 

jaehoon@raspbian ~ # echo "127.0.1.1    jaehoon-rasp" >> /etc/hosts

jaehoon@raspbian ~ # echo "jaehoon-rasp" > /etc/hostname

jaehoon@raspbian ~ # hostname -F /etc/hostname

  그리고 나서 /etc/hosts 파일을 nano 에디터로 열어서 raspbian 을 제거해주시고 재부팅(ssh 재접만 시켜도 됩니다) 시키면 되겟습니다.

4) 알록달록한 터미널

  sudo -s로 루트쉘로 들어갔을 때 라즈베리 파이 쉘이 너무 밋밋했었습니다. 검은색과 휜색? ㅋㅋ 그걸 바꾸려면 /root/.bashrc를 수정해주시면 됩니다.

jaehoon@raspbian ~ $ sudo nano /root/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.


# Note: PS1 and umask are already set in /etc/profile. You should not

# need this unless you want different defaults for root.

# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '

# umask 022


# ----------------- 여기서부터 복사해서 넣으세요...!

# set a fancy prompt (non-color, unless we know we "want" color)

case "$TERM" in

    xterm-color|*-256color) color_prompt=yes;;

esac


# uncomment for a colored prompt, if the terminal has the capability; turned

# off by default to not distract the user: the focus in a terminal window

# should be on the output of commands, not on the prompt

force_color_prompt=yes


if [ -n "$force_color_prompt" ]; then

    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then

        # We have color support; assume it's compliant with Ecma-48

        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such

        # a case would tend to support setf rather than setaf.)

        color_prompt=yes

    else

        color_prompt=

    fi

fi


if [ "$color_prompt" = yes ]; then

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \$\[\033[00m\] '

else

    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

fi

unset color_prompt force_color_prompt


# You may uncomment the following lines if you want `ls' to be colorized:

export LS_OPTIONS='--color=auto'

eval "`dircolors`"

# alias ls='ls $LS_OPTIONS'

# alias ll='ls $LS_OPTIONS -l'

# alias l='ls $LS_OPTIONS -lA'

#

# Some more alias to avoid making mistakes:

# alias rm='rm -i'

# alias cp='cp -i'

# alias mv='mv -i'


alias l='ls --color=auto'

alias ll='ls -al --color=auto'

alias la='ls -a --color=auto'

alias ls='ls --color=auto'


요롷게 만들어주시면 알록달록하게 나옵니닷.



흐흐... 오늘은 여기까지 포스팅하고, 다음번엔 디버깅 쉘 같은걸 하나 만들어보겠습니다.