Linux学习40 运维必备技能-Linux软件包管理yum企业实战

一、yum其它功能

  1、如何使用光盘当作本地yum仓库

    a、挂载光盘至某目录,例如/media/cdrom

      # mount -r -t iso9660 /dev/cdrom /media/cdrom
    b、创建配置文件
      [CentOS7]
      name=
      baseurl=
      gpgcheck=
      enabled=
  2、常用的命令选项

    --nogpgcheck:禁止进行gpg check

    -y: 自动回答为"yes":

    -q:静默模式,相当于不打印信息到屏幕

    --disablerepo=repoidglob :表示临时禁用此次指定的某个repo或这一类repo

    --enablerepo=repoidglob:临时启用此处指定的repo

    --noplugins:禁用所有插件

  3、yum的repo配置文件中可用的变量:

    $releasever: 当前OS的发行版的主版本号

    $arch:平台类型

    $basearch:基础平台

    $YUM0-$-YUM9

    a、一般的链接会是这样

      

      标准的链接可以这样写:

      http://mirrors.magedu.com/centos/$releasever/$basearch/os

  4、创建yum仓库

    a、首先我们需要安装创建yum仓库的命令 createrepo

    b、然后我们将我们镜像中的rpm包复制到 /application/yum/Packages中

    c、接下来我们开始创建

[root@localhost Packages]# createrepo /application/yum/Packages/

    d、创建过后我们可以在Packages目录下看到一个repodata目录

[root@localhost Packages]# ls -ld /application/yum/Packages/repodata/*
-rw-r--r-- 1 root root 1353408 Feb 26 19:34 /application/yum/Packages/repodata/018e9bc732f76918da880c1eab0daa54b576aaca01147c9bf5bfce20600f0b0a-other.sqlite.bz2
-rw-r--r-- 1 root root 3263267 Feb 26 19:34 /application/yum/Packages/repodata/140cdb441118a5219bc6ce2069f9b22a30e017bf73aa9df97140cbc85bc2cd22-primary.sqlite.bz2
-rw-r--r-- 1 root root 3246286 Feb 26 19:34 /application/yum/Packages/repodata/3787f2b5b084c56f39ca7cfaeb99f556c39862c13e689adc2ff7d20a48ea3568-filelists.sqlite.bz2
-rw-r--r-- 1 root root 1548896 Feb 26 19:34 /application/yum/Packages/repodata/5c668718ef4e4149c6df072702605363ddd4407c94838b41c5daefff7bb871ae-primary.xml.gz #主元数据数据,包括每一个包的包名,版本号,依赖关系
-rw-r--r-- 1 root root  987503 Feb 26 19:34 /application/yum/Packages/repodata/64148ea1f1a720283b6ceb9db49bd01491903a336fc864f7e038b7a46ff55b6b-other.xml.gz
-rw-r--r-- 1 root root 3194578 Feb 26 19:34 /application/yum/Packages/repodata/d85ec63d569619a208145d8f93a7cc459f91de04bc0e556d00717310e78ec4ca-filelists.xml.gz #每一个包都会生成多少文件
-rw-r--r-- 1 root root    3008 Feb 26 19:34 /application/yum/Packages/repodata/repomd.xml  #存放了前面几个文件的校验码

    e、然后我们编辑/etc/yum.repos.d/local.repo文件,将baseurl路径指向repodata所在的路径即可

[root@localhost yum.repos.d]# cat /etc/yum.repos.d/local.repo 
[base-local]
name=CentOS 7 Release 7
baseurl=file:///application/yum/Packages
enable=1
gpgcheck=0
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id                                                                                          repo name                                                                                                 status
base-local                                                                                       CentOS 7 Release 7                                                                                        3,971
repolist: 3,971

      注意,此处的repodata文件夹不是说非要在 /application/yum/Packages 路径下,可以将repodata文件夹移动至任何目录,我们在配置baseurl的时候只要配置到repodata所在目录就可以使用我们的仓库了

