라즈베리파이와 PC에서 개발환경을 꾸미는 방법에는 여러가지가 있다.
보통 ssh, scp나 rsync를 사용하는데, 개인적으로는 RSYNC를 사용하는 방법을 선호한다.
ssh나 scp는 target board(라즈베리파이) 에 소스코드를 보관하고 원격에서 접속해서 소스코드를 수정하는 방식이고, rsync는 target board와 host pc 양쪽에 소스코드를 보관하면서 동기화 하는 방식이다.
(Target board) — (Network) — (Windows 10 PC)
PC에서는 보통 VS Code를 사용해서 editing을 하는데, extentions를 활용해서 개발환경을 더 쉽게 꾸밀 수 있다.
rsync를 선호하는 다른 이유는 예전 프로젝트에서 MIPS 아키텍쳐의 target 보드에서 개발했는데, VS Code extentions의 ssh 가 arm과 x86 계열만 지원했기 때문에 rsync에 익숙해져서이기도 하다.
준비
- Windows PC
- WSL(Windows Subsystem for Linux)
- VS Code
VS Code, WSL 설치
여기서 다룰 내용은 아님. Ubuntu 20-04를 설치함.
WSL에 sshpass 설치
PC에서 라즈베리파이로 rsync로 동기화 하려면 ssh를 기본적으로 사용한다. 때문에 라즈베리파이의 username/password 가 필요하다.
물론 인증서 기반으로 할 수도 있겠지만, VS Code에서 자동으로 동기화 하려니까 어떻게 하는지 모르겠다..
설치 방법은 WSL을 실행한 후에 아래 명령을 입력한다.
$ sudo apt install sshpass
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
sshpass
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.5 kB of archives.
After this operation, 30.7 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 sshpass amd64 1.06-1 [10.5 kB]
Fetched 10.5 kB in 1s (10.1 kB/s)
Selecting previously unselected package sshpass.
(Reading database ... 32169 files and directories currently installed.)
Preparing to unpack .../sshpass_1.06-1_amd64.deb ...
Unpacking sshpass (1.06-1) ...
Setting up sshpass (1.06-1) ...
Processing triggers for man-db (2.9.1-1) ...
VS Code에 sync-rsync extension 설치
VS Code에서 rsync를 사용하는 방법은 WSL이나 cygwin 을 설치해야한다.
위에서 WSL을 설치 했다.
settings.json 수정
sync-rsync 연결을 위해서 setting.json에 관련 내용을 추가한다.
{
"sync-rsync.shell": "sshpass -p \"raspberry\" ssh -p 22",
"sync-rsync.remote": "pi@<ip-address>:/home/pi/work/",
"sync-rsync.local": "/mnt/c/workspace/",
"sync-rsync.onSave": true,
"sync-rsync.onSaveIndividual": true,
"sync-rsync.exclude": [
".vscode",
".git",
".gitignore",
],
// 파일과 디렉토리의 권한 설정
"sync-rsync.chmod": "D2775,F664",
"sync-rsync.flags": "rlptv",
"sync-rsync.useWSL": true,
}
위에 처럼 설정하면 라즈베리파이의 "/home/pi/work/" 디렉토리와 PC의 "/mnt/c/workspace" 를 동기화 할 수 있다.
"/mnt/c/" 는 WSL에서 windows의 C 드라이브를 mount 해 놓은 것이다.
파일 동기화 하기
VS Code에서 작업 디렉토리 "/mnt/c/workspace" 를 오픈한 후에 "F1"을 눌러 command 창을 띄운다.
여기서 sync-rsync를 입력하면 몇가지 기능이 나온다.
- Sync Remote to Local: target(라즈베리파이)의 파일을 PC로 가져와 동기화 한다.
- Sync Local to Remote: PC의 파일을 target에 동기화 한다.
자동 동기화
파일을 수정하고 저장(Ctrl+S) 하면 자동으로 동기화가 진행된다.