# Linux Systeembeheer/Applicaties beheren
## Leerdoelen

* De package managers yum en apt-get kennen en kunnen gebruiken:
** Weten welke Linux distributies deze package managers (standaard) gebruiken;
** Met yum en apt-get software kunnen installeren, verwijderen en bijwerken;
** Pakketbronnen (Eng. repositories) beheren.
* Applicaties buiten de distributie om kunnen installeren en onderhouden:
** De correcte plaats van zulke applicaties in de Linux-directorystructuur kennen (meer bepaald /opt en /usr/local);
** Weten hoe je applicaties kan installeren vanaf de broncode.

## Algemeen
### Installeren

Linux-distro's maken gebruik van een pakketbeheersysteem om de geïnstalleerde software te onderhouden. Zo gebruiken RedHat en afgeleide distro's (vb. Fedora en CentOS) RPM (RedHat Package Manager). Debian en afgeleiden (vb. Ubuntu) gebruiken apt-get en de package manager van Gentoo heet emerge. De lijst is uiteraard nog veel groter. Een package manager zorgt dat bij installatie van software alle afhankelijkheden opgelost worden (vb. een bibliotheek) en verwittigt de gebruiker regelmatig als er updates zijn.
In RPM-gebaseerde systemen worden packages aangeleverd in de vorm van bestanden met extensie .rpm. Bij Debian-achtige systemen is dat .deb. Je kan RPM-packages installeren met dit commando:
Voor de meeste programma's is het niet nodig RPMs te downloaden en dan zoals hierboven te installeren. Linux-distributies hebben een zgn. repository, een database met packages die on-line ter beschikking wordt gesteld. Je dient dan enkel de naam van de package te kennen, de package manager doet de rest. Software die niet in de repository zit, vind je voor de meest gangbare distro's als een RPM op de homepage van de applicatie.
Als er geen rpm of deb bestaat kan je nog altijd gebruik maken van een tarball (extensie .tar.gz) die de broncode bevat. Je moet die dan nog compileren en manueel installeren. Meestal is dat volgens dit stramien:
Je kijkt dan best ook na waar al je bestanden zullen terechtkomen, die kan je zien in 'Makefile'. Een van de nadelen van deze manier van werken is dat afhankelijkheden niet gecontroleerd worden. Dit kan er toe leiden dat je nog packages vanaf de broncode moet installeren die zelf ook afhankelijkheden hebben, enz. Dit was zeker in de begindagen van Linux (toen er nog geen package managers waren) een groot probleem, en men noemde dit "dependency hell". Tegenwoordig heb je slechts in heel uitzonderlijke omstandigheden nood aan deze manier van werken, de meeste software die je nodig hebt zijn beschikbaar in de repositories.
Over het algemeen geldt:
* Zoek eerst of de software die je nodig hebt in de repositories zit;
* Zo niet, zoek uit of er RPMs (of .deb's) bestaan specifiek voor jouw distributie;
* Als laatste redmiddel, installeer van source.

### Locaties

Op Linux-systemen is er voor elk type bestand een vastgelegde plaats in de directorystructuur, vastgelegd in de Linux Filesystem Hierarchy Standard (FHS). Applicaties die tot de distributie behoren, horen thuis in /usr/. Als je software installeert van een andere bron, dan hoort dit thuis in /usr/local. Bijhorende bestanden worden verdeeld onder specifieke subdirectories. Executables komen terecht in subdirectory /usr[/local]/bin, vaste data (vb. afbeeldingen, iconen) in /usr[/local]/share, documentatie in /usr[/local]/doc, enz. Sommige applicaties, in het bijzonder deze die vanuit Windows naar Linux geporteerd zijn, verwachten dat alle bestanden binnen eenzelfde directory terecht komen. Voor dit soort gevallen is de directory /opt voorzien.
Sommige systeembeheerders zetten deze directories op een aparte partitie, zodat een nieuwe versie van de distro kan geïnstalleerd worden zonder dat de manueel geïnstalleerde pakketten beïnvloed worden.

## Yum

Yum (Yellowdog Updater, Modified) is een soort gebruikersschil rond RPM en kan in plaats van dit laatste gebruikt worden om de software op het systeem te beheren. Zo is het mogelijk om software te verwijderen, toe te voegen of bij te werken. Yum is de standaard geworden binnen de RedHat familie.

### Commando's

Hieronder volgt een overzicht van de meest voorkomende argumenten.
Update alle software waarvoor dit mogelijk is:
Update een specifiek pakket indien mogelijk:
Geeft een overzicht van alle geïnstalleerde programma's:
Uitzoeken of httpd geïnstalleerd is op het systeem:
Hiermee kan je nagaan welke pakketten of pakketonderdelen er zijn geïnstalleerd:
De uitvoer van het laatste:
Installeren van het httpd-pakket:
Installeren van het mysql-pakket voor de i386-architectuur:
Verwijderen van het httpd-pakket:
Geeft een lijst weer van alle beschikbare pakketten:
Geeft een lijst weer van alle beschikbare pakketgroepen:
De uitvoer zit er dan als volgt uit:
Installeert alle pakketten in deze groep:
Update alle pakketten in deze groep:
Verwijder alle pakketten in deze groep:
Geef een overzicht van alle pakketten die niet via de normale kanalen zijn bekomen (via alternatieve repo's dus):
De uitvoer ziet er dan als volgt uit:
Hiermee kan je te weten komen van welke software een bestand is:
De uitvoer zit er dan als volgt uit:
Geeft alle overige informatie weer die je ooit zal nodig hebben:

### Configuratie

Via de bestanden /etc/yum.conf en etc/yum.repos.d kan je de instellingen van Yum aanpassen. Meestal wordt alleen nog /etc/yum.conf gebruikt. Deze bestanden laten toe om extra repo's toe te voegen of om extra plugins aan te passen.
Een toevoeging van een lokale mirror ziet er dan als volgt uit:

## Labo-opgave

In een vorige stap heb je op een klaspc of je eigen pc een basisinstallatie van een Linux-systeem opgezet. Nu installeren we enkele applicaties.
* Zorg ervoor dat de yum- package manager nieuwe pakketten binnenhaalt van de Belnet mirror repository in plaats van de standaardkeuze.
* Installeer de laatste versies van:
** De Java Standard Edition SDK van Sun (niet OpenJDK of GCJ);
** Netbeans;
** Eclipse;
** De netwerktools nmap en wireshark.
* Zorg er voor dat een gewone gebruiker nmap en wireshark kan uitvoeren met root-rechten, zonder als root te moeten inloggen en zonder een wachtwoord te moeten intikken.