Linux学习之建立yum源、yum命令的使用及rpm包编译安装

一、什么是Yum

    Yum的全称为 Yellowdog Update Modifier,其主要目的是为了解决RPM包安装时的依赖关系的问题。yum只是一个用于软件安装的前端工具,其主要的服务对象还是RPM软件包。

二、yum配置客户端
        1、主配置文件(中心配置文件):/etc/yum.conf。
             通常不需要进行修改,保持其默认配置即可。
        2、提供repo配置文件,指明仓库访问路径及各种属性信息。
             在目录/etc/yum.repos.d/目录中创建.repo文件,其格式如下:
                [REPOID]                任意字符即可;
                name=自定义         任意字符即可;
                baseurl=ftp://        指明yum仓库的位置,支持服务器的类型包括ftp,nfs,http,file;
                        file:///             当用多个yum仓库时,可在每一行指定一个baseurl;
                enabled={0|1}        是否启用此repo的配置,默认为enabled=1;
                gpgcheck={0|1}      是否启用校验;
                gpgkey=URL           如启用校验,应指明密钥的位置;
                cost={1..n}               默认为1000,指定访问此仓库的开销;

            如下这是我系统中自定的yum源:

[root@deanzhu Packages]# cat /etc/yum.repos.d/epel.repo

[epel]

name=Extra Packages for Enterprise Linux 6 - $basearch

#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch

mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch

failovermethod=priority

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

          3、yum的repo配置文件中可用的变量所表达的意义:

$releasever: 程序的版本,对Yum而言指的是redhat-release版本;只替换为主版本号,如RedHat 6.5,则替换为6;

          $arch: 系统架构
          $basearch: 系统基本架构,如i686,i586等的基本架构为i386;
          $uuid:
          $YUM0-9: 在系统中定义的环境变量,可以在yum中使用;

三、yum客户端常用命令的使用

      1、 显示仓库列表

[root@localhost yum.repos.d]# yum repolist all #显示所有仓库信息

     显示所有程序包:yum list

yum list [all | glob_exp1] [glob_exp2] [...]

     可以使用通配符

       如:

[root@localhost ~]# yum list zsh* #显示所有出现zsh的软件包

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Available Packages

zsh.x86_64 4.3.10-7.el6 dvd

zsh-html.x86_64 4.3.10-7.el6 dvd

yum list   [available|installed|updates]    [glob_exp1] [...] 

可用的 :已安装的: 可升级的

2、安装程序包:yum install

      install package1 [package2] [...]

      如:

[root@localhost Packages]# yum install gcc #安装gcc包

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Install Process

Loading mirror speeds from cached hostfile

Resolving Dependencies

--> Running transaction check

---> Package gcc.x86_64 0:4.4.7-11.el6 will be installed

--> Processing Dependency: cpp = 4.4.7-11.el6 for package: gcc-4.4.7-11.el6.x86_64

--> Processing Dependency: cloog-ppl >= 0.15 for package: gcc-4.4.7-11.el6.x86_64

--> Running transaction check

---> Package cloog-ppl.x86_64 0:0.15.7-1.2.el6 will be installed

--> Processing Dependency: libppl_c.so.2()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64

--> Processing Dependency: libppl.so.7()(64bit) for package: cloog-ppl-0.15.7-1.2.el6.x86_64

---> Package cpp.x86_64 0:4.4.7-11.el6 will be installed

--> Processing Dependency: libmpfr.so.1()(64bit) for package: cpp-4.4.7-11.el6.x86_64

--> Running transaction check

---> Package mpfr.x86_64 0:2.4.1-6.el6 will be installed

---> Package ppl.x86_64 0:0.10.2-11.el6 will be installed

--> Finished Dependency Resolution

 

Dependencies Resolved

 

=================================================================================

Package Arch Version Repository Size

=================================================================================

Installing:

gcc x86_64 4.4.7-11.el6 dvd 10 M

Installing for dependencies:

cloog-ppl x86_64 0.15.7-1.2.el6 dvd 93 k

cpp x86_64 4.4.7-11.el6 dvd 3.7 M

mpfr x86_64 2.4.1-6.el6 dvd 157 k

ppl x86_64 0.10.2-11.el6 dvd 1.3 M

 

Transaction Summary #上面说明安装gcc所依赖的包

=================================================================================

Install 5 Package(s)

 

Total download size: 15 M

Installed size: 33 M

