보통 회사에서는 개발에 필요한 패키지들을 자유롭게 다운로드 받으면서 환경을 세팅할 수 있다.
하지만 군 사업이나 일부 회사에 납품하는 제품일 경우 지정된 곳의 폐쇄망에서 개발을 진행해야 한다.
이 경우 인터넷을 아예 사용할 수 없기 때문에 개발에 필요한 패키지들은 미리 준비해서 들어가야 한다.
이 글은 여러 OS (Windows, Ubuntu, CentOS, FreeBSD, Solaris) 오프라인 환경에서 Rust 개발환경을 세팅했던 경험을 기록하고자 한다.
1. Rust 설치
Rust는 지원 OS의 Tier를 나누고 있다. Windows, Linux (Ubuntu, CentOS) 는 Tier 1 이기 때문에 rust 설치 툴을 공식적으로 지원하고 있다. 반면 Unix인 FreeBSD 와 Solaris는 Tier 2 이기 때문에 공식 지원이 OS마다 다른데, FreeBSD는 rust 설치 툴을 제공해주고 Solaris는 제공하지 않는다.
온라인 환경에서 설치할 때는 rustup 을 설치하면 끝나지만, 우리는 오프라인 환경에서의 설치를 논하고 있기에 Installer는 다운로드 받는 것부터 시작하자. Rust의 Installer 제공 사이트에서 Installer를 다운로드받아 설치를 진행한다. 타깃 platform에 맞게 stable 버전 Installer 중 Windows는 msi 파일을, Linux/Unix는 tar.xz 파일을 다운로드 받아 오프라인 OS 에서 실행해주면 된다.


설치가 완료되고 "rustc --version", "cargo --version" 명령을 실행했을 때 버전 값이 출력되면 정상 설치가 되었음을 알 수 있다.

Installer가 지원되지 않는 Solaris 11 같은 경우는 github에서 solaris용 rust 를 친절하게 제공해주는 곳이 있어 이 곳의 튜토리얼을 따라 진행했다.
버전은 좀 다를 수 있지만 튜토리얼을 따라 온라인 Solaris 환경에서 rust를 설치한다.
RUST_BOOTSTRAP=~/rustc-1.85.0/bin ./build.sh
이렇게 설치를 진행하면 ~/ 경로에 .rust_solaris/ 폴더가 생성된다.
이 폴더째로 오프라인 환경으로 옮기고 옮긴 위치를 PATH 변수에 추가해주면 된다.
PATH=/export/home/test/.rust-solaris/rustc-1.85.0/bin:$PATH
2. vendor 생성 (cargo vendor)
Rust 프로젝트를 개발하다보면 3rd party crate들을 사용하게 된다. 오프라인 환경에서는 이 crate들을 다운로드 받을 수 없기 때문에 온라인 환경에서 미리 다운로드 받아놓아야 한다. Rust의 편한 점 중 하나는 이미 이런 기능을 하는 cargo 명령을 구현해주었다는 점이다.
Rust 프로젝트의 루트에서 "cargo vendor" 를 입력하면 현재 프로젝트에서 사용중인 모든 3rd party crate들을 vendor라는 폴더 안에 다운로드 받게 된다.

간혹가다가 rust crate의 feature에 명시적으로 vendor를 사용하겠다고 지정해야 하는 경우가 있다.
나의 경우엔 swagger crate가 그러했는데 vendor 형태로 swagger crate를 오프라인 환경에 가져갔음에도 실행이 되지 않았던 것이다.
찾아보니 아래와 같이 vendor feature 를 따로 지정해 주어야 되었었다.

3. 오프라인 빌드 (cargo build --offline)
자, vendor 파일까지 준비했으니 이제 오프라인 환경에서 Rust 프로젝트의 빌드를 진행해보자.
우선 scp 등을 이용해 온라인에서 준비한 (vendor 폴더가 포함된) Rust 프로젝트를 오프라인으로 옮긴다.
Rust 프로젝트의 루트 경로에서 ".cargo/config.toml" 파일을 생성한다. 폴더가 없으면 폴더도 생성한다.
아래와 같이 '오프라인 환경에서 vendor 폴더를 쓰겠다' 라는 내용을 작성한다.

마지막으로,
"cargo build --offline" 명령을 프로젝트 루트 경로에서 실행해주면 Rust 프로젝트의 오프라인 빌드가 진행된다.

'Development Experience > Rust' 카테고리의 다른 글
Rust Cross Compile (0) | 2025.03.18 |
---|