天天看點

linux軟體包安裝

http://evanlinux.blog.51cto.com/7247558/1310884

本文主要讨論了幾種常見的軟體包安裝方法,分别是編譯好的RPM包的安裝、RPM源碼包的安裝、yum工具的使用、二進制軟體包的安裝,中間會涉及到具體的安裝過程以及各種指令的使用。下文中的例子都是在RHEL 6.4中完成的。

常見的軟體安裝方式

1. 編譯好的rpm包的安裝

RPM的介紹

RPM是RedHat Package Manager(RedHat軟體包管理工具)的縮寫,這一檔案格式名稱雖然打上了RedHat的标志,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業标準了。

RPM軟體包名的結構

name-version-release.arch.rpm

RPM的常用指令

linux軟體包安裝

安裝過程:

以安裝 xv-3.10a.jumbopatch.20070520-18.el6.i686.rpm為例

1

2

3

4

5

6

7

8

9

10

<code>[root@FLyence rpm]# ll xv-</code><code>3</code><code>.10a.xv-</code><code>3</code><code>.10a.jumbopatch.</code><code>20070520</code><code>-</code><code>18</code><code>.el6.i686.rpm</code>

<code>-rw-r--r--.</code><code>1</code><code>root root</code><code>533568</code><code>Oct</code><code>18</code><code>2013</code><code>xv-</code><code>3</code><code>.10a.xv-</code><code>3</code><code>.10a.jumbopatch.</code><code>20070520</code><code>-</code><code>18</code><code>.el6.i686.rpm</code>

<code>#</code>

<code>[root@FLyence rpm]# rpm -q xv</code>

<code>package</code><code>xv</code><code>is</code><code>not installed #查詢有沒有安裝過xv</code>

<code>[root@FLyence rpm]# rpm -iv xv-</code><code>3</code><code>.10a.xv-</code><code>3</code><code>.10a.jumbopatch.</code><code>20070520</code><code>-</code><code>18</code><code>.el6.i686.rpm</code>

<code>warning: xv-</code><code>3</code><code>.10a.xv-</code><code>3</code><code>.10a.jumbopatch.</code><code>20070520</code><code>-</code><code>18</code><code>.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID 5568bbb2: NOKEY</code>

<code>Preparing packages</code><code>for</code><code>installation...</code>

<code>xv-</code><code>3</code><code>.10a.jumbopatch.</code><code>20070520</code><code>-</code><code>18</code><code>.el6</code>

2. rpm源碼包的安裝

以.src.rpm結尾的,這類軟體包是包含了源代碼的rpm包,在安裝時需要進行編譯。需要根據spec制作成相應arch的rpm包,再進行安裝。

以安裝agg-2.5-9.el6.src.rpm為例

<code>[root@FLyence ~]# rpm -ivh agg-</code><code>2.5</code><code>-</code><code>9</code><code>.el6.src.rpm</code>

<code>warning: agg-</code><code>2.5</code><code>-</code><code>9</code><code>.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY</code>

<code></code><code>1</code><code>:agg ########################################### [</code><code>100</code><code>%]</code>

之後,在家目錄會生成一個rpmbuild的檔案夾

<code>[root@FLyence ~]</code><code># ls rpmbuild/</code>

<code>SOURCES SPECS</code>

進入SPECS檔案夾後,

<code>[root@FLyence SPECS]# rpmbuild -ba agg.spec</code>

<code>#耐心等待吧</code>

這裡-ba會同時生成編譯好的rpm包和源碼rpm包,-bb則隻是生成編譯好的rpm包。

編譯好後,會多出好幾個檔案夾

<code>[root@FLyence rpmbuild]</code><code># ls</code>

<code>BUILD BUILDROOT RPMS SOURCES SPECS SRPMS</code>

在RPMS檔案夾中就是編譯好的rpm檔案,SRPMS中則為src檔案

<code>[root@FLyence rpmbuild]</code><code># ls RPMS/i686/</code>

<code>agg-2.5-9.el6.i686.rpm agg-debuginfo-2.5-9.el6.i686.rpm agg-devel-2.5-9.el6.i686.rpm</code>

<code>[root@FLyence rpmbuild]</code><code># ls SRPMS/</code>

<code>agg-2.5-9.el6.src.rpm</code>

已編譯好的rpm包就可以按上面的方法安裝

3. yum工具的使用

Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE、CentOS中的Shell前端軟體包管理器。基於RPM包管理,能夠從指定的伺服器自動下載下傳RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載下傳、安裝。

下面是yum的option,見名知意,還是很簡單的。

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

<code>* install package1 [package2] [...]</code>

<code>* update [package1] [package2] [...]</code>

<code>* update-to [package1] [package2] [...]</code>

<code>* check-update</code>

<code>* upgrade [package1] [package2] [...]</code>

<code>* upgrade-to [package1] [package2] [...]</code>

<code>* distribution-synchronization [package1] [package2] [...]</code>

<code>* remove | erase package1 [package2] [...]</code>

<code>* list [...]</code>

<code>* info [...]</code>

<code>* provides | whatprovides feature1 [feature2] [...]</code>

<code>* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]</code>

<code>* makecache</code>

<code>* groupinstall group1 [group2] [...]</code>

<code>* groupupdate group1 [group2] [...]</code>

<code>* grouplist [hidden] [groupwildcard] [...]</code>

<code>* groupremove group1 [group2] [...]</code>

<code>* groupinfo group1 [...]</code>

<code>* search string1 [string2] [...]</code>

<code>* shell [filename]</code>

<code>* resolvedep dep1 [dep2] [...]</code>

<code>* localinstall rpmfile1 [rpmfile2] [...]</code>

<code></code><code>(maintained</code><code>for</code><code>legacy reasons only -</code><code>use</code><code>install)</code>

<code>* localupdate rpmfile1 [rpmfile2] [...]</code>

<code></code><code>(maintained</code><code>for</code><code>legacy reasons only -</code><code>use</code><code>update)</code>

<code>* reinstall package1 [package2] [...]</code>

<code>* downgrade package1 [package2] [...]</code>

<code>* deplist package1 [package2] [...]</code>

<code>* repolist [all|enabled|disabled]</code>

<code>* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]</code>

<code>* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|</code><code>new</code><code>|sync|stats]</code>

<code>* load-transaction [txfile]</code>

<code>* check</code>

<code>* help [command]</code>

例如:安裝lftp這個工具

<code>[root@FLyence rpmbuild]</code><code># yum -y install lftp</code>

<code>Loaded plugins: fastestmirror, refresh-packagekit, security</code>

<code>Loading mirror speeds from cached hostfile</code>

<code>Setting up Install Process</code>

<code>Resolving Dependencies</code>

<code>--&gt; Running transaction check</code>

<code>---&gt; Package lftp.i686 0:4.0.9-1.el6 will be installed</code>

<code>--&gt; Finished Dependency Resolution</code>

<code>Dependencies Resolved</code>

<code>=======================================================================================================</code>

<code></code><code>Package Arch Version Repository Size</code>

<code>Installing:</code>

<code></code><code>lftp i686 4.0.9-1.el6 163_mirror 735 k</code>

<code>Transaction Summary</code>

<code>Install 1 Package(s)</code>

<code>Total download size: 735 k</code>

<code>Installed size: 2.3 M</code>

<code>Downloading Packages:</code>

<code>lftp-4.0.9-1.el6.i686.rpm | 735 kB 00:03</code>

<code>Running rpm_check_debug</code>

<code>Running Transaction Test</code>

<code>Transaction Test Succeeded</code>

<code>Running Transaction</code>

<code></code><code>Installing : lftp-4.0.9-1.el6.i686 1</code><code>/1</code>

<code></code><code>Verifying : lftp-4.0.9-1.el6.i686 1</code><code>/1</code>