Is this ok [y/N]: y #选择yes,和面会把和gcc依赖的那4个包也一并安装了

Downloading Packages:

---------------------------------------------------------------------------------

Total 44 MB/s | 15 MB 00:00

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Installing : mpfr-2.4.1-6.el6.x86_64 1/5

Installing : cpp-4.4.7-11.el6.x86_64 2/5

Installing : ppl-0.10.2-11.el6.x86_64 3/5

Installing : cloog-ppl-0.15.7-1.2.el6.x86_64 4/5

Installing : gcc-4.4.7-11.el6.x86_64 5/5

Verifying : ppl-0.10.2-11.el6.x86_64 1/5

Verifying : cpp-4.4.7-11.el6.x86_64 2/5

Verifying : gcc-4.4.7-11.el6.x86_64 3/5

Verifying : cloog-ppl-0.15.7-1.2.el6.x86_64 4/5

Verifying : mpfr-2.4.1-6.el6.x86_64 5/5

 

Installed:

gcc.x86_64 0:4.4.7-11.el6

 

Dependency Installed:

cloog-ppl.x86_64 0:0.15.7-1.2.el6 cpp.x86_64 0:4.4.7-11.el6

mpfr.x86_64 0:2.4.1-6.el6 ppl.x86_64 0:0.10.2-11.el6

 

Complete!

重新安装

   yum reinstall package1 [package2] [...]

如果需要安装老版本需要指定版本号

3、升级程序包:

                   yum update package1 [package2] [...]

4 、检查可有升级包:

                  yum check-update

5、卸载程序包:

          yum  remove | erase package1 [package2] [...]

[root@deanzhu repo]# yum remove gcc -y #卸载gcc

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Remove Process

Resolving Dependencies

--> Running transaction check

---> Package gcc.x86_64 0:4.4.7-11.el6 will be erased

--> Finished Dependency Resolution

 

Dependencies Resolved

 

=================================================================================

Package Arch Version Repository Size

=================================================================================

Removing:

gcc x86_64 4.4.7-11.el6 @dvd 19 M

 

Transaction Summary

=================================================================================

Remove 1 Package(s)

 

Installed size: 19 M

Downloading Packages:

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Erasing : gcc-4.4.7-11.el6.x86_64 1/1

Verifying : gcc-4.4.7-11.el6.x86_64 1/1

 

Removed:

gcc.x86_64 0:4.4.7-11.el6

 

Complete!

[root@deanzhu repo]#

注:依赖包都会被卸载

6、查看程序包的信息

                      yum    info [...]

如:

[root@localhost Packages]# yum info gcc #查看gcc程序包的信息

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Installed Packages

Name : gcc

Arch : x86_64

Version : 4.4.7

Release : 11.el6

Size : 19 M

Repo : installed

From repo : dvd

Summary : Various compilers (C, C++, Objective-C, Java, ...)

URL : http://gcc.gnu.org

License : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions

Description : The gcc package contains the GNU Compiler Collection version 4.4.

: You'll need this package in order to compile C code.

7、查看指定的特性是由哪个哪个程序包提供的

               yum provides | whatprovides feature1 [feature2] [...]

[root@deanzhu repo]# yum provides /usr/bin/yum #查询/usr/bin/yum这个文件是由哪个包

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

* epel: ftp.cuhk.edu.hk

yum-3.2.29-60.el6.centos.noarch : RPM package installer/updater/manager #这里提示的生成这个文件的包

Repo : installed

Matched from:

Other : Provides-match: /usr/bin/yum

 

8、清理被动缓存:

              yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

[root@deanzhu yum.repos.d]# yum clean all

Loaded plugins: fastestmirror, refresh-packagekit, security

Cleaning repos: DVD epel mageeduepel room xen4centos

Cleaning up Everything

Cleaning up list of fastest mirrors

9、构建缓存

              yum  makecache

[root@deanzhu repo]# yum makecache

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

epel/metalink | 4.5 kB 00:00

* epel: ftp.cuhk.edu.hk

epel/group_gz | 149 kB 00:05

epel/filelists_db | 8.2 MB 01:54

epel/updateinfo | 698 kB 00:05

http://ftp.cuhk.edu.hk/pub/linux/fedora-epel/6/x86_64/repodata/9333930f38142066e752ead41b011f970ed231367457be506c74f25a37dc5249-other.sqlite.bz2: [Errno 12] Timeout on http://ftp.cuhk.edu.hk/pub/linux/fedora-epel/6/x86_64/repodata/9333930f38142066e752ead41b011f970ed231367457be506c74f25a37dc5249-other.sqlite.bz2: (28, 'Operation too slow. Less than 1 bytes/sec transfered the last 30 seconds')

