教你使用rpm、yum、編譯等方式安裝軟件

一、什麼是包管理器?


    很多人都不知道包管理器的概念,首先我們要了解軟件是如何運行的,我們這裏介紹C程序如何實現從代碼到執行程序的過程。

        程序源代碼--> 預處理--> 編譯--> 彙編--> 鏈接 -->執行 

        程序源碼預處理後進行編譯,編譯成目標代碼,然後彙編成二進制代碼,最後將源程序所用的庫代碼與目標代碼合併,最終形成可執行的二進制代碼

        blob.png

    但是一般情況下一個程序不止一個二進制程序,可能存在配置文件,幫助文檔等相應文件,這時候我們就需要一個打包軟件將程序包各組件打包,打個比方,打包軟件可以根據別人通過源碼包預先定義好的配置將解壓後執行文件自動放到/bin,配置文件自動放到/etc/,幫助文檔自動放到/usr/share/man...在Linux各發行版本中有很多打包軟件可以供我們使用。

    例如:

        debian系:包名deb,管理工具dpkg

        redhat系:包名rpm,管理工具rpm

        ...

    本文主要介紹rpm


二、RPM原理及使用

   衆所周知,組合小程序完成複雜任務是Linux哲學思想之一,再加上Linux上大部分軟件就是自由軟件,可以避免“重複製造輪子”這種事情發生。但是這也會引發很多問題、比如,A軟件需要B和C才能運行,如果我們不看文檔可能不知道A軟件需要B和C軟件才能運行,所以在安裝A軟件的時候就非常的麻煩,早期Linux用戶就深受這個問題的困擾,安裝一個軟件需要很多時間。後來,就有很多公司或社區開發了相應包管理工具,可以通過包管理工具得知安裝軟件所需的軟件包。


    RPM(Redhat Package Manager/ RPM is Package Manager)可以將編譯好的應用程序各組成文件(二進制程序、幫助文檔、配置文件),從而方便快捷實現程序包的安裝、卸載、查詢、升級和校驗等操作。


    1、程序包組成清單(每個包獨有)

        文件清單

        安裝或卸載文件時運行的腳本

    2、數據庫(公共)

        程序包名稱及版本

        依賴關係

        功能說明

        安裝生產的各文件的文件路徑及校驗碼信息


 查看rpm數據庫文件

    blob.png

    

二、如何獲取軟件包?

    對於一個運維人員來說,服務器的安全是重中之重,不可靠的軟件包可能成爲我們的安全隱患,那麼我們應該到哪裏去下可靠的軟件包呢?

        1、軟件官網

            軟件的官方站點提供的軟件肯定是最可靠的,可以下載源代碼自行編譯安裝

        2、發行版本官方鏡像站點

            發行版本的官方鏡像站點中提供的軟件包絕對是可靠的

        3、如果是RHEL系,則去EPEL

            EPEL(Extras Packages Enterprise Linux)項目是由Fedora發起的,EPEL中包含衆多優秀可靠的軟件,點擊進入EPEL站點

        4、搜索,pkgs.org,rpmfind.net

            http://pkgs.org 這個網站可以搜索各大發行版中的軟件,非常好用,軟件包也很全 

        5、國內鏡像站點

            http://mirrors.aliyun.com

            http://mirrors.163.com 

            國內有許多公司都做了鏡像站,稍後我們會教大家通過yum來實現將它們作爲我們的軟件倉庫。 



三、rpm安裝軟件包

rpm命令用法


安裝:

rpm {-i|--install} [install-options] PACKAGE_FILE ...
    -v: verbose
    -vv: 更多信息
    -h: 以#顯示程序包管理執行進度;每個#表示2%的進度
    rpm -ivh PACKAGE_FILE ...

[install-options]
    --test: 測試安裝,但不真正執行安裝過程;dry run模式;
    --nodeps:忽略依賴關係;
    --replacepkgs: 重新安裝;
    --nosignature: 不檢查來源合法性;
    --nodigest:不檢查包完整性;
    --noscipts:不執行程序包腳本片斷;
    %pre: 安裝前腳本; --nopre
    %post: 安裝後腳本; --nopost
    %preun: 卸載前腳本; --nopreun
    %postun: 卸載後腳本;  --nopostun

blob.png


升級

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
    freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作;
    rpm -Uvh PACKAGE_FILE ...
    rpm -Fvh PACKAGE_FILE ...
    --oldpackage:降級;
    --force: 強行升級;
