바이너리 패키지란 무엇입니까? 어떻게 구축하나요?

바이너리 패키지란 무엇입니까? 어떻게 구축하나요?

바이너리 패키지에 대한 자세한 정보를 얻고 이를 Linux에서 실행하고 싶습니다. 저는 Debian 기반(Ubuntu/Linux mint) Linux 운영 체제를 실행하고 있습니다.

  1. 소스 코드에서 바이너리 패키지를 빌드하는 방법은 무엇입니까? 애플리케이션(예: Firefox 등)과 게임(예: Boswars 등)의 바이너리 패키지를 직접 다운로드할 수 있나요?
  2. "xyz.linux.run" 형식으로 일부 직접 패키지를 실행합니다. 이 패키지는 무엇입니까? 종속성과 독립적인가요? 아니면 미리 빌드된 바이너리 패키지인가요?
  3. Linux에서 직접 "xyz.linux.run"을 사용하여 Linux 운영 체제에서 실행할 수 있는 빌드를 빌드하는 방법입니다.
  4. 바이너리 패키지와 deb 패키지의 차이점은 무엇입니까?

답변1

엄밀히 말하면 바이너리 파일은 사람이 읽을 수 있는 텍스트로 인코딩된 문자가 없는 파일입니다. 보다 구어적으로 "바이너리"는 컴파일된 실행 코드 파일을 의미하지만 파일 자체는 실행 가능하지 않을 수 있습니다(권한보다는 자체적으로 실행될 수 있는 능력을 나타냅니다. 일부 바이너리 코드 파일(예: 라이브러리)은 컴파일되었지만 권한에 관계없이 자체적으로 실행될 수는 없습니다). 독립 실행형 실행 파일로 실행되는 바이너리 파일은 "실행 가능 파일"입니다. 그러나 모든 실행 파일이 바이너리인 것은 아닙니다(이는 권한과 관련이 있습니다. shebang을 통해 인터프리터를 호출하는 실행 가능 텍스트 파일도 #!/bin/sh실행 파일입니다).

바이너리 패키지란 무엇입니까?

Linux 컨텍스트의 바이너리 패키지는 소스 코드 대신 (미리 빌드된) 실행 파일을 포함하는 애플리케이션 패키지입니다.

이는 패키지 파일 자체가 실행 파일이라는 의미는 아닙니다. 패키지 파일은 다른 파일(일종 .zip)을 포함하는 아카이브인 반면, "바이너리" 패키지 파일은 실행 파일을 구체적으로 포함하는 파일입니다(물론 실행 파일이 반드시 실제 바이너리일 필요는 없으며 실제로 바이너리 패키지는 다음과 같을 수 있음). 컴파일하는 데 사용됩니다. 라이브러리는 바이너리 코드이지만 실행 파일은 아닙니다. 그러나 이러한 파일에 액세스하려면 패키지의 압축을 풀어야 합니다.

일반적으로 이는 패키지를 다운로드하고 그 안에 바이너리를 압축해제하고 설치하는 패키지 관리 시스템(예: apt/dpkg)에 의해 처리됩니다.

바이너리 패키지와 deb 패키지의 차이점은 무엇입니까?

아니요. 일부 패키지에는 일반적으로 이름에 추가되는 소스 코드가 포함되어 있지만 .deb패키지는 바이너리 패키지입니다..deb-src

"xyz.linux.run" 형식으로 일부 직접 패키지를 실행합니다. 이 패키지는 무엇입니까?

이는 일반적으로 자체 추출 바이너리 패키지로, 바이너리 페이로드를 셸 스크립트에 삽입하여 작동합니다. "자동 압축 풀기"는 압축을 풀고 사용하기 위해 다른 응용 프로그램(예: 패키지 관리자)을 호출할 필요가 없음을 의미합니다. 그러나 패키지 관리자와 함께 작동하지 않기 때문에 종속성을 해결하는 것이 더 어려울 수 있으므로 일부 패키지는 다음을 사용합니다.정적 링크실행 파일(필요한 모든 라이브러리가 내장되어 있음)을 사용할 때 일부 메모리가 낭비됩니다.

답변2

이제 Goldilocks가 질문의 나머지 부분에 대한 답변을 마쳤으므로 소스에서 무언가를 구축하는 방법인 첫 번째 부분에 대해 설명하겠습니다.

아주 짧은 버전은 인터넷에서 소스 파일을 다운로드할 때 일반적으로 프로그램을 시작하고 실행하는 방법을 정확하게 알려주는 Readme 파일과 관련되어 있다는 것입니다.

하지만 Readme를 읽으라고 말하는 것만으로는 질문에 대한 답을 얻을 수 없으므로 기본적인 의미에서 매우 기본적인 프로그램을 작성할 수 있습니다.

    #include <stdio.h>

    int main( ) {
        printf("Hello World!");
    }

이 바이너리를 입력 gcc helloWorld.cgcc빌드하고 콘솔에 "Hello World!"를 쓰는 프로그램 런타임을 출력합니다.

좋아요, 이제 프로그램을 만들었습니다. 하지만 무언가를 컴파일해야 할 때마다 컴파일하려는 모든 소스 파일을 입력해야 한다는 것이 짜증나지 않나요? 그것이 목적이다 makefiles. 여러 소스 파일이 포함된 프로그램을 실행하는 경우 일반적으로 makefile이나 다른 빌드 자동화 파일( 또는 ant기타 항목)이 함께 제공됩니다.Cmakeautoconf

이러한 유형의 프로그램을 빌드하려면 make <build target>디렉터리 내에서 실행하면 됩니다. 내 hello world 프로그램의 makefile에는 helloworldhelloWorld.c를 컴파일하는 대상이 포함될 수 있습니다. 이를 실행하면 make helloworld바이너리 파일이 출력됩니다.

소스에서 항목을 빌드하는 데는 시간이 오래 걸리고 메모리도 많이 소모될 수 있습니다(Chromium 팀은 소스 코드를 빌드하기 위해 두 번째 하드 드라이브를 사용할 것을 권장합니다!). 또한 소스에서 무언가를 빌드할 때 패키지 관리자가 대신 종속성을 처리해야 한다는 점에 유의하세요.

답변3

OpenSuse Build Service 프로젝트와 유사한 솔루션을 찾고 있다고 생각합니다.

build.opensuse.org

Debian, CentOS, Red Hat도 지원됩니다.

관련 정보