Docker 雜談

最近使用的一些感想和疑問

  • --name自動會變 network 內的 hostname,蠻方便
  • Image build 失敗,還是會產生一個東西在那邊,要 rm 掉才能重新 build...
  • Service 還不支援 update 修改 network
  • DB container 的資料要開 volume 掛比較保險(免得不小心砍到 container)
  • 在多個 node 上開 replica,掛 volume 的話都是在該 node 上找,目前似乎沒有透過網路共享 volume container 這種事
  • 很多服務的官方 docker 都是用環境變數做設定,不知道是不是本來就有的慣例
  • 一直更新 registry 上的 image 好像會越來越多垃圾,不知道是不是有清理機制
  • 整體而言,我覺得 docker service 介面是個很容易讓 fat finger 造成服務爆炸設計,不過架構規劃的好的話,應該不會太難修復就是

Ubuntu 14.04 與 MovableType 4.x

前一篇文章提到我為 SSL 安全性升級到 Ubuntu 14.04,其實升級之後遇到一些 MovableType 的相容性問題,Ubuntu 在 12.04 的時候還是用 Perl 5.14,不過到 14.04 時,Perl 升級到 5.18 了,順便提一下現在最新的穩定版是 5.20,不過 5.18 和 5.20 是同時都有在維護的。

然後我的 MovableType 是用很久以前的 4.38,用新的 Perl 會跑不起來,不過我也不太想升級,一來是 License 問題,二來是新的 MT 一個很大的架構改變是他變成是多 blog 系統,我也不太喜歡這點。總之剩下的方法就是想辦法修 bug,或是用舊的 Perl 跑,顯然後者容易許多,然後我也找到 gugod 開發的perlbrew這工具,類似於Ruby 的RVM,c9s 也有寫一篇文章介紹

比較有趣的是我用了 perlbrew 安裝好 Perl 5.14 後,用which perl找到 Perl 5.14 執行檔位置然後手動修改 mt.cgi 等檔案,用 mt-check 檢查發現還缺 DBI 的套件,就用升級前就已經裝好的 cpanminus 裝了,不過怎麼裝都顯示正常但是 MT 就是一直抓不到,看了一下 cpanm 檔案原始碼才發現它用的 perl 是:

#!/usr/bin/perl

心想 gugod 怎麼可能不處理這個問題,於是搜尋一下發現可以用perlbrew 安裝 cpanm

perlbrew install-cpanm

看了安裝出來的 cpanm 用的 perl 來源是不一樣的:

#!/usr/bin/env perl

這樣用 cpanm 裝的 Perl 套件總算可以用了,之後還有一個 5.14.2 和 5.14.4 的差異造成的錯誤,就照網路上找到的文章修正了。


