Update readme, added install and uninstall scripts

This commit is contained in:
Uthman Fatih 2025-11-07 19:56:45 +00:00
parent 7ea3b264d1
commit 81188a5091
3 changed files with 450 additions and 17 deletions

View File

@ -112,24 +112,19 @@ sudo bash install.sh
rm install.sh rm install.sh
``` ```
You can now run Vigil using the following command: You can also uninstall Vigil using the following command:
```bash ```bash
vigil curl -sSL https://git.uthmn.com/ufatih/vigil/raw/main/uninstall.sh | sudo bash
``` ```
### Using pipx You can also review the script before executing it:
If you prefer to use pipx, you can install Vigil using the following command:
```bash ```bash
pipx install vigil curl -sSL https://git.uthmn.com/ufatih/vigil/raw/main/uninstall.sh -o uninstall.sh
``` less uninstall.sh
sudo bash uninstall.sh
You can now run Vigil using the following command: rm uninstall.sh
```bash
vigil
``` ```
### Using docker ### Using docker
@ -240,10 +235,10 @@ If you installed Vigil using the install script, it can optionally create a syst
You can manually control the service as follows: You can manually control the service as follows:
```bash ```bash
sudo systemctl start vigil sudo systemctl start vigil # Start vigil
sudo systemctl stop vigil sudo systemctl stop vigil # Stop vigil
sudo systemctl enable vigil sudo systemctl enable vigil # Enable vigil to start at boot
sudo systemctl status vigil sudo systemctl status vigil # Check the status of vigil
``` ```
This ensures Vigil runs continuously and automatically checks for updates at your configured interval. This ensures Vigil runs continuously and automatically checks for updates at your configured interval.

362
install.sh Normal file
View File

