2013年9月25日 星期三

Debian/Ubuntu 上好用的 Spotify 網路音樂串流軟體

有高興看到有原生支援 Debian/Ubuntu 的網路音樂軟體。

在 Ubuntu 上面使用的方法如下:

$ echo "deb http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 94558F59
$ sudo apt-get update
$ sudo apt-get install spotify-client

然後就可以執行 Spotify 來使用了。

目前的 Spotify 似乎無法自動偵測到正體中文的環境,所以要手動去偏好設定裡面調整。

最後一點小小的想法,看到許多好用的軟體都會在推出的時候,都會同時支援跨平台的 Windows/Mac/Linux 桌面系統,還有 Android 與 iOS 的移動平台,也許 Linux 桌面的使用族群相對稀少,也許支援 Linux 並沒有什麼高獲利可言,但是卻會讓人感受到該軟體對於使用者的誠意在哪裡,套一句從 Even Wu 那邊看到的:「正確 > 進度,是我的理念。因為正確會有未來的尾速!」。

2013年9月18日 星期三

使用 Ubuntu Juju 中的 Local Provider (Linux Container) 心得

Ubuntu Juju 是一套 Canonical 設計給使用 Ubuntu 做為雲端平台的一套工具。

基本概念是輕鬆地使用一堆專家們精心寫好的 Juju Charms,無痛地將網路服務部署到使用 Ubuntu 的雲端平台上面。

Ubuntu Juju 目前支援的雲端平台有 Amazon Web Services (AWS), Microsoft Azure, HP Cloud, OpenStack, MAAS, Local,而 Ubuntu Juju 的工具本身可以在 Ubuntu, Mac OS X, Windows 上面安裝使用。

而 Ubuntu Juju 的 Local Provider 就是利用 Linux Container (LXC) 來在自己的主機上面架設使用 Ubuntu Juju,以下就是介紹 Local Provider 的設定方法。(窮人省錢的雲端解決方案)

首先當然要有一個 Ubuntu 12.04 以上的系統,然後先要加入 ppa:juju/stable 這個 PPA 然後更新索引:

$ sudo apt-add-repository ppa:juju/stable
$ sudo apt-get update

接下來安裝所需要的軟體套件。

如果是 Ubuntu 12.04 的話執行:

$ sudo apt-get install juju-local linux-image-generic-lts-raring linux-headers-generic-lts-raring

然後重新啟動系統來使用 linux-lts-raring 的 kernel

如果是其它比 Ubuntu 12.04 新的版本的話執行:

$ sudo apt-get install juju-local

然後檢查一下 MongoDB 有沒有支援 SSL (這點很重要,一定要支援 SSL 否則就無法使用):

$ mongod -h | grep ssl
  --sslOnNormalPorts      use ssl on configured ports
  --sslPEMKeyFile arg     PEM file for ssl
  --sslPEMKeyPassword arg PEM file password

還有要檢查一下 LXC 的 DHCP server 有沒有被執行起來 (這點也很重要,不然 LXC 的網路就無法正常運作):

$ ps aux | grep lxc-dnsmasq
dnsmasq       1640  0.0  0.0  26080   900 ?        S    10:13   0:00 dnsmasq -u lxc-dnsmasq --strict-order --bind-interfaces --pid-file=/var/run/lxc/dnsmasq.pid --conf-file= --listen-address 10.0.3.1 --dhcp-range 10.0.3.2,10.0.3.254 --dhcp-lease-max=253 --dhcp-no-override --except-interface=lo --interface=lxcbr0 --dhcp-leasefile=/var/lib/misc/dnsmasq.lxcbr0.leases --dhcp-authoritative
user    12013  0.0  0.0  13660   952 pts/2    S+   15:47   0:00 grep --color=auto lxc-dnsmasq

接下來就可以產生 Juju 的設定檔了:

$ juju init 
A boilerplate environment configuration file has been written to /home/user/.juju/environments.yaml.
Edit the file to configure your juju environment and run bootstrap.

然後修改一下 ~/.juju/environments.yaml 將 "default: amazon" 改成 "default: local",接下來就可以執行 `sudo juju bootstrap` 來產生 Local Provider 所需要的環境。

`sudo juju bootstrap` 所做的動作就是產生 ~/.juju/local-cert.pem 及 ~/.juju/local-private-key.pem 還有 /etc/init/juju-*.conf 的檔案來執行一個 MongoDB Server 給 Juju 使用。

接下來執行 Ubuntu Juju 的資料就會全部儲存在 ~/.juju/local/ 目錄底下了。

