# Tarball

Een tarball is een tar-bestand of een gecomprimeerd tar-bestand. Tot de introductie van de eerste pakketbeheerders werden tarballs vooral gebruikt om back-ups van verzamelingen bestanden als archiefbestand op te slaan op verschillende soorten digitale opslagmedia, zoals magneetbanden en DAT/DDS-tapes. Gecomprimeerde tarballs met broncode van programma's konden gemakkelijk met anderen uitgewisseld worden, bijvoorbeeld om nieuwe versies van programma's te installeren op computers met verschillende Unix-achtige besturingssystemen. Om de software op verschillende systemen te laten draaien werd de broncode van het computerprogramma, samen met verschillende scripts voor het configureren, compileren en installeren van de software, in de tarball opgeslagen.
De binaire code van een gecompileerd programma kan ook in een tarball opgeslagen worden, samen met scripts voor de configuratie en installatie, maar het programma kan dan alleen geïnstalleerd worden op een computer met vrijwel hetzelfde besturingssysteem en met dezelfde hardware. Slackware Linux gebruikt nog steeds tarballs om software te installeren, terwijl alle andere Unix-achtige besturingssystemen zijn overgestapt op eigen systemen en bestandsformaten voor het installeren en beheren van softwarepakketten. Een tarball kan ook uitsluitend tekstbestanden, handleidingen en lijsten met urls en checksums bevatten, zoals in het geval van LFS (Linux From Scratch). LFS geeft alleen de urls van de tarballs die gedownload moeten worden om daarmee, en met behulp van de aanwijzingen in de handleiding, een op maat gemaakt LFS-besturingssysteem op te bouwen.

## Installatie van software

De tarballs van open source Unix programma's kunnen meestal van het internet gedownload worden. Webbrowsers en BitTorrentclients, zoals Transmission, slaan gedownloade bestanden meestal in de directory ~/Downloads op, waarbij de tilde staat voor de home-directory van de gebruiker. De configuratie- en installatiescripts in een tarball zijn doorgaans door een build system, zoals Autoconf, CMake of SCons, gegenereerd. Een IDE maakt tijdens het bouwen van een applicatie gebruik van zo'n build system.

### Downloaden en beveiliging

Het installeren van software uit een tarball verdient over het algemeen geen aanbeveling aangezien er verschillende risico's aan kleven. Het grootste risico dat een gebruiker loopt is dat het besturingssysteem door softwareconflicten zwaar beschadigd raakt en praktisch onbruikbaar wordt of dat het besturingssysteem, na een minder dramatische afloop van het installatieproces, instabiel is geworden.

#### Checksums

De bron hoort bij elke tarball een checksum te verstrekken, zoals een md5-checksum of een van de checksums uit de SHA-familie van hashfuncties. De sha256-checksum van ball.tar.gz kan als volgt met de sha256sum-opdracht berekend worden:
Deze hashcode staat meestal op de downloadpagina van de tarball vermeld, of anders is ze ergens op de site te vinden in een bestand met een naam als ball.tar.gz.sha256 of SHA256SUMS.

#### Downloaden met wget

LFS verstrekt een bestand wget-list met urls van tarballs en een bestand md5sums met hun checksums. Na het aanmaken van een tarballs-directory kan de hele verzameling tarballs en patches in de directory tarballs gedownload en gecheckt worden met de opdrachten:
Door een --quiet-optie aan de opdrachten toe te voegen kan de standaarduitvoer weggefilterd worden zodat alleen foutmeldingen getoond worden.

#### Beveiliging met GnuPG

Voor de controle van checksums met GnuPG moeten eerst de publieke sleutels van de ondertekenaars bij een keyserver opgehaald worden. Daarna kunnen de vingerafdrukken van de ondertekenaars gecontroleerd worden. Een tarball van kernel.org moet eerst gedecomprimeerd worden:
voordat de checksum van het tar-bestand met behulp van GnuPG gecontroleerd kan worden. GnuPG levert een betere controle van de beveiliging dan enkel de controle van een checksum.
De controle van checksums spoort fouten en beschadigde bestanden op en ze biedt bescherming tegen simpele man-in-the-middle-aanvallen. Door altijd SSL/TLS en GnuPG te gebruiken, wordt de beveiliging tegen aanvallen van buitenaf aanzienlijk verbeterd. Tegen infiltranten met kwade bedoelingen en misbruik van vertrouwen biedt encryptie geen absolute bescherming.

