본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

Variants, 샌드박스, 스냅샷

~11 min · macports, concepts, internals

Level 0입문자
0 XP0/55 lessons0/16 achievements
0/80 XP to next level80 XP to go0% complete

MacPorts의 설계는 우연히 복잡해진 게 아니야. 편의 일부를 내어 주고 격리, 제어, 감사 가능성을 얻는 선택이며, 각 장치를 정확히 이해할 가치가 있어.

Variants는 가장 자주 만나는 개념이야. 각 port의 Portfile, 즉 Homebrew formula에 해당하는 파일에 선언된 빌드 시점 스위치지. +darwin+universal처럼 함께 쓸 수 없는 것도 있고, +python312 +lua +cscope처럼 여러 개를 겹쳐 쓸 수 있는 것도 있어. 설치에 사용한 variants 조합은 패키지 정체성의 일부가 되므로 vim +python312vim +ruby를 함께 설치하고 sudo port activate로 활성 버전을 바꿀 수 있어.

샌드박스 빌드. port를 컴파일할 때 모든 파일 시스템 접근을 추적하는 샌드박스 안에서 빌드를 실행해. 빌드 스크립트가 Homebrew와 충돌할 수 있는 /usr/local이나 개인 파일이 있는 ~/Documents에 손대면 샌드박스가 막아. 의존성을 빠짐없이 선언하도록 강제하므로 빌드 재현성도 높아져.

독립된 의존성. sudo port install nginx를 실행하면 MacPorts는 OpenSSL, pcre, zlib도 자체 경로에 설치하고 macOS 시스템 라이브러리를 쓰지 않아. 디스크를 더 쓰는 대신 macOS 업데이트가 MacPorts 환경을 깨뜨릴 가능성을 크게 줄여.

Snapshots는 대규모 macOS 업그레이드에 대비하는 장치야. 업그레이드 전에 sudo port snapshot --note "before sequoia"를 실행해. 새 macOS에 MacPorts를 다시 설치한 뒤 sudo port restore --snapshot "before sequoia"를 쓰면, 이전에 활성화되어 있던 모든 port를 variants까지 포함해 복원해. MacPorts에서 Brewfile과 가장 비슷한 기능이야.

Code

macOS 업그레이드 전 스냅샷·bash
# 지금 snapshot
sudo port snapshot --note "pre-sequoia-upgrade"

# snapshot 목록
port snapshot --list

# macOS 업그레이드 + 새 MacPorts install 후:
sudo port restore --snapshot "pre-sequoia-upgrade"
# 같은 variants 의 모든 active port 재설치.

External links

Exercise

'sudo port snapshot --note "first-snapshot"'을 실행하고 'port snapshot --list'로 결과를 확인해. 지금 복원할 필요는 없어. 스냅샷을 만드는 비용은 작지만, macOS 업그레이드로 설치 환경이 망가진 뒤 스냅샷이 없을 때 치르는 비용은 크다는 점을 기억해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.