【Linux】alienコマンドでRPMとdebパッケージを相互変換する

目次

概要

Linuxには大きく分けて「Red Hat系(RPM)」と「Debian系(deb)」の2つのパッケージ管理方式がありますが、これらに互換性はありません。 alien コマンドを使用すると、異なる形式のパッケージファイルを変換し、自分のディストリビューションでインストール可能な形式にすることができます。「Ubuntuを使っているが、RPM形式でしか配布されていないソフトを使いたい」といった場面で重宝するツールです。

仕様(引数・オプション)

構文

alien [オプション] [変換元ファイル名]

コンバート形式指定オプション

変換先のフォーマットを指定するオプションです。

オプション説明
-d / –to-debdeb形式(Debian, Ubuntu等)へ変換します(デフォルト)。
-r / –to-rpmRPM形式(RHEL, CentOS, Fedora等)へ変換します。
-t / –to-tgztgz形式(Slackware, 単なる圧縮アーカイブ)へ変換します。
-p / –to-pkgpkg形式(Solaris)へ変換します。

その他の主なオプション

オプション説明
-i / –install変換したパッケージを自動的にシステムへインストールします。
–bump=数値変換時にパッケージのバージョン番号(リリース番号)を加算します。
–description=要約パッケージの説明文を指定した文字列に変更します。
-T / –testスクリプトのテストを行います(実際には変換しません)。
–target=アーキテクチャターゲットアーキテクチャ(amd64, i386等)を強制的に指定します。

alienがサポートする主なフォーマット

フォーマット名説明
RPMRed Hat Enterprise Linux, CentOS, AlmaLinux, Fedoraなどで使用される形式。
debDebian, Ubuntu, Kali Linux, Linux Mintなどで使用される形式。
tgzSlackwareで使用される形式。または単なるtar+gzipアーカイブ。
pkgSolaris OSで使用されるパッケージ形式。

基本の使い方

RPMパッケージ(ここでは sl-5.02-1.el8.x86_64.rpm)を、Ubuntuなどで使えるdebパッケージに変換します。 デフォルトでは -d が指定されたものとみなされます。

# RPMファイルをdebファイルに変換
sudo alien --to-deb sl-5.02-1.el8.x86_64.rpm

実行結果例

sl_5.02-2_amd64.deb generated

※元ファイルと同じディレクトリに変換後のファイルが生成されます。

実践コマンド

debパッケージからRPMパッケージに変換する

逆に、Ubuntu用のパッケージをCentOSなどで使えるように変換します。

# debファイルをRPMファイルに変換
sudo alien --to-rpm sl_5.02-1_amd64.deb

実行結果例

sl-5.02-2.x86_64.rpm generated

RPMパッケージを変換してそのままインストールする

変換作業と dpkg -i コマンドによるインストールを一度に行います。 Ubuntu環境でRPMソフトをすぐに試したい場合に便利です。

# 変換とインストールを同時に実行
sudo alien -i sl-5.02-1.el8.x86_64.rpm

実行結果例

sl_5.02-2_amd64.deb generated
Selecting previously unselected package sl.
(Reading database ... 20543 files and directories currently installed.)
Preparing to unpack sl_5.02-2_amd64.deb ...
Unpacking sl (5.02-2) ...
Setting up sl (5.02-2) ...

複数の形式へ同時に変換する

一つのdebファイルから、RPMファイルとtgzファイルを同時に生成します。

# RPMとtgzへ同時に変換
sudo alien --to-rpm --to-tgz sl_5.02-1_amd64.deb

カスタムポイント

  • バージョン番号のインクリメント (–bump) 同じパッケージを何度も変換し直す際、バージョンが重複してインストールできないことを防ぐために、自動的にリリース番号を増やします。Bashalien --to-deb --bump=1 package.rpm
  • アーキテクチャの指定 (–target) クロスプラットフォーム開発などで、異なるCPUアーキテクチャ用のパッケージとして出力したい場合に使用します。Bashalien --to-deb --target=arm64 package.rpm

注意点

  1. 依存関係は解決されない alien はバイナリファイルやディレクトリ構造を変換して詰め直すだけです。変換元のパッケージが必要とする「ライブラリ(依存関係)」までは変換・解決してくれません。実行時に「ライブラリが見つからない」というエラーが出ることが多々あります。
  2. インストールスクリプトの欠落 RPMやdebに含まれる pre-installpost-install といった設定用スクリプトは、変換時に無視されるか、正しく動作しないことが多いです。システム設定を深く書き換えるような複雑なパッケージ(データベースやWebサーバーなど)の変換には不向きです。
  3. Root権限の必要性 ファイルの所有権やパーミッションを正しく保持するために、alien コマンドは基本的に sudo(ルート権限)で実行することをお勧めします。

応用

tgz形式に変換して中身だけ取り出す

インストールはしたくないが、パッケージの中にある特定のバイナリファイルだけを取り出したい場合、汎用的な tgz に変換してから解凍するのが手っ取り早いです。

# tgzに変換
sudo alien --to-tgz proprietary-driver.rpm

# 解凍して中身を確認
tar zxvf proprietary-driver.tgz

まとめ

alien コマンドは、ディストリビューションの壁を越えてソフトウェアを利用するための強力な架け橋です。 ただし、万能な変換ツールではなく、あくまで「簡易的な移植ツール」であることを理解しておく必要があります。依存関係の少ない単体ツールや、公式パッケージが存在しない古いソフトウェアを利用する際の「最後の手段」として活用してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次