### Een tarball uitpakken

Het verstandig om de inhoud van de tarball te inspecteren voordat hij uitgepakt wordt om te voorkomen dat een tarbomb in de Download-directory explodeert. Als de tarball de code van het programma ball bevat, dan kan de tarball met de volgende tar-opdracht uitgepakt worden:
De huidige versies van tar kunnen praktisch alle gecomprimeerd tarballs decomprimeren. Normaliter worden alle bestanden in een directory geplaatst die de naam van de applicatie of van de programmabibliotheek heeft. In het geval van de installatie van een handleiding of een verzameling tekstbestanden, zoals in het geval van LFS, is het uitpakken van de tarball vaak de laatste of een-na-laatste stap van de installatie.

### Configuratie, compilatie en installatie

De volgende opdrachten voor het configureren, compileren en installeren moeten vanuit de ~/Downloads/ball/-directory gegeven worden:
Gewoonlijk bevindt zich een tekstbestand met de naam README in de directory die na het uitpakken van de tarball is gecreëerd. In het README-bestand staat beschreven welke opdrachten vervolgens uitgevoerd dienen te worden. Meestal moet in de nieuwe directory een "configure-make-make-install"-opdrachtenreeks uitgevoerd worden.

#### Configuratie

De eerste opdracht is in het geval van een standaardinstallatie:
Na deze opdracht wordt het shellscript configure uitgevoerd.
Voor deze opdracht moeten een punt en een slash geplaatst worden omdat bash anders zal proberen een programma met de naam "configure" op te starten of een bash-opdracht met dezelfde naam uit te voeren. Aan de configuratieopdracht kan soms een lange reeks opties meegegeven worden, zoals --prefix=/pref-dir --with-lib-path=/lib/some-lib. Welke opties meegegeven kunnen worden staat doorgaans beschreven in het README-bestand en in de verwijzingen naar andere bestanden en referenties. Tijdens een standaard installatie hoeven doorgaans geen configuratieopties opgegeven te worden.

#### Compilatie

Als de configuratie goed verlopen is, kan het programma make opgestart worden:
Dit programma voert de standaardopdrachten uit die in de makefile gedefinieerd zijn. Doorgaans worden in deze stap alle bestanden met broncode door de compiler naar objectcode vertaald en vervolgens door de linker aan elkaar gelinkt tot een of meer executables.

#### Testen

Als de configuratie en de compilatie volgens de regels der kunst zijn uitgevoerd, dan bevindt het ball-programma zich in de werkdirectory. Als in de makefile een check entry is geïmplementeerd, dan geeft de opdracht:
mogelijk foutmeldingen of informatie over het gecompileerde programma ball.
De kans bestaat dat het programma in dit stadium met de opdracht:
opgestart en zonder problemen uitgevoerd kan worden.
De kans dat het programma alleen foutmeldingen genereert, hapert, vastloopt of crasht is echter vrij groot omdat een willekeurige tarball meestal op een computer met een ander besturingssysteem en een andere configuratie is ontwikkeld. Er kunnen bijvoorbeeld bibliotheken of andere programma's ontbreken waardoor het programma niet of niet goed werkt. Als tijdens een eerste test problemen optreden, dan is het niet verstandig om de volgende stap van de installatie uit te voeren.
Als de test probleemloos verloopt, dan is dat geen garantie dat het programma in de tarball veilig en betrouwbaar is. Een perfect draaiend programma kan een achterdeurtje hebben of een rootkit bevatten.

#### Installatie

Voor het uitvoeren van de installatie zijn de rechten van een rootgebruiker vereist. Het programma wordt geïnstalleerd door een make install stap uit te voeren:
Na deze opdracht is ball waarschijnlijk naar de directory /usr/local/bin/ verplaatst.
Met de opdracht:
kan het systeem vaak ontdaan worden van de sporen die de installatie achter heeft gelaten.
Na de installatie kan het programma met de opdracht:
in elke directory binnen het lokale bestandssysteem opgestart worden.