一篇文章带你搞懂Linux下编译安装软件
sinye56 2024-11-17 15:37 2 浏览 0 评论
提醒:本文为合集文章,后续会持续更新!
关注我,每日提升!
在Linux下安装源码包是最常用的。在日常的管理工作中,阿铭的大部分软件都是通过源码安装的。安装源码包,需要我们把源代码编译成可执行的二进制文件。如果你能读懂这些源代码,就可以修改这些源代码的自定义功能,然后再按你的需求编译。使用源码包除了可以自定义修改源代码外,还可以定制相关的功能,因为源码包在编译时可以附加额外的选项。
源码包的编译用到了Linux系统里的编译器。常见的源码包一般都是用C语言开发的,因为C语言是Linux上最标准的程序语言。Linux上的C语言编译器称为gcc,利用它可以把C语言编译成可执行的二进制文件。所以,如果你的机器上没有安装gcc,就无法编译源码,你可以使用命令yum install -y gcc来完成安装。
安装源码包通常需要以下3个步骤。
(1) ./configure
这一步可以定制功能,加上相应的选项即可,具体有什么选项可以通过命令./configure --help来查看。这一步会自动检测你的Linux系统与相关的套件是否有编译该源码包时所需要的库,因为一旦缺少某个库,就不能完成编译。只有检测通过后,才会生成Makefile文件。
(2) make
使用这个命令,会根据Makefile文件中预设的参数进行编译,这一步其实就是gcc在工作了。
(3) make install
这一步是安装步骤,用于创建相关软件的存放目录和配置文件。
对于以上这3个步骤,并不是所有的源码包软件都一样,也就是说,源码包的安装并没有标准的安装步骤。这就需要你拿到源码包解压后,进入目录,找到相关的帮助文档(通常,会以INSTALL或者README为文件名)。下面阿铭会编译安装一个源码包来帮助你更深刻地理解安装源码包的过程。
下载源码包
下载源码包一定要去官方站点,因为你从其他网站下载的源码包很有可能是被修改过的。我们先把Nginx的源码包下载到/usr/local/src/目录下,如下所示:
# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.22.0.tar.gz
阿铭提供的下载地址为Nginx下载地址,如果该地址已失效,请到其官网获取最新的Nginx下载地址。在下载之前,阿铭先进入/usr/local/src目录,这是因为阿铭习惯把源码包都放到这个目录下。这样做的好处是方便自己和其他管理员维护。所以,阿铭建议你将下载的源码包都统一放到这个目录下。
解压源码包
解压.tar.gz格式的压缩包,这在前面已经介绍过,示例命令如下:
# tar -zxvf nginx-1.22.0.tar.gz
配置相关的选项并生成Makefile
首先,进入解压后的源码目录,在配置之前可以查看可用的配置参数,如下所示:
# cd nginx-1.22.0
# ./configure --help |less
--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
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
--user=USER set non-privileged user for
worker processes
--group=GROUP set non-privileged group for
worker processes
限于篇幅,后面的内容阿铭省略了。常用的配置选项有--prefix=PREFIX,它的意思是定义软件包的安装路径。如果你想了解其他配置选项,也可以使用命令./configure --help查看详情。这里阿铭把Nginx安装在/usr/local/nginx目录下,该选项的配置为--prefix=/usr/local/nginx。配置过程如下所示:
# ./configure --prefix=/usr/local/nginx
checking for OS
+ Linux 4.18.0-348.el8.0.2.x86_64 x86_64
checking for C compiler ... found
+ using GNU C compiler
+ gcc version: 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC)
checking for gcc -pipe switch ... found
checking for -Wl,-E switch ... found
checking for gcc builtin atomic operations ... found
checking for C99 variadic macros ... found
checking for gcc variadic macros ... found
checking for gcc builtin 64 bit byteswap ... found
checking for unistd.h ... found
checking for inttypes.h ... found
checking for limits.h ... found
checking for sys/filio.h ... not found
checking for sys/param.h ... found
checking for sys/mount.h ... found
checking for sys/statvfs.h ... found
checking for crypt.h ... found
checking for Linux specific features
checking for epoll ... found
checking for EPOLLRDHUP ... found
checking for EPOLLEXCLUSIVE ... found
checking for eventfd() ... found
checking for O_PATH ... found
checking for sendfile() ... found
checking for sendfile64() ... found
中间省略
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre=<path> option.
不幸的是配置刚开始就报错了,因为Nginx需要zlib库,该系统并未安装。安装命令如下:
# yum install -y pcre-devel
安装后再继续上面的步骤,如下所示:
# ./configure --prefix=/usr/local/nginx //有诸多信息输入,阿铭不再提供
此时又有新的错误:
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.
根据它提示,很容易解决此问题,安装zlib即可:
# yum install -y zlib-devel
然后继续./configure那一步,最终通过,验证这一步是否成功的命令是:
# echo $?
0
这里返回值是0,说明执行成功,否则就没有成功。此时就成功生成Makefile了。查看结果如下:
# ls -l Makefile
-rw-r--r-- 1 root root 69 11月 9 21:43 Makefile
进行编译
生成Makefile后,需要进行编译,如下所示:
# make
-bash:
make: 未找到命令
说明:这是因为我们的系统还未安装make命令,安装即可
# yum install –y make
# make
make -f objs/Makefile
make[1]:进入目录“/usr/local/src/nginx-1.22.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/unix -I objs \
-o objs/src/core/nginx.o \
src/core/nginx.c
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/unix -I objs \
编译时会出现类似这样杂乱的信息。限于篇幅,阿铭只列出一小部分内容。编译的时间会比较长,这是因为CPU高速计算时的使用率很高。编译后再使用命令echo $?验证是否编译成功,如下所示:
# echo $?
0
如果验证结果是0,就可以执行最后一步了。
安装
安装源码包的命令为make install,如下所示:
# make install
make -f objs/Makefile install
make[1]:进入目录“/usr/local/src/nginx-1.23.0”
test -d '/usr/local/nginx' || mkdir -p '/usr/local/nginx'
test -d '/usr/local/nginx/sbin' \
|| mkdir -p '/usr/local/nginx/sbin'
test ! -f '/usr/local/nginx/sbin/nginx' \
|| mv '/usr/local/nginx/sbin/nginx'
\ '/usr/local/nginx/sbin/nginx.old'
cp objs/nginx '/usr/local/nginx/sbin/nginx'
test -d '/usr/local/nginx/conf' \
|| mkdir -p '/usr/local/nginx/conf'
cp conf/koi-win '/usr/local/nginx/conf'
cp conf/koi-utf '/usr/local/nginx/conf'
cp conf/win-utf '/usr/local/nginx/conf'
当然,你也可以使用命令echo $?验证是否已正确安装。执行完这一步,则会在/usr/local/nginx目录下增加很多目录。使用ls命令查看该目录,如下所示:
# ls /usr/local/nginx/
conf html logs sbin
到此,Nginx源码的安装就完成了。其实在日常的源码安装过程中,遇到错误不能完成安装的情况很多,这些错误通常都是因为缺少某一个库文件。这需要你仔细琢磨报错信息或者查看当前目录下的config.log以得到相关的信息。
感谢阅读,关注我,持续为你输出高质量Linux技术文档!
相关推荐
- RHEL8和CentOS8怎么重启网络
-
本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...
- Linux 内、外网双网卡路由配置
-
1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...
- Linux——centos7修改网卡名
-
修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...
- CentOS7下修改网卡名称为ethX的操作方法
-
?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...
- Linux 网卡名称enss33修改为eth0
-
一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...
- CentOS下双网卡绑定,实现带宽飞速
-
方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...
- linux 双网卡双网段设置路由转发
-
背景网络情况linux双网卡:网卡A(ens3)和网卡B(...
- Linux-VMware设置网卡保持激活
-
Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...
- VMware虚拟机三种网络模式
-
01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...
- 2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题
-
问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...
- Linux网卡的Vlan配置,你可能不了解的玩法
-
如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...
- Centos7 网卡绑定
-
1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...
- Linux搭建nginx+keepalived 高可用(主备+双主模式)
-
一:keepalived简介反向代理及负载均衡参考:...
- Linux下Route 路由指令使用详解
-
linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)