Update installation and uninstallation scripts

This commit is contained in:
2025-12-21 14:00:31 +08:00
parent d2dc293722
commit 4a5dd76286
2 changed files with 291 additions and 143 deletions

View File

@@ -4,8 +4,6 @@
# This script sets up MyFSIO for production use on Linux systems. # This script sets up MyFSIO for production use on Linux systems.
# #
# Usage: # Usage:
# curl -fsSL https://example.com/install.sh | bash
# OR
# ./install.sh [OPTIONS] # ./install.sh [OPTIONS]
# #
# Options: # Options:
@@ -23,14 +21,6 @@
set -e set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Default values
INSTALL_DIR="/opt/myfsio" INSTALL_DIR="/opt/myfsio"
DATA_DIR="/var/lib/myfsio" DATA_DIR="/var/lib/myfsio"
LOG_DIR="/var/log/myfsio" LOG_DIR="/var/log/myfsio"
@@ -42,7 +32,6 @@ SKIP_SYSTEMD=false
BINARY_PATH="" BINARY_PATH=""
AUTO_YES=false AUTO_YES=false
# Parse arguments
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
--install-dir) --install-dir)
@@ -90,27 +79,30 @@ while [[ $# -gt 0 ]]; do
exit 0 exit 0
;; ;;
*) *)
echo -e "${RED}Unknown option: $1${NC}" echo "Unknown option: $1"
exit 1 exit 1
;; ;;
esac esac
done done
echo -e "${BLUE}" echo ""
echo "╔══════════════════════════════════════════════════════════╗" echo "============================================================"
echo " MyFSIO Installation " echo " MyFSIO Installation Script"
echo " S3-Compatible Object Storage" echo " S3-Compatible Object Storage"
echo "╚══════════════════════════════════════════════════════════╝" echo "============================================================"
echo -e "${NC}" echo ""
echo "Documentation: https://go.jzwsite.com/myfsio"
echo ""
# Check if running as root
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}Error: This script must be run as root (use sudo)${NC}" echo "Error: This script must be run as root (use sudo)"
exit 1 exit 1
fi fi
# Display configuration echo "------------------------------------------------------------"
echo -e "${YELLOW}Installation Configuration:${NC}" echo "STEP 1: Review Installation Configuration"
echo "------------------------------------------------------------"
echo ""
echo " Install directory: $INSTALL_DIR" echo " Install directory: $INSTALL_DIR"
echo " Data directory: $DATA_DIR" echo " Data directory: $DATA_DIR"
echo " Log directory: $LOG_DIR" echo " Log directory: $LOG_DIR"
@@ -125,9 +117,8 @@ if [[ -n "$BINARY_PATH" ]]; then
fi fi
echo "" echo ""
# Confirm installation
if [[ "$AUTO_YES" != true ]]; then if [[ "$AUTO_YES" != true ]]; then
read -p "Proceed with installation? [y/N] " -n 1 -r read -p "Do you want to proceed with these settings? [y/N] " -n 1 -r
echo echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Installation cancelled." echo "Installation cancelled."
@@ -136,48 +127,70 @@ if [[ "$AUTO_YES" != true ]]; then
fi fi
echo "" echo ""
echo -e "${GREEN}[1/7]${NC} Creating system user..." echo "------------------------------------------------------------"
echo "STEP 2: Creating System User"
echo "------------------------------------------------------------"
echo ""
if id "$SERVICE_USER" &>/dev/null; then if id "$SERVICE_USER" &>/dev/null; then
echo " User '$SERVICE_USER' already exists" echo " [OK] User '$SERVICE_USER' already exists"
else else
useradd --system --no-create-home --shell /usr/sbin/nologin "$SERVICE_USER" useradd --system --no-create-home --shell /usr/sbin/nologin "$SERVICE_USER"
echo " Created user '$SERVICE_USER'" echo " [OK] Created user '$SERVICE_USER'"
fi fi
echo -e "${GREEN}[2/7]${NC} Creating directories..." echo ""
echo "------------------------------------------------------------"
echo "STEP 3: Creating Directories"
echo "------------------------------------------------------------"
echo ""
mkdir -p "$INSTALL_DIR" mkdir -p "$INSTALL_DIR"
echo " [OK] Created $INSTALL_DIR"
mkdir -p "$DATA_DIR" mkdir -p "$DATA_DIR"
echo " [OK] Created $DATA_DIR"
mkdir -p "$LOG_DIR" mkdir -p "$LOG_DIR"
echo " Created $INSTALL_DIR" echo " [OK] Created $LOG_DIR"
echo " Created $DATA_DIR"
echo " Created $LOG_DIR"
echo -e "${GREEN}[3/7]${NC} Installing binary..." echo ""
echo "------------------------------------------------------------"
echo "STEP 4: Installing Binary"
echo "------------------------------------------------------------"
echo ""
if [[ -n "$BINARY_PATH" ]]; then if [[ -n "$BINARY_PATH" ]]; then
if [[ -f "$BINARY_PATH" ]]; then if [[ -f "$BINARY_PATH" ]]; then
cp "$BINARY_PATH" "$INSTALL_DIR/myfsio" cp "$BINARY_PATH" "$INSTALL_DIR/myfsio"
echo " Copied binary from $BINARY_PATH" echo " [OK] Copied binary from $BINARY_PATH"
else else
echo -e "${RED}Error: Binary not found at $BINARY_PATH${NC}" echo " [ERROR] Binary not found at $BINARY_PATH"
exit 1 exit 1
fi fi
elif [[ -f "./myfsio" ]]; then elif [[ -f "./myfsio" ]]; then
cp "./myfsio" "$INSTALL_DIR/myfsio" cp "./myfsio" "$INSTALL_DIR/myfsio"
echo " Copied binary from ./myfsio" echo " [OK] Copied binary from ./myfsio"
else else
echo -e "${RED}Error: No binary provided. Use --binary PATH or place 'myfsio' in current directory${NC}" echo " [ERROR] No binary provided."
echo " Use --binary PATH or place 'myfsio' in current directory"
exit 1 exit 1
fi fi
chmod +x "$INSTALL_DIR/myfsio" chmod +x "$INSTALL_DIR/myfsio"
echo " [OK] Set executable permissions"
echo -e "${GREEN}[4/7]${NC} Generating secret key..." echo ""
echo "------------------------------------------------------------"
echo "STEP 5: Generating Secret Key"
echo "------------------------------------------------------------"
echo ""
SECRET_KEY=$(openssl rand -base64 32) SECRET_KEY=$(openssl rand -base64 32)
echo " Generated secure SECRET_KEY" echo " [OK] Generated secure SECRET_KEY"
echo -e "${GREEN}[5/7]${NC} Creating environment file..." echo ""
echo "------------------------------------------------------------"
echo "STEP 6: Creating Configuration File"
echo "------------------------------------------------------------"
echo ""
cat > "$INSTALL_DIR/myfsio.env" << EOF cat > "$INSTALL_DIR/myfsio.env" << EOF
# MyFSIO Configuration # MyFSIO Configuration
# Generated by install.sh on $(date) # Generated by install.sh on $(date)
# Documentation: https://go.jzwsite.com/myfsio
# Storage paths # Storage paths
STORAGE_ROOT=$DATA_DIR STORAGE_ROOT=$DATA_DIR
@@ -206,20 +219,30 @@ RATE_LIMIT_DEFAULT=200 per minute
# KMS_ENABLED=true # KMS_ENABLED=true
EOF EOF
chmod 600 "$INSTALL_DIR/myfsio.env" chmod 600 "$INSTALL_DIR/myfsio.env"
echo " Created $INSTALL_DIR/myfsio.env" echo " [OK] Created $INSTALL_DIR/myfsio.env"
echo -e "${GREEN}[6/7]${NC} Setting permissions..." echo ""
echo "------------------------------------------------------------"
echo "STEP 7: Setting Permissions"
echo "------------------------------------------------------------"
echo ""
chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR" chown -R "$SERVICE_USER:$SERVICE_USER" "$INSTALL_DIR"
echo " [OK] Set ownership for $INSTALL_DIR"
chown -R "$SERVICE_USER:$SERVICE_USER" "$DATA_DIR" chown -R "$SERVICE_USER:$SERVICE_USER" "$DATA_DIR"
echo " [OK] Set ownership for $DATA_DIR"
chown -R "$SERVICE_USER:$SERVICE_USER" "$LOG_DIR" chown -R "$SERVICE_USER:$SERVICE_USER" "$LOG_DIR"
echo " Set ownership to $SERVICE_USER" echo " [OK] Set ownership for $LOG_DIR"
if [[ "$SKIP_SYSTEMD" != true ]]; then if [[ "$SKIP_SYSTEMD" != true ]]; then
echo -e "${GREEN}[7/7]${NC} Creating systemd service..." echo ""
echo "------------------------------------------------------------"
echo "STEP 8: Creating Systemd Service"
echo "------------------------------------------------------------"
echo ""
cat > /etc/systemd/system/myfsio.service << EOF cat > /etc/systemd/system/myfsio.service << EOF
[Unit] [Unit]
Description=MyFSIO S3-Compatible Storage Description=MyFSIO S3-Compatible Storage
Documentation=https://github.com/yourusername/myfsio Documentation=https://go.jzwsite.com/myfsio
After=network.target After=network.target
[Service] [Service]
@@ -248,45 +271,100 @@ WantedBy=multi-user.target
EOF EOF
systemctl daemon-reload systemctl daemon-reload
echo " Created /etc/systemd/system/myfsio.service" echo " [OK] Created /etc/systemd/system/myfsio.service"
echo " [OK] Reloaded systemd daemon"
else else
echo -e "${GREEN}[7/7]${NC} Skipping systemd service (--no-systemd)" echo ""
echo "------------------------------------------------------------"
echo "STEP 8: Skipping Systemd Service (--no-systemd flag used)"
echo "------------------------------------------------------------"
fi fi
echo "" echo ""
echo -e "${GREEN}╔══════════════════════════════════════════════════════════╗${NC}" echo "============================================================"
echo -e "${GREEN} Installation Complete!${NC}" echo " Installation Complete!"
echo -e "${GREEN}╚══════════════════════════════════════════════════════════╝${NC}" echo "============================================================"
echo "" echo ""
echo -e "${YELLOW}Next steps:${NC}"
if [[ "$SKIP_SYSTEMD" != true ]]; then
echo "------------------------------------------------------------"
echo "STEP 9: Start the Service"
echo "------------------------------------------------------------"
echo ""
if [[ "$AUTO_YES" != true ]]; then
read -p "Would you like to start MyFSIO now? [Y/n] " -n 1 -r
echo
START_SERVICE=true
if [[ $REPLY =~ ^[Nn]$ ]]; then
START_SERVICE=false
fi
else
START_SERVICE=true
fi
if [[ "$START_SERVICE" == true ]]; then
echo " Starting MyFSIO service..."
systemctl start myfsio
echo " [OK] Service started"
echo ""
read -p "Would you like to enable MyFSIO to start on boot? [Y/n] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
systemctl enable myfsio
echo " [OK] Service enabled on boot"
fi
echo ""
sleep 2
echo " Service Status:"
echo " ---------------"
if systemctl is-active --quiet myfsio; then
echo " [OK] MyFSIO is running"
else
echo " [WARNING] MyFSIO may not have started correctly"
echo " Check logs with: journalctl -u myfsio -f"
fi
else
echo " [SKIPPED] Service not started"
echo ""
echo " To start manually, run:"
echo " sudo systemctl start myfsio"
echo ""
echo " To enable on boot, run:"
echo " sudo systemctl enable myfsio"
fi
fi
echo "" echo ""
echo " 1. Review configuration:" echo "============================================================"
echo " ${BLUE}cat $INSTALL_DIR/myfsio.env${NC}" echo " Summary"
echo "============================================================"
echo "" echo ""
echo " 2. Start the service:" echo "Access Points:"
echo " ${BLUE}sudo systemctl start myfsio${NC}" echo " API: http://$(hostname -I 2>/dev/null | awk '{print $1}' || echo "localhost"):$API_PORT"
echo " UI: http://$(hostname -I 2>/dev/null | awk '{print $1}' || echo "localhost"):$UI_PORT/ui"
echo "" echo ""
echo " 3. Enable on boot:" echo "Default Credentials:"
echo " ${BLUE}sudo systemctl enable myfsio${NC}"
echo ""
echo " 4. Check status:"
echo " ${BLUE}sudo systemctl status myfsio${NC}"
echo ""
echo " 5. View logs:"
echo " ${BLUE}sudo journalctl -u myfsio -f${NC}"
echo " ${BLUE}tail -f $LOG_DIR/app.log${NC}"
echo ""
echo -e "${YELLOW}Access:${NC}"
echo " API: http://$(hostname -I | awk '{print $1}'):$API_PORT"
echo " UI: http://$(hostname -I | awk '{print $1}'):$UI_PORT/ui"
echo ""
echo -e "${YELLOW}Default credentials:${NC}"
echo " Username: localadmin" echo " Username: localadmin"
echo " Password: localadmin" echo " Password: localadmin"
echo -e " ${RED} Change these immediately after first login!${NC}" echo " [!] WARNING: Change these immediately after first login!"
echo "" echo ""
echo -e "${YELLOW}Configuration files:${NC}" echo "Configuration Files:"
echo " Environment: $INSTALL_DIR/myfsio.env" echo " Environment: $INSTALL_DIR/myfsio.env"
echo " IAM Users: $DATA_DIR/.myfsio.sys/config/iam.json" echo " IAM Users: $DATA_DIR/.myfsio.sys/config/iam.json"
echo " Bucket Policies: $DATA_DIR/.myfsio.sys/config/bucket_policies.json" echo " Bucket Policies: $DATA_DIR/.myfsio.sys/config/bucket_policies.json"
echo "" echo ""
echo "Useful Commands:"
echo " Check status: sudo systemctl status myfsio"
echo " View logs: sudo journalctl -u myfsio -f"
echo " Restart: sudo systemctl restart myfsio"
echo " Stop: sudo systemctl stop myfsio"
echo ""
echo "Documentation: https://go.jzwsite.com/myfsio"
echo ""
echo "============================================================"
echo " Thank you for installing MyFSIO!"
echo "============================================================"
echo ""

