O que é o pacote binário? Como construí-los?

12

Eu quero obter detalhes sobre o pacote binário e executá-los no linux. Estou executando o sistema operacional Linux Debian base (Ubuntu / Linux mint).

  1. Como criar pacote binário a partir do código-fonte? E posso baixar diretamente o pacote binário para aplicativos (como o Firefox, etc.) e jogos (como os boswars, etc.)?
  2. Eu corro alguns pacotes diretos que estão no formato "xyz.linux.run" O que são esses pacotes? Eles são independentes de dependências? ou São pacotes binários pré-criados?
  3. Como construí-los que podem ser executados no sistema operacional linux diretamente "xyz.linux.run" no linux.
  4. Qual é a diferença entre pacote binário e pacote deb?
Pandya
fonte
Você descobriu como criar um pacote binário a partir do código-fonte ?!
precisa saber é o seguinte

Respostas:

17

Em sentido estrito, um arquivo binário é aquele que não é codificado por caracteres como texto legível por humanos. Mais coloquialmente, um "binário" refere-se a um arquivo que é compilado, código executável, embora o próprio arquivo possa não ser executável (referindo-se não apenas às permissões, mas também à capacidade de ser executado sozinho; alguns arquivos de código binário, como bibliotecas, são compilados, mas independentemente das permissões, eles não podem ser executados sozinhos). Um binário que é executado como um executável independente é um "executável", embora nem todos os arquivos executáveis ​​sejam binários (e isso é sobre permissões: arquivos de texto executáveis ​​que invocam um intérprete por meio de um shebang, como também #!/bin/shsão executáveis).

O que é um pacote binário?

Um pacote binário em um contexto linux é um pacote de aplicativos que contém executáveis ​​(pré-criados), em oposição ao código fonte.

Observe que isso não significa que um arquivo de pacote seja um executável. Um arquivo de pacote é um archive (mais ou menos como a .zip) que contém outros arquivos, e um arquivo de pacote "binário" é aquele que contém especificamente executáveis ​​(embora, novamente, executáveis ​​não sejam necessariamente binários verdadeiros e, de fato, pacotes binários podem ser usados ​​para bibliotecas compiladas que são código binário, mas não executáveis). No entanto, o pacote deve ser descompactado para que você possa acessar esses arquivos.

Normalmente, isso é resolvido por um sistema de gerenciamento de pacotes (por exemplo, apt / dpkg), que baixa o pacote, descompacta e instala os binários dentro de você.

Qual é a diferença entre pacote binário e pacote deb?

Não há - .debpacotes são pacotes binários, embora existam .debs que contêm código-fonte, eles geralmente são -srcanexados ao seu nome.

Eu corro alguns pacotes diretos que estão no formato "xyz.linux.run" O que são esses pacotes?

Esses geralmente são pacotes binários de extração automática; eles trabalham incorporando uma carga binária em um script de shell. "Extração automática" significa que você não precisa chamar outro aplicativo (como um gerenciador de pacotes) para descompactar e usá-los. No entanto, como eles não funcionam com um gerenciador de pacotes, a resolução de suas dependências pode ser mais um crapshoot e, portanto, alguns desses pacotes usam executáveis vinculados estaticamente (todas as bibliotecas necessárias são incorporadas a eles), que desperdiçam um pouco de memória quando são usados. .

Cachinhos Dourados
fonte
Excelente resposta !, Devo me separar desta pergunta: Como criar executável pré-compilado (pacote binário) a partir da fonte?
Pandya
Sim, isso seria uma boa pergunta por si só, se ainda não tiver sido respondida aqui de alguma forma.
goldilocks
6

Como o restante da sua pergunta foi respondida por goldilocks, vou abordar a primeira parte, como construir coisas a partir da fonte.

A versão realmente curta é que, quando você baixa arquivos de origem da Internet, eles geralmente possuem um leia-me associado a eles, o que deve indicar exatamente como colocar o programa em funcionamento.

Mas pedir para você ler o leia-me não responde realmente à pergunta; portanto, em um sentido básico, você pode escrever um programa muito básico que seja

    #include <stdio.h>

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

e digite gcc helloWorld.ce gcccriará esse binário e produzirá um programa que escreve "Hello World!" para o console quando executado.

Ok, agora que você criou um programa, no entanto, não seria bom digitar todos os arquivos de origem que você queria compilar toda vez que precisava compilar algo? É para isso que makefilesservem. Se você se depara com um programa que tem um monte de arquivos de origem, geralmente, virá com um makefile ou algum outro arquivo de automação de construção ( ant, Cmake, ou autoconfou algo assim).

Para criar esses tipos de programas, basta executar make <build target>dentro do diretório. Um makefile para o meu programa hello world pode incluir um destino chamado helloworldque apenas compila o helloWorld.c. Gostaria de executar isso make helloworlde ele iria produzir um binário.

Observe que a criação de coisas a partir da fonte pode levar muito tempo e grandes quantidades de memória ( a equipe do Chromium até recomenda um segundo disco rígido para criar a fonte! ). Observe também que quando você estiver construindo coisas a partir da fonte, precisará lidar com dependências, em vez de o gerenciador de pacotes fazer isso por você

Chris Pickard
fonte