源碼編譯安裝httpd服務

1 概述

很多軟件沒有發布rpm包,而是直接發布了源碼,好處是這樣能兼容更多的平臺,但是,用戶需要對源碼進行編譯后安裝。利用工具make將源碼生成二進制文件。

本文主要講解了對httpd進行編譯安裝。分別介紹centOS6和centOS7兩個系統版本上httpd的安裝

2 CentOS6編譯安裝httpd

下載httpd-2.2.34.tar.bz2這個安裝包到centOS6,一般建議把軟件包放在路徑/usr/local/src這個路徑下。

解開該壓縮文件 tar -xvf httpd-2.2.34.tar.bz2。

接下來,要用make來變成C程序的文件。解壓后的目錄下,默認還沒有Makefile這個文件,該文件用來記錄如何編譯該軟件,安裝在哪個路徑下,哪些軟件功能啟用,哪些功能不啟用。這個就是體現了源碼編譯安裝的靈活度,可以定制功能。Makefile是通過configure這個工具來生成的,由源碼發布者提供。

Makefile 是configure工具借助Makefile.in這個模板來生成的文件


C語言源代碼編譯安裝三步驟:

1、./configure

(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成Makefile

(2) 檢查依賴到的外部環境,如依賴的軟件包

2、make 根據Makefile文件,構建應用程序

3、make install 復制文件到相應路徑


有些情況下,沒有configure文件,可以通過autoconf生成configure腳本,automake這個工具用來生成Makefile.in這個文件,一般這兩個文件由開發者生成發布。

configure腳本支持大量的選項,根據不同的選項來生成Makefile文件

安裝開發包組,這個是編譯開發軟件要用到的工具。建議都要安裝。這個包組安裝完成后,可能在編譯過程還需要用到其他工具,具體情況根據缺失提示信息再安裝對應的開發包。


configure要指定安裝目錄,--prefix=PREFIX 指定軟件包的安裝路徑,如果沒有指定,則是按照默認的路徑安裝。

運行如下語句,生成Makefile文件


./configure --prefix=/sunny/httpd66 --sysconfdir=/etc/httpd66 --enable-ssl


運行語句,發現如下報錯,一般這種是缺失相應的開發包,比如提示OpenSSL缺失,就另行安裝openssl-devel這個包。一般的包就是提示缺失的名字后加devel這種包就是了。不同的軟件缺失的插件不一樣,根據實際情況安裝軟件包。

圖一 configure報錯

該步驟完成后,除了生成Makefile這個文件外,還會生成其他相關的文件。

執行make,這里根據軟件的大小決定了編譯時間的長短,電腦性能好的話,編譯時間會明顯縮短。編譯完成后 ,會生成新的文件


make


執行make install 開始安裝


make install


到這里,httpd軟件安裝成功。接下來需要對軟件進行啟動以及配置。

如果這里有指定軟件的安裝路徑,則到對應路徑的/bin目錄下開啟軟件,如本實驗中路徑是/sunny/httpd66/bin/apachectl,但是這樣的操作比較麻煩,建議直接在/etc/profile.d目錄下生成文件,寫入該路徑,這里建議把路徑放在前面,因為系統里有一個路徑和這個服務一樣,會先匹配執行前面的


echo 'export PATH=/sunny/httpd66/bin:$PATH' > /etc/profile.d/httpd66.sh

. /etc/profile.d/httpd66.sh ? //運行該文件,使得路徑生效


這里有個小細節,用單引號,不會展開PATH這個變量,比較好看,如果用雙引號,則會展開變量,路徑比較長,而且路徑已經被固定了,但是,在這里兩個寫法都是正確的寫法,結果如下圖

圖二 單引號和雙引號的區別

啟動apache服務


apachectl start


驗證一下,ss -ntl ?查看80端口是否打開,如果打開就可以去通過網頁打開。

由于編譯時指定了路徑,這里如果要改變瀏覽器首頁的信息,可以到路徑/sunny/httpd66/htdocs/ 更改index.html這個文件。

如果要使用man幫助查看httpd的相關信息,需要把軟件的man文檔路徑加入到man的配置文件里執行如下語句


vim /etc/man.config

MANPATH /sunny/httpd66/man ? //添加文件安裝指定路徑下的man路徑


到這里為止,httpd編譯完成,服務可以正常啟用

3 一鍵安裝apache代碼

以下是在centOS6上一鍵編譯安裝apache的腳本


#!/bin/bash

# ----------------+---------------------------------------+

# * Author? ? ? ? : Sunny

# * Email? ? ? ? : 951408320@qq.com

# * Create time? : 2017-08-08

# * Last modified : 2017-08-08

# * Filename? ? ? : httpd.sh

# * Description? : Auto install apache for centOS6

# * version? ? ? : 1.0

# ----------------+---------------------------------------+

#定義變量

export httpdpkg=`find? / -name "httpd-2.2.34.tar.bz2" | head -1`

echo "httpdpkg is? $httpdpkg"

export pkgnu=`find? / -name "httpd-2.2.34.tar.bz2" | wc -l`

echo "pkgnu is $pkgnu"

export httpdir="/usr/local/src/httpd-2.2.34"

#解壓httpd服務包

case $pkgnu in

0)

cd /usr/local/src? ;

wget http://apache.fayea.com/httpd/httpd-2.2.34.tar.bz2;

tar xvf httpd-2.2.34.tar.bz2;

;;

*)

tar xvf $httpdpkg -C /usr/local/src/ &>/dev/null ;

;;

esac

#安裝編譯

[ -d $httpdir ] && cd $httpdir || echo "httpdir is not exist.please check"

echo "You are in `pwd` now"

yum grouplist "development tools" &>/dev/null|| yum -y groupinstall "Development Tools" &>/dev/null || echo "Devel tools is install"

rpm -q apr-devel &>/dev/null || yum -y install apr-devel &>/dev/null;

rpm -q apr-util-devel &>/dev/null || yum -y install apr-util-devel &>/dev/null;

rpm -q openssl-devel? &>/dev/null || yum -y install openssl-devel &>/dev/null;

rpm -q gcc &>/dev/null ||yum -y install gcc &>/dev/null;

#因為編譯過程可能會缺失各種工具包,所以這里不隱藏編譯過程,如果有問題,可以及時發現解決

./configure? --prefix=/sunny66/httpd66 &>/dev/null;

[ $? = 0 ] &&? make &>/dev/null|| echo "Please check configure"

[ $? = 0 ] && make install &>/dev/null || echo "Please check make";

[ $? = 0 ] && echo " httpd is successful install" || echo "Warning,install is failure,Please check make install"

#簡單的初始化配置,注意是添加apache的bin路徑到PATH

echo 'export PATH=/sunny66/httpd66/bin:$PATH' > /etc/profile.d/httpd22.sh

. /etc/profile.d/httpd22.sh && echo "Now PATH is $PATH"

echo "MANPATH /sunny66/sunny66/man" >> /etc/man.config;

echo "ServerName localhost:80" >>/sunny66/httpd66/conf/httpd.conf

sed -i 's/It works!/Welcome to Sunny Home/g' /sunny66/httpd66/htdocs/index.html

apachectl start;

#關閉防火墻和selinux

setenforce 0;

iptables -F;

#檢查端口狀態

ss -ntl | grep 80;

[ $? = 0 ] && echo "httpd is success.you can open web to check" || echo "Apache do not start"

#解除變量

unset httpdpkg;

unset pkgnu;

unset httpdir;

echo "Congratulation";

exit 0;


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容