2021-01-18

【備忘録】Alien で RPM を DEB パッケージに変換

Alien [1] は、異なる Linux パッケージフォーマット間の変換を行うコンピュータプログラムです。Joey Hess 氏によって作成され、現在は Kyle Barry 氏によってメンテナンスされています。

Wikipedia より引用、翻訳

以前、Debian / Ubuntu の DEB パッケージを Fedora / CentOS 用の RPM パッケージへ変換するために使ったことがありましたが、逆のケースでは使ったことが無かったので、備忘録としました。なお、参考サイト [2] で説明されている内容を参考にさせていただきました。

使用した OS は下記の通りです。

Ubuntu Desktop 20.10 x86_64

Alien のインストール

まず、alien をインストールします。

bitwalk@ubuntu-pc:~$ sudo apt install alien
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  autoconf automake autopoint autotools-dev binutils binutils-common binutils-x86-64-linux-gnu build-essential
  debhelper debugedit dh-autoreconf dh-strip-nondeterminism dpkg-dev dwz fakeroot g++ g++-10 gcc gcc-10 gettext
  intltool-debian libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libarchive-cpio-perl
  libarchive-zip-perl libasan6 libatomic1 libbinutils libc-dev-bin libc6-dev libcroco3 libcrypt-dev libctf-nobfd0
  libctf0 libdebhelper-perl libfakeroot libfile-stripnondeterminism-perl libgcc-10-dev libitm1 liblsan0 libltdl-dev
  liblua5.2-0 libmail-sendmail-perl libnsl-dev librpm8 librpmbuild8 librpmio8 librpmsign8 libsigsegv2 libstdc++-10-dev
  libsub-override-perl libsys-hostname-long-perl libtirpc-dev libtool libtsan0 libubsan1 linux-libc-dev m4 make
  manpages-dev po-debconf rpcsvc-proto rpm rpm-common rpm2cpio
提案パッケージ:
  lintian autoconf-archive gnu-standards autoconf-doc binutils-doc dh-make rpm-i18n debian-keyring g++-multilib
  g++-10-multilib gcc-10-doc gcc-multilib flex bison gcc-doc gcc-10-multilib gcc-10-locales gettext-doc
  libasprintf-dev libgettextpo-dev glibc-doc libtool-doc libstdc++-10-doc gfortran | fortran95-compiler gcj-jdk m4-doc
  make-doc libmail-box-perl elfutils rpmlint rpm2html
以下のパッケージが新たにインストールされます:
  alien autoconf automake autopoint autotools-dev binutils binutils-common binutils-x86-64-linux-gnu build-essential
  debhelper debugedit dh-autoreconf dh-strip-nondeterminism dpkg-dev dwz fakeroot g++ g++-10 gcc gcc-10 gettext
  intltool-debian libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libarchive-cpio-perl
  libarchive-zip-perl libasan6 libatomic1 libbinutils libc-dev-bin libc6-dev libcroco3 libcrypt-dev libctf-nobfd0
  libctf0 libdebhelper-perl libfakeroot libfile-stripnondeterminism-perl libgcc-10-dev libitm1 liblsan0 libltdl-dev
  liblua5.2-0 libmail-sendmail-perl libnsl-dev librpm8 librpmbuild8 librpmio8 librpmsign8 libsigsegv2 libstdc++-10-dev
  libsub-override-perl libsys-hostname-long-perl libtirpc-dev libtool libtsan0 libubsan1 linux-libc-dev m4 make
  manpages-dev po-debconf rpcsvc-proto rpm rpm-common rpm2cpio
アップグレード: 0 個、新規インストール: 67 個、削除: 0 個、保留: 0 個。
45.0 MB のアーカイブを取得する必要があります。
この操作後に追加で 188 MB のディスク容量が消費されます。
続行しますか? [Y/n] y
  :
  :
  :
bitwalk@ubuntu-pc:~$

変換する RPM パッケージ

DEB パッケージへ変換するパッケージには、最近、本ブログで取り組んでいるタッチスクリーンデバイスのファームウェア (Silead MSSL1680) の RPM を例として使います。

wget で下記のようにダウンロードします。

bitwalk@ubuntu-pc:~$ cd ダウンロード
bitwalk@ubuntu-pc:~/ダウンロード$ wget https://osdn.net/downloads/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
--2021-01-18 10:01:44--  https://osdn.net/downloads/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
osdn.net (osdn.net) をDNSに問いあわせています... 202.221.179.17
osdn.net (osdn.net)|202.221.179.17|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Found
場所: https://osdn.net/frs/chamber_redir.php?m=jaist&f=%2Fusers%2F27%2F27216%2Fmssl1680-firmware-jumper-ezpad6pro-1.0.gipm [続く]
--2021-01-18 10:01:48--  https://jaist.dl.osdn.jp/users/27/27216/mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247
c34-2.fc33.noarch.rpm
jaist.dl.osdn.jp (jaist.dl.osdn.jp) をDNSに問いあわせています... 150.65.7.130, 2001:df0:2ed:feed::feed
jaist.dl.osdn.jp (jaist.dl.osdn.jp)|150.65.7.130|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 22953 (22K)
`mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm' に保存中

mssl1680-firmware-jumper-ezpa 100%[=================================================>]  22.42K  --.-KB/s    in 0.02s

2021-01-18 10:01:48 (919 KB/s) - `mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm' へ保存完了 [22953/22953]

