Treceți la conținutul principal

Compilarea pachetelor software pe Linux

Sursa: Office of Research Computing

Avem multe pachete software open source și comerciale instalate pe sistemele noastre, care sunt disponibile tuturor utilizatorilor. Cu toate acestea, utilizatorilor li se permite să descarce și să instaleze pachete software mici în propriul director principal, software util de obicei doar lor personal.

Există o serie de pași necesari pentru instalarea software-ului.

  • Localizați și descărcați codul sursă (care este de obicei comprimat)
  • Despachetați codul sursă
  • Compilează codul
  • Instalați executabilul rezultat
  • Setați căile către directorul de instalare

Dintre etapele de mai sus, probabil cea mai dificilă este etapa de compilare.

Compilarea codului sursă

Tot codul de nivel înalt trebuie convertit într-o formă pe care computerul o înțelege. De exemplu, codul sursă din limbajul C este convertit într-un limbaj de nivel inferior numit limbaj de asamblare. Codul din limbajul de asamblare realizat în etapa anterioară este apoi convertit în cod obiect, care constă din fragmente de cod pe care computerul le înțelege direct. Etapa finală în compilarea unui program implică legarea tuturor fragmentelor de cod obiect într-un singur program executabil.

Efectuarea manuală a tuturor acestor pași este complicată și depășește capacitatea utilizatorului obișnuit. O serie de utilități și instrumente au fost dezvoltate pentru programatori și utilizatori finali pentru a simplifica acești pași.

make și fișierul Makefile

Comanda makepermite programatorilor să gestioneze compilarea programelor mari sau a grupurilor de programe. Ajută la dezvoltarea programelor mari prin urmărirea porțiunilor întregului program care au fost modificate, compilând doar acele părți ale programului care s-au modificat de la ultima compilare.

Programul makeîși obține setul de reguli de compilare dintr-un fișier text numit Makefile , care se află în același director ca și fișierele sursă. Acesta conține informații despre cum se compilează software-ul, de exemplu, nivelul de optimizare, dacă se includ informații de depanare în executabil. De asemenea, conține informații despre unde se instalează fișierele binare compilate (executabile), paginile de manual, fișierele de date, fișierele bibliotecii dependente, fișierele de configurare etc.

Unele pachete necesită editarea manuală a fișierului Makefile pentru a seta directorul final de instalare și orice alți parametri. Cu toate acestea, multe pachete sunt distribuite acum cu utilitarul GNU configure.

configurați

Cu mulți ani în urmă, pe măsură ce variantele UNIX și Linux au crescut, a devenit mai greu să se scrie programe care să poată rula pe toate variantele. Dezvoltatorii nu aveau adesea acces la fiecare sistem, iar caracteristicile unor sisteme se schimbau de la o versiune la alta. Sistemul GNU de configurare și construire simplifică construirea programelor distribuite ca și cod sursă. Toate programele sunt construite folosind un proces simplu, standardizat, în doi pași. Constructorul de programe nu trebuie să instaleze niciun instrument special pentru a construi programul.

Scriptul configureshell încearcă să ghicească valorile corecte pentru diverse variabile dependente de sistem utilizate în timpul compilării. Folosește aceste valori pentru a crea un Makefile în fiecare director al pachetului.

Cea mai simplă metodă de compilare a unui pachet este:

  1. cdîn directorul care conține codul sursă al pachetului.
  2. Tastați ./configurepentru a configura pachetul pentru sistemul dvs.
  3. Tastați makepentru a compila pachetul.
  4. Tastați make installpentru a instala programele și orice fișiere de date și documentație.
  5. Opțional, tastați make cleanpentru a elimina fișierele binare ale programului și fișierele obiect din directorul codului sursă

Utilitarul de configurare acceptă o gamă largă de opțiuni. De obicei, puteți utiliza --helpopțiunea pentru a obține o listă de opțiuni interesante pentru un anumit script de configurare.

Singurele opțiuni generice pe care probabil le veți utiliza sunt opțiunile --prefix și --exec-prefix . Aceste opțiuni sunt folosite pentru a specifica directoarele de instalare.

Directorul numit de --prefix opțiune va conține fișiere independente de mașină, cum ar fi documentația, datele și fișierele de configurare.

Directorul numit de --exec-prefix opțiune (care este în mod normal un subdirector al directorului --prefix) va conține fișiere dependente de mașină, cum ar fi executabilele.

7.1 Descărcarea codului sursă

Pentru acest exemplu, vom descărca un software gratuit care convertește între diferite unități de măsură.

