Bilan: Alpine Linux est fait pour Docker

Alpine Linux est une distribution Linux minimale, construite à l'origine avec Gentoo, mais maintenant indépendante et auto-hébergée. À certains égards, Alpine Linux est conceptuellement similaire à NanoBSD, en ce sens que les utilisateurs techniques peuvent commencer avec Alpine Linux pour construire un système Linux avec juste ce qu'il faut pour accomplir la mission, et rien de plus.

Généralement vu intégré dans des appareils ou des appareils, Alpine Linux a eu un gros coup de pouce lorsqu'il a été sélectionné pour remplacer Ubuntu comme image de base de Docker. La sécurité, la fiabilité et de solides pratiques de développement en étaient les principales raisons.

Alpine Linux ne ressemble à aucune distribution Linux qu'un utilisateur de bureau Linux typique aura rencontré. Commençons par regarder le répertoire / bin, où sont conservés les utilitaires système: 

Notez que presque tous les binaires sont des liens vers / bin / busybox. Busybox est un ensemble d'utilitaires utilisateur et système communs regroupés dans un seul binaire pour un démarrage plus rapide, des besoins d'espace réduits et généralement une meilleure sécurité, au prix d'une fonctionnalité réduite. La plupart des options rarement utilisées pour les utilitaires ont été supprimées, mais toutes les options couramment utilisées restent.

En plus de cela, Alpine utilise musl libc, une implémentation minimale de la bibliothèque standard C / POSIX et des extensions, conçue pour les liaisons statiques et les applications embarquées en temps réel, évitant le gonflement GNU de la glibc. La liaison statique signifie un démarrage plus rapide, mais prend plus d'espace, elle est donc mieux adaptée aux systèmes plus petits. En combinant tous les binaires système en un seul exécutable et en les liant avec musl, Alpine obtient un ensemble petit et rapide de binaires système, ce qui est nécessaire dans un système embarqué.

Enfin, l'accent est mis sur la sécurité. Le système comprend des correctifs du noyau Grsec / PaX, qui fournissent un ensemble de fonctionnalités de sécurité au noyau Linux, notamment la protection de l'espace d'adressage, un audit amélioré et un accès basé sur les rôles et un contrôle des processus. Avec les distributions Linux typiques, les utilisateurs devraient compiler et exécuter leur propre noyau pour obtenir ces correctifs, ce que même les utilisateurs les plus avancés éviteraient probablement.

Installation et configuration d'Alpine Linux

Il y a beaucoup de choses inhabituelles dans l'installation d'Alpine Linux. Ceci est principalement enraciné dans son utilisation initialement prévue dans les systèmes embarqués, comme les routeurs. En tant que tel, Alpine est conçu pour démarrer et fonctionner à partir de la RAM, bien que des options hybrides soient disponibles. Conformément à cette origine, Alpine Linux utilise extlinux, une variante de Syslinux, comme chargeur de démarrage. Syslinux n'est normalement pas utilisé pour démarrer des installations Linux complètes car Linux n'est normalement pas installé sur les systèmes de fichiers FAT. Au lieu de cela, Syslinux est souvent utilisé pour les disquettes de démarrage ou de secours, les clés USB en direct et d'autres systèmes de démarrage légers. Alpine utilise des parties du projet Syslinux pour permettre le démarrage à partir de CD-ROM, et utilise extlinux pour démarrer à partir de systèmes de fichiers Linux ou de systèmes de fichiers FAT pour les périphériques USB.Les systèmes de fichiers FAT ont certaines limitations, telles que la taille des fichiers et la longueur des noms de fichiers.

Alpine prend en charge trois modes d'installation: sans disque, «données» et «sys». Dans une installation de données, le système d'exploitation est chargé dans la RAM à partir d'un support en lecture seule, mais monte des partitions en lecture / écriture pour stocker les données. Cela pourrait être utilisé, par exemple, si un routeur basé sur Alpine stockait des journaux d'intrusion ou d'accès sur un disque. Copier les journaux dans la RAM serait un gaspillage d'une ressource précieuse. Le mode sans disque est similaire, mais la partition de lecture / écriture est généralement plus petite et utilisée pour stocker les détails de configuration du système d'exploitation. Sys est un mode d'installation traditionnel sur disque.

