// 루트 파일시스템이 마운트 되어있는 정보를 부트커맨드에서 확인
pi@pi14:~ $ cat /boot/cmdline.txt
console=serial0,115200 console=ttyS0 root=PARTUUID=f729bde1-02 rootfstype=ext4 fsck.repair=yes rootwait
// 실제로 루트 파일시스템을 마운트 시키는 경위에 대한 정보(file system table)
pi@pi14:~ $ cat /etc/fstab
proc /proc proc defaults 0 0
PARTUUID=f729bde1-01 /boot/firmware vfat defaults 0 2
PARTUUID=f729bde1-02 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that
우리는 간단한 실습용으로 이미 noobs라는 초보자용 파일시스템을 먼저 가져다가 우리 SD카드에 설치해보겠다.
(noobs라는 파일시스템은 이러한 실습을 위해 미리 다 만들어져 있는 작은 파일시스템이다.)
// noobs 다운로드 후 압축풀기
ubuntu@ubuntu14:~/pi_bsp/rootfs$ wget https://downloads.raspberrypi.org/NOOBS_latest
ubuntu@ubuntu14:~/pi_bsp/rootfs$ unzip -d noobs NOOBS_latest
ubuntu@ubuntu14:~/pi_bsp/rootfs$ cd noobs/os/RaspiOS_Full_armhf/
// 루트파일 시스템 압축 풀기
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ mkdir rootfs
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ tar xvfp root.tar.xz -C ./rootfs/
원래라면 noobs로 부팅해서 거기서 나오는 메뉴대로 아이디와 패스워드를 쳐주면서 계정을 만들어주는 과정이 필요하다.
(root.tar.xz가 루트 파일 시스템이다.)
우리는 저걸 압축을 풀어서 그대로 SD에 쓰는 것이 목표이다. 그렇기 때문에 압축을 풀고 나서 여기 안에서 아이디와 패스워드를 설정해주는 작업이 필요하다.
아래 경로의 파일로 들어간다. 우리는 2개의 파일을 수정해야 한다.
1. passwd (계정관리)
2. shadow (실제 비밀번호)
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc$ sudo vi passwd
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc$ sudo vi shadow
해당 2개의 파일의 맨 아래다가 pi 계정 정보를 만들어야 한다..
하지만 우리가 리눅스 계정 config 구조를 잘 모르기 때문에, 우분투에서 명령행으로 계정을 하나 만들어서 그 내용을 저길로 복붙하는 식으로 진행하겠다.
(그리고 복붙 후 필요없어진 우분투의 pi 계정은 나중에 지우겠다.)
// 우분투 명령행으로 새로운 리눅스 계정 만들기
ubuntu@ubuntu14:~$ sudo adduser pi
'pi' 사용자를 추가 중...
새 그룹 'pi' (1001) 추가 ...
새 사용자 'pi' (1001) 을(를) 그룹 'pi' (으)로 추가 ...
'/home/pi' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 암호:
새 암호 재입력:
passwd: 암호를 성공적으로 업데이트했습니다
pi의 사용자의 정보를 바꿉니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 []: kenGwon
방 번호 []: 202-1301
직장 전화번호 []: 02-1004
집 전화번호 []: 010-1004
기타 []: Gaebong
정보가 올바릅니까? [Y/n] y
// 제대로 만들어졌나 확인하기 (2개의 파일을 복붙해야 한다)
ubuntu@ubuntu14:~$ cat /etc/passwd
...
pi:x:1001:1001:kenGwon,202-1301,02-1004,010-1004,Gaebong:/home/pi:/bin/bash
ubuntu@ubuntu14:~$ sudo cat /etc/shadow
...
pi:$6$yyALgouDQvdKztGo$8J0SEdwaVuhO.g6ksteL0bGqF5ViGGDlRAtLe0IlCCIiAdB30kaQsn50FqGrCOBufd3iDilagdLOKDnI/tnby0:19772:0:99999:7:::
~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc/shadow
파일 중간에 있던 기존의 pi: 관련 shadow 줄을 삭제하고, 맨 아래다가 '우분투에서 생성하여 가져온 비밀번호 값'을 추가해준다.
'우분투에서 생성하여 가져온 비밀번호 값'
pi:yyALgouDQvdKztGo$8J0SEdwaVuhO.g6ksteL0bGqF5ViGGDlRAtLe0IlCCIiAdB30kaQsn50FqGrCOBufd3iDilagdLOKDnI/tnby0:19772:0:99999:7:::
원래는 ~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf/rootfs/etc/passwd
도 수정해줘야 하지만, 기존에 이미 만들어져있는 pi계정이 존재하여 생략했다.
결과적으로 우리는 우분투를 통해서 [ID] pi / [passwd] raspberry 라는 계정을 만들고 그로 인해 만들어진 비밀번호 해쉬값만 noobs의 루트 파일시스템 계정 정보에 추가해 준 것이다.
// 기존의 rootfs 확인
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 4023340 0 4023340 0% /dev
tmpfs 812816 2992 809824 1% /run
/dev/sda5 153188848 92134964 53199548 64% /
tmpfs 4064064 0 4064064 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4064064 0 4064064 0% /sys/fs/cgroup
/dev/loop0 128 128 0 100% /snap/bare/5
/dev/loop1 65536 65536 0 100% /snap/core20/2105
/dev/loop3 76032 76032 0 100% /snap/core22/1122
/dev/loop2 354688 354688 0 100% /snap/gnome-3-38-2004/119
/dev/loop4 12672 12672 0 100% /snap/snap-store/959
/dev/loop5 508928 508928 0 100% /snap/gnome-42-2204/141
/dev/loop6 358144 358144 0 100% /snap/gnome-3-38-2004/143
/dev/loop7 41472 41472 0 100% /snap/snapd/20671
/dev/loop10 47104 47104 0 100% /snap/snap-store/638
/dev/loop11 51072 51072 0 100% /snap/snapd/18357
/dev/loop9 93952 93952 0 100% /snap/gtk-common-themes/1535
/dev/loop8 65536 65536 0 100% /snap/core20/2182
/dev/loop12 75904 75904 0 100% /snap/core22/1033
/dev/sda1 523248 4 523244 1% /boot/efi
tmpfs 812812 20 812792 1% /run/user/1000
10.10.15.71:/srv/lect_nfs 153189376 100186112 45148160 69% /mnt/lect_nfs
/dev/sdb1 522232 131456 390776 26% /media/ubuntu/bootfs
/dev/sdb2 30082132 5435704 23098136 20% /media/ubuntu/rootfs
// 기존의 rootfs 삭제
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo rm -rf /media/ubuntu/rootfs/*
// noobs 파일시스템을 SD 카드로 복사 (-a: 원래의 permission 속성을 유지하면서 복사)
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo cp -ra rootfs/* /media/ubuntu/rootfs/.
noobs 파일시스템을 sudo cp로 그냥 복사하면 모든 파일의 권한이 root:root로 설정되기 때문에, pi라는 계정에 대한 파일들의 권한까지 전부다 root:root로 설정되어 버린다. 우리는 그것을 원하는 것이 아니다. 그렇기 때문에 반드시 copy를 할 때 -a 옵션을 추가해줘야 한다.
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo blkid
/dev/sda5: UUID="4f1e4240-474c-4e91-bf99-e62ec0463ba6" TYPE="ext4" PARTUUID="2395cde8-05"
/dev/loop0: TYPE="squashfs"
/dev/loop1: TYPE="squashfs"
/dev/loop2: TYPE="squashfs"
/dev/loop3: TYPE="squashfs"
/dev/loop4: TYPE="squashfs"
/dev/loop5: TYPE="squashfs"
/dev/loop6: TYPE="squashfs"
/dev/loop7: TYPE="squashfs"
/dev/sda1: UUID="BAA4-19F3" TYPE="vfat" PARTUUID="2395cde8-01"
/dev/loop10: TYPE="squashfs"
/dev/loop9: TYPE="squashfs"
/dev/loop11: TYPE="squashfs"
/dev/loop8: TYPE="squashfs"
/dev/loop12: TYPE="squashfs"
/dev/sdb1: LABEL_FATBOOT="bootfs" LABEL="bootfs" UUID="D735-E67D" TYPE="vfat" PARTUUID="f729bde1-01"
/dev/sdb2: LABEL="rootfs" UUID="b69628b0-b5d6-474c-9bed-477305ae01ad" TYPE="ext4" PARTUUID="f729bde1-02"
우리는 여기서 PARTUUID
값을 사용해야 한다.
(나의 경우 f729bde1
이다.)
ubuntu@ubuntu14:/media/ubuntu$ sudo vi rootfs/etc/fstab
위 파일을 열면 원래 아래와 같이 나온다.
그 파일을 나의 값으로 바꿔주고 저장한다.
ubuntu@ubuntu14:/media/ubuntu$ sudo vi bootfs/cmdline.txt
그리고 나서 원래의 UUID값과 동일한지 위 명령으로 파일을 열어 비교 확인해본다.
확인 결과 같다는 것을 알 수 있다.
우리는 지금 그냥 noobs 파일시스템을 그대로 덮어쓰기 한 상태이기 때문에 그냥 부팅하면 putty로 접근이 안된다. 그래서 아래 명령어를 쳐줘야 한다.
ubuntu@ubuntu14:~/pi_bsp/rootfs/noobs/os/RaspiOS_Full_armhf$ sudo touch /media/ubuntu/bootfs/ssh
noobs를 통한 루트파일시스템 올려보기 실습은 이걸로 끝이다.
라즈베리파이 켜지는지만 확인해보면 된다.
이상이다.