yum的基本概述:

           yum是rpm的前端工具,可以利用元数据文件了解到一个仓库中有哪些包,每个包之间的依赖关系,并自动解决,yum会缓存这个文件,

 并且通过分析校验码(repomd.xml)文件来检查yum仓库是否更新了,来同步自身缓存的元数据文件。当然每个rpm包制作的时候就已经在文件列表中写明了自己依赖那些包,和开发工具等

createrepo可以分析某个目录下有什么rpm包,各个rpm包内含的信息列表,和依赖关系

 

一般情况下安装系统的CD就当做一个仓库(repository),

yum repo(repodata所在的目录就是yum仓库中路径应该指向的位置)

     仓库的库自己是一个文件服务器:

ftp://

http://

nfs://

file://

 yum客户端:

 配置文件:

 /etc/yum.conf

      yum命令:

显示仓库列表:

      repolist [all|enabled|disabled]

  

显示程序包:

list:

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

#yum list  {available|installed|updates} [glob_exp1][...]

 

安装程序包:

         install package1 [package2]

 reinstall package1 [package2]   重新安装

 downgrade package1 [package2] [...]  降级安装

升级程序包:

update [package1] [package2]

升级命令update和upgrade的差别?

yum -y upgrade 和 yum -y update 区别  

 

检查可用升级:

check-update

卸载程序包:将会卸载本包和所有依赖本包的包    不会卸载自己依赖的包      

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

查看程序包的详细信息:

info [...]

查看这个特性是由谁提供的:

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

  eg: yum 

 

清理本地缓存:

clean [package |metadata |expire-cache|rpmdb|plugins| all] 

 

   构建缓存:

makecache

搜索:

search string1 [string2] [...]

以指定的关键字搜素程序包名及summary信息;

查看指定包依赖的capability:

deplist package1 [package2] [...]

 

查看yum事务历史:

history  [info|summary|stats]

 

包组管理的相关命令: 包组名称中间有空格的用引号括起来

yum  grouplist   

        grouplisntall  group1 [group2]  [...]

groupupdate  group1 [group2]  [...]

groupremove  group1 [group2]  [...]

  groupinfo   group1  [...]

 

   自己创建yum仓库:

 createrepo [options] <directory>  此命令可以自动分析各个包的文件和之间的依赖关系,并生成repodata文件

         --basedir

                      Basedir for path to directories in the repodata, default is the current working directory.

eg:[root@localhost ~]# yum install createrepo -y

[root@localhost ~]# ls /tmp/test3/

abrt-2.0.8-40.el6.centos.x86_64.rpm                   atlas-3.8.4-2.el6.x86_64.rpm

abrt-addon-ccpp-2.0.8-40.el6.centos.x86_64.rpm        atmel-firmware-1.3-7.el6.noarch.rpm

abrt-addon-kerneloops-2.0.8-40.el6.centos.x86_64.rpm  at-spi-1.28.1-2.el6.centos.x86_64.rpm

abrt-addon-python-2.0.8-40.el6.centos.x86_64.rpm      at-spi-python-1.28.1-2.el6.centos.x86_64.rpm

abrt-cli-2.0.8-40.el6.centos.x86_64.rpm               attr-2.4.44-7.el6.x86_64.rpm

abrt-desktop-2.0.8-40.el6.centos.x86_64.rpm           audiofile-0.2.6-11.1.el6.x86_64.rpm

abrt-gui-2.0.8-40.el6.centos.x86_64.rpm               audispd-plugins-2.4.5-3.el6.x86_64.rpm

abrt-libs-2.0.8-40.el6.centos.x86_64.rpm              audit-2.4.5-3.el6.x86_64.rpm

abrt-python-2.0.8-40.el6.centos.x86_64.rpm            audit-libs-2.4.5

将/tmp/test3/下的安装包自己制作成一个库;

[root@localhost ~]# createrepo ./

Spawning worker 0 with 4 pkgs

Workers Finished

Gathering worker results


Saving Primary metadata

Saving file lists metadata

Saving other metadata

Generating sqlite DBs

Sqlite DBs complete

yum的配置文件:

一般都应该有一个叫做base的repo,这个里面的内容是操作系统光盘上的yum仓库,通常应该是必备的,base也就是网上镜像中的os目录