@ -0,0 +1,362 @@
#!/bin/bash
# First check if we are running as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Get the actual user (not root) for later use
ACTUAL_USER=${SUDO_USER:-$USER}
USER_HOME=$(eval echo ~$ACTUAL_USER)
# Now check if we already have vigil installed
if [[ -d "/opt/vigil" ]]; then
echo "Vigil is already installed."
echo "Would you like to upgrade? This will preserve your .env and users.json files. (y/n)"
read -r answer
if [[ "${answer,,}" == "y" ]]; then
echo "Backing up configuration files..."
# Create temporary backup directory
BACKUP_DIR="/tmp/vigil_backup_$(date +%s)"
mkdir -p "$BACKUP_DIR"
# Backup .env and users.json if they exist
if [[ -f "/opt/vigil/.env" ]]; then
cp /opt/vigil/.env "$BACKUP_DIR/.env"
echo "Backed up .env"
fi
if [[ -f "/opt/vigil/users.json" ]]; then
cp /opt/vigil/users.json "$BACKUP_DIR/users.json"
echo "Backed up users.json"
fi
# Stop the service if it's running
if systemctl is-active --quiet vigil.service; then
echo "Stopping vigil service..."
systemctl stop vigil.service
fi
# Remove the old installation
echo "Removing old installation..."
rm -rf /opt/vigil
echo "Upgrade preparation complete. Proceeding with fresh installation..."
echo ""
# Set flag to restore config later
UPGRADE_MODE=true
else
echo "Installation cancelled. Please remove /opt/vigil manually if you want a fresh install."
exit 1
fi
fi
# Now check if we are running on a supported system
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
echo "This script is only supported on Linux" 1>&2
exit 1
fi
# Check if we have apt installed
if ! command -v apt &> /dev/null; then
echo "Apt is not installed. Please install it before running this script." 1>&2
exit 1
fi
# Now check if we have git and python3 installed, if not offer to install them
if ! command -v git &> /dev/null; then
echo "Git is not installed. Do you want to install it now? (y/n)"
read -r answer
if [[ "${answer,,}" == "y" ]]; then
apt install git -y
else
echo "Please install git before running this script." 1>&2
exit 1
fi
fi
if ! command -v python3 &> /dev/null; then
echo "Python 3 is not installed. Do you want to install it now? (y/n)"
read -r answer
if [[ "${answer,,}" == "y" ]]; then
apt install python3 -y
else
echo "Please install Python 3 before running this script." 1>&2
exit 1
fi
fi
# Now check if we have python3 -m pip installed, if not offer to install it
if ! python3 -m pip --version &> /dev/null; then
echo "pip is not installed. Do you want to install it now? (y/n)"
read -r answer
if [[ "${answer,,}" == "y" ]]; then
apt install python3-pip python3-venv -y
else
echo "Please install pip before running this script." 1>&2
exit 1
fi
fi
# Now git clone the repository to /opt/vigil
echo ""
echo "Cloning Vigil repository..."
git clone https://git.uthmn.com/ufatih/vigil.git /opt/vigil
# Now create a virtual environment and install the required packages
echo ""
echo "Setting up virtual environment and installing dependencies..."
python3 -m venv /opt/vigil/.venv
source /opt/vigil/.venv/bin/activate
pip install -r /opt/vigil/requirements.txt
deactivate
# Now create a .env file and request the user to fill in the required values
echo ""
echo "=== Email Configuration ==="
echo ""
# Check if we're in upgrade mode and have a backup
if [[ "$UPGRADE_MODE" == true ]] && [[ -f "$BACKUP_DIR/.env" ]]; then
echo "Found existing .env configuration. Would you like to:"
echo "1) Keep existing configuration"
echo "2) Enter new configuration"
read -r config_choice
if [[ "$config_choice" == "1" ]]; then
cp "$BACKUP_DIR/.env" /opt/vigil/.env
echo "Restored existing .env configuration"
chmod 600 /opt/vigil/.env
# Skip to connection testing
SKIP_ENV_INPUT=true
fi
fi
if [[ "$SKIP_ENV_INPUT" != true ]]; then
touch /opt/vigil/.env
# SMTP settings
echo "Please enter SMTP server address:"
read -r SMTP_SERVER
echo "Please enter SMTP port (default: 587 for TLS, 465 for SSL):"
read -r SMTP_PORT
echo "Please enter SMTP username:"
read -r SMTP_USERNAME
echo "Please enter SMTP password:"
read -rs SMTP_PASSWORD
echo ""
# IMAP settings
echo "Please enter IMAP server address:"
read -r IMAP_SERVER
echo "Please enter IMAP port (default: 993 for SSL):"
read -r IMAP_PORT
echo "Please enter IMAP username:"
read -r IMAP_USERNAME
echo "Please enter IMAP password:"
read -rs IMAP_PASSWORD
echo ""
# Write to .env file
cat > /opt/vigil/.env << EOF
SMTP_SERVER=$SMTP_SERVER
SMTP_PORT=$SMTP_PORT
SMTP_USERNAME=$SMTP_USERNAME
SMTP_PASSWORD=$SMTP_PASSWORD
IMAP_SERVER=$IMAP_SERVER
IMAP_PORT=$IMAP_PORT
IMAP_USERNAME=$IMAP_USERNAME
IMAP_PASSWORD=$IMAP_PASSWORD
EOF
echo "Configuration saved to /opt/vigil/.env"
# Set secure permissions on .env file (contains passwords)
chmod 600 /opt/vigil/.env
fi
# Test if the inputs work/are valid, else tell the user to fill in later and continue
if [[ "$SKIP_ENV_INPUT" != true ]]; then
echo ""
echo "Testing connections..."
# Check if required commands are available
if command -v nc >/dev/null 2>&1; then
# Test SMTP connection with netcat (timeout after 5 seconds)
echo "Testing SMTP connection to $SMTP_SERVER:$SMTP_PORT..."
if timeout 5 nc -zv "$SMTP_SERVER" "$SMTP_PORT" 2>&1 | grep -q succeeded; then
echo "[OK] SMTP connection successful"
SMTP_VALID=true
else
echo "[FAILED] SMTP connection failed - could not reach $SMTP_SERVER:$SMTP_PORT"
SMTP_VALID=false
fi
echo ""
# Test IMAP connection
echo "Testing IMAP connection to $IMAP_SERVER:$IMAP_PORT..."
if timeout 5 nc -zv "$IMAP_SERVER" "$IMAP_PORT" 2>&1 | grep -q succeeded; then
echo "[OK] IMAP connection successful"
IMAP_VALID=true
else
echo "[FAILED] IMAP connection failed - could not reach $IMAP_SERVER:$IMAP_PORT"
IMAP_VALID=false
fi
else
echo "[WARNING] Cannot test connections (nc not installed). Skipping validation."
SMTP_VALID=unknown
IMAP_VALID=unknown
fi
# Summary and continue
echo ""
if [ "$SMTP_VALID" = false ] || [ "$IMAP_VALID" = false ]; then
echo "[WARNING] Some connections failed."
echo "Configuration has been saved to /opt/vigil/.env"
echo "Please verify your settings and update the file manually if needed."
echo ""
read -p "Press Enter to continue..." -r
else
echo "[OK] All connections successful!"
echo "Configuration saved to /opt/vigil/.env"
fi
else
echo ""
echo "[OK] Using existing email configuration"
fi
# Now create a users.json file and request the user to fill in the required values (or leave empty to skip)
echo ""
echo "=== Notification Recipients ==="
echo ""
# Check if we're in upgrade mode and have a backup
if [[ "$UPGRADE_MODE" == true ]] && [[ -f "$BACKUP_DIR/users.json" ]]; then
echo "Found existing users.json configuration. Would you like to:"
echo "1) Keep existing recipients"
echo "2) Enter new recipients"
read -r users_choice
if [[ "$users_choice" == "1" ]]; then
cp "$BACKUP_DIR/users.json" /opt/vigil/users.json
echo "Restored existing notification recipients"
# Clean up backup directory
rm -rf "$BACKUP_DIR"
# Skip to next section
SKIP_USERS_INPUT=true
fi
fi
if [[ "$SKIP_USERS_INPUT" != true ]]; then
echo "Please enter the email addresses vigil will send notifications to (comma separated):"
echo "(Leave empty to skip)"
read -r EMAILS
# Strip whitespace and convert to JSON array
if [ -n "$EMAILS" ]; then
# Remove all whitespace, split by comma, and build JSON array
EMAILS_CLEAN=$(echo "$EMAILS" | tr -d '[:space:]')
# Convert to JSON array format
EMAILS_JSON="["
IFS=',' read -ra EMAIL_ARRAY <<< "$EMAILS_CLEAN"
for i in "${!EMAIL_ARRAY[@]}"; do
if [ $i -gt 0 ]; then
EMAILS_JSON="$EMAILS_JSON,"
fi
EMAILS_JSON="$EMAILS_JSON\"${EMAIL_ARRAY[$i]}\""
done
EMAILS_JSON="$EMAILS_JSON]"
echo "$EMAILS_JSON" > /opt/vigil/users.json
echo "Notification recipients saved to /opt/vigil/users.json"
else
echo "[]" > /opt/vigil/users.json
echo "No recipients configured. You can add them later in /opt/vigil/users.json"
fi
# Clean up backup directory if it exists
if [[ -n "$BACKUP_DIR" ]] && [[ -d "$BACKUP_DIR" ]]; then
rm -rf "$BACKUP_DIR" # Don't want to hit a steam
fi
fi
# Set ownership of vigil directory to actual user
chown -R "$ACTUAL_USER:$ACTUAL_USER" /opt/vigil
# Create the alias to the command
echo ""
echo "Adding 'vigil' command alias..."
ALIAS_LINE="alias vigil='source /opt/vigil/.venv/bin/activate && python3 /opt/vigil/main.py && deactivate'"
# Add to user's bashrc if not already present
if ! grep -q "alias vigil=" "$USER_HOME/.bashrc" 2>/dev/null; then
echo "$ALIAS_LINE" >> "$USER_HOME/.bashrc"
echo "Alias added to $USER_HOME/.bashrc"
else
echo "Alias already exists in $USER_HOME/.bashrc"
fi
# Suggest to add vigil to systemctl to autostart (after network is up)
echo ""
echo "Would you like to add vigil to autostart on boot? (y/n)"
read -r answer
if [[ "${answer,,}" == "y" ]]; then
# Create systemd service file
cat > /etc/systemd/system/vigil.service << EOF
[Unit]
Description=Vigil Monitoring Service
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=$ACTUAL_USER
WorkingDirectory=/opt/vigil
Environment="PATH=/opt/vigil/.venv/bin"
ExecStart=/opt/vigil/.venv/bin/python3 /opt/vigil/main.py
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd, enable and start the service
systemctl daemon-reload
systemctl enable vigil.service
systemctl start vigil.service
echo "[OK] Vigil service has been created and started"
echo "You can check its status with: systemctl status vigil"
else
echo "Skipping autostart configuration"
fi
echo ""
echo "========================================"
echo "Vigil has been installed successfully!"
echo "========================================"
echo ""
echo "To use vigil, run: source ~/.bashrc && vigil"
echo "Or simply open a new terminal and run: vigil"
echo ""
if [[ "${answer,,}" == "y" ]]; then
echo "Vigil is now running as a system service."
echo "Use 'systemctl status vigil' to check its status"
fi

