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

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

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

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

답변1

엄격한 의미에서 바이너리 파일은 사람이 읽을 수 있는 텍스트로 문자 인코딩되지 않은 파일입니다. 좀 더 구어적으로 말하면, "바이너리"는 컴파일된 실행 가능한 코드인 파일을 의미하지만, 파일 자체는 실행 가능하지 않을 수 있습니다(권한보다는 단독으로 실행될 수 있는 용량을 의미합니다. 라이브러리와 같은 일부 바이너리 코드 파일은 컴파일되지만 권한에 관계없이 자체적으로 실행될 수는 없습니다). 독립 실행형 실행 파일로 실행되는 바이너리는 "실행 파일"이지만 모든 실행 파일이 바이너리는 아닙니다 #!/bin/sh.

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

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

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

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

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

그렇지 않습니다. 패키지는 바이너리 패키지입니다. 대신 소스를 포함하는 패키지가 .deb있지만 일반적으로 이름에 추가됩니다..deb-src

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

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

답변2

귀하의 질문의 나머지 부분은 goldilocks에 의해 답변되었으므로 소스에서 항목을 빌드하는 방법에 대한 첫 번째 부분에 무게를 두겠습니다.

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

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

    #include <stdio.h>

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

입력하고 gcc helloWorld.c해당 gcc바이너리를 빌드한 후 "Hello World!"를 작성하는 프로그램을 출력합니다. 실행할 때 콘솔에.

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

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

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

답변3

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

build.opensuse.org

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

관련 정보