<code>Installed:</code>

<code></code><code>lftp.i686 0:4.0.9-1.el6</code>

<code>Complete!</code>

yum會自動解決依賴關系,管理軟體很友善

4. 二進制軟體包的安裝

其實,在linux下面安裝一個源碼包是最常見的。安裝一個源碼包,需要我們自己将源代碼編譯成二進制的可執行檔案。如果你讀得懂這些源代碼,那麼你就可以去修改這些源代碼自定義功能,然後再去編譯成你想要的。使用源碼包的好處除了可以自定義修改源代碼外還可以定制相關的功能,因為源碼包在編譯的時候是可以附加額外的選項的。

源碼包的編譯用到了linux系統裡的編譯器,常見的源碼包一般都是用C語言開發的,這也是因為C語言為linux上最标準的程式語言。Linux上的C語言編譯器叫做gcc,利用它就可以把C語言變成可執行的二進制檔案。是以如果你的機器上沒有安裝gcc就沒有辦法去編譯源碼。你可以使用 yum install -y gcc 來完成安裝。

安裝一個源碼包,通常需要三個步驟:

1. ./configure 在這一步可以定制功能,加上相應的選項即可,具有有什麼選項可以通過"./configure --help"指令來檢視。在這一步會自動檢測你的linux系統與相關的套件是否有編譯該源碼包時需要的庫,因為一旦缺少某個庫就不能完成編譯。隻有檢測通過後才會生成一個Makefile檔案。

2. make使用這個指令會根據Makefile檔案中預設的參數進行編譯,這一步其實就是gcc在工作了。

3. make install 安裝步驟,生成相關的軟體存放目錄和配置檔案的過程。

上面介紹的3步并不是所有的源碼包軟體都一樣的,筆者以前也曾經遇到過,安裝步驟并不是這樣,也就是說源碼包的安裝并非具有一定的标準安裝步驟。這就需要你拿到源碼包解壓後,然後進入到目錄找相關的幫助文檔,通常會以INSTALL或者README為檔案名。這個檔案記得一定要看。

下面以安裝htop-1.0.2.tar.gz為例

準備htop-1.0.2.tar.gz

<code>[root@FLyence ~]</code><code># ls htop-1.0.2.tar.gz</code>

<code>htop-1.0.2.</code><code>tar</code><code>.gz</code>

解壓

<code>[root@FLyence ~]</code><code># tar -xf htop-1.0.2.tar.gz</code>

進入htop-1.0.2

<code>[root@FLyence ~]</code><code># cd htop-1.0.2</code>

<code>[root@FLyence htop-1.0.2]</code><code># ls</code>

<code>aclocal.m4 ColumnsPanel.c Header.h Makefile.</code><code>in</code><code>ScreenManager.c</code>

<code>Affinity.c ColumnsPanel.h HostnameMeter.c MemoryMeter.c ScreenManager.h</code>

<code>Affinity.h compile HostnameMeter.h MemoryMeter.h scripts</code>

<code>AffinityPanel.c config.guess htop.1 Meter.c Settings.c</code>

<code>AffinityPanel.h config.h htop.1.</code><code>in</code><code>Meter.h Settings.h</code>

<code>AUTHORS config.h.</code><code>in</code><code>htop.c MetersPanel.c SignalsPanel.c</code>

<code>autogen.sh config.sub htop.desktop MetersPanel.h SignalsPanel.h</code>

<code>AvailableColumnsPanel.c configure htop.h missing String.c</code>

<code>AvailableColumnsPanel.h configure.ac htop.png NEWS String.h</code>

<code>AvailableMetersPanel.c COPYING INSTALL Object.c SwapMeter.c</code>

<code>AvailableMetersPanel.h CPUMeter.c</code><code>install</code><code>-sh Object.h SwapMeter.h</code>

<code>BatteryMeter.c CPUMeter.h IOPriority.c OpenFilesScreen.c TasksMeter.c</code>

