Installation de logiciels

Objectifs de certification

RHCSA EX200

  • 5.Déployer, configurer et gérer des systèmes
    • 5.11. Installer et mettre à jour des paquetages logiciels depuis Red Hat Network, un dépôt distant, ou depuis le système de fichiers local
    • 5.12. Mettre à jour le paquetage du noyau de manière adéquate pour garantir la possibilité de démarrer le système
    • 5.13. Modifier le chargeur de démarrage du système

LPIC 1

LPIC 2

1. Gestionnaire de paquets

1.1. Gestionnaire de paquets

  • Un gestionnaire de paquets est un (ou plusieurs) outil(s) automatisant le processus d'installation, désinstallation, mise à jour de logiciels installés sur un système informatique.
  • Un paquet est une archive comprenant les fichiers informatiques, les informations et procédures nécessaires à l'installation d'un logiciel sur un système d'exploitation, en s'assurant de la cohérence fonctionnelle du système ainsi modifié.

1.2. Utilité

  • Le gestionnaire de paquets permet d'effectuer différentes opérations sur les paquets disponibles :
  • Installation, mise à jour, et désinstallation ;
  • Utilisation des paquets provenant de supports variés (CD d'installation, dépôts sur internet, partage réseau…) ;
  • Vérification des sommes de contrôle de chaque paquet récupéré pour en vérifier l'intégrité ;
  • Vérification des dépendances logicielles afin d'obtenir une version fonctionnelle d'un paquetage

1.3. Nomenclature des systèmes de paquets

  • On trouve deux grands types de système de paquets :
    • RPM : Redhat Enterprise Linux, Fedora, Centos, ...
    • DPKG: Debian, Ubuntu, Mint, Raspbian, ...
  • D’autres méritent l’intérêt :
    • Portage/emerge : Gentoo
    • Pacman : Archlinux
    • opkg : OpenWRT

1.4. Utilitaire dpkg

  • Dpkg est utilisé pour installer, supprimer et fournir des informations à propos des paquets *.deb qui sont supportés par les distributions basées Debian.
  • Outil de bas niveau, dpkg -i / dpkg -r permettent d’installer ou de désinstaller des fichiers .deb. Pour ces tâches, on préfère utiliser des outils plus avancés comme aptitude ou apt-get, apt-cache.

Commandes utiles dpkg

  • Pour lister tous les paquets installés :
# dpkg -l

ou

dpkg --get-selections
  • Pour vérifier qu’un paquet soit installé :
# dpkg -s wget
  • Pour lister les fichiers installés par un paquet :
# dpkg -L wget
  • Pour reconfigurer un paquet installé :
# dpkg-reconfigure locales

Le Manuel de l'administrateur debian, chapitre 5 "Système de paquetage, outils et principes fondamentaux" offre des détails et des exemples à titre d'exercice sur le sujet :

1.5. Utilitaire rpm

  • RPM est l’autre système de base. Il permet d’installer, mettre à jour, désinstaller, vérifier et rechercher des paquets.

  • Pour Installer un paquet :

# rpm -ivh fichier.rpm
  • Pour mettre à jour un paquet
# rpm -Uvh fichier.rpm
  • Pour désinstaller un paquet :
# rpm -evv fichier.rpm
  • Vérifier la signature d’un paquet :
# rpm --checksig fichier.rpm

Commande rpm -q

  • Lister tous les paquets installés :
# rpm -qa
  • Vérifier qu’un paquet est installé :
# rpm -q wget
  • Lister les fichiers d’un paquet installé :
# rpm -ql wget
  • Obtenir toutes les informations concernant un paquet installé :
# rpm -qi wget
  • Obtenir toutes les informations concernant un paquet avant le l’installer :
# rpm -qip fichier.rpm

2. Dépôt de paquets

  • Un gestionnaire de paquet avancé comme apt ou yum gère des sources de logiciels (la plupart du temps déjà compilés) et leur authenticité.
  • Le lieu où sont placés ses sources est appelé dépôt de paquet. Cette source est la plupart du temps une source locale comme un CD ou un DVD, un serveur Internet HTTP/FTP ou encore un miroir de dépôt local.
  • La définition d’un dépôt de paquets dépend outre de la source elle-même de la distribution, de l’architecture matérielle, des sources officielles ou autres.
  • Certains concepteurs de logiciels fabriquement eux-mêmes les binaires d'installation pour les distributions et hébergent leurs propres dépôts de paquets.

2.1. Principe de fonctionnement

Principe de fonctionnement d’un gestionnaire de paquet avancé :

  • Les logiciels disponibles sont contenus dans une liste qui doit être à jour afin d’assurer la cohérence de l’ensemble du système.
  • Au moment de la demande d’installation, cette liste est consultée pour prendre les fichiers nécessaires.
  • Le système de paquetage décompresse et place les différents fichiers binaires, de configuration et de documentation aux endroits appropriés. Éventuellement, un dialogue de configuration intervient.
  • Éventuellement, le système de paquetage installe automatiquement un service et le démarre.

Tâches

  • Vérification de l’existence d’un paquet
  • Version du logiciel dans le paquet
  • Fichiers de configuration
  • Source
  • Fichiers de configuration /etc
  • Désinstallation
  • Purge des fichiers
  • Suppression des dépendances orphelines

2.2. APT

  • APT simplifie l'installation, la mise à jour et la désinstallation de logiciels en automatisant la récupération de paquets à partir de sources APT (sur Internet, le réseau local, des CD-ROM, etc.), la gestion des dépendances et parfois la compilation.
  • Lorsque des paquets sont installés, mis à jour ou enlevés, les programmes de gestion de paquets peuvent afficher les dépendances des paquets, demander à l'administrateur si des paquets recommandés ou suggérés par des paquets nouvellement installés devraient aussi être installés, et résoudre les dépendances automatiquement. Les programmes de gestion de paquets peuvent aussi mettre à jour tous les paquets.
  • Il n'existe pas de commande apt en tant que telle. APT est essentiellement une bibliothèque C++ de fonctions utilisées par plusieurs programmes de gestion de paquets. Un de ces programmes est apt-get, probablement le plus connu et celui recommandé officiellement par le projet Debian. aptitude est également populaire et propose des fonctionnalités étendues par rapport à apt-get.

Sources APT

  • Les sources à partir desquelles apt va chercher les paquets sont définies dans le fichier /etc/apt/sources.list

  • Par exemple sur une machine debian 7 :

# cat /etc/apt/sources.list
deb http://http.debian.net/debian wheezy main
deb http://http.debian.net/debian wheezy-updates main
deb http://security.debian.org wheezy/updates main
  • On prendra l’habitude de mettre à jour la liste de paquetages avec :
# apt-get update

Recherche APT

  • Recherche dans les descriptions de paquets :
# apt-cache search wget
  • Voir les informations d’un paquet :
# apt-cache show wget
  • Vérifier les dépendances d’un paquet :
# apt-cache showpkg wget

Mise à jour et installation APT

  • Mettre à jour tous les paquets sans ajout de nouveaux paquets :
# apt-get update && apt-get upgrade
  • Mettre à jour tous les paquets installés vers les dernières versions en installant de nouveaux paquets si nécessaire :
# apt-get dist-upgrade
  • Installation ou mise-à-jour d’un paquet :
# apt-get install wget
  • Installation sans dialogue :
# apt-get -y install wget

Désinstallation de paquets APT

  • Retirer le paquets sans les configurations :
# apt-get remove wget
  • Retirer le paquets sans les dépendances :
# apt-get autoremove wget
  • Retirer totalement un paquet :
# apt-get purge wget
  • On peut combiner les deux :
# apt-get autoremove --purge wget
  • Retire les dépendances non nécessaires :
# apt-get autoremove
  • Suppression des fichiers mis en cache dans `var/cache/apt/archives :
# apt-get clean

Utilement, on ira lire les précisions des sections 6.2 et 6.3 et 6.4 du Manuel de l'Administrateur Debian :

  • Réinstaller un paquet :
# apt --reinstall install postfix
  • Installation d'une version "unstable" :
# apt install spamassassin/unstable
  • apt full-upgrade C'est également la commande employée par ceux qui exploitent quotidiennement la version Unstable de Debian et suivent ses évolutions au jour le jour. Elle est si simple qu'elle parle d'elle-même : c'est bien cette fonctionnalité qui a fait la renommée d'APT.

  • aptitude est un programme interactif en mode semi-graphique, utilisable sur la console, qui permet de naviguer dans la liste des paquets installés et disponibles, de consulter l'ensemble des informations et de les marquer en vue d'une installation ou d'une suppression. Comme il s'agit cette fois d'un programme réellement conçu pour être utilisé par les administrateurs, on y trouve des comportements par défaut plus intelligents que dans apt-get, en plus d'une interface plus abordable.

Gestionnaire de paquets aptitude

Gestionnaire de paquets aptitude

  • synaptic est un gestionnaire de paquets Debian en mode graphique (il utilise GTK+/GNOME). Il dispose d'une interface graphique efficace et propre. Ses nombreux filtres prêts à l'emploi permettent de voir rapidement les nouveaux paquets disponibles, les paquets installés, ceux que l'on peut mettre à jour, les paquets obsolètes, etc. En naviguant ainsi dans les différentes listes, on indique progressivement les opérations à effectuer (installer, mettre à jour, supprimer, purger). Un simple clic suffit à valider l'ensemble de ces choix et toutes les opérations enregistrées sont alors effectuées en une seule passe.

Gestionnaire de paquets synaptic

Gestionnaire de paquets synaptic

Authentification des paquets Debian

Debian offre un moyen de s'assurer que le paquet installé provient bien de son mainteneur et qu'il n'a subi aucune modification par un tiers : il existe un mécanisme de scellement des paquets.

Cette signature n'est pas directe : le fichier signé est un fichier Release placé sur les miroirs Debian et qui donne la liste des différents fichiers Packages (y compris sous leurs formes compressées Packages.gz et Packages.xz et les versions incrémentales), accompagnés de leurs sommes de contrôle MD5, SHA1 et SHA256 (pour vérifier que leur contenu n'a pas été altéré). Ces fichiers Packages renferment à leur tour une liste de paquets Debian et leurs sommes de contrôle, afin de garantir que leur contenu n'a pas lui non plus été altéré.

La gestion des clés de confiance se fait grâce au programme apt-key, fourni par le paquet apt. Ce programme maintient à jour un trousseau de clés publiques GnuPG, qui sont utilisées pour vérifier les signatures des fichiers Release.gpg obtenus depuis les miroirs Debian.

Il est possible de l'utiliser pour ajouter manuellement des clés supplémentaires (si l'on souhaite ajouter des miroirs autres que les miroirs officiels) ; mais dans le cas le plus courant, on n'a besoin que des clés officielles Debian, qui sont automatiquement maintenues à jour par le paquet debian-archive-keyring (qui installe les trousseaux de clés dans `/etc/apt/trusted.gpg.d).