76
uninstall.sh Normal file
View File

@ -0,0 +1,76 @@
#!/bin/bash
# TODO: Add uninstall to readme
# Just double check, check /opt/vigil exists, then remove it, also check+remove systemd service, remove aliases from bashrc and also dont offer but notify that dependencies not uninstalled
# Check if vigil is installed, if not then exit
if [[ ! -d "/opt/vigil" ]]; then
echo "Vigil is not installed. Exiting." 1>&2
exit 1
fi
# Check if we are running as root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Get the actual user (not root) for later use
ACTUAL_USER=${SUDO_USER:-$USER}
USER_HOME=$(eval echo ~$ACTUAL_USER)
# Now check if we are running on a supported system
if [[ "$OSTYPE" != "linux-gnu"* ]]; then
echo "This script is only supported on Linux" 1>&2
exit 1
fi
# Warning and countdown
echo "WARNING: This will remove /opt/vigil and any related data."
echo "Press Ctrl+C to cancel..."
echo ""
for i in 5 4 3 2 1; do
echo -n "$i..."
sleep 1
done
echo ""
echo ""
# Final confirmation
echo "Continue with uninstallation? (y/n)"
read -r answer
if [[ "${answer,,}" != "y" ]]; then
echo "Uninstallation cancelled."
exit 0
fi
# Now delete the vigil directory
echo ""
echo "Removing Vigil installation..."
rm -rf /opt/vigil
# Now delete the systemd service (if it exists)
if [[ -f /etc/systemd/system/vigil.service ]]; then
echo "Removing Vigil systemd service..."
systemctl stop vigil.service 2>/dev/null
systemctl disable vigil.service 2>/dev/null
rm /etc/systemd/system/vigil.service
systemctl daemon-reload
else
echo "No systemd service found (skipping)"
fi
# Now delete the aliases from bashrc
echo "Removing Vigil aliases from bashrc..."
if grep -q "alias vigil=" "$USER_HOME/.bashrc" 2>/dev/null; then
sed -i '/alias vigil=/d' "$USER_HOME/.bashrc"
echo "Aliases removed from $USER_HOME/.bashrc"
else
echo "No aliases found in bashrc"
fi
echo ""
echo "Dependencies not uninstalled. Please uninstall them manually if needed: python3, git, pip"
echo "Vigil has been uninstalled successfully."