Тестирование менеджера зависимостей для MoonLoader

FYP

Известный
Автор темы
Администратор
1,763
5,911
TL;DR: Чтобы помочь в тестировании, скачайте файлы из вложений, распакуйте содержимое архива в папку moonloader и скопируйте скрипт туда же. Запустите игру и согласитесь на первый запрос установки, затем на следующий, он должен выдать ошибку. Если что-то пошло не так, пожалуйста, сообщите об этом в теме. И временно отключите AntiStealer, он блокирует работу установщика.

Это предрелиз менеджера зависимостей для MoonLoader, который после тщательного тестирования станет обязательным компонентом дистрибутива MoonLoader. Он реализован на основе LuaRocks - широко распространённого пакетного менеджера для Lua. Такой выбор был сделан по двум причинам: во-первых, LuaRocks - готовый и проверенный проект, он имеет всю необходимую функциональность и даже больше; во-вторых, на данный момент на сервер LuaRocks загружено 2300 модулей, которые можно устанавливать через этот менеджер зависимостей.
Предназначен он только для установки библиотек и не реализовывает систему автообновления и автоустановки скриптов.

Составляющие
Проект состоит из нескольких компонентов, все они необходимы для работы менеджера зависимостей:
  • настроенный пакетный менеджер LuaRocks. Он запускается из модуля deps.lua при установке зависимостей, но его также можно использовать отдельно через терминал
  • модуль deps.lua - основной модуль установщика зависимостей, сверяет наличие требуемых библиотек и устанавливает их из интернета при необходимости
  • предустановленные библиотеки luafilesystem, luasec, luasocket, lzlib, md5, mimetypes - необходимы для работы LuaRocks, но поскольку они установлены в стандартную папку для библиотек, их можно использовать в своих скриптах. Удаление любого из этих модулей или неправильная переустановка нарушат работу установщика
  • LuaJIT с SDK - интерпретатор LuaJIT необходим для запуска LuaRocks в отдельном процессе, а его SDK требуется для компиляции модулей из исходников. Запустить можно скриптом lua.bat из папки luajit

Установка
Установить MoonLoader v.027.

Использование
Запросить зависимости из скрипта можно так:
Lua:
require 'deps' {
  'inspect', -- первая зависимость
  'penlight', -- вторая
  -- и так далее сколько угодно
}
-- далее нужно загрузить модули этих библиотек как обычно через require
При выполнении этого кода исполнение скрипта и загрузка игры будут приостановлены и пользователю будет показано окно с вопросом согласия на установку. В случае отказа или ошибок при установке, скрипт будет завершён.
Установка модулей производится только когда требования скрипта не удовлетворены, проверка и установка осуществляются по следующим критериям:
  • если требуемая версия не указана и пакет не установлен, устанавливается последняя версия
  • если требуемый пакет установлен, а версия не указана, ничего не устанавливается (даже при наличии на сервере более новой)
  • когда версия указана, но установлена версия старее требуемой, устанавливается пакет именно запрошенной версии
  • и ничего не устанавливается, если версия указана, но установлен пакет более новой версии
Т.е. у пользователя всегда будет установлена самая новая из версий, запрошенных скриптами.
Версия указывается через символ @ после названия пакета. Помимо версии также можно указать сервер перед названием пакета через символ : . Сервер может быть записан в короткой форме - тогда он будет означать имя пользователя на сайте luarocks.org, или длинной форме - полный адрес rocks-сервера. Указанный сервер будет приоритетным при поиске запрошенного пакета.
Пример с применением всех параметров:
Lua:
require 'deps' {
  'fyp:lume@2.3.0-1', -- то же самое что и
  'http://luarocks.org/manifests/fyp:lume@2.3.0-1'
}

