源码编译安装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 #?*?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;轉載于:https://blog.51cto.com/ghbsunny/1955019
總結
以上是生活随笔為你收集整理的源码编译安装httpd服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用sql 全记录(添加中)
- 下一篇: C# 继承