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