软件安装

简介

概念详解

# 概念详解
- 开放源码: 程序码, 写给人类看的程序语言, 但机器并不认识, 所以无法执行;
- 编译器: 将程序码转译成为机器看的懂得语言, 就类似翻译者的角色;
- 可可执行文件: 经过编译器变成二进制程序后, 机器看的懂所以可以执行的文件;
- make: 作用是开始进行源代码编译;
- configure: 一般用来生成 Makefile, 为下一步的编译做准备;
- Tarball软件: 所谓的 Tarball 文件, 其实就是将软件的所有源代码文件先以 tar 打包, 然后再以压缩技术来压缩, 通常最常见的就是以 gzip 来压缩;
- Tarball: linux系统下最方便的打包工具, 以tar这个指令来打包与压缩的档案;
- RPM: 全名是"RedHat Package Manager"简称则为 RPM; 通过预先编译并打包成为 RPM 文件格式后, 再安装软件的一种方式;
- SRPM: SRPM 所提供的套件内容并没有经过编译, 提供的是原始码;其中SRPM中包含了所有 RPM 档案所提供的数据;
- YUM: Yum是一个交互式的、基于RPM的包管理器; 它可以自动执行系统更新, 包括依赖关系基于"仓库"元数据的分析和废弃处理;

# 常用相关命令
- file: 用于识别文件的类型, 也可以用来辨别一些内容的编码格式, 通过分析文件头部信息中的标识来显示文件类;
- type: 用来显示指定命令的类型, 判断给出的指令是内部指令还是外部指令;

# 软件安装方式
##Tarball方式
- 取得原始文件: 将 tarball 文件在 /usr/local/src 目录下解压缩;
- 取得步骤流程: 进入新创建的目录下面,去查阅 INSTALL 与 README 等相关文件内容  (很重要的步骤) ;
- 相依属性软件安装: 根据 INSTALL/README 的内容察看并安装好一些相依的软件  (非必要) ;
- 创建 makefile: 以自动侦测程序  (configure 或 config)  侦测作业环境,并创建 Makefile 这个文件;
- 编译: 以 make 这个程序并使用该目录下的 Makefile 做为他的参数配置文件,来进行 make  (编译或其他)  的动作;
- 安装: 以 make 这个程序,并以 Makefile 这个参数配置文件,依据 install 这个标的  (target)  的指定来安装到正确的路径;

##RPM方式
- 将 RPM 由厂商的网页下载下来; 
- 解决 RPM 包管理依赖;
- 通过 RPM -ivh 安装软件;

##YUM方式
- 配置网络(网络可通);
- 修改数据源;
- 通过 yum install命令安装软件;

目前在 Linux 界软件安装方式最常见的有两种,分别是:

  • dpkg: 这个机制最早是由 Debian Linux 社群所开发出来的, 通过 dpkg 的机制, Debian 提供的软件就能够简单的安装起来, 同时还能提供安装后的软件信息, 实在非常不错; 只要是衍生于 Debian 的其他 Linux distributions 大多使用 dpkg 这个机制来管理软件的, 包括 B2D, Ubuntu 等等;
  • RPM: 这个机制最早是由 Red Hat 这家公司开发出来的, 后来实在很好用, 因此很多 distributions 就使用这个机制来作为软件安装的管理方式; 包括 Fedora, CentOS, SuSE 等等知名的开发商都是用这咚咚;

RPM 与 SRPM区别:

# 查看系统的文件
$ file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=9223530b1aa05d3dbea7e72738b28b1e9d82fbad, stripped
# 是 binary 且是可以执行的时候, 就会显示可执行文件类别 (ELF 64-bit LSB executable), 同时会说明是否使用动态函数库 (shared libs);

# 查看系统提供的文件
$ file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable
# 如果是一般的 script , 就会显示出 text executables 之类的字样;

命名规范

Linux安装包命名规范,通过 rp-pppoe-3.11-5.el7.x86_64.rpm 查看文件的意义:

  • rp-pppoe: 软件名称;
  • 3.11: 软件版本信息;
  • 5: 释出版本次数;
  • el7.x86_64: 操作硬件平台;
  • rpm: 扩展名;

Tarball&RPM&YUM

Tarball

# Tarball 安装流程
- 将 Tarball 由厂商的网页下载下来; 
- 将 Tarball 解开,产生很多的源代码文件; 
- 开始以 gcc 进行源代码的编译 (会产生目标文件 object files); 
- 然后以 gcc 进行函数库、主、副程序的链接,以形成主要的 binary file; 
- 将上述的 binary file 以及相关的配置文件安装至自己的主机上面;

