LINUX.ORG.RU

Запуск Java-приложения в VirtualBox без предустановленной OS

 , ,


0

4

Доброго вечера. Поставили задачу, запустить приложение на java 8 на виртуалке в VirtualBox без предустановленной на нём операционки. Как это можно реализовать? GraalVM SDK для 8-ки пробовал, не канает.



Последнее исправление: Karamelka (всего исправлений: 1)

Невозможен.

Серьезно, как ты это себе представляешь? То есть ПО можно запускать без ОС, конечно, но тогда это ПО само должно выполнять функции ОС по работе с железом. Сейчас так никто не пишет.

Если тебе нужен изолированный запуск конкретного приложения, прочти это: FireJail -- краткое и ознакомительное практическое руководство

Vsevolod-linuxoid ★★★★★
()

Тебе вероятнее всего нужно киоск собрать, то есть чтобы автоматом стартовала ОС, потом автологин, потом автозапуск приложения в окне. Вот это имели в виду, просто по неграмотности сформулировали нерешаемо.

Делается не особо сложно, если приложении умеет работать на Linux, берем скажем Debian, ставим в минимальной комплектации, потом сверху apt install nodm xserver-xorg openbox, после чего настраиваем nodm для запуска под пользователем, а в автозапуске openbox прописываем запуск приложения, ну и там разрешение выставить, если нужно: Сбитое разрешение в Kubuntu 20.04 (комментарий)

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от Vsevolod-linuxoid

Я уже два дня в прострации сижу. Начальство требует, выбора особо не много. Под госконтракт операционка для бухгалтерских преимущественно нужд, без GUI, без иксов, чисто консолька. Сделано так, чтобы консоль работала в вопросно-ответной форме, пишешь команду, она что-то отвечает, ты ей, и тд.. Там система такая: огромное приложение на чистом java 8 se, что-то типо операционной системы (если это чудовище так можно назвать), которая работает с памятью и железом через JNI (Java Native Interface), остальное всё реализовано через простые классы. У них уже всё готово, мне поставили задачу: сделать так, чтобы это запускалось на голом железе. Там по факту, просто через System.out и System.in в цикле консоль реализована. Сказали, любым способом каким придумаешь, чтобы это заработало. На всё у меня неделя..

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

У них уже всё готово, мне поставили задачу: сделать так, чтобы это запускалось на голом железе.

Это невозможно. По крайней мере на современном доступном оборудовании (кажется, были какие-то наработки у Sun, но, насколько понял, не выстрелили). Java байткод нельзя запускать без JVM, а JVM надо запустить на какой-то другой операционке, будь то x86_64 или что-то ещё.

Почему бы GNU/Linux не запустить в VirtualBox, коли мы на linux.org.ru ?

На всё у меня неделя..

Ищи новую работу.

BattleCoder ★★★★★
()
Ответ на: комментарий от Karamelka

Эм… ну это принципиально нерешаемая задача. Вообще никак. ПО, которое рассчитано на запуск внутри ОС, никак не выйдет запускать напрямую на железе без этой ОС.

Вот поставить эту ОС в виртуалку и запускать ПО автоматом на старте — не вопрос, если ОС такое поддерживает.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от cocucka

Касательно GraalVM, я имел в виду именно утилиту native-image, которая в неё входит, позволяющая скомпилированный java-класс скомпилировать ещё раз, но уже в байт-код

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

Возьми alpine linux, там все по минимуму, как раз для таких случаев. Вместо инита сразу свою прогу запускай и все.

cocucka ★★★★☆
()
Последнее исправление: cocucka (всего исправлений: 1)
Ответ на: комментарий от vbr

Была бы только в этом проблема. Это же «операционная система», тут задача растянуть это удовольствие на долго, а потому для этого дела будут писаться драйверы, приложения, плагины, и куча всего-всего. И если всплывёт, что это тупо Ubuntu, могут появиться вопросы..

Karamelka
() автор топика
Ответ на: комментарий от cocucka

Не надо вместо инита, у инита свои задачи есть, а эти ихние программисты на System.out про сбор зомбей явно не слышали.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Я больше скажу, эти мр@зи shell реализовали через switch. А в java он принимает только константные значения, и чтобы открыть файл вы сначала пишете $ open file, консоль спрашивает какой, и вы вводите вторую команду путь :/

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

У тебя задача запустить, а не написать операционную систему. Принесут тебе операционную систему - запустишь. Тебе принесли обычную программу. Значит запускай под убунтой. Если у кого-то появятся вопросы, то только потому, что ему не откатили, а это уже не твои заботы.

