web-dev-qa-db-ja.com

バイナリパッケージとは何ですか?それらを構築する方法?

バイナリパッケージの詳細を取得して、Linuxで実行したいと考えています。 Debianベース(Ubuntu/Linux mint)Linux osを実行しています。

  1. ソースからバイナリパッケージをビルドする方法は?また、アプリケーション(firefoxなど)やゲ​​ーム(boswarsなど)のバイナリパッケージを直接ダウンロードできますか?
  2. 「xyz.linux.run」形式の直接パッケージを実行します。これらのパッケージとは何ですか?それらは依存関係から独立していますか?または、ビルド済みのバイナリパッケージですか?
  3. Linuxで直接「xyz.linux.run」を実行して、Linuxオペレーティングシステムで実行できるそれらのビルド方法。
  4. バイナリパッケージとdebパッケージの違いは何ですか?
12
Pandya

厳密には、バイナリファイルは、人間が読めるテキストとして文字エンコードされていないファイルです。より口語的には、「バイナリ」は、コンパイルされた実行可能コードのファイルを指しますが、ファイル自体は実行可能ではない可能性があります(単独で実行するための容量に関する権限についてはそれほど言及していません。ライブラリなどの一部のバイナリコードファイルはコンパイルされますが、権限に関係なく、すべてを単独で実行することはできません。スタンドアロンの実行可能ファイルとして実行されるバイナリは「実行可能」ですが、すべての実行可能ファイルがバイナリであるとは限りません(これは権限に関するものです。#!/bin/shなどのシバンを介してインタプリタを呼び出す実行可能テキストファイルも実行可能ファイルです)。

バイナリパッケージとは何ですか?

Linuxコンテキストのバイナリパッケージは、ソースコードではなく、(ビルド済みの)実行可能ファイルを含むアプリケーションパッケージです。

これは、パッケージファイル自体が実行可能ファイルであるという意味ではありません。パッケージファイルは、他のファイルを含むアーカイブ(.Zipのようなもの)であり、「バイナリ」パッケージファイルは、実行可能ファイルを具体的に含むものです(ただし、実行可能ファイルは必ずしも真のバイナリではなく、実際にはバイナリです)パッケージは、バイナリコードであるが実行可能ファイルではないコンパイル済みライブラリに使用できます。ただし、これらのファイルにアクセスするには、パッケージを解凍する必要があります。

通常、これはパッケージをダウンロードし、内部のバイナリを解凍してインストールするパッケージ管理システム(apt/dpkgなど)によって処理されます。

バイナリパッケージとdebパッケージの違いは何ですか?

ありません-.debパッケージはバイナリパッケージですが、代わりにソースを含む.debsがありますが、これらには通常、名前に-srcが追加されています。

「xyz.linux.run」形式の直接パッケージを実行します。これらのパッケージとは何ですか?

これらは一般に自己解凍型のバイナリパッケージです。バイナリペイロードをシェルスクリプトに埋め込むことで機能します。 「自己解凍」とは、パッケージを解凍して使用するために、パッケージマネージャーなどの別のアプリケーションを呼び出す必要がないことを意味します。ただし、パッケージマネージャーでは機能しないため、依存関係を解決するのはもっと骨の折れる作業になる可能性があり、そのため一部のパッケージでは静的にリンク実行可能ファイルを使用します(必要なすべてのライブラリが組み込まれています)。使用時のメモリのビット。

17
goldilocks

あなたの質問の残りの部分はgoldilocksによって答えられたので、私は最初の部分、ソースから物を構築する方法について検討します。

本当に短いバージョンは、インターネットからソースファイルをダウンロードすると、通常、それらに関連付けられたreadmeがあり、プログラムを起動して実行する方法を正確に伝えるはずです。

しかし、readmeを読むように指示しても、実際には質問に答えることはできないため、基本的な意味で、次のような非常に基本的なプログラムを書くことができます。

    #include <stdio.h>

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

gcc helloWorld.cと入力し、gccはそのバイナリをビルドし、「Hello World!」を書き込むプログラムを出力します実行時にコンソールに。

さて、これでプログラムを構築できましたが、何かをコンパイルする必要があるたびにコンパイルしたいすべてのソースファイルを入力する必要はありませんか?それがmakefilesの目的です。ソースファイルがたくさんあるプログラムを実行すると、通常、メイクファイルまたはその他のビルド自動化ファイル(antCmake、またはautoconfなど)が付属します。 )。

これらのタイプのプログラムをビルドするには、ディレクトリ内でmake <build target>を実行するだけです。私のhello worldプログラムのmakefileには、helloWorld.cをコンパイルするhelloworldというターゲットが含まれている場合があります。これをmake helloworldで実行すると、バイナリが出力されます。

ソースからのビルドには非常に長い時間と大量のメモリが必要になる場合があることに注意してください( Chromiumチームでは、ソースをビルドするために2台目のハードドライブを推奨しています! )。また、ソースからビルドする場合は、パッケージマネージャーが依存関係を処理するのではなく、依存関係に対処する必要があります。

6
Chris Pickard