Делаем pkgsrc для сервера Minecraft
Содержание
Скачивание jar
Скачать сервер Minecraft можно на официальном сайте: www.minecraft.net. Внизу сайта нужно найти ссылку Загрузить. На странице Серверное ПО - Сервер Java Edition находим и копируем ссылку Загрузи minecraft_server..jar.
Создание заготовки pkgsrc
Создадим каталог нового pkgsrc в имеющемся дереве:
$ cd /usr/pkgsrc/games
$ mkdir minecraft-server
$ cd minecraft-server
Сгенерируем заготовку pkgsrc из ссылки:
$ url2pkg https://piston-data.mojang.com/v1/objects/8dd1a28015f51b1803213892b50b7b4fc76e594d/server.jar
В текущем каталоге открываем на редактирование файл DESCR
и вписываем в него краткое описание сервера Minecraft, взятое из статьи Wikipedia, найденной через поисковый сервис по тексту "minecraft server":
A Minecraft server is a player-owned or business-owned multiplayer game server for the 2009 Mojang Studios video game Minecraft. In this context, the term "server" often colloquially refers to a network of connected servers, rather than a single machine.
Открываем файл Makefile
и вводим описание будущего пакета:
MAINTAINER= vladimir@stupin.su
HOMEPAGE= https://minecraft.fandom.com/wiki/Server
COMMENT= A multiplayer game server for video game Minecraft
LICENSE= eula
В качестве домашней страницы программы я указал wiki-страницу сервера на сайте фанатов игры Minecraft, т.к. не нашёл официальной страницы с подробной документацией. В качестве лицензии указал eula, хотя такой лицензии нет среди списка типовых лицензий pkgsrc.
Коррекция скачивания
Затем я откорректировал имя пакета, имя архива с исходными текстами, в роли которого в данном случае выступает скомпилированный архив с расширением jar
, ссылку на скачивание этого архива:
PKGNAME= minecraft-server-1.20.4
CATEGORIES= games
DISTFILE_TAG= 8dd1a28015f51b1803213892b50b7b4fc76e594d
DISTNAME= ${PKGNAME}-${DISTFILE_TAG}
EXTRACT_SUFX= .jar
MASTER_SITES= -https://piston-data.mojang.com/v1/objects/${DISTFILE_TAG}/server.jar
Хэш, кодирующий версию архива, я вынес в отдельную переменную для того, чтобы не указывать её в ссылке на скачивание архива и в имени скачанного архива.
После того, как имя архива изменилось с server.jar
на minecraft-server.jar
, нужно обновить имя этого файла и его контрольную сумму в файле distinfo
. Для этого выполним соответствующую команду:
$ make distinfo
Зависимость от Java
Добавляем в Makefile
фреймворк для обработки Java-приложений перед последней строчкой:
.include "../../mk/java-vm.mk"
И отмечаем в Makefile
, что Java требуется только для запуска пакета, а не для его запуска:
USE_JAVA= run
Отмечаем, что требуется Java не ниже версии 17:
USE_JAVA2= 17
Благодаря этой строчке в зависимости пакета пропишется пакет с Java Runtime Environment. Если вместо ключевого слова run
указать yes
, то в сборочные зависимости пакета пропишется пакет с Java Development Kit.
Сборка
Поскольку собирать из исходных текстов ничего не нужно, то файл с расширением jar
можно сразу установить в систему. На этапе, соответствующем сборке двоичных файлов из архива с исходными текстами, я выполню переименование файла с расширением jar
. Для этого я поместил в Makefile
такие строки:
do-build:
${MV} ${WRKSRC}/${DISTNAME}${EXTRACT_SUFX} ${WRKSRC}/${PKGBASE}${EXTRACT_SUFX}
Создаём подкаталог files
и помещаем в него файл LICENSE
с текстом, взятым по ссылке eula.
Установка
Теперь нам остаётся только переместить двоичный файл с расширением jar
и текст лицензии в соответствующие каталоги. Для этого я добавил в Makefile
переменную со списокм каталогов, в которые будет выполняться установка файлов:
INSTALLATION_DIRS= share/doc/${PKGBASE} lib/${PKGBASE}
И добавил в Makefile
правило установки файлов пакета в систему:
do-install:
${INSTALL_DATA} ${FILESDIR}/LICENSE ${DESTDIR}${PREFIX}/share/doc/${PKGBASE}/
${INSTALL_LIB} ${WRKSRC}/${PKGBASE}${EXTRACT_SUFX} ${DESTDIR}${PREFIX}/lib/${PKGBASE}/
Сборка пакета
Попробуем собрать пакет:
$ make package
Поскольку файл PLIST
ещё пуст, предыдущая команда сообщит о несоответствии файлов, полученных в результате сборки, списку файлов, указанных в файле PLIST
. Исправим файл PLIST
, внеся в него актуальный список файлов:
$ make print-PLIST > PLIST
Теперь можно ещё раз попробовать собрать пакет:
$ make package