К сожалению, у всей этой системы есть один досадный недостаток - невозможно устанавливать dll-модули из исходников (а они как правило только в форме исходников и распространяются), потому что для этого требуются инструменты разработки, которые очевидно у обычных пользователей не установлены. Однако LuaRocks позволяет загружать на сервер бинарные (скомпилированные) пакеты, которые устанавливаются безо всяких проблем. Это добавляет возни с ними, но зато решает проблему.
Репортить о том, что у вас не устанавливается dll-модуль из исходников не нужно - это не баг.
Я вскоре залью некоторые важные библиотеки, и инструкцию по сборке и заливу бинарных пакетов тоже сделаю, если кто-то попросит.

Создание пакета и загрузка его на luarocks.org
Если у вас есть своя библиотека, которую вы хотели бы добавить в систему LuaRocks.
Фрагмент с созданием git-репозитория необязателен, исходники можно запаковать в zip-архив и залить куда угодно, а в файле .rockspec в значение переменной source.url указать прямую ссылку на этот архив.
Код:
git clone https://gitlab.com/THE-FYP/moonloader-bind.git
cd moonloader-bind
../../luarocks/luarocks.bat write_rockspec moonloader-bind 1.0.0 . --lua-versions=5.1,5.2,5.3
git add -A
git commit -m "Add source and rockspec"
git tag v1.0.0
git push && git push --tags
../../luarocks/luarocks.bat pack moonloader-bind-1.0.0-1.rockspec
На сайте luarocks есть недочёт, который не был учтён в видео - файл .src.rock не заливается вместе с .rockspec, его надо заливать отдельно для каждой версии пакета.
Обратите внимание, что после загрузки пакета на luarocks.org, он удаляется из манифеста "root" - это важно сделать, чтоб модули, созданные для MoonLoader, не были доступны для установки тем, кому они не нужны. Если ваш модуль универсальный и выполнен качественно, удалять его из манифеста конечно же нет нужды.

Тестирование
Менеджер зависимостей будет добавлен в состав MoonLoader только после основательного тестирования и устранения всех серьёзных проблем, ведь в противном случае разработчики будут избегать его использования из-за нестабильности.
Проверить необходимо следующее:
  • интерфейс (выводится ли окно запроса установки, нет ли трудностей во взаимодействии с ним)
  • установку зависимостей (устанавливаются ли все файлы из пакета; загружаются ли установленные модули через require)
  • проверку установленных зависимостей (ошибочный запрос подтверждения установки при наличии этих зависимостей; проверка требуемых версий; ошибки при проверке)
  • не нарушается ли работа игры (вылеты и зависания при старте; ненормальное поведение окна игры)
  • не нарушается ли работа Lua скриптов
  • работу на Windows XP
Тестовый скрипт во вложении позволяет проверить все эти пункты. При согласии на второй запрос этот скрипт должен выводить ошибку.
Сообщить о проблеме можно в этой теме или на GitHub, желательно подробно и обязательно с текстом или скриншотом ошибки.

Известные проблемы
  • для Windows XP не реализована функция изменения прав доступа к созданным и скачанным файлам. Для большинства систем это несущественно, но в редких случаях это может быть причиной проблем установки модулей
 
Последнее редактирование:

wD.D159

Известный
Друг
446
480
То есть теперь, если делаешь проект на LUA, то при отсутствии каких либо модулей, можно будет их загружать, при отсутствии, автоматически с удаленного сервера? Правильно понял?
 

FYP

Известный
Автор темы
Администратор
1,763
5,911
То есть теперь, если делаешь проект на LUA, то при отсутствии каких либо модулей, можно будет их загружать, при отсутствии, автоматически с удаленного сервера? Правильно понял?
если я правильно понял твой вопрос - да
 

FYP

Известный
Автор темы
Администратор
1,763
5,911
у некоторых ошибки на новых версиях, а на старой версии все норм.
если это ошибки типов, то проблемы в скриптах и это легко исправляется
но так или иначе, старые версии я заливать не буду, могу разве что сделать обнову moon imgui с исправлением багов
 

k0lenval

