Alien 是一個可以將 Linux 的 rpm 檔與 deb 檔互相轉換的小工具,方便 Linux 管理者安裝各種類型的軟體。
通常 Linux 系統管理者都很熟悉使用自己系統上的套件管理系統來安裝軟體,例如 Debian 系列的 Linux 就會使用 apt 或 aptitude,Red Hat 系列的 Linux 則使用 yum,而 SUSE 可以使用 zypper,另外也可以直接使用比較低階 dpkg
或 rpm
指令直接安裝套件檔,如果不想從套件管理系統安裝,也可以選擇從原始碼編譯安裝,這些都是一般在安裝軟體時常用的方式。
這裡我們要介紹 Alien 這個套件轉換工具,它可以將 Linux 最常見的 .rpm 檔與 .deb 檔互相轉換,如果您需要的套件類型剛好跟手上有的套件類型不同,就可以用 Alien 轉換一下,這種狀況通常會發生在安裝商業軟體時,廠商只提供打包好的 .rpm 檔或是 .deb 檔,沒有原始碼,只能透過這樣的工具來轉換。
以下我們示範 Alien 的安裝與使用方式。
安裝 Alien
如果是在 CentOS/RHEL 7 中,要先安裝 EPEL 與 Nux Dextop repositories:
sudo yum install epel-release
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
接著安裝 Nux Dextop:
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
本文撰寫時最新的版本是 0.5,您可以從 li.nux.ro 上面查看是否有更新的版本。
接著安裝 Alien:
sudo yum update sudo yum install alien
上面的操作步驟同樣適用於 Fedora Linux。
如果是 Debian 系列的 Linux,就直接用 apt 安裝即可:
sudo apt-get install alien
deb 檔轉 rpm 檔
這裡我們示範如何將 .deb 檔轉換為 .rpm 檔,使用的測試環境為 CentOS 7:
cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core)
以下我們選用 dateutils
這個套件為範例,示範使用 Alien 將 .deb 檔轉換為 .rpm 檔的步驟。
Step 1
通常在實際的狀況下,您的手上應該會有一個 .deb 檔,而這裡我們從 Debian 官方網站下載一個 dateutils 的 .deb 檔來做測試:
wget http://ftp.us.debian.org/debian/pool/main/d/dateutils/dateutils_0.3.1-1.1_amd64.deb
Step 2
接著使用 Alien 把 .deb 檔轉換為 .rpm 檔:
sudo alien --to-rpm --scripts dateutils_0.3.1-1.1_amd64.deb
如果順利的話,應該會看到類似這樣的訊息:
dateutils-0.3.1-2.1.x86_64.rpm generated
雖然只是轉換檔案,但是因為有檔案權限的問題,需要使用 root 權限來進行轉換,如果使用一般的使用者權限的話,會出現這樣的警告訊息:
Warning: alien is not running as root! Warning: Ownerships of files in the generated packages will probably be wrong.
這裡還要注意一下套件版本的問題,Alien 在轉換套件時,會自動遞增版本的編號,以這個 dateutils
例子來說,轉換前的版本是 0.3.1-1.1
,而經過 Alien 轉換之後,新的版本編號就變成 0.3.1-2.1
,如果您不希望 Alien 自動更改版本編號,可以加上 --keep-version
參數。
Step 3
接著測試轉換出來的 .rpm 檔,使用 rpm
指令安裝:
sudo rpm -Uvh dateutils-0.3.1-2.1.x86_64.rpm
結果出現這樣的錯誤訊息:
正在準備… ################################# [100%] 從 dateutils-0.3.1-2.1.x86_64 安裝的檔案 / 與來自套件 filesystem-3.2-20.el7.x86_64 的檔案產生衝突 從 dateutils-0.3.1-2.1.x86_64 安裝的檔案 /usr/bin 與來自套件 filesystem-3.2-20.el7.x86_64 的檔案產生衝突
Step 4
接著我們要修正這個檔案衝突的問題,啟用 epel-testing
這個套件庫(repository),安裝 rpmrebuild
這個可以修改 rpm 套件的工具:
sudo yum --enablerepo=epel-testing install rpmrebuild
接著使用 rpmrebuild
修正 rpm 檔:
sudo rpmrebuild -pe dateutils-0.3.1-2.1.x86_64.rpm
rpmrebuild
會使用系統預設的編輯器來編輯 spec file 設定檔,在這個設定檔中,尋找 %files
這個段落:
(Converted from a deb package by alien version 8.90.) %files %dir %attr(0755, root, root) "/" %dir %attr(0755, root, root) "/usr" %dir %attr(0755, root, root) "/usr/bin" %attr(0755, root, root) "/usr/bin/dateutils.dadd" %attr(0755, root, root) "/usr/bin/dateutils.dconv" %attr(0755, root, root) "/usr/bin/dateutils.ddiff"
把 /
與 /usr/bin
這兩個衝突的項目拿掉(刪除這兩行),改成這樣:
(Converted from a deb package by alien version 8.90.) %files %dir %attr(0755, root, root) "/usr" %attr(0755, root, root) "/usr/bin/dateutils.dadd" %attr(0755, root, root) "/usr/bin/dateutils.dconv" %attr(0755, root, root) "/usr/bin/dateutils.ddiff"
修改好之後,存檔離開,離開時會詢問是否要繼續:
Do you want to continue ? (y/N)
請輸入 y
繼續,接著就產生新的 rpm 檔:
result: /root/rpmbuild/RPMS/x86_64/dateutils-0.3.1-2.1.x86_64.rpm
Step 5
安裝修改好的 rpm 檔:
sudo rpm -Uvh /root/rpmbuild/RPMS/x86_64/dateutils-0.3.1-2.1.x86_64.rpm
這樣就可以正常安裝了,輸出會像這樣:
正在準備… ################################# [100%] Updating / installing... 1:dateutils-0.3.1-2.1 ################################# [100%]
檢查一下套件列表,確認是否有裝進去:
rpm -qa | grep dateutils
dateutils-0.3.1-2.1.x86_64
最後再看一下 /usr/bin
下面新裝進去的檔案:
ls -l /usr/bin | grep dateutils
-rwxr-xr-x. 1 root root 158224 11月 15 2014 dateutils.dadd -rwxr-xr-x. 1 root root 154128 11月 15 2014 dateutils.dconv -rwxr-xr-x. 1 root root 162320 11月 15 2014 dateutils.ddiff -rwxr-xr-x. 1 root root 178704 11月 15 2014 dateutils.dgrep -rwxr-xr-x. 1 root root 166416 11月 15 2014 dateutils.dround -rwxr-xr-x. 1 root root 158224 11月 15 2014 dateutils.dseq -rwxr-xr-x. 1 root root 154320 11月 15 2014 dateutils.dsort -rwxr-xr-x. 1 root root 150032 11月 15 2014 dateutils.dtest -rwxr-xr-x. 1 root root 154128 11月 15 2014 dateutils.dzone -rwxr-xr-x. 1 root root 150096 11月 15 2014 dateutils.strptime
實際執行測試:
dateutils.dconv --from-zone America/Chicago -z Europe/Berlin '2012-03-01 12:00' -i '%F %H:%M' -f '%F %T'
輸出為:
2012-03-01 19:00:00
這樣就完安裝了。
繼續閱讀: 12