Lors de l'installation en mode sans disque ou en mode données, le système Alpine Local Backup est utilisé pour stocker les fichiers de configuration. Ceci est fait avec lbu (utilitaire de sauvegarde local), qui suit les fichiers qui ont changé dans le répertoire / etc et enregistre ces changements dans les fichiers "overlay" .apkovl (archives tar-gzip). Avec lbu, les administrateurs peuvent, par exemple, comparer, fusionner ou revenir à des configurations antérieures.

J'ai commencé par essayer une installation sans disque parce que je voulais exécuter Alpine comme prévu à l'origine, en tant que système d'exploitation pour les appliances. Malheureusement, j'ai rencontré un bogue de longue date (2015) dans une installation de VMware qui n'a pas été réparée et la documentation n'a pas été mise à jour. Il semble que l'image de la disquette virtuelle ne soit pas montée au moment du démarrage. Cela signifie que les modifications de configuration sont perdues à chaque redémarrage.

J'ai finalement eu recours à une installation sys, qui s'est très bien déroulée. La première chose à noter est que rien , pas même SSH, n'est installé par défaut. Si vous construisez des systèmes embarqués, c'est probablement une bonne chose. Les débutants sous Linux devraient se préparer à une courbe d'apprentissage abrupte. Après avoir lu un peu plus sur Alpine Package Manager (APK), j'ai installé un ensemble minimal d'outils pour commencer: Sudo, SSH et l'outil de gestion de système graphique basé sur le Web, ACF.

Administration système Alpine Linux

Alors que la plupart des systèmes Linux ont un outil graphique d'administration système, Alpine utilise des scripts shell pour l'installation. J'ai utilisé un script parapluie, setup-alpine, pour configurer toutes les bases telles que la mise en réseau, le nom d'hôte, les disques, le fuseau horaire, etc. directement et en utilisant lbupour les enregistrer sur un support inscriptible. Notez que setup-alpine est également l'installateur, donc un nom de disque peut être fourni et il écrira le système d'exploitation sur le support, demandant une partition inscriptible pour les répertoires / etc et / var.

Le développement et la distribution de logiciels sont également différents sur Alpine. Ceci est en partie dû à son utilisation prévue dans les systèmes embarqués, ou comme image de base pour les conteneurs, mais aussi parce que les auteurs ont estimé que les systèmes de gestion de paquets existants ne fonctionneraient pas bien dans un système fonctionnant généralement à partir de la RAM. Alpine Package Manager (APK) répond à toutes ces exigences, avec une faible surcharge et des temps d'installation rapides. Cependant, j'aurais aimé qu'ils se superposent à une API plus standard. Nous avons déjà suffisamment d'API de gestion de paquets et il y a quelque chose à dire pour la compatibilité. APK est utilisé pour configurer des conteneurs ou des systèmes autonomes.

La livraison des paquets se fait via une arborescence de ports qui me rappelle la collection de ports de FreeBSD. Cependant, au lieu d'être piloté par un système de makefile sophistiqué, il utilise une autre invention Alpine Linux, abuild. Le référentiel aports reflète l'arborescence des ports du monde entier et apk add …est certainement beaucoup plus rapide que les autres systèmes de gestion de paquets.

L'autre chose à noter à propos d'Alpine est l'utilisation d'OpenRC pour le système d'initialisation. Un des douzaines de systèmes d'initialisation pour Linux actuellement, OpenRC a commencé dans Gentoo (comme Alpine). Rien ne manque fonctionnellement, mais soyez prêt à apprendre un nouveau système de niveaux d'exécution et de commandes init.

Heureusement, une grande partie de l'administration quotidienne peut être effectuée via le Web Alpine Configuration Framework (ACF), bien que travailler avec ACF n'ait pas été tout à fait simple. Il n'a pas détecté l'utilisateur régulier que j'ai ajouté pour moi-même via adduser, par exemple. L'interface graphique ACF ressemble beaucoup à l'interface Web de votre routeur Linux classique:

ACF prend également quelques recherches pour trouver et installer. Un utilisateur occasionnel n'aurait pas découvert le système à moins d'être attentif, et même dans ce cas, il n'y a pas d'instructions d'installation.

Stockage et mise en réseau Alpine Linux

