【なんでも研究日誌】Sonatype Nexus Repository Manager 3をLinux(Ubuntu20.04)にインストールする

iDempiereで使用している各種jarファイルのプライベートリポジトリを作成するためにSonatype社のNexus Repository Manager 3を使用してみようかなと思い試しにLinux(Ubuntu20.04)にインストールしてみたので、その手順についてここにメモしておきます。

事前準備

Nexusを動かすためにはJavaがインストールされている必要があります。下記のコンテンツ等を参考にまずはJavaをインストールして下さい。

Nexusのダウンロードとインストール(デプロイ)

ダウンロード

オープンソース版のNexus Repository Managerは、下記のURLで公開されています。

 このコンテンツを書いている2023年8月時点の最新のLinux用のインストールパッケージが「 https://download.sonatype.com/nexus/3/nexus-3.58.1-02-unix.tar.gz」となっていますのでダウンロードします。

 

インストール(デプロイ)

 /opt/の直下に「nexus」というフォルダを作成して、そこにインストール(デプロイ)します。

mkdir /opt/nexus

/opt/nexus の配下に「nexus-3.58.1-02-unix.tar.gz」をおいて解凍します。

tar -xzf nexus-3.58.1-02-unix.tar.gz

そうすると、下記2つのデイレクトリができます。

  • nexus-3.58.1-02
  • sonatype-wrok

Nexusの起動と停止

nexus-3.58.1-02の配下の「bin」フォルダにある"nexus"を下記のコマンドで実行します。

./nexus run

「Started Sonaytype Nexus OSS バージョン番号」が表示されたら起動完了です。

バックグラウンドでの実行

./nexus start

停止

./nexus stop

ステータス確認

./nexus status

Nexusの起動時のエラー

INSTALL4J_JAVA_HOMEの設定

Nexusの起動の際に、下記のようなエラーに遭遇した場合は、INSTALL4J_JAVA_HOMEの変数にjavaへのパスを設定して下さい。

No suitable Java Virtual Machine could be found on your system.

The version of the JVM must be 1.8.

Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.

上記エラーは「INSTALL4J_JAVA_HOME」の環境変数に、Java(ver1.8以上)へのパスを通してねと言っている様子です。

export INSTALL4J_JAVA_HOME=※path To JVM

※path To JVMの例

  • export INSTALL4J_JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
  • export INSTALL4J_JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

Javaは、ver1.8以上(=ver8)であれば大丈夫な様子です。ver17を設定してみましたが、nexus-3.58.1-02では問題なく起動できました。が、もしエラーになる場合は、下記のコマンドでJava8(1.8)をインストールして試し見てみて下さい。

sudo apt install openjdk-8-jdk

ハードディスク容量について

クラウドの無料枠で使用できるようなメモリとハードディスク容量だと、起動時にエラーになってしまう場合がある様子です。そのためはじめはある程度潤沢なメモリとハードディスクの容量で試してみるのをオススメします。

ハードディスクは4GBくらいの空き容量がないと起動時に下記のようなエラーが表示されて起動できません。

2023-08-14 01:10:22,663+0000 INFO  [FelixStartLevel] *SYSTEM com.orientechnologies.orient.core.engine.OMemoryAndLocalPaginatedEnginesInitializer - OrientDB config DISKCACHE=256MB (heap=2,404MB direct=2,703MB os=3,920MB)

2023-08-14 01:10:22,756+0000 INFO  [FelixStartLevel] *SYSTEM com.orientechnologies.orient.server.OSystemDatabase - $ANSI{green {db=OSystem}} Creating the system database 'OSystem' for current server

2023-08-14 01:10:23,064+0000 ERROR [FelixStartLevel] *SYSTEM com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage - Exception `0AEADCEC` in storage `plocal:/opt/sonatype-work/nexus3/db/OSystem`: 2.2.37 (build a7541e7ceeabf592dd9a7b2928b6c023cbc73193, branch 2.2.x)

