yum详解,源码编译安装(第10天)

1:程序包管理
CentOS程序包管理前端工具:yum和dnf
YUM: yellow dog, Yellowdog Update Modifier

yum repository: yum repo:yun仓库
存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata目录);

yun仓库是文件服务器,可以是支持如下协议的:
ftp://
http://
nfs://
file:///

yum客户端:
配置文件:/etc/yum.conf   为所有仓库提供公共配置选项(man 5 yum.conf)
                 /etc/yum.repos.d/*.repo 每个repo文件定义一个或多个仓库的配置选项,这里的文件只要不是以.repo结尾的就不会被识别为仓库配置文件。

仓库指向的定义:/etc/yum.repos.d/*.repo中定义的内容如下
      [repositoryID]
      name=Some name for this repository
      baseurl=url://path/to/repository/   #repodata目录的父目录
      enabled={1|0}   是否启用此仓库,默认是1,表示启用
      gpgcheck={1|0}  检查程序包的来源合法性和完整性
      gpgkey=URL   密钥文件的路径
      enablegroups={1|0}
      failovermethod={roundrobin|priority}  默认为:roundrobin,意为随机挑选;
      cost=    开销数字,默认为1000

查看/etc/yum.repos.d/CentOS-Base.repo文件可以看到[base],[updates],[extras],[centosplus]等多个仓库的配置。


如何将系统的yum源替换为ustc的源:参考如下链接:
https://lug.ustc.edu.cn/wiki/mirrors/help/centos

yum命令的用法:
yum [options] [command] [package ...]

command is one of   yum包含的子命令
        * install package1 [package2] [...]
        * update [package1] [package2] [...]
        * update-to [package1] [package2] [...]
        * check-update
        * upgrade [package1] [package2] [...]
        * upgrade-to [package1] [package2] [...]
        * distribution-synchronization [package1] [package2] [...]
        * remove | erase package1 [package2] [...]
        * list [...]
        * info [...]
        * provides | whatprovides feature1 [feature2] [...]
        * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
        * makecache
        * groupinstall group1 [group2] [...]
        * groupupdate group1 [group2] [...]
        * grouplist [hidden] [groupwildcard] [...]
        * groupremove group1 [group2] [...]
        * groupinfo group1 [...]
        * search string1 [string2] [...]
        * shell [filename]
        * resolvedep dep1 [dep2] [...]
        * localinstall rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use install)
        * localupdate rpmfile1 [rpmfile2] [...]
           (maintained for legacy reasons only - use update)
        * reinstall package1 [package2] [...]
        * downgrade package1 [package2] [...]
        * deplist package1 [package2] [...]
        * repolist [all|enabled|disabled]
        * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
        * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
        * check
        * help [command]

显示仓库列表
repolist [all|enabled|disabled]  例如,yum repolist all

显示程序包:使用list子命令
# yum list [all | glob_exp1] [glob_exp2] [...]
# yum list {available|installed|updates} [glob_exp1] [...]
available表示仓库里有的,系统上尚未安装的
installed表示已经安装的
updates表示已安装的,可以升级的
例如  yum list available python*  示仓库里有的,系统上未安装的,并以python开头的


安装程序包:
install package1 [package2] [...]
reinstall package1 [package2] [...]  (重新安装)

升级程序包:
update [package1] [package2] [...]
downgrade package1 [package2] [...] (降级)

检查可用升级:
check-update

卸载程序包:
remove | erase package1 [package2] [...]

查看程序包information:
info [...]    例如  yum  info gcc

查看指定的特性(可以是某文件)是由哪个程序包所提供:
provides | whatprovides feature1 [feature2] [...]

清理本地缓存:
clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]

构建缓存:
makecache

搜索:  以指定的关键字搜索程序包名及summary信息;
search string1 [string2] [...]

查看指定包所依赖的capabilities:
deplist package1 [package2] [...]
例如  yum deplist gcc  查看gcc依赖哪些库

查看yum事务历史:
history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安装及升级本地程序包:不建议使用,直接yum install rpmfile1 [rpmfile2] [...]
* localinstall rpmfile1 [rpmfile2] [...]
        (maintained for legacy reasons only - use install)
* localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)

包组管理的相关命令:
* groupinstall group1 [group2] [...]    例如 yum groupinstall "Development tools"
* groupupdate group1 [group2] [...]
* grouplist [hidden] [groupwildcard] [...]
* groupremove group1 [group2] [...]
* groupinfo group1 [...]   例如yum groupinfo "Development tools"

   如何使用光盘当作本地yum仓库:
    (1) 挂载光盘至某目录,例如/media/cdrom
    # mount -r -t iso9660 /dev/cdrom /media/cdrom
    (2) 创建配置文件 /etc/yum.repos.d/local.repo  写入如下内容
    [CentOS7]
    name=CentoS 7 Release
    baseurl=file:///media/cdrom  #repodata目录所在的目录
    gpgcheck=0
    enabled=1

yum的命令行选项:
--nogpgcheck:禁止进行gpg check;
-y: 自动回答为“yes”;
-q:静默模式;
--disablerepo=repoidglob:临时禁用此处指定的repo(仓库);
--enablerepo=repoidglob:临时启用此处指定的repo(仓库);
--noplugins:禁用所有插件;

yum的/etc/yum.repos.d/*.repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号;
$arch: 平台;x86,x86_64
$basearch:基础平台;比如i386
$YUM0-$YUM9

例如如下的例子:/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirrors.ustc.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
enablegroup=1

创建yum仓库,使用createrepo命令
createrepo [options] <directory>

1)复制一些rpm文件到/yum/repo目录下

2)执行 createrepo /yum/repo  命令
则会在/yum/repo/目录下创建repodata目录,里面的文件保存了rpm包的元数据,以及它们之间的依赖关系等等。
例如:
UUID-primary.xml.gz
UUID-primary.sqlite.bz2
UUID-filelists.xml.gz
UUID-filelists.sqlite.bz2
UUID-other.xml.gz
UUID-other.sqlite.bz2
repomd.xml   保存上面的文件的摘要

3)创建文件/etc/repos.d/local_repo.repo:编辑如下内容
[xen4centos]
name=Xen 4 CentOS 6
baseurl=file:///yum/repo/
gpgcheck=0

4)执行 yum makecache 生成缓存。

2:源代码编译安装
testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装;

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

C代码编译安装三步骤:
第1步  ./configure:
      (1) 通过选项传递参数,指定启用特性、安装路径等;执行时会参考用户的指定以及Makefile.in文件生成makefile;
      (2) 检查依赖到的外部环境;

第2步  make:
根据makefile文件,构建应用程序;具体使用到了gcc,g++,ld等工具来生成二进制文件

第3步  make install
将二进制文件,文档等放置到相应位置

开发工具:
      autoconf: 生成configure脚本
      automake:生成Makefile.in

建议:编译安装源码包前查看INSTALL文件或者README文件

开源程序源代码的获取:
      官方自建站点:
      apache.org (ASF)
      mariadb.org
    ...
代码托管:
      SourceForge
      Github.com
      code.google.com

c/c++: gcc (GNU C Complier)

编译C源代码:(前提,第1,2,3步)
前提:提供开发工具及开发环境
开发工具:make, gcc等
开发环境:开发库,头文件
glibc:标准库
通过“包组”提供开发组件
CentOS 6: yum groupinstall "Development Tools",
                 yum groupinstall "Server Platform Development"

第一步:configure脚本
选项:指定安装位置、指定启用的特性
--help: 获取其支持使用的选项
选项分类:
      安装路径设定:
             --prefix=/PATH/TO/SOMEWHERE: 指定默认安装位置;默认为/usr/local/
             --sysconfdir=/PATH/TO/SOMEWHERE:配置文件安装位置;
      System types:交叉编译时使用
      Optional Features: 可选特性
             --disable-FEATURE
             --enable-FEATURE[=ARG]
     Optional Packages: 可选包,依赖包
             --with-PACKAGE[=ARG]
             --without-PACKAGE
第一步完成之后会生成makefile文件。

第二步:make

第三步:make install


安装后的配置:
(1) 导出二进制程序目录至PATH环境变量中;
编辑文件/etc/profile.d/NAME.sh 写入如下的内容
export PATH=/PATH/TO/BIN:$PATH

(2) 导出库文件路径
编辑/etc/ld.so.conf.d/NAME.conf
添加新的库文件所在目录至此文件中;
让系统重新生成缓存:ldconfig [-v]

(3) 导出头文件到/usr/include或者导出到系统默认能搜索到头文件的路径
基于链接的方式实现:ln -sv  源文件  目标文件
ln -sv  /usr/include/   /usr/local/apache2/include/

(4) 导出帮助手册
编辑/etc/man.config文件
添加一个MANPATH

练习:
    1、yum的配置和使用;包括yum repository的创建;
    2、编译安装apache 2.2; 启动此服务;
博客作业:程序包管理:rpm/yum/编译

评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用