Chefを使って、Ubuntuのタイムゾーンを日本時間(JST)に設定する

Updated:

Ubuntu Linuxでは、タイムゾーンは/etc/localtimeファイルの内容で決まります。日本の会社が提供するVPSでは、あらかじめタイムゾーンが日本時間(JST)に設定されています。

しかし、海外のVPSやVagrantのOSイメージでは、タイムゾーンが現地のものなっていたり、UTCになっているのが普通です。このままでは何かと不便なので、タイムゾーンの設定をJSTに変えたいところです。

各タイムゾーンを表わすファイルは、/usr/share/zoneinfoの中に置かれています。例えば、日本時間(JST)の場合には、/usr/share/zoneinfo/Japanです。/etc/localtimeから、/usr/share/zoneinfoのファイルにシンボリックリンクを張ることによって、マシンのタイムゾーン設定を変えることができます。

次のコマンドを実行すると、日本時間(JST)になります。

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

これをChefのレシピで実現すると次のようになります。linkリソースによってシンボリックリンクを張るだけの簡単な内容です。

#
# chefのレシピ: UbuntuでTimezoneを日本時間(JST)にする
#

link "/etc/localtime" do
  to "/usr/share/zoneinfo/Japan"
end

Windows 7マシンで、VirtualBox+Vagrantを使いUbuntu 14.04を動かす

Updated:

ノートPC(ASUS Zenbook, Windows 7)上に、VirtualBox + Vagrantを使って、Linux環境(Ubuntu 14.04LTS)を作成した際のメモです。

VirtualBoxのインストール

VirtualBoxの公式サイトから、Windows用の最新バージョンをダウンロードします。
今回は、VirtualBox 4.3.12 for Windows hostsをダウンロードしました。

次にダウンロードしたファイルを実行します。途中に、何回かダイアログ(VMが使用するネットワークやUSBのドライバをインストートするか、など)が表示されますが、デフォルトのままで進んで構いません。最後にマシンを再起動してインストールが完了です。

Vagrantのインストール

Vagrantの公式サイトのダウンロードページから、Windows用の最新版をダウンロードします。今回は、Vagrant 1.6.3 for Windowsをダウンロードしました。

次にダウンロードしたファイルを実行します。途中でダイアログが表示されたら、デフォルトを選んで進みます。最後にマシンを再起動してインストールが完了します。これで仮想マシンを実行する準備が整いました。

Vagrant用のOSイメージをインストール

仮想マシン(VM)で使用するOSのイメージは、http://www.vagrantbox.es/で公開されています。様々なOSやディストリビューションがあるので、使いたいものを選びます。ここではUbuntu 14.04 (64bit)のオフィシャル版を使うことにしました。

Official Ubuntu 14.04 daily Cloud Image amd64 (Development release, No Guest Additions):
https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

vagrant box addコマンドを使い、OSのイメージファイルをvagrant環境にダウンロードします。

vagrant box add NAME URL

ここでNAMEは、ダウンロードしたOSイメージに付ける名称です。Vagrantで仮想マシンを起動する際には、この名称を使います。URLはOSイメージのURLです。

実際には次のように指定しました。

vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box

なお、このコマンドは、数百MバイトのOSイメージをダウンロードするので、時間がかかります。しかし、これ以降、実際に仮想マシンを作成して起動する際には、ここでダウンロードしたOSイメージが使用されるので、さほど時間はかかりません。

仮想マシンを初期化して起動する

仮想マシンの設定ファイルを置くために、適当なディレクトリを作成します。仮想マシンを使う際には、このディレトリにcdします。

まず最初にvagrant initコマンドを実行して、仮想マシンを初期化します。2番目の引数にはOSイメージ名ubuntu14.04を指定します。これは、先ほどvagrant box addで指定した名前と同じです。

C:\vagrant\myhost>vagrant init ubuntu14.04
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

仮想マシンを起動するには、vagrant upコマンドを使います。

C:\vagrant\myhost>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu14.04'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: myhost_default_1402444222649_68982
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => C:/vagrant/myhost

これで仮想マシンがスタートしました。ブート時に以下のように、SSH接続のアドレス、ポート、ユーザ名が表示されます(ちなみに、パスワードもvagrantとなっています)。

    default: 22 => 2222 (adapter 1)
 
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant

vagrant本来の使い方では、仮想マシンにログインするにはvagrant sshコマンドを使うのですが、Windowsにはsshコマンドが入っていません。そこで、ターミナルソフト(例えばPutty)を使って、仮想マシンにログインします。

