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的常用命令

124306626.png


安裝過程:

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

1
2
3
4
5
6
7
8
9
10
[root@FLyence rpm]# ll xv-3.10a.xv-3.10a.jumbopatch.20070520-18.el6.i686.rpm
-rw-r--r--. 1root root 533568Oct 182013xv-3.10a.xv-3.10a.jumbopatch.20070520-18.el6.i686.rpm
#
[root@FLyence rpm]# rpm -q xv
packagexv isnot installed #查詢有沒有安裝過xv
#
[root@FLyence rpm]# rpm -iv xv-3.10a.xv-3.10a.jumbopatch.20070520-18.el6.i686.rpm
warning: xv-3.10a.xv-3.10a.jumbopatch.20070520-18.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID 5568bbb2: NOKEY
Preparing packages forinstallation...
xv-3.10a.jumbopatch.20070520-18.el6


2. rpm源碼包的安裝

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


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

1
2
3
[root@FLyence ~]# rpm -ivh agg-2.5-9.el6.src.rpm
warning: agg-2.5-9.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
1:agg ########################################### [100%]

之後,在家目錄會生成一個rpmbuild的文件夾

1
2
[root@FLyence ~]# ls rpmbuild/
SOURCES SPECS

進入SPECS文件夾後,

1
2
[root@FLyence SPECS]# rpmbuild -ba agg.spec
#耐心等待吧

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

編譯好後,會多出好幾個文件夾

1
2
[root@FLyence rpmbuild]# ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

在RPMS文件夾中就是編譯好的rpm文件,SRPMS中則爲src文件

1
2
[root@FLyence rpmbuild]# ls RPMS/i686/
agg-2.5-9.el6.i686.rpm agg-debuginfo-2.5-9.el6.i686.rpm agg-devel-2.5-9.el6.i686.rpm
1
2
[root@FLyence rpmbuild]# ls SRPMS/
agg-2.5-9.el6.src.rpm

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



3. yum工具的使用

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
* install package1 [package2] [...]
* update [package1] [package2] [...]
* update-to [package1] [package2] [...]
* check-update
* upgrade [package1] [package2] [...]
* upgrade-to [package1] [package2] [...]
* distribution-synchronization [package1] [package2] [...]
* remove | erase package1 [package2] [...]
* list [...]
* info [...]
* provides | whatprovides feature1 [feature2] [...]
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
* makecache
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]
* search string1 [string2] [...]
* shell [filename]
* resolvedep dep1 [dep2] [...]
* localinstall rpmfile1 [rpmfile2] [...]
(maintained forlegacy reasons only - useinstall)
* localupdate rpmfile1 [rpmfile2] [...]
(maintained forlegacy reasons only - useupdate)
* reinstall package1 [package2] [...]
* downgrade package1 [package2] [...]
* deplist package1 [package2] [...]
* repolist [all|enabled|disabled]
* version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|roll-back|new|sync|stats]
* load-transaction [txfile]
* check
* help [command]


例如:安裝lftp這個工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@FLyence rpmbuild]# yum -y install lftp
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package lftp.i686 0:4.0.9-1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=======================================================================================================
Package Arch Version Repository Size
=======================================================================================================
Installing:
lftp i686 4.0.9-1.el6 163_mirror 735 k
Transaction Summary
=======================================================================================================
Install 1 Package(s)
Total download size: 735 k
Installed size: 2.3 M
Downloading Packages:
lftp-4.0.9-1.el6.i686.rpm | 735 kB 00:03
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : lftp-4.0.9-1.el6.i686 1/1
Verifying : lftp-4.0.9-1.el6.i686 1/1
Installed:
lftp.i686 0:4.0.9-1.el6
Complete!

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

1
2
[root@FLyence ~]# ls htop-1.0.2.tar.gz
htop-1.0.2.tar.gz

解壓

1
[root@FLyence ~]# tar -xf htop-1.0.2.tar.gz

進入htop-1.0.2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@FLyence ~]# cd htop-1.0.2
[root@FLyence htop-1.0.2]# ls
aclocal.m4 ColumnsPanel.c Header.h Makefile.inScreenManager.c
Affinity.c ColumnsPanel.h HostnameMeter.c MemoryMeter.c ScreenManager.h
Affinity.h compile HostnameMeter.h MemoryMeter.h scripts
AffinityPanel.c config.guess htop.1 Meter.c Settings.c
AffinityPanel.h config.h htop.1.inMeter.h Settings.h
AUTHORS config.h.inhtop.c MetersPanel.c SignalsPanel.c
autogen.sh config.sub htop.desktop MetersPanel.h SignalsPanel.h
AvailableColumnsPanel.c configure htop.h missing String.c
AvailableColumnsPanel.h configure.ac htop.png NEWS String.h
AvailableMetersPanel.c COPYING INSTALL Object.c SwapMeter.c
AvailableMetersPanel.h CPUMeter.c install-sh Object.h SwapMeter.h
BatteryMeter.c CPUMeter.h IOPriority.c OpenFilesScreen.c TasksMeter.c
BatteryMeter.h CRT.c IOPriority.h OpenFilesScreen.h TasksMeter.h
CategoriesPanel.c CRT.h IOPriorityPanel.c Panel.c TraceScreen.c
CategoriesPanel.h depcomp IOPriorityPanel.h Panel.h TraceScreen.h
ChangeLog DisplayOptionsPanel.c ListItem.c Process.c UptimeMeter.c
CheckItem.c DisplayOptionsPanel.h ListItem.h Process.h UptimeMeter.h
CheckItem.h FunctionBar.c LoadAverageMeter.c ProcessList.c UsersTable.c
ClockMeter.c FunctionBar.h LoadAverageMeter.h ProcessList.h UsersTable.h
ClockMeter.h Hashtable.c ltmain.sh README Vector.c
ColorsPanel.c Hashtable.h m4 RichString.c Vector.h
ColorsPanel.h Header.c Makefile.am RichString.h

