Erlang/OTP R13B01 をインストールする

2009/06/10 にリリースされた Erlang/OTP R13B01 を、まっさらに近い CentOS 5.3 にインストールする。デファクトっぽい RPM が見つからないので、コンパイルする方向で。



<pre class='prettyprint'>$ wget http://erlang.org/download/otp_src_R13B01.tar.gz
$ tar zxvf otp_src_R13B01.tar.gz
$ cd otp_src_R13B01
$ ./configure
(snip)
config.status: include/internal/i686-pc-linux-gnu/ethread_header_config.h is unchanged
config.status: creating include/i686-pc-linux-gnu/erl_int_sizes_config.h
config.status: include/i686-pc-linux-gnu/erl_int_sizes_config.h is unchanged
**********************
******* APPLICATIONS INFORMATION ******
**********************

wx : Can not link the wx driver, wx will NOT be useable

***********************
$ make
(snip)
$ sudo make install
</pre>

<p>configure の途中で、いろいろと無いよ、と言われる。言われる度に yum install xxx で前に進む。今回言われたのは、gcc, gcc-c++, ncurses-devel, openssl-devel, java-1.6.0-openjdk, java-1.6.0-openjdk-devel, unixODBC-devel。他に wx driver が無いよと警告が出ているが、CUI 環境のみで使う予定なので無視する。</p>

<p>次に、Erlang で書かれたWebサーバ Yaws をインストールする。2009/07/05 にリリースされた Yaws 1.84 を入れる。</p>

<pre class='prettyprint'>$ wget http://yaws.hyber.org/download/yaws-1.84.tar.gz
$ tar zxvf yaws-1.84.tar.gz
$ cd yaws-1.84
$ ./configure
$ make
$ sudo make install
</pre>

<p>ここで無いよと言われてインストールしたのは pam-devel のみ。</p>

<p>次に、yaws.conf の設定をする。標準では /usr/local/etc/yaws/yaws.conf に置かれているファイルを編集する。ポート番号が Apache とぶつからないようにする。ついでに、logdir (/var/log/yaws) も mkdir しておく。とりあえず chmod 777 で。下記の yaws.conf で、変更したのは port 行のみ。</p>

<pre class='prettyprint'>
port = 8000
listen = 0.0.0.0
docroot = /usr/local/var/yaws/www
appmods = <cgi-bin, yaws_appmod_cgi>


port = 8000
listen = 0.0.0.0
docroot = /tmp
dir_listings = true
statistics = true

realm = foobar
dir = /
user = foo:bar
user = baz:bar




port = 8443
docroot = /tmp
listen = 0.0.0.0
dir_listings = true

keyfile = /usr/local/etc/yaws/yaws-key.pem
certfile = /usr/local/etc/yaws/yaws-cert.pem


</pre>

<p>これで、コマンドラインから yaws と打って起動すれば、http://localhost:8000/ で Yaws のホームページを見ることができる。</p>

git で 22番以外のポートを ssh に使う

コマンドラインで指定する方法が見つからなかった。できないのかな。その代わりに、~/.ssh/config に書いておく。



<pre class="prettyprint">$ cat ~/.ssh/config
Host xxx.yyy.com
User xxxxxx
Hostname xxx.yyy.com
Port 22番じゃないポート番号
</pre>

こちらを参考にした。

<ul> <li>SSHポートが通らなくてもgithub.comにpushする方法</li>
</ul>

Windows で RMySQL を使って UNIX の MySQL DB につなぐときの文字化け

UNIX (Linux) の MySQL DB には UTF-8 でデータが格納されている。Windows 上の R から

RMySQL でデータを取得すると、全て文字化けしてしまう。



<p>しばらく悩んだ結果、my.ini (UNIX での my.cnf に相当) でクライアントの文字エンコーディングを指定すればよいことが判った。</p>

<p>MySQL インストールディレクトリの my.ini の最後に、以下の2行を追加することで解決。</p>

<pre class="prettyprint">[client]
default-character-set=utf8
</pre>

<p>DB から読み込んだデータは UTF-8 なので、SJIS を期待しているコンソールにそのまま表示させると化ける。そこで

Encoding() の出番。</p>

<pre class="prettyprint">Encoding(table1$column1) <- ‘UTF-8’
</pre>