Trying other mirror.

epel/other_db | 2.8 MB 00:22

Metadata Cache Created

四、创建本地yum源

[root@deanzhu Packages]# mkdir -p /yum/repo/ #创建目录/yum/repo

[root@deanzhu Packages]# cp /mnt/Packages/*.rpm /yum/repo/ #拷贝/mnt/Packages下所有已.rpm结尾的文件到/yum/repo目录下

[root@deanzhu ~]# man createrepo #man下createrepo这个命令,提示系统上没有这个命令,那么我们需要安装下,以下是安装步骤

No manual entry for createrepo

[root@deanzhu Packages]# yum install createrepo-0.9.9-22.el6.noarch.rpm #安装creterepo这个程序

Loaded plugins: fastestmirror, refresh-packagekit, security

Setting up Install Process

Examining createrepo-0.9.9-22.el6.noarch.rpm: createrepo-0.9.9-22.el6.noarch

Marking createrepo-0.9.9-22.el6.noarch.rpm to be installed

Loading mirror speeds from cached hostfile

* epel: ftp.cuhk.edu.hk

Resolving Dependencies

--> Running transaction check

---> Package createrepo.noarch 0:0.9.9-22.el6 will be installed

--> Processing Dependency: python-deltarpm for package: createrepo-0.9.9-22.el6.noarch

--> Running transaction check

---> Package python-deltarpm.x86_64 0:3.5-0.5.20090913git.el6 will be installed

--> Processing Dependency: deltarpm = 3.5-0.5.20090913git.el6 for package: python-deltarpm-3.5-0.5.20090913git.el6.x86_64

--> Running transaction check

---> Package deltarpm.x86_64 0:3.5-0.5.20090913git.el6 will be installed

--> Finished Dependency Resolution

 

Dependencies Resolved

 

=================================================================================

Package Arch Version Repository Size

=================================================================================

Installing:

createrepo noarch 0.9.9-22.el6 /createrepo-0.9.9-22.el6.noarch 291 k

Installing for dependencies:

deltarpm x86_64 3.5-0.5.20090913git.el6 DVD 71 k

python-deltarpm

x86_64 3.5-0.5.20090913git.el6 DVD 27 k

 

Transaction Summary

=================================================================================

Install 3 Package(s)

 

Total size: 388 k

Total download size: 98 k

Installed size: 520 k

Is this ok [y/N]: y

Downloading Packages:

---------------------------------------------------------------------------------

Total 2.3 MB/s | 98 kB 00:00

Running rpm_check_debug

Running Transaction Test

Transaction Test Succeeded

Running Transaction

Installing : deltarpm-3.5-0.5.20090913git.el6.x86_64 1/3

Installing : python-deltarpm-3.5-0.5.20090913git.el6.x86_64 2/3

Installing : createrepo-0.9.9-22.el6.noarch 3/3

Verifying : python-deltarpm-3.5-0.5.20090913git.el6.x86_64 1/3

Verifying : createrepo-0.9.9-22.el6.noarch 2/3

Verifying : deltarpm-3.5-0.5.20090913git.el6.x86_64 3/3

 

Installed:

createrepo.noarch 0:0.9.9-22.el6

 

Dependency Installed:

deltarpm.x86_64 0:3.5-0.5.20090913git.el6

python-deltarpm.x86_64 0:3.5-0.5.20090913git.el6

 

Complete!

[root@deanzhu repo]# createrepo ./ #cd到/yum/repo目录下将repo目录下的rmp包使用createrepo命令创建出repodata这个文件

Spawning worker 0 with 4184 pkgs

Workers Finished

Gathering worker results

 

Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete #这里提示我们创建完成

[root@deanzhu repo]# cd repodata/ #cd到repodata目录下查看里面的文件,这样我们的一个本地yum仓库就创建好了

[root@deanzhu repodata]# ls

0782d476e717e94767e3a4baec916c498149d8ff5571008bd47e542cca5e756b-filelists.sqlite.bz2

38d0b586da870d4e099594c37199b180c00e60fbb3c96cf4a2f520e7235485d6-other.xml.gz

5d46c2e877448d2b252e808ec42d6c1b717bdc0744bcad78f3885cdd3542cd29-primary.xml.gz