二、程序包编译安装

  1、testapp-VERSION-release.src.rpm #这种格式的rpm包是rpm包但是其中的源代码是没有经过编译的,我们需要经过编译后才能进行使用。安装后使用rpm包制作命令rpmbuild命令制作成二进制格式的rpm包,而后再安装;

  2、源代码的组织格式

    a、多文件:文件中的代码之间,很可能存在跨文件依赖关系。

    b、编译过程

      源代码 --> 预处理 --> 编译(gcc) --> 汇编 --> 链接  --> 执行

    c、项目管理器(项目打包构建组织管理工具)他们并不是编译器,而是项目管理工具而已

      C、C++: make(configure --> Makefile.in --> makefile)   

        (1)、make并不是编译器,他只是一个项目管理工具,他是调用gcc来完成编译的。make针对每一个源代码都有一个专用的配置文件,在make时他们依据这个配置文件做出决定,比如调用哪个预处理器如何预处理。调用哪个编译器如何进行编译,先编译哪个文件后编译哪个文件等,而这个文件就叫 makefile。

        (2)、那么我们的二进制文件和库文件要装到哪儿去呢?因此makefile文件并不是写死的,它是由 Makefile.in这个文件生成的,可以认为这是makefile文件的模板,我们基于这个模板可以生成makefile文件,他可以根据根据用户的需要来由模板文件生成makefile,他允许用户在make之前指明要装在哪儿,二进制文件装在哪儿,库文件装在哪儿等一切路径,以及编译的程序如果有20个功能,我们要启用哪些功能我们都可以指明,当指明以后他就利用这个模板套用你所指明的选项来生成这个makefile文件。那么谁来帮你把Makefile.in这个模板最终生成可用的 makefile文件呢?我们还有一个工具就叫configure,也就是configure脚本,他允许用户传递给这个脚本一堆的选项用来指明程序包的编译参数,启用特性,还有安装路径等等,都指明完后一回车,这个脚本能结合Makefile.in文件来生成makefile

        (3)、一般 configure脚本和Makefile.in文件都是源码中自带的,但是有时候有可能其不会自带,这时候就需要我们自动去生成。其实严格意义上来说这两个文件并不是自带的而是项目构建工具生成的,这个项目构建工具就是:

            autoconf(用于生成configure文件)

            automake(用于生成Makefile.in文件)

            我们autoconf不可能生成固定内容的configure,因为每个程序的功能是不一样的,因此我们autoconf需要结合一个额外的配置文件去生成config脚本,这个配置文件用于告诉autoconf我当前的代码大概有哪些功能,是用来做特性使用的。而后autoconf才会生成configure脚本

            同样的automake要生成automake.in我们程序员必须要告诉automake我们有多少个程序文件,程序文件的依赖关系是什么,以及我们要使用哪一种特定版本编译器进行编译。而后automake才会结合对应配置文件生成Makefile.in。当然,这个配置文件不用管他是什么。

  3、C语言源代码编译安装有以下步骤

    a、./configure  

      (1)、通过选项传递参数,指定启用特性,安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile

      (2)、检查依赖到的外部环境

    b、make

      (1)、根据makefile文件,构建应用程序

    c、make install

      (1)、这个其实是一些脚本,这个脚本把构建的二进制应用程序的二进制文件扔到所指定的二进制路径下去,库文件扔到所指定的库文件目录下去,这一步其实我们不做使用copy命令也是完全可以实现的,他相当于使用了install命令。

  4、建议:安装前查看INSTALL或者README文件

  5、开源程序源代码的获取:

    (1)、官方自建站点

        apache.org(ASF)

        mariadb.org

        ...

    (2)、代码托管:

        SourceForge

        Github.com

        code.google.com

  6、如何编译c源代码

    a、编译器c/c++ :gcc(GNU C Complier)

    b、前提:提供开发工具及开发环境

      (1)、开发工具:make,gcc等

      (2)、开发环境:开发库,头文件。

        glibc:标准库

      (3)、通过“包组”提供开发组件

        CentOS 6:"Development Tools","Server Platform Development"

  7、编译过程

    a、第一步:configure脚本

      (1)、选项:指定安装位置,指定启用的特性。

          --help:获取其支持使用的选项

          选项分类:

            1)、安装路径设定(Installation directories):

              --prefix=/PATH/TO/SOMEWHERE:指定默认安装位置,默认为/usr/local/

              --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置

            2)、系统类型(System types)

            3)、可选特性(Optional Features)

              --disable-FEATURE :我们在安装时有可能有些特性是默认启用的,如果我们安装时默认不想启用就使用此参数

              --enable-FEATURE[=ARG]:默认有些没有启用的特性我们想启用的话就使用此参数。

            4)、可选程序包(Optional Packages)

              --with-PACKAGE[=ARG]  #定义依赖关系包位置  

              --without-PACKAGE  #禁用依赖关系包    

       (2)、现在我们下载一个httpd文件源码包进行编译安装