[

最近因為shellshock的關係,跑去看了/bin/下面的東西,結果突然發現有個執行檔叫做[

ls /bin/

執行了也完全沒反應,結果和同事討論就上去 stack overflow 來問問看,然後馬上就被回說看看man [。想不到,原來 shell script 裡面的 if else condition 的[ ],其實就是這個執行檔啊,以前一直以為是個語法的 syntax...


mozjpeg 2.1

Mozilla 最近發佈了mozjpeg2.1,同時還有一篇用 mozjpeg 產生高效率的 JPEG教大家使用裡面的工具,所以我之前誤會以為現在只有 c lib 可以用,這篇文章有一些範例指令讓大家可以把cjpeg把圖片重新壓縮,小缺憾是安裝講的比較不清楚,所以我另外測試過,提供一下 Mac OSX 的指令:

cd mozjpeg
autoreconf -fiv
mkdir build && cd build
sh ../configure
make
sudo make install

關鍵的就是BUILDING.txt沒說build目錄是要自己建立的,不過實際測試的效果要等週一才能測試看看,目前只有編譯過確定有指令工具可以用而已。

另外一個比較容易漏掉的是要編譯需要NASM, homebrew 可以直接brew install nasm


OSX 裝 ruby 1.9.3p392 編譯問題

最近因故要在 Mac 上重新建立工作環境,結果在裝 ruby 時遇到 compile error,看起來也不是今天才有的問題,狀況是 clang 4.1 之後才開始有的,而 OSX 10.9 要用的 XCode 5.0.1 已經是 clang 5.0 了,所以不避開這個問題會無法在新的 OSX 上裝 Ruby,包括用其他 Ruby 管理工具也是一樣,像我其實就是用 rvm 要裝,還好有解法:

CFLAGS=-Wno-error=shorten-64-to-32 rvm install ruby-1.9.3-p392

fasd, 命令列加速工具

以前曾經介紹過autojump這個很好用的快速切換目錄的指令,後來大貓跟我說有個叫z的,一樣用途,原理也差不多,不過 z 的位置比較好按些,最近在看Vim Scripts時,意外發現到有個fasd,也是一樣的原理,不過他的功能比較強大,配合一些 alias 就可以做到和z或是v一樣的功能,作者對相關的領域很熟悉,對於常用 shell 的整合很好,像是 zsh 和 bash 的指令補完就都有支援,目前正在改用他,Mac 安裝很方便:

brew install fasd

然後在.bashrc或是.zshrc加上

eval "$(fasd --init auto)"

就可以了,其他環境有包好的就比較少了,可以看看他的 Wiki:Installing via Package Managers,其他的環境我測試過 Ubuntu 編譯安裝都很順利,基本上只是拷拷檔案而已。


Build v8

平常是使用 Google V8 引擎的 command line 來做自己工作機的 js console,最主要的用途是跑 jslint,不過這需要自己來編譯,以前是用 scons 來編譯,剛剛想要編譯新版發現 Google 又換了自動化工具,從scons換成gyp,安裝流程其實比較簡單,先安裝好 svn,然後執行:

make dependencies
make console=readline native

產生的 d8 執行檔會在 out/native/ 下面,官方說明有提到可以用 clang 編譯,不過我嘗試後會有錯誤,還在看要怎樣處理。


automjump

今天發現的有趣的命令列工具autojump,它會記錄你常用的目錄位置,然後之後就可以用簡單的關鍵字跳到路徑符合關鍵字,又最常用的目錄,以我為例,我最近常常會跑到某個位置的 vim-plugins 目錄,然後我又沒有其它目錄名稱和 plugin 相似,那不論我在哪,我都可以執行下面的指令跳到 vim-plugins:

j plugin

我目前使用上是都沒什麼大問題,不過hlb說他的 vim 檔名自動完成會爛掉,可能要在研究看看問題在哪了。


彩色 man page

忘了哪裡看到的設定了,用的是 zsh

# colorful man page
export PAGER="`which less` -s"
export BROWSER="$PAGER"
export LESS_TERMCAP_mb=$'\E[38;5;167m'
export LESS_TERMCAP_md=$'\E[38;5;39m'
export LESS_TERMCAP_me=$'\E[38;5;231m'
export LESS_TERMCAP_se=$'\E[38;5;231m'
export LESS_TERMCAP_so=$'\E[38;5;167m'
export LESS_TERMCAP_ue=$'\E[38;5;231m'
export LESS_TERMCAP_us=$'\E[38;5;167m'

效果預覽:

colorful man page


命令列安裝 Dropbox

剛剛試著在命令列安裝Dropbox,發現超簡單的,不過還是記錄一下,我安裝的流程是跟著howto-install-dropbox-in-ubuntu走的,不過我剛發現官方的安裝說明是沒說到要修改套件庫的來源檔,只要執行以下指令:

sudo apt-get update;sudo apt-get upgrade nautilus-dropbox

如果有金鑰問題的話,加入套件庫金鑰的指令如下:

sudo apt-key adv --keyserver pgp.mit.edu --recv-keys 5044912E

接著如果有用 nautilus 的話要把相關的程序全部關掉

nautilus --quit

然後安裝 Dropbox daemon

dropbox start -i

啟動 Dropbox

dropbox start

第一次啟動會看到下面的說明和連結

To link this computer to a dropbox account, visit the following url:
https://www.dropbox.com/cli_link?host_id=01d51f8e353b4f9a45085***********

用瀏覽器開一下那個連結把帳號連結建立起來後就完成了,預設的目錄位置會在 ~/Dropbox 裡面,也可以執行 man dropbox 來看其它使用說明。


此類別所有文章