<code>BatteryMeter.h CRT.c IOPriority.h OpenFilesScreen.h TasksMeter.h</code>

<code>CategoriesPanel.c CRT.h IOPriorityPanel.c Panel.c TraceScreen.c</code>

<code>CategoriesPanel.h depcomp IOPriorityPanel.h Panel.h TraceScreen.h</code>

<code>ChangeLog DisplayOptionsPanel.c ListItem.c Process.c UptimeMeter.c</code>

<code>CheckItem.c DisplayOptionsPanel.h ListItem.h Process.h UptimeMeter.h</code>

<code>CheckItem.h FunctionBar.c LoadAverageMeter.c ProcessList.c UsersTable.c</code>

<code>ClockMeter.c FunctionBar.h LoadAverageMeter.h ProcessList.h UsersTable.h</code>

<code>ClockMeter.h Hashtable.c ltmain.sh README Vector.c</code>

<code>ColorsPanel.c Hashtable.h m4 RichString.c Vector.h</code>

<code>ColorsPanel.h Header.c Makefile.am RichString.h</code>

使用./configure -help,檢視定制選項,--prefix=PREFIX,選擇安裝的目錄

<code>[root@FLyence htop-1.0.2]</code><code># ./configure --prefix=/usr/local/htop</code>

<code>checking</code><code>for</code><code>gcc... gcc</code>

<code>checking whether the C compiler works...</code><code>yes</code>

<code>checking</code><code>for</code><code>C compiler default output</code><code>file</code><code>name... a.out</code>

<code>checking</code><code>for</code><code>suffix of executables...</code>

<code>checking whether we are cross compiling... no</code>

<code>checking</code><code>for</code><code>suffix of object files... o</code>

<code>checking whether we are using the GNU C compiler...</code><code>yes</code>

<code>##等待一會兒</code>

檢視生成的Makefile檔案

<code>[root@FLyence htop-1.0.2]</code><code># ls Makefile</code>

<code>Makefile</code>

使用make進行編譯

<code>[root@FLyence htop-1.0.2]</code><code># make</code>

<code>make</code><code>all-am</code>

<code>make</code><code>[1]: Entering directory `</code><code>/root/htop-1</code><code>.0.2'</code>

<code>gcc -DHAVE_CONFIG_H -I. -DNDEBUG -pedantic -Wall -Wextra -std=c99 -rdynamic -D_XOPEN_SOURCE_EXTENDED -DSYSCONFDIR=\"</code><code>/usr/local/htop/etc</code><code>\" -g -O2 -MT htop-AvailableMetersPanel.o -MD -MP -MF .deps</code><code>/htop-AvailableMetersPanel</code><code>.Tpo -c -o htop-AvailableMetersPanel.o `</code><code>test</code><code>-f</code><code>'AvailableMetersPanel.c'</code><code>||</code><code>echo</code><code>'./'</code><code>`AvailableMetersPanel.c</code>

<code>#等待</code>

最後隻要make install進行安裝即可。

<code>[root@FLyence htop-1.0.2]</code><code># make install</code>

<code>make</code><code>install</code><code>-am</code>

<code>make</code><code>[2]: Entering directory `</code><code>/root/htop-1</code><code>.0.2'</code>

<code>test</code><code>-z</code><code>"/usr/local/htop/bin"</code><code>||</code><code>/bin/mkdir</code><code>-p</code><code>"/usr/local/htop/bin"</code>

<code></code><code>/bin/sh</code><code>.</code><code>/libtool</code><code>--mode=</code><code>install</code><code>/usr/bin/install</code><code>-c htop</code><code>'/usr/local/htop/bin'</code>

<code>libtool:</code><code>install</code><code>:</code><code>/usr/bin/install</code><code>-c htop</code><code>/usr/local/htop/bin/htop</code>

<code>test</code><code>-z</code><code>"/usr/local/htop/share/applications"</code><code>||</code><code>/bin/mkdir</code><code>-p</code><code>"/usr/local/htop/share/applications"</code>