Cependant, la première installation de ce paquet est également sujette à caution, car même s'il est signé comme les autres paquets, cette signature ne peut pas être vérifiée extérieurement. On s'attachera donc à vérifier les empreintes (fingerprints) des clés importées, avant de leur faire confiance pour installer de nouveaux paquets avec apt-key fingerprint.

Source : Vérification d'authenticité des paquets

Par exemple,

# apt-key fingerprint

/etc/apt/trusted.gpg.d/debian-archive-jessie-automatic.gpg
----------------------------------------------------------
pub   4096R/2B90D010 2014-11-21 [expire : 2022-11-19]
 Empreinte de la clef = 126C 0D24 BD8A 2942 CC7D  F8AC 7638 D044 2B90 D010
uid                  Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-jessie-security-automatic.gpg
-------------------------------------------------------------------
pub   4096R/C857C906 2014-11-21 [expire : 2022-11-19]
 Empreinte de la clef = D211 6914 1CEC D440 F2EB  8DDA 9D6D 8F6B C857 C906
uid                  Debian Security Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg
-------------------------------------------------------
pub   4096R/518E17E1 2013-08-17 [expire : 2021-08-15]
 Empreinte de la clef = 75DD C3C4 A499 F1A1 8CB5  F3C8 CBF8 D6FD 518E 17E1
