星期五, 12月 02, 2016

Break Same-origin policy by Nginx

HTML 5 愈來愈成熟,可預見的未來不再容許 ActiveX 的存在,替代方案是 WebSocket 或類似的架構,說穿了就是把一些髒事有安全疑慮的工作交給本機的一個輕量化 Web Server 處理。

不過「同源政策」又出來搗亂了,因為網頁所在伺服器與瀏覽器本來就不該一樣,而我能拿到的一個 ActiveX 替代方案參考實作,又偏偏不開放 Access-Control-Allow-Origin 這個表頭(一定是故意!),沒關係,請 Nginx 來助陣,設定如下:


如此一來,原先在 JavaScript 存取 http://localhost:61161 受到同源政策拘束的問題,改往 http://localhost:6116 即可解決。

星期二, 11月 29, 2016

VirtualBox Windows Guest + USB SmartCard Reader

不需要安裝 Guest Additions,但步驟如下可能會順利許多:
  1. 安裝 Windows Guest VM,關機。
  2. 插上讀卡機,在 VM USB (ver. 1.1 / 2.0) 設定勾選該裝置。
  3. 拔除讀卡機。
  4. 開啟 Windows Guest VM,開機完成再插入讀卡機。

Ping VirtualBox Windows Guest Fail?

想從 VirutalBox Host ping 到 Windows Guest?兩個條件:
  • VirtualBox Settings -> Network -> Host-only Adapter
  • Windows Guest Firewall -> Inbound Rules -> Virtual Machine Monitoring (Echo Request - ICMPv4-In / ICMPv6-In) -> Profile: Public / All -> Enable

星期四, 11月 24, 2016

Java 8 + JBoss 4.x + JSP

要安裝 JBoss 4.x,可先在下載,解壓縮即可。解壓後的目錄在下文以 <JBoss_Home> 表示。

啟動指令是 <JBoss_Home>/bin/run.sh -b <hostName_or_IP> &,如果省略 -b binding 的部份也可以,就只會允許伺服器本機的來源訪問;如果省略尾巴的 & 也可以,就變成前景執行(好像比較難管)?

停機指令是 <JBoss_Home>/bin/shutdown.sh -S -s <hostName_or_IP>,-s 的部份可省略,視如何開啟決定。

JBoss 4.x 接受 .war 熱部署,也就是把檔案直接丟 <JBoss_Home>/server/default/deploy 即可。

重點來了:如果底下是 Java 8 的話,.war 裡面的 JSP 如果有用到字串取代,在編譯時會拋出以下的錯誤:
依據這篇文章的說法,改 Java 7 即可解決。在安裝 Java 7 之後的程序如下:
怪的是,若再改回 Java 8 也不會有錯?其實原因在編譯結果已存在 JBoss 的其他位置,所以若將 JBoss 重新解壓縮到另一個目錄,那邊的 JSP 仍然會有問題。

星期六, 11月 19, 2016

Alpine quick start

因為 Docker 的關係,才注意到 Alpine 這種超輕量級的 Linux 最近很紅,以下紀錄一些初探的心得。

首先由官網下載 ISO,開機過程中有些問題要回答,大部份依照預設值即可。值得注意的是:
  • 首次登入的帳號是 root,無需密碼。
  • 登入後第一個命令在提示訊息也可看到:setup-alpine。
  • 網路必須要通,依預設會用 dhcp 連外。
  • 在意時區的話,可輸入 Asia/Taipei。
  • 鏡像站 mirror 的選擇,可依預設讓每一個都測試過反應時間,自動挑最快的。
  • 除非當作 LiveCD 用,可以一直按 enter 依預設值下去。若要安裝在硬碟的話,還是必須選擇裝在 sda 之類的裝置上,接著「如何使用」請回答 sys,為了要清除舊磁區內容還必須再回答 y。
  • 這階段完成會提示要 reboot,請先移除光碟再重啟。
重啟之後用新的帳密登入,接著來認識這個陌生的套件管理系統 apk:
  • 以 openjdk 為例,指令 apk search openjdk 搜尋沒有結果。
  • vi /etc/apk/repositories 可看到先前實測過最快的鏡像站,並且預設只接受官方套件,在此試著修改以增加社群等其他來源,存檔。
  • 執行 apk update,再次搜尋 openjdk 就有結果。
  • 執行 apk add openjdk8-jre (不需完整套件名稱)即可安裝。
  • 詳細列表可參考這裡,不過這裡的搜尋條件要用 openjdk* 的型式。
任務完成,Alpine 沒有 shutdown,請改用 poweroff。

Jenkins farm on Docker

單獨一部 Docker based Jenkins 不稀奇:
  • docker run -d --name jenkins -p 80:8080 jenkins
假設開起來了,查一下配到的 IP:
  • docker inspect jenkins | grep IPAddress
這裡得到的結果是 172.17.0.2,用瀏覽器訪問 http://localhost 與 http://172.17.0.2:8080 的結果應該是一樣的,我們用後者。首先需要 Unlock Jenkins。在 Terminal 下指令:
  • docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword
再把結果複製,貼到網頁裡,接著裝一下眾插件,設好管理帳號,Jenkins Standalone 就可以用了。

接下來要準備讓 Slave 掛上來,首先在 Jenkins 管理介面建一個新 Node,假設取名為 slave1,並設定 Remote root directory 為 /var/opt/jenkins,存檔,再點進去,畫面會像這樣:



點選超連結下載 slave.jar 並移到新建的 ~/share 目錄,然後在 Terminal 下指令:
  • docker run -d --name slave -v ~/share:/var/opt/jenkins:Z -w /var/opt/jenkins java:8-jre-alpine java -jar slave.jar -jnlpUrl http://172.17.0.2:8080/computer/slave1/slave-agent.jnlp -secret 1689af1c531a13800eff7b69113622c383d30b218cf7d28fea1322b3faf651b4
請注意不要抄我的密文,要與網頁上的一致,就能看到最輕量級的 Jenkins Slave 已在待命。

[2016/11/27]
補充不在 Docker 又限制 https,若憑證是自簽或沒有預設信任的狀況下,當然增加信任根憑證是治本之道,不過也可以應急:
  • java -jar slave.jar -jnlpUrl https://172.17.0.2:8080/computer/slave1/slave-agent.jnlp -secret 1689af1c531a13800eff7b69113622c383d30b218cf7d28fea1322b3faf651b4 -noCertificateCheck

星期三, 11月 16, 2016

Building dynatrace easyTravel from Source

  1. 在 dynatrace 官網下載 easyTravel 的原始碼壓縮檔,假設解壓目錄名為 ~/Downloads/dynatrace-easytravel-src。
  2. 安裝 Java、Ant。
  3. 編輯 /etc/hosts,為本機增加一個名稱,例如 osboxes。
  4. 切換至 ~/Downloads/dynatrace-easytravel-src/Distribution 目錄,執行 ant 命令,將產生 dist 子目錄放置編譯結果。
  5. 編輯 dist/startDistribution.sh,找到一行「export WEBLAUNCHER=set-this-property」,改為「export WEBLAUNCHER=osboxes」,存檔並執行,即會出現 easyTravel 的網頁管理介面。
  6. 在管理介面關閉 Mobile 相關的前端,也不要自動產生模擬流量,以節省資源。
  7. 在管理介面啟動 Production -> Standard 模式,注意資料庫必須正常運作,否則請檢查紀錄並排除問題。
  8. Credit Card Auth. (C++) 啟動失敗可以忽略,另外兩項在啟動過程中逾時,事實上已在提供服務。若在意的話,停止再啟動應能成功,否則請檢查紀錄並排除問題。
  9. 透過瀏覽器登入,帳密可用 afrida / afrida,網頁應會回應「Hello Afrida Afwika!」。