Mai întâi creați un director de descărcare și accesați acel director folosind comanda cd:

$ mkdir download
$ cd download

Acum folosiți wgetcomanda pentru a descărca fișierul. wgetComanda descarcă un fișier dintr-o locație la distanță (cum ar fi internetul).

$ wget http://ftp.gnu.org/gnu/units/units-1.87.tar.gz
De asemenea, îl puteți descărca folosind browserul dvs. de aici

7.2 Extragerea codului sursă

Acum, să vedem ce am descărcat:

$ ls -l

După cum puteți vedea, numele fișierului se termină în tar.gz. Partea „tar” a fișierului înseamnă că acest fișier conține un grup de fișiere, iar partea „gz” înseamnă că este comprimat folosind formatul gzip.

Folosind tarcomanda, putem extrage toate fișierele comprimate:

$ tar -zxvf units-1.87.tar.gz

Din nou, listați conținutul directorului de descărcare , apoi accesați subdirectorul units-1.87 .

cd units-1.87

7.3 Configurarea și crearea fișierului Makefile

Primul lucru de făcut este să citiți cu atenție fișierele text README și INSTALL (folosiți lesscomanda). Acestea conțin informații importante despre cum se compilează și se rulează software-ul.

Pachetul units folosește sistemul GNU configure pentru a compila codul sursă. Va trebui să specificăm directorul de instalare, deoarece implicit va fi zona principală a sistemului, în care nu aveți voie să scrieți. În schimb, vom instala software-ul într-un director din directorul dvs. home.

$ ./configure --prefix=$HOME/unități187

Notă: Variabila $HOME este un exemplu de variabilă de mediu. Valoarea lui $HOME este calea către directorul principal. Trebuie doar să tastați

$ echo $HOME

pentru a afișa conținutul acestei variabile.

Dacă comanda configure a rulat corect, va fi creat un fișier Makefile cu toate opțiunile necesare. Asigurați-vă că configure nu a generat erori. Puteți vizualiza fișierul Makefile dacă doriți (folosind less comanda), dar nu editați conținutul acestuia.

7.4 Construirea pachetului

Acum puteți continua și construi pachetul rulând make comanda.

$ make

După un minut sau două (în funcție de viteza computerului), fișierele executabile vor fi create. Dacă nu vedeți nicio eroare pe ecran, atunci cel mai probabil software-ul s-a compilat corect. Dacă totul este în regulă, acum puteți instala pachetul.

$ make install

Aceasta va instala fișierele în directorul ~/units187 pe care l-ați specificat cu ./configure.

7.5 Rularea software-ului

Acum sunteți gata să rulați software-ul (presupunând că totul a funcționat).

$ cd ~/units187

Dacă listați conținutul directorului units, veți vedea o serie de subdirectoare.

binExecutabilele binare
share

Pentru a rula programul, treceți în directorul bin și tastați

$ ./units

De exemplu, convertiți 6 picioare în metri.

You have: 6 feet
You want: metres
* 1,8288

Dacă primești răspunsul 1.8288, felicitări, a funcționat.

Pentru a vedea între ce unități poate face conversia, vizualizați fișierul de date din directorul partajat (lista este destul de cuprinzătoare).

Pentru a citi documentația completă, accesați directorul info (este un subdirector al directorului share ) și tastați

$ info --file=units.info

7.6 Eliminarea codului inutil

Când se dezvoltă un software, este util ca programatorul să includă informații de depanare în executabilul rezultat. În acest fel, dacă apar probleme la rularea executabilului, programatorul poate încărca executabilul într-un pachet software de depanare și poate identifica orice erori software.

Acest lucru este util pentru programator, dar inutil pentru utilizator. Putem presupune că pachetul, odată finalizat și disponibil pentru descărcare, a fost deja testat și depanat. Cu toate acestea, când am compilat software-ul de mai sus, informațiile de depanare au fost încă compilate în executabilul final. Deoarece este puțin probabil să avem nevoie de aceste informații de depanare, le putem elimina din executabilul final. Unul dintre avantajele acestui lucru este un executabil mult mai mic, care ar trebui să ruleze puțin mai rapid.

Ceea ce vom face este să analizăm dimensiunea fișierului binar înainte și după. Mai întâi, treceți în directorul bin din directorul de instalare al unităților.

$ cd ~/units187/bin
$ ls -l

După cum puteți vedea, fișierul are o dimensiune de ~100 kbytes. Puteți obține mai multe informații despre tipul fișierului utilizând filecomanda.

$ file units
units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped

