Comment créer une image de votre environnement Linux et le lancer sur DigitalOcean

introduction

La fonctionCustom Images de DigitalOcean vous permet d’apporter vos images de disque virtuel de type Linux et Unix personnalisées à partir d’un environnement sur site ou d’une autre plate-forme cloud vers DigitalOcean et de les utiliser pour démarrer DigitalOcean Droplets.

Comme décrit dans lesCustom Images documentation, les types d'images suivants sont pris en charge de manière native par l'outil de téléchargement d'images personnalisées:

Bien que les images au format ISO ne soient pas officiellement prises en charge, vous pouvez apprendre à créer et télécharger une image compatible avec VirtualBox en suivantHow to Create a DigitalOcean Droplet from an Ubuntu ISO Format Image.

Si vous n’avez pas déjà uncompatible image à télécharger sur DigitalOcean, vous pouvez créer et compresser une image disque de votre système Unix ou Linux, à condition qu’il ait lesprerequisite software and drivers installed.

Nous commencerons par nous assurer que notre image répond aux exigences relatives aux images personnalisées. Pour ce faire, nous allons configurer le système et installer certains logiciels prérequis. Ensuite, nous allons créer l'image à l'aide de l'utilitaire de ligne de commandedd et la compresser à l'aide degzip. Ensuite, nous allons télécharger ce fichier image compressé dans DigitalOcean Spaces, à partir duquel nous pouvons l’importer en tant qu’image personnalisée. Enfin, nous allons démarrer un Droplet en utilisant l’image téléchargée.

Conditions préalables

Si possible, vous devez utiliser l'une des images fournies par DigitalOcean comme base, ou une image cloud fournie par la distribution officielle telle queUbuntu Cloud. Vous pouvez ensuite installer des logiciels et des applications sur cette image de base pour créer une nouvelle image, en utilisant des outils tels quePacker etVirtualBox. De nombreux fournisseurs de cloud et environnements de virtualisation fournissent également des outils permettant d'exporter des disques virtuels vers l'un des formats compatibles répertoriés ci-dessus. Vous devez donc, si possible, les utiliser pour simplifier le processus d'importation. Dans les cas où vous devez créer manuellement une image disque de votre système, vous pouvez suivre les instructions de ce guide. Notez que ces instructions ont été testées uniquement avec un système Ubuntu 18.04 et que les étapes peuvent varier en fonction du système d’exploitation et de la configuration de votre serveur.

Avant de commencer avec ce tutoriel, vous devez disposer des éléments suivants:

  • Un système de type Linux ou Unix qui répond à toutes les exigences répertoriées dans les images personnaliséesproduct documentation. Par exemple, votre disque de démarrage doit avoir:

    • Une taille maximale de 100 Go

    • Une table de partition MBR ou GPT avec un chargeur de démarragegrub

    • Pilotes VirtIO installés

  • Un utilisateur non root avec des privilèges d’administrateur disponibles sur le système que vous créez. Pour créer un nouvel utilisateur et lui accorder des privilèges administratifs sur Ubuntu 18.04, suivez nosInitial Server Setup with Ubuntu 18.04. Pour savoir comment faire cela sur Debian 9, consultezInitial Server Setup with Debian 9.

  • Un périphérique de stockage supplémentaire utilisé pour stocker l'image de disque créée dans ce guide, de préférence aussi grande que le disque en cours de copie. Cela peut être un volume de stockage en bloc attaché, un lecteur USB externe, un disque physique supplémentaire, etc.

  • Un espace DigitalOcean et l'utilitaire de transfert de fichierss3cmd configuré pour être utilisé avec votre espace. Pour apprendre à créer un espace, consultez les espacesQuickstart. Pour savoir comment configurers3cmd pour une utilisation avec votre espace, consultez less3cmd 2.x Setup Guide.

[[step-1 -—- Installing-cloud-init-and-activate-ssh]] == Étape 1 - Installation de Cloud-Init et activation de SSH

Pour commencer, nous allons installer le package d'initialisation decloud-Init. Cloud-init est un ensemble de scripts qui s'exécute au démarrage pour configurer certaines propriétés d'instance de cloud, telles que les paramètres régionaux, le nom d'hôte, les clés SSH et les périphériques réseau par défaut.

