教你使用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

总结

    这篇文章思考的地方不多,大部分只是叙述过程,让大家知道如何使用各种姿势安装软件

原创文章,作者:Net18-AnyISalIn,如若转载,请注明出处:http://www.178linux.com/12414

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-09
下一篇 2016-03-09

相关推荐

  • 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    BSD开源协议(original BSD license、FreeBSD license、Original BSD license) BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码…

    Linux干货 2017-01-30
  • 一个PHP程序员学习运维的转型

         我是一位PHP开发工程师,平时负责前端、后端以及服务器端的工作,但是称不上是个牛逼的程序员。网上热烈讨论一则传闻,“全栈工程师”(Full Stack Engineer),要求应征者对开发堆栈的每个方面都有所掌握。那究竟何为 “全栈工程师”呢?从字面上来理解,全栈工程师必须熟悉开发堆栈的每一个层次,或者至少熟悉绝大多数…

    Linux干货 2017-04-02
  • 特殊权限之SUID、SGID、STICKY

    特殊权限        在系统中,难免有一些比较特殊的用户或文件目录,但是普通的权限有不能解决我们的需求,于是就有特殊权限帮我们解决这个问题 特殊权限有三个:SUID、SGID、STICKY      首先,先说说安全上下文: 进程以某用户的身份运行,那么进程将会以此用户身份去完成所有操作…

    Linux干货 2016-08-05
  • 十二.Linux博客-2016年8月16日文件查找和压缩、rpm包管理、while循环、until循环

    格式说明: 操作 概念 命令 说明及举例 十二.文件查找和压缩、rpm包管理、yum、while循环、until循环 tar tar -zcvf /testdir/etc.tar.gz /etc/ 备份etc创建etc.tar.gz文件 压缩为gz格式 显示过程 tar -jcvf&nbs…

    Linux干货 2016-08-24
  • 如何实现本地yum源的共享

    上一篇关于Linux yum客户端的配置的博客,介绍了如何通过修改本机yum配置文件来访问网络或者本地的yun sever, 本文就来介绍一下,如何把我们的本地RPM包像yum sever一样通过http或ftp网络方式共享出去。 一、准备好发行版光盘,包,元数据    CentOS-6.8-x86_64-bin-DVD1.iso二、准备…

    2017-06-17
  • 计算机组成与Linux基础

    一 计算机组成 冯诺依曼体系 计算机处理数据和指令一律用二进制表示 指令和数据不加混合存储在同一存储器中 顺序执行程序每一条指令 计算机硬件由运算器、控制器、存储器、输入设备以及输出设备组成 计算机组成部分 CPU:含有指令集,对程序进行运算和判断并分为两个主要单元分别为算术逻辑单元和控制单元。其中算术逻辑单元主要负责程序运算与判断,控制单元负责协调组件与个…

    Linux干货 2017-07-30

评论列表(1条)

  • stanley
    stanley 2016-03-09 10:09

    赞! 好文,为写标签的细节点赞,为精心打造的内容占赞。文章置顶。