Linux软件安装

0

本文涉及:

  • 软件包管理简介

  • rpm命令管理

  • yum在线管理

  • 源码包管理

  • 脚本安装

软件包管理

软件包分类

  • 源码包
  • 二进制包(rpm包,系统默认包)

源码包

源码包的优点:

  • 开源
  • 自由选择功能
  • 编译安装,系统稳定效率高(Windows就是反例,系统越用越大)
  • 卸载方便

源码包的缺点:

  • 安装过程步骤较多,尤其是安装大型软件集合时(LAMP环境搭建时)
  • 编译时间长,比二进制安装时间久
  • 编译一旦出错,出问题新手很难解决

RPM包

二进制包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包安装、升级、查询和卸载
  • 安装速度快于源码包

二级制包的缺点:

  • 经过编译,源码不可见
  • 功能选择不如源码包灵活
  • 依赖性

脚本安装包(本质不是一种分类)

将复杂的软件包安装过程写成shell脚本,初学者可以执行脚本实现一键安装。但是实际还是源码包或者二进制包

  • 优点:安装简单
  • 缺点:丧失自定义

rpm命令管理

rpm包命名规则

rpm包的来源

rpm包在系统光盘中,虚拟机中连接光驱,找到系统光盘,挂载光盘。

1

1
2
3
4
5
6
#创建挂载点
mkdir /mnt/cdrom
# 挂载光盘
mount /dev/sr0 /mnt/cdrom
#进入光盘rpm包目录
cd /mnt/cdrom/Packages/

rpm包命名原则

  • httpd-2.2.15-15.el6.centos.1.i686.rpm
    • httpd软件包名
    • 2.2.15软件版本
    • 15软件发布的次数
    • el6.cento适合的软件平台
    • i686适合的硬件平台
    • rpm包扩展名

包全名和包名是有区别的,httpd-2.2.15-15.el6.centos.1.i686.rpm是包全名,httpd是包名。

如果操作的是没有安装的包,要使用全面,为了让操作系统找到包,还要使用绝对路径。

操作安装的软件包时,使用包名就可以,系统搜索/var/lib/rpm/中的数据库。

rpm包依赖性

  • 树形依赖:a->b->c,容易解决
  • 环形依赖:a->b->c->a,将a、b、c放到一条命令中
  • 模块依赖:也叫库依赖,解决方法查询网站:www.rpmfind.net

使用yum在线安装,可以解决依赖问题。

安装命令

rpm安装

  • rpm -ivh 包全名
  • 选项:
    • -i (install) 安装
    • -v (verbose) 显示详细信息
    • -h (hash) 显示进度
    • –nodeps 不检测依赖性(真实使用时没有太大用)

升级和卸载

升级命令

  • rpm -Uvh 包全名
  • 选项:
    • -U (upgrade) 升级
    • -v (verbose) 显示详细信息
    • -h (hash) 显示进度

这里使用的是包全名,而不是包名。原因是,对于操作系统,升级后的包也是完全陌生的包。

卸载命令

  • rpm -e 包名
  • 选项:
    • -e (erase) 卸载
    • –nodeps不检查依赖性

卸载时也会有依赖性,不检查依赖性可以卸载了选定的包,但是可能会出现其他包使用不正常。

rpm包查询

rpm包管理实际上比较麻烦,所以有了yum在线管理,但是,yum不能进行查询和校验。

查询是否安装

  • rpm -q 包名

    查询是否安装

    • -q (query) 查询
  • rpm -qa

    查询所有安装的rpm包

    • -a (all) 所有

查询软件包详细信息

  • rpm -qi 包名

  • 选项:

    • -q (query) 查询

    • -i (information)查询软件信息

    • -p (package)查询未安装包信息

查询包中文件安装的位置

  • rpm -ql 包名
  • 选项:
    • -q (query)查询
    • -l (list)列表
    • -p (package)查询未安装包的信息

rpm包默认安装位置:

2

安装位置有包的作者决定的,所以可以查询未安装的包的打算安装位置。

查询系统文件属于哪个rpm包

  • rpm -qf 系统文件名
  • 选项:
    • -f (file)查询系统文件属于哪个软件包