La procédure d'installation de cloud-init varie en fonction du système d'exploitation que vous avez installé. En général, le paquetcloud-init devrait être disponible dans le gestionnaire de paquets de votre système d'exploitation, donc si vous n'utilisez pas une distribution basée sur Debian, vous devriez remplacerapt dans les étapes suivantes par votre paquet spécifique à la distribution commande du gestionnaire.

Installation decloud-init

Dans ce guide, nous utiliserons un serveur Ubuntu 18.04 et utiliserons doncapt pour télécharger et installer le packagecloud-init. Notez quecloud-init peut déjà être installé sur votre système (certaines distributions Linux installentcloud-init par défaut). Pour vérifier, connectez-vous à votre serveur et exécutez la commande suivante:

cloud-init

Si vous voyez la sortie suivante,cloud-init a déjà été installé sur votre serveur et vous pouvez continuer à le configurer pour une utilisation avec DigitalOcean:

Outputusage: /usr/bin/cloud-init [-h] [--version] [--file FILES] [--debug] [--force]
                           {init,modules,single,query,dhclient-hook,features,analyze,devel,collect-logs,clean,status}
                           ...
/usr/bin/cloud-init: error: the following arguments are required: subcommand

Si à la place vous voyez ce qui suit, vous devez installercloud-init:

Outputcloud-init: command not found

Pour installercloud-init, mettez à jour votre index de package, puis installez le package à l'aide deapt:

sudo apt update
sudo apt install cloud-init

Maintenant que nous avons installécloud-init, nous allons le configurer pour une utilisation avec DigitalOcean, en veillant à ce qu'il utilise la source de donnéesConfigDrive. Les sources de données Cloud-init déterminent commentcloud-init recherchera et mettra à jour la configuration et les métadonnées de l'instance. Les gouttelettes DigitalOcean utilisent la source de donnéesConfigDrive, nous allons donc vérifier qu'elle vient en premier dans la liste des sources de données quecloud-init recherche à chaque démarrage du droplet.

Reconfiguration decloud-init

Par défaut, sur Ubuntu 18.04,cloud-init se configure pour utiliser en premier la source de donnéesNoCloud. Cela posera des problèmes lors de l'exécution de l'image sur DigitalOcean, nous devons donc reconfigurercloud-init pour utiliser la source de donnéesConfigDrive et nous assurer quecloud-init est rediffusé lorsque l'image est lancée sur DigitalOcean.

Depuis la ligne de commande, accédez au répertoire/etc/cloud/cloud.cfg.d:

cd /etc/cloud/cloud.cfg.d

Utilisez la commandels pour lister les fichiers de configurationcloud-init présents dans le répertoire:

ls
Output05_logging.cfg  50-curtin-networking.cfg  90_dpkg.cfg  curtin-preserve-sources.cfg  README

Selon votre installation, certains de ces fichiers peuvent ne pas être présents. S'il est présent, supprimez le fichier50-curtin-networking.cfg, qui configure les interfaces réseau pour votre serveur Ubuntu. Lorsque l'image est lancée sur DigitalOcean,cloud-init s'exécutera et reconfigurera automatiquement ces interfaces, ce fichier n'est donc pas nécessaire. Si ce fichier n’est pas supprimé, les interfaces du Digital Dropet DigitalOcean créées à partir de cette image Ubuntu auront des interfaces mal configurées et ne seront pas accessibles depuis Internet:

sudo rm 50-curtin-networking.cfg

Ensuite, nous allons exécuterdpkg-reconfigure cloud-init pour supprimer la source de donnéesNoCloud, en nous assurant quecloud-init recherche et trouve la source de donnéesConfigDrive utilisée sur DigitalOcean:

sudo dpkg-reconfigure cloud-init

Vous devriez voir le menu graphique suivant:

Cloud Init dpkg Menu

La source de donnéesNoCloud est initialement mise en surbrillance. Appuyez surSPACE pour le désélectionner, puis appuyez surENTER.

