Запускаем MarkText на FreeBSD
Очередные ужасы из тяжкой жизни пользователей BSD или что делать, когда нужная программа ненавидит вашу операционную систему.
В помощь начинающему, продолжающему и заканчивающему автору.
Очко электрона
Следующим по уровню безнадежности занятием на FreeBSD, после нейросетей и разработки на .NET является работа с приложениями на Electron.
Широкие народные массы требуют это и уже очень давно:
Но ввиду разных причин (в первую очередь идеологических), официальной поддержки все также нет.
И скорее всего не будет никогда.
Зато есть неофициальный форк, который успешно заехал в пакетную базу и довольно давно там живет.
Как можно заметить из истории коммитов выше — идет активная разработка и прием пул-реквестов.
Electron это фреймворк для построения десктоп-приложений с помощью одноименного движка.
Но портировали на FreeBSD только движок Electron, без средств сборки конечных приложений на нем.
Речь в первую очередь про electron-builder:
A complete solution to package and build a ready for distribution Electron, Proton Native app for macOS, Windows and Linux with “auto update” support out of the box.
Это не означает, что приложение на Electron не будет работать на FreeBSD совсем, но и не значит, что полноценная разработка таких приложений там возможна.
Немного работает — так это обычно описывают.
MarkText
MarkText это такой редактор для Markdown-разметки, один из самых лучших, известных и популярных:
A simple and elegant open-source markdown editor that focused on speed and usability.
Именно его я использую для верстки своих статей и документации.
К сожалению редактор построен на том самом Electron, поэтому для нормальных людей, не отягощенных двумя десятилетиями разработки нет вариантов его использования на FreeBSD — ни в Wine, ни с помощью слоя совместимости с Linux эта штука не работает.
Хотя пожелания есть:
Скотская сборка
Как бы это ни было удивительно, но Node.js и npm давно и успешно работают во FreeBSD, поэтому все спокойно устанавливается из пакетов:
pkg install node25 electron37 npm-node25
git clone --depth 1 https://github.com/marktext/marktext.git
Активная разработка по какой-то причине остановлена, народ начинает беспокоиться, поэтому я не стал заморачиваться релизными версиями и собирал из текущей ветки.
Сборка использует еще один пакетный менеджер — yarn, который необходимо установить с помощью npm:
npm -g i yarn
Дальше начинается первый нюанс:
необходимо отключить скачивание бинарной сборки Electron, поскольку ее не существует для FreeBSD.
Перед запуском скачивания зависимостей, необходимо выставить специальную переменную:
export ELECTRON_SKIP_BINARY_DOWNLOAD=1 yarn install
Через какое-то время (скачивание зависимостей в проекте на Node.js — очень долгий и болезненный процесс) в корневом каталоге должна появиться папка node_modules откровенно скотских размеров:
Следующим шагом необходимо убрать искусственную заглушку, вставленную автором MarkText для того чтобы редактор не пытались запускать там где не надо — частая практика для проектов на Electron.
В файле src/main/index.jsесть вот такой замечательный код:
// NOTE: We only support Linux, macOS and Windows but not BSD nor SunOS.
if (!/^(darwin|win32|linux)$/i.test(process.platform)) {
process.stdout.write(`Operating system "${process.platform}" is not supported! Please open an issue at "https://github.com/marktext/marktext".\n`)
process.exit(1)
}Не представляю кто смог упороться до такой степени, чтобы гонять десктоп-приложение на Electron на Солярисе, но думаю не будет откровением, что вызов process.exit(1) необходимо закомментировать для продолжения банкета.
Теперь переходим к собственно сборке.
Штатно сборка MarkText происходит вызовом команды yarn build, но если посмотреть внутрь файла package.json, в котором находятся все команды сборки, увидим:
.. "build": "node .electron-vue/build.js && electron-builder", ..
Вызов electron-builder очевидно упадет, поскольку он не был портирован на FreeBSD и плотно завязан на готовые бинарные части и ветвления логики под конкретную поддерживаемую ОС.
Так что вызываем лишь первую часть, причем вручную (без всяких yarn):
node .electron-vue/build.js
Должен отработать webpack, sass и в каталоге dist будет находиться готовое к запуску приложение на Electron.
К сожалению в «обнаженном» виде, без прилепленного рантайма, что однако никак не мешает его запустить:
electron37 dist/electron/main.js
Так выглядит запущенный MarkText на FreeBSD, в работе над английскими версиями статей:
Для удобства использования можно перенести каталоги dist и node_modules в отдельное место:
И запускать вот таким скриптом:
#!/bin/sh /usr/local/bin/electron37 dist/electron/main.js
Готовый архив со сборкой можно скачать в нашем Телеграм-канале.