Knotenprobleme mit Toolbox beheben

Es kann erforderlich sein, für Aufgaben wie die Fehlerbehebung zusätzliche Pakete oder Tools auf Container-Optimized OS zu installieren. So können Sie beispielsweise Probleme mit der Knotenverbindung beheben, indem Sie tcpdump in der Toolbox installieren. Container-Optimized OS verfügt zwar über keinen Paketmanager, Sie können aber mit dem vorinstallierten Toolbox-Dienstprogramm zusätzliche Pakete oder Tools installieren, die Sie benötigen. /usr/bin/toolbox ist die bevorzugte Methode zum Installieren und Ausführen von einmaligen Fehlerbehebungstools.

/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/cos-cloud/toolbox"
TOOLBOX_DOCKER_TAG="v20220722"
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. In der Standardeinstellung gcr.io/cos-cloud/toolbox sind einige gebräuchliche Tools wie die Google Cloud CLI 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=docker.io/library/fedora" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_TAG=latest" >> "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox

Ab Meilenstein 93 kann die Toolbox kein benutzerdefiniertes Toolbox-Image abrufen. Sie können dieses Problem umgehen, indem Sie ein benutzerdefiniertes Docker-Image-Tarball-Paket für die Toolbox erstellen und es entweder über die Datei ${HOME}/.toolboxrc oder /etc/default/toolbox exportieren.

USER@cos-dev ~ $ echo "TOOLBOX_DOCKER_IMAGE_TARBALL=[docker image tar ball]" > "${HOME}/.toolboxrc"
USER@cos-dev ~ $ toolbox
Die Datei „/etc/default/toolbox“ kann wie unten dargestellt geändert werden.
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/cos-cloud/toolbox"
    TOOLBOX_DOCKER_TAG="v20220722"
    TOOLBOX_DOCKER_IMAGE_TARBALL=[location/to/tarball]
    TOOLBOX_BIND="--bind=/:/media/root/ --bind=/mnt/disks/:/media/root/mnt/disks/ --bind=/var/:/media/root/var/ --bind=/home:/media/root/home/"
    : ${USER:=root}
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 Befehle darin auszuführen. Sie können Ihren Befehlen einfach 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`

Die Google Cloud CLI 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 gcloud CLI version is: 287.0.0
The latest available version is: 295.0.0
...

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

In der Dokumentation zur Google Cloud CLI erfahren Sie mehr über die Verwendung der gcloud CLI.

Dateien in die Toolbox verschieben und daraus entfernen

Auf das Root-Dateisystem des Hosts kann innerhalb von toolbox über den Pfad /media/root zugegriffen werden. Auf dem Host ist das Stammverzeichnis von toolbox über folgenden Pfad zugänglich: /var/lib/toolbox/USER-gcr.io_cos-cloud_toolbox-VERSION/root Dabei gilt: USER dein Nutzername und VERSION ist dietoolbox Versionsnummer (z. B. v20220722).

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_cos-cloud_toolbox-v20220722/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

Von Toolbox belegten Speicherplatz bereinigen

Die Toolbox-Installation belegt ungefähr 2-3 GB Speicherplatz in /var. Die Laufwerksnutzung variiert je nach Version des Container-Optimized OS. Führen Sie je nach Container-Optimized OS-Version folgende Aufgaben aus, um den von Toolbox belegten Speicherplatz freizugeben:

Meilenstein 89 und niedriger

# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*

# remove container artifacts
docker image rm $IMAGE_PATH:$TAG

Sie können docker image ls ausführen, um diese Werte zu ermitteln. Zum Beispiel: IMAGE_PATH=gcr.io/cos-cloud/toolbox und TAG=v20220722.

Meilenstein 93 und höher

# remove files in /var/lib/toolbox
sudo rm -rf /var/lib/toolbox/*

# remove container artifacts
sudo ctr images rm $IMAGE_NAME

Sie können sudo ctr images ls -q ausführen, um diesen Wert zu ermitteln. Beispiel: IMAGE_NAME=gcr.io/cos-cloud/toolbox:v20220722