Linux之软件包管理

软件包管理(yum,rpm)

一、软件的类型

A. 源码包tarball 需要编译

所有的包在初始的时候都是源码的,需先解压再编译,因此安装起来比较慢,但是灵活性高,可以自行

配置,经过编译之后变成二进制包

B. 二进制包 已编译

可以直接拿过来就用的,适用于大批量的安装软件时,比如:qq.exe

小知识:

常见的二进制包

系统平台 包类型 工具 在线安装(自动解决依赖关系)

RedHat/Centos/Fedora/SUSE RPM rpm,rpmbuild yum

Ubuntu/Debian DPKG dpkg apt

注意:

不管是源码包,还是二进制包,安装时都可能会有依赖关系!

rpm包是一种已经编译好的二进制包,全名是redhat package standard,是红帽提出的包管理标

准,在已编译好的包上面加了一层规则,规定了的指定文件的安装位置,且会将包的信息自动存放到本地

的rpm数据库中,查询直接从数据库中查询,删除也是直接将数据库中文件删掉。实际上rpm已经成为了包

管理的主流标准。

二、RPM包管理

获得RPM包途径:

  1. RedHat光盘或官方网站提供最基础的包 ftp://ftp.redhat.com
  2. rpmfind.net 、pkgs.org寻找一些官方找不到的包
  3. 相应软件官方网站如www.mysql.org www.apache.org www.nginx.org
  4. 其他

认识RPM包:

ntfs-3g-2011.4.12-5.el5.x86_64.rpm 套件名 //x86_64的cpu

ntfs-3g-2011.4.12-5.el6.i686.rpm 套件名

ntfs-3g-2011.4.12-5.el6.x86_64.rpm 套件名

ntfs-3g-2011.4.12-5.el7.x86_64.rpm 套件名

yum-rhn-plugin-0.9.1-40.el6.noarch.rpm 套件名

yum-utils-1.1.30-14.el6.noarch.rpm 套件名

php-5.6.20-1.fc23.x86_64.rpm fc—fedora core红帽的桌面版本的

php-5.6.20-1.fc23.ppc64p7.rpm IBM 小型机的cpu是Powerpc

认识源码包

http://nginx.org/download/nginx-1.10.1.tar.gz

nginx-1.10.1.tar.gz

lftp-3.5.1-2.fc6.src.rpm

软件包名 版本号(Version) 发布版本(Release) 系统平台

ntfs-3g 2011.4.12 5.el6 i386

ntfs-3g 2011.4.12 5.el6 x86_64 el6和centos6通用

yum-utils 1.1.30 14.el6 noarch //没有架构

php 5.6.20 1.fc23 x86_64

php 5.6.20 1.fc23 ppc64p7

[root@ever ~]# uname -m //查看当前系统是多少位
i686
[root@ever ~]# uname -m
x86_64

查看系统发行版本信息

