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' \