既存のあるDebianパッケージについて中身の一部を入れ替えて、再作成する機会があったので、作業をまとめてみました。
目次
Debianパッケージとは
Debianパッケージは、Debian、UbuntuなどのDebian系のLinuxで使われるソフトウェアのパッケージです。
ファイルの拡張子は、deb です。
Redhat、CentOSなどのRedHat系のLinuxで使われるrpmに相当します。
debパッケージは、gzipやbzip2、LZMAで圧縮された2つのアーカイブで構成され、そのうち1つはコントロールの情報、もう1つはデータです。
dpkg、apt または aptitudeでインストール、アンインストール可能です。
Debian パッケージの作成方法
Debianパッケージの作成方法を調べてみると、以下のサイトを見つけました。
↓debパッケージ作成方法をステップバイステップでまとめました
・https://eng-entrance.com/linux-package-deb-create
↓社内利用のための deb パッケージング入門
・https://blog.cybozu.io/entry/2016/05/16/111500
debian パッケージの作成方法
・http://www.rain.hyarc.nagoya-u.ac.jp/~satoki/main/Linux/configure/make_deb.html
どれを見ても、フォルダ構成が難しいな。
作るのがめんどくさそう。。
Debianパッケージの中身を展開
Debianパッケージは、arコマンドで展開できるようです。
ar は C言語などで libc.a など静的なライブラリを作成するときに使いますね。
例として”nginx-core“のdebパッケージを展開してみました。
1 2 3 4 |
$ ar vx nginx-core_1.15.9-0ubuntu1_amd64.deb x - debian-binary x - control.tar.gz x - data.tar.xz |
3つのファイルが展開されました。
Debianパッケージの中身は、次の通りです。
1 2 3 4 5 6 7 8 9 |
|--- debian-binary |--- data.tar.gz | |--- . (root) (インストール後のディレクトリ構造) | |--- usr, bin ... | |--- control.tar.gz |--- . |--- control |--- md5sums |
なるほど、既存の Debian パッケージを更新するだけなら、複雑なDebianパッケージの作成方法を覚えなくてもよいようです。
Debianパッケージの再作成
今回、既存のあるDebianパッケージのJavaのバージョンを32ビット版から64ビット版に変更し、さらに関連するいくつかの不具合を修正することになりました。
Debianパッケージの data.tar.gz を展開
まず、既存のDebianパッケージ xxx.deb を展開してみます。
1 2 3 4 |
# ar xvf xxx.deb x - debian-binary x - control.tar.gz x - data.tar.gz |
さらに、data.tar.gz を展開してみます。
1 2 3 4 5 6 7 8 9 10 11 12 |
# gunzip data.tar.gz # tar -xvf data.tar ・・・・ ./usr/lib/xxx/xxx.jar ./usr/lib/xxx/jre-6u29-linux-i586.bin ./usr/bin ./usr/bin/xxx ./usr/share/ ./usr/share/applications/ ./usr/share/applications/xxx.desktop ・・・・ ・・・・ |
Javaを32ビット版から64ビット版に置き換え
32ビット版のJava は、jre-6u29-linux-i586.bin
64ビット版のJava は、jre-6u29-linux-x64.bin
です。
分かりにくいですが i586 が32ビット、x64が64ビットです。
32ビットと64ビットの名称については以下を参照して下さい。
・https://urashita.com/archives/12325
今回、
jre-6u29-linux-i586.bin を jre-6u29-linux-x64.bin に置き換えます。
Javaの古いバージョンは、Java Archiveというサイトから取ってきます。
・https://www.oracle.com/technetwork/jp/java/archive-139210.html
gksudo は廃止されたので、sudo -i に置き換え
次に、起動ファイル
./usr/bin/xxx
を調べてみました。
以下のように、gksudo を使っていました。
1 |
gksudo "$JAVA_HOME/bin/java -jar -Xms32m -Xmx256m $MYLIB_HOME/xxx.jar" |
gksudo は、Ubuntu 18.04では廃止されています。
そこで、sudo -i に書き換えます。
1 |
sudo -i $JAVA_HOME/bin/java -jar -Xms32m -Xmx256m $MYLIB_HOME/xxx.jar |
デスクトップエントリファイル xxx.desktop ファイルを修正
拡張子がdesktop の xxx.desktop は、Ubuntuのデスクトップエントリファイルです。
↓デスクトップエントリ
・https://wiki.archlinux.jp/index.php/デスクトップエントリ
起動がうまくいかないことがあるので
1 2 |
Exec = /usr/bin/xxx Terminal = false |
を
1 2 |
Exec = bash -i "/usr/bin/xxx" Terminal = true |
に修正しました。
Debianパッケージの control.tar.gz を展開
次に、control.tar.gz を展開します。
1 2 3 4 5 |
# gunzip control.tar.gz # tar -xvf control.tar ./control ./postinst ./prerm |
インストール後に実行される postinst を開きます。
32bit版のJavaを展開している箇所が見つかりました。
1 2 3 4 5 6 7 8 |
./postinst #!/bin/bash set -e MYLIB_HOME=/usr/lib/xxx MYJAVA_PACK=$MYLIB_HOME/jre-6u29-linux-i586.bin ・・・ ・・・ |
今回は、64bit版のJavaに置き換えます。
1 2 3 4 5 6 7 8 |
./postinst #!/bin/bash set -e MYLIB_HOME=/usr/lib/xxx MYJAVA_PACK=$MYLIB_HOME/jre-6u29-linux-x64.bin ・・・ ・・・ |
同様に、prerm の中のJavaも書き換えます。
次に、control ファイルの中身を見てみます。
1 |
Architecture: i386 |
今回のインストーラーは64ビット版なので、以下のように書き換えます。
1 |
Architecture: amd64 |
32ビットのアーキテクチャーは i386
64ビットのアーキテクチャーは amd64
と書きます。
Debianパッケージを再作成
Debian パッケージを再作成します。
data.tar.gz と control.tar.gz を再作成します。
1 2 3 4 5 |
# tar -cvf data.tar ./usr # gunzip data.tar # # tar -cvf control.tar control postinstall prerm # gunzip control.tar |
これで、
debian-binary
control.tar.gz
data.tar.gz
が揃ったので、Debianパッケージを作成します。
ar コマンドを使いますが、アーカイブする順番は、debian-binary、control.tar.gz、data.tar.gz の順番でないといけません。
1 |
#ar r xxx.deb debian-binary control.tar.gz data.tar.gz |
これで再パッケージ化が出来ました。
Debianパッケージのインストール方法、手順
Debianパッケージのインストール方法、手順は次の通りです。
1 |
# dpkg -i package-x.x.x.deb |
Debianパッケージのアンインストール方法、手順
Debianパッケージのアンインストール方法、手順は次の通りです。
1 |
# dpkg -r package-x.x.x.deb |
コメント
[…] ・https://urashita.com/archives/28834 […]