rpm包管理、yum仓库、ftp、http服务、编译安装

一、软件包管理

1.1 软件包管理

APIApplication Programming Interface  应用程序开发接口程序员面对的编程接口

POSIXportable operating system:可移植操作系统接口

v   程序源代码 –> 预处理 –> 编译 –> 汇编 –> 链接

静态编译:    共享编译:.so     

ABIApplication Binary Interface   应用程序的二进制接口程序应用者面对运行程序接口

二进制文件接口Windows Linux 不兼容  :ELF(Executable and Linkable Format)PEPortable Executable

    库级别的虚拟化:Linux: WINE    Windows: Cywin

1.2 包管理器

二进制应用程序的组成部分二进制文件、库文件配置文件、帮助文件

程序包管理器:debian deb 文件, dpkg 包管理器 ;redhat: rpm 文件, rpm 包管理器

rpm: Redhat Package Manager       RPM Package Manager

1.2.1 包命名

源代码:name -VERSION.tar.gz|bz2|xz  VERSION(版本号): major.minor.release(开发版)minor为偶数是稳定版

rpm 包命名方式:name  -VERSION-release.arch.rpm

              例:bash-4.2.46-19.el7.x86_64.rpm

          VERSION: major.minor.release    release release.OS

   常见的arch(架构)x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc

   跟平台无关:noarch

1.2.2 包命名和工具

  1包:分类 和 拆包

Application-VERSION-ARCH.rpm:  主包  ;  Application-devel-VERSION-ARCH.rpm  开发子包

Application-utils-VERSION-ARHC.rpm  其它子包 ; Application-libs-VERSION-ARHC.rpm  其它子包

v  包之间:可能存在依赖关系,甚至循环依赖

解决依赖包管理工具:yum rpm 包管理器的前端工具  

              apt-get deb 包管理器前端工具 ;zypper: suse 上的rpm 前端管理工具

         dnf: Fedora 18+ rpm管理器前端管理工具

1.2.3 库文件

    查看二进制程序所依赖的库文件 ldd /PATH/TO/BINARY_FILE

