Knotenprobleme mit der Toolbox beheben

Es kann erforderlich sein, für Aufgaben wie die Fehlerbehebung zusätzliche Pakete oder Tools auf Container-Optimized OS zu installieren. Obwohl Container-Optimized OS keinen Paketmanager enthält, können Sie mit dem vorinstallierten Dienstprogramm Toolbox zusätzliche Pakete oder Tools installieren, die Sie benötigen. Wenn Sie Fehlerbehebungstools zur einmaligen Verwendung installieren und ausführen möchten, tun Sie dies am besten mit /usr/bin/toolbox.

/usr/bin/toolbox bietet Ihnen im Wesentlichen eine Shell in einer Umgebung, die ähnlich zu chroot in Debian-Systemen ist. Nach dem Aufrufen von /usr/bin/toolbox führt es die folgenden Befehle aus:

  1. docker pull und docker create, um die Umgebung einzurichten. Diese werden nur beim ersten Aufruf von /usr/bin/toolbox ausgeführt.
  2. systemd-nspawn, um den angegebenen Befehl auszuführen oder, falls kein Befehl vorhanden ist, eine Shell bereitzustellen.

toolbox hat einige andere Eigenschaften, die zu beachten sind:

  • Für das Aufrufen der toolbox nach dem ersten Aufruf benötigen Sie weder einen aktiven Docker-Daemon noch entsteht dadurch Netzwerk-/Speicherlast.
  • Die toolbox-Umgebung wird einmal für jeden Nutzer eingerichtet, der sie aufruft. Mit dem Befehl sudo toolbox richten Sie diese für den Nutzer root ein.
  • Die toolbox-Umgebung wird unter /var/lib/toolbox eingerichtet und bleibt auch nach einem Neustart bestehen.
  • Sie haben in der toolbox-Umgebung Zugriff auf Bereiche des Root-Dateisystems, z. B. die Nutzer-Basisverzeichnisse.

Toolbox an die Bereitstellung anpassen

In den folgenden Beispielen wird davon ausgegangen, dass Ihr Nutzername USER und der Container-Optimized OS-Instanzname cos-dev ist.

Sie können das von toolbox verwendete Docker-Image sowie die Pfade, die toolbox im Root-Dateisystem zur Verfügung stehen, anpassen. Diese Einstellungen befinden sich in der Datei /etc/default/toolbox. Die Standarddatei /etc/default/toolbox sieht in etwa so aus:

USER@cos-dev ~ $ cat /etc/default/toolbox
# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

TOOLBOX_DOCKER_IMAGE="gcr.io/google-containers/toolbox"
TOOLBOX_DOCKER_TAG="20200404-00"
TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/ --bind=/etc/resolv.conf:/etc/resolv.conf"
: ${USER:=root}
  • Die Variablen TOOLBOX_DOCKER_IMAGE und TOOLBOX_DOCKER_TAG geben das zu verwendende Docker-Image an. Standardmäßig sind in der Datei gcr.io/google-containers/toolbox einige gebräuchliche Tools wie das gcloud-Befehlszeilentool vorinstalliert.
  • Die Variable TOOLBOX_BIND gibt die Verzeichnispfade aus dem Root-Dateisystem an, die innerhalb der Toolbox-Umgebung verfügbar sein sollen.

Zum Ändern der Standardeinstellungen ändern Sie die Datei /etc/default/toolbox oder geben neue Werte für die Variablen in ${HOME}/.toolboxrc für den entsprechenden Nutzer an: Wenn beispielsweise toolbox als Container fedora:latest verwenden soll, können Sie die folgenden Befehle ausführen:

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE=fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox

Tools aus der Toolbox installieren und ausführen

Wenn Sie beispielsweise das Dienstprogramm toolbox aufgerufen haben, um die Shell zu starten, können Sie apt-get innerhalb des generierten Containers zum Installieren von Paketen verwenden. Beispiel:

# Inside the toolbox shell
USER@cos-dev ~ $ toolbox
root@cos-dev:~# apt-get update && apt-get install -y htop psmisc
root@cos-dev:~# htop
root@cos-dev:~# pstree -p
root@cos-dev:~# exit

Sie müssen nicht immer toolbox eingeben, um darin Befehle auszuführen. Sie können Ihren Befehlen einfach das Präfix toolbox voranstellen. So können Sie beispielsweise das Dienstprogramm strace installieren und ausführen, um die Ausführung des Docker-Daemons zu verfolgen:

USER@cos-dev ~ $ toolbox apt-get install -y strace
USER@cos-dev ~ $ toolbox strace -p `pidof dockerd`

Das Cloud SDK ist in der Toolbox vorinstalliert:

USER@cos-dev ~ $ toolbox
root@cos-dev:~# which gcloud
/google-cloud-sdk/bin/gcloud
# View installed components
root@cos-dev:~# gcloud components list

Your current Cloud SDK version is: 287.0.0
The latest available version is: 295.0.0
...

Beachten Sie, dass gcloud nur auf Ressourcen zugreifen kann, auf die die VM-Instanz Zugriff hat. Lesen Sie die Dokumentation zu Compute Engine, um mehr über die Bereitstellung von VM-Instanzen mit Zugriff auf andere Ressourcen zu erfahren.

Weitere Informationen zur Verwendung von gcloud finden Sie in der Dokumentation zum Cloud SDK.

Dateien in die Toolbox verschieben und daraus entfernen

Das Root-Dateisystem des Hosts ist innerhalb von toolbox über den Pfad /media/root zugänglich. Im Host ist das Stammverzeichnis der toolbox über folgenden Pfad zugänglich: /var/lib/toolbox/USER-gcr.io_google-containers_toolbox-VERSION/root. Dabei ist USER Ihr Nutzername und VERSION dietoolbox-Versionsnummer (z. B. 20200404-00).

Die folgenden Beispiele zeigen, wie Sie Dateien in die toolbox verschieben und daraus entfernen:

# Access the host filesystem inside the toolbox
USER@cos-dev ~ $ toolbox
root@cos-dev:~# ls /media/root
bin  boot  dev  etc  home  lib  lib64  ...
root@cos-dev:~# cp /media/root/home/USER/some-file .

# Access toolbox directory from the host
USER@cos-dev ~ $ sudo cp some-file /var/lib/toolbox/USER-gcr.io_google-containers_toolbox-20200404-00/root

# Run a command inside toolbox and save its output in your home directory
USER@cos-dev ~ $ toolbox strace -o /media/root/$HOME/ls.strace ls
USER@cos-dev ~ $ more $HOME/ls.strace