bitwalk@ubuntu-pc:~/ダウンロード$ ls
mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
bitwalk@ubuntu-pc:~/ダウンロード$

DEB パッケージへ変換

fakeroot で管理者を装って alien コマンドを実行します。sudo で実行しても良いのですが、その場合、出力ファイルの所有者が root になります。

bitwalk@ubuntu-pc:~/ダウンロード$ alien mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
Must run as root to convert to deb format (or you may use fakeroot).
bitwalk@ubuntu-pc:~/ダウンロード$ fakeroot alien mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb generated
bitwalk@ubuntu-pc:~/ダウンロード$ ll
-rw-rw-r--  1 bitwalk bitwalk    22953  1月 14 19:54 mssl1680-firmware-jumper-ezpad6pro-1.0.git20201209.e247c34-2.fc33.noarch.rpm
-rw-r--r--  1 bitwalk bitwalk    14032  1月 18 12:18 mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb
bitwalk@ubuntu-pc:~/ダウンロード$

変換された DEB パッケージのバージョン番号が、RPM パッケージの 2 から 3 へひとつ上がっています。

インストールと確認

apt コマンドでインストールして、問題なくインストールできることを確認します。

bitwalk@ubuntu-pc:~/ダウンロード$ sudo apt install ./mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
注意、'./mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb' の代わりに 'mssl1680-firmware-jumper-ezpad6pro' を選択します
以下のパッケージが新たにインストールされます:
  mssl1680-firmware-jumper-ezpad6pro
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
14.0 kB 中 0 B のアーカイブを取得する必要があります。
この操作後に追加で 54.3 kB のディスク容量が消費されます。
取得:1 /home/bitwalk/ダウンロード/mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb mssl1680-firmware-jumper-ezpad6pro all 1.0.git20201209.e247c34-3 [14.0 kB]
以前に未選択のパッケージ mssl1680-firmware-jumper-ezpad6pro を選択しています。
(データベースを読み込んでいます ... 現在 199117 個のファイルとディレクトリがインストールされています。)
.../mssl1680-firmware-jumper-ezpad6pro_1.0.git20201209.e247c34-3_all.deb を展開する準備をしています ...
mssl1680-firmware-jumper-ezpad6pro (1.0.git20201209.e247c34-3) を展開しています...
mssl1680-firmware-jumper-ezpad6pro (1.0.git20201209.e247c34-3) を設定しています ...
bitwalk@ubuntu-pc:~/ダウンロード$ dpkg -L mssl1680-firmware-jumper-ezpad6pro
/.
/usr
/usr/lib
/usr/lib/firmware
/usr/lib/firmware/silead
/usr/lib/firmware/silead/mssl1680.fw
/usr/share
/usr/share/doc
/usr/share/doc/mssl1680-firmware-jumper-ezpad6pro
/usr/share/doc/mssl1680-firmware-jumper-ezpad6pro/README.md
/usr/share/doc/mssl1680-firmware-jumper-ezpad6pro/changelog.Debian.gz
/usr/share/doc/mssl1680-firmware-jumper-ezpad6pro/copyright
bitwalk@ubuntu-pc:~/ダウンロード$

期待通りに元の RPM パッケージと同じファイルがインストールされているばかりでなく、changelog.Debian.gz まで加えられています。😮

bitwalk@ubuntu-pc:~/ダウンロード$ less /usr/share/doc/mssl1680-firmware-jumper-ezpad6pro/changelog.Debian.gz

mssl1680-firmware-jumper-ezpad6pro (1.0.git20201209.e247c34-3) experimental; urgency=low

  * Converted from .rpm format to .deb by alien version 8.95

  - correct firmware license to 'Proprietary'.
  - change firmwre from gsl3692-jumper-ezpad-6-pro.fw to gsl3692-jumper-ezpad-6-pro-b.fw.

 -- Fuhito Suguri   Mon, 18 Jan 2021 12:18:17 +0900
/usr/share/doc/mssl1680-firmware-jumper-ezpad6pro/changelog.Debian.gz (END)

まとめ

今回試したパッケージの中身は、もともとコンパイラによるビルドを必要としない単純な構成です。このぐらいの単純なパッケージであれば、alien を積極的に活用して、RPM や DEB のパッケージ双方をそろえていくことに努めていこうと思いました。

ちなみに、今回 DEB 形式へ変換したパッケージは、下記にアップしました。

mssl1680-firmware-jumper-ezpad6pro パッケージの公開場所

参考サイト

  1. alien-pkg-convert download | SourceForge.net
  2. Alien で rpm を deb に変換してみる - CUBE SUGAR CONTAINER [2016-03-24]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村

1 件のコメント:

匿名 さんのコメント...

わかりやすい説明でうまくインストールすることができました。感謝です。