# Tarball 安装常用命令
- ./configure: 建立 Makefile 文件;
- make clean: 讀取 Makefile 中關於 clean 的工作;
- make:  會依據 Makefile 當中的預設工作進行編譯的行为;
- make install: 會依據 Makefile 這個文件裡面關於 install 的項目;

# Tarball 默认安装路径
- /usr/local/etc: 配置文件
- /usr/local/lib: 函数库
- /usr/local/bin: 可执行文件
- /usr/local/man: 线上说明文档, 主要是可通过 man 命令查看命令使用文档

# 建议
- 最好将 tarball 的原始数据解压缩到 /usr/local/src 当中;
- 安装时, 最好安装到 /usr/local 这个默认路径下;
- 考虑未来的卸载过程, 最好可以将每个软件单独的安装在 /usr/local 下面;
- 为安装到单独目录的软件之 man page 加入 man path 搜寻;
  • 安装 nginx 依赖
$ yum install -y wget gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 安装
  • 下载&解压 nginx 源码包
# 下载 nginx 源码包
$ wget http://nginx.org/download/nginx-1.16.1.tar.gz
# 解压 nginx 源码包
$ tar -zxvf nginx-1.16.1.tar.gz -C /usr/local/src
# 进入 nginx 源码路径
$ cd /usr/local/src/nginx-1.16.1
  • 参数配置&Makefile生成
# 查詢可用的參數
$ ./configure --help

# 参数配置
$ ./configure --prefix=/usr/local/nginx \  # 安装路径指定
--sbin-path=/usr/local/nginx/sbin/nginx \  
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock \
--with-http_gzip_static_module \
--with-http_ssl_module

# 创建 Makefile
$ make

# 安装 nginx
$ make install

RPM

# RPM 安装流程(离线、在线都可安装软件)
- 将 RPM 由厂商的网页下载下来; 
- 解决 RPM 包管理依赖;
- 通过 RPM -ivh 安装软件;

# RPM 默认安装路径
- /etc: 一些配置文件放置的目录, 例如 /etc/crontab;
- /usr/bin: 一些可可执行文件案;
- /usr/lib: 一些程序使用的动态函数库;
- /usr/share/doc: 一些基本的软件使用手册与说明文档;
- /usr/share/man: 一些 man page 文件;

# RPM 常用命令
- rpm -ivh package_name
- rpm -Uvh package_name
- rpm -qa
- rpm -e package_name
- rpm -qR package_name  # 只能查看已经安装好的rpm依赖
- rpm -qpR package_name # 能查看未安装的rpm依赖
  • RPM安装软件
# 光盘安装软件
$ rpm -ivh /光盘挂载路径/rp-pppoe-3.11-5.el7.x86_64.rpm

# 安装多个软件
$ rpm -ivh a.i386.rpm b.i386.rpm *.rpm #  *.rpm表示许多的软件文件

# 联网安装软件
$ rpm -ivh http://website.name/path/pkgname.rpm
  • RPM升级
# -Uvh: 后面接的软件即使没有安装过, 则系统将予以直接安装; 若后面接的软件有安装过旧版, 则系统自动更新至新版;
# -Fvh: 如果后面接的软件并未安装到你的 Linux 系统上, 则该软件不会被安装; 亦即只有已安装至你 Linux 系统内的软件会被"升级";
  • RPM查询
# 显示所有安装软件
$ rpm -qa
# 显示已安装的软件
$ rpm -q[licdR] 已安装的软件名称
# 显示已安装的软件
$ rpm -qf 存在于系统上面的某个文件名
# 查看RPM文件
$ rpm -qp[licdR] 未安装的某个文件名称
#选项与参数:
#查询已安装软件的信息:
##-q: 仅查询,后面接的软件名称是否有安装; 
##-qa: 列出所有的,已经安装在本机 Linux 系统上面的所有软件名称; 
##-qi: 列出该软件的详细信息 (information) ,包含开发商、版本与说明等; 
##-ql: 列出该软件所有的文件与目录所在完整文件名 (list) ; 
##-qc: 列出该软件的所有配置文件 (找出在 /etc/ 下面的文件名而已) 
##-qd: 列出该软件的所有说明文档 (找出与 man 有关的文件而已) 
##-qR: 列出与该软件有关的相依软件所含的文件 (Required 的意思) 
##-qf: 由后面接的文件名称,找出该文件属于哪一个已安装的软件; 
##-q --scripts:列出是否含有安装后需要执行的脚本档,可用以 debug 喔!
#查询某个 RPM 文件内含有的信息:
##-qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出某个 RPM 文件内的信息,而非已安装的软件信息;

