So erstellen Sie ein Image Ihrer Linux-Umgebung und starten es auf DigitalOcean

Einführung

Mit derCustom Images-Funktion von DigitalOcean können Sie Ihre benutzerdefinierten Linux- und Unix-ähnlichen virtuellen Disk-Images aus einer lokalen Umgebung oder einer anderen Cloud-Plattform zu DigitalOcean bringen und damit DigitalOcean Droplets starten.

Wie inCustom Images documentation beschrieben, werden die folgenden Bildtypen vom Upload-Tool für benutzerdefinierte Bilder nativ unterstützt:

Obwohl Bilder im ISO-Format nicht offiziell unterstützt werden, können Sie lernen, wie Sie mit VirtualBox ein kompatibles Bild erstellen und hochladen, indem SieHow to Create a DigitalOcean Droplet from an Ubuntu ISO Format Image folgen.

Wenn Sie noch keinecompatible image zum Hochladen auf DigitalOcean haben, können Sie ein Disk-Image Ihres Unix-ähnlichen oder Linux-Systems erstellen und komprimieren, sofern es dieprerequisite software and drivers installed enthält.

Zunächst stellen wir sicher, dass unser Bild den Anforderungen für benutzerdefinierte Bilder entspricht. Dazu konfigurieren wir das System und installieren einige Softwarevoraussetzungen. Anschließend erstellen wir das Bild mit dem Befehlszeilenprogrammddund komprimieren es mitgzip. Anschließend laden wir diese komprimierte Bilddatei in DigitalOcean Spaces hoch, von wo aus wir sie als benutzerdefiniertes Bild importieren können. Zum Schluss starten wir ein Droplet mit dem hochgeladenen Image.

Voraussetzungen

Wenn möglich, sollten Sie eines der von DigitalOcean bereitgestellten Bilder als Basis oder ein von der offiziellen Verteilung bereitgestelltes Cloud-Bild wieUbuntu Cloud verwenden. Sie können dann Software und Anwendungen über diesem Basis-Image installieren, um mit Tools wiePacker undVirtualBox ein neues Image zu backen. Viele Cloud-Anbieter und Virtualisierungsumgebungen bieten auch Tools zum Exportieren von virtuellen Laufwerken in eines der oben aufgeführten kompatiblen Formate. Verwenden Sie diese, wenn möglich, um den Importvorgang zu vereinfachen. In den Fällen, in denen Sie ein Festplatten-Image Ihres Systems manuell erstellen müssen, können Sie die Anweisungen in diesem Handbuch befolgen. Beachten Sie, dass diese Anweisungen nur mit einem Ubuntu 18.04-System getestet wurden und die Schritte je nach Betriebssystem und Konfiguration Ihres Servers variieren können.

Bevor Sie mit diesem Lernprogramm beginnen, sollten Sie Folgendes zur Verfügung haben:

  • Ein Linux- oder Unix-ähnliches System, das alle in den benutzerdefinierten Imagesproduct documentationaufgeführten Anforderungen erfüllt. Beispielsweise muss Ihre Startdiskette Folgendes enthalten:

    • Eine maximale Größe von 100 GB

    • Eine MBR- oder GPT-Partitionstabelle mit einem Bootloader vongrub

    • VirtIO-Treiber installiert

  • Ein Benutzer ohne Rootberechtigung mit Administratorrechten, der Ihnen auf dem System, auf dem Sie ein Image erstellen, zur Verfügung steht. Befolgen Sie unsereInitial Server Setup with Ubuntu 18.04, um einen neuen Benutzer zu erstellen und ihm Administratorrechte unter Ubuntu 18.04 zu gewähren. Um zu erfahren, wie dies unter Debian 9 funktioniert, konsultieren SieInitial Server Setup with Debian 9.

  • Ein zusätzliches Speichergerät zum Speichern des in dieser Anleitung erstellten Disk-Image, vorzugsweise so groß wie die zu kopierende Disk. Dies kann ein angeschlossenes Blockspeicher-Volume, ein externes USB-Laufwerk, eine zusätzliche physische Festplatte usw. sein.

  • Ein DigitalOcean Space und das Dateiübertragungsdienstprogramms3cmd, das für die Verwendung mit Ihrem Space konfiguriert ist. Informationen zum Erstellen eines Space finden Sie in den SpacesQuickstart. Um zu erfahren, wie Sies3cmd für die Verwendung mit Ihrem Space einrichten, konsultieren Sies3cmd 2.x Setup Guide.

