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émarrage
grub
-
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 fichiers
s3cmd
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:
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 lesdd
manpage.
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:
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.