Enfin, accédez à/etc/netplan:

cd /etc/netplan

Supprimez le fichier50-cloud-init.yaml, qui a été généré à partir du fichier réseau decloud-init que nous avons supprimé précédemment:

sudo rm 50-cloud-init.yaml

La dernière étape consiste à nous assurer que nous nettoyons la configuration de l'exécution initiale decloud-init afin qu'elle se répète lorsque l'image est lancée sur DigitalOcean.

Pour ce faire, exécutezcloud-init clean:

sudo cloud-init clean

À ce stade, vous avez installé et configurécloud-init pour une utilisation avec DigitalOcean. Vous pouvez maintenant passer à l'activation de l'accès SSH à votre droplet.

Activer l'accès SSH

Une fois que vous avez installé et configurécloud-init, l'étape suivante consiste à vous assurer que vous disposez d'un utilisateur et d'un mot de passe administrateur non root sur votre ordinateur, comme indiqué dans les conditions préalables. Cette étape est essentielle pour diagnostiquer les erreurs pouvant survenir après le téléchargement de votre image et le lancement de votre Droplet. Si une configuration réseau préexistante ou une mauvaise configuration decloud-init rend votre Droplet inaccessible sur le réseau, vous pouvez utiliser cet utilisateur en combinaison avec lesDigitalOcean Droplet Console pour accéder à votre système et diagnostiquer les problèmes qui peuvent avoir surgi.

Une fois que vous avez configuré votre administrateur non-root, la dernière étape consiste à vérifier qu’un serveur SSH est installé et en cours d’exécution. SSH est souvent préinstallé sur de nombreuses distributions Linux populaires. Le processus de vérification de l’exécution d’un service dépend du système d’exploitation de votre serveur. Si vous ne savez pas comment procéder, consultez la documentation de votre système d'exploitation sur la gestion des services. Sur Ubuntu, vous pouvez vérifier que SSH est opérationnel à l'aide de la commande suivante:

sudo service ssh status

Vous devriez voir la sortie suivante:

Output● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2018-10-22 19:59:38 UTC; 8 days 1h ago
     Docs: man:sshd(8)
           man:sshd_config(5)
  Process: 1092 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)
 Main PID: 1115 (sshd)
    Tasks: 1 (limit: 4915)
   Memory: 9.7M
   CGroup: /system.slice/ssh.service
           └─1115 /usr/sbin/sshd -D

Si SSH n'est pas opérationnel, vous pouvez l'installer à l'aide deapt (sur les distributions basées sur Debian):

sudo apt install openssh-server

Par défaut, le serveur SSH démarrera au démarrage, sauf configuration contraire. Cela est souhaitable lors de l'exécution du système dans le nuage, car DigitalOcean peut automatiquement copier votre clé publique et vous accorder un accès SSH immédiat à votre Droplet après sa création.

Une fois que vous avez créé un administrateur non root, activé SSH et installé cloud-init, vous êtes prêt à créer une image de votre disque d’amorçage.

[[step-2 -—- creating-disk-image]] == Étape 2 - Création d'une image disque

Dans cette étape, nous allons créer une image disque au format RAW à l’aide de l’utilitaire de ligne de commandedd et la compresser à l’aide degzip. Nous importerons ensuite l'image dans DigitalOcean Spaces à l'aide des3cmd.

Pour commencer, connectez-vous à votre serveur et inspectez la disposition des périphériques de bloc pour votre système à l'aide delsblk:

lsblk

Vous devriez voir quelque chose comme ce qui suit:

OutputNAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 12.7M  1 loop /snap/amazon-ssm-agent/495
loop1    7:1    0 87.9M  1 loop /snap/core/5328
vda    252:0    0   25G  0 disk
└─vda1 252:1    0   25G  0 part /
vdb    252:16   0  420K  1 disk

Dans ce cas, nous remarquons que notre disque de démarrage principal est/dev/vda, un disque de 25 Go, et la partition principale, montée à/, est/dev/vda1. Dans la plupart des cas, le disque contenant la partition montée à/ sera le disque source à image. Nous allons utiliserdd pour créer une image de/dev/vda.

