almost 3 years ago

環境

主要的工具是 devscripts,透過 apt-get 來安裝。

$ apt-get install devscripts

工具

dch (deb changelog)

這是用來維護 debian 套件內 changelog 的指令。

  1. 建立新的 Debian 套件

    dch --create --package <package_name> -u medium -D trusty
    
  2. 建立一筆新的 changlog 紀錄,會自動產生一個新版本

    dch --increment "auto-increament debian pakcage"
    
  3. 更新指定版本號

    dch -v 1.0.0 "bump version to 1.0.0"
    
  4. 新增一筆新的 changelog 的訊息

    dch --append message
    
  5. 更新最後一筆 changelog 的日期

    dch -r 1.0.0 ""
    

debuild

打包/編譯 DEB 檔

debuild -us -uc -b

debclean

清理編譯環境

debclean

參考資料

  1. Introduction to Debian Packaging
  2. Ubuntu Packaging Guide
 
almost 3 years ago

To running a service in docker, you should make it running in the foreground.

The following is a collection of foreground commands for common daemons.

  1. Supervisor

    $ /usr/bin/supervisord -n
    
  2. Apache2

    $ /usr/bin/pidproxy /var/run/apache2/apache2.pid /bin/bash -c "source /etc/apache2/envvars && /usr/sbin/apache2 -DFOREGROUND"
    
  3. Nginx

    $ /usr/sbin/nginx -g "daemon off;"
    

2015/02/11 Update

  1. SSH Server
    $ /usr/sbin/sshd -D
    
 
almost 3 years ago

建立 Cluster

要建立 Cluster 首先要確定每個 Node 都有一致的 .erlang.cookie,以及不同的 hostname 。.erlang.cookie 一般放置於 /var/lib/rabbitmq/.erlang.cookie

加入 Cluster,預設為 disk node 可以透過 --ram 參數設定為 ram node

$ rabbitmqctl stop_app
$ rabbitmqctl join_cluster [--ram] rabbit@hostname # 一定要是 hostname
$ rabbitmqctl start_app

活著的 Cluster 可以移除 offline 的 node

$ rabbitmqctl forget_cluster_node rabbit@node_offline

被移除的 Node 會以為還在 Cluster 內,進而嘗試加入,但會被拒絕。

這時可以透過

$ rabbitmqctl reset

將此 Node 恢復單身。

Web Management

想要使用 rabbitmq 的 Web 管理介面,必須先啟用 Plugin。

對於 Static Node (具有 Web Interface 的節點) 做以下啟用:

$ rabbitmq-plugins enable rabbitmq_management

其餘的節點只需要開啟 agent 即可:

$ rabbitmq-plugins enable rabbitmq_management_agent

記得要重新啟動 rabbitmq-server 的 daemon

預設的 Port number 是 15672http://rabbit-web-node:15672/

 
almost 3 years ago

今天試著重新打包 Android x86 的 initrd.img,略作紀錄。

首先,在 /tmp 建立一個暫時的 initrd 資料夾

$ mkdir -p /tmp/initrd

進入此資料夾,解開 initrd.img

$ cd /tmp/initrd
$ cat /path/to/initrd.img | gzip -d | cpio -i

這時你可以在目錄內自行客製化這個 ram disk。

接著是將改過的內容重新打包回 initrd.img

find . | cpio -o -H newc | gzip > /path/to/initrd.img

End

 
almost 3 years ago

文章出處: The Twelve-Factor App

前一陣子就有閱讀並做了一些筆記。今天在 Container Summit 聽了葉秉成老師介紹 (從Twelve-Factors App角度,看如何導入Docker技術) 之後,更有一種豁然開朗的感覺。說真的,要完全做到,是要下許多功夫的。

  1. Codebase: 版本控制
  2. Dependency: 要明確定義出 Dependency 並將之隔離
  3. Config: 設定檔必須從程式碼抽離
  4. Backing services: 外在服務必須隔離。如:資料庫,也就是要做到,即使更換資料庫,程式碼也不受影響
  5. Build, release, run: 要明確區分每個階段,不互相干擾
  6. Processes: 打造無狀態、無共用的程式
  7. Port binding: 服務僅透過 Web Service (HTTP/HTTPS) 來對外
  8. Concurrency: 無狀態、無共用的程式設計,自然而然的就容易擴張
  9. Disposability: 可輕易拋棄,提高錯誤容忍度 (類似 Reactive System 的 Resilient 概念?)
  10. Dev/Prod parity: 維持一致的環境
  11. Logs: 將 Event 視為 Stream 輸出,不要試圖自己處理,讓 OP 決定如何維護、分類
  12. Admin processes: 提供 Admin 一次性維護的窗口,一般來說是 SSH