#!/bin/bash # Copyright (C) 2016 Red Hat, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -euo pipefail IFS=$'\n\t' # This is a small wrapper script that automatically fetches # the storage options from the docker-storage sysconfig file # and passes them to the migrator. # # The script supports both in-container runs and direct # invocation. MIGRATOR=/usr/bin/v1.10-migrator-local STORAGE_FILE=/etc/sysconfig/docker-storage GRAPH=/var/lib/docker main() { # are we in a container? if [[ -n ${container-} ]]; then if [[ ! -d /host ]]; then echo "ERROR: Running inside a container, but /host not mounted." >&2 exit 1 fi cp "$MIGRATOR" /host/tmp MIGRATOR="chroot /host /tmp/$(basename $MIGRATOR)" STORAGE_FILE=/host${STORAGE_FILE} fi if [ ! -d "$GRAPH" ]; then echo "ERROR: Cannot find docker root dir at \"$GRAPH\"." >&2 exit 1 fi # load storage opts if we can find the file local storage_opts= if [ -r "$STORAGE_FILE" ] && grep -q -E '^DOCKER_STORAGE_OPTIONS\s*=' "$STORAGE_FILE"; then storage_opts=$(sed -n -e 's/^DOCKER_STORAGE_OPTIONS\s*=\s*// p' "$STORAGE_FILE") storage_opts=${storage_opts#\"} storage_opts=${storage_opts%\"} fi CMD="$MIGRATOR --graph $GRAPH $storage_opts" echo "RUNNING: $CMD" eval $CMD } main "$@"