$ sudo tree .juju                                                                                                                                                                              
.juju
├── charmcache
│   ├── cs_3a_precise_2f_mysql-27.charm
│   └── cs_3a_precise_2f_wordpress-16.charm
├── environments.yaml
├── local
│   ├── agents
│   │   └── machine-0
│   │       └── agent.conf
│   ├── db
│   │   ├── admin.0
│   │   ├── admin.ns
│   │   ├── journal
│   │   │   ├── j._0
│   │   │   ├── lsn
│   │   │   ├── prealloc.1
│   │   │   └── prealloc.2
│   │   ├── juju.0
│   │   ├── juju.ns
│   │   ├── mongod.lock
│   │   ├── presence.0
│   │   ├── presence.ns
│   │   └── _tmp
│   ├── log
│   │   └── machine-0.log
│   ├── server.pem
│   ├── shared-storage
│   ├── storage
│   │   ├── bootstrap-verify
│   │   ├── provider-state
│   │   └── tools
│   │       ├── juju-1.14.0.1-precise-amd64.tgz
│   │       └── juju-1.14.0.1-raring-amd64.tgz
│   └── tools
│       └── 1.14.0.1-raring-amd64
│           ├── downloaded-url.txt
│           ├── FORCE-VERSION
│           └── jujud
├── local-cert.pem
└── local-private-key.pem

13 directories, 26 files

像是如果要架設一台 WordPress Blog Server 就只需要執行以下四行指令:

$ juju deploy wordpress
$ juju deploy mysql
$ juju add-relation wordpress mysql
$ juju expose wordpress

因為建構這些服務需要一些時間去網路上抓取資料回來安裝設定,所以馬上執行 `juju status` 會看到以下輸出,表示動作還沒有完成:

$ juju status
environment: local
machines:
  "0":
    agent-state: started
    agent-version: 1.14.0.1
    dns-name: 10.0.3.1
    instance-id: localhost
    series: raring
  "1":
    instance-id: pending
    series: precise
  "2":
    instance-id: pending
    series: precise
services:
  mysql:
    charm: cs:precise/mysql-27
    exposed: false
    relations:
      cluster:
      - mysql
      db:
      - wordpress
    units:
      mysql/0:
        agent-state: pending
        machine: "2"
  wordpress:
    charm: cs:precise/wordpress-16
    exposed: true
    relations:
      db:
      - mysql
      loadbalancer:
      - wordpress
    units:
      wordpress/0:
        agent-state: pending
        machine: "1"

過一會後再執行 `juju status` 就可以看到全部完成的結果了。

$ juju status                                                                                                                                                                     
environment: local
machines:
  "0":
    agent-state: started
    agent-version: 1.14.0.1
    dns-name: 10.0.3.1
    instance-id: localhost
    series: raring
  "1":
    agent-state: started
    agent-version: 1.14.0.1
    instance-id: user-local-machine-1
    instance-state: missing
    series: precise
  "2":
    agent-state: started
    agent-version: 1.14.0.1
    instance-id: user-local-machine-2
    instance-state: missing
    series: precise
services:
  mysql:
    charm: cs:precise/mysql-27
    exposed: false
    relations:
      cluster:
      - mysql
      db:
      - wordpress
    units:
      mysql/0:
        agent-state: started
        agent-version: 1.14.0.1
        machine: "2"
        public-address: 10.0.3.158
  wordpress:
    charm: cs:precise/wordpress-16
    exposed: true
    relations:
      db:
      - mysql
      loadbalancer:
      - wordpress
    units:
      wordpress/0:
        agent-state: started
        agent-version: 1.14.0.1
        machine: "1"
        open-ports:
        - 80/tcp
        public-address: 10.0.3.69

然後就可以連到 10.0.3.69 這個 IP 就可以開始使用 WordPress 了。 :-)

如果想要清掉這些服務,只要執行下面一行指令:

$ sudo juju destroy-environment
WARNING: this command will destroy the "local" environment (type: local)
This includes all machines, services, data and other resources.

Continue [y/N]? y

這樣就會將之前用 `sudo juju bootstrap` 產生的環境整個清除乾淨。

$ tree .juju
.juju
├── charmcache
│   ├── cs_3a_precise_2f_mysql-27.charm
│   └── cs_3a_precise_2f_wordpress-16.charm
├── environments.yaml
├── local-cert.pem
└── local-private-key.pem

1 directory, 5 files

x11-touchscreen-calibrator 自動校正觸控螢幕的小程式

現在的筆記型電腦很多都搭配著觸控螢幕的功能,在 X Window System 上面使用時會遇到一些問題,像是接上外接螢幕後、或是變更螢幕解析度後,使用觸控螢幕時游標不再跟著手指頭觸控到的地方了。

可是我找來找去都沒有可以自動校正的應用程式,於是就開始了這個小小的專案。

專案首頁在 http://fourdollars.github.io/x11-touchscreen-calibrator/

目前這個程式已經放到 Debian 官方套件庫裡面了,也準備了一個 Ubuntu PPA 來使用。

在 Debian/Ubuntu 上面使用方式很簡單,就是安裝它後重新啟動 X Window System 就會自動在背景執行校正動作。

如果有使用上的問題請回報到 https://github.com/fourdollars/x11-touchscreen-calibrator/issues