quarta-feira, 18 de janeiro de 2017

Compilando Programas GNU/Linux


Neste post de hoje eu queria abordar sobre um assunto que deixar muitos Usuarios de Slackware e outras distribuições com dúvida.
Lembrando que está é uma compilação básica.
  • Requisitos para práticar a compilação;
GCC e G++ instalados.
Ou
build-essential
  • Quais as vantagens de compilar? 
Seu computador principalmente se for mais velho como o meu (AMD Athlon, 2.8ghz, 2GB ram) irá ter um desempenho muito superior aos programas que não são compilados.
  • Exemplo;
Se comparar o mesmo programa na sua máquina, um genérico já compilado por outra pessoa que disponibilizou o pacote para qualquer pc e outro compilado por você... e para sua máquina, você perceberá um desempenho do programa de até 20%.
Pode ter certeza esses 20% faz muita, mas muita diferença em computadores antigos.
Pelo contrario em um computador mais novo, tem diferença é claro, mas não é tão notavel assim, principalmente em computadores com mais de 4GB de ram.

  • Antes do tutorial;
Uma boa dica que eu dou é você seguir este tutorial e compilar todos programas do seu computador.
Mas como? faça uma lista pode ser no papel mesmo, de todos programas que você deseja compilar, exemplo (Firefox, Sublime, Gimp, Simple screen recorder, gparted) e por ai a dentro.
Não precisa fazer tudo em um dia, até porque compilar dependendo do programa (tamanho) e do seu computador pode demorar.
Exemplo é o Kdenlive eu demorei 16 horas para realizar tal proeza em meu computador, claro com todas dependências inclusas.

  • Vamos a brincadeira;
Normalmente o padrão de compilação mais utilizado é ./configure&&make&&make install
Pelo menos é assim que muitos ensinam em tutoriais e vídeos, está errado? não! de maneira alguma, porém está incompleto, este padrão gerá uma certa bagunça em sua máquina, você vai saber quando tentar desinstalar algo e ficar várias coisas para trás.
Outra coisa é que como fica bagunçado as vezes você pode ter todas dependências já instaladas e na compilação dar erro dizendo que falta alguma dependência.

Vamos iniciar a brincadeira! primeiramente antes de tudo, você irá baixar o código fonte de um programa, em nosso caso para demostração vamos utilizar o JOE'S, um editor de texto que rodar via terminal.
  • Siglas: 
  • $ Úsuario comum
  • # Root
O primeiro passo a seguir é criar uma pasta para suas compilações, pode ser dentro do seu diretório de úsuario, exemplo;
  • $ mkdir /home/jefferson/compilation
Criamos nossa pasta compilation, este será o local onde vamos "guardar" e "extrair" toda nossa compilação em código fonte.
Próxima etapa é localizar onde o o JOE'S foi baixado, normalmente é em Downloads (ou aonde o seu navegador joga os arquivos baixados)
Navegamos até está pasta, no meu caso é Downloads

  • $ cd /home/jefferson/Downloads
E usamos ls --color para ver colorido o que tem dentro da pasta Downloads.
  • $ ls --color
 Normalmente uma cor é predominante para uma pasta e uma cor para arquivos, em meu caso, a cor "azul" são minhas pastas e a cor "vermelha" são meus arquivos.

Próxima etapa é  descompactar nosso arquivo joe-4.3.tar.gz
Para isso usamos o comando tar, claro depende da extensão do arquivo, em nosso caso é .gz e podemos utilizar -xvzf .
  • $ tar -xvzf joe-4.3.tar.gz
Podemos novamente dar um ls --color para presenciar a nova pasta gerada. 
  • $ ls --color
A pasta gerada se chama joe-4.3.
Agora vamos entrar dentro desta pasta utilizando o comando cd novamente.
  • $ cd joe-4.3
Feito isso podemos novamente dar um ls --color
  • $ ls --color 
 E irá aparecer alguns arquivos, dentre eles os que mais precisamos, README, INSTALL, você precisa entender inglês ou pelo menos usar o tradutor.
Esses são os arquivos que você mais vai ver na sua vida de compilador, porque? Eles são essenciais para informações da instalação entre outras configurações. Mostram qual a maneira mais correta de instalar e configurar o programa que você está instalando.
Para ler os arquivos usamos o comando more O_ARQUIVO_QUE_VAMOS_LER | less.
  • $ more INSTALL.md | less
No caso ele voltou com um configuração de instalação típica, este será nosso primeiro passa para compilar, para sair aperte a letra Q do teclado.
Vamos começar a compilar rodar o comando configure, ele vai configurar a nossa compilação e dizer se falta alguma dependência ou não, ainda como úsuario comum rodamos o comando.
  • $ ./configure --prefix=/usr --sysconfdir=etc 

Explicando o --prefix e --sysconfdir
    --prefix=/usr - com isso seus binários serão instalados na pasta /usr/bin, bibliotecas serão instaladas em /usr/lib e os arquivos de desenvolvimento em /usr/include. Essa é a localização correta para os arquivos.
    --sysconfdir=/etc - aqui temos um grande equívoco, pois sem essa opção todas as configurações do seu programa, caso existam, serão instaladas em /usr/local/etc, isso é inadmissível, visto que todos os programas usam a pasta padrão /etc. Gera uma certa bagunça na sua máquina.

Feito isso e se o configure não reclamou de alguma dependência faltando vamos para a próxima etapa.
A próxima etapa é o MAKE ele é o "cara" é ele que compila o programa, tranformando a codificação na linguagem da máquina.
Vale lembrar que o tempo de compilação depende do tamanho do programa, do seu computador entre outras coisas...
Para rodar o make é fácil, ainda como úsuario comum.
  • $ make 
Agora vamos rodar o comando make clean, para limpar a "sujeira" que a compilação deixou para trás.
  • $ make clean
Agora vamos criar um diretorio do nosso programa na pasta /tmp/ claro pode ser aonde você quiser, mas este diretorio a maioria das pessoas que compilam usam.
Lembrando de sempre por o nome do programa e versão isso irá te ajudar quando for atualizar o programa, exemplo joes-4.3
  • $ mkdir /tmp/joes-4.3
 
Feito isso vamos logar como ROOT e agora instalar o programa especificando o diretorio que criamos acima.
  • # make install DISTDIR=/tmp/joes-4.3
Se você seguiu o tutorial certo o joe está funcionando, para por para rodar digite em seu terminal:
  • $ joe
  • Deu algum problema? não está entendendo? então veja meu vídeo, eu explico detalhe por detalhe.

0 comentários: