星期三, 10月 26, 2016

Docker-based SonarQube

首先當然是要把 Docker 裝好,再來照這裡的說明只要一行指令:
  • docker run -d --name sonarqube1 -p 9000:9000 sonarqube
裝好了,要等個幾分鐘才開得起來。若是急性子可下指令觀察進度:
  • docker logs sonarqube1
用瀏覽器連要記得加上埠號 http://sonarqube1:9000。接著就再看看有什麼變化,例如希望使用者不需要加埠號即可訪問,改個設定就好(其實是另開新機):
  • docker stop sonarqube1
  • docker rm sonarqube1
  • docker run -d --name sonarqube2 -p 80:9000 sonarqube
SonarQube 是未登入即可看到內容,但管理者登入後才能設定,預設帳密都是 admin。在 SystemInfo 看到時區是錯的?可以參考這篇調整,但指令要在 container 裡面下:
  • docker exec -it sonarqube2 sh
另外,在首頁有提醒「Embedded database should be used for evaluation purpose only」,那來裝個 MySQL 好了(可參考這裡):
  • docker run -d --name mysql1 -e MYSQL_ROOT_PASSWORD=changeit mysql
不同於預設的 h2 database,在 MySQL 我們要自行準備一個空的資料庫與足夠權限的登入帳密給 SonarQube 用,而且現在是分別由兩個 container 負責,有點像是兩部主機,所以可像這樣設定:
  • docker exec -it mysql1 sh
  • mysql -u root -pchangeit
  • create database sonardb;
  • grant all on sonardb.* to sonaruser@'%' identified by 'sonarpass';
  • flush privileges;
  • exit
  • exit
為了模擬未來是跨 container 的通訊,可以另開一部 MySQL 並僅使用 client 端命令工具,來驗證準備給 SonarQube 用的資料庫。先查一下 mysql1 的位址:
  • docker inspect mysql1 | grep IPAddress
接著是第二部 MySQL:
  • docker run -d --name mysql2 --link mysql1 -e MYSQL_RANDOM_ROOT_PASSWORD=true mysql
  • docker exec -it mysql2 sh
  • mysql -h <mysql1_IPAddress> -u sonaruser -psonarpass
  • show databases;
  • exit
  • exit
注意 show databases; 的結果要看得到 sonardb 才對。接著還是依這篇最早提到的參考網址,重啟另一部連接 MySQL 的 SonarQube:
  • docker run -d --name sonarqube3 -p 9000:9000 --link mysql1 -e SONARQUBE_JDBC_USERNAME=sonaruser -e SONARQUBE_JDBC_PASSWORD=sonarpass -e "SONARQUBE_JDBC_URL=jdbc:mysql://mysql1/sonardb?useUnicode=true&characterEncoding=utf8" sonarqube
[2017/03/07]
搭配 PostgreSQL 似乎更容易些,且效率、評價都好,精簡至四道指令完成:

  • docker run -d --name postgres1 postgres
  • docker exec -it postgres1 createuser -U postgres -d -P -s sonar (input sonar / sonar)
  • docker exec -it postgres1 createdb -U sonar sonar
  • docker run -d --name sonarqube4 -p 9000:9000 --link postgres1 -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgres1/sonar sonarqube

星期二, 10月 25, 2016

Red Hat Startup

CentOS 用這麼久了,原以為系出同門的 Red Hat 應該相去不遠才是,沒想到剛開始就踢到鐵板 - 沒有 yum?這樣是要叫人家怎麼裝東西?
好吧,先去 Red Hat 網站申請個帳號,再下指令:
  • subscription-manager register --username 帳號 --password 密碼 --auto-attach
然後呢?網路不通?連 ifconfig 都沒有?替代品:
  • ip a
沒有向 DHCP 取 IP,其實是網路介面在離線狀態,請看指令與前後查詢的結果(注意 enp0s8):

Linux access by non-root

用 root 帳號存取 Linux 是方便也是危險的。試想有人要攻一部主機時,沒有帳號是不能猜密碼的,他首先會猜這上面有什麼帳號?又哪個帳號具有最大的權限,讓攻下之後的效益最大?
通常建議平時的操作都用普通的使用者,只有在需要的時候取 root 權限做事,也就是 sudo。例如要新建一個 user1 帳號(此時還是 root 身分):
  • userdel -r user1
  • useradd user1
  • passwd user1
要如何設定 user1 在必要時能取得 root 權限?可以編輯 /etc/sudoers,通常會有這兩行:
  • ## Allow root to run any commands anywhere
  • root    ALL=(ALL)       ALL
仿上例,加以下一行即可:
  • user1   ALL=(ALL)       ALL
但這個檔案預設本身的權限是 440,只有 root 與其群組唯讀,所以要開放可寫才能修改。這樣有點麻煩?還可以參考同檔案通常還有這兩行:
  • ## Allows people in group wheel to run all commands
  • %wheel  ALL=(ALL)       ALL
也就是在不修改 /etc/sudoers 的情況下,將使用者加入 wheel 群組可達到同樣的效果,指令是:
  • usermod -aG wheel user1

星期二, 10月 11, 2016

Mac + VirtualBox + BlueStack => Crash

最近我 Mac 上的 Line 一直都不安份,常要求訊息加密(Letter Sealing)的身分驗證。由於沒有實體 Smartphone 的關係,一直要開 BlueStack 模擬很麻煩就算了,還會讓稍後再開 VirtualBox 的 Mac 當機!原來這兩個軟體是有些愛恨情仇的。而且 Bluestack 竟然也一年沒更新了,暫時就先關閉訊息加密吧,有空再找時間試試 Genymotion 能否取代掉 Bluestack。

SonarQube Analysis Fail?

我都是透過 Jenkins 向 Subversion 取得原始碼,再送給 SonarQube 分析,但有的專案順利,有的就不行,錯誤訊息像是:


關鍵在於 Jenkins 當然會有 Subversion 的帳密(用以取原始碼),但 SonarQube 也要?那是用來 blame 作者的。在 SonarQube 如此設定就能解決:


回頭再看那些順利的,歸納出一個差異:要不就是非 Subversion 的 VCS,要不就是帳號在 LDAP。結論:若是 Subversion 上的特殊帳號才會有此問題。