110 lines
3.2 KiB
Bash
Executable File
110 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Function to check for required dependencies
|
|
check_dependencies() {
|
|
echo "Checking for required dependencies..."
|
|
|
|
# Check if Python is installed
|
|
if ! command -v python3 &> /dev/null; then
|
|
echo "Python3 is not installed. Please install it and try again."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if venv is installed
|
|
if ! python3 -m venv --help &> /dev/null; then
|
|
echo "Python venv is not installed. Please install it and try again."
|
|
exit 1
|
|
fi
|
|
|
|
echo "All dependencies are satisfied."
|
|
}
|
|
|
|
# Function to choose installation type
|
|
choose_install_type() {
|
|
echo "Do you want to install the program locally or system-wide?"
|
|
echo "0) Cancel"
|
|
echo "1) Locally (current user)"
|
|
echo "2) System-wide (requires sudo)"
|
|
read -p "Choose an option [0/1/2]: " install_option
|
|
|
|
# Check if the input is valid
|
|
if [[ -z "$install_option" || ! "$install_option" =~ ^[012]$ ]]; then
|
|
echo "Invalid option. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
# If the user chooses to cancel
|
|
if [ "$install_option" -eq 0 ]; then
|
|
echo "Installation canceled."
|
|
exit 0
|
|
fi
|
|
|
|
return $install_option
|
|
}
|
|
|
|
# Function for local installation
|
|
local_install() {
|
|
echo "Starting local installation..."
|
|
VENV_DIR="$DIR/../venv"
|
|
SRC_FILE="$DIR/../src/camera-command.py"
|
|
|
|
# Check if the virtual environment exists, if not, create it
|
|
if [ ! -d "$VENV_DIR" ]; then
|
|
echo "Creating virtual environment..."
|
|
python3 -m venv "$VENV_DIR"
|
|
fi
|
|
|
|
# Install the required packages
|
|
echo "Installing dependencies..."
|
|
"$VENV_DIR/bin/pip" install -r "$DIR/requirements.txt"
|
|
|
|
# Make the wrapper script executable
|
|
chmod +x "$DIR/camera-command.sh"
|
|
|
|
echo "Local install complete. Manually run the startup script using ./camera-command.sh"
|
|
}
|
|
|
|
# Function for system-wide installation
|
|
system_wide_install() {
|
|
echo "Starting system-wide installation..."
|
|
VENV_DIR="/lib/python-venvs/camera-op-env"
|
|
SRC_DIR="/usr/local/share/camera-op/src"
|
|
|
|
# Create a directory for system-wide Python virtual environments if it doesn't exist
|
|
if [ ! -d "/lib/python-venvs" ]; then
|
|
sudo mkdir -p /lib/python-venvs
|
|
sudo chmod 755 /lib/python-venvs
|
|
fi
|
|
|
|
# Check if the virtual environment exists, if not, create it
|
|
if [ ! -d "$VENV_DIR" ]; then
|
|
echo "Creating system-wide virtual environment..."
|
|
sudo python3 -m venv "$VENV_DIR"
|
|
fi
|
|
|
|
# Install the required packages
|
|
echo "Installing dependencies system-wide..."
|
|
sudo "$VENV_DIR/bin/pip" install -r "$DIR/requirements.txt"
|
|
|
|
# Create the necessary directories and copy the source code
|
|
sudo mkdir -p "$SRC_DIR"
|
|
sudo cp "$DIR/../src/"* "$SRC_DIR/"
|
|
|
|
sudo cp "$DIR/camera-command.sh" "/usr/local/bin/camera-op"
|
|
sudo chmod +x "/usr/local/bin/camera-op"
|
|
|
|
echo "Global install complete. Run 'camera-op' from /usr/local/bin or in the shell."
|
|
}
|
|
|
|
# Main installation logic
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
check_dependencies
|
|
choose_install_type
|
|
install_option=$?
|
|
|
|
if [ "$install_option" -eq 1 ]; then
|
|
local_install
|
|
elif [ "$install_option" -eq 2 ]; then
|
|
system_wide_install
|
|
fi
|