[[Schritt 1 - Installieren von Cloud-Init und Aktivieren von SSH] == Schritt 1 - Installieren von Cloud-Init und Aktivieren von SSH

Zunächst installieren wir das Initialisierungspaket voncloud-Init. Cloud-init ist eine Reihe von Skripten, die beim Start ausgeführt werden, um bestimmte Cloud-Instanzeigenschaften wie Standardgebietsschema, Hostname, SSH-Schlüssel und Netzwerkgeräte zu konfigurieren.

Die Schritte zur Installation von cloud-init hängen vom installierten Betriebssystem ab. Im Allgemeinen sollte das Paketcloud-initim Paketmanager Ihres Betriebssystems verfügbar sein. Wenn Sie also keine Debian-basierte Distribution verwenden, sollten Sieapt in den folgenden Schritten durch Ihr verteilungsspezifisches Paket ersetzen Manager-Befehl.

cloud-init installieren

In diesem Handbuch verwenden wir einen Ubuntu 18.04-Server und verwenden daherapt, um dascloud-init-Paket herunterzuladen und zu installieren. Beachten Sie, dasscloud-init möglicherweise bereits auf Ihrem System installiert ist (einige Linux-Distributionen installieren standardmäßigcloud-init). Melden Sie sich zum Überprüfen bei Ihrem Server an und führen Sie den folgenden Befehl aus:

cloud-init

Wenn die folgende Ausgabe angezeigt wird, wurdecloud-init bereits auf Ihrem Server installiert, und Sie können die Konfiguration für die Verwendung mit DigitalOcean fortsetzen:

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

Wenn stattdessen Folgendes angezeigt wird, müssen Siecloud-init installieren:

Outputcloud-init: command not found

Umcloud-init zu installieren, aktualisieren Sie Ihren Paketindex und installieren Sie das Paket dann mitapt:

sudo apt update
sudo apt install cloud-init

Nachdem wircloud-init installiert haben, konfigurieren wir es für die Verwendung mit DigitalOcean und stellen sicher, dass die DatenquelleConfigDriveverwendet wird. Cloud-Init-Datenquellen bestimmen, wiecloud-init nach Instanzkonfiguration und Metadaten suchen und diese aktualisieren. DigitalOcean Droplets verwenden die DatenquelleConfigDrive. Wir werden daher überprüfen, ob sie in der Liste der Datenquellen an erster Stelle steht, nach denencloud-init sucht, wenn das Droplet gestartet wird.

cloud-init neu konfigurieren

Standardmäßig konfiguriert sichcloud-init unter Ubuntu 18.04 so, dass zuerst die DatenquelleNoCloudverwendet wird. Dies führt zu Problemen beim Ausführen des Images auf DigitalOcean. Daher müssen wircloud-init neu konfigurieren, um die Datenquelle vonConfigDrivezu verwenden, und sicherstellen, dasscloud-init erneut ausgeführt wird, wenn das Image auf DigitalOcean gestartet wird.

Navigieren Sie in der Befehlszeile zum Verzeichnis/etc/cloud/cloud.cfg.d:

cd /etc/cloud/cloud.cfg.d

Verwenden Sie den Befehlls, um die im Verzeichnis vorhandenen Konfigurationsdateien voncloud-initaufzulisten:

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

Abhängig von Ihrer Installation sind einige dieser Dateien möglicherweise nicht vorhanden. Falls vorhanden, löschen Sie die Datei50-curtin-networking.cfg, mit der die Netzwerkschnittstellen für Ihren Ubuntu-Server konfiguriert werden. Wenn das Image auf DigitalOcean gestartet wird, werdencloud-init ausgeführt und diese Schnittstellen automatisch neu konfiguriert, sodass diese Datei nicht erforderlich ist. Wenn diese Datei nicht gelöscht wird, sind die Schnittstellen des aus diesem Ubuntu-Image erstellten DigitalOcean Droplets falsch konfiguriert und können nicht über das Internet aufgerufen werden:

sudo rm 50-curtin-networking.cfg

Als Nächstes führen wirdpkg-reconfigure cloud-init aus, um die DatenquelleNoCloudzu entfernen. Dabei stellen wir sicher, dasscloud-init die in DigitalOcean verwendete DatenquelleConfigDriveucht und findet:

sudo dpkg-reconfigure cloud-init

Sie sollten das folgende grafische Menü sehen:

Cloud Init dpkg Menu

Die Datenquelle vonNoCloudwird anfänglich hervorgehoben. Drücken SieSPACE, um die Auswahl aufzuheben, und drücken Sie dannENTER.

Navigieren Sie schließlich zu/etc/netplan:

cd /etc/netplan

Entfernen Sie die50-cloud-init.yaml-Datei, die aus der zuvor entferntencloud-init-Netzwerkdatei generiert wurde:

sudo rm 50-cloud-init.yaml

Der letzte Schritt besteht darin, sicherzustellen, dass die Konfiguration vom erstencloud-init-Lauf bereinigt wird, damit sie erneut ausgeführt wird, wenn das Image auf DigitalOcean gestartet wird.

Führen Sie dazucloud-init clean aus:

sudo cloud-init clean

Zu diesem Zeitpunkt haben Siecloud-init für die Verwendung mit DigitalOcean installiert und konfiguriert. Sie können nun fortfahren, um den SSH-Zugriff auf Ihr Droplet zu aktivieren.

Aktivieren Sie den SSH-Zugriff

Nachdem Siecloud-init installiert und konfiguriert haben, müssen Sie im nächsten Schritt sicherstellen, dass Ihnen auf Ihrem Computer ein Benutzer und ein Kennwort ohne Rootberechtigung zur Verfügung stehen, wie in den Voraussetzungen beschrieben. Dieser Schritt ist wichtig, um Fehler zu diagnostizieren, die nach dem Hochladen Ihres Bildes und dem Starten Ihres Droplets auftreten können. Wenn eine bereits vorhandene Netzwerkkonfiguration oder eine fehlerhaftecloud-init-Konfiguration Ihr Droplet über das Netzwerk unzugänglich macht, können Sie diesen Benutzer in Kombination mit denDigitalOcean Droplet Console verwenden, um auf Ihr System zuzugreifen und eventuell aufgetretene Probleme zu diagnostizieren.

Nachdem Sie Ihren Benutzer ohne Rootberechtigung eingerichtet haben, müssen Sie als letzten Schritt sicherstellen, dass ein SSH-Server installiert ist und ausgeführt wird. SSH ist häufig auf vielen gängigen Linux-Distributionen vorinstalliert. Der Vorgang zum Überprüfen, ob ein Dienst ausgeführt wird, hängt vom Betriebssystem Ihres Servers ab. Wenn Sie nicht sicher sind, wie Sie dies tun sollen, lesen Sie die Dokumentation Ihres Betriebssystems zum Verwalten von Diensten. Unter Ubuntu können Sie mit dem folgenden Befehl überprüfen, ob SSH aktiv ist:

sudo service ssh status

Sie sollten die folgende Ausgabe sehen:

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

Wenn SSH nicht aktiv ist, können Sie es mitapt installieren (auf Debian-basierten Distributionen):

sudo apt install openssh-server

Standardmäßig wird der SSH-Server beim Booten gestartet, sofern nichts anderes konfiguriert ist. Dies ist wünschenswert, wenn das System in der Cloud ausgeführt wird, da DigitalOcean Ihren öffentlichen Schlüssel automatisch kopieren und Ihnen nach der Erstellung sofortigen SSH-Zugriff auf Ihr Droplet gewähren kann.

Nachdem Sie einen Benutzer ohne Rootberechtigung erstellt, SSH aktiviert und Cloud-Init installiert haben, können Sie ein Image Ihrer Startdiskette erstellen.

[[Schritt-2 - Erstellen eines Disk-Images]] == Schritt 2 - Erstellen eines Disk-Images

In diesem Schritt erstellen wir ein Disk-Image im RAW-Format mit dem Befehlszeilenprogrammddund komprimieren es mitgzip. Anschließend laden wir das Bild mits3cmd in DigitalOcean Spaces hoch.

Melden Sie sich zunächst bei Ihrem Server an und überprüfen Sie die Blockgeräteanordnung für Ihr System mitlsblk:

lsblk

Sie sollten ungefähr Folgendes sehen:

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

In diesem Fall stellen wir fest, dass unsere Hauptstartdiskette/dev/vda, eine 25-GB-Festplatte, und die primäre Partition, die bei/ gemountet ist,/dev/vda1 ist. In den meisten Fällen ist die Festplatte mit der bei/ gemounteten Partition die Quell-Festplatte für das Image. Wir werdendd verwenden, um ein Bild von/dev/vda zu erstellen.

An dieser Stelle sollten Sie entscheiden, wo Sie das Disk-Image speichern möchten. Eine Möglichkeit besteht darin, ein anderes Blockspeichergerät anzuschließen, das vorzugsweise so groß ist wie die Festplatte, auf die Sie ein Image erstellen möchten. Sie können das Bild dann auf dieser angehängten temporären Festplatte speichern und in DigitalOcean Spaces hochladen.

Wenn Sie physischen Zugriff auf den Server haben, können Sie dem Computer ein zusätzliches Laufwerk hinzufügen oder ein anderes Speichergerät anschließen, z. B. ein externes USB-Laufwerk.

Eine weitere Option, die wir in diesem Handbuch demonstrieren, besteht darin, das Image über SSH auf einen lokalen Computer zu kopieren, von dem Sie es in Spaces hochladen können.

Stellen Sie unabhängig von der gewählten Methode sicher, dass auf dem Speichergerät, auf dem Sie das komprimierte Bild speichern, genügend Speicherplatz vorhanden ist. Wenn der Datenträger, auf dem Sie ein Image erstellen, größtenteils leer ist, ist zu erwarten, dass die komprimierte Image-Datei erheblich kleiner als der Originaldatenträger ist.

[.warning] #Warning: Stellen Sie vor dem Ausführen des folgenden Befehlsdd sicher, dass alle kritischen Anwendungen gestoppt wurden und Ihr System so leise wie möglich ist. Das Kopieren einer aktiv verwendeten Festplatte kann zu beschädigten Dateien führen. Stellen Sie daher sicher, dass Sie alle datenintensiven Vorgänge anhalten und so viele laufende Anwendungen wie möglich herunterfahren.
#

Option 1: Image lokal erstellen

Die Syntax für den Befehldd, den wir ausführen werden, sieht wie folgt aus:

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

In diesem Fall wählen wir/dev/vda als Eingangsdiskette für das Image aus und setzen die Größe der Eingabe- / Ausgabeblöcke auf 4 MB (von den Standard-512 Bytes). Dies beschleunigt die Dinge im Allgemeinen ein wenig. Darüber hinaus verwenden wir das Flagconv=sparse, um die Größe der Ausgabedatei zu minimieren, indem wir den leeren Bereich überspringen. Weitere Informationen zu den Parametern vonddfinden Sie unterddmanpage.

Anschließend leiten wir die Ausgabe an das Pipe Viewer-Dienstprogrammpvweiter, damit wir den Fortschritt der Übertragung visuell verfolgen können (diese Pipe ist optional und erfordert die Installation vonpv mithilfe Ihres Paketmanagers). Wenn Sie die Größe der ursprünglichen Festplatte kennen (in diesem Fall 25 GB), können Sie die-s 25G zurpv-Pipe hinzufügen, um eine ETA für den Abschluss der Übertragung zu erhalten.

Anschließend leiten wir alles angzip weiter und speichern es in einer Datei namensubuntu.gz auf dem temporären Blockspeichervolume, das wir an den Server angehängt haben. Ersetzen Sie/mnt/tmp_disk durch den Pfad zu dem externen Speichergerät, das Sie an Ihren Server angeschlossen haben.

Option 2: Image über SSH erstellen

Anstatt zusätzlichen Speicher für Ihren Remotecomputer bereitzustellen, können Sie die Kopie auch über SSH ausführen, wenn auf Ihrem lokalen Computer genügend Speicherplatz verfügbar ist. Beachten Sie, dass dies je nach verfügbarer Bandbreite langsam sein kann und zusätzliche Kosten für die Datenübertragung über das Netzwerk anfallen können.

Führen Sie den folgenden Befehl auf dem Computer Ihreslocalaus, um die Festplatte über SSH zu kopieren und zu komprimieren:

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

In diesem Fall führen wir SSHing auf unserem Remote-Server durch, führen dort den Befehldd aus und leiten die Ausgabe angzip weiter. Wir übertragen dann diegzip-Ausgabe über das Netzwerk und speichern sie lokal alsubuntu.gz. Stellen Sie sicher, dass auf Ihrem lokalen Computer das Dienstprogrammddverfügbar ist, bevor Sie diesen Befehl ausführen:

which dd
Output/bin/dd

Erstellen Sie die komprimierte Bilddatei mit einer der oben genannten Methoden. Dies kann mehrere Stunden dauern, abhängig von der Größe des Datenträgers und der Methode, mit der Sie das Image erstellen.

Nachdem Sie die komprimierte Bilddatei erstellt haben, können Sie sie mits3cmd in Ihre DigitalOcean Spaces hochladen.

[[Schritt 3 - Hochladen von Bildern in Räume und benutzerdefinierte Bilder] == Schritt 3 - Hochladen von Bildern in Räume und benutzerdefinierte Bilder

Wie in den Voraussetzungen beschrieben, solltes3cmd installiert und für die Verwendung mit Ihrem DigitalOcean Space auf dem Computer konfiguriert sein, der Ihr komprimiertes Image enthält.

Suchen Sie die komprimierte Bilddatei und laden Sie sie mits3cmd in Ihren Space hoch:

[.note] #Note: Sie solltenyour_space_name durch den Namen Ihres Space und nicht durch dessen URL ersetzen. Wenn die URL Ihres Space beispielsweisehttps://example-space-name.nyc3.digitaloceanspaces.com lautet, lautet der Name Ihres Spaceexample-space-name.
#

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

Navigieren Sie nach Abschluss des Uploads mit DigitalOceanControl Panelzu Ihrem Space und suchen Sie das Bild in der Liste der Dateien. Wir werden das Bild vorübergehend öffentlich zugänglich machen, damit Benutzerdefinierte Bilder darauf zugreifen und eine Kopie speichern können.

Klicken Sie auf der rechten Seite der Bildliste auf das Dropdown-MenüMore und dann aufManage Permissions:

Spaces Object Configuration

Klicken Sie dann auf das Optionsfeld nebenPublic und drücken SieUpdate, um das Bild öffentlich zugänglich zu machen.

[.warning] #Warning: Ihr Bild ist während dieses Vorgangs vorübergehend für jeden mit seinem Leerzeichenpfad öffentlich zugänglich. Wenn Sie vermeiden möchten, dass Ihr Bild vorübergehend veröffentlicht wird, können Sie Ihr benutzerdefiniertes Bild mit DigitalOceanAPIerstellen. Stellen Sie sicher, dass Sie Ihr Bild wie oben beschrieben aufPrivate einstellen, nachdem Ihr Bild erfolgreich auf Benutzerdefinierte Bilder übertragen wurde.
#

Rufen Sie die Leerzeichen-URL für Ihr Bild ab, indem Sie den Mauszeiger über den Bildnamen in der Systemsteuerung bewegen und im angezeigten Fenster aufCopy URL klicken.

Navigieren Sie nun zuImages in der linken Navigationsleiste und dann zuCustom Images.

Laden Sie von hier aus Ihr Bild unter Verwendung dieser URL hoch, wie in den benutzerdefinierten BildernProduct Documentationangegeben.

Sie können danncreate a Droplet from this image. Beachten Sie, dass Sie dem Droplet beim Erstellen einen SSH-Schlüssel hinzufügen müssen. Um zu erfahren, wie das geht, konsultieren SieHow to Add SSH Keys to Droplets.

Nach dem Start Ihres Droplets haben Sie Ihr benutzerdefiniertes Image erfolgreich als DigitalOcean-Droplet gestartet, sofern Sie SSH-fähig sind.

Debuggen

Wenn Sie versuchen, SSH in Ihr Droplet zu integrieren und keine Verbindung herstellen können, stellen Sie sicher, dass Ihr Image die aufgeführten Anforderungen erfüllt und sowohlcloud-init als auch SSH installiert und ordnungsgemäß konfiguriert sind. Wenn Sie immer noch nicht auf das Droplet zugreifen können, können Sie versuchen,DigitalOcean Droplet Console und den zuvor erstellten Nicht-Root-Benutzer zu verwenden, um das System zu erkunden und Ihre Netzwerk-,cloud-init- und SSH-Konfigurationen zu debuggen. Eine andere Möglichkeit zum Debuggen Ihres Images besteht darin, ein Virtualisierungstool wieVirtualbox zu verwenden, um Ihr Disk-Image in einer virtuellen Maschine zu starten und die Konfiguration Ihres Systems innerhalb der VM zu debuggen.

Fazit

In diesem Handbuch haben Sie gelernt, wie Sie mit dem Befehlszeilenprogrammddein Disk-Image eines Ubuntu 18.04-Systems erstellen und als benutzerdefiniertes Image auf DigitalOcean hochladen, von dem aus Sie Droplets starten können.

Die Schritte in diesem Handbuch können je nach Betriebssystem, vorhandener Hardware und Kernelkonfiguration variieren. Im Allgemeinen sollten jedoch von gängigen Linux-Distributionen erstellte Images mit dieser Methode funktionieren. Befolgen Sie die Schritte zum Installieren und Konfigurieren voncloud-init sorgfältig und stellen Sie sicher, dass Ihr System alle im obigen Abschnittprerequisitesaufgeführten Anforderungen erfüllt.

Weitere Informationen zu benutzerdefinierten Bildern finden Sie inCustom Images product documentation.