|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -euo pipefail |
| 4 | + |
| 5 | +sudo_if() { |
| 6 | + COMMAND="$*" |
| 7 | + |
| 8 | + if [ "$(id -u)" -ne 0 ]; then |
| 9 | + sudo $COMMAND |
| 10 | + else |
| 11 | + $COMMAND |
| 12 | + fi |
| 13 | +} |
| 14 | + |
| 15 | +PERSIST_DIR="/mnt/persistence_data" |
| 16 | +PERSIST_POST_CREATE="/usr/local/share/persistence_post_create" |
| 17 | + |
| 18 | +tee "$PERSIST_POST_CREATE" > /dev/null \ |
| 19 | +<< EOF |
| 20 | +#!/bin/sh |
| 21 | +set -e |
| 22 | +
|
| 23 | +SUDO_CMD="" |
| 24 | +[ "\${USER}" != "root" ] && SUDO_CMD="sudo" |
| 25 | +
|
| 26 | +echo "Setting owner for ${PERSIST_DIR} to \${USER}" |
| 27 | +\${SUDO_CMD} chown -R \$USER "${PERSIST_DIR}" |
| 28 | +
|
| 29 | +EOF |
| 30 | + |
| 31 | +chmod +x "${PERSIST_POST_CREATE}" |
| 32 | + |
| 33 | +IFS=':' read -ra PATH_ARRAY <<< "${PATHS}" |
| 34 | +for path in "${PATH_ARRAY[@]}"; do |
| 35 | + [[ -z "${path}" ]] && continue |
| 36 | + |
| 37 | + # Replace ~ or $HOME with $_REMOTE_USER_HOME |
| 38 | + path="${path/#\~/${_REMOTE_USER_HOME}}" |
| 39 | + path="${path/#\$HOME/${_REMOTE_USER_HOME}}" |
| 40 | + |
| 41 | + # Build safe persist_path |
| 42 | + original_path=$(realpath -m "${path}") |
| 43 | + safe_name="${original_path//\//_}" |
| 44 | + persist_path="${PERSIST_DIR}/${safe_name#_}" |
| 45 | + |
| 46 | + # Create target directory |
| 47 | + sudo_if sudo mkdir -p "${persist_path}" |
| 48 | + |
| 49 | + # Create parent directory if needed |
| 50 | + parent_dir="$(dirname "${original_path}")" |
| 51 | + mkdir -p "${parent_dir}" |
| 52 | + |
| 53 | + |
| 54 | + # Backup and remove existing directory if it exists |
| 55 | + if [[ -d "${original_path}" ]]; then |
| 56 | + mv "${original_path}" "${original_path}.backup" |
| 57 | + fi |
| 58 | + |
| 59 | + ln -s "${persist_path}" "${original_path}" |
| 60 | +w |
| 61 | + echo "\${SUDO_CMD} chown -R \$USER \"${parent_dir}\"" >> "${PERSIST_POST_CREATE}" |
| 62 | +done |
| 63 | + |
0 commit comments