WordPress 的維護模式

本來以為 wp-cli 提供的 wp 指令應該可以用來指定 wordpress 進入或離開 maintenance mode 才對,結果發現沒提供這功能。原來是因為很簡單的關係:wp cli – wp-cli Enabling Maintainance Mode

只要在 wordpress 安裝目錄下增加或是移除 .maintenance 檔案就可以進入或離開 maintenance mode 了。

讓 docker-skype 顯示中文

公司的 skype 不知道因為裝了什麼爛掉了 (似乎是 cutegram 的樣子),怎麼弄都不行,用 web skype 過一段時間會斷線,收不到訊息。後來想到,不知道有沒有人包成 docker image,一找之下,果然有:docker-skype

試用之下,的確可以順利執行,但是中文字的部份都是方塊,看起來得自己重新包了。所以就 fork 了一份,修改了 Dockerfile 與 scripts/skype-wrapper 。

Dockerfile 主要是參考下面的文章,加上安裝字型、語言的套件與設定環境變數:

skype-wrapper 則是修改腳本,因為我在 build 時,是 tag 為 elleryq/skype ,所以這邊在 docker run 的時候,也要跟著調整,否則會執行到原來的 sameersbn/skype 。

這樣就可以用一份無汙染、無添加而且有中文的 skype 了,不過這一包真的還蠻大包,吃掉 4xxMB …

golang debian package

Ubuntu 14.04 預載的 golang 是 1.2.1 版,想使用最新版的 golang ,除了可以用 gvm 以外,也可以用 debian package 來安裝。這篇要介紹的工具是 godeb ,這是一個會自動幫你將最新版的 golang binary 打包為 debian package 並安裝的工具。

首先下載 64-bit 的 godeb binary 檔案並解開:wget -qO – https://godeb.s3.amazonaws.com/godeb-amd64.tar.gz | tar xvz

執行 ./godeb list 就可以列出可安裝的 golang 版本,用 ./godeb install <version> 就可以安裝了。

要注意的是,這會跟預裝的 golang 套件衝突,所以使用前必須先移除原本裝好的 golang 套件。

Vagrant VM 搬家

有同事問,印象中有,就試了一下

  1. 用 vagrant package 會得到 package.box 檔案,複製到另外一台電腦上。
  2. 到另外一台電腦上用 vagrant box add package.box –name “my_new_vm” 加進去。
  3. 建個目錄,用 vagrant init “my_new_vm” 產生 Vagrantfile ,執行 vagrant up 即可。

jenkins 的 gitlab-merge-request-builder-plugin

gitlab-merge-request-builder 是可以讓 jenkins 對 gitlab 送 merge request 的 plugin,但是這個 plugin 不在 jenkins plugins repositories,所以找不到,得自己 build。

首先要裝 maven:sudo apt-get install maven

  1. 先到 java-gitlab-api ,取得原始碼,接著用 mvn install 來安裝,maven 會把生成的 gitlab api wrapper 安裝到 $HOME/.m2 下。
  2. jenkins-gitlab-merge-request-builder-plugin 取得 plugin 的原始碼,取得以後,修改 pom.xml ,把 java-gitlab-api 的版本改為 1.2.5-SNAPSHOT ,然後執行 mvn hpi:hpi 。
  3. 大功告成,建置好的 plugin 會在 target/ 下。

plugin 的說明裡提到,如果 gitlab 在 8.1.x 以下,要使用 v1.2.4 ;gitlab 在 8.1.x 以上 (含),可以直接用最新版本。關於這點,我倒是還沒去試,總之先把建置的步驟紀錄下來。

P.S. 我發現有兩個來源耶,所以?!

  1. https://github.com/timols/jenkins-gitlab-merge-request-builder-plugin
  2. https://github.com/jenkinsci/gitlab-merge-request-builder-plugin

Ansible 的 callback

Callback 可以讓人有機會處理執行的結果,網路上有些人會寫自己的 callback plugin 以便統計執行結果什麼的。寫 callback plugin 的方法蠻簡單的,先繼承 CallbackBase ,然後覆寫裏面的方法即可,Ansible 有提供不少範例可供參考。

幾件事情要注意:

  • 寫 callback plugin 時:
    • 要寫 CALLBACK_TYPE,這裡如果填 ‘stdout’ 時,在 ansible.cfg 裡的 stdout_callback 也要指定為這個 callback ,這樣 callback 才會生效。
    • 要寫 CALLBACK_NAME,這是 callback 的名稱,建議最好跟檔案名稱相符,並且不要跟官方的 callback 重複。
  • 使用時:
    • ansible.cfg 裡要指定 callback_plugins,這是填路徑。可以填相對路徑也可以填絕對路徑。
    • ansible.cfg 裡要指定 callback_whitelist,這是填 callback 的名稱,可以用 ‘,’ 分隔多個 callback。顧名思義,是一個白名單的形式,有填才表示啟用 callback。
    • callback 在預設情況下只有在使用 ansible-playbook 時才會生效,如果要讓 ansible adhoc 也能用 callback,得在 ansible.cfg 裡指定 bin_ansible_callback=True 。不過,CALLBACK_TYPE=’stdout’ 的 callback plugin 是適用的。

 

Apache 設定多個 VirtualHost 的預設

一台主機上要綁定多個 domain name ,是藉著設定 Apache 的 VirtualHost 來完成。那如果在沒輸入 domain name 的情況下,要使用指定的設定該怎麼做呢?

簡單的說,Apache 會以第一個 VirtualHost 來當作預設的。例如現在有兩個 VirtualHost,一個是 A,使用 www.example.com;一個是 B,使用 www.example.net ,那麼網址列輸入 IP 時,會看到 A。想要有預設的 VirtualHost,就是在設定 A 的前面多加一個 VirtualHost,裏面不指定 ServerName 就可以了。

關於 Ansible EC2 module 的紀錄

指定 exact_count=1,第一次執行時,新建的 instances 會同時放在 instances 與 tagged_instances 裡。(請看 ec_create_result.txt)

exact_count=1,再執行一次,changes 會是 false,instances 裡是空的,而 tagged_instances 裡則是之前已經建立的 instances (請看 ec2_create_again_result.txt)

將 exact_count 設定為 2,再次執行,changes 會是 true,instances 裡是新建的 instance,tagged_instances 裡除了之前已經建立的 instance 之外,還會有新建的 instance。

將 exact_count 改回 1,再次執行,changes 會是 true,instances 裡是被終結掉的 instance,state 是 terminated,而 tagged_instances 裡則是仍存活的 instances。 (請看 ec2_create_decrease_exact_count_result.txt)

gitlab-ci-multi-runner 在 archlinux 上的設定

gitlab-ce 到 8.0 以後,就把 gitlab-ci 整進去了,要用 gitlab-ci ,需要安裝 gitlab-ci-multi-runner。

archlinux AUR 裡已經有人包進去了:

  1. 用 yaourt -S gitlab-ci-multi-runner 安裝。
  2. 用 sudo systemctl enable gitlab-ci-multi-runner 啟用
  3. 執行 gitlab-ci-multi-runner register 進行設定,設定時會問:
    1. gitlab-ci coordinator URL :請到 gitlab 專案設定裡的 runner 畫面取得
    2. gitlab-ci token for this runner:跟上面一樣,到 gitlab 專案設定裡的 runner 畫面取得
    3. gitlab-ci description for this runner: 隨便填,能認得就好
    4. gitlab-ci tags for this runner:隨便填,不填就按 enter
    5. executor:這邊就看需求,我是填了 docker
    6. Docker image:應該是選了 docker 的關係,這邊需要填,主要是問要以哪個 image 為基底,ruby 可以填 ruby:2.1,python 可以填 python:2.7,日後有用到再去找。
    7. 其他:問 mysql, postgresql, redis, mongodb 要用哪個版本。
  4. 設定完,gitlab-ci-multi-runner 服務會自動載入新設定,不放心的話,用 sudo systemctl restart gitlab-ci-multi-runner 重新啟動。

到 gitlab 專案設定裡的 runner 畫面去看,應該就會看到剛剛新增的 runner。

使用上可以參考這篇 gitlab ci quickstart 來做,大致就是在專案裡新增 .gitlab-ci.yml ,裏面填好要執行的步驟,加入 repository、提交、push,之後每次 push 時,就會執行 .gitlab-ci.yml 裡的步驟了。

Deprecation of tags= in include

碰到這個訊息:

[DEPRECATION WARNING]: You should not specify tags in the include parameters. All tags should be specified using the task-level option. This feature will be removed in a future release. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.

這是因為這樣寫:

- include: setup.yml tags=myrole,setup
- include: myrole.yml tags=myrole

論壇有人問,開發團隊回答說,建議的作法是把 tags 拿下來,不要放在 include: xxx 的後面,也就是:

- include: setup.yml
  tags=myrole,setup
- include: myrole.yml
  tags=myrole