Linux 源码编译安装
Linux的软件安装方式除了二进制安装包和yum/att外还可以直接通过编译源代码来安装,对于没有对应的deb或rpm安装包的软件来说,通过源码安装是一个比较好的选择。通过编译源码安装很多功能都可以自定义配置,在有的情况下编译安装的性能也要更好一些。
根据软件的开发语言不同编译的方法也会有些不一样,编译之前可以先看一下源码的帮助文档,一般情况下源代码的压缩包内都会有帮助文档。我这里分别编译PHP和Nodejs,PHP是用C语言写的,Nodejs是用C++写的,使用的Linux版本是CentOS7 64位,其他版本的编译方式也都差不多。
编译安装PHP
PHP是C语言写的,在编译之前还需要安装GCC,关于GCC的介绍可以看 GCC - 维基百科 ,下面安装GCC:
yum -y install gcc
更多关于yum的使用可以看: Linux yum简单使用教程 。
这里先编译PHP,先切换到 /usr/local/src
目录,一般情况下下载的源代码都存放在这个目录,如果要存放在其他目录也可以,但为了方便区分和查看大多都会放在这个目录。
切换到 /usr/local/src
目录:
/usr/local/src
下载PHP:
wget http://cn2.php.net/get/php-7.3.3.tar.gz/from/this/mirror
我这里只是以安装PHP为例,PHP官网下载完成后文件名为 mirror
如果是在Windows下就是 php-7.3.3.tar.gz
,这里为了方便查看就把 mirror
重命名为 php-7.3.3.tar.gz
:
mv mirror php-7.3.3.tar.gz
如果文件名正确的话就不用重命名了。把文件传到Linux的方法有很多,不一定非要到官网下载源代码。
下载完成后解压文件:
tar xf php-7.3.3.tar.gz
如果要详细了解Linux的压缩和解压可以看: Linux压缩和打包文件 ,解压完成后进入解压后的目录:
cd php-7.3.3
ls
查看一下:
acinclude.m4 genfiles php.ini-development run-tests.php
aclocal.m4 header php.ini-production sapi
appveyor INSTALL README.EXT_SKEL scripts
build install-sh README.GIT-RULES server-tests-config.php
buildconf LICENSE README.input_filter server-tests.php
buildconf.bat ltmain.sh README.MAILINGLIST_RULES snapshot
CODING_STANDARDS main README.md stamp-h.in
config.guess makedist README.NEW-OUTPUT-API tests
config.sub Makefile.frag README.PARAMETER_PARSING_API travis
configure Makefile.gcov README.REDIST.BINS TSRM
configure.ac Makefile.global README.RELEASE_PROCESS UPGRADING
CONTRIBUTING.md missing README.SELF-CONTAINED-EXTENSIONS UPGRADING.INTERNALS
CREDITS mkinstalldirs README.STREAMS vcsclean
ext NEWS README.SUBMITTING_PATCH win32
EXTENSIONS pear README.TESTING Zend
footer php7.spec.in README.UNIX-BUILD-SYSTEM
generated_lists php.gif README.WIN32-BUILD-SYSTEM
其中的 INSTALL 就是和安装相关的帮助文件,其他也还有很多帮助文件,输入:
./configure --help
可查看可用的选项,其中的 --prefix
就是安装目录,这里设置安装目录为 /user/local/php7.3
:
./configure --prefix=/usr/local/php7.3
每个软件都有不同的选项和参数,不过设置安装目录基本都是一样的,这里只是演示安装,所以其他的选项就不设置了,执行命令后会检查当前系统环境是否符合要求,如果缺少需要的软件就会报错,如果没有错误就会生成一个 makefile 文件,我这里报了一个错误,如下:
configure: error: libxml2 not found. Please check your libxml2 installation
主要就是缺少 libxml2 ,通过Google得知 libxml2 是一个用来解析XML的函数库,直接在yum或apt安装即可。
如果没有错误的话直接输入 make
编译,如果有错误的话解决错误,解决完成后重新生成 makefile
然后编译,生成 makefile
的命令就是:
./configure
不过建议还是加上安装目录。
编译:
make
然后就是漫长的等待,编译的时间根据机器配置的高低也会不一样,如果是1核 + 512M的服务器编译需要的时间一般不会少于10分钟。
编译完成后输入: make install
安装:
make install
等待一段时间即可安装完成。因为我这里只是演示安装,所以就不配置PHP和Mysql了。
查看一下PHP的版本看是否成功:
[root@localhost ~]# php -v
PHP 7.3.3 (cli) (built: Mar 19 2019 19:02:13) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
成功安装。
下面简单总结一下编译安装的过程:
- 下载源代码。
- 解压。
- 根据说明设置选项,然后生成 makefile。
- 编译。
- 安装。
在检查环境或编译时遇到错误可以复制错误信息到Google上搜索,一般情况下能遇到的错误之前都有人遇到过,所以大多都能找到解决方法。
上面写的只是简单编译安装,在编译之前先看帮助文档,一切以帮助文档为主,还有不是每一个软件都开放源代码,对于不开源的软件就只能使用官方提供的安装包或yum/apt安装。
如果要卸载编译安装的软件可以直接删除程序目录,例如我的PHP安装在 /usr/local/php7.3
,我只需要删除 /usr/local/php7.3
目录:
rm -rf /usr/local/php7.3
如果编译安装的时候没有设置安装目录就只能在编译安装一次,同样不设置安装目录,根据输出的信息来查找删除目录。
编译安装Nodejs
因为Nodejs是C++写的,要编译C++还需要安装GCC-C++,如果没有安装GCC的话也需要安装GCC,因为上面已经安装过GCC了,所以这里只安装GCC-C++:
yum -y install gcc-c++
进入 /usr/local/src
:
cd /usr/local/src
下载Nodejs源代码:
wget https://nodejs.org/dist/v10.15.3/node-v10.15.3.tar.gz
下载完成后解压:
tar xf node-v10.15.3.tar.gz
进入解压后的Nodejs目录:
cd node-v10.15.3
使用ls查看一下文件:
android-configure CHANGELOG.md configure.py GOVERNANCE.md node.gypi tools
AUTHORS CODE_OF_CONDUCT.md CONTRIBUTING.md lib README.md vcbuild.bat
benchmark COLLABORATOR_GUIDE.md CPP_STYLE_GUIDE.md LICENSE SECURITY.md
BSDmakefile common.gypi deps Makefile src
BUILDING.md configure doc node.gyp test
使用 ./configure --help
可查看配置选项。
设置安装目录并检查环境 生成 makefile
:
./configure --prefix=/usr/local/node-10
编译:
make
编译完成后安装:
make install
也可以用一条命令来编译安装:
make && make install
对于配置低的机器来说需要的时间可能会比较长,方法和上面编译PHP都差不多。
上面使用PHP和Nodejs简单演示了一下编译的过程,重点在编译安装,下载和解压有很多方法可以实现。在编译安装的过程中可能会出错,复制错误信息到Google上搜索大多都能找到解决方法。如果是Linux新手的话还是不太推荐使用编译安装,最好就是使用yum/apt直接下载安装,其次是安装包。
相关文章:
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/603/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。