一、什么是包管理器?
很多人都不知道包管理器的概念,首先我們要了解軟件是如何運行的,我們這里介紹C程序如何實現從代碼到執行程序的過程。
程序源代碼–> 預處理–> 編譯–> 匯編–> 鏈接 –>執行
程序源碼預處理后進行編譯,編譯成目標代碼,然后匯編成二進制代碼,最后將源程序所用的庫代碼與目標代碼合并,最終形成可執行的二進制代碼
但是一般情況下一個程序不止一個二進制程序,可能存在配置文件,幫助文檔等相應文件,這時候我們就需要一個打包軟件將程序包各組件打包,打個比方,打包軟件可以根據別人通過源碼包預先定義好的配置將解壓后執行文件自動放到/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數據庫文件
三、如何獲取軟件包?
對于一個運維人員來說,服務器的安全是重中之重,不可靠的軟件包可能成為我們的安全隱患,那么我們應該到哪里去下可靠的軟件包呢?
1、軟件官網
軟件的官方站點提供的軟件肯定是最可靠的,可以下載源代碼自行編譯安裝
2、發行版本官方鏡像站點
發行版本的官方鏡像站點中提供的軟件包絕對是可靠的
3、如果是RHEL系,則去EPEL
EPEL(Extras Packages Enterprise Linux)項目是由Fedora發起的,EPEL中包含眾多優秀可靠的軟件,點擊進入EPEL站點
4、搜索,pkgs.org,rpmfind.net
http://pkgs.org 這個網站可以搜索各大發行版中的軟件,非常好用,軟件包也很全
5、國內鏡像站點
國內有許多公司都做了鏡像站,稍后我們會教大家通過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
升級
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:禁用所有插件
簡單的構建一個本地倉庫
嘗試安裝軟件
repo文件中可用的變量
yum的repo配置文件中可用的變量: $releasever:當前OS發行版本的主板編號 $arch:平臺 $basearch:基礎平臺 #YUM0-$YUM9
使用createrepo針對指定軟件生成repodata
六、編譯安裝程序包
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服務
總結
這篇文章思考的地方不多,大部分只是敘述過程,讓大家知道如何使用各種姿勢安裝軟件
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/12414
贊! 好文,為寫標簽的細節點贊,為精心打造的內容占贊。文章置頂。