上の実行例では次のように設定すればログインできるはずです。

アドレス: 127.0.0.1
ポート: 2222
ユーザ: vagrant
パスワード: vagrant

ユーザvagrantはsudoできる設定になっているので、あとは好きなようにマシンの環境を設定しましょう。

仮想マシンを停止する

仮想マシンを停止するコマンドはvagrant suspendとvagrant haltの2つがあります。

vagrant suspendコマンド

vagrant suspendは、仮想マシンを「休止状態」(hybernation)にします。つまり現在の仮想マシンの状態をディスクに書き出します。後ほどvagrant upで仮想マシンを起動すると、vagrant suspendした直前の状態からリスタートします。

vagrant haltコマンド

vagrant haltは、仮想マシンの「電源を強制的にオフ」にします。これは起動中のマシンの電源スイッチを切ることに相当します。次にvagrant upすると、仮想マシンはブ一トします。

仮想マシンをシャットダウンする際には、仮想マシンでpoweroffコマンドを実行するほうが良いでしょう。

仮想マシンの状態を調べる: vagrant statusコマンド

仮想マシンの現在の状態を表示します。

suspend状態なら次のように表示されます。

C:\vagrant\myhost>vagrant status
Current machine states:
 
default                   saved (virtualbox)
 
To resume this VM, simply run `vagrant up`.

実行中なら次のように表示されます。

C:\vagrant\myhost>vagrant status
Current machine states:
 
default                   running (virtualbox)
 
The VM is running. To stop this VM, you can run `vagrant halt` to
shut it down forcefully, or you can run `vagrant suspend` to simply
suspend the virtual machine. In either case, to restart it again,
simply run `vagrant up`.

仮想マシンの「電源がオフ」ならば次のように表示されます。

C:\vagrant\myhost>vagrant status
Current machine states:
 
default                   poweroff (virtualbox)
 
The VM is powered off. To restart the VM, simply run `vagrant up`

UnixBenchで仮想サーバのベンチマークを行なう

Updated:

Linux/Unixの性能を比較するのに、UnixBenchというベンチマークテストがよく使われます。このエントリは、Ubuntuで、UnixBenchを実行する手順のメモです。

UnixBenchを実行するには、makeとgccが必要です。それぞれ同名のパッケージをインストールします。

$ sudo apt-get install make gcc

UnixBenchのソースファイルをダウンロード、展開します。2014/5/11時点では、最新版はバージョン5.1.3です。

$ wget https://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
$ tar xvzf UnixBench5.1.3.tgz

ソースはUnixBenchというディレクトリに展開されるので、そこにcdして、ベンチマークを実行します。実行には結構時間がかかります。

$ cd UnixBench/
$ ./Run

実行結果は標準出力に表示されます。次の例は、さくらVPS 2G(3 CPU、メモリ: 2GByte、HDD)の実行結果です。

スコアは2344.6(150行目)。マルチCPUの場合には、1CPUのスコア858.7も表示されます(117行目)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
UnixBench実行結果

さくらVPS 2G

1CPU   858.7
3CPU  2344.6

----------------------------------------------------------------------
   #    #  #    #  #  #    #          #####   ######  #    #   ####   #    #
   #    #  ##   #  #   #  #           #    #  #       ##   #  #    #  #    #
   #    #  # #  #  #    ##            #####   #####   # #  #  #       ######
   #    #  #  # #  #    ##            #    #  #       #  # #  #       #    #
   #    #  #   ##  #   #  #           #    #  #       #   ##  #    #  #    #
    ####   #    #  #  #    #          #####   ######  #    #   ####   #    #

   Version 5.1.3                      Based on the Byte Magazine Unix Benchmark

   Multi-CPU version                  Version 5 revisions by Ian Smith,
                                      Sunnyvale, CA, USA
   January 13, 2011                   johantheghost at yahoo period com


1 x Dhrystone 2 using register variables  1 2 3 4 5 6 7 8 9 10

1 x Double-Precision Whetstone  1 2 3 4 5 6 7 8 9 10

1 x Execl Throughput  1 2 3

1 x File Copy 1024 bufsize 2000 maxblocks  1 2 3

1 x File Copy 256 bufsize 500 maxblocks  1 2 3

1 x File Copy 4096 bufsize 8000 maxblocks  1 2 3

1 x Pipe Throughput  1 2 3 4 5 6 7 8 9 10

1 x Pipe-based Context Switching  1 2 3 4 5 6 7 8 9 10