Известный
133
111
Наконец-то исчезнут вопросы вроде "А я всё поставил, но у меня не работает!!!!"
Test: при запуске игры - черный экран и курсор, сообщение об установке где-то позади, сперва подумал, что игра зависла, пока не нашел это сообщение.
ОС: Win7x64
 
Последнее редактирование:

deddosouru

Смотрю аниме, служу Сатане
Друг
2,036
1,323
я чота нажал и оно сломалось :С
крч. закинул всё это вот, выскочило окошко
fc8b93b3b3.png

тыцнул да, и дальше запустилась консоль которая нихера не делала, и жта которая не отвечала. это баг или фича?
упд1: снова все то-же самое, но на этот раз я закрыл консоль и вылетела ошибка что не удалось скочать лайтпен. игру попустило и всё запустилось
упд2: переключился с класичесской темы виндофс на это ваше аеро, схема та-же.
зы: Windows 7 Max x86 SP1
 
Последнее редактирование:

Шурик

Активный
216
43
Чтобы помочь в тестировании, скачайте файлы из вложений, распакуйте содержимое архива в папку moonloader и скопируйте скрипт туда же. Запустите игру и согласитесь на первый запрос установки, затем на следующий, он должен выдать ошибку. Если что-то пошло не так, пожалуйста, сообщите об этом в теме. И временно отключите AntiStealer, он блокирует работу установщика.
Всё гуд (версия 26-5b, win 10).
Попытался даже закачать некоторые либы и всё успешно.
Единственное, что смущает так это только появление консоли и иногда загрузка может идти более минуты (при этом всё зависает)
 

cover

Известный
Проверенный
245
268
Всё гуд (версия 26-5b, win 10).
Попытался даже закачать некоторые либы и всё успешно.
Единственное, что смущает так это только появление консоли и иногда загрузка может идти более минуты (при этом всё зависает)
По поводу времени загрузки, скорее всего, это нормально. По поводу зависания, это не зависание, а просто потеря фокуса. Можно нажать клавишу windows или открыть диспетчер задача. Это из-за того, что игра открывается в фулл скрине.
 

FYP

Известный
Автор темы
Администратор
1,763
5,911
Наконец-то исчезнут вопросы вроде "А я всё поставил, но у меня не работает!!!!"
Test: при запуске игры - черный экран и курсор, сообщение об установке где-то позади, сперва подумал, что игра зависла, пока не нашел это сообщение.
ОС: Win7x64
так, ты уже не первый с такой проблемой. надо бы как-то выяснить чем она вызвана. какие клео плагины и аси скрипты установлены?
я чота нажал и оно сломалось :С
крч. закинул всё это вот, выскочило окошко
fc8b93b3b3.png

тыцнул да, и дальше запустилась консоль которая нихера не делала, и жта которая не отвечала. это баг или фича?
упд1: снова все то-же самое, но на этот раз я закрыл консоль и вылетела ошибка что не удалось скочать лайтпен. игру попустило и всё запустилось
упд2: переключился с класичесской темы виндофс на это ваше аеро, схема та-же.
зы: Windows 7 Max x86 SP1
в консоль не должно ничего выводиться, а раз ошибка вылезла об установке penlight, скорее всего процесс установки шёл, просто ты не дождался окончания. у меня установка этих четырёх пакетов занимает около минуты.
Единственное, что смущает так это только появление консоли и иногда загрузка может идти более минуты (при этом всё зависает)
появление консоли связано с запуском процессов изменяющих права доступа к установленным файлам, для всего остального в луарокс используются модули, а для этой цели готового модуля нет (я не нашёл). думаю имеет смысл сделать его и использовать вместо запуска процессов, ведь именно это как раз значительно замедляет установку. в общем, посмотрим, но пока что так.
 

k0lenval

Известный
133
111
так, ты уже не первый с такой проблемой. надо бы как-то выяснить чем она вызвана. какие клео плагины и аси скрипты установлены?
Специально убрал всё лишнее: клео, плагины asi и sampfuncs, даже попробовал на другой копии игры(чистой) - проблема осталась.