7.1 软件包安装和卸载
7.1 安装软件包的三种方法
rpm工具
rpm(Redhat Package Manager)RPM软件包管理器,是以一种数据库记录的方式来将我们所需要的套件安装到Linux主机的一套管理程序。rpm包是预先在Linux机器上编译好并打包好的文件,安装起来非常快捷。但是有一个缺点:安装环境必须与编译时的一致或相当;包与包之间存在着相互依赖的情况,安装或卸载包时需要先把依赖的包安装/卸载,如果依赖的包时系统所必须的,那就不能卸载这个包。
yum工具
yum命令是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。
源码包
Linux软件的源代码分发是指提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制码并进行安装。其优点是配置灵活,可以随意去掉或保留某些功能/模块,适应多种硬件/操作系统平台及编译环境;缺点是难度较大。
7.2-7.3 rpm工具
rpm包介绍(准备工作)
挂载系统安装盘镜像(挂载到一个空目录,此处/mnt/目录未使用,所以直接挂载到/mnt/目录下)
[[email protected] ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 28G 1.3G 27G 5% /
devtmpfs 483M 0 483M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 99M 0 99M 0% /run/user/0
[[email protected] ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[[email protected] mnt]# ls
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[[email protected] Packages]# ls
yum-plugin-changelog-1.1.31-40.el7.noarch.rpm
yum-plugin-fastestmirror-1.1.31-40.el7.noarch.rpm
yum-plugin-tmprepo-1.1.31-40.el7.noarch.rpm
yum-plugin-verify-1.1.31-40.el7.noarch.rpm
yum-plugin-versionlock-1.1.31-40.el7.noarch.rpm
……
(rpm包格式:包名、版本号、发布版本号、平台)
rpm包存放在Packages该文件下!
rpm工具用法
安装rpm包
- 语法: rpm [options] [参数]
- Options:
-i:=install,安装
-v:可视化
-h:显示安装进度
在安装一个rpm包时常用附带选项:
--force:强制安装--nodeps:=no dependent 无依赖安装(忽视与其他包之间的依赖关系)
实例
- 安装一个rpm包(无依赖包)
[[email protected] Packages]# rpm -ivh x86info-1.30-6.el7.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:x86info-1:1.30-6.el7 ################################# [100%]
- 安装一个rpm包(有依赖包)
[[email protected] Packages]# rpm -ivh yp-tools-2.14-3.el7.x86_64.rpm
错误:依赖检测失败:
ypbind 被 yp-tools-2.14-3.el7.x86_64 需要
## 即,两个包之间存在依赖关系
## 解决办法:
①:
[[email protected] Packages]# rpm -ivh yp-tools-2.14-3.el7.x86_64.rpm yp-tools-2.14-3.el7.x86_64
②:
[[email protected] Packages]# rpm -ivh --force yp-tools-2.14-3.el7.x86_64.rpm
(添加--force或--nodeps选项即可安装)
说明: 安装有依赖关系的包时,可以先安装其所依赖的包再安装目标包(同时安装存在依赖关系的包),或者使用--force或--nodeps选项进行强行安装(不建议使用)。
升级rpm包
- 语法: rpm [-U] [包名]
[[email protected] Packages]# rpm -Uvh x86info-1.30-6.el7.x86_64.rpm
Preparing... ################################# [100%]
package x86info-1:1.30-6.el7.x86_64 is already installed
说明: 如果升级一个已经安装的最新版本的包,执行该命令后无任何操作。
卸载一个rpm包
- 语法: rpm [-e] [包名]
[[email protected] Packages]# rpm -e x86info-1.30-6.el7.x86_64.rpm
error: package x86info-1.30-6.el7.x86_64.rpm is not installed
[[email protected] Packages]# rpm -e x86info
注: 卸载时直接跟报名,无需跟该包的信息;当包之间存在依赖关系时也需要先卸载其依赖包。
查询rpm包
查询已安装的包
- 语法:
rpm [-q] [包名] 查询指定包
rpm [-qa] 查询所有已安装包
实例:
[[email protected] Packages]# rpm -q kmod
kmod-20-9.el7.x86_64
#########################################
[[email protected] Packages]# rpm -qa |head -5
trousers-0.3.13-1.el7.x86_64
filesystem-3.2-21.el7.x86_64
net-tools-2.0-0.17.20131004git.el7.x86_64
bind-license-9.9.4-37.el7.noarch
fxload-2002_04_11-16.el7.x86_64
查询已安装包的相关信息
- 语法: rpm [-qi] [包名]
i=information
[[email protected] Packages]# rpm -qi filesystem
Name : filesystem
Version : 3.2
Release : 21.el7
Architecture: x86_64
Install Date: Mon May 22 01:19:49 2017
Group : System Environment/Base
Size : 0
……
查询某包所安装的文件
- 语法: rpm [-ql] [包名]
l=list
[[email protected] Packages]# rpm -ql vim-enhanced
/etc/profile.d/vim.csh
/etc/profile.d/vim.sh
/usr/bin/rvim
/usr/bin/vim
/usr/bin/vimdiff
/usr/bin/vimtutor
查看某文件的安装包
- 语法: rpm [-qf] [文件绝对路径]
[[email protected] Packages]# rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-1.el7_3.1.x86_64
即,通过其绝对路径查询到其安装包,当不知道其绝对路径时,使用which命令查询。
反引号命令
反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。即,在命令行上把Linux命令放在反引号中,这个命令会首先被执行,然后将其结果作为为该命令行的一个参数。
[[email protected] Packages]# rpm -qf `which cd`
bash-4.2.46-20.el7_2.x86_64
说明: 先执行“which cd”命令,其次将“which cd”的结果作为“rpm -qf”的参数执行该命令。
7.4 yum工具用法
列出所有rpm包
- 语法: yum list
[[email protected] Packages]# yum list
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* extras: mirrors.aliyun.com
* updates: mirrors.tuna.tsinghua.edu.cn
Installed Packages
NetworkManager-libnm.x86_64 1:1.4.0-12.el7 @anaconda
NetworkManager-team.x86_64 1:1.4.0-12.el7 @anaconda
zsh.x86_64 5.0.2-25.el7_3.1 updates
zsh-html.x86_64 5.0.2-25.el7_3.1 updates
zziplib.i686 0.13.62-5.el7 base
zziplib.x86_64 0.13.62-5.el7 base
……
Exiting on Broken Pipe
说明: 第一列是包名,第二列是版本号,第三列是库,库所在位置有“@”表示已安装;“updates”表示已安装,有新版本,需要升级;其他的表示可安装但还未安装的rpm包。
- yum配置文件
[[email protected] Packages]# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
- 配置文件base的信息
[[email protected] Packages]# cat /etc/yum.repos.d/CentOS-Base.repo
# CentOS-Base.repo
#
……
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
……
说明: 该文件下有rpm包所在库base的镜像地址信息!
搜索rpm包
- 语法: yum search [关键词]
[[email protected]ei Packages]# yum search vim
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* extras: mirrors.aliyun.com
* updates: mirrors.tuna.tsinghua.edu.cn
====================================== N/S matched: vim =============================
golang-vim.noarch : Vim plugins for Go
protobuf-vim.x86_64 : Vim syntax highlighting
vim-minimal.x86_64 : A minimal version of the VIM editor
Name and summary matches only, use "search all" for everything.
说明: 使用该命令搜索时会列出所有包含‘vim’(关键词)的信息,不精确,为了只搜索相关rpm包,可用如下方法:
[[email protected] Packages]# yum list |grep vim
Failed to set locale, defaulting to C
vim-common.x86_64 2:7.4.160-1.el7_3.1 @updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 @updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 @updates
vim-minimal.x86_64 2:7.4.160-1.el7 @anaconda
说明: grep表示过滤。
列出rpm包组
- 语法: yum grouplist
[[email protected] Packages]# yum grouplist
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirrors.btte.net
* extras: mirrors.aliyun.com
* updates: mirrors.tuna.tsinghua.edu.cn
Available Environment Groups:
Minimal Install
Compute Node
……
Available Groups:
Compatibility Libraries
Console Internet Tools
……
Done
安装rpm包
- 语法: yum install [-y] [包名]
- 说明: 如果不加‘-y’选项,则会以与用户交互的方式安装。首先是列出需要安装的rpm包,然后会问用户是否需要安装,输入‘y’则安装,输入‘n’则不安装,这样太麻烦,所以直接加上‘-y’选项,省略与用户之间的交互。
安装rpm包组
语法: yum groupinstall [-y] [包的组名]
如果不知道组名,可用yum grouplist查看(注:进行安装时只能用英文名)。
卸载rpm包
- 语法: yum remove [-y] [包名]
- 说明: ‘-y’选项同install的用法,需要注意的是,在使用该命令进行卸载时会将目标文件所依赖的所有包同时删除,所以要谨慎使用!
升级rpm包
- 语法: yum update [-y] [包名]
- 说明: 如果不加包名,则会升级系统内所有包以及系统本身(慎用,一般只在刚安装完系统时使用)。
yum provides(该命令的作用是通过已知命令名称来搜索其rpm包名。)
用法:
[[email protected] Packages]# yum provides “/*/vim”
说明: 因为该命令位置不确定,所以进行搜索时使用‘*’(通配符)来代表其路径。
7.5 yum搭建本地仓库
有时候Linux系统无法联网,此时无法使用网上的yum源,需要我们利用Linux系统光盘制作一个yum源。
步骤
挂载光盘——删除/etc/yum.repos.d/目录所有repo文件——创建新文件dvd.repo——清除原有缓存‘yum clean all’。
[[email protected] ~]# cp -r /etc/yum.repos.d /etc/yum.repos.d.bak
备份原.repo文件
[[email protected] ~]# cd /etc/yum.repos.d 切换目录
[[email protected] yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Media.repo CentOS-Vault.repo
[[email protected] yum.repos.d]# rm -rf ./*
删除原有repo文件
[[email protected] yum.repos.d]# vim dvd.repo
“
[dvd]
name=install dvd
baseurl=file:///mnt
enable=1
gpgcheck=0
”
此部分内容除baseurl目录根据个人实际操作更改外,其余内容固定。
[[email protected] yum.repos.d]# yum clean all
清除系统原有缓存
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Cleaning repos: dvd
Cleaning up everything
Cleaning up list of fastest mirrors
[[email protected] ~]# yum list
……
Available Packages 还未安装的可安装rpm包的库都变成dvd
ypserv.x86_64 2.31-8.el7 dvd
yum-langpacks.noarch 0.4.2-7.el7 dvd
yum-plugin-aliases.noarch 1.1.31-40.el7 dvd
yum-plugin-changelog.noarch 1.1.31-40.el7 dvd
yum-plugin-tmprepo.noarch 1.1.31-40.el7 dvd
……
配置完成后便可直接使用yum安装所需要的rpm包。如果不想使用本地yum源,需要删除/etc/yum.repos.d/dvd.repo文件,然后恢复原来的配置文件。
扩展1:yum保留已经安装过的包
可以设置使yum保留已经下载的rpm包,供以后升级或重新安装时使用。
修改/etc/yum/conf即可:
[main]
cachedir=/home/soft1/yumcache
keepcache=1
debuglevel=2
cachedir是放置下载的包的地方,可以修改成自己想放置的位置。
keepcache为1时表示保存已经下载的rpm包。
扩展2:yum局域网软件源搭建
搭建Apache服务器或ftp服务器
yum安装或二进制包安装.
准备RPM包
把CentOS的DVD1和DVD2.iso都下载下来,把DVD1.iso里的所有内容解压出来,放到/var/www/html/centos-6目录下,然后把DVD2.iso解压出来的Packages目录下的rpm包复制到/var/html/centos-6/Packages目录下,这样/var/html/centos-6/Packages里面就有了6000多个rpm包。
创建yum仓库
准备createrepo:yum -y install createrepo
创建repository:createrepo /var/www/html/centos-6/
创建完成之后,会在/var/www/html/centos-6/repodata下生成一些文件。
使用软件源
在其他centos机器上试试软件源能不能用。
- 首先修改机器上软件源配置文件:
CentOS-Base.repo文件修改之后如下:
保存之后,就可以使用局域网的软件源了:# yum update
7.6 yum更换国内源
- 恢复系统默认yum源配置:
[[email protected] Packages]# cd /etc/yum.repos.d
[[email protected] yum.repos.d]# ls
dvd.repo
[[email protected] yum.repos.d]# rm -f dvd.repo
[[email protected] yum.repos.d]# ls
[[email protected] yum.repos.d]# cp ../yum.repos.d.bak/* .
[[email protected] yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
- 自定义yum源:
[[email protected] yum.repos.d]# rm -f CentOS-Base.repo
先删除默认yum源,然后使用wget命令建立新yum源:
[[email protected] yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
-bash: wget: 未找到命令
此时wget命令未安装,同时删除了yum源文件,无法安装wget包。
所以用下面的方法:“curl命令”
[[email protected] yum.repos.d]# curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1572 100 1572 0 0 8959 0 --:--:-- --:--:-- --:--:-- 8982
[[email protected] yum.repos.d]# ls
CentOS7-Base-163.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
说明: 执行完curl命令后,原有yum源文件CentOS-Base.repo被替换成CentOS7-Base-163.repo。查看该yum源文件:
[[email protected] yum.repos.d]# vim CentOS7-Base-163.repo
#
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#
[base]
name=CentOS-$releasever - Base - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates - 163.com
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
"CentOS7-Base-163.repo" 41L, 1572C
其镜像文件地址更换为:“baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/”。
注: 该过程中使用的yum源需要事先下载。
7.7 yum下载rpm包
安装扩展源epel
安装一个扩展源文件(epel-release)即可:
[[email protected] yum.repos.d]# ls
CentOS7-Base-163.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo
[[email protected] yum.repos.d]# yum install -y epel-release
……
已安装:
epel-release.noarch 0:7-9
完毕!
[[email protected] yum.repos.d]# ls
CentOS7-Base-163.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo epel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo epel-testing.repo
安装完成后,yum.repos.d/下增加“epel.repo”、“epel-testing.repo”两个文件:
[[email protected] yum.repos.d]# cat epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
……
查看:
[[email protected] yum.repos.d]# yum list
……
zulucrypt-doc.noarch 5.0.1-1.el7 epel
zulucrypt-libs.x86_64 5.0.1-1.el7 epel
zvbi.x86_64 0.2.35-1.el7 epel ……
增加了很多来自epel库的rpm包。
7.8下载rpm包
下载
命令:yum install -y [包名] --downloadonly
[[email protected] yum.repos.d]# yum install -y zsh --downloadonly
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
……
zsh-5.0.2-25.el7_3.1.x86_64.rpm | 2.4 MB 00:00:02
exiting because "Download Only" specified
[[email protected] yum.repos.d]# rpm -q zsh
未安装软件包 zsh
即,该命令的含义就是只下载不安装。
下载的包默认保存位置为:
[[email protected] yum.repos.d]# ls /var/cache/yum/x86_64/7/updates/packages
zsh-5.0.2-25.el7_3.1.x86_64.rpm
自定义下载目录
命令:
yum install -y [包名] --downloadonly --downloaddir=/tmp/(自定义目录)
[[email protected] yum.repos.d]# yum install -y zsh --downloadonly --downloaddir=/tmp/
[[email protected] yum.repos.d]# ls /tmp/
zsh-5.0.2-25.el7_3.1.x86_64.rpm
下载一个已经安装过的包:
[[email protected] yum.repos.d]# yum install -y vim-enhanced --downloadonly --downloaddir=/tmp/
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirror01.idc.hinet.net
软件包 2:vim-enhanced-7.4.160-1.el7_3.1.x86_64 已安装并且是最新版本
无须任何处理
[[email protected] yum.repos.d]# yum reinstall -y vim-enhanced --downloadonly --downloaddir=/tmp/
已加载插件:fastestmirror
……
[[email protected] yum.repos.d]# ls /tmp/
vim-enhanced-7.4.160-1.el7_3.1.x86_64.rpm
zsh-5.0.2-25.el7_3.1.x86_64.rpm
说明: 当下一个已经安装过的包时系统不会执行任何操作,此时可以使用“reinstall”来下该包。
7.8-7.9 源码包安装
先下载一个源码包!
注: 今后所有源码包放到目录“/usr/local/src/”!!!
[[email protected] src]# wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.2.32.tar.gz
下载Apache!该地址来自于“阿铭码市”。
下载完后解压该文件:
[[email protected] src]# tar zxvf httpd-2.2.32.tar.gz
[[email protected] src]# ls
httpd-2.2.32 httpd-2.2.32.tar.gz
查看文件httpd-2.2.32的内容:
[[email protected] src]# cd httpd-2.2.32
[[email protected] httpd-2.2.32]# ls
ABOUT_APACHE CHANGES httpd.dsp libhttpd.dep NOTICE server
acinclude.m4 config.layout httpd.mak libhttpd.dsp NWGNUmakefile srclib
Apache.dsw configure httpd.spec libhttpd.mak os support
build configure.in include LICENSE README test
BuildAll.dsp docs INSTALL Makefile.in README.platforms VERSIONING
BuildBin.dsp emacs-style InstallBin.dsp Makefile.win README-win32.txt
buildconf httpd.dep LAYOUT modules ROADMAP
安装Apache:
①
[[email protected] httpd-2.2.32]# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
……
checking for chosen layout... apr
checking for gcc... no
checking for cc... no
当某命令运行结束后,使用"echo $?"检验其是否正确:
[[email protected] httpd-2.2.32]# echo $?
1
当该值为0时表示上一条命令正确,如果值为1则错误。
此处值为1,即上面命令错误,查看其安装过程发现“checking for gcc... no”——表示“gcc”编译器不存在,所以需要先安装gcc编译器:
[[email protected] httpd-2.2.32]# yum install -y gcc
…………
完毕!
[[email protected] httpd-2.2.32]# ./configure --prefix=/usr/local/apache2
再次安装。
[[email protected] httpd-2.2.32]# echo $?
0
检测,正确。
②
[[email protected] httpd-2.2.32]# make 编译!
……
[[email protected] httpd-2.2.32]# echo $?
0
③
[[email protected] httpd-2.2.32]# make install
……
[[email protected] httpd-2.2.32]# echo $?
0
每次命令执行完后用“echo $?”进行检测,确保其正确。
安装完成!
查看其安装目录的内容:
[[email protected] httpd-2.2.32]# ls /usr/local/apache2/
bin build cgi-bin conf error htdocs icons include lib logs man manual modules
注: 下载源码包要到官方网站或可信任站点——安全!
原文地址:http://blog.51cto.com/13530586/2121903