学习笔记-软件包管理

Linux的程序包管理

应用程序
标准库:glibc

GPL:源码

API:兼容,意味开发库兼容,因此
ABI:兼容,编译后的程序可以跨平台

库:可执行程序。本身不能作为程序的入口,但可以被调用编译好的二进制格式

程序:预编译,编译,汇编,链接(静态,动态 .dll .so)

源代码 -> CPU指令集

跨平台:需要考虑 OS 和 CPU

注意:1.OS平台:应用程序必须为特定平台支持的版本
2.硬件平台:应用程序要为特定的CPU所支持

软件包的组成部分:
1.二进制程序:/bin /sbin, /usr/bin, /usr/sbin, /usr/loacl/bin, /usr/loacl/sbin
/usr/local/nginx/bin
2.库:/lib /usr/lib / lib64, /usr/lib64 ,//usr/lib,usr/include
/usr/local/nginx/include

        /etc/ld.so.conf 链接是要找的文件
        /etc/ld.so.conf.d/*.conf 建立新库文件链接的位置

3.配置文件: /etc
4.帮助文件:
man文件,info文件,README,INSTALL,ChangeLog

    man COMMAND
        到某种路径下查找与命令相同的通常以.gz结尾的压缩文件的名字
        /usr/share/man
    vi /etc/man.config这是man文件的说明

ls –help :是程序内部实现的

ldd命令:
查看应用所依赖的共享库
ldd

[root@localhost include]# ldd /bin/cat           或者 which `which cat`
    linux-vdso.so.1 =>  (0x00007fff9cbff000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003ac1400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003ac0c00000

总结:/usr/local/nginx
二进制程序:bin sbin
自身库:lib
头文件:include
帮助文件:man(配置文档/etc/man.conf)
配置文件:etc/conf

应用程序管理器:
1、数据库:

 名称和版本,
 安装生成的各文件路径,校验码,
 依赖关系
 提供功能性的说明

2、提供程序组成格式:会把文件的放到指定的位置

文件清单
安装卸载时运行的脚本

应用程序:源代码 name-major.minor.release.tar.gz

依赖关系:
循环依赖:
版本依赖:

Debian:.deb dpkg
RadHat: .rpm(perl编写),rpm(RadHat Package Manager)
rpm:RPM is Package Manager
SUSE: rpm

包管理器的基本功能
打包
安装
查询
升级
卸载
校验
数据库管理

依赖关系:安装X 依赖Y->M,N->….(想安装X需要安装Y,M N …等等,所以需要一个来解决这个问题的东西)

前段管理器:查询程序依赖关系并提前安装好
apt-get
yum

总结:应用程序的安装方式
使用包管理器:便捷、易用
包管理器的前段管理:yum
源代码编译:
简单打包的二进制格式:(绿色软件,简单修改,打开就可以用)

rpm包的使用:
rpm包命名格式:
程序包:name-version.tar.{gz|bz|xz}
vesion:major.minor.release

rpm包:name-version-release.arc.rpm
release:通常包含rpm的只做发行号,还包含使用的OS
bash-4.3.2-2.elf.x86_64.rpm
OS平台

       el6:redhat enterprise linux 6
       CentOS5:
       suse11

arch:

       X86_64
       i386,i586,i686
       ppc
       noarch(与平台无关)

比如:一个源码:有10个功能,大多数用户只用其6个功能,剩余的4个呢?

分包:把一个复制的程序打包制作成多个rpm格式

主包:bash-4.3.2-2.elf.x86-64.rpm
支包:bash-hello-4.3.2-2.elf.x86-64.rpm
支包:bash-world-4.3.2-2.elf.x86-64.rpm

来源合法性验证:
源程序:通过md5或sha1校验码验证;
rpm包:发行商提供的是合法性是可信的
验证包完整性:校验码
验证来源合法:公钥加密算法

获取rpm的途径:

     1、发行商的光盘或站点服务器
          CentOS:
           http://mirrors.163.com
           http://mirrors.sohu.com
     2、rpmfind 搜索rpm包
           http://rpmfind.net
     3、rpmpbone 搜索rpm包
           http://rpm.pbone.net

注意:
1、发行商。发行光盘中的包,需要升级时,官方释放出升级包
2、Fedora EPEL(众多的rpm包)
安装程序包
下载: http://172.16.0.1/cobbller

 rpm -i --install 安装
     #rpm -i /path/to/rpm_package ...

 -v:显示安装信息
 -vv:二级详细
 -vvv:三级详细
 -h:hash 以#的个数显示安装进度,一个#表示2%的进度
 --test:仅测试,不真正执行安装过程

如果存在依赖

 解决依赖关系:安装依赖的包
 忽略依赖关系:--nodeps (安装上不一定有用)
      rpm -ivh --nodeps php-mysql-5.3.3-49.el6.x86_64.rpm

重新安装:

 -ivh  --replacepkgs 
 例# rpm -ivh zsh-4.3.11-8.el6.centos.x86_64.rpm  --replacepkgs
 原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

卸载:

   rpm -e ,--erase
   rpm -e package_name
       #rpm -e zsh
   如果卸载被其他程序所依赖的包
    1、把依赖者一同卸载
    2、忽略依赖关系:--nodeps
    3、不再卸载

查询

 rpm -q

查询所有已安装的包:
     rpm -qa
 查询包的描述信息
     rpm -qi package_name
[root@localhost ~]# rpm -qi bash
Name        : bash                              Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 15.el6_4                          Build Date: Thu 18 Jul 2013 06:21:24 AM PDT
Install Date: Sat 01 Sep 2018 04:48:05 AM PDT   Build Host: c6b10.bsys.dev.centos.org
Group       : System Environment/Shells         Source RPM: bash-4.1.2-15.el6_4.src.rpm(源码名称)
Size        : 3139291                           License: GPLv3+
Signature   : RSA/SHA1, Thu 18 Jul 2013 06:46:10 AM PDT, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>(源码位置)
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.
[root@localhost ~]# 
 查询某单个包是否安装:rpm -q packe_name

 查询安装包生曾的列表的位置 rpm -ql packe_name

 查询某文件是那个包安装生成的:rpm -qf path/to/somefile(文件)

 查询包安装后生成的帮助文档:rpm -qd packe_name

 查询安装后生成的配置文件:rpm -qc packe_name

 查询包相关的脚本:rpm -q --scripts packe_name
           脚本分四类:
            preinstall 安装前脚本
            postinstall 安装后脚本
            preuninstall 卸载前脚本
            postuninstall 卸载后脚本
 查询尚未安装的rpm包文件的相关信息:
       查询安装后会生成的文件列表: rpm -qpl 包名
       查询其简单描述信息:rpm -qpi 包名

升级:

rpm -U:升级或安装
rpm -F:只升级
rpm {-Uvh|-Fvh}/path/to/package_file

--nodeps: 忽略依赖关系
--force:强行安装

注意:不要对内核执行升级操作;
      多版本内核可以并存,因此,建议执行安装操作

校验:检查包安装后生成的文件是否被修改过

  rpm -V package_Name
[root@localhost ~]# rpm -V zsh
S.5....T.    /usr/share/zsh/4.3.11/functions/_tcpsys
   S file Size differs  大小
   M Mode differs (includes permissions and file type) 头文件
   5 digest (formerly MD5 sum) differs MD5
   D Device major/minor number mismatch 主次设备号
   L readLink(2) path mismatch 路径不匹配
   U User ownership differs 属主
   G Group ownership differs 属组
   T mTime differs 修改时间
   P caPabilities differ 能力改变了

校验来源合法性和软件完整性

包完整行:通过单向加密机制(MD5|sha1)
来源合法性:通过公钥加密机制(RSA)
命令:gpg (gun 的个人守护工具)
rpm -K /path/to/somefile
rpm --checksig /path/to/package_file
    --nosigeature:不检查来源合法性
    --nodigest:不检查包完整性

导入密钥:在CentOS发行版的公钥iso文件中。在虚拟机上可以挂载CD盘来获得。

    rpm --import /path/to/gpg-key-file
     导入以后再做验证
[root@localhost ~]# rpm -K zsh-4.3.11-8.el6.centos.x86_64.rpm 
zsh-4.3.11-8.el6.centos.x86_64.rpm: RSA sha1 ((MD5) PGP) md5 NOT OK (MISSING KEYS: (MD5) PGP#c105b9de) 

[root@localhost media]# rpm --import RPM-GPG-KEY-CentOS-6

[root@localhost ~]# rpm -K zsh-4.3.11-8.el6.centos.x86_64.rpm 
zsh-4.3.11-8.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
[root@localhost ~]# 

数据库

位置:/var/lib/rpm

重建:rpm –initdb:初始化,如果已存在不会执行
如果事先不存在一个数据库,则新建之

    rpm --rebuilddb 重建
       直接新建数据库,会覆盖原有库

依赖关系:
程序包管理器的前段工具:
yum(Yellowdog Update Modifier)
自动解决依赖关系

Linux的yum

文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务共享
repository:仓库
1.需要的各rpm包
2、依赖关系、程序包安装后所能够生成的列表等元数据文件

      文件服务器:ftp,http,nfs,file(主机,客户端都在本地)

yum客户端
1、配置文件:指定各可用的yum仓库;
2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地
3、分析元数据:根据具体的操作请求完成元数据分析,可能包括依赖关系、文件列表等信息
4、执行具体操作
客户端配置文件指定对服务器配置文件:

    ftp ftp://server/path/to/repo
    http http://server/path/to/repo
    nfs  nfs://servr/nfs_path
    file file:///path/to/path

yum [install] command
command:

     check          Check for problems in the rpmdb
     check-update   Check for available package updates
     clean          Remove cached data
     deplist        List a package's dependencies
     distribution-synchronization Synchronize installed packages to the latest available versions
     downgrade      downgrade a package
     erase          Remove a package or packages from your system
     groupinfo      Display details about a package group
     groupinstall   Install the packages in a group on your system
     grouplist      List available package groups
     groupremove    Remove the packages in a group from your system
     help           Display a helpful usage message
     history        Display, or use, the transaction history
     info           Display details about a package or group of packages
     install        Install a package or packages on your system
     list           List a package or groups of packages
     load-transaction load a saved transaction from filename
     makecache      Generate the metadata cache
     provides       Find what package provides the given value
     reinstall      reinstall a package
     repolist       Display the configured software repositories 显示各可用的仓库列表
     resolvedep     Determine which package provides the given dependency
     search         Search package details for the given string
     shell          Run an interactive yum sh ell
     update         Update a package or packages on your system
     update-minimal Works like update, but goes to the 'newest' package match which fixes a problem that affects your system
     updateinfo     Acts on repository update information
     upgrade        Update packages taking obsoletes into account
     version        Display a version for the machine and/or available repos.

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

 /etc/yum.conf
 /etc/yum.repo.d/*.repo

配置文件格式:由两段组成。类似window的ini配置文件

配置repo
  [repo_ID]
   name=String
   baseurl=仓库的访问路径
   enabled={1|0}1,表示启用。0表示不启用
   gpgcheck={1|0}1,验证gpg。0表示不验证
   gpgkey=公钥地址(可以是本地,也可以是服务器端路径)
   cost=定义此仓库开销,默认为1000 开销越小越优先使用
 [base]
  name=Centos 6.5 X86_64 release
  baseurl=
  enabled=
  gpgcheck=

yum的各命令:

 1.repolist[all|enabled(默认)|disabled]:列出所有可用的yum repo

 2.clean [all|packeages(包)|metadata(元数据)|expire-cache(过期数据)|rpmdb(rpm数据)plugins]:清理缓存

 3.list [all|installed(已安装过的)|available(可用)]:列出yum包

 4.info :显示包的详细信息 

 5.grouplist:列出所有的包组

 6.groupinfo "package_group_name": 显示包组信息 
   三个跟开发相关的包组:
       Desktop Platform Development:有图形程序时需安装此组
       Server Platform Development
       Development Tools

  7.install package_name ..... 安装指定的程序包

  8.reinstall package_name ....:重新安装指定的包

  8.yum check-update:检查可升级的包
  9.update packe_name ....:指定升级的程序包(最新版本)
        要升级到指定版本要带版本号:
 10.downgrade packe_name:降级

 11.erase|remove pack_name ....:依赖的包也会被卸载

 12.whatprovides|provides /path/to/somefile: 查询某文件是由谁提供的

 13.groupinstll "group_name" 安装包组

 14.groupremove ”group_name“:卸载组

 15.yum history 查看yum的命令历史

 16.install /path/to/package_file    安装本地包
    手动禁止检查来源及完整性:--nogpgcheck
    yum insatll /tmp/zsh-2.3.1-2.elf.x86_64.rpm --nogpgcheck(参数不要放到instasll后面,会当成包名使用)

如果系统为Centos 5,开发包组为”Development Tools“和”DeveLopment Libraries“
如何系统为centos 6,常用的开发包为”Development tools“和”Server Platform Development”

yum配置文件中可用的宏

  $releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6
  $arch:系统架构
  $basharch:系统基本架构,如i686,i586等的基本架构为i386
  $YUM0-9:在系统定义的环境变量,可以在yum中使用

获取当前系统相应宏替换的办法

[root@localhost ~]# python
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import yum,pprint
>>> yb=yum.YumBase()
>>> pprint.pprint(yb.conf.yumvar,width=1)
Loaded plugins: fastestmirror, refresh-packagekit
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '6',
 'uuid': 'ecaa46a5-28c1-4491-aa44-19a752ffdb3b'}
>>> quit()

yum repository:文件
yum install createrepo -y 制作creatrepo 会生成文件夹repodata
ftp mirror下载包
repodata
repomd.xml

测试实现yum repository的配置

  1.准备文件服务器;使用httpd为例,请事先确保已安装httpd程序包
  2.在/var/www/html目录。使用一个目录来保存准备制作称为yum仓库的所有rpm包
        #cd /var/www/html
        #lftp 172.16.0.1/pub/Sources/6.x86_64
        #lftp : >mirror openstack
        #bye
  3.创建yum仓库
       #rm -rf /var/www/html/openstack/repodata(删除已存在的库)
       #createrepo /var/www/html/openstack(删除已存在的库)
   4.启动http服务
       #serveice http start
   5.配置实用自建的yum仓库
       在/etc/yum.repos.d目录下创建
   6.配置好epel的yum源
   7.测试使用
       #yum install openstack-keystone(安装一个在库中有的程序试试)

程序包管理之编译安装

源码程序包:c,c++, perl源码 python源码
应用程序:项目组
软件基金会:FSF,ASF
项目组:主导者,contributor
小项目:一个人维护
商业公司支持:开源版/企业版

     SourceForge.net
     github.com
     code.google.com

源程序:
项目工程:把代码分散于多个源代码文件(需要打包)
GNU/make(项目编译工具)

一:项目开发者为了方便使用着编译安装,使用 autoconf
1.autoconf:生成configre脚本,
用来检查编译环境是否满足编译需求,并定义当前程序编译时启用那个特性或功能,已经安装路径的定义等等。
结果:会根据makefile.in文件生成makefile文件

2.automake:生成Makefile.in文件
用于结合configure脚本生成makefile文件
makefile文件是make命令的配置文件

二:使用者编译安装的步骤:

     1.拿到源代码,并解压
           #tar -xf package-version.tar.{gz|bz2|xz}
           注意:展开后的目录通常为package-version
     2.切换至源码目录中
          #cd package-version
     3.执行configure脚本
          #./configure
     4.编译
          #make
     5.安装
          #make install

configure脚本的通用功能:
我们需要定义的配置:

1.指定安装路径
    --prefix=前缀,用于指定安装路径
        例:--prefix=/usr/local/package_name
    --sysconfdir=/etc/package_name
2.指定启动/禁用的特性
    --enable-feature:  例如 --enable-fpm
    --disable-fecture: 例如 --disable-socket
3.指定所依赖功能、程序或文件
    --with-function:    启用某功能
    --without-function: 禁用某功能

不同的程序,其configure不尽相同,应获取帮助信息
      ./configure --help

练习:
1、编译安装nginx,并启动之

2、编译安装axel,并试用之

wget https://src.fedoraproject.org/lookaside/pkgs/axel/axel-2.4.tar.gz/a2a762fce0c96781965c8f9786a3d09d/axel-2.4.tar.gz
tar xf axel-2.4.tar.gz
cd axel-2.4
./configure
make
make install

3.编译安装httpd,

axel -o ./ -n 3 http://archive.apache.org/dist/httpd/httpd-2.2.4.tar.gz
tar xf httpd-2.2.4.tar.gz 
cd httpd-2.2.4
rpm -e httpd --nodeps
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so
make
make install

1.二进制程序的访问方法
vim /etc/profile.d/apache.sh

PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH
expore PATH
source /etc/profile.d/apache.sh

2 头文件输出给系统

   ln -sv /usr/local/apache/include /usr/include/httpd
库文件
vim /etc/ld.so.conf.d/httpd.conf
添加
/usr/local/apache/lib

让系统重新生成库文件路径缓存

ldconfig

3 导出man文件

vim /etc/man.conf 
添加
MANPATH /usr/local/apache/man

=========================大纲==============================

回顾:程序包管理
程序包管理器(rpm,deb(dpkg))
功能:打包,
二进制格式:name-version-release.arch.rpm
主包,支包
例如: name-devdel-version-release.arch.rpm
源码格式:name-version-release.src.rpm
源程序:没有经过编译
rpmbuild -bb name—version-release.src.rpm
建议:以普通用户运行
公钥:身份验证
单向:完整性校验
导入公钥:rpm –import
验证:rpm -k
rpm –checksig

     安装:-ivh
         --replacepkgs
         --nodeps
     升级:-Uvh,-Fvh
           --force
           --nodeps
     卸载:-e
          --nodeps
     查询:-q
           -q pckeage_name
           -qa
           -qi
           -ql
           -qf
           -qc
           -qd
           -q --scripts
     preinstall
     postinstall
     preuninstall
     postuninstall
     校验:—V
     重建数据库:--initdb,--rebuilddb

yum:C/S
yum repository :文件服务器+(rpm包+元数据)
文件服务器:

      ftp://
      http://
      nfs:
      file:///

生成元数据
creatrepo
yum cilent:
依赖配置文件:/etc/yum.conf /etc/yum.repo.d/*repo

  配置yun repo指向:
  [repo_ID]
  name=
  baseurl=
  enabled=
  gpgcheck=
  gpgkey=
  cost

  yum repolist[all|disabled|enabled]
  yum groupinstall
      yum grouplist


 yum install /path/to/package_name

 yum groupinfo
 yum erase|remove
 yum update
 yum check-update

 yum命令常用选项:
 -y:自动回答为yes
 --nogpgcheck

源码安装:
前提:开发环境:

       Development Tools 
       Server Platform Development 
       Desktop Platform Development

./configure:检查编译环境、定义启用或禁用的特性及功能等、结合Makefile.in生成makefile
make
make install

 GNU/make:项目管理工具

autoconf:configure脚本
automake:Makefile.in
./confiugre --perfix=/usr/local/apache --sysconfdir=/etc/httpd

1 二进制程序:
修改PATH环境变量
2 库文件

  /etc/ld.so.conf
  /etc/ld.so.conf.d/*.conf
  生成还需要执行命令:ldconfig 让其生效
   /etc/ld.so.cache

3 头文件:

      ln -sv

4 man帮助文档:

 /etc/man.conf
 MANPATH
 或者指定路径
 man -M /path/to/man_path

猜你喜欢

转载自blog.csdn.net/weixin_36209467/article/details/82291784