查询软件包的依赖

  • rpm -qR 包名
  • 选项:
    • -R (requires)查询依赖性
    • -p (package)查询未安装包的信息

rpm包校验

校验命令

  • rpm -V 已安装的包名
  • 选项:
    • -V (verify)校验指定rpm包中的文件
  • 验证内容中的8个信息具体内容:
    • S 文件大小是否改变
    • M 文件的类型或文件的权限(rwx)是否被改变
    • 5 文件MD5校验和是否改变
    • D 设备的主从代码是否改变
    • L 文件路径是否改变
    • U 文件的属主是否改变
    • G 文件的属组是否改变
    • T 文件的修改时间是否改变
  • 文件类型:
    • c (config file)配置文件
    • d (documentation)普通文件
    • g (ghost file)“鬼”文件,很少见,就是该文件不应该被rpm包所包含(可能是人为导致的,需要仔细检查)
    • L (license file)授权文件
    • r (read me)描述文件

rpm包中文件提取

  • rpm2cpio 包全名 | cpio -idv .文件绝对地址

    • rpm2cpio 将rpm包装换位cpio格式的命令

    • cpio 一个标准工具,用于创建软件档案文件和从档案文件中提取文件

  • cpio 选项 < [文件 | 设备]

  • 选项:

    • i (copy-in)模式,还原
    • d 还原时自动新建目录
    • v 显示还原过程

造成误删ls命令的假象,修复文件丢失。

1
2
3
4
5
6
7
8
rpm -qf /bin/ls
#查询ls命令属于哪个包
mv /bin/ls /tmp/
#造成误删ls命令的假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
#提取rpm包中ls命令到当前目录下的/bin/ls下,注意使用绝对路径,还要注意当前目录位置
cp /root/bin/ls /bin/
#把ls命令复制到/bin/目录,修复文件丢失

yum在线管理

rpm包安装的方式存在一个致命的缺点,就是解决依赖性问题时,很麻烦。对此Linux给出yum在线安装,可以自动解决依赖性问题。

Redhat认为,yum是售后服务,需要付费。centos的yum免费。

yum源文件

3

默认四个文件中,base文件生效,其他文件不生效。

  • vi /etc/yum.repos.d/CentOS-Base.repo
    • [base] 容器名称,一定要放在[]中,例如[base]、[update],每个容器都包含后面几个字段
    • name 容器说明, 可以随便写
    • mirrorlist 镜像站点,可以注释掉
    • baseurl yum源服务器的地址,默认是centos官方的yum源服务器,是可以使用的,也可以换源
    • enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0是不生效
    • gpgcheck 如果是1是rpm的数字证书生效,如果是0则不生效,用于检验下载的rpm包,打开更安全
    • gpgkey 数字证书的公钥文件保存位置,不用修改

光盘搭建yum源

yum默认是使用网络进行安装,但有些环境不能使用网络,如何使用yum进行包管理呢?可以使用光盘搭建本地yum。

挂载光盘

1
2
3
4
mkdir /mnt/ckrom
#建立挂载点
mount /dev/sr0 /mnt/cdrom/
#挂载光盘 dev/目录中都是设备,mount命令后跟光驱的设备名

使网络yum源失效

1
2
3
4
cd /etc/yum.repos.d/
#进入yum源目录
mv CentOS-Base.repo CectOS-Base.repo.bak #备份
#修改yum源文件,使其失效

使光盘yum源生效

  • vim CentOS-Media.repo
    • [c6-media]
    • name=CentOS-$releasever - Media
    • baseurl=file:///mnt/cdrom #地址为光盘挂载目录
    • # file:///media/cdrom/ #注释
    • # file:///mnt/cdrecorder/ #注释两个不存在的地址
    • gpgcheck=1
    • enabled=1 #让这个yum源文件生效
    • gpgkey=file:///etc/pki/rpm-gpg/RPM-KEY-CentOS-6 #这里仅为示例,软件版本不同,地址不同

yum命令

常用yum命令

查询

  • yum list

查询所有可用的软件包列表

  • yum search 关键字

搜索服务器上所有和关键字相关的包

安装

  • yum -y install 包名
  • 选项:
    • install 安装
    • y 自动回答yes

例如:

1
yum -y install gcc

