소스에서 빌드하는 것과 설치 패키지를 사용하는 것의 차이점은 무엇입니까?


46

궁금한 점이 있습니다. 무언가를 설치할 때 설치 실행 파일을 두 번 클릭하는 쉬운 방법이 있고 다른 한편으로는 소스에서 빌드하는 방법이 있습니다.

소스 번들을 다운로드하는 후자는 실제로 번거 롭습니다.

그러나이 두 방법의 근본적인 차이점은 무엇입니까?

답변:


44

모든 소프트웨어는 프로그램 이며 소스 패키지 라고도 합니다 . 따라서 시스템에서 실행 하려면 모든 소스 패키지를 먼저 빌드 해야합니다.

바이너리 패키지는 이미에서 구축하는 하나 의 소스 많은 수의 사용자가 설치하고 사용할 수 있도록 소프트웨어에서 제공하는 일반 기능 및 매개 변수 사람.

이진 패키지는 설치쉽습니다 .
그러나 업스트림 패키지의 모든 옵션이 없을 수도 있습니다 .

소스에서 설치하려면 소스 코드를 직접 빌드해야합니다. 즉, 종속성을 직접 관리해야합니다. 또한 패키지의 모든 기능을 알고 있어야 패키지를 적절하게 빌드 할 수 있습니다.

소스에서 설치의 장점 :

  • 최신 버전을 설치할 수 있으며 보안 패치이든 새로운 기능이든 항상 업데이트 상태를 유지할 수 있습니다.
  • 필요에 따라 설치하는 동안 기능을 정리할 수 있습니다.
  • 마찬가지로 바이너리에서 제공되지 않을 수있는 일부 기능을 추가 할 수 있습니다.
  • 원하는 위치에 설치하십시오.
  • 일부 소프트웨어의 경우 적절한 설치를 위해 하드웨어 특정 정보를 제공 할 수 있습니다.

간단히 말해서 소스 에서 설치 하면 많은 노력이 필요한 동시에 많은 사용자 정의 옵션이 제공 되지만 바이너리 에서 설치하는 것이 더 쉽지만 원하는대로 사용자 정의 할 수 없습니다 .

업데이트 : 아래 주석에 보안 관련 인수 추가. 그렇습니다. 바이너리로 설치하는 동안 소스 코드의 무결성이없는 것은 사실입니다. 그러나 바이너리를 어디서 얻었는지에 달려 있습니다. 새로운 프로젝트의 바이너리를 얻을 수있는 신뢰할 수있는 출처가 많이 있습니다. 유일한 부정적인 것은 시간 입니다. 업데이트 바이너리 또는 새 프로젝트가 신뢰할 수있는 리포지토리에 표시되는 데 시간이 걸릴 수 있습니다.

그리고 소프트웨어 보안에 관해 무엇보다도 아래 의견에서 Joe 가 제공 한 벨랩에서이 재미있는 페이지 를 강조하고 싶습니다 .


4
소스는 또한 시스템에 최적화 된 방식으로 컴파일 할 수 있습니다. 컴파일 된 항목은 시스템에 "특정"하고 백업 시스템에서는 작동하지 않을 수 있으므로 좋지 않습니다. 소스, 다시 컴파일 할 수 있습니다 (시간이 있다면)
Olivier Dulac

"백업 시스템"이 있는지 여부에 따라 다릅니다. 연구를하고 있다면 일반적으로 그렇지 않습니다.
h22

1
하이퍼 파라노이드의 경우 소스에서 설치할 때 얻을 수있는 장점 중 하나는 보안과 코드를 검토 할 수있는 기능입니다. 알 수없는 수정 사항이있는 바이너리 (처음 소스를 신뢰한다고 가정).
LawrenceC

6
@ultrasawblade-당신은 분명히 편집증이 아닙니다! <G>-자세한 내용은 cm.bell-labs.com/who/ken/trust.html 을 참조하십시오 .
Joe

32

소스 파일에는 개발자가 선택한 언어 (C, C ++, Python 등)로 작성된 원래 코드가 포함되며 일반적입니다. 배포판이나 운영 체제에 따라 다르지 않습니다.

패키지 (예 : RPM 또는 DEB)는 특정 배포판에 대해 미리 준비된 이진 실행 파일 (또는 해석 된 스크립트 등)입니다. 컴파일 (필요한 패치 추가 등), 실제 컴파일, 배포판 특정 구성 파일 생성, 사전 및 사후 설치 스크립트 생성 등을위한 소스 준비 작업은 모두 패키지 관리자가 수행합니다.

다시 말해, 모든 당나귀 작업은 패키지로 이루어졌지만, 소스에서 설치하기로 선택한 경우 직접 수행해야합니다.

거의 모든 경우에 패키지를 사용하는 것이 훨씬 쉽습니다.

  • 설치가 훨씬 쉽습니다.
  • 그들은 당신의 배포판과 함께 작동하도록 특별히 설계되었습니다
  • 배포자 특정 버그를 수정하기 위해 패키지 관리자가 패치하기도합니다.
  • 패키지 관리자가이를 제거합니다
  • 패키지 관리자가 모든 종속성을 관리합니다
  • 패키지 관리자가 업데이트를 처리합니다
  • 시스템에 개발자 도구 (컴파일러, make 등)를 설치할 필요가 없습니다.