管理及查看本机装载的库文件:idconfig

        /sbin/idconfig –p显示本机已经缓存的所有可用库文件名及文件名的路径映射关系

       库文件配置文件:/etc/ld.so.conf/etc/ld.so.conf.d/*.conf 

       库文件缓存文件/etc/ld.do.cache

1.2.4 程序包管理器

     功能:将编译好的应用程序的各组成文件打包一个或几个程序包文件从而方便快捷实现程序包的安装、卸载、查询、升级和校验等管理操作

1 、包文件组成 ( 每个包独有)RPM包内的文件;RPM 元数据,如名称,版本,依赖性,描述

                             安装或卸载时运行的脚本

2 、数据库( 公共):程序包名称及版本;依赖关系;功能说明包;包安装后生成的个文件路径及校验码信息

程序包的来源

    管理程序包的方式: 使用管理器rpm  使用前端工具:yumdnf

    获取程序包的途径:

(1)系统发版的光盘或官方的服务器;CentOS 镜像:

            https://www.centos.org/download/        http://mirrors.aliyun.com

            http://mirrors.sohu.com                 http://mirrors.163.com

(2)项目官方站点

(3)第三方组织:Fedora-EPELExtra Packages for Enterprise Linux    Rpmforge:RHEL 推荐,包很全

搜索引擎:http://pkgs.org  http://rpmfind.net  http://rpm.pbone.net  https://sourceforge.net/

v (4) 自己制作

v  注意:检查其合法性( 来源合法性, 程序包的完整性)

二、rpm包管理

CentOS系统上使用rpm命令管理程序包:安装、卸载、升级、查询、校验、数据库维护

2.1 安装软件包

  rpm  –ivh  PACKAGE-FILE…

rpm -i|–install[install-options] PACKAGE_FILE

[install-options]-test:  测试安装,但不真正执行安装;dry run 模式

–nodeps :忽略依赖关系  ;–replacepkgs | replacefiles重复覆盖安装  –nosignature:  不检查来源合法性

–nodigest :不检查包完整性  ;–noscripts :不执行 程序包脚本

%pre: ; 安装前脚本; –nopre   ;   %post: ; 安装后脚本; –nopost

%preun: ; 卸载前脚本; –nopreun   ;  %postun:  卸载后脚本; –nopostun

2.2 软件包升级

rpm -U|–upgrade[install-options] PACKAGE_FILE

rpm  {-F|–freshen} [install-options] PACKAGE_FILE

upgrade :安装有旧版程序包,则“升级”  ;  如果不存在旧版程序包,则“安装”

freshen :安装有旧版程序包,则“升级”   ;  如果不存在旧版程序包,则不执行升级操作

rpm -Uvh PACKAGE_FILE …         ;             rpm -Fvh PACKAGE_FILE …

–oldpackage :降级          ;            –force:强行升级

升级注意项:(1不要对内核做升级操作linux支持多内核版本并存因此,只需要直接安装新内核版本

    2如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个 配置文件并不会直接覆盖老  版本的配置文件,而是把新版本的文件重命名(FILENAME.rpmnew)后保留

2.3 rpm包查询query

rpm {-q|–query} [select-options] [query-options]

v   [select-options]

-a: 所有包  -f:  看指定的文件由哪个程序包安装生成  -p rpmfile :针对尚未安装的程序包文件做查询操作;

–whatprovides CAPABILITY :查询指定的 CAPABILITY由哪个包所提供

–whatrequires CAPABILITY :查询指定的 CAPABILITY 被哪个包所依赖

v     rpm2cpio  包文件|cpio –itv 预览包内文件

v     rpm2cpio  包文件|cpio –id “*.conf” 释放包内文件

     [query-options]

–changelog :查询rpm 包的changelog

-c:  查询程序的配置文件  ; -d:  查询程序的文档  ;  -i: information查询包的信息

-l:  查看指定的程序包安装后生成的所有文件  ;  -R:  查询指定的程序包所依赖的 的CAPABILITY

–scripts :程序包自带 的脚本      –provides:  列出指定程序包所提供的 的CAPABILITY

2.3.1 组合查询

-q仅查询,后面接的软件名是否安装    -qa:列出所有的已经安装在本机Linux上面的所有软件名称

-qi:列出该软件详细信息information    -ql:列出该软件所有的文件与目录所在完整文件名

qc:列出该软件的所有config文件/etc/下面的文件名) -qd:列出该软件的所有帮助软件(man

-qR:列出该软件有关的依赖软件所含的文件(Required qf:后接文件名找出此文件属于哪一个已安装的软件 

-qp [ icdlR]查询某个RPM的信息,而非已安装软件的信息。

2.4 rpm包卸载

rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

2.5 rpm包校验

包来源合法性验正及完整性验正:

   完整性验正:SHA256  ;  来源合法性验正:RSA

v 公钥加密:(1)对称加密:加密、解密使用同一密钥;  (2)非对称加密:密钥是成对儿的

   public key:  公钥,公开所有人         ;       secret key:  私钥,  不能公开

导入所需要公钥:rpm –import / etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

         rpm -K|checksig rpmfile 检查包的完整性和签名

     rpm -qa gpg-pubkey*

CentOS 7 发行版光盘提供: RPM-GPG-KEY-CentOS-7

2.6 数据库重建

   vim  /var/lib/rpm   ldd :查询二进制执行命令所调用的库如:ldd /bin/ls   ldd /bin/cat

rpm {–initdb|–rebuilddb}

initdb:  初始化   如果事先不存在数据库,则新建之;否则,不执行任何操作

rebuilddb :重建已安装的包头的数据库

三、yum

    yumyellowdog update modifier)依赖于rpm     CentOS安装包的命令: yum, dnf

YUM: Yellowdog Update Modifier rpm 的前端程序,用来解决软件包相关依赖性,

     可以在多个库之间定位软件包, up2date 的替代工具

3.1 yum仓库

    yum依赖于数据库,使用yum,必须要建立yum仓库yum repository: yum repo):存储了众多rpm包,以及rpm包的相关的元数据文件(放置于特定目录repodata 下)里面包括:包之间的依赖性、校验查询、等信息

    元数据存放在:文件服务器:ftp:// http:// file://;在本机中以后可以用命令自动生成,只需要包文件

yum 客户端配置文件:不同终端只能一个人使用yum

    /etc/yum.conf 为所有仓库提供公共配置    /etc/yum.repos.d/*.repo :为仓库的指向提供配置

3.1.2 yum仓库指向的定义

      元数据文件repodata的父目录即为仓库指向的路径

[repositoryID][CentOS]    name=Some name for this repository(为仓库指名) 

baseurl=url://path/to/repository/  [ftp:// http://file:///mnt/yum本机/mnt/yum]

enabled={1|0} 0表示仓库禁用)    gpgcheck={1|0}0表示不检查合法性-import  

(开放源代码密钥)gpgkey=URL    enablegroups={1|0} (是由支持用户组)

failovermethod={roundrobin|priority},默认为:roundrobin ,意为多个url随机挑选;

cost= 默认为1000可以建多个仓库,cost代表价格,cost值越低,优先级越高)

3.1.3 yum客户端的建立

   生成172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo  repo镜像文件  

  yum-config-manager –add-repo=http://172.16.0.1/cobbler/ks_mirror/CentOS-X-x86_64/

v yum-config-manager –disable “ 仓库名" 禁用仓库

v yum-config-manager –enable “ 仓库名”启用仓库  适用于交互式脚本)

显示仓库列表yum repolist [all|enabled|disabled]  显示所有可安装的包

3.1.4 yum程序包管理

yum list    查看包的列表   yum info  查看包的信息:包含的内容

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

yum list {available|installed|updates} [glob_exp1] […]

v  安装程序包:相对于rpmyum能简便安装,不用考虑依赖性直接安装依赖的包

yum install package1 [package2] […]

yum reinstall package1 [package2] […] ( 重新安装)  

    升级程序包:

yum update [package1] [package2] […]

yum downgrade package1 [package2] […] ( 降级)

v  检查可用升级:

yum check-update

v  卸载程序包:不能卸载所依赖的包,导致卸载不干净,留下垃圾

yum remove | erase package1 [package2] […]

cat /var/log/yum.log 查看yum安装卸载日志

3.1.5 查看程序包information 

yum info […]

v  查看指定的特性( 可以是某文件) 是由哪个程序包所提供:

  yum provides | whatprovides feature1 [feature2][…]    ——rpm  -qf

v  清理本地缓存:cat /etc/yum.conf à 得到cachedir=var/cache/yum/…  一般缓存元数据和其他的数据

  yum clean [ packages | metadata | expire-cache过期缓存) |rpmdb | plugins | all ]

如果遇到新安装yum报错,而且配置文件没啥问题,那就清除一下缓存以前yum配置文件缓存)

v  构建缓存:yum makecache

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

v  查看指定包所依赖的capabilities 

yum deplist package1 [package2] […]

v  查看yum 事务历史:

yum history [info|list|packages-list|packages-info|summary|addon-info|redo重做)|undo撤销)|

rollback|new|sync|stats]

yum history   = cat /var/log/yum.log

yum history info 6

yum history undo 6

查看历史上安装的包,指定第6info,撤销安装的第6,这个相当于能直接卸载依赖性的包

v日志文件存放/var/log/yum.log

安装及升级本地程序包:

yum localinstall rpmfile1 [rpmfile2] […]      ( install 替代)

yum localupdate rpmfile1 [rpmfile2] […]     ( update 替代)

 

3.1.6包组管理的相关命令

yum groupinstall group1 [group2] […]  安装CentOS安装选项 Development tools

yum groupupdate group1 [group2] […]

yum grouplist [hidden] [groupwildcard] […]查看包组的列表

yum groupinfo group1 […] 查看的信息包含的内容:必选组,默认,可选

查看显示=”代表随着包组一块安装的

yum groupremove group1 [group2] […]

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

(1)  挂载光盘至某目录,例如/media/cdrom

# mount /dev/cdrom /media/cdrom

(2)  创建配置文件

[CentOS7]   name=   baseurl=    gpgcheck=    enabled=

4.1 yum仓库示例

[centos7]

baseurl=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/

#gpgcheck=0

gpgkey=http://172.18.0.1/cobbler/ks_mirror/CentOS-7-1511-x86_64/RPM-GPG-KEY-CentOS-7

enabled=1

4.2 yum 的命令行选项

–nogpgcheck :禁止进行gpg check

-y:  自动回答为yes”    -q :静默模式

–disablerepo=repoidglob :临时禁用此处指定的repo    –enablerepo=repoidglob :临时启用此处指定的repo

–noplugins

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

$releasever:  当前OS 的发行版的主版本号    $arch:  架构平台,i386,i486,i586,x86_64

$basearch :基础平台;i386x86_64

$YUM0-$YUM9: 自定义变量

v  实例:

http://server/centos/$releasever/$basearch/  不管操作系统的版本567直接能够找到对应版本所需的仓库

http://server/centos/7/x86_64     http://server/centos/6/i384

v  自己创建yum 仓库:首先要拿到rpm包,

rpm -ivh /misc/cd/Packages/vsftpd-2.2.2-21.el6.x86_64.rpm

     再创建元数据:createrepo [options] <directory>

4.3 光盘的自动挂载/misc/cd

 cat  /etc/yum.repos.d/wang.repo (查看yum仓库的配置文件)

yum -y install autofs   下载autofs软件

systemctl  enable  autofs   === centos7   chkconfig autofs on  ===  centos6  开通autofs服务

reboot  重启

 cat  /etc/yum.repos.d/wang.repo 查看yum仓库的配置文件是否如下:

    [base]    baseurl=file:///misc/cd/    gpgcheck=0

五、ftp服务

   创建yum仓库,为网络客户服务

rpm -ivh /misc/cd/Packages/vsftpd-3.0.2-10.el7.x86_64.rpm  下载vsftpd服务软件包,自动创建/var/ftp/pub目录。

systemctl  start  vsftpd   === centos7      systemctl  enable  vsftpd === centos7下次启动继续执行)

service   vsftpd  start  ===  centos6       chkconfig  vsftpd  on ===  centos6 (启动ftp服务)

iptables  -F   (清空防火墙)  setenforce  0   禁用selinux守护 策略

rpm –ivh /misc/cd/Packages/createrepo….rpm  下载创建仓库元数据的软件包createrepo

cp  *.rpm  /var/ftp/pub/7      复制软件包到/var/ftp/pub/7目录下

createrepo /var/ftp/pub/7 创建 /var/ftp/pub/7/repodata元数据 文件)之后才能访问ftp共享文件。

在客户端上:

[root@centos7 ~]# cat /etc/yum.repos.d/base.repo

[base]

baseurl=ftp://172.16.253.230/pub/$releasever/

gpgcheck=0

mount -o loop /root/CentOS-6.8-x86_64-bin-DVD1.iso  /var/ftp/pub/6 挂载iso镜像文件到/var/ftp/pub/6v  

六、http服务

6.1程序包编译安装

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

v  源代码–> 预处理–> 编译–> 汇编–> 链接–> 执行

v  源代码组织格式:多文件:文件中的代码之间,很可能存在跨文件依赖关系

6.1.1 编译C 源代码

准备: 提供开发工具及开发环境 yum groupinstall Development Tools”)

       开发工具:make, gcc等      开发环境:开发库,头文件glibc :标准库)

实现:通过 “包组”提供开发组件

    CentOS 6:   Development Tools      Server Platform Development

    CentOS 7:   Development Tools      Development and Creative Workstation

C C++ make ( 项目管理器,configure增加参数) –>Makefile.in 模版文件)–> makefile)

java maven相当于c 代码的编译安装三步骤

6.1.2 C代码编译安装三步骤

1 ./configure:执行命令必须在解压缩的目录下       

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

(2)  检查依赖到的 外部环境,如依赖的软件包

2 make :根据makefile 文件,构建应用程序,文件终生成二进制文件

3 make install: 复制文件到相应路径

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

v    注意:安装前  configure – -help   查看cat  INSTALL README

开源程序源代码的获取:

1官方自建站点:apache.org (ASF Apache Software Foundation)   mariadb.org    

2代码托管:SourceForge.net     Github.com     code.google.com                     

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

 

第一步:configure 脚本

选项:指定安装位置、指定启用的特性    –help:  获取其支持使用的选项

选项分类:

安装路径设定:–prefix=/PATH:  指定默认安装位置, 默认为/usr/local/    –sysconfdir=/PATH :配置文件安装位置

System types:  系统类型

Optional Features:  可选特性  –disable-FEATURE   –enable-FEATURE[=ARG]

Optional Packages:  可选包,    –with-PACKAGE[=ARG], 依赖包    –without-PACKAGE, 禁用依赖关系

v第二步:make

v第三步:make install  

6.1.3 安装后的配置

(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|man_db.conf 文件

添加一个MANPATH     

七、完整安装编译安装http服务

1 yum groupinstall "Development Tools" 获取开发(make)编译gcc)工具获取开发环境(开发库,头文件)

2 yum install lftp  使用ftp服务下载 http 安装包

      lftp  172.16.0.1/pub/Sources/sources/httpd/httpd-2.2.29.tar.bz2

      get  httpd-2.2.29.tar.bz2 下载)  bye:退出当前模式  

      tar xvf httpd-2.2.29.tar.bz2解压)

   必须ping172.16.0.1可以检查路由设置,设置默认路由:route add default eth0  route -n

3  cat README  INSTALL  查看帮助,建立文档

4  yum install gcc 必须要先确定有编译工具gcc

    ./configure  –help  生成makefile文件

    ./configure  –prefix=/usr/local/wanghttp 默认安装目录  –sysconfdir=/etc/wanghttp/  设置默认安装配置文件

5  make (根据makefile 文件,构建应用程序,最文件终生成二进制文件)

6  make install  复制二进制文件到相应路径

7  vim  /etc/profile.d/wanghttp.sh  编辑全局profile.d文件 设置自动执行的环境变量

        PATH=$PATH:/usr/local/wanghttp/bin

8  vim /etc/man.configCentOS6  | man_db.conf  CentOS7

       导入帮助手册路径  MANPATH /usr/local/wanghttp/man

9  vim /etc/ld.so.conf.d/wanghttp.conf

     /usr/local/wanghttp/lib  创建数据库     ldconfig (加载库)

10  ln -s  /usr/local/wanghttp/include/  /usr/include/wanghttp(指向链接的头文件)

11  apachectl start

     以前安装的httpd冲突,需要卸载

     如果不成的话就把hash -r,看是不是路径问题

netstat -ant 查看80端口(http的默认端口)

iptables -F  清空防火墙

12 测试查看网页links ip 172.16.222.222     curl ip 172.16.222.222

13  切换到编辑网页路径:cd /usr/local/wanghttp/htdocs

echo "welcome to mage" > index.html  更改内容


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

(0)
lyxlyx
上一篇 2016-11-27
下一篇 2016-11-27

相关推荐

  • Linux发展及简单命令

    一 计算机的组成及其功能 冯·诺依曼提出的计算机体系结构:计算机由控制器、运算器、存储器、输入设备、输出设备五部分组成。 二 Linux的发行版 Linux发行版主要有三个分支:Debian、Slackware、Redhat。 (1)Debian:(以社区的方式运作) Ubuntu:基于Debian开发的开源Linux操作系统,主要针对桌面和服务器; Lin…

    2018-03-02
  • btrfs管理及应用

    一、btrfs的命令选项     mkfs.btrfs         -L 'LABEL' 指定卷标         -d <type&…

    Linux干货 2016-03-12
  • UID SGID与chmod 777的一些问题

    先来看问题 问题来了:echo的行为返回是对的还是vi是对的? 现场分析: vi 和 echo 都被设置为SGID权限。 abc文件所在的父目录权限是777 echo无法写abc文件,而vi是可以的 当时被问到这个问题时,我也是一征,怎么会这样。加之SUID,SGID在企业应用很少,如此这么久早忘了一干二净,只是赶紧去补课~,但经过30MIN后依然没有找到问…

    Linux干货 2016-08-08
  • 文本处理三剑客之sed

    概述     经过上篇对正则表达式和grep相关内容的学习,我们对文本处理有了一个初步的认识,本篇将简要介绍一下文本处理三剑客之sed。具体分为以下几个部分:     1、sed原理概述     2、sed命令详解 第一部分 &n…

    Linux干货 2016-08-10
  • 高级文件系统之逻辑卷和btrfs文件系统

    逻辑卷管理器快照 逻辑卷可以实现对分区的动态的扩展,快照可以看成是特殊的逻辑卷,它是在生成快照是存在的逻辑卷的准确拷贝。 快照只有在它们和原来的逻辑卷不同时才会消耗空间:     在生成快照时会分配给他一定的空间,但只有在原来的逻辑卷或者快照有所改变时才会使用这些空间     当…

    Linux干货 2016-09-02
  • MySQL双主复制模型

    配置双主数据库实例 双方可以相互复制 为了不影响效果,两台虚拟机把刚才生成的数据文件都删除 rm -rf /var/lib/mysql/* 1、时间要同步 2、双方既要启动中继日志,也需要启动二进制日志 3、编写主的配置文件 双主复制时有一个最大的问题,自动增长字段会重叠。为了避免重叠,一个节点使用奇数,另一个节点使用偶数 这里表示的意思,从1增长,一次增长…

    Linux干货 2016-11-21