uid                  Jessie Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d/debian-archive-squeeze-automatic.gpg
-----------------------------------------------------------
pub   4096R/473041FA 2010-08-27 [expire : 2018-03-05]
 Empreinte de la clef = 9FED 2BCB DCD2 9CDF 7626  78CB AED4 B06F 4730 41FA
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-squeeze-stable.gpg
--------------------------------------------------------
pub   4096R/B98321F9 2010-08-07 [expire : 2017-08-05]
 Empreinte de la clef = 0E4E DE2C 7F3E 1FC0 D033  800E 6448 1591 B983 21F9
uid                  Squeeze Stable Release Key <debian-release@lists.debian.org>

/etc/apt/trusted.gpg.d/debian-archive-wheezy-automatic.gpg
----------------------------------------------------------
pub   4096R/46925553 2012-04-27 [expire : 2020-04-25]
 Empreinte de la clef = A1BD 8E9D 78F7 FE5C 3E65  D8AF 8B48 AD62 4692 5553
uid                  Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>

/etc/apt/trusted.gpg.d/debian-archive-wheezy-stable.gpg
-------------------------------------------------------
pub   4096R/65FFB764 2012-05-08 [expire : 2019-05-07]
 Empreinte de la clef = ED6D 6527 1AAC F0FF 15D1  2303 6FB2 A1C2 65FF B764
uid                  Wheezy Stable Release Key <debian-release@lists.debian.org>

2.3. YUM

  • Yum, pour Yellowdog Updater Modified, est un gestionnaire de paquets pour des distributions Linux telles que Fedora et Red Hat Enterprise Linux, créé par Yellow Dog Linux.

  • Il permet de gérer l'installation et la mise à jour des logiciels installés sur une distribution. C'est une surcouche de RPM gérant les téléchargements et les dépendances, de la même manière que APT de Debian.

YUM commandes de base

  • Contrairement à APT, YUM met à jour sa liste de paquets automatiquement.

  • Chercher un paquet :

# yum search wget
  • Lister des informations concernant un paquet :
# yum list wget
# yum info wget
  • Installer un paquet :
# yum install wget
  • Installer un paquet sans dialogue:
# yum -y install wget
  • Désinstaller un paquet
# yum remove wget

YUM mise-à-jour

  • Mise-à-jour d’un paquet :
# yum update wget
  • Vérification des mise-à-jours disponibles :
# yum check-update
  • Mise-à-jours de sécurité et des binaires :
# yum update

YUM Group Packages

  • Les groupes de paquets sont des collections de paquets :
    # yum groups list
    # yum groups info group
    # yum groups install group
    # yum groups update group
    # yum groups remove group
    

YUM dépôts de paquets

  • Liste des dépôts de paquets :
# yum repolist
# yum repolist all
  • Installer un dépôt supplémentaire EPEL (Extra Packages for Enterprise Linux) :
# yum install epel-release

RPMforge is a dead project for several years now and I don't see a purpose in keeping up appearance that it is not. It's been dying since EPEL became the one true repository for RHEL and CentOS. (dagwieers)

# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
# wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
# rpm --import RPM-GPG-KEY.dag.txt

Le code d’installation se trouve sur : https://gist.github.com/goffinet/4332ae9486345c2bf623

Installer un dépôt supplémentaire

  • La configuration des dépôts est située dans le dossier /etc/yum.repos.d/ :
ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo  mirrors-rpmforge-extras   rpmforge.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  mirrors-rpmforge   mirrors-rpmforge-testing
  • Par exemple le premier dépôt configuré dans le fichier CentOS-Base.repo :
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