注意:(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,對直接安裝新版本內核;
    (2) 如果原程序包的配置文件安裝後曾被修改,長級時,新版本的提供的同一個配置文件並不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)後保留;


查詢

rpm {-q|--query} [select-options] [query-options]
    [select-options]
    -a: 所有包
    -f: 查看指定的文件由哪個程序包安裝生成
    -p /PATH/TO/PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作;
    --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
    --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
    
[query-options]
    --changelog:查詢rpm包的changlog
    -c: 查詢程序的配置文件
    -d: 查詢程序的文檔
    -i: information
    -l: 查看指定的程序包安裝後生成的所有文件;
    --scripts:程序包自帶的腳本片斷
    -R: 查詢指定的程序包所依賴的CAPABILITY;
    --provides: 列出指定程序包所提供的CAPABILITY;
 用法:
    -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
    -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
    -qa


卸載

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
           [--notriggers] [--test] PACKAGE_NAME ...


校驗

rpm {-V|--verify} [select-options] [verify-options]
    S file Size differs
    M Mode differs (includes permissions and file type)
    5 digest (formerly MD5 sum) differs
    D Device major/minor number mismatch
    L readLink(2) path mismatch
    U User ownership differs
    G Group ownership differs
    T mTime differs
    P caPabilities differ

	包來源合法性驗正及完整性驗正:
		完整性驗正:SHA256
		來源合法性驗正:RSA


		公鑰加密:
			對稱加密:加密、解密使用同一密鑰;
			非對稱加密:密鑰是成對兒的,
				public key: 公鑰,公開所有人
				secret key: 私鑰, 不能公開


		導入所需要公鑰:
			rpm --import /PATH/FROM/GPG-PUBKEY-FILE

			CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7


數據庫重建

rpm {--initdb|--rebuilddb}
initdb: 初始化
如果事先不存在數據庫,則新建之;否則,不執行任何操作;
rebuilddb:重建
無論當前存在與否,直接重新創建數據庫;


   三、使用yum解決依賴關係安裝軟件

    很多人使用rpm安裝軟件包時、需要解決很多依賴關係,rpm包管理器既然可以獲取軟件之間的依賴關係爲什麼不能自動解決呢?我們這裏就需要使用YUM讓軟件安裝時自動解決依賴關係。

    什麼是YUM?

        YUM(Yellowdog Update Modiflier),yum客戶端通過文件服務器獲取軟件倉庫的元數據來分析軟件倉庫有哪些軟件、相互的依賴關係。

    

yum定義倉庫

