본문 바로가기

개발

Linux 빌드 환경 구성하기 - Ubuntu 22.04에서 SVN 보안 문제 해결하기

들어가며

진행 중인 프로젝트는 Qt Framework를 사하며, 임베디드 업체 특성상 기존에는 아래 두 가지 빌드 환경을 지원하고 있었다.

  • Windows PC : MinGW-32로 컴파일
  • Embedded Linux Device (ARM) : gcc-linaro-arm-linux-gnueabihf로 크로스 컴파일

이번에 고객사 요청으로 LinuxPC(x86-64) 환경에서도 배포가 필요해졌고,

이에 따라 새로운 VirtualBox 환경을 구성하게 되었다.

 

또한 기존 임베디드 Linux 환경이 Ubuntu 18.04 기반이라 너무 오래된 상태였기 때문에,

Ubuntu 22.04로 환경을 올리면서 겪은 이슈와 해결 과정을 정리해 보려 한다.


VirtualBox 환경 구성목표

☐ Ubuntu 22.04 사용 (고객사 사용 비중 고려)
☐ 기존 SVN 기반 버전 관리 유지
    * Windows : TortoiseSVN, Linux : RabbitVCS
x86-64 Linux PC 빌드 가능
☐ ARM Embedded 크로스 컴파일 가능

문제 발생: SVN 서버의 TLS / OpenSSL 정책 충돌

Ubuntu 22.04 및 Qt 설치는 비교적 수월했지만,

apt install subversion 이후 SVN 서버 연결 단계에서 문제가 발생했다.

 

원인은 명확했다.

  • 사내 SVN서버는 TLS 1.0 / 1.1만 지원
  • Ubuntu 22.04는 OpenSSL 3 기반
  • OpenSSL 3에서는 TLS 1.x가 기본적으로 비활성화
환경 TLS 1.0 TLS 1.1 TLS 1.3
Ubuntu 18.04 (OpenSSL 1) O O X
Ubuntu 22.04 (OpenSSL 3) X (보안상 문제) X (보안상 문제) O

이로 인해 Ubuntu 22.04에서 SVN 서버에 접근할 수 없었다.


[시도 1]: chroot(container)를 이용한 환경 분리

처음에는 Docker를 고려했지만,

Ubuntu 환경에서 바로 사용할 수 있는 chroot를 이용해 해결을 시도했다.

mkdir -p ~/chroot/svn19
sudo debootstrap bionic ~/chroot/svn19/root http://archive.ubuntu.com/ubuntu
sudo chroot ~/chroot/svn19/root /bin/bash

위 명령어를 실행하면 프롬프트가 바뀌면서, chroot 환경 안에서 Ubuntu 18.04가 실행된다.

apt update
apt install -y subversion
svn --version #version 1.9.x

여기서 SVN을 설치해 TLS 1.x를 사용하는 SVN 서버에 연결할 수 있었다.

다만, 이렇게 쓸 경우 매번 chroot로 진입해야 하고 RabbitVCS 같은 GUI 플러그인을 쓸 수 없어 다른 방법을 고민해 봤다.


[해결책]: VirtualBox 공유 폴더 활용

고민 끝에 "SVN은 파일 관리만 되면 충분하다"는 결론에 도달했다.

그래서 Windwos에서 SVN을 관리하고, Linux에서는 공유 폴더를 통해 소스만 사용하는 방식을 선택했다.

VirtualBox 공유 폴더 설정

먼저 공유폴더 기능을 사용하기 위해 VirtualBox를 다음과 같은 방법으로 설정한다.

Ubuntu22를 실행 후 "CD 이미지 삽입" 을 선택한다.

ll /dev/cd*
mount -r /dev/cdrom /media
/media
media/VBoxLinuxAdditions.run --nox11	//install

위 명령어를 통해 CD를 media폴더에 연결(mount)할 수 있다.

다음에 리눅스를 종료하고 VirtualBox의 장치-공유 폴더-공유 폴더 설정으로 Windows와 Linux폴더를 연결한다.

Windows의 Svn

 

Windows의 SVN Repository 폴더(Minerva)를 Linux의 /home/[Username]/Minerva 폴더와 연결했다.

df -h # 마운트 된 파일시스템 확인
cd /home/vboxuser/Minerva # 권한 오류 발생 (Permission denied)

Linux를 부팅하고 공유폴더에 접근한다.

마운트 된 폴더는 root권한을 가지므로, 아래 명령어를 User권한으로 실행하면 권한 오류가 발생한다.

sudo gpasswd -a vboxuser vboxsf # vboxsf그룹에 사용자계정 추가
# 재부팅 후 그룹 확인
groups

이후 공유 폴더에 정상 접근 가능해졌다.


Linux Qt 빌드 및 버전 관리 흐름

공유 폴더 설정 후 Linux에서 Qt 프로젝트를 바로 열 수 있었다.

sudo apt install make

 

make를 통해 Linux PC용으로 빌드하고 file 명령어를 통해 확인할 수 있다.

file [실행파일]
ELF 64-bit LSB pie executable, x86-64, dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2...

이 방식의 장점

  • Linux에서 x86-64 빌드 가능
  • Linux에서 코드 수정 → Windows에서 SVN 커밋
  • 하나의 Repository로 Windows / Linux 동시 작업
  • SVN 서버 보안 정책 변경 없이 문제 해결

정리

 

  • Ubuntu 22.04 + OpenSSL 3 환경에서는
    구형 TLS를 사용하는 사내 SVN 서버와 직접 연결이 어렵다
  • chroot는 기술적으로 가능하지만 개발 효율이 떨어진다
  • VirtualBox 공유 폴더 + Windows SVN 관리 방식이
    현재 프로젝트 상황에서는 가장 현실적인 대안이었다

 

결과적으로 새로운 Linux PC 빌드 환경을 추가하면서 기존 개발 흐름을 크게 바꾸지 않고 문제를 해결할 수 있었다.

또한 Windows에서 checkout한 내용이 Linux에도 바로 반영되어 코드관리가 더욱 쉬워진 듯하다.

☑ Ubuntu 22.04 사용 (고객사 사용 비중 고려)
☑ 기존 SVN 기반 버전 관리 유지
    * Windows : TortoiseSVN, Linux : RabbitVCS
x86-64 Linux PC 빌드 가능
☐ ARM Embedded 크로스 컴파일 가능
도움받은 글
https://bingo6681.tistory.com/78
https://mentha2.tistory.com/189#google_vignette