Запуск сервера Nukkit на Android [ROOT]

Doomhawk

Developer
Многие спрашивали, как запустить Nukkit-сервер на Android. Я подумал, почему бы не написать гайд по этой теме. Сразу скажу, это не так то просто. Дело в том, что Android не поддерживает ни JDK, ни JRE, поэтому будем ставить Linux.
Для этого нам необходимо:
1. Смартфон с Android 4.0+.
2. Права ROOT доступа.
3. 2 ГБ свободного места во внутренней памяти (не на карте памяти, а именно во внутренней!).
4. 1+ ГБ ОЗУ.
5. 2 руки, растущие из плеч.

И так, приступим.
1. Для начала скачаем из Google Play следующие программы:
1.1. Terminal Emulator
Скачать из Google Play



1.2. Complete Linux Installer
Скачать из Google Play



1.3. ZArchiver
Скачать из Google Play


Иконка почему-то не загрузилась...


2. Далее открываем Complete Linux Installer. При первом запуске он попросит у нас ROOT права для установки Busybox и необходимых скриптов:


Соглашаемся. Установка длится не более 15 секунд. После этого выходим из Complete Linux Installer.

3. Теперь нам нужно загрузить дистрибутив, пусть это будет Ubuntu 14.04:
3.1. Переходим по этой ссылке, ждем, пока дистрибутив скачается.

4. Заходим в ZArchiver, в корне sdcard создаем папку с названием ubuntu:



4.1. Теперь переходим в директорию, в которой у Вас хранятся скачанные файлы, у меня это Downloads.
4.2. Находим там файл "ubuntu-14.04.CORE.ext4.PREALPHAv1.zip", нажмите на него, и у Вас появится следующее меню:



4.3. Нажимаем "Распаковать..." и переходим в ранее созданную директорию "ubuntu", а затем нажимаем на следующий значок:



4.4. Дожидаемся распаковки.
4.5. Переименовываем файл "ubuntu-14.04.CORE.ext4.img" в "ubuntu.img", а файл "ubuntu-14.04.CORE.ext4.img.md5" в "ubuntu.img.md5":


ZArchiver нам больше не понадобится, можете его удалить, если он Вам не нужен.

5. Опять заходим в Complete Linux Installer, свайпаем вправо, открывается меню:



5.1. Нажимаем "Запуск", в появившемся меню выбираем дистрибутив "Ubuntu":



5.2. Нажимаем "Запустить Linux", и у нас открывается ранее скачанный "Terminal Emulator":



5.3. При первом запуске нам будут задавать разные вопросы, на первый вопрос "MD5 file found, use to check .img file?" отвечаем n (No).
5.4. У меня появилась ошибка "can't execute '/root/init.sh': Permission denied":



Не уверен, что такая ошибка вылезет у всех, но на всякий случай выложу решение:
Здесь же выполняем команду:
Code:
mv /data/data/com.zpwebsites.linuxonandroid/files/busybox /data/data/com.zpwebsites.linuxonandroid/files/busybox.bak

После этого нажимаем "Окно 1" и крестик. Терминал закрывется, заходим в Complete Linux Installer и опять нажимаем "Запуск Linux"

Эврика! Ошибка исчезла!



5.5. Теперь у нас просят задать пароль (Enter new UNIX password). Вводим любой пароль
ВНИМАНИЕ! При вводе пароля он отображаться не будет, будто вы вообще его не вводите, но на самом деле это просто система защиты, и пароль на самом деле вводится.
5.6. После этого нас просят повторите пароль, здесь все понятно.
5.7. На вопросы "Start VNC server?" и "Start SSH server?" отвечаем n (No), а на вопрос "Save settings as defaults?" отвечаем y (Yes).
5.8. Отлично! Появилась надпись root@localhost! Linux установлен!



6. Теперь установим Java 8 и сам Nukkit. По очереди выполняем в консоли следующие команды:
Code:
apt-get update
apt-get install software-properties-common python-software-properties -y
add-apt-repository ppa:openjdk-r/ppa -y
apt-get update
apt-get install openjdk-8-jdk openjdk-8-jre -y
wget http://ci.mengcraft.com:8080/job/nukkit/lastSuccessfulBuild/artifact/target/nukkit-1.0-SNAPSHOT.jar
java -jar nukkit-1.0-SNAPSHOT.jar
После этого Nukkit успешно запускается :)



И зайти на него можно :)



Ах да, забыл упомянуть, если вы собираетесь выключать Linux, то нужно ввести в терминале команду exit, иначе для повторного запуска придется выполнять все сначала.

Все вопросы, ошибки пишите прямо в этой теме, будем решать вместе

Ну, что хочется сказать, такой способ, конечно, не годится для полноценного сервера (хотя, все зависит от вашего девайса), но для того, чтобы потестить плагины или поиграть с другом вполне сойдет :)

P.S. я писал эту тему 3 часа, надеюсь, вы оцените мой труд :)
 
Last edited:

Doomhawk

Developer
Кстати, забыл упомянуть еще один важный нюанс:
Ваш девайс должен поддерживать loop, к сожалению, список устройств с его поддержкой мне найти не удалось, но с уверенностью можно сказать, что его поддерживают более 95% устройств. Для проверки можно скачать "Loop device checker" с Google Play.
 

fromgate

Administrator
Отличная инструкция. Наверное я тоже попробую ;) Добавил ссылку на эту тему в FAQ по Nukkit.
 

Doomhawk

Developer
Пытаюсь сделать что-то такое, но 99.99% ничего не получится, ибо Java 8 :)


 

Vlad Morozov

Pioneer
Кстати, забыл упомянуть еще один важный нюанс:
Ваш девайс должен поддерживать loop, к сожалению, список устройств с его поддержкой мне найти не удалось, но с уверенностью можно сказать, что его поддерживают более 95% устройств. Для проверки можно скачать "Loop device checker" с Google Play.
Здравствуйте, не подскажите в чем проблема?
Вот лог:
u0_a543@matisse3g:/ $
u0_a543@matisse3g:/ $ cd /sdcard/ubuntu
u0_a543@matisse3g:/sdcard/ubuntu $ su
es.linuxonandroid/files/bootscript.sh /sdcard/ubuntu/ubuntu.img <
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[39]: dirname: not found
MD5 file found, use to check .img file? (y/n)
Checking loop device... FOUND
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[151]: dirname: not found
mount: can't read '/etc/fstab': No such file or directory
mount: mounting /sys/fs/selinux on /data/local/mnt/selinux failed: No such file or directory
mount: mounting /storage on /data/local/mnt/external_sd failed: Invalid argument
No user defined mount points
net.ipv4.ip_forward = 1
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[231]: basename: not found
chroot: can't execute '/root/init.sh': Permission denied
Shutting down Linux ARM
umount: can't umount /data/local/mnt/root/cfg: Invalid argument
umount: can't umount /data/local/mnt/external_sd: Invalid argument
umount: can't umount /data/local/mnt/dev: Invalid argument
umount: can't umount /data/local/mnt/selinux: No such file or directory
1|root@matisse3g:/mnt/shell/emulated/0/ubuntu #
 

Doomhawk

Developer
Здравствуйте, не подскажите в чем проблема?
Вот лог:
u0_a543@matisse3g:/ $
u0_a543@matisse3g:/ $ cd /sdcard/ubuntu
u0_a543@matisse3g:/sdcard/ubuntu $ su
es.linuxonandroid/files/bootscript.sh /sdcard/ubuntu/ubuntu.img <
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[39]: dirname: not found
MD5 file found, use to check .img file? (y/n)
Checking loop device... FOUND
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[151]: dirname: not found
mount: can't read '/etc/fstab': No such file or directory
mount: mounting /sys/fs/selinux on /data/local/mnt/selinux failed: No such file or directory
mount: mounting /storage on /data/local/mnt/external_sd failed: Invalid argument
No user defined mount points
net.ipv4.ip_forward = 1
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[231]: basename: not found
chroot: can't execute '/root/init.sh': Permission denied
Shutting down Linux ARM
umount: can't umount /data/local/mnt/root/cfg: Invalid argument
umount: can't umount /data/local/mnt/external_sd: Invalid argument
umount: can't umount /data/local/mnt/dev: Invalid argument
umount: can't umount /data/local/mnt/selinux: No such file or directory
1|root@matisse3g:/mnt/shell/emulated/0/ubuntu #
Попробуй выполнить команду:
Code:
mv /data/data/com.zpwebsites.linuxonandroid/files/busybox /data/data/com.zpwebsites.linuxonandroid/files/busybox.bak
 

Doomhawk

Developer
Здравствуйте, не подскажите в чем проблема?
Вот лог:
u0_a543@matisse3g:/ $
u0_a543@matisse3g:/ $ cd /sdcard/ubuntu
u0_a543@matisse3g:/sdcard/ubuntu $ su
es.linuxonandroid/files/bootscript.sh /sdcard/ubuntu/ubuntu.img <
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[39]: dirname: not found
MD5 file found, use to check .img file? (y/n)
Checking loop device... FOUND
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[151]: dirname: not found
mount: can't read '/etc/fstab': No such file or directory
mount: mounting /sys/fs/selinux on /data/local/mnt/selinux failed: No such file or directory
mount: mounting /storage on /data/local/mnt/external_sd failed: Invalid argument
No user defined mount points
net.ipv4.ip_forward = 1
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[231]: basename: not found
chroot: can't execute '/root/init.sh': Permission denied
Shutting down Linux ARM
umount: can't umount /data/local/mnt/root/cfg: Invalid argument
umount: can't umount /data/local/mnt/external_sd: Invalid argument
umount: can't umount /data/local/mnt/dev: Invalid argument
umount: can't umount /data/local/mnt/selinux: No such file or directory
1|root@matisse3g:/mnt/shell/emulated/0/ubuntu #
Не CyanogenMod случаем?
 

Vlad Morozov

Pioneer
Попробуй выполнить команду:
Code:
mv /data/data/com.zpwebsites.linuxonandroid/files/busybox /data/data/com.zpwebsites.linuxonandroid/files/busybox.bak
Лог поменялся, loop есть:

u0_a543@matisse3g:/ $
u0_a543@matisse3g:/ $ cd /sdcard/ubuntu
u0_a543@matisse3g:/sdcard/ubuntu $ su
es.linuxonandroid/files/bootscript.sh /sdcard/ubuntu/ubuntu.img <
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[39]: dirname: not found
MD5 file found, use to check .img file? (y/n)
Checking loop device... FOUND
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[132]: /system/xbin/busybox: not found
Error: Unable to attach image to loop device! (Image = /sdcard/ubuntu/ubuntu.img)
1|root@matisse3g:/mnt/shell/emulated/0/ubuntu #
 

Doomhawk

Developer
Лог поменялся, loop есть:

u0_a543@matisse3g:/ $
u0_a543@matisse3g:/ $ cd /sdcard/ubuntu
u0_a543@matisse3g:/sdcard/ubuntu $ su
es.linuxonandroid/files/bootscript.sh /sdcard/ubuntu/ubuntu.img <
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[39]: dirname: not found
MD5 file found, use to check .img file? (y/n)
Checking loop device... FOUND
/data/data/com.zpwebsites.linuxonandroid/files/bootscript.sh[132]: /system/xbin/busybox: not found
Error: Unable to attach image to loop device! (Image = /sdcard/ubuntu/ubuntu.img)
1|root@matisse3g:/mnt/shell/emulated/0/ubuntu #
У Вас автоматически не установился Busybox, скачайте с Google Play программу "BusyBox" и установите его
 

AbcChanelMC

Пользователь
на андроиде 5.0.2 рут нужен? эмулятор работает ставил.
 

kekovsky_dron

Пользователь
1. Как установить плагины?
2. Как узнать айпи и порт?
 

fromgate

Administrator
1. Как установить плагины?
2. Как узнать айпи и порт?
1. Просто скопировать jar-файл плагина в папку plugins на сервере;
2. Порт - тот, который прописан в конфиге (по умолчанию это 19132), адрес - если в локальной сети - это адрес вашего устройства, если хотите узнать внешний IP - то можете воспользоваться сервисом https://2ip.ru/
 

kekovsky_dron

Пользователь
1. Просто скопировать jar-файл плагина в папку plugins на сервере;
2. Порт - тот, который прописан в конфиге (по умолчанию это 19132), адрес - если в локальной сети - это адрес вашего устройства, если хотите узнать внешний IP - то можете воспользоваться сервисом https://2ip.ru/
А где находится данная папка?
 

_SimPl_

Пользователь
1. Просто скопировать jar-файл плагина в папку plugins на сервере;
2. Порт - тот, который прописан в конфиге (по умолчанию это 19132), адрес - если в локальной сети - это адрес вашего устройства, если хотите узнать внешний IP - то можете воспользоваться сервисом https://2ip.ru/
Где взять папку plugins на android при запуске через эмулятор?
 
Top