I haven't tested it yet
This commit is contained in:
parent
d8a5cd5361
commit
ca6d28c918
1 changed files with 54 additions and 38 deletions
|
@ -1,5 +1,11 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
VERSION=0.1
|
||||||
|
CONFIG_DIR=/rodeo/configuration
|
||||||
|
OVERLAY_DIRECTORY=/rodeo/overlays
|
||||||
|
DEFAULT_OVERLAY_FILE=$CONFIG_DIR/included_overlays
|
||||||
|
MANAGED_DIRECTORIES_FILE=$CONFIG_DIR/managed_directories
|
||||||
|
|
||||||
fatal() {
|
fatal() {
|
||||||
echo "Error: $1"
|
echo "Error: $1"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -21,79 +27,89 @@ warning() {
|
||||||
echo "Warning: $1"
|
echo "Warning: $1"
|
||||||
}
|
}
|
||||||
|
|
||||||
remount () {
|
beginswith() { case $2 in "$1"*) true;; *) false;; esac; }
|
||||||
overlay_config=/rodeo/configuration/included_overlays
|
|
||||||
[ -n "$1" ] && overlay_config="$1"
|
endswith() { case $2 in *"$1") true;; *) false;; esac; }
|
||||||
while IFS="" read -r dir || [ -n "$dir" ]
|
|
||||||
do
|
stripped() {
|
||||||
debug "Scanning for overlays to be mounted on /$dir"
|
string="$1"
|
||||||
lowerdirs=""
|
string2=${string#"("}
|
||||||
|
string2=${string2%")"}
|
||||||
|
echo string2
|
||||||
|
}
|
||||||
|
|
||||||
|
get_lower_dirs() {
|
||||||
|
overlay_config="$1"
|
||||||
|
dir="$2"
|
||||||
while IFS="" read -r overlay || [ -n "$overlay" ]
|
while IFS="" read -r overlay || [ -n "$overlay" ]
|
||||||
do
|
do
|
||||||
|
if beginswith "(" "$overlay" && endswith ")" "$overlay" && [ -f "$(stripped "$overlay")" ]; then
|
||||||
|
get_lower_dirs "$(stripped "$overlay")" "$dir"
|
||||||
|
else
|
||||||
debug "Checking if $overlay has $dir"
|
debug "Checking if $overlay has $dir"
|
||||||
if [ -d "/rodeo/overlays/$overlay/$dir" ]; then
|
cd $OVERLAY_DIRECTORY || fatal "Failed to change directory"
|
||||||
|
overlay_path="$(realpath "$overlay")"
|
||||||
|
if [ -d "$overlay_path/$dir" ]; then
|
||||||
debug "$overlay has $dir"
|
debug "$overlay has $dir"
|
||||||
if [ -z "$lowerdirs" ]; then
|
if [ -z "$lowerdirs" ]; then
|
||||||
lowerdirs="/rodeo/overlays/$overlay/$dir"
|
lowerdirs="$overlay_path/$dir"
|
||||||
else
|
else
|
||||||
lowerdirs="$lowerdirs:/rodeo/overlays/$overlay/$dir"
|
lowerdirs="$lowerdirs:$overlay_path/$dir"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
debug "$overlay does not have $dir"
|
debug "$overlay does not have $dir"
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
done < "$overlay_config"
|
done < "$overlay_config"
|
||||||
|
}
|
||||||
|
|
||||||
|
remount() {
|
||||||
|
overlay_config=$DEFAULT_OVERLAY_FILE
|
||||||
|
[ -n "$1" ] && overlay_config="$1"
|
||||||
|
while IFS="" read -r dir || [ -n "$dir" ]
|
||||||
|
do
|
||||||
|
debug "Scanning for overlays to be mounted on /$dir"
|
||||||
|
get_lower_dirs "$overlay_config" "$dir"
|
||||||
umount "/$dir" || error "Unmounting of /$dir failed"
|
umount "/$dir" || error "Unmounting of /$dir failed"
|
||||||
if [ -z "$lowerdirs" ]; then
|
if [ -z "$lowerdirs" ]; then
|
||||||
warning "No overlay has $dir"
|
warning "No overlay has $dir"
|
||||||
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
||||||
else
|
else
|
||||||
|
debug "Overlays to be mounted on /$dir: $lowerdirs"
|
||||||
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
||||||
fi
|
fi
|
||||||
done < /rodeo/configuration/managed_directories
|
done < $MANAGED_DIRECTORIES_FILE
|
||||||
}
|
}
|
||||||
|
|
||||||
initial_mount() {
|
initial_mount() {
|
||||||
overlay_config=/rodeo/configuration/included_overlays
|
overlay_config=$DEFAULT_OVERLAY_FILE
|
||||||
[ -n "$1" ] && overlay_config="$1"
|
[ -n "$1" ] && overlay_config="$1"
|
||||||
while IFS="" read -r dir || [ -n "$dir" ]
|
while IFS="" read -r dir || [ -n "$dir" ]
|
||||||
do
|
do
|
||||||
debug "Scanning for overlays to be mounted on /$dir"
|
debug "Scanning for overlays to be mounted on /$dir"
|
||||||
lowerdirs=""
|
get_lower_dirs "$overlay_config" "$dir"
|
||||||
while IFS="" read -r overlay || [ -n "$overlay" ]
|
|
||||||
do
|
|
||||||
debug "Checking if $overlay has $dir"
|
|
||||||
if [ -d "/rodeo/overlays/$overlay/$dir" ]; then
|
|
||||||
debug "$overlay has $dir"
|
|
||||||
if [ -z "$lowerdirs" ]; then
|
|
||||||
lowerdirs="/rodeo/overlays/$overlay/$dir"
|
|
||||||
else
|
|
||||||
lowerdirs="$lowerdirs:/rodeo/overlays/$overlay/$dir"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
debug "$overlay does not have $dir"
|
|
||||||
fi
|
|
||||||
done < "$overlay_config"
|
|
||||||
if [ -z "$lowerdirs" ]; then
|
if [ -z "$lowerdirs" ]; then
|
||||||
warning "No overlay has $dir"
|
warning "No overlay has $dir"
|
||||||
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
||||||
else
|
else
|
||||||
|
debug "Overlays to be mounted on /$dir: $lowerdirs"
|
||||||
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
||||||
fi
|
fi
|
||||||
done < /rodeo/configuration/managed_directories
|
done < $MANAGED_DIRECTORIES_FILE
|
||||||
}
|
}
|
||||||
|
|
||||||
transfer_directory() {
|
transfer_directory() {
|
||||||
dir="$1"
|
dir="$1"
|
||||||
mv "/$dir" "/rodeo/root/$dir"
|
mv "/$dir" "/rodeo/root/$dir"
|
||||||
mkdir -p "/$dir" "/rodeo/tmp/$dir"
|
mkdir -p "/$dir" "/rodeo/tmp/$dir"
|
||||||
echo "$dir" >> /rodeo/configuration/managed_directories
|
echo "$dir" >> $MANAGED_DIRECTORIES_FILE
|
||||||
info "Added $dir to the list of managed directories"
|
info "Added $dir to the list of managed directories"
|
||||||
initial_mount
|
initial_mount
|
||||||
}
|
}
|
||||||
|
|
||||||
shell() {
|
shell() {
|
||||||
target="$1"
|
target="$1"
|
||||||
overlay_file=/rodeo/configuration/included_overlays
|
overlay_file=$DEFAULT_OVERLAY_FILE
|
||||||
command="/bin/sh"
|
command="/bin/sh"
|
||||||
[ -n "$2" ] && overlay_file="$2"
|
[ -n "$2" ] && overlay_file="$2"
|
||||||
[ -n "$3" ] && command="$3"
|
[ -n "$3" ] && command="$3"
|
||||||
|
|
Loading…
Add table
Reference in a new issue