diff --git a/CLAUDE.md b/CLAUDE.md index 91b6da9..c05b8b5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -133,7 +133,7 @@ cmd_backup() `bin/gniza` main() parses the first arg and routes to `cmd_*()` functions. Each command handles its own `--config`, `--remote`, `--account` flags via `get_opt()` and `has_flag()`. -Commands: `backup`, `restore`, `list`, `verify`, `status`, `remote`, `schedule`, `init`, `version`, `help` +Commands: `backup`, `restore`, `list`, `verify`, `status`, `remote`, `schedule`, `version`, `help` ### Config Hierarchy @@ -541,7 +541,6 @@ All restore functions dispatch by `_is_rclone_mode` — using `rclone_from_remot | `_list_current_remote(account)` | Display listing for current remote context | | `_test_connection()` | Dispatch `test_rclone_connection` or `test_ssh_connection` by type | | `_status_ssh_and_disk()` | Connection test + disk/storage usage display (SSH: df, cloud: rclone about) | -| `_init_remote(name)` | Interactive remote destination setup | | `cmd_remote()` | Remote management: list, delete | | `cmd_schedule()` | Schedule CRUD: add, delete, list, install, show, remove | diff --git a/README.md b/README.md index 420ee65..a6b11e7 100644 --- a/README.md +++ b/README.md @@ -35,11 +35,10 @@ The uninstall script removes the CLI, symlink, cron entries, and WHM plugin. Con ## Quick Start ```bash -# Interactive setup (creates config + first remote + optional schedule) -sudo gniza init - -# Add additional remote destinations -sudo gniza init remote offsite +# Configure via WHM → GNIZA Backup Manager (setup wizard) +# Or copy example configs manually: +sudo cp /etc/gniza/gniza.conf.example /etc/gniza/gniza.conf +sudo cp /etc/gniza/remote.conf.example /etc/gniza/remotes.d/nas.conf # Test backup (dry run) sudo gniza backup --dry-run @@ -71,8 +70,6 @@ gniza schedule list gniza schedule install gniza schedule show gniza schedule remove -gniza init -gniza init remote gniza version gniza help ``` @@ -124,11 +121,7 @@ Back up to one or more destinations with independent retention policies and band #### Setup ```bash -# Interactive setup (recommended) -sudo gniza init remote nas -sudo gniza init remote offsite - -# Or copy the template manually +# Configure via WHM → Remotes, or copy the template manually sudo cp /etc/gniza/remote.conf.example /etc/gniza/remotes.d/nas.conf sudo vi /etc/gniza/remotes.d/nas.conf diff --git a/bin/gniza b/bin/gniza index b5564c2..8050919 100755 --- a/bin/gniza +++ b/bin/gniza @@ -881,7 +881,7 @@ cmd_status() { done <<< "$remotes" _restore_remote_globals else - echo "No remotes configured. Run 'gniza init remote ' to add one." + echo "No remotes configured." fi echo "" @@ -918,7 +918,6 @@ cmd_remote() { list|ls|"") if ! has_remotes; then echo "No remotes configured." - echo "Run 'gniza init remote ' to add one." return 0 fi @@ -1176,170 +1175,6 @@ _schedule_list() { echo "" } -cmd_init() { - local subcommand="${1:-}" - - if [[ "$subcommand" == "remote" ]]; then - shift - _init_remote "$@" - return - fi - - local config_dir="/etc/gniza" - local config_file="$config_dir/gniza.conf" - - echo "${C_BOLD}gniza init${C_RESET} — Setup wizard" - echo "" - - # Step 1: Create main config with local settings - if [[ -f "$config_file" ]]; then - echo "Config file already exists: $config_file" - read -rp "Overwrite? [y/N] " answer - [[ "$answer" =~ ^[Yy]$ ]] || { - echo "Skipping main config." - echo "" - # Still offer to add a remote - echo "Add a remote destination?" - read -rp "Remote name (e.g. nas, offsite): " init_remote_name - if [[ -n "$init_remote_name" ]]; then - _init_remote "$init_remote_name" - fi - return - } - fi - - read -rp "Notification email (empty to disable): " init_email - - # Create config - mkdir -p "$config_dir" - mkdir -p "$config_dir/remotes.d" - cat > "$config_file" <.conf -# Run 'gniza init remote ' to add one. - -TEMP_DIR="/usr/local/gniza/workdir" -INCLUDE_ACCOUNTS="" -EXCLUDE_ACCOUNTS="nobody" - -LOG_DIR="/var/log/gniza" -LOG_LEVEL="info" -LOG_RETAIN=90 - -NOTIFY_EMAIL="$init_email" -NOTIFY_ON="failure" - -LOCK_FILE="/var/run/gniza.lock" -SSH_TIMEOUT=30 -SSH_RETRIES=3 -RSYNC_EXTRA_OPTS="" -CONF - - echo "" - echo "Config written to $config_file" - - # Create log directory - mkdir -p "${LOG_DIR:-$DEFAULT_LOG_DIR}" - - # Step 2: Create first remote - echo "" - echo "Now let's set up your first remote destination." - read -rp "Remote name (e.g. nas, offsite): " init_remote_name - [[ -z "$init_remote_name" ]] && die "Remote name is required" - - _init_remote "$init_remote_name" -} - -_init_remote() { - local name="${1:-}" - [[ -z "$name" ]] && die "Usage: gniza init remote " - - # Validate name (alphanumeric, hyphens, underscores) - if ! [[ "$name" =~ ^[a-zA-Z0-9_-]+$ ]]; then - die "Remote name must be alphanumeric (hyphens and underscores allowed): $name" - fi - - local config_dir="/etc/gniza/remotes.d" - local config_file="$config_dir/${name}.conf" - - echo "${C_BOLD}gniza init remote${C_RESET} — Remote setup: ${C_BOLD}$name${C_RESET}" - echo "" - - if [[ -f "$config_file" ]]; then - echo "Remote config already exists: $config_file" - read -rp "Overwrite? [y/N] " answer - [[ "$answer" =~ ^[Yy]$ ]] || { echo "Aborted."; exit 0; } - fi - - read -rp "Remote host: " init_host - [[ -z "$init_host" ]] && die "Remote host is required" - - read -rp "Remote port [22]: " init_port - init_port="${init_port:-22}" - - read -rp "Remote user [root]: " init_user - init_user="${init_user:-root}" - - read -rp "SSH key path [/root/.ssh/id_rsa]: " init_key - init_key="${init_key:-/root/.ssh/id_rsa}" - - read -rp "Remote base directory [/backups]: " init_base - init_base="${init_base:-/backups}" - - read -rp "Retention count [30]: " init_retention - init_retention="${init_retention:-30}" - - read -rp "Bandwidth limit in KB/s [0 = unlimited]: " init_bwlimit - init_bwlimit="${init_bwlimit:-0}" - - # Create config - mkdir -p "$config_dir" - cat > "$config_file" </dev/null; then - echo "${C_GREEN}SSH connection successful!${C_RESET}" - echo "Creating remote base directory..." - ensure_remote_dir "${REMOTE_BASE}/$(hostname -f)/accounts" - echo "${C_GREEN}Remote directory created.${C_RESET}" - else - echo "${C_YELLOW}SSH connection failed. Check your settings in $config_file${C_RESET}" - fi - - echo "" - echo "${C_GREEN}Remote '$name' configured!${C_RESET}" - echo "Run 'gniza schedule add ' to set up a backup schedule." - echo "Run 'gniza backup --remote=$name --dry-run' to test." -} - # ── System Backup / Restore ─────────────────────────────────── # Transfer + finalize + retention for system backup on the current remote. @@ -1666,8 +1501,6 @@ ${C_BOLD}Commands:${C_RESET} schedule list Show configured schedules schedule {install|show|remove} Manage cron entries stats Collect backup statistics - init Setup config + first remote - init remote Add a remote destination version Show version ${C_BOLD}Global Options:${C_RESET} @@ -1676,7 +1509,6 @@ ${C_BOLD}Global Options:${C_RESET} --debug Enable debug logging ${C_BOLD}Examples:${C_RESET} - gniza init gniza backup --dry-run gniza backup --account=johndoe gniza backup --remote=nas @@ -1689,7 +1521,6 @@ ${C_BOLD}Examples:${C_RESET} gniza schedule list gniza schedule install gniza remote list - gniza init remote nas gniza sysbackup --dry-run gniza sysbackup --remote=nas gniza sysrestore --remote=nas @@ -1718,7 +1549,6 @@ main() { remote) cmd_remote "$@" ;; schedule) cmd_schedule "$@" ;; stats) cmd_stats "$@" ;; - init) cmd_init "$@" ;; version) echo "gniza v${GNIZA_VERSION}" ;; help|-h|--help) cmd_usage ;; "") cmd_usage ;; diff --git a/lib/config.sh b/lib/config.sh index ba08be5..630c398 100644 --- a/lib/config.sh +++ b/lib/config.sh @@ -28,7 +28,7 @@ load_config() { local config_file="${1:-$DEFAULT_CONFIG_FILE}" if [[ ! -f "$config_file" ]]; then - die "Config file not found: $config_file (run 'gniza init' to create one)" + die "Config file not found: $config_file (create via WHM or copy gniza.conf.example)" fi # Parse the config (safe key=value reader, no code execution) diff --git a/lib/remotes.sh b/lib/remotes.sh index a648d29..ddad7c0 100644 --- a/lib/remotes.sh +++ b/lib/remotes.sh @@ -266,6 +266,6 @@ get_target_remotes() { fi # No remotes configured - log_error "No remotes configured. Run 'gniza init remote ' to add one." + log_error "No remotes configured. Add one via WHM → Remotes." return 1 } diff --git a/scripts/install.sh b/scripts/install.sh index e9754ae..5af5f6e 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -135,9 +135,4 @@ fi echo "" echo "Next steps:" -if [[ -d /usr/local/cpanel ]]; then - echo " Open WHM → GNIZA Backup Manager to configure via the setup wizard." -else - echo " 1. Run 'gniza init' to create your configuration" - echo " 2. Run 'gniza status' to verify your setup" -fi +echo " Open WHM → GNIZA Backup Manager to configure via the setup wizard." diff --git a/whm/gniza-whm/remotes.cgi b/whm/gniza-whm/remotes.cgi index 05c87b9..21f4b54 100644 --- a/whm/gniza-whm/remotes.cgi +++ b/whm/gniza-whm/remotes.cgi @@ -551,7 +551,7 @@ sub handle_add { } my ($ok, $err) = GnizaWHM::Config::save($dest, \%data, \@GnizaWHM::Config::REMOTE_KEYS); if ($ok) { - # Init remote directory structure (like gniza init remote) + # Initialize remote directory structure my $type = $data{REMOTE_TYPE} || 'ssh'; my %init_args = ( type => $type,