<p>このベクトルは UTF-8 ですよ、と教えてあげることで、コンソールに化けずに表示できるようになる。</p>
<p>しかし、このデータを dbWriteTable() すると、また化ける。</p>
<pre class="prettyprint">dbWriteTable(con, ‘test.rarely_used_menus_since_200807’, q)
</pre>
<p>生成されたテーブルを調べてみると、DEFAULT CHARSET が latin1 になっていた。alter database db1
charset utf8 することで、生成されるテーブルの charset も UTF-8 になった。しかし、これでも文字化けする。データに
Encoding() しなければ dbWriteTable() 時には化けない。しかしコンソールで化ける。困った。</p>
<table border="1"><tr>
<th> </th>
<th>dbWriteTable()</th>
<th>コンソール出力</th>
</tr>
<tr>
<th>Encoding() を指定する場合</th>
<td>化ける</td>
<td>化けない</td>
</tr>
<tr>
<th>Encoding() を指定しない場合</th>
<td>化けない</td>
<td>化ける</td>
</tr>
</table>
<p>あともう一息といった感じ。</p>

RMySQL でデータを取得すると Windows版 R が落ちる

Windows版の R で、RMySQL を使って MySQL からデータを取得するときに R

が必ず落ちるという現象に見舞われた。少量のデータだと取得できるのに、ちょっと多くなると、落ちる。



<p>ローカルの Windows PC に MySQL 5.1 をインストールし、リモートの Linux の MySQL

サーバにつないで使おうとした。でも、落ちる。ローカルの Windows PC にインストールする MySQL のバージョンと、RMySQL

のバージョンを正しく対応させないといけないようだ。</p>

<p>MySQL 5.0系なら CRAN でインストールできるものでよく、MySQL 5.1系の場合は、RMySQL_0.7-4.zip

を自分でダウンロードして、インストールすればいい。</p>

<pre class="prettyprint">> install.packages(‘RMySQL_0.7-4.zip’)
</pre>

<ul> <li>Windows

Support and Binaries
</li>
</ul>

XFS on LVM (on Amazon EC2)

Amazon EC2 で、XFS を LVM で使おうとしたけど、EBS のスナップショット機能があることを考えると、LVM は余計だった。ということで、意味は薄れたけど、以下、メモ。



<pre class="prettyprint">■ LVM の設定
○ 物理ボリュームをつくる
# pvdisplay
# pvcreate /dev/sdg
Physical volume “/dev/sdg” successfully created
# pvdisplay
“/dev/sdg” is a new physical volume of “100.00 GB”
— NEW Physical volume —
PV Name /dev/sdg
VG Name
PV Size 100.00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID G8RURy-DVjh-h6Vv-Fjh4-oKnn-3Bwj-VyO3l1

○ ボリュームグループをつくる
# vgdisplay
# vgcreate vg1 /dev/sdg
Volume group “vg1” successfully created
# vgdisplay
— Volume group —
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 100.00 GB
PE Size 4.00 MB
Total PE 25599
Alloc PE / Size 0 / 0
Free PE / Size 25599 / 100.00 GB
VG UUID KyPuS8-1BEE-ddXZ-RhdL-0uY7-jffL-uEKqGw

○ 論理ボリュームをつくる
# lvdisplay
# lvcreate -l 25599 -n lv1 vg1
Logical volume “lv1” created
# lvdisplay
— Logical volume —
LV Name /dev/vg1/lv1
VG Name vg1
LV UUID UVybxJ-jVat-Mtk9-7WJ1-axPm-gHTD-kTcXYl
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 GB
Current LE 25599
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0

■ XFS をつくる
○ 管理ツールをインストールする
# yum install xfsprogs

○ ファイルシステムをつくる
# mkfs.xfs /dev/vg1/lv1
meta-data=/dev/vg1/lv1 isize=256 agcount=16, agsize=1638336 blks
= sectsz=512 attr=0
data = bsize=4096 blocks=26213376, imaxpct=25
= sunit=0 swidth=0 blks, unwritten=1
naming =version 2 bsize=4096
log =internal log bsize=4096 blocks=12799, version=1
= sectsz=512 sunit=0 blks, lazy-count=0
realtime =none extsz=4096 blocks=0, rtextents=0

○ fstab に追加してマウント
# cat /etc/fstab
/dev/sda1 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 00
none /dev/shm tmpfs defaults 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
/dev/sda2 /mnt ext3 defaults 0 0
/dev/sda3 swap swap defaults 0 0
/dev/sdf /vol/vol1 ext3 defaults 1 1
/dev/vg1/lv1 /vol/vol2 xfs defaults 1 1


# mount -a

# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 10321208 2511820 7285100 26% /
none 870472 0 870472 0% /dev/shm
/dev/sda2 153899044 6934904 139146516 5% /mnt
/dev/sdf 103212320 11177492 86791948 12% /vol/vol1
/dev/mapper/vg1-lv1 104802308 272 104802036 1% /vol/vol2
</pre>

<p>ここまでできたところで、このボリュームは捨てて XFS 単体で作り直した。</p>