Initial commit
This commit is contained in:
commit
6761fbaaf8
6 changed files with 147 additions and 0 deletions
3
.idea/.gitignore
generated
vendored
Normal file
3
.idea/.gitignore
generated
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
generated
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<settings>
|
||||||
|
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||||
|
<version value="1.0" />
|
||||||
|
</settings>
|
||||||
|
</component>
|
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.12 (spotify_replacer)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (spotify_replacer)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/rodeo-overlay.iml" filepath="$PROJECT_DIR$/.idea/rodeo-overlay.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/rodeo-overlay.iml
generated
Normal file
8
.idea/rodeo-overlay.iml
generated
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="jdk" jdkName="Python 3.12 (spotify_replacer)" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
115
rodeo-overlay.sh
Normal file
115
rodeo-overlay.sh
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
fatal() {
|
||||||
|
echo "Error: $1"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
error () {
|
||||||
|
echo "Error: $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
info() {
|
||||||
|
echo "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
debug() {
|
||||||
|
[ "$RODEO_DEBUG" = "1" ] && info "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
warning() {
|
||||||
|
echo "Warning: $1"
|
||||||
|
}
|
||||||
|
|
||||||
|
remount () {
|
||||||
|
overlay_config=/rodeo/configuration/included_overlays
|
||||||
|
[ -n "$1" ] && overlay_config="$1"
|
||||||
|
while IFS="" read -r dir || [ -n "$dir" ]
|
||||||
|
do
|
||||||
|
debug "Scanning for overlays to be mounted on /$dir"
|
||||||
|
lowerdirs=""
|
||||||
|
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"
|
||||||
|
umount "/$dir" || error "Unmounting of /$dir failed"
|
||||||
|
if [ -z "$lowerdirs" ]; then
|
||||||
|
warning "No overlay has $dir"
|
||||||
|
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
||||||
|
else
|
||||||
|
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
||||||
|
fi
|
||||||
|
done < /rodeo/configuration/managed_directories
|
||||||
|
}
|
||||||
|
|
||||||
|
initial_mount () {
|
||||||
|
overlay_config=/rodeo/configuration/included_overlays
|
||||||
|
[ -n "$1" ] && overlay_config="$1"
|
||||||
|
while IFS="" read -r dir || [ -n "$dir" ]
|
||||||
|
do
|
||||||
|
debug "Scanning for overlays to be mounted on /$dir"
|
||||||
|
lowerdirs=""
|
||||||
|
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
|
||||||
|
warning "No overlay has $dir"
|
||||||
|
mount --bind "/rodeo/root/$dir" "/$dir" || error "Bind-Mounting /$dir failed"
|
||||||
|
else
|
||||||
|
mount -t overlay overlay -o lowerdir="$lowerdirs",upperdir="/rodeo/root/$dir",workdir="/rodeo/tmp/$dir" "/$dir" || error "Overlay-Mounting /$dir failed"
|
||||||
|
fi
|
||||||
|
done < /rodeo/configuration/managed_directories
|
||||||
|
}
|
||||||
|
|
||||||
|
transfer_directory() {
|
||||||
|
dir="$1"
|
||||||
|
cp -r "/$dir" "/rodeo/root/$dir"
|
||||||
|
mkdir "/$dir" "/rodeo/tmp/$dir"
|
||||||
|
echo "$dir" >> /rodeo/configuration/managed_directories
|
||||||
|
info "Added $dir to the list of managed directories"
|
||||||
|
initial_mount
|
||||||
|
}
|
||||||
|
|
||||||
|
shell() {
|
||||||
|
target="$1"
|
||||||
|
overlay_file=/rodeo/configuration/included_overlays
|
||||||
|
command="/bin/sh"
|
||||||
|
[ -n "$2" ] && overlay_file="$2"
|
||||||
|
[ -n "$3" ] && command="$3"
|
||||||
|
[ ! -d "$target" ] && mkdir -p "$target"
|
||||||
|
info "Mounting Base Filesystems"
|
||||||
|
mount --bind / "$target"
|
||||||
|
mount --bind /dev "$target/dev"
|
||||||
|
mount --bind /sys "$target/sys"
|
||||||
|
mount --bind /proc "$target/proc"
|
||||||
|
info "Mounting Overlays"
|
||||||
|
chroot "$target" /sbin/rodeo-overlay.sh initial-mount "$overlay_file"
|
||||||
|
info "Executing $command"
|
||||||
|
chroot "$target" "$command"
|
||||||
|
}
|
||||||
|
|
||||||
|
[ "$1" = "transfer-directory" ] && transfer_directory "$2"
|
||||||
|
[ "$1" = "remount" ] && remount "$2"
|
||||||
|
[ "$1" = "initial-mount" ] && initial_mount "$2"
|
||||||
|
[ "$1" = "shell" ] && shell "$2" "$3" "$4"
|
Loading…
Add table
Reference in a new issue