Compare commits

...

5 Commits

  1. 103
      bin/compose
  2. 8
      bin/compose-core

103
bin/compose

@ -10,6 +10,20 @@
## ##
get_os() {
local uname_output machine
uname_output="$(uname -s)"
case "${uname_output}" in
Linux*) machine=linux;;
Darwin*) machine=mac;;
CYGWIN*) machine=cygwin;;
MINGW*) machine=mingw;;
*) machine="UNKNOWN:${uname_output}"
esac
echo "${machine}"
}
read-0() { read-0() {
local eof= IFS='' local eof= IFS=''
@ -49,7 +63,7 @@ is_volume_used() {
clean_unused_sessions() { clean_unused_sessions() {
for f in /var/lib/compose/sessions/*; do
for f in "$COMPOSE_VAR/sessions/"*; do
[ -e "$f" ] || continue [ -e "$f" ] || continue
is_volume_used "$f" && continue is_volume_used "$f" && continue
rm -f "$f" rm -f "$f"
@ -75,10 +89,10 @@ mk_docker_run_options() {
docker_run_opts=("-v" "/var/run/docker.sock:/var/run/docker.sock") docker_run_opts=("-v" "/var/run/docker.sock:/var/run/docker.sock")
## CACHE/DATA DIRS ## CACHE/DATA DIRS
docker_run_opts+=("-v" "/var/lib/compose:/var/lib/compose")
docker_run_opts+=("-v" "/var/cache/compose:/var/cache/compose")
docker_run_opts+=("-v" "$COMPOSE_VAR:/var/lib/compose")
docker_run_opts+=("-v" "$COMPOSE_CACHE:/var/cache/compose")
docker_run_opts+=("-v" "/etc/timezone:/etc/timezone:ro")
docker_run_opts+=("-v" "$TZ_PATH:/etc/timezone:ro")
## current dir ## current dir
@ -91,7 +105,7 @@ mk_docker_run_options() {
cd .. cd ..
done done
); then ); then
docker_path=/var/lib/compose/root/$(basename "$parent")
docker_path=$COMPOSE_VAR/root/$(basename "$parent")
docker_run_opts+=("-v" "$parent:$docker_path:ro" \ docker_run_opts+=("-v" "$parent:$docker_path:ro" \
"-w" "$docker_path") "-w" "$docker_path")
fi fi
@ -102,23 +116,13 @@ mk_docker_run_options() {
## ##
if [ -z "$DISABLE_SYSTEM_CONFIG_FILE" ]; then if [ -z "$DISABLE_SYSTEM_CONFIG_FILE" ]; then
if [ -r /etc/default/charm ]; then
docker_run_opts+=("-v" "/etc/default/charm:/etc/default/charm:ro")
. /etc/default/charm
fi
## XXXvlab: should provide YML config opportunities in possible parent dirs ? ## XXXvlab: should provide YML config opportunities in possible parent dirs ?
## userdir ? and global /etc/compose.yml ? ## userdir ? and global /etc/compose.yml ?
for cfgfile in /etc/compose.conf /etc/compose.local.conf \
/etc/default/compose /etc/compose/local.conf; do
for cfgfile in "${compose_config_files[@]}"; do
[ -e "$cfgfile" ] || continue [ -e "$cfgfile" ] || continue
docker_run_opts+=("-v" "$cfgfile:$cfgfile:ro") docker_run_opts+=("-v" "$cfgfile:$cfgfile:ro")
. "$cfgfile" . "$cfgfile"
done done
for cfgfile in /etc/default/datastore; do
[ -e "$cfgfile" ] || continue
docker_run_opts+=("-v" "$cfgfile:$cfgfile:ro")
done
else else
docker_run_opts+=("-e" "DISABLE_SYSTEM_CONFIG_FILE=$DISABLE_SYSTEM_CONFIG_FILE") docker_run_opts+=("-e" "DISABLE_SYSTEM_CONFIG_FILE=$DISABLE_SYSTEM_CONFIG_FILE")
fi fi
@ -133,7 +137,11 @@ mk_docker_run_options() {
[ -L "$CHARM_STORE" ] && { [ -L "$CHARM_STORE" ] && {
CHARM_STORE=$(readlink "$CHARM_STORE") || exit 1 CHARM_STORE=$(readlink "$CHARM_STORE") || exit 1
} }
docker_run_opts+=("-v" "$CHARM_STORE:/srv/charm-store:ro")
docker_run_opts+=(
"-v" "$CHARM_STORE:/srv/charm-store:ro"
"-e" "CHARM_STORE=/srv/charm-store"
"-e" "HOST_CHARM_STORE=$CHARM_STORE"
)
relink_subdirs /srv/charm-store/* relink_subdirs /srv/charm-store/*
## DEFAULT_COMPOSE_FILE ## DEFAULT_COMPOSE_FILE
@ -148,21 +156,30 @@ mk_docker_run_options() {
## COMPOSE_YML_FILE ## COMPOSE_YML_FILE
if [ "${COMPOSE_YML_FILE+x}" ]; then if [ "${COMPOSE_YML_FILE+x}" ]; then
if [ -e "${COMPOSE_YML_FILE}" ]; then if [ -e "${COMPOSE_YML_FILE}" ]; then
docker_run_opts+=("-v" "$COMPOSE_YML_FILE:/tmp/compose.yml:ro")
docker_run_opts+=("-e" "COMPOSE_YML_FILE=/tmp/compose.yml")
docker_run_opts+=(
"-v" "$COMPOSE_YML_FILE:/tmp/compose.yml:ro"
"-e" "COMPOSE_YML_FILE=/tmp/compose.yml"
"-e" "HOST_COMPOSE_YML_FILE=/tmp/compose.yml"
)
fi fi
fi fi
## DATASTORE ## DATASTORE
if [ "${DATASTORE+x}" ]; then if [ "${DATASTORE+x}" ]; then
docker_run_opts+=("-v" "$DATASTORE:/srv/datastore/data:rw")
docker_run_opts+=("-e" "DATASTORE=/srv/datastore/data")
docker_run_opts+=(
"-v" "$DATASTORE:/srv/datastore/data:rw"
"-e" "DATASTORE=/srv/datastore/data"
"-e" "HOST_DATASTORE=$DATASTORE"
)
fi fi
## CONFIGSTORE ## CONFIGSTORE
if [ "${CONFIGSTORE+x}" ]; then if [ "${CONFIGSTORE+x}" ]; then
docker_run_opts+=("-v" "$CONFIGSTORE:/srv/datastore/config:rw")
docker_run_opts+=("-e" "CONFIGSTORE=/srv/datastore/config")
docker_run_opts+=(
"-v" "$CONFIGSTORE:/srv/datastore/config:rw"
"-e" "CONFIGSTORE=/srv/datastore/config"
"-e" "HOST_CONFIGSTORE=$CONFIGSTORE"
)
fi fi
docker_run_opts+=("-v" "$HOME/.docker:/root/.docker") docker_run_opts+=("-v" "$HOME/.docker:/root/.docker")
@ -171,6 +188,7 @@ mk_docker_run_options() {
docker_run_opts+=("-e" "COMPOSE_DOCKER_IMAGE=$COMPOSE_DOCKER_IMAGE") docker_run_opts+=("-e" "COMPOSE_DOCKER_IMAGE=$COMPOSE_DOCKER_IMAGE")
COMPOSE_LAUNCHER_BIN=$(readlink -f "${BASH_SOURCE[0]}") COMPOSE_LAUNCHER_BIN=$(readlink -f "${BASH_SOURCE[0]}")
docker_run_opts+=("-v" "$COMPOSE_LAUNCHER_BIN:/usr/local/bin/compose")
filename=$(mktemp -p /tmp/ -t launch_opts-XXXXXXXXXXXXXXXX) filename=$(mktemp -p /tmp/ -t launch_opts-XXXXXXXXXXXXXXXX)
{ {
@ -178,19 +196,54 @@ mk_docker_run_options() {
} > "$filename" } > "$filename"
sha=$(sha256sum "$filename") sha=$(sha256sum "$filename")
sha=${sha:0:64} sha=${sha:0:64}
dest="/var/lib/compose/sessions/$sha"
dest="$COMPOSE_VAR/sessions/$sha"
{ {
printf "%s\0" "-v" "$dest:$dest" printf "%s\0" "-v" "$dest:$dest"
printf "%s\0" "-e" "COMPOSE_LAUNCHER_OPTS=$dest" printf "%s\0" "-e" "COMPOSE_LAUNCHER_OPTS=$dest"
printf "%s\0" "-e" "COMPOSE_LAUNCHER_BIN=$COMPOSE_LAUNCHER_BIN" printf "%s\0" "-e" "COMPOSE_LAUNCHER_BIN=$COMPOSE_LAUNCHER_BIN"
} >> "$filename" } >> "$filename"
mkdir -p /var/lib/compose/sessions
mkdir -p "$COMPOSE_VAR"/sessions
mv "$filename" "$dest" mv "$filename" "$dest"
echo "$dest" echo "$dest"
} }
run() { run() {
local os docker_run_opts
## Order matters, files get to override vars
compose_config_files=(
/etc/default/charm
/etc/default/datastore
/etc/compose.conf
/etc/compose.local.conf
/etc/default/compose
~/.compose/etc/local.conf
/etc/compose/local.conf
)
os=$(get_os)
case "$os" in
linux)
COMPOSE_VAR=/var/lib/compose
COMPOSE_CACHE=/var/cache/compose
;;
mac)
if ! [ -e "$HOME/.compose/etc/timezone" ]; then
TZ=${TZ:-"Europe/Paris"}
echo "$TZ" > "$HOME"/.compose/etc/timezone
fi
TZ_PATH="$HOME"/.compose/etc/timezone
COMPOSE_VAR="$HOME"/.compose/lib
COMPOSE_CACHE="$HOME"/.compose/cache
;;
*)
echo "System '$os' not supported yet." >&2
exit 1
;;
esac
docker_run_opts=() docker_run_opts=()
if [ -z "$COMPOSE_LAUNCHER_OPTS" ]; then if [ -z "$COMPOSE_LAUNCHER_OPTS" ]; then
clean_unused_sessions clean_unused_sessions

8
bin/compose-core

@ -731,7 +731,11 @@ ensure_db_docker_running () {
docker rm "$_DB_NAME" 2>/dev/null || true docker rm "$_DB_NAME" 2>/dev/null || true
host_db_working_dir="$DATASTORE/${SERVICE_NAME}$DB_DATADIR"
if [ "${HOST_DATASTORE+x}" ]; then
host_db_working_dir="$HOST_DATASTORE/${SERVICE_NAME}$DB_DATADIR"
else
host_db_working_dir="$DATASTORE/${SERVICE_NAME}$DB_DATADIR"
fi
if is_db_locked; then if is_db_locked; then
info "Some process is using '$host_db_working_dir'. Trying to find a docker that would do this..." info "Some process is using '$host_db_working_dir'. Trying to find a docker that would do this..."
@ -814,7 +818,7 @@ _dcmd() {
debug "Db> $command $@" debug "Db> $command $@"
if [ -f "$HOST_DB_PASSFILE" -a "$CLIENT_DB_PASSFILE" ]; then
if [ "$HOST_DB_PASSFILE" -a -f "$LOCAL_DB_PASSFILE" -a "$CLIENT_DB_PASSFILE" ]; then
verb "Found and using '$HOST_DB_PASSFILE' as '$CLIENT_DB_PASSFILE'." verb "Found and using '$HOST_DB_PASSFILE' as '$CLIENT_DB_PASSFILE'."
docker_opts=("${db_docker_opts[@]}" "-v" "$HOST_DB_PASSFILE:$CLIENT_DB_PASSFILE") docker_opts=("${db_docker_opts[@]}" "-v" "$HOST_DB_PASSFILE:$CLIENT_DB_PASSFILE")
else else

Loading…
Cancel
Save