AudionAudion

Переезд на новую машину

MIGRATION_RU.md

Переезд на новую машину

Каждый пак и раньше умел вынести свою часть. Не хватало порядка: из чего состоит переезд, куда всё складывается вместе и по чему новая машина понимает, что переезд состоялся. Этот порядок жил в голове — там переезды и теряют куски.

Полный список GUI-параметров смотри в USER_GUIDE_RU.md, блок Справочник параметров -> Ключи, шрифты и настройки Windows -> Переезд на новую машину. Там же в GUI лежат и остальные паки переезда — раздел собран из того, что не возвращается само после переустановки.

Из чего состоит

Состав лежит в config\migration_plan.yaml и правится владельцем. Каждая строка называет пак, который делает работу, папку внутри переезда и то, можно ли разворачивать её без рук.

ssh_access          ключи и config текущего пользователя (.ssh целиком)
configured_access   файлы, названные в конфигурации ssh и rclone
wifi                профили Wi-Fi вместе с паролями
user_fonts          шрифты, установленные только для этого пользователя
shell_environment   настройки Windows Terminal и профиль PowerShell
certificates        сертификаты с экспортируемым закрытым ключом (.pfx)

Порядок строк — рабочий, а не декоративный: ssh_access возвращает на место .ssh вместе с config, а configured_access затем переписывает пути внутри этого config под новое расположение файлов.

Пак, которого нет в белом списке программы, переезд не примет: он откажется стартовать целиком. Молча уехавший неполный переезд хуже, чем не уехавший, — пробел обнаружится на новой машине и через несколько дней.

Почему одного .ssh мало

Экспорт .ssh переносит ключи, которые лежат в .ssh. Ключ, на который конфигурация ссылается с другого диска, он не заберёт. Это не редкий случай: на этой машине из четырёх закрытых ключей, названных в ssh config и rclone.conf, в профиле лежит один.

Поэтому строка configured_access собирает по ссылке, а не по месту: она запускает ту же проверку связности, что и пак SSH, и копирует каждый файл, который назван конфигурацией, где бы он ни лежал. Рядом с закрытым ключом забирается и его .pub — конфигурация о нём не упоминает, и по ссылке он не нашёлся бы.

Исполняемые файлы из ProxyCommand (например, cloudflared.exe) в переезд не кладутся — они ставятся на новой машине. Но их пути записываются в карту и печатаются при развёртывании, чтобы про них не забыли.

Как собрать

Экспорт переезда идёт по составу, зовёт паки и складывает всё в output\migration\<машина>_<время> вместе с описью migration.json.

Выгрузка содержит закрытые ключи и пароли Wi-Fi открытым текстом. Относись к папке так же, как к экспорту PFX: переносить закрытым каналом, не оставлять на общем диске, удалять, когда переезд закончен.

Пароль PFX задаётся в форме, в разделе Дополнительно. Если он пуст, сертификаты не соберутся, остальные строки уедут, а пробел будет записан в опись и назван в журнале.

Если пак не смог отдать свою часть, переезд не останавливается: остальные строки собираются, в описи появляется collected: false с причиной, а операция завершается ошибкой со списком пробелов.

Как развернуть

Импорт переезда читает опись из input — принимается и сама папка переезда, и папка, внутри которой их несколько (тогда берётся самая свежая).

Дальше каждая строка отдаётся своему паку. Строки с пометкой manual пропускаются, но не молча: печатается причина и путь, где лежат файлы. Сейчас таких строк в составе нет.

Сертификаты возвращаются пачкой. Это возможно потому, что сборка шифрует все .pfx одним паролем из формы и записывает в certificates.json, из какого хранилища взят каждый сертификат: без этой записи развёртывание гадало бы, куда класть, а сертификат в чужом хранилище молча ничего не делает.

Развёртывание заканчивается проверкой связности. Битые пути не превращают переезд в неудачу: файлы приехали, и нужен список, а не исключение.

Чем проверяется

Проверить доступы после переезда — та же проверка, что и в паке SSH: каждый ключ, known_hosts, сертификат и путь к прокси из конфигурации ssh и rclone с пометкой [ OK ] или [MISS].