On notera une déclaration de section [base] en en-tête et quatre variables essentielles :

  • name qui indique le nom du dépôt.
  • mirrorlist ou baseurl qui indiquent l'emplacement du dépôt
  • gpgckeck qui demande une vérification d'intégrité et gpgkey qui fixe le fichier de vérification d'emprunte. Il n'est pas nécessaire gpckeck=0 est configuré.
  • Enfin, enabled=1activerait la prise en compte du dépôt

L'utilitaire yum-config-manager permet d'ajouter un dépôt aisément :

# yum-config-manager --add-repo=http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/
Modules complémentaires chargés : fastestmirror, langpacks
adding repo from: http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/

[ftp.belnet.be_ftp.centos.org_7_os_x86_64_]
name=added from: http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/
baseurl=http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/
enabled=1

Y ajouter gpgcheck=0 :

# echo "gpgcheck=0" >> /etc/yum.repos.d/ftp.belnet.be_ftp.centos.org_7_os_x86_64_.repo
[root@wks01 user]# cat /etc/yum.repos.d/ftp.belnet.be_ftp.centos.org_7_os_x86_64_.repo

[ftp.belnet.be_ftp.centos.org_7_os_x86_64_]
name=added from: http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/
baseurl=http://ftp.belnet.be/ftp.centos.org/7/os/x86_64/
enabled=1

gpgcheck=0

Remettre à jour la liste des paquetages :

# yum clean all
# yum repolist

YUM gestion des paquets

  • Lister les paquets installés :
# yum list installed | less
  • Effacer le cache /var/cache/yum/ :
# yum clean all
  • Historique des transactions yum
# yum history

2.4. Autres logiciel de gestion des paquets

  • Pacman : Arch Linux.
  • Emerge : Gentoo
  • Opkg : Openwrt

3. Maintenance et mises à jour

3.1. Maintenance des mises à jour d'un système Debian

  • apticron, dans le paquet du même nom. Il s'agit simplement d'un script, appelé quotidiennement par cron, qui met à jour la liste des paquets disponibles et envoie un courrier électronique à une adresse donnée pour lister les paquets qui ne sont pas installés dans leur dernière version, ainsi qu'une description des changements qui ont eu lieu. Ce script vise principalement les utilisateurs de Debian Stable, on s'en doute.

  • On pourra donc tirer parti du script /etc/cron.daily/apt, installé par le paquet apt. Ce script est lui aussi lancé quotidiennement par cron, donc sans interface interactive. Pour contrôler son fonctionnement, on utilisera des variables de configuration d'APT (qui seront donc stockées dans un fichier sous /etc/apt/apt.conf.d/). Les plus importantes sont :

APT::Periodic::Update-Package-Lists

Cette option permet de spécifier une fréquence (en jours) de mise à jour des listes de paquets. Si l'on utilise apticron, on pourra s'en passer, puisque cela ferait double emploi.

APT::Periodic::Download-Upgradeable-Packages

Cette option spécifie également une fréquence en jours, qui porte sur le téléchargement des paquets mis à jour. Là encore, les utilisateurs d'apticron pourront s'en passer.

APT::Periodic::AutocleanInterval

Cette option couvre une fonction que n'a pas apticron : elle spécifie la fréquence à laquelle le cache d'APT pourra être automatiquement épuré des paquets obsolètes (ceux qui ne sont plus disponibles sur les miroirs ni référencés par aucune distribution). Elle permet de ne pas avoir à se soucier de la taille du cache d'APT, qui sera ainsi régulée automatiquement.

APT::Periodic::Unattended-Upgrade

Lorsque cette option est activée, le script quotidien exécutera unattended-upgrade (dans le paquet unattended-upgrades) qui, comme son nom l'indique, automatise le processus de mise à jour pour certains paquets ; par défaut, il ne s'occupe que des mises à jour de sécurité, mais cela est configurable dans le fichier /etc/apt/apt.conf.d/50unattended-upgrades). Notons que cette option peut être activée avec debconf, à l'aide de la commande dpkg-reconfigure -plow unattended-upgrades.

Source : Maintenir un système à jour

3.2. Mise à jour d'une distribution Debian depuis une ancienne version

Mise à jour depuis Debian 7 (wheezy)

Recommendations :

  • Effacer les paquets non nécessaires
  • Mettre à jour le système actuel
  • Réaliser une sauvegarde des données

Mettre à jour la distribution Debian Wheezy :

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

Mettre à jour les sources d'installation :

# sed -i 's/wheezy/jessie/g' /etc/apt/sources.list

Mettre à jour les paquets :

# apt-get update
# apt-get -y upgrade

Mettre à jour la distribution :

# apt-get -y dist-upgrade

Redémarrer :

# reboot

Vérifier la version :

# hostnamectl
   Static hostname: wheezy1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: cab21b38a8058c4d3f6641f1587fa5b7
           Boot ID: cde0bd1e7ada4c44acd12bae10adff75
    Virtualization: kvm
  Operating System: Debian GNU/Linux 8 (jessie)
            Kernel: Linux 3.16.0-4-amd64
      Architecture: x86-64

Remettre à jour :

# apt-get update
# apt-get -y upgrade
# apt-get -y autoremove
# apt-get -y dist-upgrade