# 查找是否安装 docker-ce 软件
# 不必要加上版本
$ rpm -q docker-ce
docker-ce-19.03.2-3.el7.x86_64

# 显示 docker-ce 软件所有目录与文件
$ rpm -ql docker-ce
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
/usr/lib/systemd/system/docker.socket
/var/lib/docker-engine/distribution_based_engine-ce.json

# 显示 docker-ce 说明资料
$ rpm -qi docker-ce
Name        : docker-ce
Epoch       : 3
Version     : 19.03.2
Release     : 3.el7
Architecture: x86_64
Install Date: Wed 21 Sep 2022 09:51:07 PM CST
Group       : Tools/Docker

# 显示 docker-ce 配置文件
$ rpm -qc docker-ce
$ rpm -qd docker-ce

# 显示 docker-ce 依赖 (显示已安装的软件包 rpm 的依赖)
$ rpm -qR docker-ce
/bin/sh
container-selinux >= 2:2.74
containerd.io >= 1.2.2-3
device-mapper-libs >= 1.02.90-1
docker-ce-cli

# 显示 /bin/sh 由那个软件包提供的
$ rpm -qf /bin/sh

# 查看 RPM 文档 (显示未安装的软件包 rpm 所需依赖)
$ rpm -qpR filename.xxx.rpm
  • RPM卸载软件&重建
# 卸载过程一定是由最上层删除到最下层的依赖, 否则容易出现错误
# 尝试卸载 pam 软件
$ rpm -qa | grep pam
$ rpm -e pam # 发现pam被kbd、sudo等依赖
error: Failed dependencies:
libpam.so.0()(64bit) is needed by (installed) kbd-1.15.5-15.el7.x86_64
libpam.so.0()(64bit) is needed by (installed) sudo-1.8.23-3.el7.x86_64
......

# 重建资料库
$ rpm --rebuilddb
  • RPM 数字签名
# -Va: 列出目前系統上面所有可能被更動過的檔案;
$ rpm -Va

# -V: 後面加的是軟體名稱, 若該軟體所含的檔案被更動過, 才會列出來;
$ rpm -V  已安裝的軟體名稱

# -Vp: 後面加的是檔案名稱, 列出該軟體內可能被更動過的檔案;
$ rpm -Vp 某個 RPM 檔案的檔名

# -Vf: 列出某個檔案是否被更動過
$ rpm -Vf 在系統上面的某個檔案

# 查看 Docker-ce 是否被更改过
# 若无输出信息, 则表示没有文件被更改过
$ rpm -V docker-ce

# 查看 /etc/crontab 是否被修改过
$ rpm -Vf /etc/crontab

YUM

# YUM 安装流程(离线、在线都可安装软件)
- 配置网络(网络可通)
- 修改数据源
- 通过 yum install命令安装软件

# YUM options
- -y: 當 yum 要等待使用者輸入時, 這個選項可以自動提供 yes 的回應;
- --installroot=/some/path: 將該軟體安裝在 /some/path 而不使用預設路徑;

# YUM 常用查询命令
- search: 搜索包详细信息;
- info: 显示包的详细信息;
- list: 列出软件包;
- provides: 找出提供的软件包;

# YUM 常用安装&升级命令
- install: 用于安装软件;
- groupinstall: 用于安装一组软件;
- update: 用于更新软件;
  • YUM查询
# yum [list|info|search|provides|whatprovides] 參數
# 搜索 ifconfig 属于那个软件包
# yum search 命令行/软件包
$ yum search ifconfig
Loaded plugins: fastestmirror  # yum 系統自己找出最近的 yum server
Loading mirror speeds from cached hostfile # 找出速度最快的那一部 yum server
 * base: mirrors.ustc.edu.cn # 底下三個軟體庫,且來源為該伺服器!
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
====================================================== Matched: ifconfig ======================================================
net-tools.x86_64 : Basic networking tools

# 查找 net-tools 功能介绍
# yum info 软件包
$ yum info net-tools
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
Installed Packages
Name        : net-tools
Arch        : x86_64
Version     : 2.0
Release     : 0.25.20131004git.el7
Size        : 917 k
Repo        : installed
From repo   : base
Summary     : Basic networking tools
URL         : http://sourceforge.net/projects/net-tools/
License     : GPLv2+
Description : The net-tools package contains basic networking tools,
            : including ifconfig, netstat, route, and others.
            : Most of them are obsolete. For replacement check iproute package.

# 列出服务器所有软件名称
$ yum list
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
Installed Packages # 已安装的软件
GeoIP.x86_64                              1.5.0-13.el7                 @anaconda
......
Available Packages # 可安装的其他软件
......
# 软件名称   版本   在那个软件库[base|extras|updates]中

