概要
Linuxには大きく分けて「Red Hat系(RPM)」と「Debian系(deb)」の2つのパッケージ管理方式がありますが、これらに互換性はありません。 alien コマンドを使用すると、異なる形式のパッケージファイルを変換し、自分のディストリビューションでインストール可能な形式にすることができます。「Ubuntuを使っているが、RPM形式でしか配布されていないソフトを使いたい」といった場面で重宝するツールです。
仕様(引数・オプション)
構文
alien [オプション] [変換元ファイル名]
コンバート形式指定オプション
変換先のフォーマットを指定するオプションです。
| オプション | 説明 |
| -d / –to-deb | deb形式(Debian, Ubuntu等)へ変換します(デフォルト)。 |
| -r / –to-rpm | RPM形式(RHEL, CentOS, Fedora等)へ変換します。 |
| -t / –to-tgz | tgz形式(Slackware, 単なる圧縮アーカイブ)へ変換します。 |
| -p / –to-pkg | pkg形式(Solaris)へ変換します。 |
その他の主なオプション
| オプション | 説明 |
| -i / –install | 変換したパッケージを自動的にシステムへインストールします。 |
| –bump=数値 | 変換時にパッケージのバージョン番号(リリース番号)を加算します。 |
| –description=要約 | パッケージの説明文を指定した文字列に変更します。 |
| -T / –test | スクリプトのテストを行います(実際には変換しません)。 |
| –target=アーキテクチャ | ターゲットアーキテクチャ(amd64, i386等)を強制的に指定します。 |
alienがサポートする主なフォーマット
| フォーマット名 | 説明 |
| RPM | Red Hat Enterprise Linux, CentOS, AlmaLinux, Fedoraなどで使用される形式。 |
| deb | Debian, Ubuntu, Kali Linux, Linux Mintなどで使用される形式。 |
| tgz | Slackwareで使用される形式。または単なるtar+gzipアーカイブ。 |
| pkg | Solaris 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) 同じパッケージを何度も変換し直す際、バージョンが重複してインストールできないことを防ぐために、自動的にリリース番号を増やします。Bash
alien --to-deb --bump=1 package.rpm - アーキテクチャの指定 (–target) クロスプラットフォーム開発などで、異なるCPUアーキテクチャ用のパッケージとして出力したい場合に使用します。Bash
alien --to-deb --target=arm64 package.rpm
注意点
- 依存関係は解決されない
alienはバイナリファイルやディレクトリ構造を変換して詰め直すだけです。変換元のパッケージが必要とする「ライブラリ(依存関係)」までは変換・解決してくれません。実行時に「ライブラリが見つからない」というエラーが出ることが多々あります。 - インストールスクリプトの欠落 RPMやdebに含まれる
pre-installやpost-installといった設定用スクリプトは、変換時に無視されるか、正しく動作しないことが多いです。システム設定を深く書き換えるような複雑なパッケージ(データベースやWebサーバーなど)の変換には不向きです。 - Root権限の必要性 ファイルの所有権やパーミッションを正しく保持するために、
alienコマンドは基本的にsudo(ルート権限)で実行することをお勧めします。
応用
tgz形式に変換して中身だけ取り出す
インストールはしたくないが、パッケージの中にある特定のバイナリファイルだけを取り出したい場合、汎用的な tgz に変換してから解凍するのが手っ取り早いです。
# tgzに変換
sudo alien --to-tgz proprietary-driver.rpm
# 解凍して中身を確認
tar zxvf proprietary-driver.tgz
まとめ
alien コマンドは、ディストリビューションの壁を越えてソフトウェアを利用するための強力な架け橋です。 ただし、万能な変換ツールではなく、あくまで「簡易的な移植ツール」であることを理解しておく必要があります。依存関係の少ない単体ツールや、公式パッケージが存在しない古いソフトウェアを利用する際の「最後の手段」として活用してください。
