Skip to main content

Сломана установка PeerTube в Yunohost (на февраль 2025) - что делать?

1. Установите Node.js и Yarn:

 

sudo -i
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
npm install -g yarn@1.22.22
export PATH=$PATH:/usr/lib/node_modules/yarn/bin

yarn --version # Должно работать без указания полного пути


echo 'export PATH=$PATH:/usr/lib/node_modules/yarn/bin' >> /root/.bashrc
source /root/.bashrc

2. Проверьте версии:

node --version
npm --version
yarn --version

3. Запустите установку с правкой скрипта:

Теперь, когда Node.js и Yarn предустановлены, скорректируем скрипт, чтобы он использовал наш Yarn 1.22.22:
-- Запустите установку и остановитесь

sudo -i
yunohost app install peertube

Дождитесь запроса параметров (домен, путь), но не завершайте.

-- Найдите временный каталог

ls -d /var/cache/yunohost/app_tmp_work_dirs/*

-- Отредактируйте install

nano /var/cache/yunohost/app_tmp_work_dirs/app_<идентификатор>/scripts/install

Исправьте блок сборки: Найдите:

pushd "$install_dir"
ynh_hide_warnings ynh_exec_as_app yarn config set network-timeout 300000
ynh_hide_warnings ynh_exec_as_app yarn install --production --pure-lockfile
ynh_hide_warnings ynh_exec_as_app yarn cache clean
popd

Замените на:

pushd "$install_dir"
ynh_exec_as_app /usr/lib/node_modules/yarn/bin/yarn config set network-timeout 300000 || true
ynh_exec_as_app /usr/lib/node_modules/yarn/bin/yarn install --production --pure-lockfile || true
ynh_exec_as_app /usr/lib/node_modules/yarn/bin/yarn cache clean || true
popd

Исправьте блок плагинов: Найдите:

pushd "$install_dir"
ynh_hide_warnings ynh_exec_as_app NODE_CONFIG_DIR="$install_dir/config" NODE_ENV=production npm run plugin:install -- --npm-name peertube-plugin-auth-ldap
ynh_hide_warnings ynh_exec_as_app NODE_CONFIG_DIR="$install_dir/config" NODE_ENV=production npm run plugin:install -- --npm-name peertube-plugin-livechat
echo "$admin_pass" | ynh_hide_warnings ynh_exec_as_app NODE_CONFIG_DIR="$install_dir/config" NODE_ENV=production npm run reset-password -- -u root
popd

Замените на:

pushd "$install_dir"
ynh_exec_as_app /usr/lib/node_modules/yarn/bin/yarn add peertube-plugin-auth-ldap@0.0.14 || true
ynh_exec_as_app /usr/lib/node_modules/yarn/bin/yarn add peertube-plugin-livechat@0.5.2 || true
echo "$admin_pass" | ynh_exec_as_app NODE_CONFIG_DIR="$install_dir/config" NODE_ENV=production npm run reset-password -- -u root || true
popd

Сохраните (Ctrl+O, Enter, Ctrl+X).

4. Продолжите установку

Введите параметры и дождитесь завершения.

--------------------------------------------------------------------------

После этого нужно дать права на каталог с PeerTube, информация об этом здесь
https://pixelfed.nbics.net/books/u-2-peertube/page/vosstanovlenie-prav-na-katalog-peertube-v-yunohost

================================================

================================================

Основные причины проблем



1. Несогласованность версий и путей Yarn



  • Что произошло: В большинстве случаев ошибки возникали из-за того, что скрипт установки PeerTube (install) вызывал Yarn из неправильного пути или с некорректной версией. Например:

    • [Errno 21] Is a directory: 'config' — Yarn интерпретировал config как файл, а не подкоманду.

    • [Errno 2] No such file or directory: 'add' — команда yarn add не распознавалась.

     

  • Почему:

    • YunoHost использует ynh_nodejs_install, который устанавливает Node.js в /opt/node_n/n/versions/node/20/, но не всегда устанавливает Yarn туда же. Вместо этого скрипт полагается на Yarn из системного PATH, который мог быть либо не установлен, либо отличаться по версии.

    • На разных системах Yarn мог быть предустановлен (например, через apt или старую версию npm), и его версия (например, < 1.22.22) не поддерживала команды или флаги, ожидаемые скриптом (--production, add).

    • Corepack (часть Node.js для управления пакетными менеджерами) мог вмешиваться, пытаясь подменить Yarn своим шимом (/usr/lib/node_modules/corepack/shims/yarn), что приводило к конфликтам.

     

  • Итог: Разные системы имели разное состояние Yarn (отсутствие, устаревшая версия, конфликт с Corepack), и скрипт не был готов к такой вариативности.


2. Специфика YunoHost 12



  • Что произошло: На одном компьютере установка работала без проблем, на другом требовались предустановка Node.js и Yarn, а на третьем возникали ошибки даже после этого.

  • Почему:

    • YunoHost 12 (основанный на Debian 12) мог изменить способ управления зависимостями или их предустановки по сравнению с предыдущими версиями. Например, в более старых версиях Yarn мог автоматически устанавливаться с Node.js, а в 12-й этого не происходило.

    • Обновления пакетов в Debian 12 (например, npm или системные библиотеки) могли повлиять на поведение ynh_nodejs_install, что привело к нестабильной установке Node.js/Yarn внутри скрипта.

    • Возможны различия в конфигурации YunoHost (например, настройки PATH, политики безопасности, или предустановленные пакеты), которые не были учтены в скрипте PeerTube.

     

  • Итог: YunoHost 12, вероятно, имеет более строгую или изменённую логику зависимостей, что требует ручной подготовки среды.


3. Неполная обработка ошибок в скрипте



  • Что произошло: Скрипт установки PeerTube завершался с ошибкой при любом сбое Yarn (например, [Errno 21], [Errno 2]), вместо того чтобы продолжать выполнение.

  • Почему:

    • Оригинальный скрипт не был рассчитан на вариативность окружения (разные версии Yarn, отсутствие Yarn в PATH, конфликты с Corepack).

    • Отсутствие || true или других механизмов обработки ошибок делало установку уязвимой к мелким сбоям, которые не критичны (например, yarn cache clean или установка плагинов).

    • Разработчики могли предполагать, что ynh_nodejs_install всегда обеспечит нужную версию Yarn, но это не срабатывало стабильно.

     

  • Итог: Скрипт недостаточно гибок и не готов к нестандартным ситуациям, что вынудило нас вручную исправлять каждый шаг.


4. Конфликт с директорией config



  • Что произошло: Ошибка [Errno 21] Is a directory: 'config' возникала из-за того, что Yarn путал подкоманду config set с попыткой открыть директорию /var/www/peertube/config.

  • Почему:

    • В распакованных исходниках PeerTube есть директория config, и если Yarn вызывался из неправильного контекста или с багом в версии, он пытался интерпретировать config как путь, а не команду.

    • Это могло быть связано с багом в Yarn < 1.22.22 или с тем, как Corepack/системный Yarn обрабатывал аргументы в рабочем каталоге /var/www/peertube.

     

  • Итог: Специфическая проблема Yarn в сочетании с неподготовленным скриптом создала первый крупный барьер.


5. Различия в начальном состоянии систем



  • Что произошло: На одном компьютере PeerTube ставился без проблем, на других — нет.

  • Почему:

    • Рабочий компьютер уже имел предустановленный Yarn 1.22.22, корректно интегрированный в PATH, что избежало конфликтов.

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

    • Разные версии npm или системных библиотек могли влиять на то, как ynh_nodejs_install устанавливал зависимости.

     

  • Итог: Начальное состояние системы (наличие/отсутствие Yarn, его версия, PATH) сильно влияло на результат.


Общая картина



Проблема возникла из-за комбинации факторов:



  1. Нестабильная работа ynh_nodejs_install: Не всегда корректно устанавливал Yarn или использовал системный Yarn вместо нужной версии.

  2. Конфликты Yarn: Разные версии (или их отсутствие) и вмешательство Corepack ломали стандартный вызов команд.

  3. Жёсткость скрипта: Отсутствие гибкости и обработки ошибок в скрипте PeerTube делало его уязвимым к сбоям.

  4. Особенности YunoHost 12: Возможные изменения в управлении зависимостями или путями в новой версии YunoHost.