Переезд считается состоявшимся, когда доступы отвечают, а не когда файлы скопированы.

Где что лежит

config\migration_plan.yaml          состав переезда
output\migration\<машина>_<время>   собранный переезд
  migration.json                    опись: машина, время, строки, пробелы
  ssh_access\ configured_access\ …  по папке на строку состава
input                               откуда читает развёртывание
output\access                       отдельная сборка доступов, без переезда

Шрифты: только свои

Windows держит два набора. Системный лежит в C:\Windows\Fonts и записан в HKLM — он возвращается вместе с Windows. Пользовательский лежит в профиле и записан в HKCU — он не возвращается никак.

Пак Шрифты пользователя работает только со вторым: читает и пишет HKCU, копирует в папку профиля. Системный набор он читает лишь для того, чтобы сказать, сколько там шрифтов, и никогда в него не пишет — это проверяется тестом по самим скриптам, а не обещанием в документе.

Установка идёт как «Установить для меня»: файл в профиль, имя в HKCU, а затем запущенным программам рассылается WM_FONTCHANGE — иначе шрифт появился бы только после перезахода. Прав администратора не нужно. Повторная установка того же набора ничего не делает: совпадение проверяется по содержимому файла.

Среда оболочки: по месту, а не по пути

Пак Среда оболочки берёт настройки Windows Terminal (Store, Preview и распакованная сборка — у каждой своя папка) и профили PowerShell 7 и Windows PowerShell, оба хоста.

Пути не зашиты: профиль спрашивается у самого PowerShell, папка документов — у Windows. На этой машине документы лежат в C:\Audion\Documents, а не в профиле, и пак это учитывает сам.

Каждый собранный файл получает устойчивый идентификатор, и восстановление спрашивает эту машину, где место такому файлу. Иначе профиль лёг бы по старому пути, которого здесь может не быть, — и это самый тихий из отказов: никакой ошибки, просто ничего не применилось.

Совпадающий файл не трогается, заменяемый сохраняется копией с датой.

Чего в переезде нет — и это решение, а не пробел

Решено 14 августа 2026 года, после того как каждый пункт был проверен на живой машине. Список здесь для того, чтобы к нему не возвращались как к забытому.

Задачи планировщика. Вне ветки \Microsoft\ на машине нашлось 16 задач, и ни одной пользовательской: обновлялки Brave, Google, Vivaldi, Firefox, OneDrive, плюс Lenovo, Realtek, SoftLanding и Git for Windows Updater. У половины прямо в имени зашит SID профиля — на новой машине SID другой, и такая задача там мусор. Все они и без переезда создадутся сами при установке своих программ. Переносить нечего, а лезть в чужие задачи рискованно.

Переменные окружения пользователя, включая PATH. Пути вида E:\TOOLS\... на новой машине означают другое или не означают ничего, а чинятся они за минуту руками. Автоматическая правка PATH — это тихая поломка запуска всего, что от него зависит.

Диспетчер учётных данных Windows и пароли браузеров. Зашифрованы DPAPI и привязаны к профилю; всё, что «умеет» их выгружать, расшифровывает их на живой машине. Не тот жанр.

Ключи, привязанные к TPM. Не экспортируются по устройству. Пак сертификатов честно помечает их No (TPM / non-exportable) и пропускает.

Системные шрифты. Возвращаются вместе с Windows; пак пишет только в HKCU.

Список установленных программ. Это дело Audion Get, а не этой программы. Заодно замечено 14 августа 2026 года: winget export кладёт в карту и то, что ставили не им (например, WinRAR он сопоставил сам), а из 53 записей 22 — рантаймы и зависимости, которые приезжают со своим софтом.

Отдельно от переезда

Пак Доступы из конфигурации работает и сам по себе:

ничего не меняет;

output\access вместе с картой происхождения;

них ssh config и rclone.conf, ограничивает права на закрытые ключи и проверяет связность.

Заменяемые конфигурации не пропадают: рядом остаётся копия с датой в имени. Разложить один и тот же набор дважды можно — это и есть повторная попытка переезда.

Все проекты