[root@localhost bianyi]# ls
httpd-2.2.29.tar.bz2
[root@localhost bianyi]# tar -jxf httpd-2.2.29.tar.bz2 
[root@localhost bianyi]# ls 
httpd-2.2.29  httpd-2.2.29.tar.bz2
[root@localhost bianyi]# ls -lhtr httpd-2.2.29
total 1.2M
-rw-r--r--  1 500 500  403 Nov 22  2004 emacs-style
-rw-r--r--  1 500 500  15K Nov 22  2004 ABOUT_APACHE
-rw-r--r--  1 500 500  10K Mar 14  2005 ROADMAP
-rw-r--r--  1 500 500 8.0K Oct 18  2005 VERSIONING
-rw-r--r--  1 500 500 5.1K Nov 29  2005 LAYOUT
-rw-r--r--  1 500 500 2.9K Dec  8  2006 InstallBin.dsp
-rw-r--r--  1 500 500 5.9K Jan 10  2007 README
-rw-r--r--  1 500 500  17K Jan 12  2007 libhttpd.dsp
-rw-r--r--  1 500 500 2.6K Aug 24  2007 BuildAll.dsp
-rw-r--r--  1 500 500  29K Jan 19  2008 LICENSE
-rw-r--r--  1 500 500 4.1K Jun 12  2008 httpd.dsp
-rw-r--r--  1 500 500 8.6K Nov 26  2008 Makefile.in
-rw-r--r--  1 500 500 2.7K Jul 30  2009 BuildBin.dsp
-rw-r--r--  1 500 500 5.3K Oct 14  2009 README.platforms
-rw-r--r--  1 500 500  56K Oct  6  2010 Apache.dsw
-rw-r--r--  1 500 500 2.5K Dec 21  2010 README-win32.txt
-rw-r--r--  1 500 500  28K May  7  2011 libhttpd.mak
-rw-r--r--  1 500 500 8.8K May  7  2011 httpd.mak
-rw-r--r--  1 500 500  30K May  7  2011 libhttpd.dep
-rw-r--r--  1 500 500 1.3K May  7  2011 httpd.dep
-rw-r--r--  1 500 500 4.3K Jan 18  2012 INSTALL
-rw-r--r--  1 500 500  12K Feb 28  2012 config.layout
-rw-r--r--  1 500 500  13K Mar 16  2012 NWGNUmakefile
-rw-r--r--  1 500 500  19K Jul  6  2012 acinclude.m4
-rwxr-xr-x  1 500 500 5.7K Sep 19  2012 buildconf
-rw-r--r--  1 500 500  25K Jun 28  2013 configure.in
-rw-r--r--  1 500 500  828 Jan  3  2014 NOTICE
-rw-r--r--  1 500 500  34K Jan 20  2014 Makefile.win
-rw-r--r--  1 500 500 134K Aug 22  2014 CHANGES
drwxr-xr-x  4 500 500 4.0K Aug 23  2014 support
drwxr-xr-x  2 500 500  248 Aug 23  2014 test
drwxr-xr-x 20 500 500  325 Aug 23  2014 modules
drwxr-xr-x  9 500 500  149 Aug 23  2014 os
drwxr-xr-x  3 500 500 4.0K Aug 23  2014 server
drwxr-xr-x  5 500 500   64 Aug 23  2014 srclib
drwxr-xr-x  9 500 500  124 Aug 23  2014 docs
drwxr-xr-x  2 500 500 4.0K Aug 23  2014 include
drwxr-xr-x  6 500 500 4.0K Aug 23  2014 build
-rw-r--r--  1 500 500  12K Aug 23  2014 httpd.spec
-rwxr-xr-x  1 500 500 560K Aug 23  2014 configure

      (3)、解压源码包后我们可以查看INSTALL文件内容,会有相应的安装教程。还有我们可以使用configure --help命令进行查看相应的选项。此时我们来开始编译安装httpd

          1)、首先我们最好安装开发工具包组 "Development Tools"