Mise à jour depuis Debian 8 (jessie)

La procédure est identique de la version Debian 8 Jessie à la version Debian 9 Stretch.

# cp /etc/apt/sources.list /etc/apt/sources.list_backup
# sed -i 's/jessie/stretch/g' /etc/apt/sources.list
# apt-get update
# apt-get -y upgrade
# apt-get -y dist-upgrade
# reboot
# apt-get update
# apt-get -y upgrade
# apt-get -y autoremove
# apt-get -y dist-upgrade
hostnamectl
   Static hostname: wheezy1
         Icon name: computer-vm
           Chassis: vm
        Machine ID: cab21b38a8058c4d3f6641f1587fa5b7
           Boot ID: efd16e22f98a42d0a7d3cf44dba21fc9
    Virtualization: kvm
  Operating System: Debian GNU/Linux 9 (stretch)
            Kernel: Linux 4.8.0-2-amd64
      Architecture: x86-64

4. Installation par les sources

4.1. Principe

Une installation par les sources est en général documentée par ses auteurs dans un fichier REAME, docs/INSTALL.txt ou autre. La compilation consiste à :

  1. Récupérer et décompresser les sources.
  2. Disposer des outils de compilation et des librairies nécessaires.
  3. Configurer la compilation en lançant un programme / commande étendue ou en éditant un fichier configuration
  4. Vérifier les dépendances
  5. Exécuter la compilation dans un dossier temporaire sans droit root.
  6. Placer les binaires compilés (exécutables et librairies) et les fichiers de configuration aux endroits habituels du système.
  7. Eventuellement la compilation a donné lieu à un paquet de distribution à installer.
  8. Enfin, il est peut être nécessaire de configurer un service.

4.2. Installation des outils de compilation

Ces outils sont gcc, c++, make et d'autres.

En RHEL7/Centos 7

yum groupinstall "Development Tools"

En Debian / Ubuntu

apt-get install build-essential

En Arch Linux

pacman -Sy base-devel

4.3. Exemples d'installations par les sources

Ce document regorge d'exemples de logiciels compilés et installés de cette manière.

  • John the Ripper sous Centos 7
  • Stress-ng sous Centos 7
  • Apache 2 sous Debian 8
  • Asterisk sous Centos 7
  • Un noyau Linux sous Debian 8

4.4. Fabrication de paquets

Il pourrait sembler incongru de s'intéresser à la fabrication des paquets. En effet, pourquoi se passer d'un certain support communautaire ou commercial ? Aussi, la tâche de "mainteneur" n'est pas chose aisée. Mais selon la nature, la taille ou la mentalité d'un organisation et de son équipe IT, on imagine qu'une vue sur l'origine des binaires distribués dans une infrastructure soit un avantage de l'Open Source. Il semblerait même qu'il soit fortement conseillé de s'intéresser au sujet, ne fut-ce que pour mieux maîtriser son système et sa sécurité.

On pourrait construire des paquets à partir de deux sources :

  • A partir paquets originaux (dits "sources")
  • Directement à partir des sources du logiciel lui-même

Utilité de re-construire des paquets à partir des sources de leur fabrication :

  • Pour re-générer le paquet binaire
  • Pour dépanner des problèmes avec des librairies ou des applications
  • Pour modifier l'application actuelle pour ajouter de la journalisation (logging)
  • Pour confirmer qu'un patch de sécurité a été correctement appliqué dans la source

Utilité de construire un paquet à partir des sources originales :

  • Le paquet source n'existe pas déjà.
  • On le construit pour un script ou une application "maison"

4.5. Fabrication de paquets RPM pour Centos 7

En cours de développement.

5. Mettre à jour le noyau

5.1. Procédure RHEL

# yum update kernel

ou alors si le fichier rpm est disponible

# rpm -ivh kernel.rpm

Le dernier noyau installé devient le premier par défaut :

# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)
# grep ^menuentry /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {
menuentry 'CentOS Linux (0-rescue-d939e80ee5d6473297b10a3839c85928) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-d939e80ee5d6473297b10a3839c85928-advanced-5cc65046-7a0e-450b-99e8-f0cc34954d75' {

Modifier le noyau par défaut :

# grub2-set-default 0

Générer la configuration :

# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-327.13.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.13.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-327.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-327.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d939e80ee5d6473297b10a3839c85928
Found initrd image: /boot/initramfs-0-rescue-d939e80ee5d6473297b10a3839c85928.img
done

5.2. Compilation du noyau (sous forme de paquet .deb)

Cette opération peut prendre plusieurs heures.

L'exercice en Debian 8 propose de :

Récupérer les sources d'une version du noyau Linux, de réaliser la compilation et enfin de fabriquer un paquet à installer.

Les noyaux restant sous le contrôle du système de paquetage, ils peuvent être rapidement supprimés ou déployés sur plusieurs machines. De plus, les scripts associés à ces paquets permettent également une meilleure interaction avec le chargeur de démarrage et le générateur d'images de démarrage (initrd). (Source)[https://debian-handbook.info/browse/fr-FR/stable/sect.kernel-compilation.html#sect.kernel-compilation-prerequisites]

Récupération des sources

On peut trouver les sources sous forme de paquet qui les placera dans le x. Ces sources ne sont pas exactement celles de kernel.org.

# apt-get update
# apt-cache search ^linux-source
linux-source-3.16 - Linux kernel source for version 3.16 with Debian patches
linux-source - Linux kernel source (meta-package)
# apt-get -y install linux-source-3.16
# ls /usr/src/linux-source*
/usr/src/linux-source-3.16.tar.xz

On peut aussi prendre les sources officielles sur ftp.kernel.org.

Exemple d'époque en Centos7 :

$ ftp ftp.kernel.org
Trying 149.20.4.69...
Connected to ftp.kernel.org (149.20.4.69).
220 Welcome to kernel.org
Name (ftp.kernel.org:francois): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls pub/linux/kernel/v*
227 Entering Passive Mode (149,20,4,69,119,116).
150 Here comes the directory listing.
drwxrwxr-x 2 ftp ftp 4096 Mar 20 2003 v1.0
drwxrwxr-x 2 ftp ftp 36864 Mar 20 2003 v1.1
drwxrwxr-x 2 ftp ftp 12288 Mar 20 2003 v1.2
drwxrwxr-x 2 ftp ftp 69632 Mar 20 2003 v1.3
drwxrwxr-x 3 ftp ftp 32768 Feb 08 2004 v2.0
drwxrwxr-x 2 ftp ftp 98304 Mar 20 2003 v2.1
drwxrwxr-x 3 ftp ftp 20480 Mar 24 2004 v2.2
drwxrwxr-x 2 ftp ftp 36864 Mar 20 2003 v2.3
drwxrwxr-x 5 ftp ftp 36864 May 01 2013 v2.4
drwxrwxr-x 4 ftp ftp 57344 Jul 14 2003 v2.5
drwxrwxr-x 10 ftp ftp 73728 Aug 08 2013 v2.6
lrwxrwxrwx 1 ftp ftp 4 Nov 23 2012 v3.0 -> v3.x
drwxrwxr-x 5 ftp ftp 262144 Aug 23 13:26 v3.x
drwxr-xr-x 5 ftp ftp 36864 Aug 22 21:21 v4.x
226 Directory send OK.
ftp> ls pub/linux/kernel/v4.x/linux-4.7*
227 Entering Passive Mode (149,20,4,69,117,64).
150 Here comes the directory listing.
-rw-r--r-- 1 ftp ftp 137739500 Aug 16 19:59 linux-4.7.1.tar.gz
-rw-r--r-- 1 ftp ftp 819 Aug 16 19:59 linux-4.7.1.tar.sign
-rw-r--r-- 1 ftp ftp 90398912 Aug 16 19:59 linux-4.7.1.tar.xz
-rw-r--r-- 1 ftp ftp 137745639 Aug 20 16:18 linux-4.7.2.tar.gz
-rw-r--r-- 1 ftp ftp 819 Aug 20 16:18 linux-4.7.2.tar.sign
-rw-r--r-- 1 ftp ftp 90408888 Aug 20 16:18 linux-4.7.2.tar.xz
-rw-r--r-- 1 ftp ftp 137727435 Jul 24 20:00 linux-4.7.tar.gz
-rw-r--r-- 1 ftp ftp 473 Jul 24 20:00 linux-4.7.tar.sign
-rw-r--r-- 1 ftp ftp 90412100 Jul 24 20:00 linux-4.7.tar.xz
226 Directory send OK.
ftp> quit
221 Goodbye.

Exercice de récupération d'un noyau 4.9 en Debian 8

Installation des logiciels pré-requis.

En tant que super-utilisateur.

sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc
sudo apt-get install kernel-package

Obtention des sources

A exécuter comme utilisateur non-root.

Téléchargement des sources et décompression de l'archive.

wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.8.tar.xz
unxz linux-4.9.8.tar.xz
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.8.tar.sign

Ajout de la clé publique qui de l'auteur des sources

gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 38DBBDC86092693E

gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

Vérification du fichier archive.

gpg2 --verify linux-4.9.8.tar.sign

gpg: assuming signed data in 'linux-4.9.8.tar'
gpg: Signature made Sat 04 Feb 2017 09:47:47 AM CET using RSA key ID 6092693E
gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key) <greg@kroah.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E

Désarchiver les sources.

tar xvf linux-4.9.8.tar

Configuration

Se rendre dans le dossier des sources et copier la configuration courante du noyau.

cd linux-4.9.8/
cp /boot/config-$(uname -r) .config
make menuconfig
.config - Linux/x86 4.9.8 Kernel Configuration
──────────────────────────────────────────────────────────────────────────────
 ┌───────────────── Linux/x86 4.9.8 Kernel Configuration ──────────────────┐
 │  Arrow keys navigate the menu.  <Enter> selects submenus ---> (or empty │
 │  submenus ----).  Highlighted letters are hotkeys.  Pressing <Y>        │
 │  includes, <N> excludes, <M> modularizes features.  Press <Esc><Esc> to │
 │  exit, <?> for Help, </> for Search.  Legend: [ ] built-in  [ ]         │
 │ ┌─────────────────────────────────────────────────────────────────────┐ │
 │ │    [ ] 64-bit kernel                                                │ │
 │ │        General setup  --->                                          │ │
 │ │    [ ] Enable loadable module support  --->                         │ │
 │ │    [ ] Enable the block layer  --->                                 │ │
 │ │        Processor type and features  --->                            │ │
 │ │        Power management and ACPI options  --->                      │ │
 │ │        Bus options (PCI etc.)  --->                                 │ │
 │ │        Executable file formats / Emulations  --->                   │ │
 │ │    [ ] Networking support  --->                                     │ │
 │ │        Device Drivers  --->                                         │ │
 │ └────┴(+)─────────────────────────────────────────────────────────────┘ │
 ├─────────────────────────────────────────────────────────────────────────┤
 │        <Select>    < Exit >    < Help >    < Save >    < Load >         │
 └─────────────────────────────────────────────────────────────────────────┘

