This project uses Quarkus, the Supersonic Subatomic Java Framework.
If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
This repository is in an active development, early preview state, and will eventually be used for 3.x
release
versions of Cryostat. See cryostatio/cryostat for the old repository
containing the < 3.0
codebase.
We welcome and appreciate any contributions from our community. Please visit our guide on how you can take part in improving Cryostat3.
Build Requirements:
- Git
- JDK v17+
- Maven v3+
- Quarkus CLI v3.4.1+ (Recommended)
- Podman 4.7+
Run Requirements:
yq
v4.35.1+kompose
v1.31.2+- docker-compose v1.29.2
- podman-docker (Optional)
For ease and convenience, it is suggested to use podman
with the following configurations:
$ systemctl --user enable --now podman.socket
$HOME/.bashrc
(or equivalent shell configuration)
export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock
$HOME/.testcontainers.properties
ryuk.container.privileged=true
docker.client.strategy=org.testcontainers.dockerclient.UnixSocketClientProviderStrategy
testcontainers.reuse.enable=false
Initialize submodules before building:
$ git submodule init && git submodule update
$ cd src/main/webui
$ yarn install && yarn yarn:frzinstall
$ cd -
The application image can be created using:
# With Maven
$ ./mvnw package
# Or with Quarkus CLI
$ quarkus build
You can run your application in dev mode that enables live coding using:
# With Maven
$ ./mvnw compile quarkus:dev
# Or with Quarkus CLI
$ quarkus dev
This will run Cryostat as a local JVM process hooked up to its frontend, and required companion services in containers. Any changes made to the backend or frontend sources, application.properties
, pom.xml
, etc. will trigger automatic rebuilds and live-coding.
NOTE: Quarkus now ships with a Dev UI, which is available in dev mode only at http://localhost:8181/q/dev/.
Development on this project is primarily done using podman
, though things should generally work when using docker
as well.
Ensure you have performed the podman
setup above first, then build the container image and run smoketests.
This will spin up the cryostat container and its required services.
# build Cryostat container, clean up any dangling container images/layers
$ ./mvnw package ; podman image prune -f
# alternatively, use Quarkus CLI instead of the Maven wrapper
$ quarkus build ; podman image prune -f
# check the available smoketest options
$ bash smoketest.bash -h
# run a smoketest scenario
$ bash smoketest.bash -O # without the -O flag, the smoketest will pull the latest development image version, rather than the one you just built
To make containers' names DNS-resolvable from the host machine, do:
$ git clone https://github.com/figiel/hosts libuserhosts
$ cd libuserhosts
$ make PREFIX=$HOME/bin all install
$ echo 'export LD_PRELOAD=$HOME/bin/lib/libuserhosts.so' >> ~/.bashrc
$ export LD_PRELOAD=$HOME/bin/lib/libuserhosts.so
(this will require a C compiler toolchain present on your development machine)
You can verify that this setup works by running smoketest.bash
, and then in another terminal:
$ LD_PRELOAD=$HOME/bin/libuserhosts.so ping auth
$ LD_PRELOAD=$HOME/bin/libuserhosts.so curl http://auth:8080
$ LD_PRELOAD=$HOME/bin/libuserhosts.so firefox http://auth:8080