星期四, 1月 26, 2017

Docker Volume + SELinux

在 Jenkins 的 Docker 官網首頁有一個參數引起我的興趣:
  • docker run -v /srv/jenkins:/var/jenkins_home jenkins
大意是說 Container 裡原本有個必要、可讀寫的 /var/jenkins_home 目錄,我們可以把它拉出來方便管理。太棒了!但一試之下發現不單純:
  • Permission denied
原來 /srv/jenkins 目錄是要先建好並授權:
  • sudo mkdir /srv/jenkins
  • sudo chown `whoami` /srv/jenkins
結果還是一樣?原來是 SELinux 的關係。在 CentOS 預設是開啟 SELinux 的,可以這麼確認:
  • getenforce
短期(到下次重啟前)的控制,可透過 setenforce 指令;長期就要編輯 /etc/sysconfig/selinux 設定檔並重啟。若不想關閉 SELinux,還要多些準備工夫:
  • docker run -v /srv/jenkins:/var/jenkins_home:Z jenkins
最後面的大寫 Z 代表「只有 Host 與那個 Container 分享」,若改小寫 z 代表「Host、那個 Container、其他 Container 都可分享」。

星期一, 1月 23, 2017

Owncloud Maximum upload size

新的 9.x 在管理介面上有個很貼心的設定,直接就可以設最大上傳檔案的大小,不過沒用?關鍵是上傳 30 秒之後超過了一個 PHP 的 max_execution_time 設定,若是像我一樣用 Docker-based ownCloud,Web Server 是 Apache,可以在 .htaccess 改成 0 代表沒有上限。
這個過程曲曲折折,主要是對 PHP + Apache 不熟,雖然這篇提到的 phpinfo.php 非常有用,不過被這篇的參數誤導很久,它建議:
  • max_input_time 3600
  • max_execution_time 3600
那如果想讓兩個都沒上限,從 phpinfo.php 看到原來的設定:
  • max_input_time -1
想當然爾,另一個這麼改:
  • max_execution_time -1
就在這裡落入陷阱。雖然不一致,但正確的是:
  • max_execution_time 0

Docker-based SonarQube can't change to non-embedded database?

依據 SonarQube 的說法,換掉預設的內嵌式資料庫並不困難,重點有以下幾個:
  • 準備空的資料庫
  • 準備權限足夠的一組帳密
  • 設定資料庫所在主機的網路接受外部連入(防火牆、資料服務)
  • 修改 conf/sonar.properties
一但所有條件都準備好,放眼設定檔,應該也只有三行要改(以 MySQL 為例):
  • sonar.jdbc.url=
  • sonar.jdbc.username=
  • sonar.jdbc.password=
但最近在試 SonarQube 6.2 來自於 Docker 的版本,自認以上都熟,但還是一直不成功?原來 docker inspect sonarqube 可看到以下段落:
  • [
  •     {
  •         ...
  •         "Config": {
  •             ...
  •             "Env": [
  •                 ...
  •                 "SONARQUBE_JDBC_USERNAME=sonar",
  •                 "SONARQUBE_JDBC_PASSWORD=sonar",
  •                 "SONARQUBE_JDBC_URL=",
  •                 ...
這裡的設定優先權高於 conf/sonar.properties,所以只能在第一次執行時加設環境變數才有效,如:
  • docker run -d -e "SONARQUBE_JDBC_URL=..." sonarqube

星期六, 1月 14, 2017

Compile Error CS1012

原本一個使用 C# 撰寫,確定可以編譯成功的專案,沒改任何程式碼,換了新的編譯環境後竟然失敗?
  • error CS1012: Too many characters in character literal
依據官方說法,單引號裡只能包一個字元,不能是字串(字元陣列)。但確實沒改程式碼,怎會字元變字串?來看一下程式:
  • string[] fixflds = fixfld.Split('、');
原來是中文全形符號,在 Big5 編碼算一個字元,但英文版作業系統會當做兩個字元。那要如何在編譯時指定 Big5 編碼?在此之前,我們可能要知道怎麼看「目前的編碼」?
  • C:\>chcp
  • Active code page: 437
試著改改看
  • C:\>chcp 950
  • Invalid code page
失敗了,難道只有換中文版作業系統可以嗎?還是偷懶一點補裝個中文語系?其實遠比這些簡單,在「地區設定」、「管理」可以變更 Language for non-Unicode programs 為 Chinese (Traditional, Taiwan),就可以改變編碼,讓編譯成功了。

星期三, 1月 11, 2017

ldapsearch

在練習對 ldap 查詢時,可以好好利用這裡介紹的測試伺服器(雖然不一定活著?)。首先要確認域名解析是否成功?
  • ping ldap.forumsys.com
網路能否連上?
  • ldapsearch -h ldap.forumsys.com -x
如果回應看起來是連到了主機,但沒有結果,可能是上面的寫法隱含著 -s sub -b "" 的關係,所以先別貪心:
  • ldapsearch -h ldap.forumsys.com -x -s base
可以了,再指定搜尋起點往下挖:
  • ldapsearch -h ldap.forumsys.com -x -b dc=example,dc=com
若運氣不錯,會得到幾筆資料。但不是所有地方都接受匿名查詢,所以也許需要表明身分:
  • ldapsearch -h ldap.forumsys.com -D cn=read-only-admin,dc=example,dc=com -w password -b dc=example,dc=com
嫌資料太多嗎?可以過濾:
  • ldapsearch -h ldap.forumsys.com -x -b dc=example,dc=com ou=*
另外遇到過一些範例建議各項參數前後要包雙引號的,例如 -b "dc=example,dc=com";或者大小寫比較講究,像是 DC=example,DC=com;也有帳號是郵件位址的,類似 admin@example.com,因為才疏學淺實在不敢亂寫,就請讀者們多多嘗試一番。

[2017/02/17]
要確認密碼,可這麼做:
  • ldapwhoami -h ldap.forumsys.com -D cn=read-only-admin,dc=example,dc=com -w password