yum的配置文件:
    /etc/yum.conf		#爲所有倉庫提供公共配置
    /etc/yum.repos.d/*.repo		#爲倉庫的指向提供配置信息

vim /etc/yum.repos.d/repoistory.repo

[repositoryID]
name=Some name for this repository
baseurl=url://path/to/repository
mirrorlist:
enable={1|0}
gpgcheck={1|0}
repo_gpgcheck={1|0}
gpgkey=URL
enablegroups={1|0}
failovermethod={roundrobin | priority}
cost=#    默認爲1000


yum相關命令用法


yum [options] [command] [package...]

顯示倉庫列表
 yum repolist [all|enabled|disabled]    #顯示repository, 第一次使用會從服務器上下載元數據

顯示程序包
yum list [all | glob_exp1] [glob_exp2] [...]
yum list [available | installed | updates] [glob_exp1] [...]

安裝程序包
install package1 [...]
reinstall package1 [...]

升級程序包
update [package1] [...]
downgrade [package1] [...]     #降級安裝

檢查可用升級:
check-update

卸載程序包
remove | erase package1 [...]

查看程序的information
info [...]

查看指定的特性是由哪個程序包提供
provides| whatprovieds feature [...]

清理本地緩存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all]

構建緩存:
makecache

以指定關鍵字搜索程序包名及summary信息
search string [...]

查看指定包依賴關係
deplist package1 [...]

查看yum事務歷史
history [info | list | packages-list | packages-info | summary | addon-info | redo | undo | stat...]

安裝及升級本地程序包:
localinstall rpmfile1
localupdate rpmfile1

包組管理的相關命令:
* groupinstall group1 [group2] [...]
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]


yum的命令行選項:
--nogpgcheck:禁止進行gpg check
-y:自動回答爲"yes"
-q:靜默模式
--disablerepo=repoid 臨時禁用此處指定的repo
--enablerepo=repoid 臨時啓動此處啓用的repo
--noplugins:禁用所有插件


簡單的構建一個本地倉庫

blob.png

嘗試安裝軟件

blob.png


repo文件中可用的變量

yum的repo配置文件中可用的變量:
    $releasever:當前OS發行版本的主板編號
    $arch:平臺
    $basearch:基礎平臺
    #YUM0-$YUM9



使用createrepo針對指定軟件生成repodata

blob.png

blob.png


   四、編譯安裝程序包

C源代碼編譯安裝三步驟:

    1、./configure

          (1) 通過選項傳遞參數,指定啓用特性、安裝路徑等,執行時會參考用戶的指定以及Makefile.in文件生成makefile文件

          (2) 檢查依賴到的外部環境

    2、make

      根據makefile文件,構建應用程序

    3、make install

      執行對應腳本,將對應文件複製到相應路徑中


        編譯安裝前的建議先看INSTALL和REDME文件,各軟件編譯安裝方式可能不同


獲取源碼包:

    1、官方站點

        apache.org

        mariadb.org

        ...

    2、代碼託管

        sourceForge

        Github.com

        code.google.com

        ...



編譯C源代碼程序:

    前提:提供開發工具及開發環境

        開發工具:make、gcc等

        開發環境:標準庫、頭文件等


    在RHEL系的系統中可以通過包組的形式直接安裝開發環境和開發工具

        CentOS 6:yum groupinstall -y "Development Tools" "Server Paltform Development "


我們現在編譯安裝httpd-2.2,可以通過http://httpd.apache.org 下載源碼包


[root@server2 ~]# tar xf httpd-2.2.25.tar.bz2 

[root@server2 ~]# yum groupinstall "Development Tools" "Server Paltform Development" -y
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Group Process
Loading mirror speeds from cached hostfile
Package 1:make-3.81-20.el6.x86_64 already installed and latest version
Package patch-2.6-6.el6.x86_64 already installed and latest version
Package 1:pkgconfig-0.23-9.1.el6.x86_64 already installed and latest version
Package gettext-0.17-18.el6.x86_64 already installed and latest version
Package binutils-2.20.51.0.2-5.43.el6.x86_64 already installed and latest version
Package elfutils-0.161-3.el6.x86_64 already installed and latest version
Package cvs-1.11.23-16.el6.x86_64 already installed and latest version
Warning: Group Server Paltform Development does not exist.
Resolving Dependencies
--> Running transaction check
---> Package autoconf.noarch 0:2.63-5.1.el6 will be installed
---> Package automake.noarch 0:1.11.1-4.el6 will be installed
---> Package bison.x86_64 0:2.4.1-5.el6 will be installed
---> Package byacc.x86_64 0:1.9.20070509-7.el6 will be installed
---> Package cscope.x86_64 0:15.6-6.el6 will be installed
---> Package ctags.x86_64 0:5.8-2.el6 will be installed
---> Package diffstat.x86_64 0:1.51-2.el6 will be installed
---> Package doxygen.x86_64 1:1.6.1-6.el6 will be installed
---> Package flex.x86_64 0:2.5.35-9.el6 will be installed
---> Package gcc.x86_64 0:4.4.7-16.el6 will be installed
--> Processing Dependency: cpp = 4.4.7-16.el6 for package: gcc-4.4.7-16.el6.x86_64
--> Processing Dependency: cloog-ppl >= 0.15 for package: gcc-4.4.7-16.el6.x86_64
---> Package gcc-c++.x86_64 0:4.4.7-16.el6 will be installed
--> Processing Dependency: libstdc++-devel = 4.4.7-16.el6 for package: gcc-c++-4.4.7-16.el6.x86_64
--> Processing Dependency: libmpfr.so.1()(64bit) for package: gcc-c++-4.4.7-16.el6.x86_64
---> Package gcc-gfortran.x86_64 0:4.4.7-16.el6 will be installed
--> Processing Dependency: libgfortran = 4.4.7-16.el6 for package: gcc-gfortran-4.4.7-16.el6.x86_64
--> Processing Dependency: libgfortran.so.3()(64bit) for package: gcc-gfortran-4.4.7-16.el6.x86_64
---> Package git.x86_64 0:1.7.1-3.el6_4.1 will be installed
--> Processing Dependency: perl-Git = 1.7.1-3.el6_4.1 for package: git-1.7.1-3.el6_4.1.x86_64


                        中間省略

Installed:
  autoconf.noarch 0:2.63-5.1.el6                          automake.noarch 0:1.11.1-4.el6             bison.x86_64 0:2.4.1-5.el6                 
  byacc.x86_64 0:1.9.20070509-7.el6                       cscope.x86_64 0:15.6-6.el6                 ctags.x86_64 0:5.8-2.el6                   
  diffstat.x86_64 0:1.51-2.el6                            doxygen.x86_64 1:1.6.1-6.el6               flex.x86_64 0:2.5.35-9.el6                 
  gcc.x86_64 0:4.4.7-16.el6                               gcc-c++.x86_64 0:4.4.7-16.el6              gcc-gfortran.x86_64 0:4.4.7-16.el6         
  git.x86_64 0:1.7.1-3.el6_4.1                            indent.x86_64 0:2.2.10-7.el6               intltool.noarch 0:0.41.0-1.1.el6           
  libtool.x86_64 0:2.2.6-15.5.el6                         patchutils.x86_64 0:0.3.1-3.1.el6          rcs.x86_64 0:5.7-37.el6                    
  redhat-rpm-config.noarch 0:9.0.3-44.el6.centos          rpm-build.x86_64 0:4.8.0-47.el6            subversion.x86_64 0:1.6.11-14.el6          
  swig.x86_64 0:1.3.40-6.el6                              systemtap.x86_64 0:2.7-2.el6              
Dependency Installed:
  cloog-ppl.x86_64 0:0.15.7-1.2.el6                  cpp.x86_64 0:4.4.7-16.el6                         gettext-devel.x86_64 0:0.17-18.el6       
  gettext-libs.x86_64 0:0.17-18.el6                  kernel-devel.x86_64 0:2.6.32-573.el6              libgcj.x86_64 0:4.4.7-16.el6             
  libgfortran.x86_64 0:4.4.7-16.el6                  libstdc++-devel.x86_64 0:4.4.7-16.el6             mpfr.x86_64 0:2.4.1-6.el6                
  perl-Compress-Raw-Zlib.x86_64 1:2.021-141.el6      perl-Compress-Zlib.x86_64 0:2.021-141.el6         perl-Error.noarch 1:0.17015-4.el6        
  perl-Git.noarch 0:1.7.1-3.el6_4.1                  perl-HTML-Parser.x86_64 0:3.64-2.el6              perl-HTML-Tagset.noarch 0:3.20-4.el6     
  perl-IO-Compress-Base.x86_64 0:2.021-141.el6       perl-IO-Compress-Zlib.x86_64 0:2.021-141.el6      perl-URI.noarch 0:1.40-2.el6             
  perl-XML-Parser.x86_64 0:2.36-7.el6                perl-libwww-perl.noarch 0:5.833-2.el6             ppl.x86_64 0:0.10.2-11.el6               
  systemtap-client.x86_64 0:2.7-2.el6                systemtap-devel.x86_64 0:2.7-2.el6               
Complete!




[root@server2 httpd-2.2.25]# ./configure --prefix=/usr/src/apache2 --sysconfdir=/etc/apache2    #設置軟件主目錄爲/usr/src/apache2,配置文件路徑爲/etc/apache2

checking for library containing socket... none required
checking for library containing crypt... -lcrypt
checking for main in -ltruerand... no
checking for library containing modf... none required

Checking for Threads...
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking for CFLAGS needed for pthreads... -pthread
  adding "-pthread" to CFLAGS
checking for LIBS needed for pthreads... -lpthread
  adding "-lpthread" to LIBS
checking for pthread.h... (cached) yes
checking whether pthread_getspecific takes two arguments... no
checking whether pthread_attr_getdetachstate takes one argument... no
checking for recursive mutex support... yes
checking for pthread_key_delete... yes
checking for pthread_rwlock_init... yes
checking for pthread_attr_setguardsize... yes
checking for pthread_yield... yes
checking for pthread_rwlock_t... yes
APR will use threads
checking for readdir in -lc_r... no
checking for gethostbyname in -lc_r... no
checking for gethostbyaddr in -lc_r... no
checking for getservbyname in -lc_r... no
checking for gethostbyname_r... yes
checking for getpwuid_r... yes
checking for getgrnam_r... yes
checking for getgrgid_r... yes

中間省略

Checking for Shared Memory Support...
checking for library containing shm_open... -lrt
checking for sys/types.h... (cached) yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking sys/ipc.h usability... yes
checking sys/ipc.h presence... yes
checking for sys/ipc.h... yes
checking sys/mutex.h usability... no
checking sys/mutex.h presence... no
checking for sys/mutex.h... no
checking sys/shm.h usability... yes
checking sys/shm.h presence... yes
checking for sys/shm.h... yes
checking sys/file.h usability... yes
checking sys/file.h presence... yes
checking for sys/file.h... yes
checking kernel/OS.h usability... no
checking kernel/OS.h presence... no
checking for kernel/OS.h... no
checking os2.h usability... no
checking os2.h presence... no
checking for os2.h... nog docs/conf/extra/httpd-dav.conf
config.status: creating docs/conf/extra/httpd-default.conf
config.status: creating docs/conf/extra/httpd-info.conf
config.status: creating docs/conf/extra/httpd-languages.conf
config.status: creating docs/conf/extra/httpd-manual.conf
config.status: creating docs/conf/extra/httpd-mpm.conf
config.status: creating docs/conf/extra/httpd-multilang-errordoc.conf
config.status: creating docs/conf/extra/httpd-ssl.conf
config.status: creating docs/conf/extra/httpd-userdir.conf
config.status: creating docs/conf/extra/httpd-vhosts.conf
config.status: creating include/ap_config_layout.h
config.status: creating support/apxs
config.status: creating support/apachectl
config.status: creating support/dbmmanage
config.status: creating support/envvars-std
config.status: creating support/log_server_status
config.status: creating support/logresolve.pl
config.status: creating support/phf_abuse_log.cgi
config.status: creating support/split-logfile


[root@server2 httpd-2.2.25]# make && make install    #開始編譯

Making install in srclib
make[1]: Entering directory `/root/httpd-2.2.25/srclib'
Making install in apr
make[2]: Entering directory `/root/httpd-2.2.25/srclib/apr'
/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o passwd/apr_getpass.lo -c passwd/apr_getpass.c && touch passwd/apr_getpass.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_cpystrn.lo -c strings/apr_cpystrn.c && touch strings/apr_cpystrn.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_fnmatch.lo -c strings/apr_fnmatch.c && touch strings/apr_fnmatch.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_snprintf.lo -c strings/apr_snprintf.c && touch strings/apr_snprintf.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_strings.lo -c strings/apr_strings.c && touch strings/apr_strings.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_strnatcmp.lo -c strings/apr_strnatcmp.c && touch strings/apr_strnatcmp.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o strings/apr_strtok.lo -c strings/apr_strtok.c && touch strings/apr_strtok.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o tables/apr_hash.lo -c tables/apr_hash.c && touch tables/apr_hash.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o tables/apr_tables.lo -c tables/apr_tables.c && touch tables/apr_tables.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o atomic/unix/builtins.lo -c atomic/unix/builtins.c && touch atomic/unix/builtins.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o atomic/unix/ia32.lo -c atomic/unix/ia32.c && touch atomic/unix/ia32.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o atomic/unix/mutex.lo -c atomic/unix/mutex.c && touch atomic/unix/mutex.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE   
-I./include -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I./include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include/arch/unix -I/root/httpd-2.2.25/srclib/apr/include  -o atomic/unix/ppc.lo -c atomic/unix/ppc.c && touch atomic/unix/ppc.lo/bin/sh /root/httpd-2.2.25/srclib/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_S

省略



編譯完成後嘗試啓動httpd

[root@server2 httpd-2.2.25]# /usr/src/apache2/bin/apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using server2.example.com for ServerName    #雖然報錯,但是已經啓動

[root@server2 httpd-2.2.25]# netstat -tan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 0.0.0.0:40417               0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      
tcp        0      0 127.0.0.1:6010              0.0.0.0:*                   LISTEN      
tcp        0      0 192.168.192.129:22          192.168.192.1:5040          ESTABLISHED 
tcp        0      0 :::111                      :::*                        LISTEN      
tcp        0      0 :::80                       :::*                        LISTEN          #80端口已監聽
tcp        0      0 :::34229                    :::*                        LISTEN      
tcp        0      0 :::22                       :::*                        LISTEN      
tcp        0      0 ::1:631                     :::*                        LISTEN      
tcp        0      0 ::1:25                      :::*                        LISTEN      
tcp        0      0 ::1:6010                    :::*                        LISTEN      
[root@server2 httpd-2.2.25]#

驗證httpd服務

blob.png



總結


    這篇文章思考的地方不多,大部分只是敘述過程,讓大家知道如何使用各種姿勢安裝軟件


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