acce1185959aef63665ade812996b0471d8c7bf69d01ad60a5a6caf834fb26ac-filelists.xml.gz

c212bdef68a2fa09f321bc217b53231d4e7b5df74448446d4e3be083f86f9502-other.sqlite.bz2

d8256b97e837a57f513159f3a609416d73567963e99512cc391bf91a74fd2600-primary.sqlite.bz2

repomd.xml

 

[root@deanzhu yum.repos.d]# yum repolist #重载yum仓库

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

* epel: ftp.cuhk.edu.hk

http://172.16.0.1/fedora-epel/6/x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://172.16.0.1/fedora-epel/6/x86_64/repodata/repomd.xml: (28, 'connect() timed out!')

Trying other mirror.

http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/repodata/repomd.xml: [Errno 12] Timeout on http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/repodata/repomd.xml: (28, 'connect() timed out!')

Trying other mirror.

xen4centos | 2.9 kB 00:00 ...

xen4centos/primary_db | 3.4 MB 00:00 ...

repo id repo name status

DVD dvdiso 6,518

epel Extra Packages for Enterprise Linux 6 - x86_64 11,764

mageeduepel mageedu.com 12,922

room dream room 4,184

xen4centos Xen4 CentOS 4,184 #这边可以查看到我们新建的yum仓库已经可以使用了

repolist: 39,572

[root@deanzhu yum.repos.d]# cat rom.repo #我们查看下我们对仓库的定义

[room]

name=dream room

baseurl=http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/

gpgcheck=0

 

 

 

[mageeduepel]

name=mageedu.com

baseurl=http://172.16.0.1/fedora-epel/6/x86_64/

gpgcheck=0

 

 

 

[xen4centos] #这边是我们对新仓库的定义内容

name=Xen4 CentOS

baseurl=file:///yum/repo

gpgcheck=0

如上我们一个本地的yum仓库就创建好了,其中createrepo命令还有很多选项,我们这边不常用,所有已就不介绍了

五、程序包编译安装

      1、为何进行程序包编译

     (1)、找不到何事的程序包

     (2)、每一个程序包在编译的时候也许有20个程序包,但是只编译了前面10个,我们要用到后面10个的时候,所有只有编译安装了。

      rpm包有2种格式:

           编译好的rpm包

           源码rpm包

      未编译的rpm包格式:testapp-VERSION-release.src.rpm    其中有src.rpm中src是不知道你的程序包需要安装在什么平台之上的。

      2、C代码编译安装三步骤:

./configure:

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

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

make:

根据makefile文件,构建应用程序;

make install

     3、事例如何编译Apache程序包:

           (1)、准备编译环境

开发工具:make, gcc等

开发环境:开发库,头文件

glibc:标准库

                  那么我们如何获得这个工具可以通过安装“包组”提供开发组件,安装的“包组”如下

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

                   这样我们的环境就准备好了

           (2)、操作

[root@deanzhu ~]# cd /mnt/ #首先们要先下载一个程序包,我这边的httpd-2.2.31.tar.bz2是从网上下载的

[root@deanzhu mnt]# ls

httpd-2.2.31.tar.bz2

[root@deanzhu mnt]# tra xf httpd-2.2.31.tar.bz2 #解压程序包

[root@deanzhu mnt]# ls

httpd-2.2.31 httpd-2.2.31.tar.bz2

[root@deanzhu mnt]# cd httpd-2.2.31

[root@deanzhu httpd-2.2.31]# ls #查看httpd-2.2.31里面的文件

ABOUT_APACHE BuildBin.dsp config.log docs httpd.mak LAYOUT Makefile modules.lo README srclib

acinclude.m4 buildconf config.nice emacs-style httpd.spec libhttpd.dep Makefile.in modules.o README.platforms support

Apache.dsw buildmark.o config.status httpd include libhttpd.dsp Makefile.win NOTICE README-win32.txt test

build CHANGES configure httpd.dep INSTALL libhttpd.mak modules NWGNUmakefile ROADMAP VERSIONING

BuildAll.dsp config.layout configure.in httpd.dsp InstallBin.dsp LICENSE modules.c os server

[root@deanzhu httpd-2.2.31]# less INSTALL #查看INSTALL里面的文件

APACHE INSTALLATION OVERVIEW

 

Quick Start - Unix

------------------

 

For complete installation documentation, see [ht]docs/manual/install.html or

