今天打算試試yaws,這是一個使用erlang實現的web服務器,參照blog:
http://yarivsblog.com/articles/2006/07/12/the-hitchhiker
首先需要安裝erlang環境,windows和linux下都有,但yaws好像只給了個linux下的安裝文件,于是在ubuntu6.06上安裝。
從erlang主頁www.erlang.org上下載源碼,編譯步驟:
tar -xzvf xxx.tar.gz
cd xxx
sudo ./configure
(sudo make clean)#可選的,用于非首次編譯的情況
sudo make
sudo make install (as root)
但configure時出錯:(類似如下)
configure: error: No curseslibraryfunctions found
There is a problem with $ERL_TOP/erts/configure not passing the LDFLAGS
environment variable for test compiles, so ALL library tests fail. I
modified files $ERL_TOP/erts/aclocal.m4 and $ERL_TOP/configure.in in order
to locate pthread_create in the standard C runtime library. The
$ERL_TOP/configure.in produces a configure that works, wheras the
$ERL_TOP/erts/configure.in does not. At the top of file erts/configure.in:
AC_PREREQ(2.13)
AC_INIT(vsn.mk)
應該是一些curses庫沒有安裝,但apt-get install curses提示找不到,google了一下發現需要安裝
ncurses-devel包,在網上只找到了相應的rpm包,使用alien命令,將rpm保轉換為deb包安裝:
sudo apt-get install alien
sudo?alien?*.rpm,轉成deb后,用dpkg?-i?*.deb
或者
sudo?alien?-i?*.rpm
進行安裝
(注意,下載rpm包的時候我將包改名了,導致alien時出錯,改成原來的名字就正常了,不知道為什么:P)
這時候cofigure可以過去了,但make又出錯了,提示erlc找不到,類似如下的錯誤信息:
erlc -W +debug_info -I../include -o../ebin otp_ring0.erl
make[4]: erlc: Command not found
make[4]: ***[../ebin/otp_ring0.beam]Error127
make[4]: Leaving directory `/usr/src/packages/erlang-10.b.5/lib/kernel/src'
make[3]: *** [/usr/src/packages/erlang-10.b.5/lib/kernel/ebin/otp_ring0.beam] Error 2
make[3]: Leaving directory `/usr/src/packages/erlang-10.b.5/erts/emulator'
make[2]: *** [generate] Error 2
make[2]: Leaving directory `/usr/src/packages/erlang-10.b.5/erts/emulator'
make[1]: *** [depend] Error 2
make[1]: Leaving directory `/usr/src/packages/erlang-10.b.5'
make: *** [build-stamp] Error 2
make: *** [debs] Error 2
看網上有介紹說使用make clean并不完全,
于是將源碼刪除,重新解壓縮,再configure后,make,沒有提示erlc找不到了,又有提示類似如下的錯誤信息:
> otp_src_R11B-1/lib/kernel/ebin/erlang.beam > i686-pc-linux-gnu/preload.c
> m4 -DTARGET=i686-pc-linux-gnu -DOPSYS=linux -DARCH=x86 hipe/
> hipe_x86_asm.m4 > i686-pc-linux-gnu/opt/plain/hipe_x86_asm.h
> /bin/sh: m4: command not found
> make[2]: *** [i686-pc-linux-gnu/opt/plain/hipe_x86_asm.h] Error 127
> make[2]: Leaving directory `/home/jhancock/otp_src_R11B-1/erts/emulator'
> make[1]: *** [generate] Error 2
> make[1]: Leaving directory `/home/jhancock/otp_src_R11B-1/erts/emulator'
> make: *** [depend] Error 2
這是m4包沒有找到(http://www.erlang.org/pipermail/erlang-questions/2006-November/023942.html)
安裝m4包后,繼續make出現如下錯誤:
hipe/hipe_mkliterals.c:351: error: 'X86_LEAF_WORDS' undeclared here (not in a function)
hipe/hipe_mkliterals.c:352: error: 'X86_NR_ARG_REGS' undeclared here (not in a function)
網上搜索結果:http://forum.trapexit.org/viewtopic.php?t=6815
將源碼刪除,再解壓縮 再make終于過去了
提示:如下的包最好是在erlang安裝之前就安裝好的: perl, debhelper (>= 4.0.0), autoconf (>= 2.50),
openssl, libssl-dev, m4, libncurses5-dev, dpatch, autotools-dev,
unixodbc-dev
make過程大概有1個小時,之后是make install很快。
打開終端,輸入erl,出現提示符1>
后面將yaws的安裝和使用
yaws的安裝挺簡單的,主要是他的編譯是基于erlang的。
需要注意的是,安裝好后,如果沒有安裝相應的ssl模塊的話,需要更改一下conf文件,將其中關于ssl的部分注釋掉,既如下部分:
<server xxx>
????? ....
??? ??? ? <ssl>
??? ?? ?? ?? ?? ...
??? ?? ?? </ssl>
</server>
在windows下的安裝,在yaws的主頁上有說明,需要下載一個bat文件,不過這個文件好像有問題,需要將一些安裝的環境變量改一下,在(SET ERLC_FLAGS=)這行之后添加:
SET ProgramFiles=G:\erlang\yaws\yaws_program
SET HOME=G:\erlang\yaws\yaws_data
SET APPDATA=G:\erlang\yaws\yaws_configure
ProgramFiles 為yaws的程序位置,HOME為yaws的數據位置,包括www,log,wiki,ssl等,APPDATA為yaws的配置位置。
如果使用默認安裝參數的話,需要將IF NOT DEFINED ProgramFiles SET ProgramFiles="c:\Program Files"和
HOME="%HOMEDRIVE%%HOMEPATH%\My Documents"中的雙引號去掉(感覺這個bat文件寫的比較亂)
同時不要忘了,在安裝好之后注釋掉conf文件中關于ssl的部分。
安裝好后,默認就可以在%home/www目錄或者/tmp(windows下為%home%\www? or C:\tmp)目錄添加yaws文件(ehtml)來顯示了。
btw:如果在ubuntu or debian上安裝,最簡單,只要apt-get install yaws 就可以了。運行yaws需要root權限。