Собственно надо различать операционную систему и ядро операционной системы. В данном случае убунту с линуксом это ядро операционной системы (господи, что я несу), а жава это уже и есть операционная система.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от Karamelka

В alpine musl, с ним JVM не особо тестят. В теории можно, на практике хз. Впрочем я не настаиваю, но я бы на дебиане делал. Там ничего нестандартного нет. Из нестандартного тебе надо разобраться, как при буте запускать твою программку на первом терминале. Но не думаю, что это будет так уж сложно.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

Плюс найди, как отключить все сообщения при загрузке - и от ядра и от systemd. Чтобы чёрный экран был, а потом сразу жава. Или вообще splash экран подсунуть с вашим логотипом.

vbr ★★★★
()
Ответ на: комментарий от vbr

Спасибо, что-нибудь придумаю. Самое смешное, что splash-экран нельзя, только консоль, мы же пишем «ядро». А потом уже сторонние подрядчики будут для него иксы писать с гуишками

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

Надо отключить хоткеи переключения на другие терминалы (Alt+Fx) или вообще отключить все кроме первого.

Для автовхода тут можно почитать: https://wiki.archlinux.org/title/Getty#Automatic_login_to_virtual_console

В .bashrc сделай while true; do java -jar xxx.jar; done

ssh лучше не трогать, чтобы в систему, собственно, можно было попасть по-нормальному.

vbr ★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

Да, извиняюсь, не знал. Забыл видимо самое главное добавить, я только год назад магистратуру окончил, ещё не успел набрать никакого приличного опыта с линуксом

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

Мда… у меня лишь вопрос — зачем? Типа же просто берем отечественный Linux и поставляем его в бандле со своим ПО, всё — формально ничего «не своего» нету.

Vsevolod-linuxoid ★★★★★
()
Ответ на: комментарий от Vsevolod-linuxoid

В двух словах, есть же реестр отечественного ПО, и будут выбирать двух вендоров, для которых должна быть стопроцентная интеграция со всем ПО из реестра (за счёт разработчиков ПО). И тут к нам в регион приходит контракт, где тяжёлое бух. ПО написанное на C# поверх 1С, которое должно работать с двумя ОС: один отечественный линукс, второй обязательно нет (БСД либо кастомное что-то своё). И тут мы «каким-то образом» выигрываем этот тендер, и нам сказали что это должен быть не линукс, и желательно не БСД, коль ему ещё меньше доверия. Тарам-парам-пам. Пишем свою ОС, заточенную под бабушек-бухгалтерш, с перспктивой на приложения под эту ОС, превращение этой ОС в сервер и всеми прелестями жизни

Karamelka
() автор топика
Ответ на: комментарий от Karamelka

мы пишем «ядро»

Переизобретаете JNode?

It should be a system that was not only a VM, but a complete runtime environment that does not need any other form of operating system. So is had to be a light weight and most important flexibel system.

По теме (не знаю насколько оно живое):

  • Oracle JRockit Virtual Edition

    Oracle JRockit Virtual Edition can run on Oracle VM 2.2, allowing Java applications to run directly on virtualized hardware.
    Oracle JRockit Virtual Edition packaging the Oracle JRockit JVM with the bare minimum operating system capabilities that are essential for a Java environment (file, network, and memory management). Oracle JRockit Virtual Edition can therefore run directly on the Oracle VM hypervisor, without the need for a general-purpose operating system.

  • WebLogic Server Virtual Edition

    BEA WebLogic Server Virtual Edition™ (WLS-VE) is a Java application server that is optimized for running in virtualized computing environments.
    WLS-VE combines BEA WebLogic Server® with BEA LiquidVM™, a Java Virtual Machine (JVM) that works with hypervisor software and provides only the set of operating system (OS) features that WebLogic Server needs to offer its full range of services. Hypervisor software recognizes LiquidVM as a guest OS.

  • LiquidVM

    LiquidVM is a virtualization enabled version of the JRockit JVM that can run on a hypervisor without a standard OS, allowing Java applications to run directly on the virtualized hardware.
    LiquidVM provides the following features:

    • JRockit JVM as the Java runtime component.
    • A scaled-down OS kernel that replaces the OS for LiquidVM. It differs from a normal OS in that it is a single-user, single-process environment that is designed to only run a single JVM. No other processes can be started. It implements the following services that the JRockit JVM needs to run Java.
  • JOE

    JOE can run a Java program without an operating system and virtualizing the virtual machine.

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 3)
Ответ на: комментарий от mydibyje

Благодарю, да, получается что-то типо JNnod’ы, кстати, она хоть немного жива ещё? А пока, описание JOE звучит очень заманчиво, посмотрю его по-внимательнее, может подойдёт

Karamelka
() автор топика