Pentru a elimina toate informațiile de depanare și numerotare a liniilor din fișierul binar, utilizați stripcomanda

$ strip units
$ ls -l

După cum puteți vedea, fișierul are acum ~40 kbytes - o treime din dimensiunea sa originală. Două treimi din fișierul binar erau cod de depanare!!!

Verificați din nou informațiile despre fișier.

$ file units
units: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), stripped

Sugestie: Puteți utiliza comanda make pentru a instala copii predefinite ale tuturor fișierelor binare atunci când instalați pachetul. În loc să tastați make install, tastați pur și simplu make install-strip

Rezumat

./configure --prefix=/path/to/install/directoryConfigurează software-ul care va fi instalat în /calea/către/directorul/de/instalare
makeCompilează codul sursă și trebuie rulat într-un director care conține un Makefile
make installInstalați software-ul în prefixul specificat cu ./configure
strip executableEliminați simbolurile inutile din executabil
make install-stripEliminați simbolurile inutile din fișierele binare și instalați software-ul în prefixul specificat cu ./configure
wget URLDescărcați fișierul de la URL
tar -zxvf filename.tar.gzExtrage fișiere dintr-o arhivă de fișiere .tar.gz

Comentarii

Postări populare de pe acest blog

Containerizare nativă pe macOS: Apple lansează propriul „Distrobox”

  Editorial de: Andrei Popescu, Penguin Reviews În cadrul Conferinței Globale a Dezvoltatorilor (WWDC25), Apple a prezentat „Containerization” – un nou framework open‑source care aduce pe macOS, bazat pe Apple Silicon, un mecanism performant și sigur pentru rularea distribuțiilor Linux in containere, similar ideii de Distrobox sau WSL . 🔹 Ce este Containerization? Framework în Swift : scris integral într-un limbaj modern, se bazează pe Virtualization.framework și rulează fiecare container Linux într‑o mașină virtuală ultra‑ușoară , asigurând izolare completă la nivel de kernel . Performanţă ridicată : containerele pornesc în câteva milisecunde, folosind dinamic doar resursele necesare, datorită accelerării hardware oferite de cipurile ARM Apple . Protecție avansată : fiecare container rulează separat, eliminând riscurile asociate scăpărilor de procese între medii sau către sistemul gazdă . 🛠 Funcționalități cheie Funcționalitate Detalii Imagini OCI standard Compatibile c...

Kali GPT: asistentul AI care transformă pentesting‑ul

  Editorial de: Elena Marinescu, Penguin Reviews Într‑o mișcare revoluționară pentru comunitatea de securitate cibernetică, XIS10CIAL a lansat Kali GPT , un asistent AI conceput special pentru Kali Linux, bazat pe GPT‑4, care integrează inteligența artificială direct în terminal, redefinind modul în care se realizează testele de penetrare . 🔍 Ce aduce Kali GPT? Integrare în terminalul Kali – Kali GPT înțelege comenzi în limbaj natural, generează payloads, interpretează scanări Nmap, configurează Metasploit și explică tool‑uri precum Burp Suite, fără să părăsești shell‑ul . Asistent contextual – adaptează răspunsurile în funcție de nivel (începători vs. experți), oferind explicații simplify sau tehnice avansate . Automatizare AI – generează comenzi, script‑uri și payloads, reduce erorile umane și accelerează ciclul pentesting‑ului . Beneficii clare Productivitate sporită – reducerea semnificativă a timpului de research și documentare Învățare accelerată – e...

De ce Danemarca renunță la Microsoft Office și Windows în favoarea LibreOffice și Linux

  de Mihai Georgescu, editor colaborator Danemarca face un pas major în orientarea către suveranitatea digitală: sectorul public a început să înlocuiască Microsoft Office și Windows cu LibreOffice și distribuții Linux. Misunea este de a readuce controlul datelor în spațiul UE și de a diminua dependența de furnizori extra-comunitari. Motivele deciziei Guvernul danez a început tranziția pe baza a trei obiective prioritare: Suveranitate digitală – datele rămân sub control european, nu sunt transmise către servere non‑UE . Reducerea costurilor – eliminarea licențelor Microsoft și direcționarea fondurilor către dezvoltatori și companii locale. Securitate și interoperabilitate – standardizarea pe formate deschise (ODF) pentru o colaborare mai eficientă între instituții și cetățeni . Strategia de implementare Pilot gradual – implementări în etape, începând cu LibreOffice și Windows, urmate de trecerea la Linux — fără tranziția “brutală” în toate birourile deodată . Form...