Skip to content

RPMパッケージのビルドに失敗する #45

@ydash

Description

@ydash

いくつかの問題がありRPMのビルドに失敗します。

sbtのリポジトリ追加方法が古い

centosにrpmリポジトリを追加する方法が変更されており、いまのDockerfileの記述だとsbtのインストールに失敗します。

curl https://bintray.com/sbt/rpm/rpm | tee /etc/yum.repos.d/bintray-sbt-rpm.repo; \

sbt Reference Manualを参考にして、以下のような記述に書き換える必要があります。

-  curl https://bintray.com/sbt/rpm/rpm | tee /etc/yum.repos.d/bintray-sbt-rpm.repo; \
+  curl -L https://www.scala-sbt.org/sbt-rpm.repo > sbt-rpm.repo; \
+  mv sbt-rpm.repo /etc/yum.repos.d/; \

不要な?SBT_OPTS

上の問題を修正してもパッケージ作成時に以下のようなエラーが発生します。

エラーログ
+ /usr/bin/sbt clean rpm:packageBin
[info] welcome to sbt 1.3.13 (Oracle Corporation Java 1.8.0_262)
[info] loading settings for project workspace-build from build.sbt,plugins.sbt ...
[info] loading project definition from /workspace/project
java.util.concurrent.RejectedExecutionException: Task scala.concurrent.impl.CallbackRunnable@1f9fef5e rejected from java.util.concurrent.ThreadPoolExecutor@4c3f3871[Shutting down, pool size = 2, active threads = 2, queued tasks = 0, completed tasks = 1857]
        at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
        at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
        at scala.concurrent.impl.ExecutionContextImpl$$anon$4.execute(ExecutionContextImpl.scala:138)
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:72)
        at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1(Promise.scala:288)
        at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1$adapted(Promise.scala:288)
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:288)
        at scala.concurrent.Promise.complete(Promise.scala:53)
        at scala.concurrent.Promise.complete$(Promise.scala:52)
        at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:187)
        at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
java.util.concurrent.RejectedExecutionException: Task scala.concurrent.impl.CallbackRunnable@337da496 rejected from java.util.concurrent.ThreadPoolExecutor@4c3f3871[Shutting down, pool size = 1, active threads = 1, queued tasks = 0, completed tasks = 1858]
        at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
        at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
        at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
        at scala.concurrent.impl.ExecutionContextImpl$$anon$4.execute(ExecutionContextImpl.scala:138)
        at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:72)
        at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1(Promise.scala:288)
        at scala.concurrent.impl.Promise$DefaultPromise.$anonfun$tryComplete$1$adapted(Promise.scala:288)
        at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:288)
        at scala.concurrent.Promise.complete(Promise.scala:53)
        at scala.concurrent.Promise.complete$(Promise.scala:52)
        at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:187)
        at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
[error] java.util.concurrent.ExecutionException: Boxed Error
[error]         at scala.concurrent.impl.Promise$.resolver(Promise.scala:87)
[error]         at scala.concurrent.impl.Promise$.scala$concurrent$impl$Promise$$resolveTry(Promise.scala:79)
[error]         at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:284)
[error]         at scala.concurrent.Promise.complete(Promise.scala:53)
[error]         at scala.concurrent.Promise.complete$(Promise.scala:52)
[error]         at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:187)
[error]         at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
[error]         at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] Caused by: java.lang.Error: java.io.IOException: No such file or directory
[error]         at sun.nio.ch.FileKey.create(FileKey.java:46)
[error]         at sun.nio.ch.SharedFileLockTable.<init>(FileLockTable.java:120)
[error]         at sun.nio.ch.FileLockTable.newSharedFileLockTable(FileLockTable.java:47)
[error]         at sun.nio.ch.FileChannelImpl.fileLockTable(FileChannelImpl.java:1039)
[error]         at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1106)
[error]         at java.nio.channels.FileChannel.tryLock(FileChannel.java:1155)
[error]         at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.loop$1(CacheLocks.scala:55)
[error]         at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withLockOr(CacheLocks.scala:84)
[error]         at lmcoursier.internal.shaded.coursier.cache.FileCache.$anonfun$download$32(FileCache.scala:508)
[error]         at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
[error]         at scala.util.Success.$anonfun$map$1(Try.scala:255)
[error]         at scala.util.Success.map(Try.scala:213)
[error]         at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
[error]         at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
[error]         at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
[error]         at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] Caused by: java.io.IOException: No such file or directory
[error]         at sun.nio.ch.FileKey.init(Native Method)
[error]         at sun.nio.ch.FileKey.create(FileKey.java:44)
[error]         at sun.nio.ch.SharedFileLockTable.<init>(FileLockTable.java:120)
[error]         at sun.nio.ch.FileLockTable.newSharedFileLockTable(FileLockTable.java:47)
[error]         at sun.nio.ch.FileChannelImpl.fileLockTable(FileChannelImpl.java:1039)
[error]         at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1106)
[error]         at java.nio.channels.FileChannel.tryLock(FileChannel.java:1155)
[error]         at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.loop$1(CacheLocks.scala:55)
[error]         at lmcoursier.internal.shaded.coursier.cache.CacheLocks$.withLockOr(CacheLocks.scala:84)
[error]         at lmcoursier.internal.shaded.coursier.cache.FileCache.$anonfun$download$32(FileCache.scala:508)
[error]         at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
[error]         at scala.util.Success.$anonfun$map$1(Try.scala:255)
[error]         at scala.util.Success.map(Try.scala:213)
[error]         at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
[error]         at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
[error]         at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
[error]         at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
[error]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error]         at java.lang.Thread.run(Thread.java:748)
[error] (update) java.util.concurrent.ExecutionException: Boxed Error

このエラーは./docker-compose.ymlを以下のようにSBTの環境変数の設定部分を削除することで回避できますが、エラーの発生原因は不明です。

     environment:
       - http_proxy
       - https_proxy
-      # gitlab-ci のキャッシュ設定に合わせている
-      - >-
-        SBT_OPTS=
-          -Dsbt.global.base=/project/sbt-cache/sbtboot
-          -Dsbt.boot.directory=/project/sbt-cache/boot
-          -Dsbt.coursier.home=/project/sbt-cache/coursier

RPM パッケージのバージョンフォーマット不正

上記の問題を解消しても以下のエラーが発生してパッケージ作成に失敗します。

[error] error: line 2: Illegal char '-' in: Version: 2022.3.0+3-20d0812b
[error] Building target platforms: noarch-???-Linux
[error] Building for target noarch-???-Linux

rpmパッケージのバージョンはsbt-dynverプラグインでgitのタグから自動で付与されるようになっているので、タグをつけずにRPMパッケージを作成しようとするとエラーが発生するようです。
タグは小文字のvから始まる必要があります。詳細はsbt-dynverのドキュメントのTag Requirementsを参照してください。

以下のようにgit tagコマンドでタグを付与することでパッケージの作成に成功するようになりました。
git tag v2022.3.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions