Beetje Coderen

Les 7

Software installeren met pakketbeheer

Pakketten zoeken, installeren en bijwerken met apt.

⏱ 45–60 minuten leestijd + oefenen

🎯 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 (trixie is Debian 13).
  • Components: welk deel; main is vrije software die door Debian wordt onderhouden.
  • Signed-By: de sleutel waarmee de pakketlijsten ondertekend zijn. apt controleert 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:

  1. Kijk eerst: sudo apt update en apt list --upgradable.
  2. Voer uit op een rustig moment: sudo apt upgrade. Lees de samenvatting.
  3. Vragen over configuratie: apt vraagt 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.
  4. 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.
  5. 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

  1. Start het lab: docker run -it --rm registry.wizg.it/webhosting/beetje-labs:les7. Het is een minimale Debian-container; je mag sudo gebruiken.
  2. Werk de pakketlijsten bij en kijk welke pakketten bijgewerkt kunnen worden.
  3. Installeer htop, tree, curl en jq in één commando, zonder aanbevolen pakketten.
  4. Schrijf de geïnstalleerde versies (uit apt policy) naar ~/antwoorden/versies.txt, één regel per pakket: naam versie.
  5. Verwijder tree weer met purge en ruim ongebruikte afhankelijkheden op.
  6. Controleer met beetje check les7.

Samenvatting

  • Software installeer je via een pakketbeheerder uit ondertekende repositories, niet via losse downloads.
  • apt update haalt de lijsten op; apt upgrade werkt bij; apt install, remove, purge, autoremove beheren pakketten.
  • apt policy en apt show tonen 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

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker. Voor dit lab is er geen live lab in de browser.

Klaar? Controleer je werk met:

$ beetje check les7

📝 Quiz: software installeren met pakketbeheer

5 vragen · 70% nodig om te slagen

1. Wat doet `sudo apt update`?
2. Wat is een repository?
3. Welke pakketbeheerder gebruikt Alpine Linux?
4. Wat doet `apt autoremove`?
5. Waarom controleert apt de handtekening (Signed-By) van een repository?