使用./configure -help,查看定製選項,--prefix=PREFIX,選擇安裝的目錄

1
2
3
4
5
6
7
8
9
[root@FLyence htop-1.0.2]# ./configure --prefix=/usr/local/htop
checking forgcc... gcc
checking whether the C compiler works... yes
checking forC compiler default output filename... a.out
checking forsuffix of executables...
checking whether we are cross compiling... no
checking forsuffix of object files... o
checking whether we are using the GNU C compiler... yes
##等待一會兒

查看生成的Makefile文件

1
2
[root@FLyence htop-1.0.2]# ls Makefile
Makefile

使用make進行編譯

1
2
3
4
5
[root@FLyence htop-1.0.2]# make
makeall-am
make[1]: Entering directory `/root/htop-1.0.2'
gcc -DHAVE_CONFIG_H -I. -DNDEBUG -pedantic -Wall -Wextra -std=c99 -rdynamic -D_XOPEN_SOURCE_EXTENDED -DSYSCONFDIR=\"/usr/local/htop/etc\" -g -O2 -MT htop-AvailableMetersPanel.o -MD -MP -MF .deps/htop-AvailableMetersPanel.Tpo -c -o htop-AvailableMetersPanel.o `test-f 'AvailableMetersPanel.c'|| echo'./'`AvailableMetersPanel.c
#等待

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@FLyence htop-1.0.2]# make install
makeinstall-am
make[1]: Entering directory `/root/htop-1.0.2'
make[2]: Entering directory `/root/htop-1.0.2'
test-z "/usr/local/htop/bin"|| /bin/mkdir-p "/usr/local/htop/bin"
/bin/sh./libtool--mode=install/usr/bin/install-c htop '/usr/local/htop/bin'
libtool: install: /usr/bin/install-c htop /usr/local/htop/bin/htop
test-z "/usr/local/htop/share/applications"|| /bin/mkdir-p"/usr/local/htop/share/applications"
/usr/bin/install-c -m 644 htop.desktop '/usr/local/htop/share/applications'
test-z "/usr/local/htop/share/man/man1"|| /bin/mkdir-p "/usr/local/htop/share/man/man1"
/usr/bin/install-c -m 644 htop.1 '/usr/local/htop/share/man/man1'
test-z "/usr/local/htop/share/pixmaps"|| /bin/mkdir-p "/usr/local/htop/share/pixmaps"
/usr/bin/install-c -m 644 htop.png '/usr/local/htop/share/pixmaps'
make[2]: Leaving directory `/root/htop-1.0.2'
make[1]: Leaving directory `/root/htop-1.0.2'

查看安裝目錄,確實安裝成功了

1
2
3
4
[root@FLyence htop-1.0.2]# ll /usr/local/htop/
total 8
drwxr-xr-x. 2root root 4096Oct 819:32bin
drwxr-xr-x. 5root root 4096Oct 819:32share

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

1
2
[root@FLyence htop-1.0.2]# htop
-bash: htop: commandnot found


這是因爲PATH路徑找不到該命令

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

1
2
3
4
5
6
7
8
9
10
11
12
13
vim ~/.bash_profile
1# .bash_profile
2
3# Get the aliases and functions
4if[ -f ~/.bashrc ]; then
5. ~/.bashrc
6fi
7
8# User specific environment and startup programs
9
10PATH=$PATH:$HOME/bin:/usr/local/htop/bin
11
12export PATH

然後運行htop

150334149.png


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

1
2
[root@FLyence htop-1.0.2]# man htop
No manual entry forhtop

有兩種方法:

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

1
[root@FLyence htop-1.0.2]# man htop -M /usr/local/htop/share/man

150737247.png


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

151327899.png


由於htop是比較小的軟件,安裝好的目錄下並沒有include目錄。放安裝較大的軟件時,如apache,安裝好會有自身的庫文件。這時需要將安裝目錄下的include文件夾鏈接到/usr/include/中

1
ln -sv /usr/local/apache/include/usr/include/httpd


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章