개요
지난번에 크로스 컴파일러와 레이립을 이용해 리눅스 환경에서 윈도우 애플리케이션을 빌드하는 방법을 다뤘다.
그러나 완전한 원격 개발에 있어서 빌드 과정이 지나치게 복잡해 보이는 것은 사실이다. make 명령을 실행한 후, 로컬 pc에서 scp 명령으로 실행 파일을 받아온 뒤 직접 클릭해야 한다.
이에 이 과정을 자동화하는 배치 파일을 만들어 보자.
본론
골자는 다음과 같다.
ssh를 이용해 서버에 빌드를 명령scp로 빌드 결과물을 수신- 서버에 남아 있는 빌드 결과물을 삭제
- 수신된 실행파일을 실행
- 실행파일 종료시 해당 파일 삭제
한편 ssh 접속을 위해 RSA 비밀키 파일이 필요하기에 이를 임시로 생성할 필요가 있다.
unique한 파일 이름 생성
임시 비밀키와 임시 실행파일의 이름을 정해야 한다. 아무거나 했다간 기존 파일과 겹칠 우려가 있어 현재 시간을 이용해 정한다.
SET t=%time:~0,11%
SET t=%t::=%
SET t=%t:.=%
SET d=%date:~2,9%
SET d=%d:-=%
SET TmpKeyFile=TEMPKEY-%d%-%t%
SET TmpAppFile=TEMPAPP-%d%-%t%.exe
비밀키 저장
비밀키를 %TmpKeyFile%에 저장한다.
(
echo -----BEGIN OPENSSH PRIVATE KEY-----
echo b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
echo ...
echo -----END OPENSSH PRIVATE KEY-----
)>%TmpKeyFile%
서버와 실제 통신
ssh -i %TmpKeyFile% [DOMAIN] "cd project0 && make"
scp -i %TmpKeyFile% [DOMAIN]:project0/main.exe %TmpAppFile%
ssh -i %TmpKeyFile% [DOMAIN] "cd project0 && make clean"
DEL %TmpKeyFile%
START /wait %TmpAppFile%
DEL %TmpAppFile%
전체 배치 파일은 다음과 같다.
@echo off
setlocal
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SET t=%time:~0,11%
SET t=%t::=%
SET t=%t:.=%
SET d=%date:~2,9%
SET d=%d:-=%
SET TmpKeyFile=TEMPKEY-%d%-%t%
SET TmpAppFile=TEMPAPP-%d%-%t%.exe
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
(
echo -----BEGIN OPENSSH PRIVATE KEY-----
echo b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
echo ...
echo -----END OPENSSH PRIVATE KEY-----
)>%TmpKeyFile%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ssh -i %TmpKeyFile% [DOMAIN] "cd project0 && make"
scp -i %TmpKeyFile% [DOMAIN]:project0/main.exe %TmpAppFile%
ssh -i %TmpKeyFile% [DOMAIN] "cd project0 && make clean"
DEL %TmpKeyFile%
START /wait %TmpAppFile%
DEL %TmpAppFile%
endlocal
여담
굳이굳이 윈도우 소프트웨어 개발을 ARM 아키텍쳐 위의 Ubuntu 위에서 원격으로 해야 하는 건지는 옆구르기를 하면서 생각해도 잘 모르겠지만… 아무튼 이렇게 됐다. 언젠가 필요할 줄 어떻게 아는가.
상당히 재미있는 프로젝트였다.
그럼 다음에,
Gabriel-Dropout
at 07:31