<code></code><code>/usr/bin/install</code><code>-c -m 644 htop.desktop</code><code>'/usr/local/htop/share/applications'</code>

<code>test</code><code>-z</code><code>"/usr/local/htop/share/man/man1"</code><code>||</code><code>/bin/mkdir</code><code>-p</code><code>"/usr/local/htop/share/man/man1"</code>

<code></code><code>/usr/bin/install</code><code>-c -m 644 htop.1</code><code>'/usr/local/htop/share/man/man1'</code>

<code>test</code><code>-z</code><code>"/usr/local/htop/share/pixmaps"</code><code>||</code><code>/bin/mkdir</code><code>-p</code><code>"/usr/local/htop/share/pixmaps"</code>

<code></code><code>/usr/bin/install</code><code>-c -m 644 htop.png</code><code>'/usr/local/htop/share/pixmaps'</code>

<code>make</code><code>[2]: Leaving directory `</code><code>/root/htop-1</code><code>.0.2'</code>

<code>make</code><code>[1]: Leaving directory `</code><code>/root/htop-1</code><code>.0.2'</code>

檢視安裝目錄,确實安裝成功了

<code>[root@FLyence htop-</code><code>1.0</code><code>.</code><code>2</code><code>]# ll /usr/local/htop/</code>

<code>total</code><code>8</code>

<code>drwxr-xr-x.</code><code>2</code><code>root root</code><code>4096</code><code>Oct</code><code>8</code><code>19</code><code>:</code><code>32</code><code>bin</code>

<code>drwxr-xr-x.</code><code>5</code><code>root root</code><code>4096</code><code>Oct</code><code>8</code><code>19</code><code>:</code><code>32</code><code>share</code>

這是直接使用htop指令,卻不會成功。

<code>[root@FLyence htop-1.0.2]</code><code># htop</code>

<code>-</code><code>bash</code><code>: htop:</code><code>command</code><code>not found</code>

這是因為PATH路徑找不到該指令。

在bash的配置檔案,當然有很多,例如/etc/profile, /etc/profile.d/下的檔案,~/.bash_profile, ~/.bashrc等。隻要在其中找一個檔案,配置依稀PATH變量即可。

<code>vim ~/.bash_profile</code>

<code></code><code>1</code><code># .bash_profile</code>

<code></code><code>2</code>

<code></code><code>3</code><code># Get the aliases and functions</code>

<code></code><code>4</code><code>if</code><code>[ -f ~/.bashrc ]; then</code>

<code></code><code>5</code><code>. ~/.bashrc</code>

<code></code><code>6</code><code>fi</code>

<code></code><code>7</code>

<code></code><code>8</code><code># User specific environment and startup programs</code>

<code></code><code>9</code>

<code></code><code>10</code><code>PATH=$PATH:$HOME/bin:/usr/local/htop/bin</code>

<code></code><code>11</code>

<code></code><code>12</code><code>export PATH</code>

然後運作htop

linux軟體包安裝

當然,想要用man查詢htop時,也是不行的,因為查找路徑沒有配置。

<code>[root@FLyence htop-1.0.2]</code><code># man htop</code>

<code>No manual entry</code><code>for</code><code>htop</code>

有兩種方法:

1. 使用-M選項,指定查找目錄

<code>[root@FLyence htop-</code><code>1.0</code><code>.</code><code>2</code><code>]# man htop -M /usr/local/htop/share/man</code>

linux軟體包安裝

2.在配置檔案/etc/man.conf中增加MANPATH的範圍。

由于htop是比較小的軟體,安裝好的目錄下并沒有include目錄。放安裝較大的軟體時,如apache,安裝好會有自身的庫檔案。這時需要将安裝目錄下的include檔案夾連結到/usr/include/中

<code>ln -sv /usr/local/apache/</code><code>include</code><code>/usr/</code><code>include</code><code>/httpd</code>

繼續閱讀