Choisir < Save > et < Exit >

Compilation

Nettoyer l'arbre des soureces et remettre à zéro le kernel-package.

make-kpkg clean

Compilation croisée.

fakeroot make-kpkg --initrd --revision=1.0.SPEC kernel_image kernel_headers -j2

La commande explicite fakeroot démarre la commande make-kpkg qui fabrique un paquet debian (.deb). Les options choisies sont :

  • --initrd : crée une image initrd.
  • --revision=1.0 : Révsion personnalisée.
  • kernel_image : produit le noyau en format de paquet debian configuré par le fichier de configuration .config.
  • kernel_headers : produit aussi les en-têtes du noyau en format de paquets debian.
  • -j2 : comilation croisée avec 2 CPUs.

Installation

ls  ../*.deb
../linux-headers-4.9.8_1.0.SPEC_amd64.deb  ../linux-image-4.9.8_1.0.SPEC_amd64.deb
sudo dpkg -i linux-image-4.9.8_1.0.SPEC_amd64.deb
sudo dpkg -i linux-headers-4.9.8_1.0.SPEC_amd64.deb

Redémarrage

sudo shutdown -r now

Vérificcation.

uname -a
uname -r
uname -mrs
dmesg | more
dmesg | egrep -i --color 'error|critical|failed'

Script

https://gist.githubusercontent.com/goffinet/559f5e176fc60e14841e6ae033e1ad93/raw/bbd3b0b0d28389e0c83ab18a51e9e3f471f9b27f/kernel.deb.sh

#!/bin/bash
sudo apt update && apt update -yqq && apt dist-upgrade -yqq
sudo apt install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc -yqq
sudo apt install kernel-package -yqq
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.8.tar.xz
unxz linux-4.9.8.tar.xz
wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.9.8.tar.sign
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 38DBBDC86092693E
gpg2 --verify linux-4.9.8.tar.sign
tar xvf linux-4.9.8.tar
cd linux-4.9.8/
cp /boot/config-$(uname -r) .config
make menuconfig
make-kpkg clean
fakeroot make-kpkg --initrd --revision=1.0.spec kernel_image kernel_headers -j 4
ls ../*.deb

6. Mettre en place un dépôt de paquets

En cours de développement, pour mémoire.

Objectif d'un dépôt local :

  • Se passer d'un dépôt distant
  • Diminuer le temps et la bande passante consommée par des mise-à-jour et des installations
  • Offrir des dépôts de paquets supplémentaires

Cas envisagés

  • Dépôt local Centos 7 avec une image iso
  • Dépôt Web Centos 7 avec une image iso

Plus gourmand en ressources

  • Dépôt complet Centos 7 synchronisé avec les dépôts de référence
  • Dépôt Debian 8

6.1. Dépôt local Centos 7 avec une image iso

Se procurer un iso DVD de Centos 7 à partir de https://www.centos.org/download/mirrors/

Monter l'iso dans un répertoire

mkdir /mnt/iso
mount -o loop,ro CentOS*.iso /mnt/iso
ls /mnt/iso
CentOS_BuildTag  GPL       LiveOS    RPM-GPG-KEY-CentOS-7
EFI         images    Packages  RPM-GPG-KEY-CentOS-Testing-7
EULA         isolinux  repodata  TRANS.TBL

Créer un fichier .repo dans /etc/yum.repos.d/

cat << EOF > /etc/yum.repos.d/CentOS-Local.repo
[Local]
name=Local Repo
baseurl=file:///mnt/iso
enabled=1
gpgcheck=0

EOF

Ensuite mettre à jour la liste de dépôts.

yum repolist

Une définition de dépôt avec authentification des sources.

cat << EOF > /etc/yum.repos.d/CentOS-Local.repo
[Local]
name=Local Repo
baseurl=file:///mnt/iso
enabled=1
gpgcheck=1
gpgkey=file:////mnt/iso/RPM-GPG-KEY-CentOS-7

EOF

6.2. Dépôt Web Centos 7 avec une image iso

Se procurer un iso DVD de Centos 7 à partir de https://www.centos.org/download/mirrors/

Installer Apache

yum install -y httpd

Monter l'iso.

mkdir /mnt/iso
mount -o loop,ro CentOS*.iso /mnt/iso

Copier le contenu du DVD dans /var/www/html/repo/CentOS/7/os/x86_64

mkdir -p /var/www/html/repo/CentOS/7/os/x86_64
cd /mnt/iso
tar cvf - . | (cd /var/www/html/repo/CentOS/7/os/x86_64; tar xvf -)

Création des métadonnées des paquets et de la base de données sqlite.

yum -y install createrepo
createrepo /var/www/html/repo/CentOS/7/os/x86_64/

Assigner les attributs Selinux aux nouveaux fichiers.

restorecon -R /var/www/html

Démarrer Apache

systemctl enable httpd && systemctl start httpd

Installer de dépôt avec l'adresse de localhost en http.

cat << EOF > /etc/yum.repos.d/CentOS-Web.repo
[Web]
name=Web Local Repository
baseurl=http://localhost/repo/CentOS/7/os/x86_64
gpgcheck=1
gpgkey=http://localhost/repo/CentOS/7/os/x86_64/RPM-GPG-KEY-CentOS-7
EOF
yum repolist

Mise à jour du dépôt :

  • Miroir de synchronisation
  • Rsync avec critères exclusifs
  • createrepo --update pour mettre à jour les métadonnées des paquets et la base de données sqlite.

7. Comparatif des gestionnaires de paquets par distribution

Du point de vue de l'administrateur système, les distributions Linux peuvent se distinguer par :

  1. le gestionnaire et le sytème de paquets
  2. les scripts d'initialisation et les niveaux d'exécution
  3. le chargeur de démarrage
  4. l'emplacement des fichiers de configuration du réseau et des dépôts

On s'intéressa ici aux différences génétiques concernant la gestion des paquets.

7.1. Debian/Ubuntu c. Fedora/RHEL/SL/Centos

Action Debian/Ubuntu Fedora/RHEL/SL/Centos
1. Mise à jour de la liste des paquets apt-get update yum update, yum check-update
2. Affichage des mises-à-jour disponibles apt-get upgrade --simulate yum list updates
3. Installation de paquets spécifiques apt-get install package1 package2 yum install package1 package2
4. Réinstallation d'un paquet apt-get install --reinstall package yum reinstall package
5. Mise à jour d'un paquet apt-get upgrade package1 package2 yum update package
6. Mise à jour du système apt-get upgrade, apt-get dist-upgrade, apt upgrade, apt full-upgrade yum upgrade
7. Recherche de paquets apt-cache search searchword, apt-cache search --full --names-only searchword yum search searchword
8. Liste de paquets installés dpkg -l, apt list --installed rpm -qa
9. Information sur un paquet apt-cache show package, apt show package, dpkg -s package yum info package, yum list package, yum deplist package
10. Désinstaller des paquets apt-get remove --purge package1 package2, apt-get autoremove yum remove package1 package2
11. Téléchargement de paquets sans installation apt-get install --download-only package1 package2 yum install --downloadonly --downloaddir=<directory> <package>
12. Effacement des paquets téléchargés apt-get clean, apt-get clean (paquets dépassés) yum clean all
13. Configuration des dépôts etc/apt/sources.list /etc/yum.repos.d/

7.2. Alpine Linux c. Arch Linux c. Gentoo

Action Alpine Linux Arch Linux Gentoo
1. Mise à jour de la liste des paquets apk update pacman -Sy emerge --sync
2. Affichage des mises-à-jour disponibles apk version -v ou apk version -v -l '<' pacman -Qu emerge -Dupv world ou emerge --deep --update --pretend world
3. Installation de paquets spécifiques apk add package1 package2 pacman -S package1 package2 emerge package1 package2
4. Réinstallation d'un paquet apk del package1 && apk add package1 pacman -Sf package1 package2 emerge --oneshot package1
5. Mise à jour d'un paquet apk add -u package1 package2 pacman -S package1 package2 emerge --update package1 package2
6. Mise à jour du système pacman -Syu
7. Recherche de paquets apk search searchword pacman -Ss searchword, pacman -Si packagename emerge --searchdesc searchword, eix searchword, esearch searchword yum search searchword
8. Liste de paquets installés apk info pacman -Qs, pacman -Q, pacman -Q emerge gentoolkit && equery list
9. Information sur un paquet apk info -a package pacman -Si package
10. Désinstaller des paquets apk del package1 package2 pacman -R package1 package2 emerge --depclean package1 package2
11. Téléchargement de paquets sans installation apk fetch package1 package2 pacman -Sw package1 package2 emerge --fetchonly package1 package2
12. Effacement des paquets téléchargés Automatique Automatique rm -rf /usr/portage/distfiles/*
13. Configuration des dépôts /etc/apk/repositories /etc/opkg.conf etc/portage/repos.conf/gentoo.conf, et bien plus

7.3. OpenWRT

Action OpenWRT
1. Mise à jour de la liste des paquets opkg update
2. Affichage des mises-à-jour disponibles opkg list-upgradable
3. Installation de paquets spécifiques opkg install <pkgs ou FQDN>
4. Réinstallation d'un paquet opkg install --force-reinstall <pkgs>
5. Mise à jour d'un paquet opkg upgrade <pkgs> (non recommandé)
6. Mise à jour du système
7. Recherche de paquets opkg list [pkg ou globp], opkg search <file ou globp>
8. Liste de paquets installés opkg list-installed
9. Information sur un paquet opkg info [pkg ou globp], opkg status [pkg ou globp]
10. Désinstaller des paquets opkg remove <pkgs ou globp>
11. Téléchargement de paquets sans installation opkg --download-only download <pkg>
12. Effacement des paquets téléchargés option --force-removal-of-dependent-packages
13. Configuration des dépôts /etc/opkg.conf

Sources

results matching ""

    No results matching ""