소스에서 빌드하면 설정된 저장소에 없는 버전이나 기능을 사용할 수 있지만, 통합, 업데이트 및 신뢰 관리 책임이 배포판에서 사용자에게 넘어옵니다. 요구 사항을 충족하는 지원 배포판 패키지가 있다면 그것을 우선 사용하십시오.
패키지 · 레슨 7
소스 코드 컴파일
소스에서 컴파일한 소프트웨어를 검증, 설정, 빌드, 테스트, 스테이징 및 추적하는 방법을 알아봅니다.
빌드 전에 검증하고 읽기
인증된 업스트림 릴리스 경로에서 소스를 구하십시오. 신뢰할 수 있는 경로를 통해 서명 또는 체크섬을 검증하고, 아카이브를 검사한 뒤 비특권 스테이징 디렉터리에 추출하십시오. README, INSTALL, SECURITY 및 프로젝트 빌드 문서 같은 파일을 읽으십시오.
빌드 지침은 실행 가능한 코드입니다. configure 스크립트, 빌드 정의, 테스트 또는 컴파일러 플러그인은 사용자 권한으로 임의 명령을 실행할 수 있습니다. 신뢰할 수 없는 소스는 빌드하지 말고, 빌드 자체를 sudo로 실행하지 마십시오.
일반적으로 sudo 없이 컴파일 단계를 실행해야 하는 이유는 무엇입니까?
빌드 요구 사항 설치하기
데비안 계열 개발 시스템에서는 다음 명령을 흔히 시작점으로 사용합니다.
$ sudo apt install build-essential
이 명령은 기본적인 컴파일러와 빌드 도구를 설치하지만 모든 프로젝트에 필요한 모든 의존성을 제공하지는 않습니다. 프로젝트에는 언어 런타임, 생성기, 빌드 시스템 도구, 개발 헤더 또는 정확한 라이브러리 버전이 추가로 필요할 수 있습니다. 신뢰할 수 있는 저장소에서 요구 사항을 설치하고 빌드 의존성과 런타임 의존성을 구분하십시오.
데비안 계열 시스템에서 build-essential이 제공하는 것은 무엇입니까?
설정 및 빌드
전통적인 Autoconf 방식 프로젝트에서는 다음 명령을 사용합니다.
$ ./configure --prefix=/usr/local
$ make
configure는 환경을 확인하고 선택한 옵션에 따라 빌드 파일을 생성합니다. make는 일반적으로 Makefile에 있는 의존성과 명령 규칙을 읽고 요청된 대상을 만듭니다.
이 순서가 모든 프로젝트에 적용되는 것은 아닙니다. 프로젝트는 CMake, Meson, Ninja, 언어별 도구 또는 사용자 정의 스크립트를 사용할 수 있습니다. 익숙하다는 이유만으로 ./configure를 실행하지 말고 정확한 릴리스의 문서를 따르십시오. 빌드 시스템이 지원한다면 트리 외부 빌드 디렉터리를 사용해 생성 파일을 분리할 수 있습니다.
전통적인 작업 흐름에서 make는 무엇을 합니까?
설치 전에 테스트하기
다음과 같이 프로젝트 문서에 지정된 테스트 대상을 실행합니다.
$ make check
실제 대상은 test, check 또는 별도의 명령일 수 있습니다. 테스트하지 않은 결과물을 설치하지 말고 실패 원인을 조사하십시오. 테스트에는 네트워크 접근, 서비스, 특수 하드웨어 또는 격리가 필요할 수 있습니다. 다른 빌드 코드와 마찬가지로 실행 전에 내용을 검토하십시오.
문서에 명시된 테스트 모음이 실패하면 어떻게 해야 합니까?
설치 스테이징 및 추적
sudo make install은 네이티브 패키지 데이터베이스에 기록하지 않고 파일을 시스템 접두사에 직접 복사할 수 있습니다. 제거 대상은 선택 사항이며 불완전할 수 있고, 나중의 업그레이드가 파일을 덮어쓰거나 고아 파일로 남길 수도 있습니다.
다음과 같은 제어 가능한 방법을 우선 사용하십시오.
- 배포판 패키징 도구로 공식 네이티브 패키지 빌드
- 정책이 허용한다면
/usr/local처럼 명확히 분리된 접두사에 설치 DESTDIR같은 지원 메커니즘으로 임시 패키징 루트에 파일 스테이징- 적절한 경우 비특권 사용자 접두사, 격리 환경 또는 컨테이너 사용
checkinstall은 일부 make install 작업 흐름에서 단순 패키지를 만들 수 있지만 범용 도구가 아니며, 검토된 배포판 수준의 패키지 제작법을 대신하지도 않습니다. 이를 “항상” 적용하는 규칙으로 취급하지 마십시오. 권한 있는 복사를 수행하기 전에 스테이징된 파일 목록, 소유권, 권한, 경로 및 제거 또는 업그레이드 계획을 검사하십시오.
지원되는 DESTDIR 스테이징 설치의 목적은 무엇입니까?
폐기 가능한 환경에서 리눅스 소스 코드로 소프트웨어 빌드하기를 실습해, 실험용 파일을 운영 시스템에 섞지 않고 작업 흐름을 익혀 보십시오.
레슨 완료
소스 코드 컴파일 완료
이제 소스 빌드를 제어 가능한 소프트웨어 공급 작업 흐름으로 다룰 수 있습니다.
소스를 인증하고 그 지침을 실행 가능한 코드로 간주해 검토합니다.
신뢰하는 저장소에서 명시된 빌드 요구 사항을 설치합니다.
불필요한 권한 없이 설정, 빌드 및 테스트합니다.
시스템에 설치하기 전에 결과물을 스테이징하고 검사합니다.
네이티브 패키징 또는 의도적으로 격리한 접두사로 설치 파일을 추적합니다.