软件安装
简介
概念详解
# 概念详解
- 开放源码: 程序码, 写给人类看的程序语言, 但机器并不认识, 所以无法执行;
- 编译器: 将程序码转译成为机器看的懂得语言, 就类似翻译者的角色;
- 可可执行文件: 经过编译器变成二进制程序后, 机器看的懂所以可以执行的文件;
- 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安装,简单快捷方便;