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 裡的步驟了。

編譯 Raspberry PI Kernel

本意只是想在 Raspberry PI 上裝 Ghost ,結果 node-sqlite3 裝不上去,Raspberry PI 版子速度又太慢,就想乾脆用 QEMU 摹擬 Raspberry PI。

用 QEMU 摹擬 Raspberry PI 可以參考這篇:Raspberry Pi • View topic – HOWTO: Virtual Raspbian on Qemu in Ubuntu Linux 12.10

裏面的步驟大致是這樣:

  1. 取得 qemu 用的 kernel
  2. 取得 Raspbian imgae
  3. 安裝 QEMU:sudo apt-get install qemu-system-arm
  4. 執行 QEMU:qemu-system-arm -M versatilepb -cpu arm1176 -m 256 -hda raspbian-jessie.img -kernel zImage -append “root=/dev/sda2” -net nic -net user,hostfwd=tcp::2222-:22 -serial stdio

我目前是卡在 qemu 用的 kernel 上,原本想說直接拿 raspbian 的 kernel.img 來用,但發現不行。如果用文章裡作者提供的 zImage 是可以開機,但會有找不到 init 的情況。所以現在就朝自己編譯 kernel 的方向來做,這部份可以參考:

儘管如此,我編譯出來的 kernel 仍然無法順利開機,找時間再研究吧~

pyenv: no such command `virtualenv-init’

最近開 terminal 時,都會看到這樣的錯:

pyenv: no such command `virtualenv-init’

今天終於想要解決這問題了,找了一下,源頭是在 oh-my-zsh 的 virtualenv plugin 裡,裏面用了 eval “$(pyenv virtualenv-init – zsh)” ,循線追到 pyenv,發現是 pyenv 沒有 pyenv-virtualenv plugin 的關係。

依照 yyuu/pyenv-virtualenv 上的說明,執行以下指令,就解決問題了。

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

最後,順道更新 pyenv :cd ~/.pyenv && git pull –rebase origin master

OpenKM

同事找到這篇介紹 OpenKM 的文章:開源OpenKM文管系統 立即打造知識管理平台

想說就裝起來試試看好了,看到有人用 docker 搭起來,就照著做囉:使用docker在centos6.5上部署openkm详细过程

不過這篇文做法的缺點是,把原本的 /usr/local/tomcat 都移到 volume 裡去,這就等於是程式都放到外面去了。或許應該參考原本 mcsaky/openkm 的 Dockerfile 與 OpenKM Installation ,再來改寫 Dockerfile 會比較好一點。

反正只是先試試看,所以我也沒有用 nginx 擋在前面,直接用 tomcat ,就先這樣用吧~ 有需要的時候,再來研究看怎麼改寫。

Prometheus

Prometheus 是一個 Monitor 的服務,要收集 host 資訊要搭配 node-exporter,要有 dashboard ,可以搭配 promdash。

而這三者,都有 docker container image 可以下載,但是要怎麼搭在一起,可就讓人傷腦筋了。花了一些時間把他們三個兜在一起,寫成 docker-compose.yml ,這樣就可以用 docker-compose up 直接啟動這三個 container。

過程裡遇到幾個難題:

  1. 沒辦法用自訂的 prometheus 設定:這部份查了老半天,反覆查看 prometheus 的 Dockerfile 以後,確定要 overwrite,所以在 docker-compose.yml 裡,加上了 entrypoint 與 command,其實就是原來的 prometheus Dockerfile 裡的 entrypoint 跟 command,只是 -config.file 這邊修改掉了。
    另外就加掛了自訂的 conf 目錄到容器裡的 /etc/custom 。
  2. prometheus 無法找到 node-exporter:這邊要利用 docker 的 link 在 /etc/hosts 裡插入的主機名稱,不能用 node-exporter 文件裡提到的 localhost ,所以我填入 docker-compose.yml 裡定義的 nodeexporter。

大概就這樣,目前執行結果看起來是沒問題,用一陣子看看吧。另外有在 https://hub.docker.com/u/prom/ 這裡看到不少 container image 可以拉下來組合的,以及 google 的 cAdvisor,有機會再來看看。

後記:實驗結果發現 node-exporter 不適合放在 docker container 裏面執行(跟 node-exporter 對應的,還有一個 container-exporter 專案,是專門收集 container 資訊的),因為會無法收集到關於 host 的資訊,所以 node-exporter 最好還是放在 host 執行,然後讓 prometheus 能存取到。另外,在找關於連結到 host 的部份時,看到有人提報一個 issue 給 docker,建議應該提供一個 –link-host 的功能,讓 container 裏面也能存取到 host,而不需要額外繞路取得。一般的繞路手法是透過 route 取得 gateway 位址,在某些情況下是還蠻麻煩的。

Import Vagrant box into VirtualBox

vagrant package 得到的 package.box 實際上是一個 tarball 檔案,用 tar xzf 就可以解開。裏面會有 box.ovf, *.vmdk, private key … 等檔案,使用 vboxmanage import box.ovf 就可以匯入。

在匯入以後,要注意幾點,第一個是名稱,名稱是之前 Vagrantfile 所在目錄的名稱再加上一串數字,你可以用 vboxmanage modifyvm your_vm –name “new name”。

第二個是網路介面名稱,因為在你匯入的機器上可能沒有這個網路介面,如果你跟我一樣在 Vagrantfile 裡是設定用 public network 的話,可以用 vboxmanage modifyvm your_vm –bridgeadapterN new_network_adapter 來替換,那如果是用 private network 之類的,也是用 modifyvm ,總之原理一樣就是。

其他你可能還會用到的指令:

  • 列出 VirtualBox 裡有哪些 VM:vboxmanage list vms
  • 列出指定 VM 的資訊:vboxmanage showvminfo your_vm
  • 刪除 VM:vboxmanage unregistervm your_vm –delete

簡單的組合技可以參考這個 gist

Build pcmanfm-qt in Ubuntu trusty

Just summary build steps.

First, you need to install these packages: qt5-default, qtchooser, qt5-qmake, appmenu-qt5, qtdeclarative5-dev, qttools5-dev, qttools5-dev-tools, libqt5x11extras5-dev, libglib2.0-dev, libgio2.0-cil-dev, libfm-dev, libmenu-cache-dev

Then clone pcmanfm-qt from https://github.com/lxde/pcmanfm-qt

Enter pcmanfm-qt directory, type: cmake -G “Unix Makefiles”, then run: make && make install

After installation, you need to add a file “x86_64-linux-gnu-local.conf” in /etc/ld.so.conf.d and put “/usr/local/lib/x86_64-linux-gnu/” in it.  Run sudo ldconfig to make the setting available.

猜編碼、轉換編碼與簡繁轉換

猜編碼,可以使用 enca 指令。安裝可以用 sudo apt-get install enca ,要猜的時候,就用 enca your_file 。除了會顯示檔案內容所使用的編碼名稱之外,也會顯示所使用的換行字元是 CR 或 CRLF 。

轉換編碼,可以用 iconv ,一般不需要特別安裝就會有了,真要安裝的話,用 sudo apt-get install libc-bin ,使用方法則是 iconv -f from_code -t to_code -o new_file your_file ,-f from_code 是指定 your_file 的編碼,-t to_code 是新檔案的編碼,-o new_file 則是要輸出的新檔案。例如:iconv -f big5 -t utf-8 -o new_file.txt your_file.txt

要省麻煩的話,最佳的神器是 madedit ,不過這個專案停止維護一段時間了,要使用的話,就得有點 C/C++ 的底子,自己下載原始碼來編譯。一般的文字編輯軟體或 IDE 也可以用啦,只是就沒 madedit 那麼好用了。

簡繁的轉換,在瀏覽器 (Firefox/Chrome) 上可以用「新同文堂」,指令的話可以用 opencc :

  • 簡轉繁:opencc -i old_file -o new_file -c /usr/lib/x86_64-linux-gnu/opencc/zhs2zhtw_p.ini
  • 繁轉簡:opencc -i old_file -o new_file -c /usr/lib/x86_64-linux-gnu/opencc/zht2zhs.ini

這邊比較讓人困惑的地方大概就是 -c 的設定檔,設定檔定義簡轉繁或繁轉簡的動作(也可以轉成香港用字),而這些設定檔則是被包在 libopencc1 裡,用 dpkg -L libopencc1 就可以看到了。

以上都是在 ubuntu 14.04 裡使用,其他 distro 應該也是大同小異,指令一樣,就套件名稱不同而已。

2015年101登高賽

31分1秒,世界紀錄約十分鐘左右

Yan-ren Tsai(@elleryq)張貼的相片 於 張貼

早前兩年就有打算參加,但始終都沒能報到名,這次終於在三月底趕上,成功的報名。如果想報名的話,最好是在三月中下旬就開始關注 101 大樓網站上的消息,才不會錯失良機。

為了走上 101 大樓,做了些訓練,第一個是跑步,不過這是前年年底就已經在做的事情了,不算是特別的訓練,大致就是一星期跑兩次,從兩公里、三公里,到後來改成持續跑 15 分鐘、20 分鐘到現在的 25 分鐘這樣。比較算是特別的應該是爬樓梯,每天上班爬十層樓,賽前開始改為爬 20 層、30 層。除了這些之外,就是調整呼吸,這是看朋友推薦的文章學到的,文章裡說呼吸最主要是吐氣,要以腹部出力吐氣,新鮮的空氣才進的來。之前我都是努力吸氣,結果效果不佳。看完文章以後,我持續在跑步與爬樓梯時試著這樣做,並且維持兩吸一吐的頻率。以我個人來說,我覺得這真的有效,在跑完步跟爬完樓梯時,呼吸會平復的比較快。

在登高賽前幾天有找別人的經驗分享文,說衣物、東西都不要寄在會場寄物櫃,看是著好服裝,空手帶健保卡、悠遊卡過去,或是在附近找寄物櫃,這樣都會比卡在大會那邊排隊來的快。所以我是直接著運動服裝過去,然後太太幫我拿著另一套衣服這樣,真的是非常感謝太太的幫忙。

比賽當天,最重要的事情就是不要遵守賽程表上規定的時間,你大概抓晚半小時到一小時過去就可以了。以今年來說,手冊上說我的號碼在 9:30 ~ 10:00 去體檢,10:00 出發,結果我到了 11:40 左右才進去大樓裡要爬樓梯。第二件重要的事情,就是在號碼差不多的時候,到集結點附近聽工作人員叫號。叫號其實聲音沒辦法傳很遠,然後一堆人圍在那邊,根本聽不到,最顯眼的 LED 看板卻偏偏又是打一個大的號碼範圍,像是 0~800 、 801~1600 這樣,對於這件事情我不是很理解,明確一點不是會更好嗎?當天的天氣很好,太陽很大,還好後來有雲層遮住太陽,要不然我看進去之前一堆人就中暑了。

進去爬樓梯以後,我沒依照我平常的速度走,然後走到內圈,心情緊張許多,導致速度比平常來的快許多,呼吸也比較喘,原本預定到 30 樓才休息的,到 20 樓就先去休息一下了。等出來,就改走外圈,不急不徐、一步一步往上走,每二十層休息一次。大樓裏面的休息站不是整數的,大致是 7 或 8 的倍數,59 層是一個比較特別的樓層,這裡除了是休息站,也是換班電梯的所在。總之,我記得我在 20 、40 、59、7x、83 都各休息了一下,有一層可以看到外面風景的,有停留比較久。樓梯間的空氣在某幾層時有比較悶熱,但有些樓層有排氣的關係,反而比較涼爽,大致上不會讓人有不舒服的感覺。

等到上去以後,請旁邊的跑者幫忙拍照留念以後,就開始找電梯了。結果繞了一圈以後,發現排隊搭電梯的人已經繞了一圈了,就趕緊跟著排,排隊的同時除了平復呼吸之外,也順便把大樓外的風景拍完了。所以,真的不要浪費時間在上面逗留,趕緊排隊才是正途。下電梯換了三次電梯,第一次是 91~90,第二次是 90~59 ,第三次是 59~1 。下到一樓以後就是領完賽證明跟其他一些東西了,有痠痛貼布、保健食品、飲料、獎牌等等。出口是往地下一樓走,話說,平常根本不會去 101 樓下逛,所以在樓下還迷路了,不知怎麼出去,還特地上去問工作人員怎麼走… 冏

嗯,大概就是這樣,算是了了一件心願,明年應該就會來試著跑 10 公里或半馬了。不過也有可能繼續自我挑戰而不參加比賽就是了,不太敢想像一邊在路邊跑、一邊吸廢氣的情況。

修改 EXIF 的命令:exiftool

數位相機的日期設定錯了,所以拍出來的照片裡的日期也是錯誤的,就想說不知道有沒有工具可以修正。

找了一下,看到可以用 exiftool:

此外,也可以用 jhead ,視覺化介面可以用 picasa (雖然現在 Google 好像沒繼續開發了)。

修改的指令大致就是這樣子,這是要往後平移兩天的:exiftool “-ExifIFD:CreateDate+=0:0:2 00:00:0” your_photo.jpg

然後也要記得改 -ExifIFD:DateTimeOriginal 跟 -IFD0:ModifyDate 。

要查看目前的 EXIF 資訊,一樣也可以用 exiftool :exiftool -s -a -u -g1 your_photo.jpg