星期三, 2月 14, 2018

DNS SRV record missing

在 CentOS 7 新裝的 Openfire 有這樣的問題

點進去看到的是

意思是 Openfire 本身希望能找到最下面兩行類似的資訊,所以來幫忙如願即可。首先需要安裝名稱解析伺服器:
  • sudo yum install bind bind-utils
裝好後先增加設定,依據網域名稱(假設是 acme.com)修改 /etc/named.conf,增加以下幾行新增一個區域:
  • zone "acme.com" {
  •     type master;
  •     file "/etc/named/acme.com.hosts";
  • };
依據該主機名為 openfire.acme.com,IP 位址為 10.1.2.3,管理者郵件位址為 root@mail.acme.com 的前提,再新增這個區域的設定檔 /etc/named/acme.com.hosts,內容如下:
  • $ORIGIN acme.com.
  • @ IN SOA openfire root.mail (
  • 180214 ; serial
  • 21600 ; refresh after 6 hours
  • 3600 ; retry after 1 hour
  • 604800 ; expire after 1 week
  • 86400 ) ; minimum TTL of 1 day
  • IN NS openfire
  • openfire IN A 10.1.2.3
  • _xmpp-client._tcp 86400 IN SRV 0 5 5222 openfire
  • _xmpp-server._tcp 86400 IN SRV 0 5 5269 openfire
其實最後兩行就是照抄管理介面上的提示,要特別注意的是很多結尾處的 . 不可省略。接著啟動服務並測試看看:
  • systemctl start named
  • nslookup -type=srv _xmpp-client._tcp.acme.com
如果找不到,可以試試指定本機擔任名稱伺服器:
  • nslookup -type=srv _xmpp-client._tcp.acme.com localhost
若這樣才行,代表預設的名稱伺服器在別處,不是剛裝的這套,可以修改 /etc/resolv.conf 以解決。

星期日, 2月 04, 2018

application as a service on CentOS 6 / 7

在部署要求中,常會希望某個指令啟動的應用程式,不會因重開機而停止服務。以 Single Sign-On CAS 為例,若在 CentOS 6,可參考這篇準備以下內容的 /etc/rc.d/init.d/<serviceName>:
  • #!/bin/bash
  • # chkconfig: 35 90 10
  • # description: CAS server

  • . /etc/init.d/functions

  • SERVICE=cas
  • WORKDIR=/opt/$SERVICE
  • LOCK=/var/lock/subsys/$SERVICE

  • start() {
  •   cd $WORKDIR
  •   /usr/bin/java -jar cas.war &
  •   touch $LOCK
  • }

  • stop() {
  •   killproc $SERVICE
  •   rm -f $LOCK
  • }

  • case "$1" in
  •   start)
  •     start
  •     ;;
  •   stop)
  •     stop
  •     ;;
  •   status)
  •     status $SERVICE
  •     ;;
  •   restart)
  •     stop
  •     start
  •     ;;
  •   *)
  •     echo "Usage: $0 {start|stop|restart|status}"
  •     exit 1
  • esac

  • exit 0
下指令載入為服務:
  • chmod +x /etc/rc.d/init.d/<serviceName>
  • chkconfig --add <serviceName>
  • service <serviceName> start
若是 CentOS 7 環境下,似乎更簡單一些,準備 /etc/systemd/system/<serviceName>.service
  • [Unit]
  • Description=CAS Service
  • After=network.target
  • [Service]
  • WorkingDirectory=/opt/cas
  • "ExecStart=/usr/bin/java -jar cas.war"
  • Restart=on-failure
  • [Install]
  • WantedBy=multi-user.target
下指令載入為服務:
  • chmod +x /etc/systemd/system/<serviceName>.service
  • systemctl enable <serviceName>
  • systemctl start <serviceName>