yum可以使用包名安装软件包,因为yum会去服务器上找,不使用全名也能找到。

升级

  • yum -y update 包名
  • 选项:
    • update 升级
    • y 自动回复yes

关于要不要对服务器升级软件:

​ 能不升级就不升级!因为升级可能意味着重启服务,对于需要长期稳定运行的服务来说,不是好的选择。所以不是新版本解决了致命的问题,可以不用升级。

后面不跟包名会升级系统中的所有的软件包,也会升级Linux内核,需要大量的时间。对内核的更新,新的内核需要配置,可能会导致系统崩溃。如果是远程服务器,配置可能不够及时,所以不建议这样用。所以这条命令是完全没有必要的!!!

卸载

  • yum -y remove包名
  • 选项:
    • remove 卸载
    • y 自动回复yes

建议:服务器使用最小化安装,用什么软件装什么软件!尽量不卸载。

卸载也会有依赖性,yum会把依赖的包全部卸载,但无法保证系统不会依赖这些包!卸载两三个包,可能会导致系统崩溃。

不建议使用yum卸载软件包!!!

yum软件组管理命令

  • yum grouplist

    列出所有的软件组列表

  • yum groupinstall 软件组名

    安装指定软件组,组名可以由grouplist查询

  • yum groupremove 软件组名

    卸载指定软件组

源码包管理

源码包和rpm包的区别

区别

安装前的区别:概念上的区别

安装后的区别:安装位置不同

rpm包安装过程

安装在默认位置一般由作者确定,但一般在以下目录:

rpm包默认安装路径
/etc/ 配置文件安装位置
/usr/bin/ 可执行的命令安装目录
/usr/lib/ 程序所使用的函数库保存位置
/usr/share/doc/ 基本的软件使用手册保存位置
/usr/share/man/ 帮助文件保存位置

源码包安装位置

安装在指定位置中,一般为

/usr/local/软件名/

安装位置不同带来的影响

rpm包安装的服务可以使用系统服务命令(service)来管理,例如rpm包安装的Apache的启动方法:

  • /etc/rc.d/init.d/httpd start
  • service httpd start #Redhat特有命令,不是Linux标志命令,但是源码包不可以,因为它搜索特定位置

而源码包安装的服务则不能被服务管理命令管理,因为没有安装在默认路径中,所以只能用绝对路径管理,如:

  • /usr/local/apache2/bin/apachectl start

源码包安装过程

安装准备

安装c语言编译器,用于编译源码

下载源码包(从官网或者国内镜像下载)

注意事项

源码包保存位置:/usr/local/src/

软件安装位置:/usr/local/

如何确定安装过程报错:

  • 安装停止
  • 出现error、warning或no的提示

源码包安装过程

  • 下载源码包
  • 解压缩
  • 进入解压缩目录(必须执行)
  • ./configure 软件配置与检查
    • 定义需要的功能选项
    • 检测系统环境是否符合安装要求
    • 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑

4

  • make编译
    • make clean 清除编译缓存文件,从头再来
  • make install 编译安装

脚本安装包

准备工作

  • 关闭rpm包安装的httpd和mysql
  • 保证yum源正常使用
  • 关闭SELinux和防火墙

SELinux是增强安全组件,vim /etc/selinux/config,使得SELINUX=disabled,重启Linux。

下载一键安装包

网址(下载 - LNMP一键安装包)

LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian/Deepin/Alibaba/Amazon/Mint/Oracle/Rocky/Alma/Kali/UOS/银河麒麟/openEuler/Anolis OS Linux VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。

脚本一键安装

wget http://soft.vpser.net/lnmp/lnmp1.9.tar.gz -cO lnmp1.9.tar.gz && tar zxf lnmp1.9.tar.gz && cd lnmp1.9 && ./install.sh lnmp

执行之后结果如下:

5

install.sh脚本分析

  • 所谓的一键安装包,实际上还是安装的源码包或rpm包,只是把安装过程写成了脚本,便于使用
  • 优点:简单、快速、方便
  • 缺点:
    • 不能定义安装软件的版本
    • 不能定义所需要的软件功能
    • 源码包优势丧失
-------------本文结束感谢您的阅读-------------