36 Commits

Author SHA1 Message Date
Stitch505
79b91f157e fix: recursive search for manifest.json after tar extraction (files may be nested) 2026-05-23 00:20:36 +04:00
Stitch505
c8bef6b41a fix: target-mode now runs with capture=False (interactive), so user sees prompts and can respond 2026-05-23 00:16:54 +04:00
Stitch505
80bb196d24 fix: transfer.py — helper functions for ssh/scp/rsync, local tar then remote unpack for tool script, consistent error handling 2026-05-23 00:11:04 +04:00
Stitch505
bfd6302448 fix: restore missing ensure_sshpass() function in ssh.py 2026-05-23 00:06:34 +04:00
Stitch505
21bd747329 refactor: consistent terminology - 'новый сервер' and 'приватный SSH-ключ' instead of 'target' and generic 'ключ' 2026-05-23 00:02:53 +04:00
Stitch505
0cd968a16d fix: target-first SSH flow — ask user for THEIR target key/password, don't scan source keys 2026-05-22 23:59:37 +04:00
Stitch505
3ee5104302 refactor: clear SSH auth flow — passphrase is local only, target password is separate; interactive ssh-copy-id with visible prompt; 90 lines removed, logic simplified 2026-05-22 23:53:15 +04:00
Stitch505
bd16e339c0 fix: ssh-copy-id interactive (capture=False) so password prompt visible; encrypted keys just warned, not source-server passphrase confusion; clear auth choice menu for target 2026-05-22 23:48:58 +04:00
Stitch505
6d6418c059 feat: secure password/passphrase input via getpass; interactive SSH auth menu (key/passphrase/password/temp-key); fix missing do_transfer call 2026-05-22 23:42:52 +04:00
Stitch505
4d6c7ef506 feat: interactive SSH auth choice (key with passphrase, password via sshpass, or temp ed25519); fix missing do_transfer call for password path 2026-05-22 23:41:09 +04:00
Stitch505
bfa3136131 fix: target mode supports manual tar.gz path input + auto-extract when archive not transferred yet 2026-05-22 23:35:32 +04:00
Stitch505
7d45d1f8c0 fix: full sshpass support for password-based transfer; pre-flight SSH check; clear error diagnostics 2026-05-22 23:28:27 +04:00
Stitch505
4a1e7923de fix: clear stale ssh_key from state when user declines keygen; add guard for missing key in do_transfer 2026-05-22 23:23:02 +04:00
Stitch505
329dade4c9 fix: add missing confirm import in main.py 2026-05-22 23:15:51 +04:00
Stitch505
cdf283a598 fix: add timeout to ssh-copy-id and check_ssh_connectivity to prevent hangs 2026-05-22 23:14:03 +04:00
Stitch505
b231892614 fix: scp hangs due to missing SSH options and 300s default timeout; add -o ConnectTimeout/StrictHostKeyChecking/BatchMode + 60s timeout 2026-05-22 23:13:17 +04:00
Stitch505
9b005095b9 fix: scp uses -P (capital) for port; unify ssh_opts variable for remote commands 2026-05-22 23:07:21 +04:00
Stitch505
a4be7c59d9 fix: FSM calls do_transfer_offer() correctly; resume remembers target_host/user/port 2026-05-22 23:01:52 +04:00
Stitch505
76b06b157a fix: deduplicate sidecars/systemd, block system-critical stops, filter runtime paths 2026-05-22 22:56:00 +04:00
Stitch505
186ab2325f CRITICAL: hardcode state.json to ~/.migrate/state.json, guarantee reset_state clears completed_steps 2026-05-22 21:20:44 +04:00
Stitch505
0dfb4ec597 CRITICAL FIX: run_source_mode/run_target_mode now use reset_state to clear completed_steps 2026-05-22 21:17:03 +04:00
Stitch505
d63fb0c9ee debug: add state.json path logging to diagnose save failure 2026-05-22 21:12:00 +04:00
Stitch505
addbb3795f fix: complete logic audit — mark_completed on transfer, reset_state for interactive source, proper error propagation, user-visible commands 2026-05-22 21:05:16 +04:00
Stitch505
97b3623915 bugfix: comprehensive stability audit and fixes
- discover/docker.py: handle comma-separated compose_file in labels
- discover/network.py: replace os.getlogin() with robust user detection
- target.py: add lsb_release fallback via hostnamectl, guard None compose_file,
  use container name (not cached CID) for docker logs
- main.py: call reset_state(mode='target') before target mode,
  improve EOF handling info message
- source.py: remove redundant set_stage('DONE') inside transfer_offer
- transfer.py: fix stage naming for resume after transfer
- add dry_run.py for local logic validation
2026-05-22 20:58:37 +04:00
Stitch505
6f3637795b fix: reset state when starting new source run 2026-05-22 20:51:48 +04:00
Stitch505
45f56bc146 fix: disable resume when stage is DONE, add mark_completed for skipped transfer 2026-05-22 20:48:53 +04:00
Stitch505
8ccac570ce fix: add errors='replace' to subprocess.run for non-utf8 locales 2026-05-22 20:44:25 +04:00
Stitch505
684976907d fix: move state.json outside install dir to user home /var/tmp 2026-05-22 20:39:24 +04:00
Stitch505
e39bbbcad7 fix: remove nested manifest_review call from discovery 2026-05-22 20:36:04 +04:00
Stitch505
3222620d0b fix: auto-save state on Ctrl+C/SIGTERM, detect interrupted runs 2026-05-22 20:33:25 +04:00
Stitch505
15bb88527d feat: SSH key discovery and connectivity check via pick_or_setup_ssh_key 2026-05-22 20:27:33 +04:00
Stitch505
003a251fbb fix: remove cascaded step calls causing duplication, guard empty transfer 2026-05-22 20:24:36 +04:00
Stitch505
26398e2e4b fix: safe service name for path, nginx hint scope error 2026-05-22 20:19:29 +04:00
Stitch505
99f4b109d5 fix: install.sh запускает меню сразу через /dev/tty 2026-05-22 20:13:12 +04:00
Stitch505
13a1583df1 fix: install.sh pipe-mode, add .gitignore, robust error handling, resume state check 2026-05-22 20:08:41 +04:00
Stitch505
ddb2ae9501 init: docker-migrate universal migration tool 2026-05-22 19:58:09 +04:00