# 列出可升级的软件
$ yum list updates
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
base                                                                               | 3.6 kB  00:00:00   
docker-ce-stable                                                                   | 3.5 kB  00:00:00   
extras                                                                             | 2.9 kB  00:00:00   
updates                                                                            | 2.9 kB  00:00:00   
Updated Packages

# 列出提供 passwd 文件的软件有哪些
yum provides passwd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
passwd-0.79-6.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : base
passwd-0.79-4.el7.x86_64 : An utility for setting or changing passwords using PAM
Repo        : @anaconda
  • YUM 安装&升级
# 安装 pam-devel
$ yum install pam-devel
Loaded plugins: fastestmirror # 首先的 5 行在找出最快的 yum server
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.aliyun.com
 * updates: mirrors.ustc.edu.cn
Resolving Dependencies  # 接下来先处理依赖的软件问题
--> Running transaction check
---> Package pam-devel.x86_64 0:1.1.8-23.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved
# 由上面的检查发现到 pam 这个软件也需要同步升级,这样才能够安装新版 pam-devel 喔!
# 至于下面则是一个总结的表格显示!
===============================================================================================================================
 Package                        Arch                        Version                            Repository                 Size
===============================================================================================================================
Installing:
 pam-devel                      x86_64                      1.1.8-23.el7                       base                      185 k

Transaction Summary
===============================================================================================================================
Install  1 Package  # 要安装软件数量是一个

Total download size: 185 k
Installed size: 528 k
Is this ok [y/d/N]: y
Downloading packages:
pam-devel-1.1.8-23.el7.x86_64.rpm                                                                       | 185 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : pam-devel-1.1.8-23.el7.x86_64                                                                               1/1 
  Verifying  : pam-devel-1.1.8-23.el7.x86_64                                                                               1/1 

Installed:
  pam-devel.x86_64 0:1.1.8-23.el7                                                                                              

Complete!
  • YUM 移除
$ yum remove pam-devel

YUM 其他配置

YUM 仓库配置

# YUM 仓库配置文件查看
$ vi /etc/yum.repos.d/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

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • name:只是说明一下这个软件库的意义而已,重要性不高!
  • mirrorlist=:列出这个软件库可以使用的映射站台,如果不想使用,可以注解到这行;
  • baseurl=:这个最重要,因为后面接的就是软件库的实际网址! mirrorlist 是由 yum 程序自行去捉映射站台, baseurl 则是指定固定的一个软件库网址!我们刚刚找到的网址放到这里来啦!
  • enable=1:就是让这个软件库被启动。如果不想启动可以使用 enable=0 喔!
  • gpgcheck=1:还记得 RPM 的数码签章吗?这就是指定是否需要查阅 RPM 文件内的数码签章!
  • gpgkey=:就是数码签章的公钥档所在位置!使用默认值即可

YUM 仓库查看&清除

  • 列出使用的软件库
$ yum repolist all
# 上面最右边有写 enabled 才是有启动的;
  • 清除软件库数据
$ yum clean

YUM 群组功能

  • 查询目前软件库与本机上安装过的软件群组
$ yum grouplist
Installed environment groups:            # 已经安装的系统环境软件群组
   Development and Creative Workstation
Available environment groups:            # 还可以安装的系统环境软件群组
......
Installed groups:                        # 已经安装的软件群组!
   Development Tools
Available Groups:                        # 还能额外安装的软件群组!
......
  • 查看&安装软件群组
# 查看 GNOME Desktop 软件群组
$ yum groupinfo "GNOME Desktop"

# 安装 GNOME Desktop 软件群组
$ yum groupinstall "GNOME Desktop"

区别

定制化

Tarball:可定制性高、可任意指定自定义参数;如,安装路径、第三方插件、平台限制小等原因;

rpm:可定制性较低、可指定的自定义参数有限;

yum:可定制性低、可指定的自定义参数极其有限;

复杂性

Tarball:安装方式最为复杂,操作难度系数高,要求有一定的Linux知识;

rpm:安装方式较为复杂,操作难度相比于Tarball简单不少,要求有基础的Linux知识;

yum:安装方式最为简单,操作难度几乎没有,要求有简单的Linux知识;

推荐性

Tarball:在有一定运维基础的情况下最推荐这个,可控性强,可按照要求来安装&卸载;但是有一定难度,不建议新手上手;

rpm:不推荐这个,rpm解决依赖还是较为麻烦;有依赖问题、难度,不推荐新手使用;

yum:较为推荐;个人测试环境、不重要的软件可通过yum安装,简单快捷方便;

10-28 16:45