6 changed files with 327 additions and 5 deletions
-
43bin/pct-create
-
64tools/miaou-create
-
53tools/miaou-exec
-
62tools/miaou-login
-
50tools/miaou-push
-
60tools/miaou-recipe
@ -0,0 +1,64 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# CONSTANTS |
|||
|
|||
BASEDIR=$(dirname "$0") |
|||
CONTAINER='' |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(basename "$0") <CONTAINER_NAME>" |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--help | -h) |
|||
usage && exit 0 |
|||
;; |
|||
*) |
|||
if [[ -z $CONTAINER ]]; then |
|||
CONTAINER=$1 |
|||
else |
|||
echo >&2 "Unknown option: $1" && usage && exit 2 |
|||
fi |
|||
;; |
|||
esac |
|||
|
|||
shift 1 # Move to the next argument |
|||
done |
|||
[[ -n $CONTAINER ]] || (usage && exit 1) |
|||
|
|||
} |
|||
|
|||
function before_start { |
|||
# cold changes |
|||
if [[ -v MIAOU_BASH_DIR ]]; then |
|||
pct set $CONTAINER_ID -mp0 $MIAOU_BASH_DIR,mp=/opt/miaou-bash |
|||
else |
|||
echo >&2 "Warn: variable MIAOU_BASH_DIR missing!" |
|||
fi |
|||
} |
|||
|
|||
function after_start { |
|||
# hot changes |
|||
if [[ -v MIAOU_BASH_DIR ]]; then |
|||
pct exec "$CONTAINER_ID" -- /opt/miaou-bash/init.sh |
|||
fi |
|||
pct exec "$CONTAINER_ID" -- apt-get remove -y postfix |
|||
} |
|||
|
|||
function create { |
|||
CONTAINER_ID=$(pct-create $CONTAINER --no-start | grep "container: $CONTAINER succesfully created" | cut -d= -f2 | cut -d! -f1) |
|||
before_start |
|||
pct start $CONTAINER_ID |
|||
after_start |
|||
} |
|||
|
|||
# MAIN |
|||
|
|||
set -Eue |
|||
parse_options $* |
|||
create |
|||
echo Success |
|||
@ -0,0 +1,53 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# CONSTANTS |
|||
|
|||
BASEDIR=$(dirname "$0") |
|||
CONTAINER='' |
|||
COMMAND='' |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(basename "$0") <CONTAINER_NAME> <COMMAND>" |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--help | -h) |
|||
usage && exit 0 |
|||
;; |
|||
--) |
|||
# don't care with -- |
|||
;; |
|||
*) |
|||
if [[ -z $CONTAINER ]]; then |
|||
CONTAINER=$1 |
|||
elif [[ -z $COMMAND ]]; then |
|||
# FIXME: quite tricky |
|||
COMMAND=("$@") |
|||
for i in "${!COMMAND[@]}"; do |
|||
local value=${COMMAND[$i]} |
|||
[[ $value == *" "* ]] && COMMAND[$i]="'$value'" || true # add quote when space detected! |
|||
done |
|||
break |
|||
fi |
|||
;; |
|||
esac |
|||
shift 1 |
|||
done |
|||
|
|||
[[ -n $CONTAINER ]] || [[ -n $COMMAND ]] || (usage && exit 1) |
|||
} |
|||
|
|||
function exec { |
|||
eval "pct exec $vmid -- ${COMMAND[@]}" |
|||
} |
|||
|
|||
# MAIN |
|||
|
|||
set -Eue |
|||
parse_options "$@" |
|||
vmid=$($BASEDIR/../bin/pct-lookup "$CONTAINER") |
|||
exec |
|||
@ -0,0 +1,62 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# CONSTANTS |
|||
|
|||
BASEDIR=$(dirname "$0") |
|||
CONTAINER='' |
|||
USER='' |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(basename "$0") <CONTAINER_NAME> [--user|-u USER]" |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--help | -h) |
|||
usage && exit 0 |
|||
;; |
|||
--user | -u) |
|||
shift 1 |
|||
[[ -z ${1:-} ]] && >&2 echo 'ERROR: user expected!' && usage && exit 5 |
|||
USER="$1" |
|||
;; |
|||
*) |
|||
if [[ -z $CONTAINER ]]; then |
|||
CONTAINER=$1 |
|||
else |
|||
echo >&2 "Unknown option: $1" && usage && exit 2 |
|||
fi |
|||
;; |
|||
esac |
|||
|
|||
shift 1 # Move to the next argument |
|||
done |
|||
[[ -n $CONTAINER ]] || (usage && exit 1) |
|||
} |
|||
|
|||
function pct_su { |
|||
pct exec "$vmid" -- su - $1 |
|||
} |
|||
|
|||
function pct_user_exists { |
|||
pct exec "$vmid" -- id $1 &> /dev/null |
|||
} |
|||
|
|||
function login { |
|||
if [[ -n $USER ]]; then |
|||
pct_su $USER |
|||
else |
|||
local current=$(whoami) |
|||
pct_user_exists $current && pct_su $current || pct_su root |
|||
fi |
|||
} |
|||
|
|||
# MAIN |
|||
|
|||
set -Eue |
|||
parse_options $* |
|||
vmid=$($BASEDIR/../bin/pct-lookup "$CONTAINER") |
|||
login |
|||
@ -0,0 +1,50 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# CONSTANTS |
|||
|
|||
BASEDIR=$(dirname "$0") |
|||
CONTAINER='' |
|||
SOURCE_FILE='' |
|||
DESTINATION_FOLDER='' |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(basename "$0") <CONTAINER_NAME> <SOURCE_FILE_FROM_HOST> <DESTINATION_FOLDER_TO_CONTAINER>" |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--help | -h) |
|||
usage && exit 0 |
|||
;; |
|||
*) |
|||
if [[ -z $CONTAINER ]]; then |
|||
CONTAINER=$1 |
|||
elif [[ -z $SOURCE_FILE ]]; then |
|||
SOURCE_FILE=$1 |
|||
elif [[ -z $DESTINATION_FOLDER ]]; then |
|||
DESTINATION_FOLDER=$1 |
|||
else |
|||
echo >&2 "Unknown option: $1" && usage && exit 2 |
|||
fi |
|||
;; |
|||
esac |
|||
|
|||
shift 1 # Move to the next argument |
|||
done |
|||
|
|||
[[ -n $CONTAINER ]] || [[ -n $SOURCE_FILE ]] || [[ -n $DESTINATION_FOLDER ]] || (usage && exit 1) |
|||
} |
|||
|
|||
function copy { |
|||
pct push $vmid "$SOURCE_FILE" "$DESTINATION_FOLDER/$(basename $SOURCE_FILE)" --user 0 --group 0 |
|||
} |
|||
|
|||
# MAIN |
|||
|
|||
set -Eue |
|||
parse_options $* |
|||
vmid=$($BASEDIR/../bin/pct-lookup "$CONTAINER") |
|||
copy |
|||
@ -0,0 +1,60 @@ |
|||
#!/usr/bin/env bash |
|||
|
|||
# CONSTANTS |
|||
|
|||
BASEDIR=$(dirname "$0") |
|||
CONTAINER='' |
|||
SCRIPT='' |
|||
DEBUG=false |
|||
FORCE=${FORCE:-false} |
|||
|
|||
# FUNCTIONS |
|||
|
|||
function usage { |
|||
echo "$(basename "$0") {CONTAINER_NAME} {PATH_TO_SCRIPT} [[--debug|-d]]" |
|||
} |
|||
|
|||
function parse_options { |
|||
while [[ $# -gt 0 ]]; do |
|||
case "$1" in |
|||
--help | -h) |
|||
usage && exit 0 |
|||
;; |
|||
--debug | -d) |
|||
DEBUG=true |
|||
;; |
|||
*) |
|||
if [[ -z $CONTAINER ]]; then |
|||
CONTAINER=$1 |
|||
elif [[ -z $SCRIPT ]]; then |
|||
SCRIPT=$1 |
|||
else |
|||
echo >&2 "Unknown option: $1" && usage && exit 2 |
|||
fi |
|||
;; |
|||
esac |
|||
|
|||
shift 1 # Move to the next argument |
|||
done |
|||
[[ -n $CONTAINER ]] && [[ -n $SCRIPT ]] || (usage && exit 1) |
|||
} |
|||
|
|||
function debug_option { |
|||
[[ $DEBUG == 'true' ]] && echo "-x" || true |
|||
} |
|||
|
|||
function recipe { |
|||
[[ ! -f $SCRIPT ]] && echo >&2 "Script not found: $SCRIPT" && exit 3 |
|||
|
|||
# hot changes |
|||
cat "$SCRIPT" | pct exec "$vmid" -- env FORCE="$FORCE" bash $(debug_option) |
|||
|
|||
} |
|||
|
|||
# MAIN |
|||
|
|||
set -Eue |
|||
parse_options $* |
|||
vmid=$($BASEDIR/../bin/pct-lookup "$CONTAINER") |
|||
recipe |
|||
echo "Recipe <$(basename "$SCRIPT")> successfully performed on container <$CONTAINER>" |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue