1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

alienを使って(debからrpmに変換してCentOS|rpmからdebに変換してUbuntu)にインストールしてみる

Last updated at Posted at 2021-08-12

alienとは

みたいな話はこちらに書いてますので、参照していただけると幸いです。

Ubuntu 20.04 でdebからrpmに変換

環境の確認

$ cat /etc/os-release |grep '^VERSION='
VERSION="20.04.2 LTS (Focal Fossa)"

alienをインストール

alien がインストールされていないことを確認。

$ dpkg -l |grep alien
何も表示されない。

$ apt list --installed 2>/dev/null |grep alien
何も表示されない。

alien をインストール。

$ sudo apt-get install alien -y

alien がインストールされたことを確認。

$ dpkg -l |grep alien
ii  alien                            8.95                              all          convert and install rpm and other packages

$ apt list --installed 2>/dev/null |grep alien
alien/focal,now 8.95 all [installed]

deb を rpm に変換

jo (JSON文字列を整形するツール)をダウンロード。
※依存関係が複雑ではなく、単一のファイルでインストール可能で実行バイナリを含むパッケージを色々と探した結果、 jo が候補に上がりました。

$ sudo apt-get --download-only install jo
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  jo
0 upgraded, 1 newly installed, 0 to remove and 57 not upgraded.
Need to get 17.1 kB of archives.
After this operation, 44.0 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu focal/universe amd64 jo amd64 1.1-1 [17.1 kB]
Fetched 17.1 kB in 1s (17.9 kB/s)
Download complete and in download only mode

/var/cache/apt/archives/ 配下にダウンロードされています。

$ ls -l /var/cache/apt/archives/jo_1.1-1_amd64.deb 
-rw-r--r-- 1 root root 17112 Nov  2  2017 /var/cache/apt/archives/jo_1.1-1_amd64.deb

aliendeb から rpm に変換する場合は -r もしくは --to-rpm オプションを利用します。

$ sudo alien -r /var/cache/apt/archives/jo_1.1-1_amd64.deb
jo-1.1-2.x86_64.rpm generated

jo のrpmファイルが生成されました。

$ ls -l jo-1.1-2.x86_64.rpm 
-rw-r--r-- 1 root root 26400 Aug 11 15:25 jo-1.1-2.x86_64.rpm

CentOS 7 でrpmからdebに変換

元々はCentOS 8の環境で試していたんですが、 alien のインストールがどうしてもうまくいかずといった状況だったので、今回はCentOS 7を利用することにしました。

環境の確認

$ cat /etc/os-release |grep '^VERSION='
VERSION="7 (Core)"

alienをインストール

alien がインストールされていないことを確認。

$ rpm -q alien
package alien is not installed

$ yum -q list installed alien
Error: No matching Packages to list

alienEPELのリポジトリに含まれているので、先に epel-release をインストールする必要があります。

$ sudo yum install epel-release -y

alien をインストール。

$ sudo yum install alien -y

alien がインストールされたことを確認。

$ rpm -q alien
alien-8.95-3.el7.noarch

$ yum -q list installed alien
Installed Packages
alien.noarch                          8.95-3.el7                          @epel

rpm を deb に変換

jo (JSON文字列を整形するツール)をダウンロード。

$ yumdownloader -q --resolve jo

カレントディレクトリにダウンロードされています。

$ ls -l jo-1.4-1.el7.x86_64.rpm 
-rw-rw-r--. 1 vagrant vagrant 30886  2月 19 21:34 jo-1.4-1.el7.x86_64.rpm

alienrpm から deb に変換する場合は -d もしくは --to-deb オプションを利用します。

$ sudo alien -d jo-1.4-1.el7.x86_64.rpm 
jo_1.4-2_amd64.deb generated

jo のdebファイルが生成されました。

$ ls -l jo_1.4-2_amd64.deb 
-rw-r--r--. 1 root root 27094  8月 11 16:10 jo_1.4-2_amd64.deb

CentOS 7 の環境で変換したdebファイルを Ubuntu 20.04 でインストール

先ほど CentOS の環境で作成した jo_1.4-2_amd64.deb を Ubuntu 環境の /tmp 配下にコピーしました。

$ ls -l /tmp/jo_1.4-2_amd64.deb 
-rw-r--r-- 1 vagrant vagrant 27094 Aug 11 16:17 /tmp/jo_1.4-2_amd64.deb

変換したパッケージをインストールしてみると。。。成功しました!

$ sudo dpkg -i /tmp/jo_1.4-2_amd64.deb 
Selecting previously unselected package jo.
(Reading database ... 70529 files and directories currently installed.)
Preparing to unpack /tmp/jo_1.4-2_amd64.deb ...
Unpacking jo (1.4-2) ...
Setting up jo (1.4-2) ...
Processing triggers for man-db (2.9.1-1) ...

インストールした jo コマンドが実行可能か試してみると。。。成功しました!!

$ jo foo=bar baz=  hoge@t obj=`jo key=value` -p
{
   "foo": "bar",
   "baz": null,
   "hoge": true,
   "obj": {
      "key": "value"
   }
}

Ubuntu 20.04 の環境で変換したrpmファイルを CentOS 7 でインストール

先ほど Ubuntu の環境で作成した jo-1.1-2.x86_64.rpm を Ubuntu 環境の /tmp 配下にコピーしました。

$ ls -l /tmp/jo-1.1-2.x86_64.rpm 
-rw-r--r--. 1 vagrant vagrant 26400  8月 11 16:17 /tmp/jo-1.1-2.x86_64.rpm

変換したパッケージをインストールしてみると。。。失敗しました。

$ sudo rpm -i /tmp/jo-1.1-2.x86_64.rpm 
	ファイル / (パッケージ jo-1.1-2.x86_64 から) は、パッケージ filesystem-3.2-25.el7.x86_64 からのファイルと競合しています。
	ファイル /usr/bin (パッケージ jo-1.1-2.x86_64 から) は、パッケージ filesystem-3.2-25.el7.x86_64 からのファイルと競合しています。

このままではちょっと悔しいのでrpmファイルの中身を覗いてみます。
もし、上記のインストールが成功すると バイナリファイルの jo/usr/bin 配下に配置されることがわかります。

$ rpm -qlp /tmp/jo-1.1-2.x86_64.rpm 
/
/usr
/usr/bin
/usr/bin/jo
/usr/lib/.build-id
/usr/lib/.build-id/31
/usr/lib/.build-id/31/02e0c0a5f7118ef71b4debb920273cf76d7b14
/usr/share
/usr/share/doc
/usr/share/doc/jo
/usr/share/doc/jo/changelog.Debian.gz
/usr/share/doc/jo/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/jo.1.gz

せっかくなのでバイナリファイルの /usr/bin/jo をrpmファイルから取り出してみましょう。

作業用のディレクトリを作成します。

$ mkdir jo
$ cd jo

もう一度取り出す対象を確認します。

$ rpm2cpio /tmp/jo-1.1-2.x86_64.rpm |cpio --list
./
./usr
./usr/bin
./usr/bin/jo
./usr/lib/.build-id
./usr/lib/.build-id/31
./usr/lib/.build-id/31/02e0c0a5f7118ef71b4debb920273cf76d7b14
./usr/share
./usr/share/doc
./usr/share/doc/jo
./usr/share/doc/jo/changelog.Debian.gz
./usr/share/doc/jo/copyright
./usr/share/man
./usr/share/man/man1
./usr/share/man/man1/jo.1.gz
68 blocks

抽出対象のパスである ./usr/bin/jocpio コマンドの引数に指定して取り出します。

$ rpm2cpio /tmp/jo-1.1-2.x86_64.rpm |cpio -id ./usr/bin/jo
68 blocks

rpmファイルの中から /usr/bin/jo を取り出すことに成功しました。

$ ls -l usr/bin/jo 
-rwxr-xr-x. 1 vagrant vagrant 26616  8月 11 16:38 usr/bin/jo

-bash: jo: command not found みたいなエラーが表示されないように現在作業しているディレクトリにパスを通しておきます。

$ export PATH=$PATH:$HOME/jo/usr/bin

取り出した jo コマンドが実行可能か試してみると。。。成功しました!!

$ ~/jo/usr/bin/jo foo=bar baz=  hoge@t obj=`jo key=value` -p
{
   "foo": "bar",
   "baz": null,
   "hoge": true,
   "obj": {
      "key": "value"
   }
}

まとめ

Ubuntuの環境では成功しましたが、CentOSでの結果を見てわかるように、 alien は万能な変換ツールではなく、割と高頻度でインストールに失敗したり、インストールに成功しても正常に実行できなかったりします。
依存関係がシンプルで単一ファイルでインストールできる jo のようなパッケージでもこのように失敗するので、もっと複雑な依存関係があるパッケージだとさらに失敗する可能性が高いです。

メジャーなアプリケーションであればRedHat系/Debian系のどちらの環境にも存在するはずですし、環境に応じたパッケージをインストールすると思うので、 alien を使う機会はなかなか無いと思いますが、例えば、大量のファイル群をtgz形式で固めておいて、それをサーバーに展開して反映するといったことをやりたい場合に、通常のパッケージのインストールと同じ手順で実施したい際には、独自のrpm/debパッケージを作成して、大量のファイルを一発でインストール(展開)するといった対応方法もあるかと思います。

システム移行の都合でRedHat系のOSからDebian系のOSに載せ替えるという話はインフラを運営しているとない話ではない(あると大変だけど)ので、 そういった場合に上記のようなお手製のパッケージを alien を使って変換するのは1つの手段としてわりとありかもなぁと。

参考URL

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?