|
Ivan Mahonin |
e71c94 |
#!/bin/bash
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
set -e
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
OLDDIR=`pwd`
|
|
Ivan Mahonin |
e71c94 |
BASE_DIR=$(cd `dirname "$0"`; pwd)
|
|
Ivan Mahonin |
e71c94 |
cd "$OLDDIR"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
d7d215 |
INSTANCE_ID=`uuidgen`
|
|
Ivan Mahonin |
d7d215 |
INSTANCE_KEY=
|
|
Ivan Mahonin |
e71c94 |
PRIVILEGED=
|
|
Ivan Mahonin |
9a8dee |
COMMANDARCH=
|
|
Ivan Mahonin |
e71c94 |
IMAGE_MOUNT_DIR=
|
|
Ivan Mahonin |
e71c94 |
COMMAND_ERROR=
|
|
Ivan Mahonin |
c1cb33 |
PREFIX="$CHROOTER_PREFIX"
|
|
Ivan Mahonin |
c1cb33 |
if [ -z "$PREFIX" ]; then
|
|
Ivan Mahonin |
d7d215 |
PREFIX="/tmp"
|
|
Ivan Mahonin |
c1cb33 |
fi
|
|
Ivan Mahonin |
d7d215 |
FULLPREFIX="$PREFIX/chrooter"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
d7d215 |
trap 'raise_error terminated' SIGINT
|
|
Ivan Mahonin |
d7d215 |
|
|
Ivan Mahonin |
d7d215 |
raise_error() {
|
|
Ivan Mahonin |
d7d215 |
echo "Error: $1"
|
|
Ivan Mahonin |
d7d215 |
rm -f "/$FULLPREFIX-$INSTANCE_ID.chroot.sh"
|
|
Ivan Mahonin |
d7d215 |
image_unmount
|
|
Ivan Mahonin |
d7d215 |
exit 1
|
|
Ivan Mahonin |
d7d215 |
}
|
|
Ivan Mahonin |
d7d215 |
|
|
Ivan Mahonin |
d7d215 |
check_runned() {
|
|
Ivan Mahonin |
d7d215 |
if [ ! -z "$INSTANCE_KEY" ]; then
|
|
Ivan Mahonin |
d7d215 |
if [ "0" != `mount | grep -c "$FULLPREFIX-$INSTANCE_KEY"` ]; then
|
|
Ivan Mahonin |
d7d215 |
raise_error "instance with key '$INSTANCE_KEY', is already running"
|
|
Ivan Mahonin |
d7d215 |
fi
|
|
Ivan Mahonin |
d7d215 |
fi
|
|
Ivan Mahonin |
d7d215 |
}
|
|
root |
993506 |
|
|
Ivan Mahonin |
e71c94 |
image_mount_add() {
|
|
Ivan Mahonin |
e71c94 |
echo "Mount: $1 -> $2"
|
|
Ivan Mahonin |
a1747c |
sudo mkdir -p "$IMAGE_MOUNT_DIR/root$2"
|
|
Ivan Mahonin |
9a8dee |
sudo mount --bind "$1" "$IMAGE_MOUNT_DIR/root$2"
|
|
Ivan Mahonin |
d7d215 |
echo "umount -f \"$IMAGE_MOUNT_DIR/root$2\" || umount -l \"$IMAGE_MOUNT_DIR/root$2\"" >> "$IMAGE_MOUNT_DIR/umount.sh"
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
image_mount() {
|
|
Ivan Mahonin |
e71c94 |
echo "Mount image: $1"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$IMAGE_MOUNT_DIR" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Image already mounted"
|
|
Ivan Mahonin |
e71c94 |
return 1
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$1" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Image name was not set"
|
|
Ivan Mahonin |
e71c94 |
return 1
|
|
Ivan Mahonin |
cfe726 |
fi
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_NAME="$(echo $1 | tr "/:" "_")"
|
|
Ivan Mahonin |
9a8dee |
local IMAGE_FILE="$BASE_DIR/image/$IMAGE_NAME.iso"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
a1747c |
echo "Prepare image: $1"
|
|
Ivan Mahonin |
d7d215 |
IMAGE_MOUNT_DIR="/$FULLPREFIX-$INSTANCE_KEY-$INSTANCE_ID"
|
|
Ivan Mahonin |
9a8dee |
mkdir -p "$IMAGE_MOUNT_DIR/iso"
|
|
Ivan Mahonin |
a1747c |
mkdir -p "$IMAGE_MOUNT_DIR/work"
|
|
Ivan Mahonin |
a1747c |
mkdir -p "$IMAGE_MOUNT_DIR/root"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
echo "Add -.chroot.sh file"
|
|
Ivan Mahonin |
d7d215 |
sudo mv "/$FULLPREFIX-$INSTANCE_ID.chroot.sh" "$IMAGE_MOUNT_DIR/work/chroot-$INSTANCE_ID.sh"
|
|
Ivan Mahonin |
d7d215 |
sudo chmod a+x "$IMAGE_MOUNT_DIR/work/chroot-$INSTANCE_ID.sh"
|
|
Ivan Mahonin |
a1747c |
|
|
Ivan Mahonin |
a1747c |
echo "Mount root"
|
|
Ivan Mahonin |
9a8dee |
sudo mount -r "$IMAGE_FILE" "$IMAGE_MOUNT_DIR/iso"
|
|
Ivan Mahonin |
9a8dee |
sudo mount -wt aufs -o br=$IMAGE_MOUNT_DIR/work:$IMAGE_MOUNT_DIR/iso -o udba=none none $IMAGE_MOUNT_DIR/root/
|
|
Ivan Mahonin |
a1747c |
|
|
Ivan Mahonin |
a1747c |
set -- "${@:2}"
|
|
Ivan Mahonin |
e71c94 |
echo "Mount subs: $@"
|
|
Ivan Mahonin |
d7d215 |
echo "#!/bin/bash" > "$IMAGE_MOUNT_DIR/umount.sh"
|
|
Ivan Mahonin |
d7d215 |
chmod a+x "$IMAGE_MOUNT_DIR/umount.sh"
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$PRIVILEGED" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Mount /proc and /dev for priveleged feature"
|
|
Ivan Mahonin |
e71c94 |
image_mount_add /proc /proc
|
|
Ivan Mahonin |
e71c94 |
image_mount_add /dev /dev
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
9a8dee |
for ARG in $@; do
|
|
Ivan Mahonin |
e71c94 |
SRC="$(echo "$ARG" | cut -d':' -f 1)"
|
|
Ivan Mahonin |
e71c94 |
DEST="$(echo "$ARG" | cut -d':' -f 2-)"
|
|
Ivan Mahonin |
e71c94 |
image_mount_add $SRC $DEST
|
|
Ivan Mahonin |
e71c94 |
done
|
|
Ivan Mahonin |
3c7ba5 |
|
|
Ivan Mahonin |
3c7ba5 |
echo "Add /etc/resolv.conf"
|
|
Ivan Mahonin |
a1747c |
sudo cp /etc/resolv.conf $IMAGE_MOUNT_DIR/root/
|
|
Ivan Mahonin |
a1747c |
sudo mkdir -p $IMAGE_MOUNT_DIR/root/etc && sudo cp /etc/resolv.conf $IMAGE_MOUNT_DIR/root/etc/
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
image_unmount() {
|
|
Ivan Mahonin |
e71c94 |
echo "Unmount image"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$IMAGE_MOUNT_DIR" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Image not mounted"
|
|
Ivan Mahonin |
e71c94 |
return 1
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
echo "Unmount subs"
|
|
Ivan Mahonin |
d7d215 |
sudo "$IMAGE_MOUNT_DIR/umount.sh"
|
|
Ivan Mahonin |
d7d215 |
sudo rm -f "$IMAGE_MOUNT_DIR/umount.sh"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
d7d215 |
echo "Remove chroot-.sh file"
|
|
Ivan Mahonin |
d7d215 |
sudo rm -f "$IMAGE_MOUNT_DIR/root/chroot-$INSTANCE_ID.sh"
|
|
Ivan Mahonin |
a1747c |
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z $1 ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Save image: $1"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_NAME="$(echo $1 | tr "/:" "_")"
|
|
Ivan Mahonin |
9a8dee |
local IMAGE_FILE="$BASE_DIR/image/$IMAGE_NAME.iso"
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_DIR=`dirname "$IMAGE_FILE"`
|
|
Ivan Mahonin |
e71c94 |
mkdir -p "$IMAGE_DIR"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
9a8dee |
sudo rm -f "$IMAGE_FILE"
|
|
Ivan Mahonin |
9a8dee |
sudo genisoimage -quiet -R -o "$IMAGE_FILE" "$IMAGE_MOUNT_DIR/root"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
a1747c |
|
|
Ivan Mahonin |
9a8dee |
sudo umount -R -f "$IMAGE_MOUNT_DIR/root" || umount -R -l "$IMAGE_MOUNT_DIR/root"
|
|
Ivan Mahonin |
9a8dee |
sudo umount -f "$IMAGE_MOUNT_DIR/iso" || umount -l "$IMAGE_MOUNT_DIR/iso"
|
|
Ivan Mahonin |
a1747c |
|
|
Ivan Mahonin |
a1747c |
echo "Remove mount dirs"
|
|
Ivan Mahonin |
e71c94 |
sudo rm -rf --one-file-system "$IMAGE_MOUNT_DIR"
|
|
Ivan Mahonin |
e71c94 |
IMAGE_MOUNT_DIR=
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
image_command() {
|
|
Ivan Mahonin |
e71c94 |
echo "Run command: $@"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$IMAGE_MOUNT_DIR" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Image not mounted"
|
|
Ivan Mahonin |
e71c94 |
return 1
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
9a8dee |
local SETARCH=
|
|
Ivan Mahonin |
9a8dee |
if [ ! -z "$COMMANDARCH" ]; then
|
|
Ivan Mahonin |
9a8dee |
SETARCH=setarch
|
|
Ivan Mahonin |
9a8dee |
fi
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
d7d215 |
if ! env -i /usr/bin/sudo -i $SETARCH $COMMANDARCH chroot "$IMAGE_MOUNT_DIR/root" "/chroot-$INSTANCE_ID.sh" $@; then
|
|
Ivan Mahonin |
e71c94 |
COMMAND_ERROR=1
|
|
Ivan Mahonin |
e71c94 |
echo "Command returned with error"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
2619ef |
image_copy() {
|
|
Ivan Mahonin |
2619ef |
echo "Copy into image: $1 $2"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
a1747c |
if ! cp "$1" "$IMAGE_MOUNT_DIR/root/$2"; then
|
|
Ivan Mahonin |
a1747c |
echo "Cannot copy \"$1\" -> \"$IMAGE_MOUNT_DIR/root/$2\""
|
|
Ivan Mahonin |
2619ef |
return 1
|
|
Ivan Mahonin |
2619ef |
fi
|
|
Ivan Mahonin |
2619ef |
}
|
|
Ivan Mahonin |
2619ef |
|
|
Ivan Mahonin |
e71c94 |
chroot_file_begin() {
|
|
Ivan Mahonin |
d7d215 |
echo "#!/bin/sh" > "/$FULLPREFIX-$INSTANCE_ID.chroot.sh"
|
|
Ivan Mahonin |
d7d215 |
echo "" >> "/$FULLPREFIX-$INSTANCE_ID.chroot.sh"
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
chroot_file_env() {
|
|
Ivan Mahonin |
9a8dee |
echo "Set env: $1=\"$2\""
|
|
Ivan Mahonin |
d7d215 |
echo "export $1=\"$2\"" >> "/$FULLPREFIX-$INSTANCE_ID.chroot.sh"
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
chroot_file_end() {
|
|
Ivan Mahonin |
d7d215 |
echo "\$@" >> "/$FULLPREFIX-$INSTANCE_ID.chroot.sh"
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
import() {
|
|
Ivan Mahonin |
e71c94 |
echo "Import $2"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
if [ ! "$1" = "-" ]; then
|
|
Ivan Mahonin |
9a8dee |
echo "Unknown commandline argument $1"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$2" ]; then
|
|
Ivan Mahonin |
9a8dee |
echo "Image name was not set"
|
|
Ivan Mahonin |
9a8dee |
return 1
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_NAME="$(echo $2 | tr "/:" "_")"
|
|
Ivan Mahonin |
d7d215 |
INSTANCE_KEY = IMAGE_NAME
|
|
Ivan Mahonin |
d7d215 |
check_runned
|
|
Ivan Mahonin |
9a8dee |
local IMAGE_FILE="$BASE_DIR/image/$IMAGE_NAME.iso"
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_DIR=`dirname "$IMAGE_FILE"`
|
|
Ivan Mahonin |
e71c94 |
mkdir -p "$IMAGE_DIR"
|
|
Ivan Mahonin |
e71c94 |
cat "/dev/stdin" > $IMAGE_FILE
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
build() {
|
|
Ivan Mahonin |
e71c94 |
echo "Build"
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_NAME=
|
|
Ivan Mahonin |
e71c94 |
local WORK_DIR=
|
|
Ivan Mahonin |
9a8dee |
|
|
Ivan Mahonin |
e71c94 |
chroot_file_begin
|
|
Ivan Mahonin |
cfe726 |
local MODE=
|
|
Ivan Mahonin |
cfe726 |
for ARG in $@; do
|
|
Ivan Mahonin |
cfe726 |
if [ -z "$WORK_DIR" ]; then
|
|
Ivan Mahonin |
cfe726 |
if [ "$MODE" = "-t" ]; then
|
|
Ivan Mahonin |
cfe726 |
IMAGE_NAME="$ARG"
|
|
Ivan Mahonin |
cfe726 |
echo "Set image name: $IMAGE_NAME"
|
|
Ivan Mahonin |
cfe726 |
MODE=
|
|
Ivan Mahonin |
cfe726 |
continue
|
|
Ivan Mahonin |
cfe726 |
fi
|
|
Ivan Mahonin |
cfe726 |
fi
|
|
Ivan Mahonin |
cfe726 |
|
|
Ivan Mahonin |
cfe726 |
if [ ! -z "$MODE" ]; then
|
|
Ivan Mahonin |
cfe726 |
echo "Unknown commandline argument: $MODE"
|
|
Ivan Mahonin |
cfe726 |
fi
|
|
Ivan Mahonin |
cfe726 |
|
|
Ivan Mahonin |
cfe726 |
MODE=
|
|
Ivan Mahonin |
cfe726 |
if [ ! -z "$WORK_DIR" ]; then
|
|
Ivan Mahonin |
cfe726 |
echo "Unknown commandline argument: $ARG"
|
|
Ivan Mahonin |
cfe726 |
elif [ "$ARG" = "--privileged=true" ]; then
|
|
Ivan Mahonin |
cfe726 |
PRIVILEGED=1
|
|
Ivan Mahonin |
cfe726 |
echo "Set privileged: true"
|
|
Ivan Mahonin |
e71c94 |
elif [ "${ARG:0:1}" = "-" ]; then
|
|
Ivan Mahonin |
cfe726 |
SUBMODE="$(echo "$ARG" | cut -d'=' -f 1)"
|
|
Ivan Mahonin |
cfe726 |
SUBVALUE="$(echo "$ARG" | cut -d'=' -f 2-)"
|
|
Ivan Mahonin |
cfe726 |
if [ "$SUBMODE" = "--build-arg" ]; then
|
|
Ivan Mahonin |
cfe726 |
ENVKEY="$(echo "$SUBVALUE" | cut -d'=' -f 1)"
|
|
Ivan Mahonin |
cfe726 |
ENVVALUE="$(echo "$SUBVALUE" | cut -d'=' -f 2-)"
|
|
Ivan Mahonin |
cfe726 |
chroot_file_env "$ENVKEY" "$ENVVALUE"
|
|
Ivan Mahonin |
cfe726 |
continue
|
|
Ivan Mahonin |
9a8dee |
elif [ "$SUBMODE" = "--buildarch" ]; then
|
|
Ivan Mahonin |
9a8dee |
COMMANDARCH="$SUBVALUE"
|
|
Ivan Mahonin |
9a8dee |
continue
|
|
Ivan Mahonin |
cfe726 |
else
|
|
Ivan Mahonin |
cfe726 |
MODE=$ARG
|
|
Ivan Mahonin |
cfe726 |
fi
|
|
Ivan Mahonin |
cfe726 |
else
|
|
Ivan Mahonin |
e71c94 |
WORK_DIR=$ARG
|
|
Ivan Mahonin |
e71c94 |
echo "Set work dir: $WORK_DIR"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
done
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$MODE" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Unknown commandline argument $MODE"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
chroot_file_end
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$IMAGE_NAME" ]; then
|
|
Ivan Mahonin |
d7d215 |
raise_error "image name was not set"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
cfe726 |
|
|
Ivan Mahonin |
d7d215 |
INSTANCE_KEY="$(echo $IMAGE_NAME | tr "/:" "_")"
|
|
Ivan Mahonin |
d7d215 |
check_runned
|
|
Ivan Mahonin |
d7d215 |
|
|
Ivan Mahonin |
a1747c |
local BUILDFILE="$WORK_DIR/Buildfile"
|
|
Ivan Mahonin |
a1747c |
if [ ! -f "$BUILDFILE" ]; then
|
|
Ivan Mahonin |
a1747c |
echo "Buildfile not found at: $BUILDFILE"
|
|
Ivan Mahonin |
e71c94 |
return 1
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
a1747c |
echo "Read $BUILDFILE"
|
|
Ivan Mahonin |
e71c94 |
FULLROW=
|
|
Ivan Mahonin |
e71c94 |
while read ROW; do
|
|
Ivan Mahonin |
e71c94 |
FULLROW="$FULLROW$ROW"
|
|
Ivan Mahonin |
e71c94 |
LASTCHAR=$((${#ROW}-1))
|
|
Ivan Mahonin |
e71c94 |
if [ ! "${ROW:LASTCHAR:1}" = "\\" ]; then
|
|
Ivan Mahonin |
e71c94 |
if [ "${FULLROW:0:5}" = "FROM " ]; then
|
|
Ivan Mahonin |
e71c94 |
image_mount "${FULLROW:5}"
|
|
Ivan Mahonin |
e71c94 |
elif [ "${ROW:0:4}" = "RUN " ]; then
|
|
Ivan Mahonin |
e71c94 |
image_command "${FULLROW:4}"
|
|
Ivan Mahonin |
2619ef |
elif [ "${ROW:0:5}" = "COPY " ]; then
|
|
Ivan Mahonin |
2619ef |
image_copy ${FULLROW:5}
|
|
Ivan Mahonin |
e71c94 |
elif [ ! "${FULLROW:0:1}" = "#" ]; then
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$FULLROW" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Unknown command: $FULLROW"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
FULLROW=
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$COMMAND_ERROR" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Cancel build"
|
|
Ivan Mahonin |
e71c94 |
IMAGE_NAME=""
|
|
Ivan Mahonin |
e71c94 |
break
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
a1747c |
done < "$BUILDFILE"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
image_unmount "$IMAGE_NAME"
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
run() {
|
|
Ivan Mahonin |
e71c94 |
local IMAGE_NAME=
|
|
Ivan Mahonin |
e71c94 |
local COMMAND=
|
|
Ivan Mahonin |
e71c94 |
local SUBMOUNT=
|
|
root |
993506 |
|
|
Ivan Mahonin |
e71c94 |
chroot_file_begin
|
|
root |
993506 |
local MODE=
|
|
root |
993506 |
for ARG in $@; do
|
|
root |
993506 |
if [ ! -z "$COMMAND" ]; then
|
|
root |
993506 |
COMMAND="$COMMAND $ARG"
|
|
root |
993506 |
else
|
|
root |
993506 |
if [ "$MODE" = "-e" ]; then
|
|
Ivan Mahonin |
e71c94 |
ENVKEY="$(echo "$ARG" | cut -d'=' -f 1)"
|
|
Ivan Mahonin |
e71c94 |
ENVVALUE="$(echo "$ARG" | cut -d'=' -f 2-)"
|
|
Ivan Mahonin |
e71c94 |
chroot_file_env "$ENVKEY" "$ENVVALUE"
|
|
Ivan Mahonin |
e71c94 |
MODE=
|
|
Ivan Mahonin |
e71c94 |
continue
|
|
root |
993506 |
elif [ "$MODE" = "-v" ]; then
|
|
Ivan Mahonin |
e71c94 |
SUBMOUNT="$SUBMOUNT$ARG "
|
|
root |
993506 |
echo "Add submount: $ARG"
|
|
Ivan Mahonin |
e71c94 |
MODE=
|
|
Ivan Mahonin |
e71c94 |
continue
|
|
root |
993506 |
elif [ "$MODE" = "--name" ]; then
|
|
Ivan Mahonin |
d7d215 |
echo "Set instance key (name): $ARG"
|
|
Ivan Mahonin |
d7d215 |
INSTANCE_KEY="$ARG"
|
|
Ivan Mahonin |
e71c94 |
MODE=
|
|
Ivan Mahonin |
e71c94 |
continue
|
|
root |
993506 |
fi
|
|
root |
993506 |
|
|
root |
993506 |
if [ ! -z "$MODE" ]; then
|
|
root |
993506 |
echo "Unknown commandline argument $MODE"
|
|
root |
993506 |
fi
|
|
root |
993506 |
|
|
root |
993506 |
MODE=
|
|
root |
993506 |
if [ -z "$MODE" ]; then
|
|
root |
993506 |
if [ "$ARG" = "--privileged=true" ]; then
|
|
root |
993506 |
PRIVILEGED=1
|
|
root |
993506 |
echo "Set privileged: true"
|
|
root |
993506 |
elif [ "${ARG:0:1}" = "-" ]; then
|
|
root |
993506 |
MODE=$ARG
|
|
root |
993506 |
elif [ -z "$IMAGE_NAME" ]; then
|
|
root |
993506 |
IMAGE_NAME=$ARG
|
|
root |
993506 |
echo "Set image name: $IMAGE_NAME"
|
|
root |
993506 |
elif [ -z "$COMMAND" ]; then
|
|
root |
993506 |
COMMAND=$ARG
|
|
root |
993506 |
fi
|
|
root |
993506 |
fi
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
done
|
|
Ivan Mahonin |
e71c94 |
if [ ! -z "$MODE" ]; then
|
|
Ivan Mahonin |
e71c94 |
echo "Unknown commandline argument $MODE"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
chroot_file_end
|
|
Ivan Mahonin |
e71c94 |
echo "Set command: $COMMAND"
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
if [ -z "$COMMAND" ]; then
|
|
Ivan Mahonin |
d7d215 |
raise_error "command was not set"
|
|
Ivan Mahonin |
e71c94 |
fi
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
d7d215 |
check_runned
|
|
Ivan Mahonin |
d7d215 |
|
|
Ivan Mahonin |
e71c94 |
image_mount "$IMAGE_NAME" $SUBMOUNT
|
|
Ivan Mahonin |
e71c94 |
image_command $COMMAND
|
|
Ivan Mahonin |
e71c94 |
image_unmount
|
|
Ivan Mahonin |
e71c94 |
}
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
|
|
Ivan Mahonin |
e71c94 |
if [ "$1" = "import" ]; then
|
|
Ivan Mahonin |
9a8dee |
set -- "${@:2}"
|
|
Ivan Mahonin |
9a8dee |
import $@
|
|
Ivan Mahonin |
e71c94 |
elif [ "$1" = "build" ]; then
|
|
Ivan Mahonin |
9a8dee |
set -- "${@:2}"
|
|
Ivan Mahonin |
9a8dee |
build $@
|
|
Ivan Mahonin |
e71c94 |
elif [ "$1" = "run" ]; then
|
|
Ivan Mahonin |
9a8dee |
set -- "${@:2}"
|
|
Ivan Mahonin |
9a8dee |
run $@
|
|
Ivan Mahonin |
e71c94 |
else
|
|
Ivan Mahonin |
e71c94 |
echo "Unknown command: $1"
|
|
Ivan Mahonin |
ec0475 |
COMMAND_ERROR=1
|
|
Ivan Mahonin |
ec0475 |
fi
|
|
Ivan Mahonin |
ec0475 |
|
|
Ivan Mahonin |
ec0475 |
if [ ! -z "$COMMAND_ERROR" ]; then
|
|
Ivan Mahonin |
ec0475 |
false
|
|
Ivan Mahonin |
e71c94 |
fi
|