com.orientechnologies.orient.core.exception.OLowDiskSpaceException: Error occurred while executing a write operation to database 'OSystem' due to limited free space on the disk (1568 MB). The database is now working in read-only mode. Please close the database (or stop OrientDB), make room on your hard drive and then reopen the database. The minimal required space is 4096 MB. Required space is now set to 4096MB (you can change it by setting parameter storage.diskCache.diskFreeSpaceLimit) .

        DB name="OSystem"

        at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.checkLowDiskSpaceRequestsAndReadOnlyConditions(OAbstractPaginatedStorage.java:5073)

        at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.createRecord(OAbstractPaginatedStorage.java:1339)

        at com.orientechnologies.orient.core.config.OStorageConfigurationImpl.create(OStorageConfigurationImpl.java:707)

        at com.orientechnologies.orient.core.storage.impl.local.OStorageConfigurationSegment.create(OStorageConfigurationSegment.java:121)

        at com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage.create(OAbstractPaginatedStorage.java:489)

        at com.orientechnologies.orient.core.storage.impl.local.paginated.OLocalPaginatedStorage.create(OLocalPaginatedStorage.java:131)

        at com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx.create(ODatabaseDocumentTx.java:438)

        at com.orientechnologies.orient.server.OSystemDatabase.init(OSystemDatabase.java:160)

        at com.orientechnologies.orient.server.OSystemDatabase.<init>(OSystemDatabase.java:44)

        at com.orientechnologies.orient.server.OServer.initSystemDatabase(OServer.java:1309)

        at com.orientechnologies.orient.server.OServer.activate(OServer.java:367)

        at org.sonatype.nexus.internal.orient.DatabaseServerImpl.doStart(DatabaseServerImpl.java:196)

        at org.sonatype.nexus.common.stateguard.StateGuardLifecycleSupport.start(StateGuardLifecycleSupport.java:69)

        at org.sonatype.nexus.internal.orient.DatabaseServerImpl$$EnhancerByGuice$$250901818.GUICE$TRAMPOLINE(<generated>)

        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:74)

        at org.sonatype.nexus.common.stateguard.MethodInvocationAction.run(MethodInvocationAction.java:39)

        at org.sonatype.nexus.common.stateguard.StateGuard$TransitionImpl.run(StateGuard.java:193)

        at org.sonatype.nexus.common.stateguard.TransitionsInterceptor.invoke(TransitionsInterceptor.java:57)

        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:75)

        at com.google.inject.internal.InterceptorStackCallback.invoke(InterceptorStackCallback.java:55)

        at org.sonatype.nexus.internal.orient.DatabaseServerImpl$$EnhancerByGuice$$250901818.start(<generated>)

        at org.sonatype.nexus.internal.orient.OrientBootstrap.doStart(OrientBootstrap.java:71)

        at org.sonatype.nexus.common.stateguard.StateGuardLifecycleSupport.start(StateGuardLifecycleSupport.java:69)

        at org.sonatype.nexus.internal.orient.OrientBootstrap$$EnhancerByGuice$$255648395.GUICE$TRAMPOLINE(<generated>)

        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:74)

        at org.sonatype.nexus.common.stateguard.MethodInvocationAction.run(MethodInvocationAction.java:39)

        at org.sonatype.nexus.common.stateguard.StateGuard$TransitionImpl.run(StateGuard.java:193)

        at org.sonatype.nexus.common.stateguard.TransitionsInterceptor.invoke(TransitionsInterceptor.java:57)

        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:75)

        at com.google.inject.internal.InterceptorStackCallback.invoke(InterceptorStackCallback.java:55)

        at org.sonatype.nexus.internal.orient.OrientBootstrap$$EnhancerByGuice$$255648395.start(<generated>)

        at org.sonatype.nexus.extender.NexusLifecycleManager.startComponent(NexusLifecycleManager.java:199)

        at org.sonatype.nexus.extender.NexusLifecycleManager.to(NexusLifecycleManager.java:111)

        at org.sonatype.nexus.extender.NexusContextListener.moveToPhase(NexusContextListener.java:319)

        at org.sonatype.nexus.extender.NexusContextListener.frameworkEvent(NexusContextListener.java:216)

        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1597)

        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)

        at java.lang.Thread.run(Thread.java:750)

 

Nexusへのログイン

ブラウザで、「http://XXXXXXXXXX:8081/」にアクセスします。

※XXXXXXXXXXは、ドメインかIPアドレス。

http://XXXXXXXXXX:8081/

画面右上にある「Sign in」をクリックしてログインします。

 

初回ログイン時

初回ログイン時のみ、adminユーザーの初期パスワードを入力し、adminユーザーの初期パスワードを変更する必要があります。

初期パスワードはsonatype-work/nexus3/配下のadmin.passwordファイルに記載されています。

 

Usernameに"admin"と入力し、Passwordにadmin.passwordファイルに記載されている文字列を入力(コピペ)します。

 

2回目以降

2回目以降は、初回ログインの時に設定した、adminユーザーのパスワードを入力してログインできます。