그러나 때때로 패키지 된 버전이 이전 버전이거나 더 나쁜 경우에는 패키지 된 버전이 없습니다. 이 경우 유일한 옵션은 자신을 컴파일하는 것입니다. 그렇다면 다음을 고려해야합니다.

  • 시스템에 모든 개발자 도구를 설치해야합니다
  • 업데이트 확인 및 재 컴파일을 담당합니다.
  • dev패키지를 포함하여 모든 종속성이 설치되어 있는지 확인해야 합니다. 많은 종속성이 있을 수 있습니다.
  • 배포판에서 예상대로 작동하지 않으면 문제를 디버깅해야 할 수도 있습니다.

추가 노력을 기꺼이한다면 소스에서 컴파일하면 다음과 같은 이점이 있습니다.

  • 사용 가능한 최신 버전에 액세스
  • 성능 / 안정성을 위해 컴파일 프로세스를 최적화하는 옵션
  • 향유!

일부 배포판의 사전 빌드 패키지는 설치 및 실행할 준비가 된 바이너리 실행 파일을 제공하지만 (RPM 및 DEB는 예), 다른 배포판은 컴파일 프로세스를 자동화하는 패키지를 제공합니다.

젠투 ebuilds는 이에 대한 예입니다. 패키지는 기본적으로 패키지 관리자에게 실행 파일을 컴파일하고 설치하는 방법을 설명하는 지침입니다. 이것은 전통적인 패키지 관리자 (자동 업데이트, 제거 등)의 많은 장점을 가지고 있지만 사용자는 여전히 자신의 취향에 맞게 컴파일 프로세스를 최적화 할 수 있습니다.

아치 리눅스는 메인 스트림 패키지가 바이너리 인 패키징 시스템을 가지고 있으며 많은 추가 패키지가 PKGBUILD파일을 사용하여 시스템에서 컴파일됩니다 .


19

다른 답변 외에도 무언가를 추가하고 싶습니다.

프로그램을 직접 컴파일하기로 결정한 경우 컴파일은 한 번만하는 것이 아니라고 생각해야합니다. 새로운 버전, 특히 보안 업데이트를 컴파일하고 최신 상태로 유지하기로 결정한 응용 프로그램의 개발 메일 링리스트에 가입해야 할 것입니다.

응용 프로그램이 업데이트 될 때마다 새 버전을 다시 컴파일해야하므로 매주 시간을 절약해야합니다.

당신이 그것을 감당할 수 없다면, 패키지 관리자가 당신을 위해 그 일을하도록하는 것이 좋습니다.


6

소스에서 빌드하면 정확히 머신의 아키텍처를 지정할 수 있습니다. 새로운 CPU에는 컴파일러가 이해하는 추가 명령이있어 약간의 성능이 저하됩니다. 사전 빌드 패키지는 일반적으로 여전히 많이 사용되는 가장 오래된 CPU에 의존합니다.

이는 생물 정보학 파이프 라인 도구 또는 지구 물리학 모델링 도구와 같이 CPU를 매우 많이 사용하는 프로젝트 크리티컬 애플리케이션에 주로 중요합니다. 이러한 소프트웨어는 매우 통제 된 환경에서 실행되며 자체적으로 액세스 제어 기능이 없으므로 보안 버그가 너무 시급하여 며칠 또는 몇 시간 내에 패치해야하는 경우는 거의 없습니다. 초기에 알려지지 않은 아키텍처를 가진 다른 컴퓨터에서 실행할 필요는 거의 없습니다.

예, 저는 컴퓨터가 매우 빠르다는 것을 알고 있습니다. 여러분이 취한 노력이나 행동은 매우 매우 비싸지 만 프로그램을 앉아서 기다릴 세 번째 날 (이것은 내가 말하고있는 상황입니다) 의심스러워 보이기 시작합니다.

이와 달리 브라우저와 같은 응용 프로그램은 유지 관리 저장소 (다운로드 한 사전 빌드 된 패키지가 아닌)에서 더 잘 사용해야합니다. 최신 상태로 유지하는 것이 매우 중요합니다.


CPU를 최대한 활용하려는 그러한 조정이 차이를 만드는 경우 (이것은 매우 특수한 코드에만 관련이 있습니다. 즉, 95 %의 시간이 코드의 5 %에 ​​소비되므로 다른 95 %를 최적화합니다. 눈에 띄는 차이는 없습니다. 오늘날의 프로그램의 대부분은 사용자가 생각하기를 기다리는 시간의 99 %입니다)) 프로그램은 시작시 CPU에 따라 다른 코드를 켤 수 있습니다.
vonbrand

0

두 가지 세계를 최대한 활용하는 한 가지 방법 (최신 소프트웨어, 간단한 설치 / 제거, 대부분의 배포 조정 및 조정, 현지 요구 사항에 맞게 최적화 가능), 비용 (자신을 최신 상태로 유지하고 버그를 감시해야 함) 마지막 순간 패치, 개발에 따라, 당신은 버그 수정 및 버전 간의 비 호환성과 관련하여 자신이 있습니다.) (많이) 완화 할 수는 없으며, 배포판의 소스 패키지부터 시작하여 자체 패키지를 작성하는 것입니다. 예, 단지 구축 및 설치보다 더 많은 작업입니다.


1
흥미로운 답변 인 것 같지만 ( "두 세계 최고") 여기서 의미하는 바를 이해할 수 없습니다. "배포의 소스 패키지부터 시작하여 자체 패키지를 작성하는 것입니다." 리워드 / 설명해 주시겠습니까?
Jan Żankowski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.