linux alien rpm,使用 Alien 互相轉換 Linux 的 rpm 與 deb 套件檔

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 轉換後的套件有一定的風險,橫跨不同體系的 Linux 有可能會造成檔案損毀,除非真的沒辦法,否則不建議使用。

以下我們示範 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-releaseCentOS 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 version8.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 version8.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 dateutilsdateutils-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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
deb to rpm工具 用法 [root@yun alien]# ls Alien alien.lsm alien.lsm.in alien.pl alien.spec alien.spec.in debian gendiff.txt GPL INSTALL Makefile.PL README TODO [root@yun alien]# ./alien.pl You must specify a file to convert. Usage: alien [options] file [...] file [...] Package file or files to convert. -d, --to-deb Generate a Debian deb package (default). Enables these options: --patch= Specify patch file to use instead of automatically looking for patch in /var/lib/alien. --nopatch Do not use patches. --anypatch Use even old version os patches. -s, --single Like --generate, but do not create .orig directory. --fixperms Munge/fix permissions and owners. --test Test generated packages with lintian. -r, --to-rpm Generate a Red Hat rpm package. --to-slp Generate a Stampede slp package. -l, --to-lsb Generate a LSB package. -t, --to-tgz Generate a Slackware tgz package. Enables these options: --description= Specify package description. --version= Specify package version. -p, --to-pkg Generate a Solaris pkg package. -i, --install Install generated package. -g, --generate Generate build tree, but do not build package. -c, --scripts Include scripts in package. -v, --verbose Display each command alien runs. --veryverbose Be verbose, and also display output of run commands. -k, --keep-version Do not change version of generated package. --bump=number Increment package version by this number. -h, --help Display this help message. -V, --version Display alien's version number. [root@yun alien]# ./Makefile.PL Writing Makefile for Alien [root@yun alien]# ls Alien alien.lsm.in alien.spec debian GPL Makefile mysqlcc_0.9.4-0ubuntu1_i386.deb TODO alien.lsm alien.pl alien.spec.in gendiff.txt INSTALL Makefile.PL README [root@yun alien]# ./alien.pl -r mysqlcc_0.9.4-0ubuntu1_i386.deb Warning: Skipping conversion of scripts in package mysqlcc: postinst postrm Warning: Use the --scripts parameter to include the scripts. mysqlcc-0.9.4-1.i386.rpm generated [root@yun alien]# ls Alien alien.lsm.in alien.spec debian GPL Makefile mysqlcc_0.9.4-0ubuntu1_i386.deb README alien.lsm alien.pl alien.spec.in gendiff.txt INSTALL Makefile.PL mysqlcc-0.9.4-1.i386.rpm TODO [root@yun alien]# make cp Alien/Package/Deb.pm blib/lib/Alien/Package/Deb.pm cp Alien/Package/Tgz.pm blib/lib/Alien/Package/Tgz.pm cp Alien/Package.pm blib/lib/Alien/Package.pm cp Alien/Package/Rpm.pm blib/lib/Alien/Package/Rpm.pm cp Alien/Package/Pkg.pm blib/lib/Alien/Package/Pkg.pm cp Alien/Package/Lsb.pm blib/lib/Alien/Package/Lsb.pm cp Alien/Package/Slp.pm blib/lib/Alien/Package/Slp.pm perl -pe '$_="" if /use lib/; $_="our \$Version=\"8.79\";\n" if /VERSION_AUTOREPLACE/' alien.pl > alien cp alien blib/script/alien /usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/alien Manifying blib/man1/alien.1 Manifying blib/man3/Alien::Package::Tgz.3pm Manifying blib/man3/Alien::Package::Deb.3pm Manifying blib/man3/Alien::Package::Rpm.3pm Manifying blib/man3/Alien::Package.3pm Manifying blib/man3/Alien::Package::Pkg.3pm Manifying blib/man3/Alien::Package::Lsb.3pm Manifying blib/man3/Alien::Package::Slp.3pm perl -i -pe "s/\@version\@/8.79/g" alien.lsm perl -i -pe "s/\@version\@/8.79/g" alien.spec [root@yun alien]# make install perl -i -pe "s/\@version\@/8.79/g" alien.lsm perl -i -pe "s/\@version\@/8.79/g" alien.spec Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Deb.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Lsb.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Pkg.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Rpm.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Slp.pm Installing /usr/local/lib/perl5/site_perl/5.10.0/Alien/Package/Tgz.pm Installing /usr/local/share/man/man1/alien.1 Installing /usr/local/share/man/man3/Alien::Package.3pm Installing /usr/local/share/man/man3/Alien::Package::Deb.3pm Installing /usr/local/share/man/man3/Alien::Package::Lsb.3pm Installing /usr/local/share/man/man3/Alien::Package::Pkg.3pm Installing /usr/local/share/man/man3/Alien::Package::Rpm.3pm Installing /usr/local/share/man/man3/Alien::Package::Slp.3pm Installing /usr/local/share/man/man3/Alien::Package::Tgz.3pm Installing /usr/local/bin/alien Writing /usr/local/lib/perl5/site_perl/5.10.0/i386-linux-thread-multi/auto/Alien/.packlist install -d /usr/local/share/alien/patches \ /var/lib/alien Appending installation info to /usr/lib/perl5/5.10.0/i386-linux-thread-multi/perllocal.pod [root@yun alien]#

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值