[root@localhost httpd-2.2.29]# yum groupinstall -y "Development Tools"

          2)、然后我们开始执行configure脚本生成Makefile文件

[root@localhost httpd-2.2.29]# ./configure --prefix=/application/apache2 --sysconfdir=/etc/httpd2 #将主目录安装至/application/apache2下,将配置文件安装至/etc/httpd2文件夹下

          3)、然后我们执行make命令开始进行编译

[root@localhost httpd-2.2.29]# ls -lstr |grep -i make
 12 -rw-r--r--  1  500  500   8739 Nov 26  2008 Makefile.in
 16 -rw-r--r--  1  500  500  12894 Mar 16  2012 NWGNUmakefile
 36 -rw-r--r--  1  500  500  34759 Jan 20  2014 Makefile.win
 12 -rw-r--r--  1 root root   8979 Feb 27 02:16 Makefile
[root@localhost httpd-2.2.29]# make

            可以看到我们目录下已经生成了相应的各个文件

[root@localhost httpd-2.2.29]# ls -lhtr
total 1.3M
-rw-r--r--  1  500  500  403 Nov 22  2004 emacs-style
-rw-r--r--  1  500  500  15K Nov 22  2004 ABOUT_APACHE
-rw-r--r--  1  500  500  10K Mar 14  2005 ROADMAP
-rw-r--r--  1  500  500 8.0K Oct 18  2005 VERSIONING
-rw-r--r--  1  500  500 5.1K Nov 29  2005 LAYOUT
-rw-r--r--  1  500  500 2.9K Dec  8  2006 InstallBin.dsp
-rw-r--r--  1  500  500 5.9K Jan 10  2007 README
-rw-r--r--  1  500  500  17K Jan 12  2007 libhttpd.dsp
-rw-r--r--  1  500  500 2.6K Aug 24  2007 BuildAll.dsp
-rw-r--r--  1  500  500  29K Jan 19  2008 LICENSE
-rw-r--r--  1  500  500 4.1K Jun 12  2008 httpd.dsp
-rw-r--r--  1  500  500 8.6K Nov 26  2008 Makefile.in
-rw-r--r--  1  500  500 2.7K Jul 30  2009 BuildBin.dsp
-rw-r--r--  1  500  500 5.3K Oct 14  2009 README.platforms
-rw-r--r--  1  500  500  56K Oct  6  2010 Apache.dsw
-rw-r--r--  1  500  500 2.5K Dec 21  2010 README-win32.txt
-rw-r--r--  1  500  500  28K May  7  2011 libhttpd.mak
-rw-r--r--  1  500  500 8.8K May  7  2011 httpd.mak
-rw-r--r--  1  500  500  30K May  7  2011 libhttpd.dep
-rw-r--r--  1  500  500 1.3K May  7  2011 httpd.dep
-rw-r--r--  1  500  500 4.3K Jan 18  2012 INSTALL
-rw-r--r--  1  500  500  12K Feb 28  2012 config.layout
-rw-r--r--  1  500  500  13K Mar 16  2012 NWGNUmakefile
-rw-r--r--  1  500  500  19K Jul  6  2012 acinclude.m4
-rwxr-xr-x  1  500  500 5.7K Sep 19  2012 buildconf
-rw-r--r--  1  500  500  25K Jun 28  2013 configure.in
-rw-r--r--  1  500  500  828 Jan  3  2014 NOTICE
-rw-r--r--  1  500  500  34K Jan 20  2014 Makefile.win
-rw-r--r--  1  500  500 134K Aug 22  2014 CHANGES
drwxr-xr-x  9  500  500  124 Aug 23  2014 docs
-rw-r--r--  1  500  500  12K Aug 23  2014 httpd.spec
-rwxr-xr-x  1  500  500 560K Aug 23  2014 configure
-rwxr-xr-x  1 root root  121 Feb 27 02:16 config.nice
-rw-r--r--  1 root root 3.8K Feb 27 02:16 modules.c
-rwxr-xr-x  1 root root  41K Feb 27 02:16 config.status
-rw-r--r--  1 root root 8.8K Feb 27 02:16 Makefile
drwxr-xr-x 20  500  500 4.0K Feb 27 02:16 modules
drwxr-xr-x  5  500  500   93 Feb 27 02:16 srclib
drwxr-xr-x  9  500  500  178 Feb 27 02:16 os
drwxr-xr-x  2  500  500  277 Feb 27 02:16 test
drwxr-xr-x  6  500  500 4.0K Feb 27 02:16 build
drwxr-xr-x  2  500  500 4.0K Feb 27 02:16 include
-rw-r--r--  1 root root  54K Feb 27 02:16 config.log
drwxr-xr-x  4  500  500 4.0K Feb 27 02:20 server
drwxr-xr-x  5  500  500 4.0K Feb 27 02:21 support
-rw-r--r--  1 root root  21K Feb 27 02:21 modules.o
-rw-r--r--  1 root root  312 Feb 27 02:21 modules.lo
-rw-r--r--  1 root root 5.6K Feb 27 02:21 buildmark.o
-rwxr-xr-x  1 root root 6.6K Feb 27 02:21 httpd

          我们查看/application目录下可以看到还没有相应apache2文件夹