À ce stade, vous devez choisir l'emplacement de stockage de l'image disque. Une option consiste à attacher un autre périphérique de stockage en bloc, de préférence aussi grand que le disque que vous allez imager. Vous pouvez ensuite enregistrer l'image sur ce disque temporaire attaché et la télécharger sur DigitalOcean Spaces.

Si vous avez un accès physique au serveur, vous pouvez ajouter un lecteur supplémentaire à la machine ou connecter un autre périphérique de stockage, tel qu'un disque USB externe.

Une autre option, que nous allons montrer dans ce guide, est la copie de l’image via SSH sur un ordinateur local, à partir duquel vous pouvez la télécharger vers Spaces.

Quelle que soit la méthode choisie, assurez-vous que le périphérique de stockage sur lequel vous enregistrez l'image compressée dispose de suffisamment d'espace libre. Si le disque que vous créez est en grande partie vide, vous pouvez vous attendre à ce que le fichier image compressé soit considérablement plus petit que le disque d'origine.

[.warning] #Warning: Avant d'exécuter la commandedd suivante, assurez-vous que toutes les applications critiques ont été arrêtées et que votre système est aussi silencieux que possible. La copie d'un disque activement utilisé peut entraîner la corruption de certains fichiers, assurez-vous donc d'arrêter toutes les opérations gourmandes en données et d'arrêter autant d'applications en cours d'exécution que possible.
#

Option 1: Créer une image localement

La syntaxe de la commandedd que nous allons exécuter se présente comme suit:

dd if=/dev/vda bs=4M conv=sparse | pv -s 25G | gzip > /mnt/tmp_disk/ubuntu.gz

Dans ce cas, nous sélectionnons/dev/vda comme disque d'entrée à l'image et définissons la taille des blocs d'entrée / sortie sur 4 Mo (à partir des 512 octets par défaut). Cela accélère généralement un peu les choses. De plus, nous utilisons l'indicateurconv=sparse pour minimiser la taille du fichier de sortie en sautant l'espace vide. Pour en savoir plus sur les paramètres dedd, consultez lesddmanpage.

Nous acheminons ensuite la sortie vers l'utilitaire de visualisation du tubepv afin de pouvoir suivre visuellement la progression du transfert (ce tube est facultatif et nécessite l'installation depv à l'aide de votre gestionnaire de paquets). Si vous connaissez la taille du disque initial (dans ce cas, il s'agit de 25G), vous pouvez ajouter le-s 25G au tubepv pour obtenir un ETA pour la fin du transfert.

Nous acheminons ensuite tout versgzip et l’enregistrons dans un fichier appeléubuntu.gz sur le volume de stockage de blocs temporaire que nous avons attaché au serveur. Remplacez/mnt/tmp_disk par le chemin d'accès au périphérique de stockage externe que vous avez connecté à votre serveur.

Option 2: Création d'image sur SSH

Au lieu de provisionner un stockage supplémentaire pour votre ordinateur distant, vous pouvez également exécuter la copie sur SSH si vous avez suffisamment d'espace disque disponible sur votre ordinateur local. Notez que, selon la bande passante disponible, cela peut être lent et entraîner des coûts supplémentaires pour le transfert de données sur le réseau.

Pour copier et compresser le disque via SSH, exécutez la commande suivante sur votre machinelocal:

ssh remote_user@your_server_ip "sudo dd if=/dev/vda bs=4M conv=sparse | gzip -1 -" | dd of=ubuntu.gz

Dans ce cas, nous effectuons une connexion SSH dans notre serveur distant, y exécutons la commandedd et envoyons la sortie versgzip. Nous transférons ensuite la sortie degzip sur le réseau et la sauvegardons sousubuntu.gz localement. Assurez-vous que l'utilitairedd est disponible sur votre machine locale avant d'exécuter cette commande:

which dd
Output/bin/dd

Créez le fichier image compressé en utilisant l'une des méthodes ci-dessus. Cela peut prendre plusieurs heures, en fonction de la taille du disque que vous créez et de la méthode utilisée pour créer l'image.

