目录
- 概述
- 源码安装
- RPM 安装
- YUM 安装
- 使用 ISO 建立 YUN 库
- 搭建局域网 Repo
1. 概述
CentOS 下安装软件常用的方法有以下3种:
- 源码包安装:
过程:下载软件的源码,手动进行环境配置以及编译。
缺点:过程繁琐,存在较多依赖性问题
优点:最适配自己的主机环境。 - rpm 包安装:
过程:源码包的编译版本,不再需要繁琐的安装过程,根据 rpm 包名挑选适合自己环境的包进行安装即可
缺点:依旧未解决依赖性问题,软件安装必须先手动下载 rpm 包
优点:比起源码包安装,过程简单很多 - YUM 安装:
过程:本地建立依赖关系的数据库,并通过URL连接至互联网上的 rpm 库,安装时一次性解决依赖性关系
缺点:暂无
优点:简单、方便
2. 源码安装
最复杂的安装方式,可能会遇到各种各样的问题
而最多会遇到的就是依赖性问题
以下是安装源码的常规操作(以安装 apache2 为例)
2.1 进入指定目录
[root@choco-01 src]# cd /usr/local/src/ #约定俗成,下载到该目录
2.2 下载源码包
[root@choco-01 src]# pwd
/usr/local/src
[root@choco-01 src]# wget http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
--2018-05-29 16:35:00-- http://mirrors.shu.edu.cn/apache//httpd/httpd-2.4.33.tar.bz2
正在解析主机 mirrors.shu.edu.cn (mirrors.shu.edu.cn)... 202.121.199.235
正在连接 mirrors.shu.edu.cn (mirrors.shu.edu.cn)|202.121.199.235|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:6934765 (6.6M) [application/x-bzip2]
正在保存至: “httpd-2.4.33.tar.bz2”
100%[=================================>] 6,934,765 1.75MB/s 用时 4.2s
2018-05-29 16:35:05 (1.58 MB/s) - 已保存 “httpd-2.4.33.tar.bz2” [6934765/6934765])
2.3 解压缩
[root@choco-01 src]# ls
httpd-2.4.33.tar.bz2
[root@choco-01 src]# tar -xjvf httpd-2.4.33.tar.bz2
2.4 查看安装说明
安装说明一般为 README 或 INSTALL
[root@choco-01 src]# cd httpd-2.4.33
[root@choco-01 httpd-2.4.33]# ls
ABOUT_APACHE CMakeLists.txt INSTALL NWGNUmakefile
acinclude.m4 config.layout InstallBin.dsp os
Apache-apr2.dsw configure LAYOUT README
Apache.dsw configure.in libhttpd.dep README.cmake
apache_probes.d docs libhttpd.dsp README.platforms
ap.d emacs-style libhttpd.mak ROADMAP
build httpd.dep LICENSE server
BuildAll.dsp httpd.dsp Makefile.in srclib
BuildBin.dsp httpd.mak Makefile.win support
buildconf httpd.spec modules test
CHANGES include NOTICE VERSIONING
## 看一眼 INSTALL
[root@choco-01 httpd-2.4.33]# cat INSTALL
APACHE INSTALLATION OVERVIEW
Quick Start - Unix
------------------
For complete installation documentation, see [ht]docs/manual/install.html or
http://httpd.apache.org/docs/2.4/install.html
$ ./configure --prefix=PREFIX
$ make
$ make install
$ PREFIX/bin/apachectl start
2.5 检测环境并指定个别参数
依赖性问题往往在此处出现
./configure
有相当多的用法,你不可能记得住,而./configure --help
能够帮助到你
检测结束后,会根据检测结果以及指定的选项,生成 MAKEFILE 文件,后续的编译以该文件为指导
ps.由于源码安装往往会在屏幕上显示大量信息,有时难以找到报错或警告信息,可以在执行一条命令后echo $?
一下,$?
变量代表了上一条命令的执行情况,返回0代表成功,其他则为失败。
[root@choco-01 httpd-2.4.33]# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... yes
setting CC to "gcc"
setting CPP to "gcc -E"
setting CFLAGS to " -pthread"
setting CPPFLAGS to " -DLINUX -D_REENTRANT -D_GNU_SOURCE"
setting LDFLAGS to " "
configure:
configure: Configuring Apache Portable Runtime Utility library...
configure:
checking for APR-util... yes
checking for gcc... gcc
checking whether the C compiler works... no #缺gcc?那就装一下
configure: error: in `/usr/local/src/httpd-2.4.33':
configure: error: C compiler cannot create executables
See `config.log' for more details
[root@choco-01 httpd-2.4.33]# yum -y install gcc
## 装完后,再次检查环境
[root@choco-01 httpd-2.4.33]# ./configure --prefix=/usr/local/apache2
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
configure:
configure: Configuring Apache Portable Runtime library...
configure:
checking for APR... yes
setting CC to "gcc"
setting CPP to "gcc -E"
setting CFLAGS to " -pthread"
setting CPPFLAGS to " -DLINUX -D_REENTRANT -D_GNU_SOURCE"
setting LDFLAGS to " "
configure:
configure: Configuring Apache Portable Runtime Utility library...
configure:
checking for APR-util... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking how to run the C preprocessor... gcc -E
checking for gcc option to accept ISO C99... -std=gnu99
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/ # 又缺 libpcre 了?继续装吧。
[root@choco-01 httpd-2.4.33]# yum -y install pcre-devel pcre
## 再次执行环境检查,终于不报错了,看一下 /usr/local/src/httpd-2.4.33 下是不是有了个 Makefile
[root@choco-01 httpd-2.4.33]# ls | grep Makefile
Makefile
Makefile.in
Makefile.win
2.6 编译(make
)
不铺代码了,太长了;
make的时候也经常会报错,无非也就是说缺东少西的
怎么办呢?一句话,缺啥补啥吧
2.7 将可执行文件、配置文件等分发至正确的路径(make install
)
make
完之后,所有文件都还在当前目录,还记的检测环境时指定的 /usr/local/apache2 目录吗?现在该目录还没被建立起来,必须make install 一下
[root@choco-01 httpd-2.4.33]# ls /usr/local/apache2
ls: 无法访问/usr/local/apache2: 没有那个文件或目录
[root@choco-01 httpd-2.4.33]# make install
Making install in srclib
.
.
.
[root@choco-01 httpd-2.4.33]# ls /usr/local/apache2
bin cgi-bin error icons logs manual
build conf htdocs include man modules
2.8 后续
此时,apahce2 相关的文件都跑到 /usr/local/apache2 这个目录中去了,但是该目录并不包含在 PATH 变量中,执行该程序的相关命令基本都得靠绝对路径。怎么办?
——改 PATH 或者在 PATH 包含的目录中做软链接吧。
3. RPM 安装
还记的源码安装过程中,
./configure
这一步吗?这就是在对环境进行检查以及配置
源码安装过程中会根据主机的硬件、系统、软件配置,编译出最适合当前主机的程序,但如果每个程序都靠源码编辑,那不得累死?
所以出现了 rpm 包,发行者提前根据系统的硬件、系统等条件编译好程序,并将编译好的程序打包发布
3.1 RPM 包的命名规则
既然 RPM 是根据不同的条件进行提前编译的,那么如何查看某个 RPM 到底是针对哪种环境的?
——当然就是 RPM 包的文件名咯!
以 vim 为例
vim-enhanced-7.4.160-1.el7.x86_64.rpm
vim-enhanced | 7.4.160 | -1 | el7 | x86_64 | .rpm |
---|---|---|---|---|---|
软件名 | 版本号 | 发行次数 | 对应 OS | 对应硬件平台 | 后缀 |
3.2 rpm 命令解析
- 安装:
rpm -ivh vim-enhanced-7.4.160-1.el7.x86_64.rpm
- 升级:
rpm -Uvh vim-enhanced-7.4.160-1.el7.x86_64.rpm
- 删除:
rpm -e vim-enhanced
- 查全部已安装的:
rpm -qa
- 查某个程序是否安装:
rpm -q vim-enhanced
- 查某个已安装程序的详细信息:
rpm -qi vim-enhanced
- 查某个已安装程序包含哪些文件:
rpm -ql vim-enhanced
- 查某个文件来自哪个包:
rpm -qf /usr/bin/vim
也可以rpm -qf `which vim`
3.3 其他
- 系统 ISO 镜像中的 Packages 包中包含了大量 rpm 包
- rpm 安装程时,程序的相关文件会被按照 FHS 原则,放在各个目录下,而源码安装往往是放在一个文件夹下,因为容易删
4. YUM
相当于 rpm 包的仓库,还提供解决方案,一次性解决软件依赖性问题
4.1 配置文档
/etc/yum.repos.d/*
:所有的仓库的访问方式都在该目录下
4.2 命令
- 安装:
yum install [-y] vim
- 罗列软件(相当于 rpm -qa):
yum list
- 搜索软件-1:
yum search vim
- 搜索软件-2(推荐,有颜色):
yum list | grep vim
- 卸载:
yum remove [-y] vim #不推荐用 -y
- 单个升级:
yum update [-y] vim
- 全部升级:
yum update
- 反查文件:
yum provides "/*/vim"
- 罗列套件:
yum grouplist
- 安装套件:
yum groupinstall 'virtualization Host' # 名称有空格的套件需要加引号
- 仅下载 rpm 包 - 1:
yumdownloader vim #该程序需要单独安装
- 仅下载 rpm 包 - 2:
yum install --downloadonly --downloaddir=
vim
[root@choco-01 packages]# yum install --downloadonly --downloaddir=/tmp nano
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* epel: mirrors.ustc.edu.cn
正在解决依赖关系
--> 正在检查事务
---> 软件包 nano.x86_64.0.2.3.1-10.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=============================================================================== ==============================================================================
Package 架构 版本 源 大小
=============================================================================== ==============================================================================
正在安装:
nano x86_64 2.3.1-10.el7 base 440 k
事务概要
=============================================================================== ==============================================================================
安装 1 软件包
总下载量:440 k
安装大小:1.6 M
Background downloading packages, then exiting:
nano-2.3.1-10.el7.x86_64.rpm | 440 kB 00:00:00
exiting because "Download Only" specified
[root@choco-01 packages]# which nano
/usr/bin/which: no nano in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@choco-01 packages]# ls /t
ls: 无法访问/t: 没有那个文件或目录
[root@choco-01 packages]# ls /tmp/
nano-2.3.1-10.el7.x86_64.rpm systemd-private-d383309a1de54c9ebb1a3239f711e60a-vmtoolsd.service-GOCCAx
systemd-private-d383309a1de54c9ebb1a3239f711e60a-chronyd.service-cTeIlQ yum_save_tx.2018-05-30.09-24.ehBdYd.yumtx
systemd-private-d383309a1de54c9ebb1a3239f711e60a-vgauthd.service-1xucWb
- 安装的同时留存 rpm 包:
[root@choco-01 ~]# vim /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 # 将 keeptcache 设置为1
## 最终 rpm 包保留在 /var/cache/yum/x86_64/7/base/packages 中
5. 更改 YUM 源
其实就是改 /etc/yum.repo.d/ 下的文件
5.1 删掉不要的
rm -f /etc/yum.repos.d/*
5.2 下载想要的
cd /etc/yum.repos.d/
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
或者
curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo
5.3 重建数据库
yum clean all
5.4 效果
yum list
6. 使用 ISO 建立 YUN 库
没网咋办?别忘了 ISO 下的 Packages 目录下都是 RPM 包!
6.1 挂载 ISO
mount /dev/cdrom /mnt
6.2 备份当前 repo 文件
cp -r /etc/yum.repo.d /etc/yum.repo.d.bak
rm -f /etc/yum.repos.d/*
6.3 编辑新的 repo 文件(后缀必须为 .repo)
vim /etc/yum.repos.d/dvd.repo
[dvd]
name=install dvd
baseurl=file:///mnt
enable=1
gpcheck=0
6.4 重新建立数据库
yum clean all
6.5 效果
使用yum list
7. 搭建局域网 Repo
公司出口带宽有限?
公司研发没法上外网?
自行搭建 YUM 源服务吧
步骤
- 创建目录、拷贝 rpm 包
- 创建 repository
- 安装 nginx
- 客户端上配置 repo 文件
- 从知名镜像站同步 rpm 包
- 后续
7.1 创建目录、拷贝rpm包
7.1.1 创建一个目录,用于存放 rpm 包
mkdir
[root@choco-01 /]# mkdir /YUM ; ll | grep YUM
drwxr-xr-x 2 root root 6 May 29 10:55 YUM
7.1.2 放点 ISO 中的 rpm
mount /dev/cdrom /mnt
cp /mnt/Packages/a*
[root@choco-01 /]# mount /dev/cdrom /mnt/ ; ls /mnt/
mount: /dev/sr0 is write-protected, mounting read-only
CentOS_BuildTag GPL RPM-GPG-KEY-CentOS-7 images
EFI LiveOS RPM-GPG-KEY-CentOS-Testing-7 isolinux
EULA Packages TRANS.TBL repodata
[root@choco-01 /]# cp /mnt/Packages/a*rpm /YUM/ ; ls /YUM/
abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm
abrt-2.1.11-48.el7.centos.x86_64.rpm
abrt-addon-ccpp-2.1.11-48.el7.centos.x86_64.rpm
abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64.rpm
abrt-addon-pstoreoops-2.1.11-48.el7.centos.x86_64.rpm
abrt-addon-python-2.1.11-48.el7.centos.x86_64.rpm
abrt-addon-vmcore-2.1.11-48.el7.centos.x86_64.rpm
.
.
.
7.2. 创建 repository
**7.2.1 安装 createrepo **
yum -y install createrepo
[root@choco-01 yum.repos.d]# yum list | grep createrepo
Failed to set locale, defaulting to C
createrepo.noarch 0.9.9-28.el7 @base
createrepo_c.x86_64 0.10.0-6.el7 epel
createrepo_c-devel.x86_64 0.10.0-6.el7 epel
createrepo_c-libs.x86_64 0.10.0-6.el7 epel
python-createrepo_c.x86_64 0.9.0-1.el7.centos extras
python2-createrepo_c.x86_64 0.10.0-6.el7 epe
[root@choco-01 yum.repos.d]# yum install -y createrepo
7.2.2 创建 repository
createrepo
[root@choco-01 yum.repos.d]# createrepo /YUM/
Spawning worker 0 with 137 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
[root@choco-01 yum.repos.d]# ll /YUM/ | grep repodata
drwxr-xr-x 2 root root 4096 May 29 13:00 repodata
7.2.3 仓库变更后,更新 repository
如果 rpm 包有增加或减少,需要执行以下命令
createrepo --update
7.3 安装nginx
7.3.1 安装 nginx*
yum -y install epel-release
yum -y install nginx
7.3.2 修改 nginx 配置文件 /etc/nginx/nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /data/yumdata;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
autoindex on; #这个必须有,为了能提供目录浏览
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
7.3.3 启动 nginx 服务
systemctl start nginx
7.3.4 iptables、DNS 等
关闭或调整 iptables
systemctl stop firewalld.service
必要时将该服务器 IP 配上 DNS
7.4 客户端上配置repo文件
- 备份原有 repo 文件
[root@choco-01 yum.repos.d]# pwd
/etc/yum.repos.d
[root@choco-01 yum.repos.d]# mkdir bak
[root@choco-01 yum.repos.d]# ls
CentOS-Base.repo CentOS-Media.repo bak
CentOS-Base.repo.bak CentOS-Sources.repo epel-testing.repo
CentOS-CR.repo CentOS-Vault.repo epel.repo
CentOS-Debuginfo.repo CentOS-fasttrack.repo
[root@choco-01 yum.repos.d]# mv *.repo* bak ; ls
bak
- 新建 repo 文件
[root@choco-01 yum.repos.d]# vim my.repo
[my-repo]
name=myrepo
baseurl=http://192.168.1.101
gpgcheck=0
enabled=1
7.5 从知名镜像站同步 rpm 包
[root@choco-01 yum.repos.d]# rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/ /YUM/
7.6 后续
同步后,往往需要进行 repo 的更新,所以可以将同步&更新,写入同一个脚本,并加入 crontab
rsync -av rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/Packages/ /YUM/ ; createrepo --update /YUM/
(The End)