急遽Ubuntu対応が必要に
現在はCentOSで動かしているJavaコンポーネントを、将来的にはUbuntuで動かさなければいけないということで、Ubuntuで使われるパッケージであるDEBファイルの作成方法を調べていました。
現在はrpm-maven-pluginを使ってMavenビルドでRPMのビルドも完結させているので、DEBファイルのビルドもMavenビルドの中で済ませたいところ。
DEBファイルを作成するプラグインはいくつかあるようでしたが、jdebというプラグインが使いやすそうだったので、これを使ってみることにしました。
ちなみにビルドはRedHat上で行いましたが、問題なくDEBファイルをビルドすることができます。
jdebのXML表記方法
かなりシンプルなものですが、以下はpom.xmlに記述するjdebのサンプルです。
<build>
<plugin>
<groupId>org.vafer</groupId>
<artifactId>jdeb<artifactId>
<version>1.0</version>
<executions>
<execution>
<id>deb</id>
<phase>package</package>
<goals>
<goal>jdeb<jdeb>
</goals>
<configuration>
<deb>target/hoge_1.0.0-0_amd64.deb</deb>
<controlDir>src/deb/control</controlDir>
<dataSet>
<data>
<type>file</type>
<src>target/hoge-1.0.0.jar</src>
<dst>/home/fuga/bin/hoge-1.0.0.jar</dst>
</data>
<data>
<type>file</type>
<src>src/main/resources/config.properties</src>
<dst>/home/fuga/config/config.properties</dst>
</data>
<data>
<type>file</type>
<src>src/main/resources/run.sh</src>
<dst>/home/fuga/run.sh</dst>
<mapper>
<type>perm</type>
<filemode>744</type>
</mapper>
</data>
<data>
<type>file</type>
<src>src/main/resources/run.sh</src>
<dst>/home/fuga/stop.sh</dst>
<mapper>
<type>perm</type>
<filemode>744</type>
</mapper>
</data>
</dataSet>
</configuration>
</execution>
</execution>
</plugin>
</build>
ポイントとなるのはconfiguration以下の要素です。
configuration/deb
生成されるDEBファイル名を指定します。必須の要素ではなく、指定しなかった場合は、pom.xml内で定義されている変数に基づき「\${buildDirectory}/\${artifactId}_\${version}_all.deb」となります。
configuration/controlDir
controlファイル(後述)を配置するディレクトリを指定します。指定しなかった場合は、デフォルト値の「src/deb/control」が使用されます。
configuration/dataSet
インストールするファイルのマッピングはこのセクションに記述します。インストーするファイルやディレクトリの数だけdataセクションが連続します。
configuration/dataSet/data/type
インストールするファイルやディレクトリのタイプを指定します。公式によれば将来的に指定が必須となるとのことでしたが、現在は指定が必須なようです。fileの他にもdirectory, archiveなどが選択できます。
configuration/dataSet/data/src
インストールするファイルやディレクトリのパスを指定します。
configuration/dataSet/data/dst
ファイルやディレクトリのインストール先のパスを記述します。ファイルやディレクトリ自身の名称もパスに含めます。
configuration/dataSet/data/mapper
必須のセクションではありませんが、例えば起動シェルのようにファイルに実行権限を与える必要がある場合などに記述されます。
configuration/dataSet/data/mapper/perm
ファイルのパーミッションを変更する場合はpermと書きます。他にどのようなものがかけるのかは今のところ不明。
configuration/dataSet/data/mapper/filemode
ファイルパーミッションを記述します。例えば、ファイル所有者にRead&Write, 実行権限を付与する場合には744など。
controlファイルについて
rpm-maven-pluginではpom.xml上ですべての設定が完結していましたが、DEBファイルを作るためにはcontrolファイルというものを用意する必要があります。
これはdpkg-debコマンドなどを利用して作成する場合も同様です。
ファイルの内容は以下のような感じになります。
Package: hoge
Version: 1.0.0-0
Priority: required
Section: admin
Architecture: amd64
Maintainer: Takuro Tamura <fuga@xxx.com>
Description: jdeb build sample
他にも色々と書ける要素はありますが、ビルド時のエラーでこの7項目は必須とのメッセージが表示されました。
ファイル名は「control」とします。これをpom.xml内の<controlDir>で指定したディレクトリに配置します。(指定しなかった場合はデフォルトのsrc/deb/control)
これで「mvn package (-DskipTests=true)」を走らせれば、targetディレクトリ内にhoge_1.0.0-0_amd64.debという名前でDEBファイルがビルドされているはずです。
参考にしたサイト
1.公式チュートリアル
https://github.com/tcurdt/jdeb/blob/master/docs/maven.md