2017-11-23

Install NaviServer on openSUSE

NaviServer is a high performance web server written in C and Tcl. NaviServer 是 AOLserver 的分支。

如果要自己手動安裝:

./configure --prefix=/var/lib/naviserver --with-tcl=/usr/lib64 --with-zlib=/usr/lib64 --with-openssl=/usr/lib64
make
sudo make install

如果在 make 的時候遇到 -fstack-protector-strong 或者是 -fstack-clash-protection 無法辨識的問題, 修改 include/Makefile.global, 將 -fstack-protector-strong 或者是 -fstack-clash-protection 改為 -fstack-protector。 這是編譯套件時 GCC 新舊版本不同所造成的狀況。

sed -i s/stack-protector-strong/stack-protector/g include/Makefile.global
sed -i s/stack-clash-protection/stack-protector/g include/Makefile.global

NaviServer 預設的使用者是 nsadmin,所以需要使用下列的指令來增加使用者:

sudo useradd -r -c 'NaviServer' -d/var/lib/naviserver -U -M -s/bin/bash nsadmin

再來需要修改 NaviServer 目錄的擁用者設定,修改擁有者 user:group 為 nsadmin:nsadmin。

sudo chown -R nsadmin:nsadmin /var/lib/naviserver

再來要設定 nsadmin 帳號的密碼,使用 passwd 改變 nsadmin 使用者的密碼:

sudo passwd nsadmin

再來是執行 NaviServer

sudo -i -u nsadmin  /var/lib/naviserver/bin/nsd -f -t /var/lib/naviserver/conf/nsd-config.tcl

再來瀏覽 http://localhost:8080/,如果出現 NaviServer 的訊息就表示成功了。

/var/lib/naviserver/conf 下還有其它的設定範例,包含 openacs-config.tcl, sample-config.tcl, simple-config.tcl, 也可以用來參考。

因為希望使用 80 port 與 443 port,所以修改 nsd-config.tcl:

dict set defaultConfig ipaddress   "127.0.0.1 ::1"
dict set defaultConfig httpport    80
dict set defaultConfig httpsport   443
dict set defaultConfig nscpport    ""
dict set defaultConfig home        [file dirname [file dirname [info nameofexecutable]]]
dict set defaultConfig hostname    localhost
dict set defaultConfig pagedir     {$home/pages}
dict set defaultConfig logdir      {$home/logs}
dict set defaultConfig certificate {$home/certificates/server.pem}
dict set defaultConfig vhostcertificates {$home/certificates/certificates}

如果要檢查設定是否格式正確,使用下列的指令(加上 -T),在檢查是否有打字錯誤時很有用:

/var/lib/naviserver/bin/nsd -t /var/lib/naviserver/conf/nsd-config.tcl -T

openSUSE 的 systemd service 檔案放在 /usr/lib/systemd/system,加入 nsd.service

[Unit]
Description=NaviServer
After=network.target
#After=network.target postgresql.service
#Wants=postgresql.service
 
[Service]
Type=forking
PIDFile=/var/lib/naviserver/logs/nsd.pid
Environment="LANG=en_US.UTF-8"
# In case, a site is using Google Perfortools malloc with the system-malloc patch for Tcl:
# Environment="LD_PRELOAD=/usr/lib/libtcmalloc.so"
ExecStartPre=-/bin/rm -f /var/lib/naviserver/logs/nsd.pid
 
# Standard startup with a privileged port
ExecStart=/var/lib/naviserver/bin/nsd -u nsadmin -g nsadmin -t /var/lib/naviserver/conf/nsd-config.tcl \
-b 127.0.0.1:80,[::1]:80#2,127.0.0.1:443,[::1]:443#2
 
Restart=on-abnormal
KillMode=process
 
[Install]
WantedBy=multi-user.target

讓 systemctl 重啟 daemon 並且重新載入設定:

sudo systemctl daemon-reload

啟動 nsd.service:

sudo systemctl start nsd.service

查詢 nsd.service:

sudo systemctl status nsd.service

停止 nsd.service:

sudo systemctl stop nsd.service

重新啟動 nsd.service:

sudo systemctl restart nsd.service

以上手動安裝的部份。在知道怎麼手動安裝以後,我就寫了 script 來產生 RPM 檔案,成果請看 naviserver-spec

沒有留言: