Сломана установка 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) сильно влияло на результат.
Общая картина
Проблема возникла из-за комбинации факторов:
-
Нестабильная работа ynh_nodejs_install: Не всегда корректно устанавливал Yarn или использовал системный Yarn вместо нужной версии.
-
Конфликты Yarn: Разные версии (или их отсутствие) и вмешательство Corepack ломали стандартный вызов команд.
-
Жёсткость скрипта: Отсутствие гибкости и обработки ошибок в скрипте PeerTube делало его уязвимым к сбоям.
-
Особенности YunoHost 12: Возможные изменения в управлении зависимостями или путями в новой версии YunoHost.
No Comments