详情见51ct我的博客

cat /etc/yum.conf 

[main]

cachedir=/var/cache/yum         #yum下载的RPM包的缓存目录

keepcache=0             #缓存是否保存,1保存,0不保存。

debuglevel=2             #调试级别(0-10),默认为2(具体调试级别的应用,我也不了解)。

logfile=/var/log/yum.log         #yum的日志文件所在的位置

exactarch=1             #在更新的时候,是否允许更新不同版本的RPM包,比如是否在i386上更新i686的RPM包。

obsoletes=1             #这是一个update的参数,具体请参阅yum(8),简单的说就是相当于upgrade,允许更新陈旧的RPM包。

gpgcheck=1             #是否检查GPG(GNU Private Guard),一种密钥方式签名。

plugins=1             #是否允许使用插件,默认是0不允许,但是我们一般会用yum-fastestmirror这个插件。

installonly_limit=3         #允许保留多少个内核包。

exclude=selinux*         #屏蔽不想更新的RPM包,可用通配符,多个RPM包之间使用空格分离

   

/etc/yum.repo.d/*.repo文件 yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,

     例如我们将从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用!

 

[fedora]      #方括号里面的是软件源的名称,将被yum取得并识别

name=Fedora $releasever - $basearch   #这里也定义了软件 仓库的名称,通常是为了方便阅读配置文件,一般没什么作用,$releasever变量定义了发行版本,通常是8,9,10等数字,$basearch变 量定义了系统的架构,可以是i386、x86_64、ppc等值,这两个变量根据当前系统的版本架构不同而有不同的取值,这可以方便yum升级的时候选择 适合当前系统的软件包,以下同……

failovermethod=priority   #failovermethod 有两个值可以选择,priority是默认值,表示从列出的baseurl中顺序选择镜像服务器地址,roundrobin表示在列出的服务器中随机选择

exclude=compiz* *compiz* fusion-icon* #exclude这个选项用来禁止这个软件仓库中的某些软件包的安装和更新,可以使用通配符,并以空格分隔,可以视情况需要自行添加

【 文件的repo路径   和baseurl 二选一】

#baseurl=http://download.fedoraproject.org/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/

#上面的一行baseurl第一个字符是'#'表示该行已经被注释,将不会被读取,这一行的意思是指定一个baseurl(源的镜像服务器地址)

#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch  

  #上面的这一行是指定一个镜像服务器的地址列表,通常是开启的, 将$releasever和$basearch替换成自己对应的版本和架构,例如10和i386,在浏览器中打开,我们就能看到一长串镜可用的镜像服务器地址列表。

  选择自己访问速度较快的镜像服务器地址复制并粘贴到repo文件中,我们就能获得较快的更新速度了,格式如下baseurl所示:

baseurl=

ftp://ftp.sfc.wide.ad.jp/pub/Linux/Fedora/releases/10/Everything/i386/os

http://ftp.chg.ru/pub/Linux/fedora/linux/releases/10/Everything/i386/os

http://ftp.yz.yamagata-u.ac.jp/pub/linux/fedora/linux/releases/10/Everything/i386/os

 

enabled=1    #这个选项表示这个repo中定义的源是启用的,0为禁用

gpgcheck=1   #这个选项表示这个repo中下载的rpm将进行gpg的校验,已确定rpm包的来源是有效和安全的

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch   #定义用于校验的gpg密钥

   cost : 默认1000,多仓库的优先级,数字越小越优先

 yum的实际工作流程是到repo下面的repodata目录读取该repo信息, 最重要的几个文件有repomd.xml, 这是首先读取的, 它指明了后面几个文件的存放位置, sha校验码. 

 yum需要先读取这个文件, 才知道去×××其它的文件primary.xml.gz. 从名称可以看出, 这是主文件, 它主要记录每个rpm包信息, 以及依赖关系, 

 yum就是靠这个文件去完成依赖性检测.other.xml.gz. 主要记录rpm包changelog, 及每个author所有做的修改filelists.xml.gz. 记录每个rpm包包含的文件列表,

 大体是rpm -ql的输出结果

假设一个有这样一个路径

CODE:

/media/repo/sl/56/i386/updates/security/repodata


你要指定源baseurl的话, 它只能是这个样子,即repodata的上层目录

CODE:

baseurl=/media/repo/sl/56/i386/updates/security


编译好的rpm包,二进制包

源码的rpm包,程序包编译安装:

  testapp-VERSION-release.src.rpm --->安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装

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

一个程序的源代码并不是一个文件,而是由许多个可以实现不同功能的源码文件组成的,编译过程中需要按照一定的顺序将这个原文件编译

c,c++ make 不是编译器,而是一个项目打包管理器,它调用gcc,自动调用预处理器,编译器等,它利用makefile文件进行,

makefile文件中包括了使用什么预处理器,如何调用编译器,各个源代码的顺序等各种所需的配置,当然makefile文件

也不是下载包就存在的,为了编译时可以灵活配置自己所需的功能,用户需要自己事先选择好自己的需要的软件安装路径,和功能等

然后借助configure利用makefile.in(相当于一个模板),生成makefile。

 

c语言的源码包编译安装的标准步骤:

1../configure     

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

(2).检查各启用特性依赖的外部环境

2. make  

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

3. make install 

                        将相应的文件复制到对应的目录下,比如将自己的库复制到系统的库文件路径下

 

    其实configure和make.in文件也是由其他开发工具生成的,而这两个工具也需要程序员提供详细的特性和依赖工具的配置文件来生成configure和makefile.in

       autoconf: 生成configure脚本

automake: 生成makefile.in

强烈建议:安装前查看INSTALL,README

开源程序源代码的获取途径:

1.官方自建站点

apache.org(ASF)

mariadb.org

2.代码托管站点:

sourceForge

Github.com

code.google.com

不同的语言使用的编译器:

      c/c++:gcc(GUN C Complier),

  

编译C源代码:

前提:提供开发 工具和开发环境

       开发工具:make,gcc等

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

      glibc:标准库

  

标准开发的库通过“包组”提供开发组件:

 CentOS 6:“Devolpment Tools","Server Platform"

 CentOS 7: "Server Platform Development"

 

 新的程序包有的可能也要依赖新的编译工具,所以如果下载了较新的程序包在CENTOS6中可能无法编译

 gcc --version 

 

 第一步:configure 脚本

  选项:指定安装位置,指定启用的特性

      ./configure  --help:获取使用帮助

              选项分类:

安装路径设定:

--prefix=/PATH/TO/SOMEFILE  指定安装路径,默认为/usr/local

--sysconfig=/PATH/TO/SOMEFILE  配置文件安装位置

system types: 

optional features:可选特性

--disable-FEATURE

--enable-FEATURE[=ARG]

optional packages: 可选包

--with-PACKAGE[=AGE]

--without-PACKAGE

 

第二步:make

第三部:make install 

安装后的配置:

1。导出二进制程序目录至环境变量中。

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

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

 

2 导出库文件路径

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

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

 

 让系统重新生成缓存:

     ldconfig [-v]

 

3.导出头文件

     基于链接的方式实现;

     ln  -sv  安装路径下的include    /usr/include/NAME

 

4.导出帮助文件

     编辑/etc/man.confgure

    添加: MANPATH 

练习:

1.yum的配置和使用:包括yum  repository的创建;

2.编译安装Apache 2.2; 启动此服务。

博客作业: 

   程序包管理: rpm yum 编译

update和upgrade的差别:

升级前

系统版本:  centos5.5


内核版本:  2.6.18-194.el5

升级前做过简单配置文件修改


yum -y upgrade    升级后


系统版本:    centos5.7


内核版本:  2.6.18-194.el5


系统和软件配置不做修改

yum -y update    升级后

系统版本:    centos5.7

内核版本:    2.6.18-238.el5

系统和软件配置文件更新

结论:

yum -y update 

升级所有包,改变软件设置和系统设置,系统版本内核都升级

yum -y upgrade

升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变


update是下载源里面的metadata的. 包括这个源有什么包, 每个包什么版本之类的.

upgrade是根据update命令下载的metadata决定要更新什么包(同时获取每个包的位置).


安装软件之前, 可以不upgrade, 但是要update. 因为旧的信息指向了旧版本的包, 但是源的服务器更新了之后旧的包可能被新的替代了, 于是你会遇到404.