如果yum、rpm软件包不能提供所需的软件,就要考虑源码安装,获取源码包,进行编译安装。
源码安装步骤:
1.下载和解压软件包
Linux、UNIX最新的软件通常以源代码打包的形式发布,最常见的是.tar.gz和.tar.bz2两种压缩包格式。下载完源代码包后需要解压缩。
tar -zxvf file.tar.gz
tar -jxvf file.tar.bz2
-j是具有bzip2属性,即需要用bzip2格式压缩和解压缩
-z是具有gzip的属性,即需要用gzip格式压缩和解压缩
完成压缩后,进入解压后的目录下,查阅INSATALL和README等相关帮助文档,了解软件安装要求、软件的工作项目、安装参数和配置技巧等。安装的帮助文档也很说明要按照的依赖性软件。依赖性软件的按照很有必要,是成功安装源代码包的前提。
2.执行configure生成编译配置文件Makefile
源代码需要编译成二进制代码在进行安装。自动编译需要Makefile
3.执行make命令编译源代码
make会根据Makefile文件中的设置对源代码进行编译并生成可执行的二进制文件。运行gcc将源代码编译成为可执行的目标文件,但这些文件通常还需要连接一些函数库才能产生一个完整的可执行文件。
4.执行make install安装软件
make只是生成可执行文件,要将可执行文件安装到系统中,还需要执行make install命令。执行make install安装软件;执行make clean命令卸载。
这里以源代码安装nginx为例
(一)下载和解压nginx软件包
除了Apache,Linux系统中还常常使用另一款web服务器软件nginx。最新版本的nginx是以源代码形式发布的,可以到其官网上下载Linux版本相应的源代码包,有tar.gz和zip两种格式,这里下载tar.gz格式的源代码包,文件以nginx-version.tar gz命名,version代表版本号,例中稳定版本的1.24。
1、上传
-
点击nginx下载页面,选择nginx的下载版本,这里选择的是稳定版
-
打开虚拟机并远程登录,将nginx源代码包上传
2、解压缩
- 将源代码包解压到/usr/local目录下
[root@localhost ~]# tar -xvf /home/ley/nginx-1.24.0.tar.gz -C /usr/local
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls -al
进入/usr/local下查看
解压完成!!!
(二)执行configure生成编译配置文件Makefile
执行configure生成编译配置文件Makefile的过程是一个解决报错的过程,缺失什么库函数就安装下载,因为configure脚本不同所缺失的库文件不同,这里的configure脚本缺失C编译器、PCRE 库、OpenSSL库、zlib 库,缺少什么库函数就将其安装。
1、 阅读相关的帮助文件
- https://nginx.org/en/docs/configure.html
- 这里介绍一部分,其他的可以自行了解
./configure \
--prefix=/usr/local/nginx \ #指定安装路径
--user=name \ #指定用户权限
--group=name \ #指定运行权限用户组
--pid-path=/var/run/nginx/nginx.pid \ #设置了 PID(进程 ID)文件的路径
--error-log-path=/var/log/nginx/error.log \ #设置了错误日志文件的路径,Nginx 将其错误消息写入此文件。
--http-log-path=/var/log/nginx/access.log \ #指定了 HTTP 访问日志文件的路径
--with-http_gzip_static_module \ #表示启用GZIP功能
--http-client-body-temp-path=/var/temp/nginx/client \ #设置了一个临时目录的路径,用于存储客户端请求体文件
--http-proxy-temp-path=/var/temp/nginx/proxy \ #设置了一个临时目录的路径,用于存储与代理相关的临时文件。
--with-http_stub_status_module \ #支持nginx状态查询
--with-http_ssl_module \ #表示启用SSL支持
2、执行configure脚本,安装相应的库函数。
[root@localhost ~]# cd /usr/local/nginx-1.24.0/ #得进入nginx-1.24.0的目录下执行脚本
#下面执行congfigure脚本
[root@localhost nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
checking for OS
+ Linux 5.14.0-70.22.1.el9_0.x86_64 x86_64
checking for C compiler ... not found
./configure: error: C compiler cc is not found
C编译器缺失报错!!!
错误:信息提示说没有找到 C 编译器。在编译 Nginx 或其他软件时,你需要一个 C 编译器,通常是 gcc。在大多数 Linux 发行版中,gcc 可以通过包管理器安装。在系统上,需要安装 gcc 和相关的开发工具和库。
[root@localhost nginx-1.24.0]# yum install gcc-c++
下载完成后重新执行configure脚本:
[root@localhost nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
PCRE 库缺失报错!!!
错误:这是因为HTTP rewrite 模块要求安装PCRE库,您可以使用 --without-http_rewrite_module 禁用该模块选项,或将 PCRE 库安装到系统中,这里执行如下命令,安装PCRE库。
[root@localhost nginx-1.24.0]# yum install -y pcre pcre-devel
安装PCRE 库后重新执行configure脚本:
[root@localhost nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
OpenSSL库缺失报错!!!
错误:SSL 模块需要 OpenSSL 库。您可以不启用这些模块,也可以安装 OpenSSL 库到系统中,或从源代码静态构建 OpenSSL 库。这里执行如下命令,安装OpenSSL库。
[root@localhost nginx-1.24.0]# yum install -y openssl openssl-devel
安装完OpenSSL库后重新执行configure脚本:
[root@localhost nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
zlib 库缺失报错!!!
错误:HTTP gzip 模块需要 zlib 库。您可以使用 --without-http_gzip_module 禁用该模块选项,或者将 zlib 库安装到系统中,或者构建 zlib 库。这里执行如下命令,安装zlib库。
[root@localhost nginx-1.24.0]# yum install -y zlib zlib-devel
安装完zlib 库后重新执行configure脚本:
[root@localhost nginx-1.24.0]# ./configure --prefix=/usr/local/nginx --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --with-http_gzip_static_module --http-client-body-temp-path=/var/temp/nginx/client --http-proxy-temp-path=/var/temp/nginx/proxy --http-fastcgi-temp-path=/var/temp/nginx/fastcgi --http-uwsgi-temp-path=/var/temp/nginx/uwsgi --http-scgi-temp-path=/var/temp/nginx/scgi --with-http_stub_status_module --with-http_ssl_module --with-file-aio --with-http_realip_module
configure脚本执行完成!!!生成编译配置文件Makeflie
(三)执行make命令编译源代码
make会根据Makefile文件中的设置对源代码进行编译并生成可执行的二进制文件。
[root@localhost nginx-1.24.0]# make
(四)执行make install安装软件并开启nginx
[root@localhost nginx-1.24.0]# make install
[root@localhost nginx-1.24.0]# cd -
/usr/local
[root@localhost local]# cd nginx
[root@localhost nginx]# ll
total 4
drwxr-xr-x. 2 root root 4096 Mar 17 19:20 conf #存放配置文件
drwxr-xr-x. 2 root root 40 Mar 17 19:20 html #首页html文件
drwxr-xr-x. 2 root root 36 Mar 17 19:23 sbin #只执行文件
[root@localhost nginx]# cd sbin
[root@localhost sbin]# mkdir /var/temp/nginx -p #启动nginx之前,上边将临时文件目录指定为/var/temp/nginx,所以需创建目录/var/temp/nginx/
[root@localhost sbin]# ./nginx #开启nginx
[root@localhost sbin]# ps -aux| grep nginx #查看nginx是否启动
root 141164 0.0 0.0 9512 896 ? Ss 19:24 0:00 nginx: master process ./nginx
nobody 141165 0.0 0.1 13904 4764 ? S 19:24 0:00 nginx: worker process
root 141167 0.0 0.0 221664 2272 pts/2 S+ 19:24 0:00 grep --color=auto nginx
nginx启动成功!!!
- 输入IP地址,默认缺省端口为80
- 如果出现没有启动成功,打开不了nginx的欢迎界面,则检查防火墙是否关闭,首先需要关闭防火墙:默认端口是80,而nginx的缺省端口亦是80。
service iptables status #查看防火墙状态
service iptables stop #关闭防火墙
- 或者可以修改nginx的端口号,进入conf目录下,修改nginx.conf配置文件
[root@localhost sbin]# cd -
/usr/local/nginx
[root@localhost nginx]# cd conf
[root@localhost conf]# vim nginx.conf
server {
listen 81; #这里将默认端口80,改成了81
server_name localhost;
[root@localhost sbin]# ./nginx -s reload #修改完配置文件后,刷新配置文件
若操作过程中出现其他问题,需自行解决哦。
如有文字表述错误等问题可以在评论区留言告知,谢谢!
【参考文章】
https://zhuanlan.zhihu.com/p/83890573