Запускаем MarkText на FreeBSD

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Очередная история из тяжкой жизни пользователей BSD или что делать, когда нужная программа ненавидит вашу операционную систему.

В помощь начинающему, продолжающему и заканчивающему автору.

В качестве пруфа.
В качестве пруфа.

Электронные ужасы

Следующим по уровню безнадежности занятием на FreeBSD, после нейросетей и разработки на .NET является работа с приложениями на Electron.

Широкие народные массы требуют это и уже очень давно:

11 лет назад ага.
11 лет назад ага.

Но ввиду самых разных причин (в первую очередь идеологических), официальной поддержки все также нет.

И скорее всего не будет никогда.

Зато есть неофициальный форк, который успешно заехал в пакетную базу и довольно давно там живет. Форк очень даже живой:

Свежие мартовские коммиты.
Свежие мартовские коммиты.

Как можно заметить из истории коммитов выше — идет активная разработка и прием пул-реквестов. Но как обычно есть нюанс:

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 в темном оформлении.

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

Пакетная версия npm в FreeBSD сразу умеет ставить глобальные пакеты в домашний каталог пользователя, поэтому yarn сразу после установки должен быть доступен для вызова:

yarn -v

Дальше начинается первый нюанс:

необходимо отключить скачивание бинарной сборки 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

Готовый архив со сборкой MarkText для FreeBSD можно скачать в нашем Телеграм-канале.

Источник: https://habr.com/ru/articles/1010732/


Интересные статьи

Интересные статьи

Украинская компания *GSC Game World признана нежелательной организацией на территории РФ. Компания известна как разработчик культовой серии игр S.T.A.L.K.E.R., а также таких проектов, как "К...
Раньше у нас была стандартная HR-команда: закрывали вакансии, координировали адаптацию новичков, помогали сотрудникам с развитием и мотивацией. Сейчас мы участвуем в стратегическом планировании и влия...
Представьте, что к вам приходит владелец с видео-концептом новой фичи для клиента, функционал которой отдаленно напоминает космический корабль, а у вас всего два месяца на разработку, и один — на тест...
Всем привет. Если вы когда-либо работали с универсальными списками в Битрикс24, то, наверное, в курсе, что страница детального просмотра элемента полностью идентична странице редак...
В 1С-Битрикс: Управление сайтом (как и в Битрикс24) десятки, если не сотни настраиваемых типов данных (или сущностей): инфоблоки, пользователи, заказы, склады, форумы, блоги и т.д. Стр...