1 x Process Creation  1 2 3

1 x System Call Overhead  1 2 3 4 5 6 7 8 9 10

1 x Shell Scripts (1 concurrent)  1 2 3

1 x Shell Scripts (8 concurrent)  1 2 3

3 x Dhrystone 2 using register variables  1 2 3 4 5 6 7 8 9 10

3 x Double-Precision Whetstone  1 2 3 4 5 6 7 8 9 10

3 x Execl Throughput  1 2 3

3 x File Copy 1024 bufsize 2000 maxblocks  1 2 3

3 x File Copy 256 bufsize 500 maxblocks  1 2 3

3 x File Copy 4096 bufsize 8000 maxblocks  1 2 3

3 x Pipe Throughput  1 2 3 4 5 6 7 8 9 10

3 x Pipe-based Context Switching  1 2 3 4 5 6 7 8 9 10

3 x Process Creation  1 2 3

3 x System Call Overhead  1 2 3 4 5 6 7 8 9 10

3 x Shell Scripts (1 concurrent)  1 2 3

3 x Shell Scripts (8 concurrent)  1 2 3

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: crewe: GNU/Linux
   OS: GNU/Linux -- 3.2.0-24-generic -- #39-Ubuntu SMP Mon May 21 16:52:17 UTC 2012
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Westmere E56xx/L56xx/X56xx (Nehalem-C) (4800.2 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   CPU 1: Westmere E56xx/L56xx/X56xx (Nehalem-C) (4800.2 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   CPU 2: Westmere E56xx/L56xx/X56xx (Nehalem-C) (4800.2 bogomips)
          Hyper-Threading, x86-64, MMX, Physical Address Ext, SYSCALL/SYSRET
   11:01:51 up 28 days, 23:04,  2 users,  load average: 0.39, 0.17, 0.11; runlevel 2

------------------------------------------------------------------------
Benchmark Run: Sun May 11 2014 11:01:51 - 11:29:58
3 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       23048603.3 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     2922.5 MWIPS (10.0 s, 7 samples)
Execl Throughput                               1750.2 lps   (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        711947.7 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          204926.8 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1440846.8 KBps  (30.0 s, 2 samples)
Pipe Throughput                             1707528.4 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                  12367.7 lps   (10.0 s, 7 samples)
Process Creation                               3317.0 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   5002.2 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1527.1 lpm   (60.0 s, 2 samples)
System Call Overhead                        3041492.1 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   23048603.3   1975.0
Double-Precision Whetstone                       55.0       2922.5    531.4
Execl Throughput                                 43.0       1750.2    407.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     711947.7   1797.8
File Copy 256 bufsize 500 maxblocks            1655.0     204926.8   1238.2
File Copy 4096 bufsize 8000 maxblocks          5800.0    1440846.8   2484.2
Pipe Throughput                               12440.0    1707528.4   1372.6
Pipe-based Context Switching                   4000.0      12367.7     30.9
Process Creation                                126.0       3317.0    263.3
Shell Scripts (1 concurrent)                     42.4       5002.2   1179.8
Shell Scripts (8 concurrent)                      6.0       1527.1   2545.1
System Call Overhead                          15000.0    3041492.1   2027.7
                                                                   ========
System Benchmarks Index Score                                         858.7

------------------------------------------------------------------------
Benchmark Run: Sun May 11 2014 11:29:58 - 11:58:14
3 CPUs in system; running 3 parallel copies of tests

Dhrystone 2 using register variables       61617995.0 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     8639.3 MWIPS (9.7 s, 7 samples)
Execl Throughput                               7591.2 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        751724.9 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          203754.0 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1624047.6 KBps  (30.0 s, 2 samples)
Pipe Throughput                             4786270.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 554642.7 lps   (10.0 s, 7 samples)
Process Creation                              20066.9 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                  11306.3 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1731.6 lpm   (60.1 s, 2 samples)
System Call Overhead                        6606973.4 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   61617995.0   5280.0
Double-Precision Whetstone                       55.0       8639.3   1570.8
Execl Throughput                                 43.0       7591.2   1765.4
File Copy 1024 bufsize 2000 maxblocks          3960.0     751724.9   1898.3
File Copy 256 bufsize 500 maxblocks            1655.0     203754.0   1231.1
File Copy 4096 bufsize 8000 maxblocks          5800.0    1624047.6   2800.1
Pipe Throughput                               12440.0    4786270.2   3847.5
Pipe-based Context Switching                   4000.0     554642.7   1386.6
Process Creation                                126.0      20066.9   1592.6
Shell Scripts (1 concurrent)                     42.4      11306.3   2666.6
Shell Scripts (8 concurrent)                      6.0       1731.6   2886.0
System Call Overhead                          15000.0    6606973.4   4404.6
                                                                   ========
System Benchmarks Index Score                                        2344.6

npmでパッケージインストール時に、依存パッケージが見つからないというエラーを回避する

Updated:

npmでパッケージをインストールしている際に、依存パッケージが見つからずにエラーになってしまうことがあります。

次の例では、generator-marionetteパッケージをインストールしている際に、colorsパッケージのバージョン0.3.0がインストールできずにエラーになっています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cond@derby:marionette-x$ npm install generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette
npm http 200 https://registry.npmjs.org/generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http 200 https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http GET https://registry.npmjs.org/generator-buster
npm http GET https://registry.npmjs.org/underscore.string
 
......
 
npm http GET http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! fetch failed http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! network getaddrinfo ENOTFOUND
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
 
npm ERR! System Linux 3.2.0-58-generic
npm ERR! command "/home/cond/nvm/v0.10.25/bin/node" "/home/cond/nvm/v0.10.25/bin/npm" "install" "generator-marionette"
npm ERR! cwd /home/cond/tmp/marionette-x
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! syscall getaddrinfo
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /home/cond/tmp/marionette-x/npm-debug.log
npm ERR! not ok code 0
cond@derby:marionette-x$

これは、リポジトリ(?)に記録されているcolorsパッケージのURLのホスト名が間違っているのが原因です。

対症療法ですが、あらかじめ単独でcolors@0.3.0をインストールしておけば、問題なくインストールできます。

具体的には、11行目に示されているURL

http://packages:5984/colors/-/colors-0.3.0.tgz

の「packages:5984」という部分を「registry.npmjs.org」に置き換えたURLを指定して、npm installを実行します。

つまり、コマンド

$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz

を実行すれば、colorパッケージのバージョン0.3.0がインストールされます。

cond@derby:marionette-x$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http GET http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http 200 http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
colors@0.3.0 node_modules/colors
cond@derby:marionette-x$

これでcolors@0.3.0がインストールできました。もう1度次のコマンドを実行してやれば、今度は失敗せずにgenerator-marionetteパッケージがインストールされます。

$ npm install generator-marionette

Android端末のCPUの動作状況を表示するツールCPU Spy

Updated:

Androidに限らずモバイル機能は、バッテリー消費を抑えるために、CPUの動作周波数を自動的に変更するようになっています。動作周波数が高いと、きびきびと動作しますが、その代わりに電力をたくさん使います。ですから、CPUが行なう処理が少なくなると、動作周波数を低くして消費電力を抑えてバッテリーを長持ちさせようとします。

どんな感じで周波数の切り替えが行なわれているのかを知りたいと思うのが人情です。調べてみると、CPU Spyというソフトを使えば、各周波数での実行時間の割合を表示することができることがわかりました。

そこで、このCPU Spyをインストールしてみました。

CPU Spy(Google Play)

使い方は簡単で、CPU Spyを起動すると、各周波数での動作時間の割合がグラフで表示されます。

私はAndroid端末を2つ持っています。1つはスマートフォンGalaxy S III Progre、もう1つは7インチタブレットASUS MEMO Pad HD7です。

Galaxy S IIIではこんな感じです。

ASUS MEMO Padではこんな感じです。

Total State Timeが、電源ONあるいはリセット(再起動)からの総経過時間です。

Deep SleepというのはCPUがスリープしている状態で、どちらの端末も約85%の時間はこのモードになっていることがわかります。

Galaxyの方が周波数の段階数が多く、きめ細かく制御しているようです。一方、ASUS MEMO Padは、周波数が4段階しかありません。

また、一番良く使われている周波数は、Galaxyが384MHz(最も低い周波数)であるのに対して、ASUS MEMO Padは1209MHz(最も高い周波数)となっています。(どちらの端末も省電力モードにしています。)

おそらく、7インチタブレットであるASUS MEMO Padの方が、バッテリー容量が大きいので、その分速い周波数で動作させる余裕があるのでしょう。

CPU Spyは3つ設定項目があり、メニューから選択できます。

  • Refreshは、表示する情報を更新します。
  • Reset Timersは、すべての表示項目をゼロにリセットします。つまり、この時点から測定を開始します。
  • Restore Timersは、Reset Timersでリセットした後に、以前に表示したいたデータに戻します。