Une fois que vous avez créé le fichier image compressé, vous pouvez le télécharger sur vos espaces DigitalOcean à l'aide des3cmd.

[[step-3 -—- uploading-image-to-spaces-and-custom-images]] == Étape 3 - Téléchargement d'une image vers des espaces et des images personnalisées

Comme décrit dans les conditions préalables, vous devez avoir installé et configurés3cmd pour une utilisation avec votre DigitalOcean Space sur la machine contenant votre image compressée.

Localisez le fichier image compressé et téléchargez-le dans votre espace à l'aide des3cmd:

[.note] #Note: Vous devez remplaceryour_space_name par le nom de votre espace et non par son URL. Par exemple, si l'URL de votre espace esthttps://example-space-name.nyc3.digitaloceanspaces.com, le nom de votre espace estexample-space-name.
#

s3cmd put /path_to_image/ubuntu.gz s3://your_space_name

Une fois le téléchargement terminé, accédez à votre espace à l'aide des DigitalOceanControl Panel et localisez l'image dans la liste des fichiers. Nous allons temporairement rendre l'image accessible au public afin que les images personnalisées puissent y accéder et enregistrer une copie.

Sur le côté droit de la liste des images, cliquez sur le menu déroulantMore, puis cliquez surManage Permissions:

Spaces Object Configuration

Ensuite, cliquez sur le bouton radio à côté dePublic et appuyez surUpdate pour rendre l'image accessible au public.

[.warning] #Warning: Votre image sera temporairement accessible publiquement à toute personne disposant de son chemin Spaces pendant ce processus. Si vous souhaitez éviter de rendre votre image temporairement publique, vous pouvez créer votre image personnalisée à l'aide des DigitalOceanAPI. Assurez-vous de régler votre image surPrivate en utilisant la procédure ci-dessus une fois que votre image a été transférée avec succès vers des images personnalisées.
#

Récupérez l'URL des espaces de votre image en survolant le nom de l'image dans le panneau de configuration et appuyez surCopy URL dans la fenêtre qui apparaît.

Maintenant, accédez àImages dans la barre de navigation de gauche, puis àCustom Images.

De là, téléchargez votre image en utilisant cette URL comme détaillé dans les images personnaliséesProduct Documentation.

Vous pouvez alorscreate a Droplet from this image. Notez que vous devez ajouter une clé SSH au Droplet lors de sa création. Pour savoir comment faire cela, consultezHow to Add SSH Keys to Droplets.

Une fois votre Droplet démarré, si vous pouvez utiliser SSH, vous avez lancé avec succès votre image personnalisée en tant que droplet DigitalOcean.

Débogage

Si vous essayez de SSH dans votre Droplet et que vous ne parvenez pas à vous connecter, assurez-vous que votre image répond aux exigences répertoriées et quecloud-init et SSH sont installés et correctement configurés. Si vous ne parvenez toujours pas à accéder au Droplet, vous pouvez essayer d'utiliser lesDigitalOcean Droplet Console et l'utilisateur non root que vous avez créés précédemment pour explorer le système et déboguer vos configurations réseau,cloud-init et SSH. Une autre façon de déboguer votre image consiste à utiliser un outil de virtualisation commeVirtualbox pour démarrer votre image disque à l'intérieur d'une machine virtuelle et déboguer la configuration de votre système à partir de la VM.

Conclusion

Dans ce guide, vous avez appris à créer une image disque d’un système Ubuntu 18.04 à l’aide de l’utilitaire de ligne de commandedd et à la télécharger sur DigitalOcean en tant qu’image personnalisée à partir de laquelle vous pouvez lancer des Droplets.

Les étapes de ce guide peuvent varier en fonction de votre système d'exploitation, du matériel existant et de la configuration du noyau, mais en général, les images créées à partir de distributions Linux courantes devraient fonctionner à l'aide de cette méthode. Assurez-vous de suivre attentivement les étapes d'installation et de configuration decloud-init et assurez-vous que votre système répond à toutes les exigences répertoriées dans la sectionprerequisites ci-dessus.

Pour en savoir plus sur les images personnalisées, consultez lesCustom Images product documentation.

Related