網站首頁 編程語言 正文
源碼包編譯實例
下面通過編譯安裝httpd來深入理解源碼包安裝(httpd-2.4.54)
下載編譯工具,httpd以及其兩個依賴包的源碼包
//源碼包建議到官方網站下載
[root@lnh ~]# mkdir xbz
[root@lnh ~]# cd xbz/
[root@lnh xbz]# dnf -y install gcc gcc-c++ make wget
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.54.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
[root@lnh xbz]# ls
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
安裝apr
[root@lnh xbz]# ls
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
[root@lnh xbz]# tar -xf apr-1.7.0.tar.gz
[root@lnh xbz]# ls
apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
//將apr解壓到當前目錄
[root@lnh xbz]# cd apr-1.7.0/
[root@lnh apr-1.7.0]# ls
apr-config.in build-outputs.mk helpers misc strings
apr.dep CHANGES include mmap support
apr.dsp CMakeLists.txt libapr.dep network_io tables
apr.dsw config.layout libapr.dsp NOTICE test
apr.mak configure libapr.mak NWGNUmakefile threadproc
apr.pc.in configure.in libapr.rc passwd time
apr.spec docs LICENSE poll tools
atomic dso locks random user
build emacs-mode Makefile.in README
build.conf encoding Makefile.win README.cmake
buildconf file_io memory shmem
//進入這個源碼包可以看見里面被解壓出來的東西
[root@lnh apr-1.7.0]# ./configure --prefix=/usr/local/src/apr
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating include/apr.h
config.status: creating build/apr_rules.mk
config.status: creating build/pkg/pkginfo
config.status: creating apr-1-config
config.status: creating apr.pc
config.status: creating test/Makefile
config.status: creating test/internal/Makefile
config.status: creating include/arch/unix/apr_private.h
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
//生成Makefile
一般常用的有 --prefix=PREFIX 這個選項的意思是定義軟件包安裝到哪里
建議,源碼包都是安裝在/opt/目錄下或者/usr/local/src目錄下面
[root@lnh apr-1.7.0]# make
...
gcc -E -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I./include -I/root/xbz/apr-1.7.0/include/arch/unix -I./include/arch/unix -I/root/xbz/apr-1.7.0/include/arch/unix -I/root/xbz/apr-1.7.0/include -I/root/xbz/apr-1.7.0/include/private -I/root/xbz/apr-1.7.0/include/private export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$/d' >> apr.exp
sed 's,^\(location=\).*$,\1installed,' < apr-1-config > apr-config.out
sed -e 's,^\(apr_build.*=\).*$,\1/usr/local/src/apr/build-1,' -e 's,^\(top_build.*=\).*$,\1/usr/local/src/apr/build-1,' < build/apr_rules.mk > build/apr_rules.out
make[1]: Leaving directory '/root/xbz/apr-1.7.0'
//編譯生成Makefile,此處雖然出現了make[1]: Leaving directory '/root/xbz/apr-1.7.0',但是沒關系可以繼續進行下一步安裝
[root@lnh apr-1.7.0]# make install
...
/usr/bin/install -c -m 755 /root/xbz/apr-1.7.0/build/mkdir.sh /usr/local/src/apr/build-1
for f in make_exports.awk make_var_export.awk; do \
/usr/bin/install -c -m 644 /root/xbz/apr-1.7.0/build/${f} /usr/local/src/apr/build-1; \
done
/usr/bin/install -c -m 644 build/apr_rules.out /usr/local/src/apr/build-1/apr_rules.mk
/usr/bin/install -c -m 755 apr-config.out /usr/local/src/apr/bin/apr-1-config
//進行安裝
[root@lnh apr-1.7.0]# cd /usr/local/src/apr/
[root@lnh apr]# ls
bin build-1 include lib
//進入apr的路徑進行查看,默認情況下,系統搜索庫文件的路徑只有/lib,/usr/lib,我們需要進行修改在/etc/ld.so.conf.d/中創建以.conf為后綴名的文件,而后把要增添的路徑直接寫至此文件中。此時庫文件增添的搜索路徑重啟后有效,若要使用增添的路徑立即生效則要使用ldconfig命令
[root@lnh apr]# cd /etc/ld.so.conf.d/
[root@lnh ld.so.conf.d]# echo /usr/local/src/apr/lib/ >apr.conf
[root@lnh ld.so.conf.d]# cd -
/usr/local/src/apr
//切換到前一個工作目錄
[root@lnh apr]# ldconfig
//使命令生效
[root@lnh apr]# ln -s /usr/local/src/apr/include/ /usr/include/apr
[root@lnh apr]# ll /usr/include/apr/
total 4
drwxr-xr-x. 2 root root 4096 Jul 12 20:18 apr-1
lrwxrwxrwx. 1 root root 27 Jul 12 20:44 include -> /usr/local/src/apr/include/
將頭文件軟鏈接到/usr/include目錄下
折疊
安裝apr-util
[root@lnh xbz]# dnf -y install expat-devel libxml2-devel pcre-devel
//需要先安裝這個依賴
[root@lnh xbz]# ls
apr-1.7.0 apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
[root@lnh xbz]# tar -xf apr-util-1.6.1.tar.gz
[root@lnh xbz]# ls
apr-1.7.0 apr-util-1.6.1 httpd-2.4.54.tar.gz
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz
//解壓到當前目錄
[root@lnh xbz]# cd apr-util-1.6.1/
[root@lnh apr-util-1.6.1]# ls
aprutil.dep CHANGES include NWGNUmakefile
aprutil.dsp CMakeLists.txt ldap README
aprutil.dsw config.layout libaprutil.dep README.cmake
aprutil.mak configure libaprutil.dsp README.FREETDS
apr-util.pc.in configure.in libaprutil.mak redis
apr-util.spec crypto libaprutil.rc renames_pending
apu-config.in dbd LICENSE strmatch
buckets dbm Makefile.in test
build docs Makefile.win uri
build.conf encoding memcache xlate
buildconf export_vars.sh.in misc xml
build-outputs.mk hooks NOTICE
//進入源碼包查看被解壓出來的東西
[root@lnh apr-util-1.6.1]# ./configure --prefix=/usr/local/src/apr-util --with-apr=/usr/local/src/apr
...
configure: creating ./config.status
config.status: creating Makefile
config.status: creating export_vars.sh
config.status: creating build/pkg/pkginfo
config.status: creating apr-util.pc
config.status: creating apu-1-config
config.status: creating include/private/apu_select_dbm.h
config.status: creating include/apr_ldap.h
config.status: creating include/apu.h
config.status: creating include/apu_want.h
config.status: creating test/Makefile
config.status: creating include/private/apu_config.h
config.status: executing default commands
//生成Makefile文件,需要伴隨著上一個指定的依賴
[root@lnh apr-util-1.6.1]# make
...
gcc -E -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I/root/xbz/apr-util-1.6.1/include -I/root/xbz/apr-util-1.6.1/include/private -I/usr/local/src/apr/include/apr-1 exports.c | grep "ap_hack_" | sed -e 's/^.*[)]\(.*\);$/\1/' >> aprutil.exp
gcc -E -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I/root/xbz/apr-util-1.6.1/include -I/root/xbz/apr-util-1.6.1/include/private -I/usr/local/src/apr/include/apr-1 export_vars.c | sed -e 's/^\#[^!]*//' | sed -e '/^$/d' >> aprutil.exp
sed 's,^\(location=\).*$,\1installed,' < apu-1-config > apu-config.out
make[1]: Leaving directory '/root/xbz/apr-util-1.6.1'
//編譯生成的Makefile文件,出現make[1]: Leaving directory '/root/xbz/apr-util-1.6.1'這個沒有關系可以繼續進行下一步安裝
[root@lnh apr-util-1.6.1]# make install
...
See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
/usr/bin/install -c -m 644 aprutil.exp /usr/local/src/apr-util/lib
/usr/bin/install -c -m 755 apu-config.out /usr/local/src/apr-util/bin/apu-1-config
//進行安裝
[root@lnh apr-util-1.6.1]# cd /usr/local/src/apr-util/
[root@lnh apr-util]# ls
bin include lib
//切換到apr-util安裝目錄進行查看,默認情況下,系統搜索庫文件的路徑只有/lib,/usr/lib,我們需要進行修改在/etc/ld.so.conf.d/中創建以.conf為后綴名的文件,而后把要增添的路徑直接寫至此文件中。此時庫文件增添的搜索路徑重啟后有效,若要使用增添的路徑立即生效則要使用ldconfig命令
[root@lnh apr-util]# cd /etc/ld.so.conf.d/
[root@lnh ld.so.conf.d]# echo /usr/local/src/apr-util/ >apr-util.conf
[root@lnh ld.so.conf.d]# cd -
/usr/local/src/apr-util
//切換到上一個工作目錄
[root@lnh apr-util]# ln -s /usr/local/src/apr-util/include/ /usr/include/apr
-util
//將頭文件軟鏈接到/usr/include目錄下
折疊
安裝httpd
[root@lnh xbz]# tar -xf httpd-2.4.54.tar.gz
[root@lnh xbz]# ls
apr-1.7.0 apr-util-1.6.1 httpd-2.4.54
apr-1.7.0.tar.gz apr-util-1.6.1.tar.gz httpd-2.4.54.tar.gz
//解壓到當前目錄
[root@lnh xbz]# cd httpd-2.4.54/
[root@lnh httpd-2.4.54]# ls
ABOUT_APACHE CMakeLists.txt InstallBin.dsp README
acinclude.m4 config.layout LAYOUT README.CHANGES
Apache-apr2.dsw configure libhttpd.dep README.cmake
Apache.dsw configure.in libhttpd.dsp README.platforms
apache_probes.d docs libhttpd.mak ROADMAP
ap.d emacs-style LICENSE server
build httpd.dep Makefile.in srclib
BuildAll.dsp httpd.dsp Makefile.win support
BuildBin.dsp httpd.mak modules test
buildconf httpd.spec NOTICE VERSIONING
CHANGES include NWGNUmakefile
changes-entries INSTALL os
//查看被解壓出來的東西
[root@lnh httpd-2.4.54]# ./configure --prefix=/usr/local/src/httpd --with-apr=/usr/local/src/apr --with-apr-util=/usr/local/src/apr-util
...
config.status: creating build/config_vars.sh
config.status: creating include/ap_config_auto.h
config.status: executing default commands
configure: summary of build options:
Server Version: 2.4.54
Install prefix: /usr/local/src/httpd
C compiler: gcc
CFLAGS: -g -O2 -pthread
CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE
LDFLAGS:
LIBS:
C preprocessor: gcc -E
//生成Makefile文件
[root@lnh httpd-2.4.54]# make
...
/usr/local/src/apr/build-1/libtool --silent --mode=link gcc -g -O2 -pthread -o mod_rewrite.la -rpath /usr/local/src/httpd/modules -module -avoid-version mod_rewrite.lo
make[4]: Leaving directory '/root/xbz/httpd-2.4.54/modules/mappers'
make[3]: Leaving directory '/root/xbz/httpd-2.4.54/modules/mappers'
make[2]: Leaving directory '/root/xbz/httpd-2.4.54/modules'
make[2]: Entering directory '/root/xbz/httpd-2.4.54/support'
make[2]: Leaving directory '/root/xbz/httpd-2.4.54/support'
make[1]: Leaving directory '/root/xbz/httpd-2.4.54'
//編譯生成Makefile文件,出現的一些沒有讀取到的問題沒有關系,繼續進行下一步
[root@lnh httpd-2.4.54]# make install
...
Installing man pages and online manual
mkdir /usr/local/src/httpd/man
mkdir /usr/local/src/httpd/man/man1
mkdir /usr/local/src/httpd/man/man8
mkdir /usr/local/src/httpd/manual
make[1]: Leaving directory '/root/xbz/httpd-2.4.54'
//進行安裝
[root@lnh httpd-2.4.54]# cd /usr/local/src/httpd/
[root@lnh httpd]# ls
bin cgi-bin error icons logs manual
build conf htdocs include man modules
//切換到httpd的安裝目錄進行查看,默認情況下,系統搜索庫文件的路徑只有/lib,/usr/lib
[root@lnh httpd]# ln -s /usr/local/src/httpd/include/ /usr/include/httpd
[root@lnh httpd]# ll /usr/include/httpd
lrwxrwxrwx. 1 root root 29 Jul 12 21:23 /usr/include/httpd -> /usr/local/src/httpd/include/
//將頭文件軟鏈接到/usr/include目錄下
[root@lnh httpd]# echo "export PATH=$PATH:/usr/local/src/httpd/bin" > /etc/profile.d/httpd.sh
[root@lnh httpd]# source /etc/profile.d/httpd.sh
//配置httpd的全局環境變量,并生成效果
[root@lnh httpd]# which httpd
/usr/local/src/httpd/bin/httpd
[root@lnh httpd]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/src/httpd/man
//添加后面這一行
[root@lnh ~]# httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe57:f6f5%ens33. Set the 'ServerName' directive globally to suppress this message
httpd (pid 35719) already running
//啟動服務
[root@lnh ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
//查看端口
[root@lnh ~]# systemctl stop firewalld.service
//關閉防火墻
折疊
服務80端口
源碼編譯報錯信息處理
checking for APR... no
configure: error: APR not found. Please read the documentation.
//解決方案
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-1.7.0.tar.gz
[root@lnh xbz]# wget https://mirrors.aliyun.com/apache/apr/apr-util-1.6.1.tar.gz
提前把這兩個依賴包安裝好才可以進行生成Makefile文件
無法進行生成兩個依賴包的Makefile文件
//解決方案
[root@lnh xbz]# dnf -y install gcc gcc-c++ make wget
提前下載編譯工具
init程序的三種風格
- SysV?格:init(centos5),實現系統初始化時,隨后的初始化操作都是借助于腳本來實現的,(/etc/inittab)
- Upstart風格:init(centos6),由ubuntu研發的,通過總線形式以接近于并行的方式工作,效率比SysV高,配置文件(/etc/inittab,/etc/init/*.conf)
- Systemd風格:systemd(centos7),啟動速度快,系統引導時實現服務并行啟動,比前兩者的效率都高,配置文件(/usr/lib/systemd/system,/etc/systemd/system)
init程序三種風格的特點
SysV?格特點:
- 腳本中含有大量的命令,每個命令都要啟動一個進程,命令執行完以后就要終止這個進程。如此一來,系統初始化時將大量的創建進程,銷毀進程,工作效率會非常低
- 服務間可能會存在依賴關系,必須嚴格按照一定的順序來啟動服務,前一個服務沒啟動完后面的服務就無法執行啟動過程。不能并行進行
Upstart風格特點:
- 基于總線方式能夠讓進程間互相通信的一個應用程序
- 不用等服務啟動完成,只要一初始化就可以把自己的狀態返回給其他進程
Systemd風格特點:
- 啟動速度比SysV和Upstart都快
- 不需要通過任何腳本來啟動服務,systemd自身就可以啟動服務,其本身就是一個強大的解釋器,啟動服務時不需要sh/bash的參與
- systemd不真正在系統初始化時去啟動任何一個服務只要服務沒用到,它告訴你啟動了,實際上并沒有啟動。僅當第一次去訪問時才會真正啟動服務
原文鏈接:https://www.cnblogs.com/tushanbu/archive/2022/07/13/16473452.html
相關推薦
- 2022-07-29 Linux文件系統介紹_linux shell
- 2022-05-01 python保存圖片的四個常用方法_python
- 2022-03-27 深入理解C++內聯函數_C 語言
- 2023-01-01 C語言用fun函數實現兩個數的交換方式_C 語言
- 2023-02-27 plt.subplot()參數及使用介紹_python
- 2022-12-06 詳解從ObjectPool到CAS指令_C#教程
- 2022-07-14 python倒序for循環實例_python
- 2022-07-20 C語言詳細講解while語句的用法_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支