Миграция с hosts-sync
Предшественником был bash-скрипт hosts-sync плюс каталог с *.hosts и блок в
/etc/hosts между маркерами # >>> hosts-sync begin >>>. Способов перейти два, и
различаются они тем, останутся ли старые файлы.
Вариант 1 — импортировать всё в конфиг
Заголовок раздела «Вариант 1 — импортировать всё в конфиг»sudo hostsctl migrate --from /path/to/old/hosts-dirИмпортирует все *.hosts в конфиг (группа на файл, комментарии сохраняются,
закомментированные строки становятся выключенными записями), затем убирает блок
hosts-sync из /etc/hosts и рисует свой. После этого старый скрипт и его файлы можно
удалить.
Импортировать, пока не трогая /etc/hosts:
hostsctl import /path/to/old/hosts-dirhostsctl list --allhostsctl diffsudo hostsctl apply --drop-legacyВариант 2 — оставить файлы и управлять ими на месте
Заголовок раздела «Вариант 2 — оставить файлы и управлять ими на месте»Если файлы *.hosts хочется оставить там, где они лежат, подключи их
файлами-зонами — тогда копирования в конфиг не будет вообще:
hostsctl zone add '/Users/you/Work/hosts/*.hosts'sudo hostsctl apply --drop-legacyФайлы остаются источником правды и остаются пригодными для правки руками. Одна оговорка: первая же правка через CLI перепишет файл форматированием hostsctl — колонки выровняются, шапка уедет наверх. Содержимое сохранится, раскладка нет.
Что происходит со старым блоком
Заголовок раздела «Что происходит со старым блоком»Пока не передан --drop-legacy (или не запущен migrate), блок hosts-sync остаётся в
/etc/hosts, и hostsctl только предупреждает о нём. Предупреждение существенное: если оба
блока задают одно имя, выигрывает тот, что стоит в файле раньше, — и оставленный старый
блок может выглядеть как сломанный новый.
hostsctl status # покажет оба блока и диапазоны их строкЕсли hosts правился руками
Заголовок раздела «Если hosts правился руками»Если hosts-sync никогда не было, а в /etc/hosts накопились записи, которые хочется
взять под управление:
hostsctl init# перенеси нужные строки в конфиг, напримерhostsctl add 10.0.0.7 stand.local --group workhostsctl diffhostsctl намеренно не засасывает весь существующий файл в конфиг: строки, которыми он не управляет, продолжают работать ровно как раньше, и брать за них ответственность незачем. Перенеси то, чем действительно хочешь управлять, а остальное оставь как есть.