-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtomb.sh
executable file
·121 lines (99 loc) · 3.27 KB
/
tomb.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/bin/bash
set -e
function log_info(){
local msg=$1
printf "INFO: ${msg}\n"
}
function log_error(){
local msg=$1
printf "ERROR: ${msg}\n"
}
# Check & Validate Required ENV VARS
##
# TOMB_DOCKER_IMAGE
if [ -z "$TOMB_DOCKER_IMAGE" ]; then
log_error "ENV VAR: TOMB_DOCKER_IMAGE is required!"
exit 1
fi
if [ -z "$(docker images -q $TOMB_DOCKER_IMAGE)" ]; then
log_error "TOMB_DOCKER_IMAGE not found: $TOMB_DOCKER_IMAGE"
exit 1
fi
##
# TOMB_VOLUME
if [ -z "$TOMB_VOLUME" ]; then
log_error "ENV VAR: TOMB_VOLUME is required!"
exit 1
fi
if [ ! -f "$TOMB_VOLUME" ]; then
log_error "TOMB_VOLUME not found: $TOMB_VOLUME"
exit 1
fi
##
# TOMB_VOLUME_KEY
if [ -z "$TOMB_VOLUME_KEY" ]; then
log_error "ENV VAR: TOMB_VOLUME_KEY is required!"
exit 1
fi
if [ ! -f "$TOMB_VOLUME_KEY" ]; then
log_error "TOMB_VOLUME_KEY not found: $TOMB_VOLUME_KEY"
exit 1
fi
##
# TOMB_OUTPUT_DIR
if [ -z "$TOMB_OUTPUT_DIR" ]; then
log_error "ENV VAR: TOMB_OUTPUT_DIR is required!"
exit 1
fi
if [ ! -d "$TOMB_OUTPUT_DIR" ]; then
log_error "TOMB_OUTPUT_DIR not found: $TOMB_OUTPUT_DIR"
exit 1
fi
# Internal Vars
I_TOMB_VOLUME=/tomb/volume
I_TOMB_VOLUME_KEY=/tomb/volume_key
I_TOMB_OUTPUT_DIR=/tomb/output_dir # Important: This must NOT end in a slash!
I_TOMB_MOUNT_DIR=/tomb/mount_dir # Important: This must NOT end in a slash!
# Parse command
cmd=$1
if [ -z "$cmd" ]; then
log_error "A valid command is required! (eg: unpack, repack)"
exit 1
fi
# Parse flags (right now there is only one possible flag so I'm being lazy about parsing it)
flags=$2
force_opt=""
if [ "$flags" = "-f" ]; then
force_opt=$flags
fi
if [ $cmd = unpack ]; then
if [ ! -z "$(ls -A $TOMB_OUTPUT_DIR)" ]; then
log_error "Cannot unpack: TOMB_OUTPUT_DIR is not empty! $TOMB_OUTPUT_DIR"
exit 1
fi
docker run -it --rm --privileged \
--mount type=bind,source=${TOMB_VOLUME},target=${I_TOMB_VOLUME} \
--mount type=bind,source=${TOMB_VOLUME_KEY},target=${I_TOMB_VOLUME_KEY} \
--mount type=bind,source=${TOMB_OUTPUT_DIR},target=${I_TOMB_OUTPUT_DIR} \
tomb /bin/bash -c "set -e; tomb open ${I_TOMB_VOLUME} ${I_TOMB_MOUNT_DIR} -k ${I_TOMB_VOLUME_KEY} ${force_opt}; rsync -azh --delete ${I_TOMB_MOUNT_DIR}/ ${I_TOMB_OUTPUT_DIR}; tomb close"
elif [ $cmd = repack ]; then
if [ -z "$(ls -A $TOMB_OUTPUT_DIR)" ]; then
log_error "Cannot repack: TOMB_OUTPUT_DIR is empty! $TOMB_OUTPUT_DIR"
exit 1
fi
docker run -it --rm --privileged \
--mount type=bind,source=${TOMB_VOLUME},target=${I_TOMB_VOLUME} \
--mount type=bind,source=${TOMB_VOLUME_KEY},target=${I_TOMB_VOLUME_KEY} \
--mount type=bind,source=${TOMB_OUTPUT_DIR},target=${I_TOMB_OUTPUT_DIR} \
tomb /bin/bash -c "set -e; tomb open ${I_TOMB_VOLUME} ${I_TOMB_MOUNT_DIR} -k ${I_TOMB_VOLUME_KEY} ${force_opt}; rsync -azh --delete ${I_TOMB_OUTPUT_DIR}/ ${I_TOMB_MOUNT_DIR}; tomb close; rm -rf ${I_TOMB_OUTPUT_DIR}/..?* ${I_TOMB_OUTPUT_DIR}/* ${I_TOMB_OUTPUT_DIR}/.[!.]*"
elif [ $cmd = drop ]; then
if [ -z "$(ls -A $TOMB_OUTPUT_DIR)" ]; then
log_error "Cannot drop: TOMB_OUTPUT_DIR is empty! $TOMB_OUTPUT_DIR"
exit 1
fi
docker run -it --rm --privileged \
--mount type=bind,source=${TOMB_OUTPUT_DIR},target=${I_TOMB_OUTPUT_DIR} \
tomb /bin/bash -c "set -e; rm -rf ${I_TOMB_OUTPUT_DIR}/..?* ${I_TOMB_OUTPUT_DIR}/* ${I_TOMB_OUTPUT_DIR}/.[!.]*"
else
log_error "Invalid command: $cmd"
fi