[root@localhost httpd-2.2.29]# ls /application/
bianyi  script  test1  yum

        4)、然后我们开始执行make install命令,可以看到相应的目录文件已经生成

[root@localhost httpd-2.2.29]# make install 
[root@localhost httpd-2.2.29]# ls /application/apache2/
bin  build  cgi-bin  error  htdocs  icons  include  lib  logs  man  manual  modules
[root@localhost httpd-2.2.29]# ls -ld /etc/httpd2/
drwxr-xr-x 4 root root 84 Feb 27 02:25 /etc/httpd2/

        5)、然后我们尝试启动httpd并查看相应服务

[root@localhost /]# /application/apache2/bin/apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[root@localhost /]# netstat -anpt|grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      1145/httpd   

    (4)、安装后的配置

      1)、导出二进制程序目录至PATH环境变量中:

        编辑文件 /etc/profile.d/NAME.sh

          export  PATH=/PATH/TO/BIN:$PATH

      2)、导出库文件路径

        编辑/etc/ld.so.conf.d/NAME.conf

          添加新的库文件所在目录至此文件中

        让系统重新生成缓存:

          ldconfig [-v]

      3)、导出头文件,基于链接的方式实现即可

        ln -sv 

      4)、导出帮助手册

        编辑/etc/man.config文件(centos7为/etc/man_db.conf)

          添加一条MANPATH参数并指定新路径即可

[root@localhost /]# cat /etc/man_db.conf |grep apach
MANDATORY_MANPATH                       /application/apache2/man

  8、练习

    a、yum的配置和使用,包括yum repository的创建

    b、编译安装apache2.2,启动此服务

    

        

 

posted @ 2020-02-24 11:23  Presley  阅读(385)  评论(0编辑  收藏  举报