diff --git a/README.md b/README.md
index 19c0cc9..5e96ca6 100644
--- a/README.md
+++ b/README.md
@@ -109,36 +109,53 @@ The logs are at `/opt/nexus/log/nexus.log`.
You can also see them with `journalctl -u nexus`.
-## OrientDB
+## H2 Database
-Nexus uses [OrientDB](https://en.wikipedia.org/wiki/OrientDB) as its database. To directly use it from the console run:
+Nexus uses [H2 Database](https://en.wikipedia.org/wiki/H2_(database)) as its database management system.
+
+**NB** Nexus OSS can only use the H2 database management system.
+
+**NB** Nexus Pro can use the H2 or PostgreSQL database management system.
+
+The Web based H2 Database Console is available at https://nexus.example.com/h2-console with the following settings:
+
+| Setting | Value |
+|----------------|--------------------------------------------------|
+| Saved Settings | Generic H2 (Embedded) |
+| Setting Name | Generic H2 (Embedded) |
+| Driver Class | org.h2.Driver |
+| JDBC URL | jdbc:h2:/opt/nexus/sonatype-work/nexus3/db/nexus |
+| User Name | _empty_ |
+| Password | _empty_ |
+
+You can also access the database cli shell as:
```bash
sudo su -l # switch to the root user.
systemctl stop nexus # make sure nexus is not running while you use the database.
su -s /bin/bash nexus # switch to the nexus user.
-nexus_home=/opt/nexus/nexus-3.70.3-01 # make sure you have the correct version here.
-nexus_data=$nexus_home/../sonatype-work/nexus3
-function orientdb-console {
- java -jar $nexus_home/lib/support/nexus-orient-console.jar $*
+nexus_home=/opt/nexus/nexus-3.75.1-01 # make sure you have the correct version here.
+nexus_data="$(realpath $nexus_home/../sonatype-work/nexus3)"
+function h2-shell {
+ java \
+ -cp $nexus_home/system/com/h2database/h2/*/h2*.jar \
+ org.h2.tools.Shell \
+ -url jdbc:h2:$nexus_data/db/nexus
}
-cd $nexus_data
-ls -laF db | grep ^d # list the databases
-orientdb-console # start the console.
+h2-shell
```
-Then connect to one of the databases, e.g. to the `security` database:
+Then execute some commands and exit the console, e.g.:
-```plain
-connect plocal:db/security admin admin
-```
-
-Then execute some commands and exit the orientdb console, e.g.:
-
-```plain
+```sql
+-- see https://h2database.com/html/commands.html
help
-config
-list classes
+show schemas;
+show tables;
+show columns from security_user;
+select * from security_user;
+select * from api_key_v2;
+select * from repository;
exit
```
@@ -154,24 +171,7 @@ And start nexus again:
systemctl start nexus
```
-For more information about the console see [Running the OrientDB Console](http://orientdb.com/docs/master/Tutorial-Run-the-console.html).
-
-## OrientDB Check Databases
-
-Execute the commands from the OrientDB section to stop nexus, to enter the
-nexus account and create the `orientdb-console` function, then:
-
-```bash
-# check the databases.
-# NB use CHECK DATABASE -v to see the verbose log.
-orientdb-console 'CONNECT PLOCAL:db/component admin admin; CHECK DATABASE;'
-#orientdb-console 'CONNECT PLOCAL:db/component admin admin; REPAIR DATABASE;'
-orientdb-console 'CONNECT PLOCAL:db/config admin admin; CHECK DATABASE;'
-orientdb-console 'CONNECT PLOCAL:db/security admin admin; CHECK DATABASE;'
-#orientdb-console 'CONNECT PLOCAL:db/OSystem admin admin; CONFIG; LIST CLASSES;' # XXX fails to connect. see https://groups.google.com/a/glists.sonatype.com/forum/#!topic/nexus-users/7dVofIwC5HM
-```
-
-Then start nexus.
+For more information see the [available Command Line Tools](https://h2database.com/html/tutorial.html#command_line_tools).
## Reference
diff --git a/provision/provision-base.sh b/provision/provision-base.sh
index 3ab8c73..4a86ed3 100644
--- a/provision/provision-base.sh
+++ b/provision/provision-base.sh
@@ -130,10 +130,12 @@ server {
proxy_send_timeout 120;
proxy_read_timeout 300;
proxy_buffering off;
- proxy_set_header X-Forwarded-Proto \$scheme;
- proxy_set_header Host \$host;
- proxy_set_header X-Forwarded-Host \$host;
- proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
+
+ location /h2-console/ {
+ proxy_http_version 1.1;
+ proxy_pass http://localhost:8082/;
+ proxy_redirect http://localhost:8082/ /h2-console/;
+ }
location / {
root /opt/nexus/public;
@@ -141,6 +143,10 @@ server {
}
location @nexus {
+ proxy_set_header X-Forwarded-Proto \$scheme;
+ proxy_set_header Host \$host;
+ proxy_set_header X-Forwarded-Host \$host;
+ proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8081;
}
}
diff --git a/provision/provision-nexus.sh b/provision/provision-nexus.sh
index fbffb4c..8db1ab3 100644
--- a/provision/provision-nexus.sh
+++ b/provision/provision-nexus.sh
@@ -12,7 +12,7 @@ config_authentication='nexus'
# install java.
# see https://help.sonatype.com/repomanager3/product-information/system-requirements#SystemRequirements-Java
-apt-get install -y openjdk-8-jre-headless
+apt-get install -y openjdk-17-jre-headless
apt-get install -y gnupg
@@ -35,17 +35,17 @@ pushd /opt/nexus
# see https://help.sonatype.com/repomanager3/product-information/download/download-archives---repository-manager-3
# see https://help.sonatype.com/repomanager3/product-information/release-notes
# see https://help.sonatype.com/repomanager3
-nexus_version=3.70.3-01
+nexus_version=3.75.1-01
nexus_home=/opt/nexus/nexus-$nexus_version
nexus_tarball=nexus-$nexus_version-unix.tar.gz
nexus_download_url=https://download.sonatype.com/nexus/3/$nexus_tarball
-nexus_download_sha1=56bf87028892450b2841756bd9fc4caed6b48287
+nexus_download_sha1=cfc9e7bdaeb1f1b9fb45aecc7a50821759c8b847
wget -q $nexus_download_url
if [ "$(sha1sum $nexus_tarball | awk '{print $1}')" != "$nexus_download_sha1" ]; then
echo "downloaded $nexus_download_url failed the checksum verification"
exit 1
fi
-tar xf $nexus_tarball # NB this creates the $nexus_home (e.g. nexus-3.70.3-01) and sonatype-work directories.
+tar xf $nexus_tarball # NB this creates the $nexus_home (e.g. nexus-3.75.1-01) and sonatype-work directories.
rm $nexus_tarball
install -d -o nexus -g nexus -m 700 .java # java preferences are saved here (the default java.util.prefs.userRoot preference).
install -d -o nexus -g nexus -m 700 sonatype-work/nexus3/etc
@@ -65,6 +65,11 @@ nexus.security.randompassword=false
# see https://issues.sonatype.org/browse/NEXUS-23205
# see Scripting Nexus Repository Manager 3 at https://support.sonatype.com/hc/en-us/articles/360045220393
nexus.scripts.allowCreation=true
+
+# enable the database console.
+# see https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Sonatype-Nexus-Repository-3#DatabaseConsoleforh2Database
+nexus.h2.httpListenerEnabled=true
+nexus.h2.httpListenerPort=8082
EOF
diff -u $nexus_home/etc/nexus-default.properties sonatype-work/nexus3/etc/nexus.properties || true
popd
diff --git a/provision/provision-nexus/Makefile b/provision/provision-nexus/Makefile
index 6ccc052..87a02ae 100644
--- a/provision/provision-nexus/Makefile
+++ b/provision/provision-nexus/Makefile
@@ -17,7 +17,7 @@ binaries: binaries-download
binaries-download:
mkdir -p binaries
- wget -qO- https://download.sonatype.com/nexus/3/nexus-3.70.3-01-unix.tar.gz \
+ wget -qO- https://download.sonatype.com/nexus/3/nexus-3.75.1-01-unix.tar.gz \
| tar xzf - --strip-components 1 -C binaries
clean:
diff --git a/provision/provision-nexus/pom.xml b/provision/provision-nexus/pom.xml
index 18c0c05..65cdc98 100644
--- a/provision/provision-nexus/pom.xml
+++ b/provision/provision-nexus/pom.xml
@@ -8,7 +8,7 @@
1.0-SNAPSHOT
- 3.70.3-01
+ 3.75.1-01
diff --git a/provision/use-maven-repository-from-gradle.sh b/provision/use-maven-repository-from-gradle.sh
index a676662..2fcdb08 100644
--- a/provision/use-maven-repository-from-gradle.sh
+++ b/provision/use-maven-repository-from-gradle.sh
@@ -3,7 +3,9 @@ set -euxo pipefail
nexus_domain=$(hostname --fqdn)
-mkdir -p tmp/use-maven-repository-from-gradle && cd tmp/use-maven-repository-from-gradle
+rm -rf tmp/use-maven-repository-from-gradle
+mkdir -p tmp/use-maven-repository-from-gradle
+cd tmp/use-maven-repository-from-gradle
#
# test the maven repository from gradle.
@@ -116,8 +118,8 @@ application {
mainClass = project.mainClassName
}
-sourceCompatibility = 1.8
-targetCompatibility = 1.8
+sourceCompatibility = 17
+targetCompatibility = 17
jar {
manifest {
diff --git a/provision/use-maven-repository-from-mvn.sh b/provision/use-maven-repository-from-mvn.sh
index 9806976..0b52f0e 100644
--- a/provision/use-maven-repository-from-mvn.sh
+++ b/provision/use-maven-repository-from-mvn.sh
@@ -3,14 +3,16 @@ set -euxo pipefail
nexus_domain=$(hostname --fqdn)
-mkdir -p tmp/use-maven-repository-from-mvn && cd tmp/use-maven-repository-from-mvn
+rm -rf tmp/use-maven-repository-from-mvn
+mkdir -p tmp/use-maven-repository-from-mvn
+cd tmp/use-maven-repository-from-mvn
#
# test the maven repository.
# install maven and the java development kit.
sudo apt-get install -y maven
-sudo apt-get install -y openjdk-8-jdk-headless
+sudo apt-get install -y openjdk-17-jdk-headless
sudo apt-get install -y xmlstarlet
# setup the user maven configuration to use nexus as a mirror the
@@ -72,6 +74,14 @@ mvn \
# test publishing a package.
pushd example-helloworld
+# set the java version.
+xmlstarlet ed --inplace -N pom=http://maven.apache.org/POM/4.0.0 \
+ --subnode /pom:project --type elem --name properties \
+ pom.xml
+xmlstarlet ed --inplace -N pom=http://maven.apache.org/POM/4.0.0 \
+ --subnode /pom:project/pom:properties --type elem --name maven.compiler.source --value 17 \
+ --subnode /pom:project/pom:properties --type elem --name maven.compiler.target --value 17 \
+ pom.xml
# add the nexus repository to pom.xml.
xmlstarlet ed --inplace -N pom=http://maven.apache.org/POM/4.0.0 \
--subnode '/pom:project' \