Alpine prend en charge plusieurs options de stockage au-delà de la RAM uniquement, avec une configuration stockée sur un support et des cartes flash. Cependant, la documentation, ou plutôt son absence, rendait la compréhension du stockage difficile. Par exemple, je voulais graver un ISO personnalisé avec une application qui n'est pas disponible dans les ports, probablement une occurrence assez courante. La documentation pour le faire était une impasse:

Quatre ans et demi semblent longs à attendre. Pour être juste, le stockage n'a jamais été une grande partie de l'équation Alpine, avec son accent sur les applications embarquées, il n'est donc pas surprenant que ce soit un point faible. Il y a un travail en cours dans la plupart des domaines attendus d'une distribution Linux, tels que LVM, iSCSI et RAID, mais préparez-vous à passer pas mal de temps à essayer de donner un sens à la documentation , ou à lire le code source, pour le comprendre tous dehors. 

La mise en réseau avec Alpine est une histoire très différente du stockage. La documentation pour la mise en réseau est mieux rédigée et plus complète, et inclut souvent les meilleures pratiques pour la mise en place de réseaux efficaces. IP4, IP6, liaison, VLAN, pontage et à peu près toutes les configurations réseau souhaitées sont pris en charge. Vous trouverez même des instructions pour configurer les connexions Internet par satellite!

La configuration peut être effectuée avec des outils traditionnels comme ifconfig et route, ou avec certains packages plus récents comme iproute2. Il convient de mentionner un sous-projet intéressant appelé Alpine Wall, un outil de configuration de pare-feu Linux. Même PPP sur les lignes série est pris en charge, ce qui est quelque peu surprenant de nos jours.

J'ai beaucoup appris en lisant cette documentation, en découvrant plusieurs astuces de configuration que je ne connaissais pas auparavant, ainsi que des utilitaires réseau inconnus jusqu'à présent. Cette partie de la documentation vaut la peine d'être mise en signet comme référence rapide pour les procédures de mise en réseau, même si vous n'utilisez pas Alpine Linux.

Mises à niveau et rétrogradations Alpine Linux

L'ingénierie de version Alpine Linux n'est pas aussi rigoureuse ou formelle que les systèmes matures comme FreeBSD, mais elle couvre les bases. Et il est bien adapté aux principaux cas d'utilisation d'Alpine concernant l'hébergement et les appliances Docker.

Il existe essentiellement deux flux, edge et stable. Edge est une branche de publication évolutive, un instantané de l'endroit où se déroule le développement tous les six mois. Les packages passent par Edge et, lorsqu'ils sont prêts, sont promus au niveau stable / communauté où ils sont pris en charge pendant six mois par la communauté. Les packages qui survivent à cela et continuent à se développer deviennent finalement stables / main, où ils sont pris en charge pendant deux ans.

Un peu de précaution doit être prise lors de la mise à jour de la branche 2.x vers 3.x en raison du changement dans les bibliothèques C (de uClibc à musl). Si vous ne faites pas attention, le système peut échouer à mi-chemin d'une mise à niveau. La mise à niveau des packages le long de la ligne 3.x est plus simple, bien qu'il s'agisse toujours d'un processus manuel dirigé pour la plupart par des scripts. L'astuce pour comprendre le processus de mise à niveau consiste à obtenir le bon référentiel APK (communauté, périphérique ou principal), à vider le cache, puis à laisser APK mettre à niveau tous les packages avec apk upgrade.

La mise à niveau du noyau est également simple et utilise le script bootable setup pour écrire le nouveau noyau et busybox sur le support de démarrage.

Dans l'ensemble, il n'y a pas trop de pièces mobiles dans un système Alpine, donc une fois l'architecture comprise, il n'est pas difficile de déterminer la mise à niveau.

Alpine Linux en un coup d'œil

Alpine Linux est un excellent choix pour tout système orienté réseau et à usage unique. La détection d'intrusion, la surveillance du réseau et la téléphonie IP sont des exemples de bonnes applications pour Alpine Linux. Et c'est un choix naturel pour les conteneurs. Les applications qui utilisent beaucoup le disque doivent être testées avec soin. Les utilisateurs doivent se préparer à passer du temps à s'impliquer dans la communauté et à se retrousser les manches pour se salir les mains. Des essais et des erreurs seront nécessaires.