http://httpd.apache.org/docs/2.2/install.html

 

$ ./configure --prefix=PREFIX #这里提示了我们需要安装的步骤

$ make

$ make install

$ PREFIX/bin/apachectl start

对于./configure 这个脚本有很多的选项,我们可以使用./configure --help去查看

[root@deanzhu httpd-2.2.31]# ./configure --help

这边选项太多,就不一一列出了,只写几个常用的选项

                                          安装路径设定:

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

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

                                           Optional Features: 可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

  Optional Packages: 可选包

--with-PACKAGE[=ARG]

--without-PACKAGE

[root@deanzhu httpd-2.2.31]# ./configure --prefix=/usr/local/apache2 #指定安装路径 第一步

[root@deanzhu httpd-2.2.31]# make #执行第二步make

[root@deanzhu httpd-2.2.31]# make install #执行第三步make install 这样程序就安装完成了

[root@deanzhu httpd-2.2.31]# cd /usr/local/apache2/ #切换到apache2目录下

[root@deanzhu apache2]# ls bin #查看bin下的文件

ab apu-1-config dbmmanage htcacheclean htpasswd logresolve

apachectl apxs envvars htdbm httpd rotatelogs

apr-1-config checkgid envvars-std htdigest httxt2dbm

[root@deanzhu apache2]# bin/apachectl start #执行bin下的apachectl这个脚本

[root@deanzhu apache2]# netstat -tan #查看服务

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address Stat

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTN

tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTN

tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTN

tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTN

tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTN

tcp 0 0 0.0.0.0:58427 0.0.0.0:* LISTN

tcp 0 0 127.0.0.1:6013 0.0.0.0:* LISTN

tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTN

tcp 0 0 192.168.0.18:22 192.168.0.23:51983 ESTALISHED

tcp 0 0 192.168.0.18:22 192.168.0.23:52830 ESTALISHED

tcp 0 0 192.168.0.18:22 192.168.0.23:52990 ESTALISHED

tcp 0 0 :::22 :::* LISTN

tcp 0 0 ::1:631 :::* LISTN

tcp 0 0 ::1:25 :::* LISTN

tcp 0 0 ::1:6010 :::* LISTN

tcp 0 0 ::1:6011 :::* LISTN

tcp 0 0 ::1:6013 :::* LISTN

tcp 0 0 :::57027 :::* LISTN

tcp 0 0 :::111 :::* LISTN

tcp 0 0 :::80 :::* LISTN

#80端口处于监听状态,我们的服务以及启动了

0f91bb5c-c881-4fc2-8274-9f9962d6e381

#在网页上输入我们的IP地址这样就可以看到

  4、完成上面一些操作后我们还需要对一些文件进行修改

安装后的配置:

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

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

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

[root@deanzhu ld.so.conf.d]# cd /etc/profile.d/

[root@deanzhu profile.d]# ls

colorls.csh glib2.sh less.csh vim.csh

colorls.sh gnome-ssh-askpass.csh less.sh vim.sh

cvs.csh gnome-ssh-askpass.sh qt.csh which2.sh

cvs.sh lang.csh qt.sh

glib2.csh lang.sh udisks-bash-completion.sh

[root@deanzhu profile.d]# vim apache2.sh

[root@deanzhu profile.d]# cat apache2.sh

export PATH=/usr/local/apache2/bin:$PATH

(2) 导出库文件路径

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

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

[root@deanzhu ~]# cd /etc/ld.so.conf.d/

[root@deanzhu ld.so.conf.d]# ls

kernel-2.6.32-504.el6.x86_64.conf qt-x86_64.conf

mysql-x86_64.conf xulrunner-64.conf

[root@deanzhu ld.so.conf.d]# vim apache2.conf #新建一个文件存放apache2库文件路径

[root@deanzhu ld.so.conf.d]# cat apache2.conf

/usr/local/apache2/lib

                            让系统重新生成缓存:

ldconfig [-v]

(3) 导出头文件

基于链接的方式实现:

ln -sv

(4) 导出帮助手册

编辑/etc/man.config文件

添加一个MANPATH

这样我们一个程序的编译安装就好了。

六、总结。


在以上的学习中,发现最难得还是rpm包的编译安装,有些地方还是不太懂,不过rpm包的编译安装需要用到好多的知识点,这样又可以把之前所有学的再复习一遍,感觉这种方法不错的。

你可能感兴趣的:(linux,客户端,配置文件,中心,软件包)