73 lines
1.9 KiB
Bash
Executable File
73 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Gracefully update package lists if network is available
|
|
echo "Checking network connectivity..."
|
|
if ping -c 1 -W 5 8.8.8.8 >/dev/null 2>&1 || ping -c 1 -W 5 1.1.1.1 >/dev/null 2>&1; then
|
|
echo "Network detected, refreshing package lists..."
|
|
if sudo apt update; then
|
|
echo "Package lists updated successfully"
|
|
else
|
|
echo "Warning: apt update failed despite network connectivity"
|
|
echo "Falling back to cached package lists"
|
|
fi
|
|
else
|
|
echo "No network connectivity detected, using cached package lists"
|
|
fi
|
|
|
|
# Global variable to track background processes
|
|
TAIL_PID=""
|
|
|
|
term_handler() {
|
|
echo "Received termination signal, cleaning up..."
|
|
|
|
# Kill the tail process if it's running
|
|
if [[ -n "$TAIL_PID" ]]; then
|
|
kill "$TAIL_PID" 2>/dev/null
|
|
fi
|
|
|
|
# Run user-defined exit commands
|
|
eval "$COMMAND_EXIT"
|
|
|
|
echo "Cleanup completed, exiting..."
|
|
exit 0
|
|
}
|
|
|
|
# Setup signal handlers for graceful shutdown
|
|
trap 'term_handler' SIGTERM SIGINT
|
|
|
|
# setup home directory for the current user. It is useful for attaching vscode with container.
|
|
user_name=$(whoami)
|
|
user_home="/home/$user_name"
|
|
sudo mkdir -p "$user_home"
|
|
sudo chown -R "$(id -u):$(id -g)" "$user_home"
|
|
cp -r /etc/skel/. "$user_home" 2>/dev/null || true
|
|
|
|
if [[ $LOG_FILE != "/dev/null" ]]; then
|
|
sudo touch "$LOG_FILE"
|
|
sudo chown -R "$(id -u):$(id -g)" "$LOG_FILE"
|
|
fi
|
|
|
|
echo "Starting SSH service..."
|
|
sudo service ssh start
|
|
|
|
# Run initialization commands
|
|
eval "$COMMAND_INIT"
|
|
|
|
# Start the main process loop
|
|
if [[ $LOG_FILE == "/dev/null" ]]; then
|
|
# If no log file, just wait for signals
|
|
echo "Container ready, waiting for signals..."
|
|
while true; do
|
|
sleep 1 &
|
|
wait $!
|
|
done
|
|
else
|
|
# If log file specified, tail it
|
|
echo "Container ready, tailing log file: $LOG_FILE"
|
|
tail -f "$LOG_FILE" &
|
|
TAIL_PID=$!
|
|
|
|
# Wait for the tail process or signals
|
|
wait $TAIL_PID
|
|
fi
|