Ядро mihomo на macOS: запуск из командной строки
Содержание
Ядро mihomo на macOS — это один исполняемый файл без интерфейса: вы запускаете его в терминале, указываете каталог с конфигурацией и получаете локальный прокси-порт. Такой режим удобен для отладки правил, для работы по SSH и для тех, кто не хочет держать в системе лишнее ПО.
Для повседневного использования на десктопе всё-таки удобнее графический клиент — внутри него то же самое ядро. Если интерфейс вам нужен, посмотрите установку Clash Verge Rev на macOS. Дальше — вариант для командной строки.
Какая сборка нужна: Intel или Apple Silicon
Начиная с 2020 года Mac постепенно перешли с процессоров Intel (x86_64) на собственные чипы Apple Silicon (arm64). Ядро собирается отдельно под каждую архитектуру, и сборки не взаимозаменяемы. Посмотрите строку «Чип» или «Процессор» в разделе «Об этом Mac» либо выполните в терминале:
uname -m
Вывод x86_64 — берите сборку amd64, вывод arm64 — сборку arm64. Оба варианта mihomo v1.19.29 лежат в центре загрузок в виде сжатых файлов .gz. Подробнее о различиях платформ — в статье про Intel и Apple Silicon.
Распаковка, права и снятие карантина
Файл скачивается сжатым, поэтому его нужно распаковать, сделать исполняемым и снять атрибут карантина, который macOS вешает на всё загруженное из сети:
cd ~/Downloads
gunzip mihomo-darwin-arm64-v1.19.29.gz
chmod +x mihomo-darwin-arm64-v1.19.29
xattr -dr com.apple.quarantine mihomo-darwin-arm64-v1.19.29
Имя файла подставьте своё. Без последней команды Gatekeeper при первом запуске сообщит, что программу невозможно проверить: это не поломка файла, а стандартная реакция системы на приложение без нотаризации. Альтернативный путь — разрешить запуск в «Системных настройках» → «Конфиденциальность и безопасность».
Проверить, остался ли на файле карантин, можно командой xattr -l имя_файла: если в выводе больше нет строки com.apple.quarantine, атрибут снят. Порядок действий тоже важен — сначала распаковка, потом права и карантин. Атрибут висит на скачанном архиве и переходит на извлечённый файл, поэтому снимать его до gunzip бессмысленно.
Осторожно. Снятие карантина — это ручное подтверждение доверия к конкретному файлу. Применяйте его только к тому, происхождение чего вам понятно, и не превращайте в привычку для всего скачанного.
Размещение и первый запуск
- Перенесите бинарник в каталог, который есть в
PATH, и дайте ему короткое имя:sudo mv mihomo-darwin-arm64-v1.19.29 /usr/local/bin/mihomo - Создайте каталог данных и положите туда конфигурацию:
mkdir -p ~/.config/mihomo nano ~/.config/mihomo/config.yaml - Проверьте конфигурацию до запуска — ядро укажет строку с ошибкой, если она есть:
mihomo -t -f ~/.config/mihomo/config.yaml - Запустите ядро, передав каталог данных параметром
-d:mihomo -d ~/.config/mihomo
На Mac с Apple Silicon каталога /usr/local/bin может не оказаться — он не создаётся системой по умолчанию. Если mv сообщает, что каталога нет, создайте его командой sudo mkdir -p /usr/local/bin и повторите перенос. Проверить, что путь подхватился оболочкой, поможет which mihomo: команда должна вывести полный путь к бинарнику.
Лог пишется прямо в окно терминала: видно загрузку правил, поднятые порты и входящие соединения. Пока окно открыто, ядро работает; закроете — прокси остановится. Остановить ядро корректно можно сочетанием Ctrl+C. Из каких секций состоит сам файл, разобрано во введении в конфигурацию mihomo.
Проверка, что прокси работает
Посмотрите в конфигурации значение mixed-port — это порт, который принимает и HTTP-, и SOCKS-соединения (в готовых профилях встречаются и 7890, и 7897). Подставьте его в проверочный запрос из соседнего окна терминала:
curl -x http://127.0.0.1:7890 -I https://example.com
Ответ с кодом состояния означает, что цепочка работает. Чтобы через прокси пошли обычные приложения, включите его в «Системных настройках» → «Сеть» → «Прокси» для активного интерфейса либо задайте переменные окружения для конкретной программы:
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
Переменные действуют только в текущем окне терминала и исчезают вместе с ним — это скорее плюс: легко сравнить поведение программы с прокси и без него. У двух способов разная область действия, и путать их не стоит. Настройки в «Сети» применяются к приложениям, которые читают системный прокси; переменные окружения — только к процессам, запущенным из этой сессии оболочки. Программы, игнорирующие и то и другое, перехватываются лишь режимом TUN, а его настройка из командной строки заметно сложнее, чем нажатие переключателя в графическом клиенте.
Автозапуск через launchd
Чтобы не держать терминал открытым, оформите ядро как пользовательский агент launchd. Создайте файл ~/Library/LaunchAgents/com.mihomo.core.plist:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.mihomo.core</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/mihomo</string>
<string>-d</string>
<string>/Users/username/.config/mihomo</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
Замените username на своё имя пользователя: launchd не понимает сокращение ~, путь должен быть абсолютным. Загрузите агент командой:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.mihomo.core.plist
Выгружается он симметрично — launchctl bootout gui/$(id -u)/com.mihomo.core. После правки plist агент нужно выгрузить и загрузить заново.
Ключ RunAtLoad запускает ядро при входе в систему, KeepAlive поднимает его после неожиданного завершения. Убедиться, что агент зарегистрирован, можно командой launchctl list | grep mihomo. Главная плата за фоновый режим — потеря вывода: лог больше не видно. Поэтому в plist обычно добавляют перенаправление в файлы, иначе разбираться в причинах сбоя будет не по чем:
<key>StandardOutPath</key>
<string>/tmp/mihomo.out.log</string>
<key>StandardErrorPath</key>
<string>/tmp/mihomo.err.log</string>
Обратите внимание: пользовательский агент стартует при входе в систему, а не при загрузке компьютера, и работает от вашей учётной записи. Для домашней машины это ровно то, что нужно; постоянно работающий прокси, не зависящий от сеанса, — это уже задача для сервера.
Совет. Пока конфигурация не устоялась, запускайте ядро вручную в терминале: так ошибки видны сразу. Переводите его под launchd, только когда всё работает стабильно.
Обновление и удаление
Обновление — это замена одного файла: остановите ядро, распакуйте новую версию, снимите карантин и положите её на место старой. Каталог данных с config.yaml при этом сохраняется. Удаление столь же простое: выгрузите агент launchd, удалите /usr/local/bin/mihomo и каталог конфигурации, а затем не забудьте выключить прокси в системных настройках сети — иначе система продолжит стучаться на несуществующий локальный порт.