View File

@@ -18,13 +18,6 @@
set -e set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Default values
INSTALL_DIR="/opt/myfsio" INSTALL_DIR="/opt/myfsio"
DATA_DIR="/var/lib/myfsio" DATA_DIR="/var/lib/myfsio"
LOG_DIR="/var/log/myfsio" LOG_DIR="/var/log/myfsio"
@@ -33,7 +26,6 @@ KEEP_DATA=false
KEEP_LOGS=false KEEP_LOGS=false
AUTO_YES=false AUTO_YES=false
# Parse arguments
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
case $1 in case $1 in
--keep-data) --keep-data)
@@ -69,106 +61,184 @@ while [[ $# -gt 0 ]]; do
exit 0 exit 0
;; ;;
*) *)
echo -e "${RED}Unknown option: $1${NC}" echo "Unknown option: $1"
exit 1 exit 1
;; ;;
esac esac
done done
echo -e "${RED}" echo ""
echo "╔══════════════════════════════════════════════════════════╗" echo "============================================================"
echo " MyFSIO Uninstallation " echo " MyFSIO Uninstallation Script"
echo "╚══════════════════════════════════════════════════════════╝" echo "============================================================"
echo -e "${NC}" echo ""
echo "Documentation: https://go.jzwsite.com/myfsio"
echo ""
# Check if running as root
if [[ $EUID -ne 0 ]]; then if [[ $EUID -ne 0 ]]; then
echo -e "${RED}Error: This script must be run as root (use sudo)${NC}" echo "Error: This script must be run as root (use sudo)"
exit 1 exit 1
fi fi
echo -e "${YELLOW}The following will be removed:${NC}" echo "------------------------------------------------------------"
echo "STEP 1: Review What Will Be Removed"
echo "------------------------------------------------------------"
echo ""
echo "The following items will be removed:"
echo ""
echo " Install directory: $INSTALL_DIR" echo " Install directory: $INSTALL_DIR"
if [[ "$KEEP_DATA" != true ]]; then if [[ "$KEEP_DATA" != true ]]; then
echo -e " Data directory: $DATA_DIR ${RED}(ALL YOUR DATA!)${NC}" echo " Data directory: $DATA_DIR (ALL YOUR DATA WILL BE DELETED!)"
else else
echo " Data directory: $DATA_DIR (KEPT)" echo " Data directory: $DATA_DIR (WILL BE KEPT)"
fi fi
if [[ "$KEEP_LOGS" != true ]]; then if [[ "$KEEP_LOGS" != true ]]; then
echo " Log directory: $LOG_DIR" echo " Log directory: $LOG_DIR"
else else
echo " Log directory: $LOG_DIR (KEPT)" echo " Log directory: $LOG_DIR (WILL BE KEPT)"
fi fi
echo " Systemd service: /etc/systemd/system/myfsio.service" echo " Systemd service: /etc/systemd/system/myfsio.service"
echo " System user: $SERVICE_USER" echo " System user: $SERVICE_USER"
echo "" echo ""
if [[ "$AUTO_YES" != true ]]; then if [[ "$AUTO_YES" != true ]]; then
echo -e "${RED}WARNING: This action cannot be undone!${NC}" echo "WARNING: This action cannot be undone!"
echo ""
read -p "Are you sure you want to uninstall MyFSIO? [y/N] " -n 1 -r read -p "Are you sure you want to uninstall MyFSIO? [y/N] " -n 1 -r
echo echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo ""
echo "Uninstallation cancelled." echo "Uninstallation cancelled."
exit 0 exit 0
fi fi
if [[ "$KEEP_DATA" != true ]]; then
echo ""
read -p "This will DELETE ALL YOUR DATA. Type 'DELETE' to confirm: " CONFIRM
if [[ "$CONFIRM" != "DELETE" ]]; then
echo ""
echo "Uninstallation cancelled."
echo "Tip: Use --keep-data to preserve your data directory"
exit 0
fi
fi
fi fi
echo "" echo ""
echo -e "${GREEN}[1/5]${NC} Stopping service..." echo "------------------------------------------------------------"
echo "STEP 2: Stopping Service"
echo "------------------------------------------------------------"
echo ""
if systemctl is-active --quiet myfsio 2>/dev/null; then if systemctl is-active --quiet myfsio 2>/dev/null; then
systemctl stop myfsio systemctl stop myfsio
echo " Stopped myfsio service" echo " [OK] Stopped myfsio service"
else else
echo " Service not running" echo " [SKIP] Service not running"
fi
echo -e "${GREEN}[2/5]${NC} Disabling service..."
if systemctl is-enabled --quiet myfsio 2>/dev/null; then
systemctl disable myfsio
echo " Disabled myfsio service"
else
echo " Service not enabled"
fi
echo -e "${GREEN}[3/5]${NC} Removing systemd service..."
if [[ -f /etc/systemd/system/myfsio.service ]]; then
rm -f /etc/systemd/system/myfsio.service
systemctl daemon-reload
echo " Removed /etc/systemd/system/myfsio.service"
else
echo " Service file not found"
fi
echo -e "${GREEN}[4/5]${NC} Removing directories..."
if [[ -d "$INSTALL_DIR" ]]; then
rm -rf "$INSTALL_DIR"
echo " Removed $INSTALL_DIR"
fi
if [[ "$KEEP_DATA" != true ]] && [[ -d "$DATA_DIR" ]]; then
rm -rf "$DATA_DIR"
echo " Removed $DATA_DIR"
elif [[ "$KEEP_DATA" == true ]]; then
echo " Kept $DATA_DIR"
fi
if [[ "$KEEP_LOGS" != true ]] && [[ -d "$LOG_DIR" ]]; then
rm -rf "$LOG_DIR"
echo " Removed $LOG_DIR"
elif [[ "$KEEP_LOGS" == true ]]; then
echo " Kept $LOG_DIR"
fi
echo -e "${GREEN}[5/5]${NC} Removing system user..."
if id "$SERVICE_USER" &>/dev/null; then
userdel "$SERVICE_USER" 2>/dev/null || true
echo " Removed user '$SERVICE_USER'"
else
echo " User not found"
fi fi
echo "" echo ""
echo -e "${GREEN}MyFSIO has been uninstalled.${NC}" echo "------------------------------------------------------------"
if [[ "$KEEP_DATA" == true ]]; then echo "STEP 3: Disabling Service"
echo -e "${YELLOW}Data preserved at: $DATA_DIR${NC}" echo "------------------------------------------------------------"
echo ""
if systemctl is-enabled --quiet myfsio 2>/dev/null; then
systemctl disable myfsio
echo " [OK] Disabled myfsio service"
else
echo " [SKIP] Service not enabled"
fi fi
echo ""
echo "------------------------------------------------------------"
echo "STEP 4: Removing Systemd Service File"
echo "------------------------------------------------------------"
echo ""
if [[ -f /etc/systemd/system/myfsio.service ]]; then
rm -f /etc/systemd/system/myfsio.service
systemctl daemon-reload
echo " [OK] Removed /etc/systemd/system/myfsio.service"
echo " [OK] Reloaded systemd daemon"
else
echo " [SKIP] Service file not found"
fi
echo ""
echo "------------------------------------------------------------"
echo "STEP 5: Removing Installation Directory"
echo "------------------------------------------------------------"
echo ""
if [[ -d "$INSTALL_DIR" ]]; then
rm -rf "$INSTALL_DIR"
echo " [OK] Removed $INSTALL_DIR"
else
echo " [SKIP] Directory not found: $INSTALL_DIR"
fi
echo ""
echo "------------------------------------------------------------"
echo "STEP 6: Removing Data Directory"
echo "------------------------------------------------------------"
echo ""
if [[ "$KEEP_DATA" != true ]]; then
if [[ -d "$DATA_DIR" ]]; then
rm -rf "$DATA_DIR"
echo " [OK] Removed $DATA_DIR"
else
echo " [SKIP] Directory not found: $DATA_DIR"
fi
else
echo " [KEPT] Data preserved at: $DATA_DIR"
fi
echo ""
echo "------------------------------------------------------------"
echo "STEP 7: Removing Log Directory"
echo "------------------------------------------------------------"
echo ""
if [[ "$KEEP_LOGS" != true ]]; then
if [[ -d "$LOG_DIR" ]]; then
rm -rf "$LOG_DIR"
echo " [OK] Removed $LOG_DIR"
else
echo " [SKIP] Directory not found: $LOG_DIR"
fi
else
echo " [KEPT] Logs preserved at: $LOG_DIR"
fi
echo ""
echo "------------------------------------------------------------"
echo "STEP 8: Removing System User"
echo "------------------------------------------------------------"
echo ""
if id "$SERVICE_USER" &>/dev/null; then
userdel "$SERVICE_USER" 2>/dev/null || true
echo " [OK] Removed user '$SERVICE_USER'"
else
echo " [SKIP] User not found: $SERVICE_USER"
fi
echo ""
echo "============================================================"
echo " Uninstallation Complete!"
echo "============================================================"
echo ""
if [[ "$KEEP_DATA" == true ]]; then
echo "Your data has been preserved at: $DATA_DIR"
echo ""
echo "To reinstall MyFSIO with existing data, run:"
echo " curl -fsSL https://go.jzwsite.com/myfsio-install | sudo bash"
echo ""
fi
if [[ "$KEEP_LOGS" == true ]]; then
echo "Your logs have been preserved at: $LOG_DIR"
echo ""
fi
echo "Thank you for using MyFSIO."
echo "Documentation: https://go.jzwsite.com/myfsio"
echo ""
echo "============================================================"
echo ""