Ночью сел и часок-другой потратил на то, чтобы поменять username главного аккаунта на MacOS
Штука больше эстетичная, с элементом челленджа и легкой ноткой экстрима в виде возможности потери работоспособности операционной системы, что приведет к её переустановке.
Но я решительно его сменил везде, и вот больше года сижу со старым на ноуте...
Где-то читал что это можно сделать только снаружи системы, с рекавери мода или внешней системы
Формулировки не точные, но суть именно такая была
Но загуглив снова - я нашел официальное руководство на сайте Apple
В нём не хватает инструкции по переименованию директорий и восстановлению символьных ссылок только...
В целом операция довольно простая, притом явно проще, чем для Linux.
UPD. (Для рядового юзера) В линуксе юзернейм меняется всего одной командой:
usermod -l new_username old_username
Просто создаем второго админа, логинимся под ним, в настройках меняем имя пользователя и путь к его домашней директории.
Проблемы могут возникнуть именно со вторым пунктом, когда понадобится переименовать директорию (эт надо сделать вручную).
У меня не хватило любопытства разобраться в том как это сделать, т.к. мне выбивало Permission denied даже под sudo и su.
Видимо, есть еще доп права на эту операцию для вторичных админов.
Так что я просто при помощи su в терминале залогинился под главным пользователем, которому и меняю юзернейм и домашнюю директорию. И из-под него с sudo переименовал его же директорию, словив панику в консоле. (Самая высокая степень критичности ошибки)
Благо что паника не ядра, а каких-то консольных утилит 😂
Потом перепроверил - всё ок, задумка удалась. Директория переименована.
Заменил ему юзернейм и перезагрузил компьютер.
В целом на этом этапе 99% юзерам можно закончить.
Только вот есть один нюанс: этим юзерам не нужно переименовывать пользователя, а уж тем более менять путь домашней директории.
И, скорее, всего они даже не в курсе об их существовании, просто есть Finder, файлы и, в лучшем случае они не называют «директории» - «папками» 🤓
Так вот в системе, особенно в инструментах разработки активно используются символьные ссылки.
И именно тут может крыться дьявол. А дьявол, как мы помним - в деталях.
Мы не только сменили имя пользователя, а и путь к его домашней директории.
И все ссылки, которые вели к её содержимому, с этого момента теперь битые.
А значит у нас перестанут работать множество утилит.
Из первого что приходит на ум, использующее символьные ссылки в своей работе:
yarn, n, кэши, poetry и множество других утилит
В них в первую очередь можно будет столкнуться с проблемами.
Так что пришлось применить знания, которые были получены в процессе пользования семейством линуксовых дистрибутивов:
Был собран список всех битых ссылок при помощи команды:
find . -type l ! -exec test -e {} \; -print > broken-symlinks.txt
Затем этот файл был прочтен и построчно перепроверен Python скриптом
Я не делал никакой унификации, чисто одноразовый проход мне нужен был, так что готового скрипта прикреплять не стану, в силу его отсутствия.
После перепроверки получившегося списка - я убедился что правильно помню как работать с pathlib
(Как по мне, один из лучших вариантов для работы с файловой системой, хотя бывает, в редких случаях, функционала не хватает)
Далее уже пошло как по маслу - собрал данные по ссылкам в переменные, добавил логов через принты, убедился что нет относительных ссылок, отфильтровал и удалил все битые ссылки что не связаны с заменой юзернейма, затем еще одним проходом сделал замену в реальном пути ссылки, попутно ее пересоздавая при помощи операции "удалить + создать" в том же цикле.
Как итог, я с уверенностью могу продолжить пользоваться системой, из изменений в которой - только имя пользователя и имя его домашней директории.
Ну и финальным штрихом при помощи grep -r "/username" проходимся по всем файлам в домашней директории, подчищаем старые, не нужные файлы и ручками меняем значения конфигов, где был указан абсолютный путь к домашней директории пользователя чтобы восстановить работу оставшихся утилит.
Обычно таких файлов немного. Лично у меня их вышло около 10, часть fish, другая часть docker.
Ну и устаревшие билды кэша packer от Neovim, в отдельной директории, которую я просто снёс, потому что на последнем стриме переписал весь конфиг на Lazy
UPD. Узнал, что в авторский контент можно ссылки на свои ресурсы добавлять.
Мой Телеграм канал: @cododelia