[root@ever ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
[root@ever ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.4 (Santiago)
[root@ever ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

yum管理RPM实战

yum的工作原理:

执行yum命令――>读取/etc/yum.repos.d/*.repo的yum源配置文件中的baseurl路径――>查找可用yum仓库的rpm软件包――>安装一个或多个rpm格式的软件包。

本地yum源:是指yum源配置文件*.repo中的baseurl仓库路径是在本机上。即rpm包是在本机上的目录中。**

网络yum源:是指yum源配置文件*.repo中的baseurl仓库路径是在文件共享服务器上(ftp、nfs、http等)。**

自定义yum源

目标:指定rpm软件包的路径。此案例做本地yum源,以/dvd目录为rpm软件包的路径。

yum源文件*.repo的路径:/etc/yum.repos.d

YUM使用官方源

http://mirrors.aliyun.com/

http://mirrors.163.com

基础源

Base/Extras/Updates: 默认(国外源)

[root@ever ~]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo
CentOS-Debuginfo.repo CentOS-Sources.repo
[root@ever ~]# yum repolist
repo id repo name status
base/7/x86_64 CentOS-7 - Base 9,363
extras/7/x86_64 CentOS-7 - Extras 449
updates/7/x86_64 CentOS-7 - Updates 2,146
repolist: 11,958

替换为阿里云的镜像源:

[root@ever ~]# rm -rf /etc/yum.repos.d/*
[root@ever ~]# wget http://mirrors.aliyun.com/repo/Centos-6.repo -O /etc/yum.repos.d/
CentOS-Base.repo
[root@ever ~]# wget http://mirrors.aliyun.com/repo/Centos-6.repo -P /etc/yum.repos.d
[root@ever ~]# yum clean all
[root@ever ~]# yum makecache

替换为163的镜像源:

[root@ever ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-
Base.repo.backup
[root@ever ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/
CentOS7-Base-163.repo

EPEL源:

EPEL(Extra Packages for Enterprise Linux)是基于Fredora的一个项目,为“红帽系”的操作系统提供

额外的软件包,是基础类的包中的扩展的包,适用于RHEL、CentOS系统,也是yum中必备的一个源。 建

议把https 替换为 http,解决速度慢的问题。

1、配置epel源

[root@ever ~]# yum -y install epel-release
或
[root@ever ~]# wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/

使用epel源

[root@localhost ~]# yum list nginx nagios zabbix puppet
nginx.x86_64 1.0.15-12.el6

yum 管理软件包

使用YUM管理RPM包

自动解决包的依赖关系

==查看可用仓库

[root@ever ~]# yum clean all //清空缓存及其它文件
[root@ever ~]# yum makecache //重建缓存
[root@ever ~]# yum repolist //查询可用的仓库

==安装软件包

从仓库安装

yum -y install httpd vsftpd *vnc

yum -y reinstall httpd

yum -y update httpd

yum -y install php

yum -y update

yum -y groupinstall mariadb

从本地安装

yum -y install /root/OpenIPMI-2.0.19-11.el7.x86_64.rpm

从相应的URL安装

yum -y install https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm //URL

==查询(从本地 rpm数据库 和 yum源 中查询)

yum list httpd
yum list *vnc*
yum list |grep vnc
yum list installed
yum info httpd
yum group list
yum grouplist
yum groupinfo mariadb

Mandatory 强制的、约束的

==卸载

[root@ever ~]# yum -y remove mysql-server
[root@ever ~]# yum -y groupremove mysql-server

扩展查询:

例1: 从包名和包描述中查找带有关键字chinese的包

yum list |grep chinese //只关注软件包的名

yum list |grep piny

yum search chinese //关注软件包的名 或 描述

cjkuni-ukai-fonts.noarch : Chinese Unicode TrueType font in Kai face
cjkuni-uming-fonts.noarch : Chinese Unicode TrueType font in Ming face

yum search "http server"

yum search "web server"

例2:查找/etc/vsftpd/vsftpd.conf属由哪个包提供?
[root@server0 ~]# yum provides /etc/vsftpd/vsftpd.conf
Loaded plugins: langpacks
vsftpd-3.0.2-9.el7.x86_64 : Very Secure Ftp Daemon
Repo : classroom_content_rhel7.0_x86_64_dvd_
Matched from:
Filename : /etc/vsftpd/vsftpd.conf
[root@server0 ~]# yum -y install vsftpd-3.0.2-9.el7.x86_64

例3:查找vsftpd.conf属由哪个包提供?
[root@ever ~]# yum provides *vsftpd/vsftpd.conf
[root@server0 ~]# yum provides */vsftpd.conf
[root@server0 ~]# yum provides */vsftpd.*

例4:查找命令gnuplot属由哪个包提供?
[root@server0 ~]# gnuplot
bash: gnuplot: command not found...
[root@server0 ~]#
[root@server0 ~]# yum provides gnuplot
Loaded plugins: langpacks
gnuplot-4.6.2-3.el7.x86_64 : A program for plotting mathematical expressions and data
Repo : classroom_content_rhel7.0_x86_64_dvd

例5:查找命令pip属由哪个包提供?
[root@server0 ~]# pip
bash: pip: command not found...
[root@server0 ~]# yum -y install pip

例6:查找命令vim属由哪个包提供?
[root@ever ~]# yum provides vim

rpm工具管理RPM包

使用RPM工具管理RPM包

需要手动解决包的依赖关系

需要考虑:

1、OS的版本;eg:centos6/7

2、系统架构:eg:i386/x86_64

3、依赖关系:eg:ntfs-3g-devel需要ntfs-3g

==安装

rpm -ivh local_path
rpm -ivh url_path
[root@ever ~]# rpm -ivh dos2unix-3.1-37.el6.x86_64.rpm  套件名
-i 安装
-v 显示过程
-h 显示百分比
[root@ever ntfs-3g]# rpm -ivh ntfs-3g-2013.1.13-5.el7.x86_64.rpm
error: Failed dependencies:
libc.so.6(GLIBC_2.14)(64bit) is needed by ntfs-3g-2:2013.1.13-5.el7.x86_64
[root@ever ~]# rpm -ivh ntfs-3g-2010.5.22-1.el6.x86_64.rpm 套件名
[root@ever ~]# rpm -Uvh ntfs-3g-2011.4.12-5.el6.x86_64.rpm 套件名
[root@ever ~]# rpm -ivh ftp://rpmfind.net/linux/atrpms/sl6-x86_64/atrpms/stable/
puppet-3.2.4-3.el6.noarch.rpm
[root@ever ~]# rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-
release-6-8.noarch.rpm
额外选项:
--nomd5 //忽略安全,不检验软件包的签名
--force //强制安装软件包
--nodeps //忽略依赖关系

==查询

(从本地的rpm数据库,rpm数据库中记录的是已经安装过的包的信息,需要使用包的全名ntfs-3g)
[root@ever ~]# rpm -q ntfs-3g //查询指定包是否安装
[root@ever ~]# rpm -qa |grep ntfs
[root@ever ~]# rpm -ql ntfs-3g //查询ntfs-3g安装的文件
[root@ever ~]# rpm -qf /usr/bin/ntfs-3g //查询该文件属于哪个rpm包
[root@ever ~]# rpm -qi ntfs-3g //查询包的information(信息)
[root@ever ~]# rpm -qc ntfs-3g //查询某个包安装的配置文件
[root@ever ~]# rpm -qd vsftpd //查安装的帮助文档

==卸载

[root@ever ~]# rpm -e ntfs-3g
[root@ever ~]# rpm -e ntfs-3g --nodeps
额外选项:
--nodeps //忽略依赖关系

源码包管理

源码包tarball

一、获得源码包途径

官方网站,可以获得最新的软件包

Apache: www.apache.org

Nginx: www.nginx.org

Tengine: tengine.taobao.org

Mysql:www.mysql.org

二、安装源码包

准备工作

  1. 编译环境如gcc、gcc-c++编译器、make
  2. 准备软件 nginx-1.4.4.tar.gz

部署Nginx

nginx

useradd www //为nginx进程准备运行的用户

tar xvf nginx-1.4.4.tar.gz -C /usr/local/src/

cd /usr/local/src/nginx-1.4.4

./configure --help

./configure \

--user=www \
--group=www \
--prefix=/usr/local/nginx \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_ssl_module \
--with-pcre

注释:

–user指定进程运行的用户

–with-http_stub_status_module启用状态模块功能

–with-http_sub_module启用子模块功能

–with-http_ssl_module启用加密模块

–with-pcre支持正则表达式

pcre:

支持正则表达式,地址重写rewrite

yum -y install pcre-devel

make //将源码包编译成二进制的形式

make install //安装编成的二进制的nginx

/usr/local/nginx/sbin/nginx //启动nginx服务器

firefox server_ip

三、详解源码安装四步曲:

tar xf 压缩文件

cd到解压后的目录中

./configure

a. 指定安装路径,例如--prefix=/usr/local/nginx
b. 启用或禁用某项功能, 例如 --with-http_ssl_module
c. 和其它软件关联,例如--with-pcre
d. 检查安装环境,例如是否有编译器gcc,是否满足软件的依赖需求
最终生成:Makefile

make clean //make不成功可能是缓存造成的,清理掉编译后产生的 *.o目标文件

make //按Makefile文件编译,可以使用-j 2指定两颗CPU编译

make install //安装,将相应的文件拷贝到指定的目录下

源码安装错误示例:

error1:
checking for PCRE JIT support ... found
checking for system md library ... not found
checking for system md5 library ... not found
checking for OpenSSL md5 crypto library ... not found
checking for sha1 in system md library ... not found
checking for OpenSSL sha1 crypto library ... not found
checking for zlib library ... not found
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib= option.
解决方案:

yum -y install zlib-devel

error2:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl= option.
解决方案:

yum -y install openssl-devel

error3:

./configure --prefix=/usr/local/pcre-8.31

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/root/pcre-8.31':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
解决方案:

LANG=C yum -y groupinstall "Development tools"

yum -y install gcc gcc-c++

error4:
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
解决方案:

yum -y install pcre-devel

扩展知识:

半源码半rpm包的安装

描述:后缀名为src.rpm,即源码包装了一半,直接打成了rpm包,这时需要借助于rpm-

build重新构建工具将剩下的源码做成rpm包

[root@localhost Packages]# rpm -ivh rpm-build-4.8.0-32.el6.x86_64.rpm
[root@localhost ~]# rpm -ivh lftp-3.5.1-2.fc6.src.rpm
[root@localhost ~]# ls -d /root/rpmbuild/
/root/rpmbuild/
[root@localhost ~]# cd /root/rpmbuild/
[root@localhost rpmbuild]# ls
SOURCES SPECS
源代码 由源代码编译成rpm的规则文件
[root@localhost SPECS]# cd /root/rpmbuild/SPECS
[root@localhost SPECS]# rpmbuild -bb lftp.spec //重新构建lftp的包
有依赖把依赖给装上
[root@localhost x86_64]# cd /root/rpmbuild/RPMS/x86_64
[root@localhost x86_64]# rpm -ivh lftp-3.5.1-2.el6.x86_64.rpm

error: Failed dependencies:
perl(String::CRC32) is needed by lftp-3.5.1-2.el6.x86_64
perl-String-CRC32 is needed by lftp-3.5.1-2.el6.x86_64
[root@localhost x86_64]# yum install perl-String-CRC32
[root@localhost x86_64]# rpm -ivh lftp-3.5.1-2.el6.x86_64.rpm
[root@localhost x86_64]# lftp 172.16.140.1

你可能感兴趣的:(Linux)