一、源码包的特点
1. 优点
- 开源,如果能力足够,可以修改源代码
- 可以自定义选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定,效率更高
- 卸载方便,直接删除安装目录即可,不会有任何残留
2. 缺点
- 安装过程步骤较多,尤其是安装较大的软件集合时(例如LAMP环境搭建)
- 编译过程时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错,新手很难解决
3. 源码包与RPM包的区别
安装前的区别:概念上的区别
\ | 源码包 | RPM包 |
---|---|---|
包类型 | 未经过编译,源码可见 | 编译之后的二进制包 |
定制性 | 可以自定义选择所需的功能 | 自定义功能选择不灵活 |
安装、升级 | 步骤多,编译时间长 | 使用rpm命令直接安装、升级,简单,速度快 |
卸载 | 没有卸载命令,直接删除安装目录即可,无残留 | 使用rpm卸载命令卸载 |
安装后的区别:安装位置不同
RPM包默认安装位置(仅供参考)
rpm 包默认安装位置由该软件包的开发者决定
rpm 包也可以通过--prefix=
选项指定安装目录
目录 | 说明 |
---|---|
/etc/init.d/ |
启动脚本所在目录 |
/etc/sysconfig/ |
初始化环境配置文件目录 |
/etc/ |
配置文件安装目录 |
/var/log/ |
日志文件目录 |
/usr/bin/ |
可执行的命令安装目录 |
/usr/lib/ |
程序所使用的函数库保存目录 |
/usr/share/doc/ |
基本的软件使用手册保存目录 |
/usr/share/man/ |
帮助文件保存目录 |
源码包安装位置
源码包安装时需要指定安装位置,一般是
/usr/local/软件名/
安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理。
- 例如RPM包安装的nginx启动方法
service nginx start
/etc/rc.d/init.d/nginx start
源码包安装的服务不能被服务管理命令管理,因为没有安装到默认路径中,所有只能使用绝对路径今次那个服务管理。
- 例源码包安装的nginx启动方法
/usr/local/nginx/sbin/nginx
二、源码包安装软件
0. 安装注意事项
源码包保存位置:/usr/local/src
软件安装位置:/usr/local
如何确定安装过程报错
- 安装过程终止
- 并出现error、warning或no的提示
以 nginx 为例,演示源码包安装过程
1. 安装准备
安装C语言编译器
yum -y install gcc
下载源码包
wget http://nginx.org/download/nginx-1.14.0.tar.gz
[root/usr/local/src]$wget http://nginx.org/download/nginx-1.14.0.tar.gz
--2018-05-23 09:16:19-- http://nginx.org/download/nginx-1.14.0.tar.gz
Resolving nginx.org (nginx.org)... 95.211.80.227, 206.251.255.63, 2606:7100:1:69::3f, ...
Connecting to nginx.org (nginx.org)|95.211.80.227|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1016272 (992K) [application/octet-stream]
Saving to: ‘nginx-1.14.0.tar.gz’
100%[=================================================>] 1,016,272 164KB/s in 8.8s
2018-05-23 09:16:29 (113 KB/s) - ‘nginx-1.14.0.tar.gz’ saved [1016272/1016272]
解压源码包
[root/usr/local/src]$tar -zxf nginx-1.14.0.tar.gz
进入解压缩目录
[root/usr/local/src]$cd nginx-1.14.0
[root/usr/local/src/nginx-1.14.0]$ll
total 732K
drwxr-xr-x 6 vagrant vagrant 4.0K May 23 10:43 auto/
-rw-r--r-- 1 vagrant vagrant 281K Apr 17 15:22 CHANGES
-rw-r--r-- 1 vagrant vagrant 428K Apr 17 15:22 CHANGES.ru
drwxr-xr-x 2 vagrant vagrant 4.0K May 23 10:43 conf/
-rwxr-xr-x 1 vagrant vagrant 2.5K Apr 17 15:22 configure*
drwxr-xr-x 4 vagrant vagrant 68 May 23 10:43 contrib/
drwxr-xr-x 2 vagrant vagrant 38 May 23 10:43 html/
-rw-r--r-- 1 vagrant vagrant 1.4K Apr 17 15:22 LICENSE
drwxr-xr-x 2 vagrant vagrant 20 May 23 10:43 man/
-rw-r--r-- 1 vagrant vagrant 49 Apr 17 15:22 README
drwxr-xr-x 9 vagrant vagrant 84 May 23 10:43 src/
2. 开始安装
./configure
软件配置与检查
./configure
- 定义需要的功能选项
- 监测系统环境是否符合安装要求
- 把定义好的功能选项和检测系统环境的信息都写入`Makefile`文件,用于后续的编辑
- 查看帮助
./configure --help
[root/usr/local/src/nginx-1.14.0]$./configure --help
--help print this message
--prefix=PATH set installation prefix
--sbin-path=PATH set nginx binary pathname
--modules-path=PATH set modules path
--conf-path=PATH set nginx.conf pathname
...省略...
--with-debug enable debug logging
- 指定安装目录为
/usr/local/nginx
,指定命令文件所在目录为/usr/local/sbin/nginx
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx
[root/usr/local/src/nginx-1.14.0]$./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx
checking for OS
+ Linux 3.10.0-229.el7.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
checking for gcc -pipe switch ... found
...省略...
creating objs/Makefile
Configuration summary
+ using system PCRE library
+ OpenSSL library is not used
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
- 查看生成的
Makefile
文件
[root/usr/local/src/nginx-1.14.0]$ll
total 736K
drwxr-xr-x 6 vagrant vagrant 4.0K May 23 10:43 auto/
-rw-r--r-- 1 vagrant vagrant 281K Apr 17 15:22 CHANGES
-rw-r--r-- 1 vagrant vagrant 428K Apr 17 15:22 CHANGES.ru
drwxr-xr-x 2 vagrant vagrant 4.0K May 23 10:43 conf/
-rwxr-xr-x 1 vagrant vagrant 2.5K Apr 17 15:22 configure*
drwxr-xr-x 4 vagrant vagrant 68 May 23 10:43 contrib/
drwxr-xr-x 2 vagrant vagrant 38 May 23 10:43 html/
-rw-r--r-- 1 vagrant vagrant 1.4K Apr 17 15:22 LICENSE
-rw-r--r-- 1 root root 370 May 23 11:07 Makefile
drwxr-xr-x 2 vagrant vagrant 20 May 23 10:43 man/
drwxr-xr-x 3 root root 119 May 23 11:07 objs/
-rw-r--r-- 1 vagrant vagrant 49 Apr 17 15:22 README
drwxr-xr-x 9 vagrant vagrant 84 May 23 10:43 src/
[root/usr/local/src/nginx-1.14.0]$cat Makefile
default: build
clean:
rm -rf Makefile objs
build:
$(MAKE) -f objs/Makefile
install:
$(MAKE) -f objs/Makefile install
modules:
$(MAKE) -f objs/Makefile modules
upgrade:
/usr/local/sbin/nginx -t
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
make
编译
若编译出错,可以使用
make clean
命令清除编译结果
[root/usr/local/src/nginx-1.14.0]$make
make -f objs/Makefile
make[1]: Entering directory `/usr/local/src/nginx-1.14.0'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -I src/core -I src/event -I src/event/modules -I src/os/un
ix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
...省略...
objs/ngx_modules.o \
-ldl -lpthread -lcrypt -lpcre -lz \
-Wl,-E
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
< man/nginx.8 > objs/nginx.8
make[1]: Leaving directory `/usr/local/src/nginx-1.14.0'
make install
编译并安装
[root/usr/local/src/nginx-1.14.0]$make install
make -f objs/Makefile install
make[1]: Entering directory `/usr/local/src/nginx-1.14.0'
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
...省略...
test -d '/usr/local/nginx/logs' \
|| mkdir -p '/usr/local/nginx/logs'
make[1]: Leaving directory `/usr/local/src/nginx-1.14.0'
查看软件安装目录和命令所在目录
- 软件安装目录
[root~]$ll /usr/local/nginx/
total 4.0K
drwxr-xr-x 2 root root 4.0K May 23 11:22 conf/
drwxr-xr-x 2 root root 38 May 23 11:22 html/
drwxr-xr-x 2 root root 55 May 23 11:28 logs/
- 命令所在目录
[root~]$ll /usr/local/sbin/
total 3.6M
-rwxr-xr-x 1 root root 3.6M May 23 11:22 nginx*