Les 7
Software installeren met pakketbeheer
Pakketten zoeken, installeren en bijwerken met apt.
🎯 Na deze les kun je
- pakketten installeren en verwijderen met apt
- uitleggen wat een repository is
- updates veilig uitvoeren
Op Windows download je een installatiebestand van een website en klik je op Volgende. Op Linux installeer je software bijna altijd via een pakketbeheerder (package manager): één commando, en het programma komt uit een vertrouwde bron, met alles wat het nodig heeft, en het wordt later automatisch bijgewerkt. In deze les leer je werken met apt, de pakketbeheerder van Debian en Ubuntu, en zie je hoe dat op andere distributies heet.
Wat is een pakket?
Een pakket (package) is een archief met een programma, de bestanden die erbij horen (configuratie in /etc, documentatie), en informatie over het pakket: versie, beschrijving en waarvan het afhankelijk is. Op Debian en Ubuntu eindigen pakketbestanden op .deb.
Je haalt pakketten niet zelf op. apt downloadt ze uit een repository.
Repositories
Een repository (of repo) is een server met duizenden pakketten plus een index die zegt welke versies er zijn. Welke repositories je systeem gebruikt, staat in /etc/apt/sources.list of in losse bestanden in /etc/apt/sources.list.d/:
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main
Signed-By: /usr/share/keyrings/debian-archive-keyring.pgp
URIs: waar de pakketten staan.Suites: welke versie van de distributie (trixieis Debian 13).Components: welk deel;mainis vrije software die door Debian wordt onderhouden.Signed-By: de sleutel waarmee de pakketlijsten ondertekend zijn.aptcontroleert die handtekening, zodat niemand onderweg een vervalst pakket kan inschuiven.
Je kunt repositories van derden toevoegen, bijvoorbeeld van Docker (les 14). Doe dat alleen bij bronnen die je vertrouwt: pakketten installeren draait met root-rechten.
apt update, upgrade, install
| Commando | Doet |
|---|---|
sudo apt update |
de pakketlijsten van alle repositories ophalen (installeert niets) |
apt list --upgradable |
tonen wat er bijgewerkt kan worden |
sudo apt upgrade |
alle geïnstalleerde pakketten bijwerken |
sudo apt install htop |
een pakket installeren |
sudo apt remove htop |
een pakket verwijderen (configuratie blijft) |
sudo apt purge htop |
verwijderen inclusief configuratie |
sudo apt autoremove |
afhankelijkheden opruimen die niemand meer nodig heeft |
apt search woord |
zoeken in naam en beschrijving |
apt show htop |
informatie over een pakket |
Begin altijd met apt update. Zonder verse lijst weet apt niet dat er nieuwere versies zijn, en kan een install mislukken met 404 Not Found omdat een oude versie al van de server is verdwenen.
$ sudo apt update
$ sudo apt install htop
...
The following NEW packages will be installed:
htop
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 171 kB of archives.
After this operation, 434 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Lees deze samenvatting voordat je op Enter drukt. Vooral de regel to remove: soms wil een installatie andere pakketten verwijderen.
Versies controleren
$ apt policy curl
curl:
Installed: 8.14.1-2+deb13u5
Candidate: 8.14.1-2+deb13u5
Version table:
*** 8.14.1-2+deb13u5 500
500 http://deb.debian.org/debian trixie/main amd64 Packages
Installed is wat je hebt, Candidate wat apt zou installeren. Zijn ze verschillend, dan is er een update. De meeste programma's vertellen hun versie ook zelf: curl --version, python3 --version, nginx -v.
dpkg -l toont alle geïnstalleerde pakketten; dpkg -L htop welke bestanden een pakket heeft geïnstalleerd.
Afhankelijkheden
Een programma gebruikt vaak bibliotheken van andere pakketten. Dat heten afhankelijkheden (dependencies):
$ apt show htop
Package: htop
Version: 3.4.1-5
Depends: libc6 (>= 2.38), libncursesw6 (>= 6), libtinfo6 (>= 6)
Suggests: lm-sensors, lsof, strace
apt installeert de Depends automatisch mee. Recommends worden standaard ook geïnstalleerd, Suggests niet. Met --no-install-recommends houd je een installatie klein; dat zie je vaak in Dockerfiles (les 15).
Dit is hetzelfde idee als pip en npm in les 25 van de hoofdcursus, maar dan voor het hele systeem.
Installeer geen .deb-bestanden die je ergens van internet hebt gedownload als er een pakket in de officiële repository is. Losse pakketten krijgen geen beveiligingsupdates via apt upgrade.
Updates veilig uitvoeren
Updates sluiten beveiligingslekken; op een server wil je ze dus. Maar een update kan ook iets veranderen waar je op leunt. Een veilige routine:
- Kijk eerst:
sudo apt updateenapt list --upgradable. - Voer uit op een rustig moment:
sudo apt upgrade. Lees de samenvatting. - Vragen over configuratie:
aptvraagt soms of je een configuratiebestand wilt vervangen door de nieuwe versie van het pakket. Heb je het bestand zelf aangepast (les 5), kies dan meestal om je eigen versie te houden, en bekijk het verschil. - Herstart wat nodig is: na een update van de kernel of van belangrijke bibliotheken is een herstart nodig. Bestaat
/var/run/reboot-required, dan vraagt het systeem erom. - Controleer of je diensten nog draaien (les 8).
Op productieservers test je updates eerst op een testmachine. Automatische beveiligingsupdates (unattended-upgrades) behandelen we in les 19.
Andere pakketbeheerders
Het idee is overal hetzelfde, alleen de namen verschillen:
| Distributie | Beheerder | Installeren | Bijwerken |
|---|---|---|---|
| Debian, Ubuntu | apt |
apt install |
apt update && apt upgrade |
| Fedora, RHEL, Rocky | dnf |
dnf install |
dnf upgrade |
| Alpine (veel in containers) | apk |
apk add |
apk update && apk upgrade |
| Arch | pacman |
pacman -S |
pacman -Syu |
| openSUSE | zypper |
zypper install |
zypper update |
Daarnaast bestaan formaten die los van de distributie werken, zoals Snap en Flatpak (vooral voor desktopprogramma's), en natuurlijk containers (vanaf les 14).
Oefenen
Oefening 1. Je wilt tree installeren, maar sudo apt install tree geeft E: Unable to locate package tree. Wat is de meest waarschijnlijke oorzaak?
Modelantwoord oefening 1
De pakketlijsten zijn nog niet (of lang niet) opgehaald. Draai eerst sudo apt update. In een verse container is de lijst vaak helemaal leeg.
Oefening 2. Hoe kom je erachter welke versie van nginx geïnstalleerd is en welke er beschikbaar is?
Modelantwoord oefening 2
apt policy nginx toont Installed en Candidate. Of: nginx -v voor de geïnstalleerde versie.
Oefening 3. Wat is het verschil tussen apt remove en apt purge?
Modelantwoord oefening 3
remove verwijdert het programma, maar laat de configuratiebestanden in /etc staan (handig als je het later opnieuw installeert). purge verwijdert ook de configuratie.
Lab: een set tools installeren
- Start het lab:
docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les7. Het is een minimale Debian-container; je magsudogebruiken. - Werk de pakketlijsten bij en kijk welke pakketten bijgewerkt kunnen worden.
- Installeer
htop,tree,curlenjqin één commando, zonder aanbevolen pakketten. - Schrijf de geïnstalleerde versies (uit
apt policy) naar~/antwoorden/versies.txt, één regel per pakket:naam versie. - Verwijder
treeweer metpurgeen ruim ongebruikte afhankelijkheden op. - Controleer met
beetje check les7.
Samenvatting
- Software installeer je via een pakketbeheerder uit ondertekende repositories, niet via losse downloads.
apt updatehaalt de lijsten op;apt upgradewerkt bij;apt install,remove,purge,autoremovebeheren pakketten.apt policyenapt showtonen versies en afhankelijkheden.- Updates zijn belangrijk voor de veiligheid: kijk eerst, lees de samenvatting, en controleer daarna je diensten.
- Andere distributies:
dnf,apk,pacman,zypper; het principe is gelijk.
In les 8 laat je geïnstalleerde software als dienst draaien, en lees je de logs.
Lab
Een set tools installeren en de versies controleren
💻 Dit lab doe je op je eigen computer met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):
$ docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les7
Klaar? Controleer je werk met:
$ beetje check les7