Qu'est ce que sont les paquets virtuels?

Tags: #<Tag:0x00007f336e53c250>

Salut,

Voici un peu de contexte pour commencer :

Je souhaite installer le Docker Engine.

Il y a un script de commodité qui fait tout automatiquement mais j’ai choisi (à des fins d’apprentissage) d’utiliser la « version longue » qui est divisée en plusieurs étapes. La première étape consiste en la configuration du référentiel apt de Docker (Set up Docker’s apt repository) dont voici le script :

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

J’ai tout d’abord pensé que c’était bizarre que l’on ne puisse pas directement taper « apt install docker-ce » (c’est ce qui est demandé dans l’étape suivante).

Par curiosité, j’ai voulu voir ce qui se passerait si je tapais « apt show docker-ce » et voici ce qui m’a été renvoyé :

Package: docker-ce
State: not a real package (virtual)
N: Can't select candidate version from package docker-ce as it has no candidate
N: Can't select versions from package 'docker-ce' as it is purely virtual
N: No packages found

En cherchant, j’ai fini par tomber sur cette explication donnée à propos des paquets virtuels dans le manuel utilisateur de Debian :

A virtual package is a generic name that applies to any one of a group of packages, all of which provide similar basic functionality. For example, both the konqueror and firefox-esr programs are web browsers, and should therefore satisfy any dependency of a program that requires a web browser on a system, in order to work or to be useful. They are therefore both said to provide the « virtual package » called www-browser .

D’après ce que j’en comprends : les paquets virtuels seraient donc comme des sortes d’« espaces génériques réservés » destinés à pointer vers un paquet « concret ».

Cette définition est-elle valable ?

Cela veut donc t-il dire que les développeurs de Docker ont réservé ce nom « à l’avance » ? Car le nom du paquet existe, la preuve : si je tape « apt show paquet_inconnu » la sortie en console n’est pas la même :

apt show paquet-inconnu
N: Unable to locate package paquet-inconnu
N: Unable to locate package paquet-inconnu
E: No packages found

Questions subsidiaires :

  1. Pourquoi les développeurs de Docker s’appuient il sur ce mécanisme ?
  2. Existe t’il un mécanisme de sécurité qui empêche n’importe quel paquet de prendre la place du « paquet officiel » ? Je vois qu’il est question d’une « clé GPG » est-ce cela ?

D’avance, merci.

Le paquet Docker à existé un temps sous un autre nom empaqueter par les équipes Debian mais pas mis à jour aussi souvent que le désirais les utilisateurs, la communauté s’est donc tourné vers les paquets officiels.
Donc nécessité d’ajouter le dépôts et les prérequis pour permettre à APT d’installer à la sauce Debian le paquet :wink:

non gpg signe uniquement le dépôt pour l’authentifier … la mécanique derrière les paquet virtuel est bien complexe et à mon avis tu n’a pas besoin à mon avis de connaître cette mécanique pour l’instant :wink:

https://www.debian.org/doc/manuals/debian-faq/pkg-basics.fr.html#virtual

Procédure simple :

  • s’assurer de ne pas avoir de podman ou de docker ancien (paquet debian surtout ^^ ).
    *ajouter la clé du dépôts et le dépôts lui même
  • recharger le cache apt et installer le paquet

Attention après l’installation il y a des opérations de sécurisation et d’optimisation (dont certaines fourni dans la doc officielle) à suivre, surtout si le socket de docker est ouvert vers l’extérieur !

1 J'aime