2010 年 8 月 28 日 | カテゴリー: プログラム, 環境構築

ap_dark8

ap_dark8 という名前で、ターミナル配色と vim カラースキーマを github に公開しました。
http://github.com/apribase/ap_dark8

公開というか、自分が必要で作ったのを github で管理してるから勝手に公開になるだけなんですが、README を初めて Markdown 記法で書いてみたらそれっぽくなったという。

256色ターミナル環境を求めて右往左往してたけど、「そもそもおまえ、256色使えたとして、結局8色しか使わないんだろう…?」という天恵が勝手に聞こえた気がしたので、思い切って8色で作ってみました。

以下、README.md をそのまま抜粋。
github に書いてあるのと同じ。

続きを読む…

2010 年 6 月 30 日 | カテゴリー: 環境構築

Debian Lenny

Apribase » SaaSes VPS を契約しました」の Debian Lenny 環境構築です。
今回は作業ログの意味でサクっと、説明は簡略化して。

大まかには、開発環境は paco 管理で /opt/paco 以下に make install。
Java 環境は /opt/java 以下に展開。
パッケージ管理は aptitude。
ビルドに必要なライブラリはパッケージでインストール。
サーバはパッケージインストールで LEMP (Linux + NginX + MySQL + PHP) 構築。

初期設定

/etc/apt/source.list

まずは aptitude のリポジトリ設定。
http://ftp.jp.debian.org/debian/ で問題ないのでそのままで。

[root@cuderia] # vim /etc/apt/source.list
[root@cuderia] # aptitude update
[root@cuderia] # aptitude upgrade
[root@cuderia] # reboot

ホスト名を変更。

[root@cuderia] # vim /etc/hostname
1
cuderia.apribase.net

名前解決用に hosts を変更。

[root@cuderia] # vim /etc/hosts
1
2
3
4
5
6
7
8
9
10
127.0.0.1       localhost
163.43.160.182  cuderia.apribase.net cuderia
 
# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
[root@cuderia] # reboot

ssh 鍵の再生成。
デフォルト鍵だとデフォルトホスト名が含まれているので、削除して再生成。

[root@cuderia] # rm /etc/ssh/ssh_host*
[root@cuderia] # dpkg-reconfigure openssh-server
[root@cuderia] # reboot

ビルド用ライブラリパッケージのインストール

ビルド対象 src

オブジェクトファイル操作というか gcc などのために。

[root@cuderia] # aptitude install binutils
binutils

C, C++ コンパイル用に gcc と g++。

[root@cuderia] # aptitude install gcc g++
cpp{a} cpp-4.3{a} g++ g++-4.3{a} gcc gcc-4.3{a} libc6-dev{a} libgmp3c2{a} libgomp1{a} libmpfr1ldbl{a} libstdc++6-4.3-dev{a} linux-libc-dev{a}

時間合わせのために ntp。

[root@cuderia] # aptitude install ntp
libcap1{a} ntp

国際化ライブラリ gettext。

[root@cuderia] # aptitude install gettext
gettext gettext-base{a}

make 用に automake など。

[root@cuderia] # aptitude install autoconf automake libtool file
autoconf automake autotools-dev{a} file libltdl3{a} libltdl3-dev{a} libmagic1{a} libtool m4{a}

マウスを使うようなときなど、大抵必要な ncurses-dev。

[root@cuderia] # aptitude install ncurses-dev
注意: 仮想パッケージ "ncurses-dev" の代わりに
      "libncurses5-dev" を選択します
以下の新規パッケージがインストールされます:
  libncurses5-dev

tmux ビルドに必要な libevent-dev。

[root@cuderia] # aptitude install libevent-dev
libevent-dev libevent1{a}

make にもきっと必要になるであろう字句解析、構文解析用。

[root@cuderia] # aptitude install bison flex
bison flex

ntp 入れたのだから ntpdate も入れておくべきだった。

[root@cuderia] # aptitude install ntpdate
liblockfile1{a} lockfile-progs{a} ntpdate

XML 処理機能がビルド時に組み込まれるように libxml2-dev。

[root@cuderia] # aptitude install libxml2-dev
libxml2{a} libxml2-dev sgml-base{a} xml-core{a}

デバッガを入れてなかったので gdb。

[root@cuderia] # aptitude install gdb
gdb libexpat1{a}

そもそも make も入れてなかった。

[root@cuderia] # aptitude install make
make

パッチを当てられるように patch。

[root@cuderia] # aptitude install patch
patch

colorgcc と colordiff で色づけ。

[root@cuderia] # aptitude install colorgcc colordiff
colorgcc colordiff

ビルド時に png 処理機能が組み込まれるようにlibpng-dev。

[root@cuderia] # aptitude install libpng-dev
注意: 仮想パッケージ "libpng-dev" の代わりに
      "libpng12-dev" を選択します
以下の新規パッケージがインストールされます:
  libpng12-0{a} libpng12-dev zlib1g-dev{a}

ビルド時に jpeg 処理機能が組み込まれるように libjpeg-dev。

[root@cuderia] # aptitude install libjpeg-dev
注意: 仮想パッケージ "libjpeg-dev" の代わりに
      "libjpeg62-dev" を選択します
以下の新規パッケージがインストールされます:
  libjpeg62{a} libjpeg62-dev

Gauche などビルドするときに必要になるはずの libgdbm-dev。

[root@cuderia] # aptitude install libgdbm-dev
libgdbm-dev

ビルド時に SSL が有効になるように openssl。

[root@cuderia] # aptitude install curl libcurl4-openssl-dev openssl
ca-certificates{a} comerr-dev{a} curl libcurl3{a} libcurl4-openssl-dev libglib2.0-0{a} libglib2.0-data{a} libidn11{a} libidn11-dev{a} libkadm55{a} libkrb5-dev{a} libldap-2.4-2{a} libldap2-dev{a}
  libssh2-1{a} libssh2-1-dev{a} libssl-dev{a} openssl pkg-config{a}

Debian フォントマネージャとのこと。defoma。

[root@cuderia] # aptitude install defoma
defoma

readline が組み込まれないといろいろ操作しにくいので libreadline-dev。

[root@cuderia] # aptitude install libreadline-dev
注意: 仮想パッケージ "libreadline-dev" の代わりに
      "libreadline5-dev" を選択します
以下の新規パッケージがインストールされます:
  libreadline5-dev

XML を使うソフトウェアのビルドで必要になる libxml2-utils。

[root@cuderia] # aptitude install libxml2-utils
libxml2-utils

boost をビルドするときに icu を有効にするために libicu-dev。

[root@cuderia] # aptitude install libicu-dev
libicu-dev libicu38{a}

zip を使うビルドに必要な libzip1-dev。

[root@cuderia] # aptitude install libzip1-dev
libzip-dev libzip1{a}

bzip2 を使うビルドに必要な libbz2-dev。

[root@cuderia] # aptitude install libbz2-dev
libbz2-dev

asciidoc をビルドするのに必要な xmlto。
後半はほとんど asciidoc をビルドするためにいろいろ模索してたと思います。git-core をビルドするには asciidoc が必要なのだけど、パッケージで入れると xpdf などが入ってきてしまうので。

[root@cuderia] # aptitude install xmlto
docbook-xml{a} docbook-xsl{a} docbook-xsl-doc-html{a} libpaper-utils{a} libpaper1{a} lynx{a} lynx-cur{a} sgml-data{a}
  xmlto xsltproc{a}

C 向け、XML 解析用 libexpat-dev。

[root@cuderia] # aptitude install libexpat-dev
注意: 仮想パッケージ "libexpat-dev" の代わりに
      "libexpat1-dev" を選択します
以下の新規パッケージがインストールされます:
  libexpat1-dev

これも確か asciidoc のビルドで必要な docbook2x。

[root@cuderia] # aptitude install docbook2x
docbook2x libcompress-raw-zlib-perl{a} libcompress-zlib-perl{a} libfont-afm-perl{a} libhtml-format-perl{a}
  libhtml-parser-perl{a} libhtml-tagset-perl{a} libhtml-tree-perl{a} libio-compress-base-perl{a}
  libio-compress-zlib-perl{a} libmailtools-perl{a} libosp5{a} libtimedate-perl{a} liburi-perl{a} libwww-perl{a}
  libxml-namespacesupport-perl{a} libxml-parser-perl{a} libxml-sax-expat-perl{a} libxml-sax-perl{a} opensp{a} texinfo{a}

サーバ関連パッケージのインストール

MySQL Administrator + ssh portforwarding
ポート対応プロセスを確認するために lsof。

[root@cuderia] # aptitude install lsof
lsof

ACL を使えるように acl。
でもユーザ権限で PHP を動かせたので今は使っていませんが。

[root@cuderia] # aptitude install acl
acl

Debian で chkconfig のようにサービス登録するために sysv-rc-conf。

[root@cuderia] # aptitude install sysv-rc-conf
sysv-rc-conf

PHP は FastCGI 経由で動かすので CGI 版の php5-cgi。

[root@cuderia] # aptitude install php5-cgi
mime-support{a} php5-cgi php5-common{a} ucf{a}

コマンドラインな php5-cli も。

[root@cuderia] # aptitude install php5-cli
php5-cli

MySQL も使うので php5-mysql。

[root@cuderia] # aptitude install php5-mysql
php5-mysql

WordPress と MarsEdit のために XML-RPC を使いたいので php5-xmlrpc。

[root@cuderia] # aptitude install php5-curl php5-xmlrpc php5-xsl
libxslt1.1{a} php5-curl php5-xmlrpc php5-xsl

アクセスカウンタのように PHP で動的画像生成をするために php5-gd。

[root@cuderia] # aptitude install php5-gd
fontconfig-config{a} libfontconfig1{a} libfreetype6{a} libgd2-xpm{a} libt1-5{a} libxpm4{a} php5-gd ttf-dejavu{a} ttf-dejavu-core{a} ttf-dejavu-extra{a}

今回は httpd に Apache ではなく NginX を採用!
パッケージバージョンは 0.6 ですが、特に足りないとは思わなかったので、管理の楽さを優先。パッケージ版のほうが /etc が把握しやすかったので。

[root@cuderia] # #aptitude install nginx
nginx

開発用だけどビルドせずパッケージ管理するツール

subversion は簡単にコミットとチェックアウト程度ができればいいのでパッケージで。
ビルドするために neon や apr-utils を明示的に入れたりしてると管理が面倒だし。

[root@cuderia] # aptitude install subversion
libapr1{a} libaprutil1{a} libneon27-gnutls{a} libpq5{a} libserf-0-0{a} libsqlite3-0{a} libsvn1{a} subversion

Debian Lenny の rsync は 3 なのでパッケージでインストール。
2 と 3 の性能の違いっぷりは Apribase » rsync2 と rsync3 のベンチマークの比較とまとめ で以前述べたとおり。

[root@cuderia] # aptitude install rsync
rsync

/opt/paco 配下にビルドする開発環境

/opt/paco/var/paco

make install で書き込みされたファイルを記録できる paco を使って管理。
/opt/paco/var/paco 配下に記録を残す設定にしたので、その ls 結果が以下。

[root@cuderia] # [root@cuderia] # ll /opt/paco/var/paco
合計 2424
-rw-r--r-- 1 root root  230709 2010-06-23 02:57 Python-2.6.5
-rw-r--r-- 1 root root    4419 2010-06-22 10:44 asciidoc-8.5.3
-rw-r--r-- 1 root root  508793 2010-06-22 10:38 boost_1_43_0
-rw-r--r-- 1 root root   52497 2010-06-22 11:08 git-1.7.1
-rw-r--r-- 1 root root   60948 2010-06-23 03:01 mercurial-1.5.4
-rw-r--r-- 1 root root   27230 2010-06-22 02:25 ocaml-3.11.2
-rw-r--r-- 1 root root     718 2010-06-22 01:59 paco-2.0.7
-rw-r--r-- 1 root root 1404843 2010-06-23 03:00 ruby-1.9.1-p378
-rw-r--r-- 1 root root     191 2010-06-23 01:26 spawn-fcgi-1.6.3
-rw-r--r-- 1 root root     152 2010-06-22 11:18 tmux-1.2
-rw-r--r-- 1 root root   85878 2010-06-22 11:41 vim72
-rw-r--r-- 1 root root   50324 2010-06-22 11:21 zsh-4.3.10

あと、man が展開される場所がソフトウェアによって man と share/man で異なるケースがあるので、事前に /opt/paco/man を /opt/pack/share/man へのシンボリックリンクにしておきます。

[root@cuderia] # cd /opt/paco
ln -s share/man man

まずは paco 自身をインストール。

[root@cuderia] # ./configure --prefix=/opt/paco --with-paco-logdir=/opt/paco/var/paco --disable-gpaco
make
make install
make logme

Python 2.6。

[root@cuderia] # ./configure --prefix=/opt/paco --enable-shared
make
paco -D make install

Ruby 1.9。

[root@cuderia] # ./configure --prefix=/opt/paco --enable-shared --enable-pthread
make
paco -D make install

OCaml。
オプション指定方法などが他と違ってたり。

[root@cuderia] # ./configure -prefix /opt/paco -tk-no-x11
make world; make opt
paco -D make install

Boost。
今までビルドするのはかなり大変だと思っていたけど、実はオプションなしのデフォルトビルドで問題なかったことを今回初めて学習。

[root@cuderia] # bootstrap.sh
paco -D ./bjam install

asciidoc。
今回これが一番依存ライブラリに X を入れてこようとするのが多くて調べるのが大変だったけど、なんとか勝ちました。
そもそもは、git-core をビルドしたかっただけ。

[root@cuderia] # autoconf
./configure
make
python a2x.py -f manpage doc/asciidoc.1.txt
python a2x.py -f manpage doc/a2x.1.txt
paco -D make install

git。github も使っているし、気分的に最新版を使いたい程度だったけど、そのためだけに asciidoc の罠にはまったわけで。勝ちましたが。

PYTHON_PATH を頭につけないと /usr/bin/python を見てきます。

[root@cuderia] # PYTHON_PATH=/opt/paco/bin/python make prefix=/opt/paco all doc info
PYTHON_PATH=/opt/paco/bin/python paco -D make prefix=/opt/paco install install-doc install-html install-info

git-core を入れる環境をそろえているうちに mercurial のビルド環境も整ってしまったために、ついでに mercurial もインストール。

[root@cuderia] # paco -D make install PREFIX=/opt/paco

tmux。
飾りみたいな configure は今後直るのでしょうか。
Linux では GNUmakefile の PREFIX を編集。
Makefile じゃないので注意。

[root@cuderia] # ./configure
vim GNUmakefile
make
paco -D make install

zsh。環境構築が終わったら最後に chsh します。

[root@cuderia] # ./configure --prefix=/opt/paco --enable-multibyte
make
paco -D make install

Debian Lenny のパッケージ vim は 7.1 なので、7.2 を自分でビルド。

[root@cuderia] # ./configure --prefix=/opt/paco --enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-cscope --enable-multibyte --with-features=huge
make
paco -D make install

/opt/java 配下に展開する Java 開発環境

/opt/java

Java 関係の開発環境は展開してシンボリックリンクをはるだけなので、ls の結果だけ記載。
入れたのは、JDK, Ant, Maven, JRuby, Jython, Groovy, Scala, Clojure。
Clojure は Leiningen を使ったほうが遙かに扱いやすいので、lein スクリプトのみインストール。

[root@cuderia] # [root@cuderia] # ll /opt/java/
合計 32
lrwxrwxrwx  1 root root   16 2010-06-22 02:21 ant -> apache-ant-1.8.1/
drwxr-xr-x  6 root root 4096 2010-05-01 07:03 apache-ant-1.8.1/
drwxr-xr-x  6 root root 4096 2010-06-22 02:22 apache-maven-2.2.1/
lrwxrwxrwx  1 root root   12 2010-06-22 02:34 groovy -> groovy-1.7.3/
drwxr-xr-x  6 root root 4096 2010-06-14 17:17 groovy-1.7.3/
lrwxrwxrwx  1 root root   11 2010-06-22 02:20 jdk -> jdk1.6.0_20/
drwxr-xr-x 10 root root 4096 2010-06-22 02:18 jdk1.6.0_20/
lrwxrwxrwx  1 root root   11 2010-06-22 02:23 jruby -> jruby-1.5.1/
drwxr-xr-x  8 root root 4096 2010-06-22 02:23 jruby-1.5.1/
lrwxrwxrwx  1 root root   12 2010-06-23 02:07 jython -> jython-2.5.1/
drwxr-xr-x  7 root root 4096 2010-06-23 02:07 jython-2.5.1/
drwxr-xr-x  3 root root 4096 2010-06-24 23:01 lein/
lrwxrwxrwx  1 root root   18 2010-06-22 02:22 maven -> apache-maven-2.2.1/
lrwxrwxrwx  1 root root   17 2010-06-22 02:35 scala -> scala-2.7.7.final/
drwxr-xr-x  9 root root 4096 2009-10-28 22:19 scala-2.7.7.final/

環境変数

github/apribase

paco 向けに、/etc/ld.so.conf.d/paco.conf を追加。

[root@cuderia] # vim /etc/ld.so.conf.d/paco.conf
1
/opt/paco/lib

/etc/manpath.config の追記も必要。

[root@cuderia] # vim /etc/manpath.config
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
MANDATORY_MANPATH                       /usr/local/share/man
MANDATORY_MANPATH                       /opt/paco/share/man
#---------------------------------------------------------
# set up PATH to MANPATH mapping
# ie. what man tree holds man pages for what binary directory.
#
#               *PATH*        ->        *MANPATH*
#
MANPATH_MAP     /bin                    /usr/share/man
MANPATH_MAP     /usr/bin                /usr/share/man
MANPATH_MAP     /sbin                   /usr/share/man
MANPATH_MAP     /usr/sbin               /usr/share/man
MANPATH_MAP     /usr/local/bin          /usr/local/man
MANPATH_MAP     /usr/local/bin          /usr/local/share/man
MANPATH_MAP     /usr/local/sbin         /usr/local/man
MANPATH_MAP     /usr/local/sbin         /usr/local/share/man
MANPATH_MAP     /usr/X11R6/bin          /usr/X11R6/man
MANPATH_MAP     /usr/bin/X11            /usr/X11R6/man
MANPATH_MAP     /usr/games              /usr/share/man
MANPATH_MAP     /opt/bin                /opt/man
MANPATH_MAP     /opt/sbin               /opt/man
MANPATH_MAP     /opt/paco/bin           /opt/paco/share/man

Java だけでなく、paco 向けの PATH も忘れずに。
PYTHON 向けに PYTHONPATH や、C/C++ 向けに C_INCLUDE_PATH と CPLUS_INCLUDE_PATH も追記。
# 実際には .zshenv は github で管理済み。

[root@cuderia] # vim ~/.zshenv
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
# .zshenv
 
OSTYPE=`uname -s`
 
# for lang --------------------------------------------------------------------
export LANG=ja_JP.UTF-8
 
# for macports/paco -----------------------------------------------------------
case $OSTYPE in
  Darwin*)
    # for macports
    export PORTS_HOME=/opt/ports
    export PATH=$PORTS_HOME/bin:$PORTS_HOME/sbin:$PATH
    export MANPATH=$PORTS_HOME/man:$MANPATH
    export DISPLAY=:0.0
    export C_INCLUDE_PATH=$PORTS_HOME/include:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=$PORTS_HOME/include:$CPLUS_INCLUDE_PATH
  ;;
  Linux*)
    # for paco
    export PACO_HOME=/opt/paco
    export PATH=$PACO_HOME/bin:$PATH
    export C_INCLUDE_PATH=$PACO_HOME/include:$C_INCLUDE_PATH
    export CPLUS_INCLUDE_PATH=$PACO_HOME/include:$CPLUS_INCLUDE_PATH
    export PYTHONPATH=$PACO_HOME/lib/python2.6
  ;;
esac
 
# for java --------------------------------------------------------------------
export JAVA_HOME=/opt/java/jdk
export ANT_HOME=/opt/java/ant
export MAVEN_HOME=/opt/java/maven
export JRUBY_HOME=/opt/java/jruby
export JYTHON_HOME=/opt/java/jython
export GROOVY_HOME=/opt/java/groovy
export SCALA_HOME=/opt/java/scala
export LEIN_HOME=/opt/java/lein
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$JRUBY_HOME/bin:$JYTHON_HOME/bin:$GROOVY_HOME/bin:$GRAILS_HOME/bin:$SCALA_HOME/bin:$LEIN_HOME/bin

Nginx + spawn-fcgi + PHP

apribase 20100619

肝は、FastCGI への転送と rewrite の組み合わせ。
いろいろなサイトで情報がバラバラで困ったけど、静的ファイルを読み込んで、ファイル名がなければ wordpress の index.php へ rewrite で渡す。
.php が呼ばれると FastCGI のプロセスに転送される、という流れ。

/srv/www/apribase.net/public_html にファイルを置いているように見せかけて、ここをサイト管理者のホームディレクトリへのシンボリックリンクにしてます。

[root@cuderia] # vim /etc/nginx/sites-available/apribase.net
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    location / {
        root   /srv/www/apribase.net/public_html;
        index  index.php index.html;
 
        # for static files
        if (-e $request_filename) {
            expires 30d;
            break;
        }
 
        # for wordpress
        if (!-e $request_filename) {
            rewrite ^(.+)$  /index.php?q=$1 last;
        }

FastCGI のための spawn-fcgi も paco 管理でインストール。

/opt/paco/bin/spawn-fcgi で /usr/bin/php5-cgi を呼び出すスクリプトを /opt/paco/bin/php5-fastcgi として作成。

/opt/paco/bin/php5-fastcgi を start/stop できるス /etc/init.d/php5-fastcgi でを作成してsysv-rc-conf で登録。

最初は対象ディレクトリに ACL で httpd 向けに拡張権限をわたそうかと思っていたけど、FastCGI のプロセスをユーザ権限で走らせることで必要なくなりました。

MySQL の操作はユーザだけコマンドで作成してしまって、あとは ssh-portforwarding してローカルマシンから MySQL Administrator による GUI 操作でスキーマ作成など。

ユーザ作成やファイアウォールの設定、デーモンのセキュリティのためのおまじないなど省略。
LEMP 環境の部分もほとんど省略してます。
入れてあるソフトウェアの把握の意味合いが大きいのが今回の作業ログ。

2010 年 6 月 30 日 | カテゴリー: 環境構築

study026_vps

先月、SaaSes の VPS を契約しました。
Linode や RootBSD 等の海外 VPS も試してましたけど、SaaSes も国内のわりに値段は悪くなかったので。
メモリ 1GB で国内で 980円です。

CPU

CPU は Xeon じゃないけど、スペック的には問題なし。

[root@cuderia] # cat /proc/cpuinfo | grep "model name"
model name	: Intel(R) Core(TM)2 Quad CPU    Q8400  @ 2.66GHz

メモリ

メモリは 1GB。

[root@cuderia] # cat /proc/meminfo | grep MemTotal
MemTotal:      1048792 kB

ストレージ

ストレージ容量は 100GB。
パーティションは注文時にコメント欄でお願いしました。

[root@cuderia] # df -hT
Filesystem    Type  サイズ  使用  残り 使用% マウント位置
/dev/xvda3    ext3     20G  3.1G   16G  17% /
tmpfs        tmpfs    513M     0  513M   0% /lib/init/rw
udev         tmpfs     10M  468K  9.6M   5% /dev
tmpfs        tmpfs    513M  4.0K  513M   1% /dev/shm
/dev/xvda1    ext3    132M   81M   47M  64% /boot
/dev/xvda5    ext3     87G  285M   82G   1% /home

OS

注文時にお願いして Debian Lenny を入れてもらいました。
ちなみに Mandriva も一応確認だけは取りましたが、だめでした。

[root@cuderia] # uname -a
Linux cuderia.apribase.net 2.6.26-2-xen-amd64 #1 SMP Sun Jun 20 20:51:58 UTC 2010 x86_64 GNU/Linux

デフォルトホスト名

とりあえず /etc/hostname は変更しますが、rad-xen-vweb1。
/etc/hosts にはローカルに Ubuntu の名前が見えるけど、Xen のホストが Ubuntu で動いている?
他にもいくつかのホスト名が書かれてます。消しましたが。

[root@cuderia] # cat /etc/hostname
rad-xen-vweb1

ssh 鍵

デフォルトの鍵にはデフォルトのホスト名が書かれた鍵が入っているのが VPS のお約束。
そのままでも動くけど再生成。

[root@cuderia] # ls /etc/ssh/
moduli  ssh_config  ssh_host_dsa_key  ssh_host_dsa_key.pub
ssh_host_rsa_key  ssh_host_rsa_key.pub  sshd_config
[root@cuderia] # rm -f ssh_host*
[root@cuderia] # dpkg-reconfigure openssh-server

インストールは手動?スクリプト?

ゴミファイルが残っているような?
Debian インストール直後には普通にあるファイルだったらごめんなさい。
後日確認。Debian インストール後には普通にできてしまうファイルみたいですね。

[root@cuderia] # rm /etc/apt/trusted.gpg~

でもホームディレクトリが root:root になってたあたりは、手動オペレーションのミスかなー。
パーミッション 755 だからログインはできたけど、700 とかだったら危なかったです。
# Linux はディレクトリを見るだけなら r 権限があればいいけれど、cd するためには x 権限が必要。

とはいえ、デフォルトユーザは削除して自分で作り直すのですが。

[root@cuderia] # chown -R username:username /home/username

最初にインストールされているパッケージ

aptitude search ?installed を保存しておいたので、導入直後のインストール済みパッケージのリスト。

[root@cuderia] # cat installed.txt
i   adduser                         - add and remove users and groups
i   apt                             - Advanced front-end for dpkg
i   apt-utils                       - APT utility programs
i   aptitude                        - terminal-based package manager
i   base-files                      - Debian base system miscellaneous files
i   base-passwd                     - Debian base system master password and gro
i   bash                            - The GNU Bourne Again SHell
i   bsdmainutils                    - collection of more utilities from FreeBSD
i   bsdutils                        - Basic utilities from 4.4BSD-Lite
i A busybox                         - Tiny utilities for small and embedded syst
i   bzip2                           - high-quality block-sorting file compressor
i   coreutils                       - The GNU core utilities
i   cpio                            - GNU cpio -- a program to manage archives o
i   cron                            - management of regular background processin
i   debconf                         - Debian configuration management system
i   debconf-i18n                    - full internationalization support for debc
i   debian-archive-keyring          - GnuPG archive keys of the Debian archive
i   debianutils                     - Miscellaneous utilities specific to Debian
i   dhcp3-client                    - DHCP client
i   dhcp3-common                    - common files used by all the dhcp3* packag
i   diff                            - File comparison utilities
i   dmidecode                       - Dump Desktop Management Interface data
i   dpkg                            - Debian package management system
i   e2fslibs                        - ext2 filesystem libraries
i   e2fsprogs                       - ext2/ext3/ext4 file system utilities
i   ed                              - The classic unix line editor
i   findutils                       - utilities for finding files--find, xargs
i   gcc-4.2-base                    - The GNU Compiler Collection (base package)
i   gcc-4.3-base                    - The GNU Compiler Collection (base package)
i   gnupg                           - GNU privacy guard - a free PGP replacement
i   gpgv                            - GNU privacy guard - signature verification
i   grep                            - GNU grep, egrep and fgrep
i   groff-base                      - GNU troff text-formatting system (base sys
i   gzip                            - The GNU compression utility
i   hostname                        - utility to set/show the host name or domai
i   ifupdown                        - high level tools to configure network inte
i   info                            - Standalone GNU Info documentation browser
i   initramfs-tools                 - tools for generating an initramfs
i   initscripts                     - Scripts for initializing and shutting down
i   iproute                         - networking and traffic control tools
i   iptables                        - administration tools for packet filtering
i   iputils-ping                    - Tools to test the reachability of network
i   klibc-utils                     - small utilities built with klibc for early
i   less                            - Pager program similar to more
i   libacl1                         - Access control list shared library
i   libattr1                        - Extended attribute shared library
i   libblkid1                       - block device id library
i   libbz2-1.0                      - high-quality block-sorting file compressor
i   libc6                           - GNU C Library: Shared libraries
i   libcomerr2                      - common error description library
i   libconsole                      - Shared libraries for Linux console and fon
i   libcwidget3                     - high-level terminal interface library for
i   libdb4.6                        - Berkeley v4.6 Database Libraries [runtime]
i   libdevmapper1.02.1              - The Linux Kernel Device Mapper userspace l
i A libedit2                        - BSD editline and history libraries
i   libept0                         - High-level library for managing Debian pac
i   libgcc1                         - GCC support library
i   libgcrypt11                     - LGPL Crypto library - runtime library
i   libgdbm3                        - GNU dbm database routines (runtime version
i   libgnutls26                     - the GNU TLS library - runtime library
i   libgpg-error0                   - library for common error values and messag
i A libgpm2                         - General Purpose Mouse - shared library
i A libkeyutils1                    - Linux Key Management Utilities (library)
i   libklibc                        - minimal libc subset for use with initramfs
i A libkrb53                        - MIT Kerberos runtime libraries
i   liblocale-gettext-perl          - Using libc functions for internationalizat
i   libncurses5                     - shared libraries for terminal handling
i   libncursesw5                    - shared libraries for terminal handling (wi
i   libnewt0.52                     - Not Erik's Windowing Toolkit - text mode w
i   libpam-modules                  - Pluggable Authentication Modules for PAM
i   libpam-runtime                  - Runtime support for the PAM library
i   libpam0g                        - Pluggable Authentication Modules library
i   libpopt0                        - lib for parsing cmdline parameters
i   libreadline5                    - GNU readline and history libraries, run-ti
i   libsasl2-2                      - Cyrus SASL - authentication abstraction li
i   libselinux1                     - SELinux shared libraries
i   libsepol1                       - Security Enhanced Linux policy library for
i   libsigc++-2.0-0c2a              - type-safe Signal Framework for C++ - runti
i   libslang2                       - The S-Lang programming library - runtime v
i   libss2                          - command-line interface parsing library
i   libssl0.9.8                     - SSL shared libraries
i   libstdc++6                      - The GNU Standard C++ Library v3
i   libtasn1-3                      - Manage ASN.1 structures (runtime)
i   libtext-charwidth-perl          - get display widths of characters on the te
i   libtext-iconv-perl              - converts between character sets in Perl
i   libtext-wrapi18n-perl           - internationalized substitute of Text::Wrap
i   libusb-0.1-4                    - userspace USB programming library
i   libuuid1                        - universally unique id library
i A libvolume-id0                   - libvolume_id shared library
i   libwrap0                        - Wietse Venema's TCP wrappers library
i A libx11-6                        - X11 client-side library
i A libx11-data                     - X11 client-side library
i   libxapian15                     - Search engine library
i A libxau6                         - X11 authorisation library
i A libxcb-xlib0                    - X C Binding, Xlib/XCB interface library
i A libxcb1                         - X C Binding
i A libxdmcp6                       - X11 Display Manager Control Protocol libra
i A libxext6                        - X11 miscellaneous extension library
i A libxmuu1                        - X11 miscellaneous micro-utility library
i   linux-image-2.6-xen-amd64       - Linux 2.6 image on AMD64, oldstyle Xen sup
i A linux-image-2.6.26-2-xen-amd64  - Linux 2.6.26 image on AMD64, oldstyle Xen
i A linux-modules-2.6-xen-amd64     - Linux 2.6 modules on AMD64
i A linux-modules-2.6.26-2-xen-amd6 - Linux 2.6.26 modules on AMD64
i   locales                         - GNU C Library: National Language (locale)
i   login                           - system login tools
i   logrotate                       - Log rotation utility
i   lsb-base                        - Linux Standard Base 3.2 init script functi
i   lzma                            - Compression method of 7z format in 7-Zip p
i   makedev                         - creates device files in /dev
i   man-db                          - on-line manual pager
i   manpages                        - Manual pages about using a GNU/Linux syste
i   mawk                            - a pattern scanning and text processing lan
i   mktemp                          - tool for creating temporary files
i   module-init-tools               - tools for managing Linux kernel modules
i   mount                           - Tools for mounting and manipulating filesy
i   nano                            - free Pico clone with some new features
i   ncurses-base                    - basic terminal type definitions
i   ncurses-bin                     - terminal-related programs and man pages
i   net-tools                       - The NET-3 networking toolkit
i   netbase                         - Basic TCP/IP networking system
i   netcat-traditional              - TCP/IP swiss army knife
i A openssh-blacklist               - list of default blacklisted OpenSSH RSA an
i A openssh-blacklist-extra         - list of non-default blacklisted OpenSSH RS
i A openssh-client                  - secure shell client, an rlogin/rsh/rcp rep
i A openssh-server                  - secure shell server, an rshd replacement
i   passwd                          - change and administer password and group d
i   perl                            - Larry Wall's Practical Extraction and Repo
i   perl-base                       - minimal Perl system
i A perl-modules                    - Core Perl modules
i   procps                          - /proc file system utilities
i   readline-common                 - GNU readline and history libraries, common
i   rsyslog                         - enhanced multi-threaded syslogd
i   sed                             - The GNU sed stream editor
i   ssh                             - secure shell client and server (metapackag
i   sudo                            - Provide limited super user privileges to s
i   sysv-rc                         - System-V-like runlevel change mechanism
i   sysvinit                        - System-V-like init utilities
i   sysvinit-utils                  - System-V-like utilities
i   tar                             - GNU version of the tar archiving utility
i   tasksel                         - Tool for selecting tasks for installation
i   tasksel-data                    - Official tasks used for installation of De
i   tcpd                            - Wietse Venema's TCP wrapper utilities
i   telnet                          - The telnet client
i   traceroute                      - Traces the route taken by packets over an
i   tzdata                          - time zone and daylight-saving time data
i   udev                            - /dev/ and hotplug management daemon
i   unzip                           - De-archiver for .zip files
i   update-inetd                    - inetd configuration file updater
i   util-linux                      - Miscellaneous system utilities
i   util-linux-locales              - Locales files for util-linux
i   vim                             - Vi IMproved - enhanced vi editor
i   vim-common                      - Vi IMproved - Common files
i A vim-runtime                     - Vi IMproved - Runtime files
i   vim-tiny                        - Vi IMproved - enhanced vi editor - compact
i   wget                            - retrieves files from the web
i   whiptail                        - Displays user-friendly dialog boxes from s
i A x11-common                      - X Window System (X.Org) infrastructure
i A xauth                           - X authentication utility
i   zip                             - Archiver for .zip files
i   zlib1g                          - compression library - runtime
2010 年 5 月 30 日 | カテゴリー: 環境構築

20100529 SnowLeopard インストールディスク

Mac を使うようになってから1年半経って振り返り、最初の1ヶ月のときと比べれば少しは変わったので整理です。
曖昧だったままところも使いながらはっきりしましたし。
(Apribase » Mac OS X 環境構築終わりました)

Linux と Mac で新しい環境をつくろうとして試行錯誤中につき、キーマップがバラバラすぎてかつてなくタイピングが遅くなってますけど、それはまた別のお話。

Macbook Pro 2009 Mid スペック

20100516 Macbook Pro をメモリ 8GB に

項目 パーツ
ディスプレイ 15.4インチ LG パネル (9CA3, LED バックライト, 1440×900)
CPU Core 2 Duo P8700 (2.53GHz, L2 Cache 3MB)
グラフィック NVIDIA GeForce 9400M (オンボード)
メモリ 8GB (Hynix 4GBx2 DDR3-1066)
ディスク 80GB (SSD INTEL X25-M)
キーボード 英語配列

Snow Leopard インストール

20100529 Mac OS X インストール.app

インストールディスク

パーティションを分けて SnowLeopard 40GB, Storage 40GB。
インストール前にカスタマイズで、プリンタドライバや言語ファイルを全て外すのは最初の頃と同様。
X11 は外して後で Xquartz を入れます。

個人情報は Command+Q でスキップできることを知っているのだけど、もう登録しちゃったので、素直にそのまま。

ソフトウェア・アップデート

素直にアップデート。
Java もまあ、それなりの頻度でアップデートはしてくれるみたいです。

XCode のインストール

MacPorts のために。/Develop に展開さます。
最初の頃は Mac 環境の Filesystem Hierarchy が全く分からず、Finder もパスを表示してくれなくて迷ってましたけど、今はもう覚えた。

64bit カーネル

64bit カーネルで起動するようにします。

[kei@frederica] $ sudo vim /Library/Preferences/SystemConfiguration/com.apple.Boot.plist
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>Kernel</key>
        <string>mach_kernel</string>
        <key>Kernel Flags</key>
        <string>arch=x86_64</string>
</dict>
</plist>

システム環境設定

20100529 システム環境設定

Dock

とりあえず全部のアイコンをドラッグアンドドロップで削除します。
Dock のサイズを調整して、拡大もするように。

Spotlight

意識して使わないし、ショートカットを外します。

セキュリティ

外出するときは以下を有効に。
スクリーンセーバから復帰するときのパスワードを要求するようにします。
自動ログインを使用不可にします。

ファイアウォールを有効にします。

キーボード

修飾キーの設定で、Caps Lock を Control にします。
キーボードの発光を無効にします。
メタキーの設定はなぜか Terminal で行うので後で説明。

共有

コンピュータ名を変更します (frederica)。
ホスト名を変更します (frederica.local)。
コンピュータ名とホスト名で分かれてる不思議。

ファイル共有のオプションで、AFP を無効にして SMB を有効にします。
AFP は何がおいしいのか、いまだに分かりません;

リモートログインにチェックをいれて sshd を有効にします。

アカウント

基本、sudo を使うようにするべきと覚えましたけど、せっかく隠されしディレクトリユーティリティの場所は見つけてあるので。

ログインオプションを選択するとネットワークアカウントサーバの接続ボタンが現れます。
そこからディレクトリユーティリティを開くことができます。
そこからさらにメニューバーの編集を選択すると、root ユーザを有効にできるので、パスワードを設定します。

アプリケーション

20100529 SnowLeopard アプリケーション

Finder

環境設定から拡張子を表示するようにします。
表示でパスバーを表示するようにします。
Samba に接続するときは移動から。
iso はダブルクリックでマウントして、アンマウントはアイコンを右クリックでできます。

ATOK

言語とテキストをひらいて入力ソースの変更をします。
最初はことえりを有効にせず US のみを使う設定にしているので、US が外せません。
一時的にことえりを有効にして、ATOK を有効にして、US を外して、ことえりを外すと、ATOK だけになります。

英字 (ATOK) とひらがな (ATOK) 以外はあっても操作ミスするだけなので外します。
正直、いまなら Google 日本語入力か、Aqua SKK あたりで遊んだほうがよかったとも思ってます。

Adobe Reader

一回起動して pdf を開くデフォルトアプリケーションにしておきます。

Command+Shift+3

スクリーンショットを撮ります。

DVD Player

何の不満もありません。

Firefox

chaika のみ入れた 2ch ビューアに。
vimperator も入れたけど、両手をキーボードに置くことのないわたしには、あってもなくても、あんまり変わりませんでした。

iTunes

Samba に置いた iTunes Media と同期。

Google Chrome

全くカスタマイズしてないですけど、見た目も Mac 向けな色でした。

Growl

なにかしら Growl を要求してくるアプリケーションがあるし、あればあったで使い道はあるので、言われる前に入れてみた。

Handbreak

iPhone 向けエンコード用。

iWork

Keynote は確かに楽しい。OpenOffice、最近使ってなかったしもう入れてないんです;

jUploadr

64bit Java じゃ動かないから 32bit で強制的に動くようにプロファイルを書き換えてとかやった記憶があるんですが、Snow Leopard 環境にて、デフォルトのままで動いてます。

ただし、画面を一度閉じると復帰できない問題はそのまま。
もうアップデートされていないソフトウェアだし、そこは我慢できる範囲なのでそのままです。

Flickr API を使って自作でもいいのかもしれないですけど、クライアントによって安定さがけっこう問われているあたり大変そうだし、確かに転送失敗時の処理やサムネイル生成とか考えると、ちょっと作るの面倒そう。

MarsEdit

日記更新頻度をあげるために手に入れた WordPress クライアント。
watermint の岡崎さんに触発されて手に入れたけど、これはいいものだー。

確かになくても更新はできなくはないんだけど、Flickr との連動と強力なプレビュー機能のおかげで、日記更新がんばれます。

Preview

切り取りをよく使います。お手軽便利。

Quicksilver

Katapult と Gnome Do を先に使ってきたけど、本家 Quicksilver も、ないと困るレベル。
Katapult のなごりのせいでランチャは Ctrl+K に割り当ててしまっているために、人にシェルたたいてもらったり Emacs を打ってもらったりするときにいつも「アッ・・・」って言われます、ほんとうにごめん。
最近 Command+K に変えましたが、Linux のほうをどうするか困ってます。

うっかり日本語をうつとしばらく反応されなくなったり、完全にキーを受け付けなくなることがあるのがちょっと困る。ATOK 環境がわるい?

SIMBL

Visor のために。

Skype

長文議論用。

Terminal

Visor に取り込まれます。
でも、ここで行う大事な設定もあったり。
環境設定のキーボードのところで、「メタキーとして option キーを使用」を有効にします。

Emacs で使うメタキー、左の指で使うとか苦行すぎと思ってましたが、右にも option (alt) があるのを思い出しまして。
Terminal の設定なのに、Cocoa Emacs (MacPorts) もなぜかこの設定を引き継ぎます。

Visor

すごく、いいもの。ほんとうに、いいもの。
Linux だとこれの代替品がありません。
Yaquake は独自色だけどまあそれなりに、Guake は全く読めない配色で論外です。
Ctrl+Ctrl のダブルクリックで起動できるのも Visor だけ。
基本 Terminal で、配色が最初から Pro になってるのでそのままでよし。
iTerm なんて、いらなかった。

もう、普通の窓型端末エミュレータなんて使えません。

フルスクリーンで使ってます。

VMware Fusion

Parallels で Compiz が動いてるのがくやしかったり、Fusion は Windows 対応のアップデートばかり前面に出してくるし、VirtualBox なら Compiz は動くし OpenSolaris までサポートするしと思うんですが。

VMware Workstation のときと比べて、VM 内でキーボードショートカットを使うとホスト側がそれを奪って話にならないと思っていたんですが、最近知った大事なことが以下。

環境設定でキーボードとマウスのところに「Mac OS キーボードショートカットを有効にする」のチェックを外すと、Workstation と同じように使えるようになりました。
これデフォルトで外しておいてほしかった。

YoruFukurou

夜フクロウ。
ただいまーって言うとおかえりーって言ってくれる、そんなみんなが大好きです。

XQuartz (Xephyr)

X11.app よりいいという話でみんな使ってるから使ってみたレベルですが。
X 上で動くアプリケーションとか、Mac OS X 上なら避けるだろうしなあと思ったものの、Xephyr は使うから、やっぱり大事。

VNC は面倒だし FreeNX もやっぱり面倒で、最初からすぐに使えてかつ使いやすいのはときて Xephyr を使っているので、頻度は少ないけどリモート接続したいときに。

MacPorts

20100529 MacPorts

MacPorts のビルド

MacPorts をダウンロードして /opt/ports に展開。

[kei@frederica] $ cd MacPorts-1.8.2
[kei@frederica] $ ./configure --prefix=/opt/ports
[kei@frederica] $ make
[kei@frederica] $ sudo make install
[kei@frederica] $ sudo /opt/ports/bin/port selfupdate
[kei@frederica] $ sudo /opt/ports/bin/port sync

libiconv +enable_cp932fix

[kei@frederica] $ sudo /opt/ports/bin/port install libiconv +enable_cp932fix

coreutils +with_default_names

[kei@frederica] $ sudo /opt/ports/bin/port install coreutils +with_default_names

findutils +with_default_names

[kei@frederica] $ sudo /opt/ports/bin/port install findutils +with_default_names

wget

[kei@frederica] $ sudo /opt/ports/bin/port install wget

nkf

[kei@frederica] $ sudo /opt/ports/bin/port install nkf

ruby

[kei@frederica] $ sudo /opt/ports/bin/port install ruby

ruby 1.8 が入ります。
ruby 1.9 を入れるには ruby19。
variants で ruby19 の suffix を外すこともできたけど、1.8 だけ入れておくことにしました。

rb-rubygems

[kei@frederica] $ sudo /opt/ports/bin/port install rb-rubygems

ruby19 を入れた場合 gem19 も一緒に入るけど、普通に ruby を入れた場合は gems は別に入れないといけないので。

python26

[kei@frederica] $ sudo /opt/ports/bin/port install python26

とりあえず python 2系。
今の mercurial は python26 依存。
X 関係がいろいろコンパイルされるのがかなしいけど、IDLE のせいなのかな?
/Applications/MacPorts/python 2.6 に IDLE がインストールされます。

python_select

[kei@frederica] $ sudo /opt/ports/bin/port install python_select
[kei@frederica] $ sudo /opt/ports/bin/python_select python26

python26 を python コマンドで使えるようにします。

mercurial

[kei@frederica] $ sudo /opt/ports/bin/port install mercurial

しばらく git 使っていたけど、hg の拡張で遊びたくなって。

git-core +svn

[kei@frederica] $ sudo /opt/ports/bin/port install git-core +svn
[kei@frederica] $ sudo /opt/ports/bin/git config user.name "kei"
[kei@frederica] $ sudo /opt/ports/bin/git config user.email "kei@example.com"

tmux

[kei@frederica] $ sudo /opt/ports/bin/port install tmux

デフォルトのままでも画面分割などすぐに使えるのでまだあまりいじってませんけど。
さすがに Ctrl+b が prefix というのは苦行なので、Ctrl+z に。

ocaml

[kei@frederica] $ sudo /opt/ports/bin/port install ocaml

ghc

[kei@frederica] $ sudo /opt/ports/bin/port install ghc

Haskell。ちゃんとコンパイル通りました。

emacs

[kei@frederica] $ sudo /opt/ports/bin/port install emacs

コンソール版のほう。
vim と違って variants はなくていいです。

flymake や、GUI 版の出来や、アップデートの派手さを見ていたら emacs がうらやましかった。
Ctrl キーを使うということは小指を多用するということを知り、vim のモード切替がいかに指に優しいかを知りました。

emacs-app

[kei@frederica] $ sudo /opt/ports/bin/port install emacs-app

/Applications/Emacs.app という Cocoa で動く GUI Emacs。

Mac は Ctrl キーは UNIX 文化、Command キーは Mac のショートカットと分けられているおかげで、Emacs 上でも Command キーによるコピーやカットができるのが、すごく嬉しい。

Linux (Gnome/KDE) だと当然コピーやカットも Ctrl で行うので、Super キー (Windows キー) で真似しようにもキーマップを変えるだけじゃ実現できないので困ったところ。

そんな理由もあって、Linux と Mac を使い分ける毎日で、タイピングがひどく遅くなってます。タスケテ。

zsh-devel +mp_completion

[kei@frederica] $ sudo /opt/ports/bin/port install zsh-devel +mp_completion

zsh をデフォルトシェルにするには /etc/shells に /opt/ports/bin/zsh を追加してから chsh する必要あり。
凝った使い方してないですけど、プロンプトの色が変えられてイイデスネ。

シェル環境設定

20100529 .zshenv

github config

github に置いた config リポジトリのクローンを持ってきます。
makelinks.sh を使ってホームディレクトリに各設定ファイルのシンボリックリンクをはります。

[kei@frederica] $ cd
[kei@frederica] $ /opt/ports/bin/git clone git@github.com:apribase/config.git
[kei@frederica] $ cd config/
[kei@frederica] $ sh makelinks.sh

.zshenv

http://github.com/apribase/config/blob/master/.zshenv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# .zshenv
 
# for lang
export LANG=ja_JP.UTF-8
 
# for macports
export PATH=/opt/ports/bin:/opt/ports/sbin:$PATH
export MANPATH=/opt/ports/man:$MANPATH
export DISPLAY=:0.0
 
# for c/cpp
export C_INCLUDE_PATH=/opt/ports/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/opt/local/include:$CPLUS_INCLUDE_PATH
 
# for java
export JAVA_HOME=/opt/java/jdk
export ANT_HOME=/opt/java/ant
export MAVEN_HOME=/opt/java/maven
export JRUBY_HOME=/opt/java/jruby
export JYTHON_HOME=/opt/java/jython
export GROOVY_HOME=/opt/java/groovy
export GRAILS_HOME=/opt/java/grails
export SCALA_HOME=/opt/java/scala
export PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin:$MAVEN_HOME/bin:$JRUBY_HOME/bin:$JYTHON_HOME/bin:$GROOVY_HOME/bin:$GRAILS_HOME/bin:$SCALA_HOME/bin

MacPorts で入れたファイルにパスを通します。
後で入れる Java 関係のパスもいまここで通しておきます。

.zshrc

http://github.com/apribase/config/blob/master/.zshrc

エイリアスはここに。
MacPorts の bin を PATH の頭に持ってきているので GNU のコマンドオプションが使えているけど、基本的に GNU と Mac (BSD) のコマンドは違うので、オプションエラーが出たら疑うのはここ。

ぜんぜん使ってないのでまだまだ編集中です。

.tmux.conf

http://github.com/apribase/config/blob/master/.tmux.conf

使い始めたばかりですゆえ。

.vimrc

http://github.com/apribase/config/blob/master/.vimrc

ぜんぜん使わなかった跡。

.emacs.el

http://github.com/apribase/config/blob/master/.emacs.el

まだコミットすらしていないほど編集中。
flymake や autocomplete など導入中。

makelinks.sh

http://github.com/apribase/config/blob/master/makelinks.sh

config/ 配下のファイルをホームディレクトリにシンボリックリンクをはります。

Java

20081116 Mac Java 階層構造

/opt/java

[kei@frederica] $ sudo mkdir /opt/java

Java 環境用ディレクトリを用意します。

jdk

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo ln -s /Library/Java/Home jdk

JDK の配置は Apribase » Mac Java の複雑な階層構成のまとめと管理で以前説明した通りです。

ant

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo tar zxvf ~/Downloads/apache-ant-1.8.1-bin.tar.gz
[kei@frederica] $ sudo ln -s apache-ant-1.8.1 ant

maven

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo tar zxvf ~/Downloads/apache-maven-2.2.1-bin.tar.gz
[kei@frederica] $ sudo ln -s apache-maven-2.2.1 maven

jruby

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo tar zxvf ~/Downloads/jruby-1.5.0.tar.gz
[kei@frederica] $ sudo ln -s jruby-1.5.0 jruby

jython

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo java -jar jython_installer-2.5.1.jar
[kei@frederica] $ sudo ln -s jython-2.5.1 jython

GUI インストーラ。
インストール先を /opt/java/jython-2.5.1 に変更して実行します。

groovy

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo unzip ~/Downloads/groovy-binary-1.7.2.zip
[kei@frederica] $ sudo ln -s groovy-1.7.2 groovy

scala

[kei@frederica] $ cd /opt/java/
[kei@frederica] $ sudo tar zxvf ~/Downloads/scala-2.7.7.final.tgz
[kei@frederica] $ sudo ln -s scala-2.7.7.final scala

NetBeans

インストール後はアップデートを行って、プラグインは適宜インストール。
幸い、配色はまだ aloha-color-theme-for-netbeans-61 が使えるのでこれをインストール。

Clonezilla

20100529 Clonezilla

今回一番大きいのは、1年半経って、ついに Mac のシステムバックアップイメージの作成方法が分かったということ。
Windows (NTFS) と Linux (ext3/reiserfs) は今まで True Image でバックアップをとっていたけど、Linux (ext4) と Mac (HFS+) のバックアップはとれないので、ずっと探していました。
最悪、dd も覚悟してました。

google から見つかる各サイトや、2ch のバックアップスレに挙がっているソフトウェアだと True Image のように使えるソフトウェアがなくて困っていたけど、Linux の Migration 関係のテクニックを漁っているときに Clonezilla を知りました。

全くとは言わないけど、Clonezilla で Mac (HFS+) のイメージファイルを作成するネタのページはほとんど見つからないし、True Image の代替を探している人は他にもいるにその人たちも結局代替品を見つけた様子はなかったし。

ずっと True Image を使ってきたわたしの感想として、Clonezilla で Linux (ext4) も Mac (HFS+) もシステムバックアップイメージがとれたので、これで安心して何度壊してもいつでも環境を復元できます。

Mac OS X インストールディスクの使用領域が約 20GB の状態で、Samba にビギナー設定でバックアップイメージを作成しても、30分かからない程度の作成時間で、イメージサイズは 10GB (約 1/2) となり、ほぼ TrueImage と使い勝手は同じです。
ファイルシステムによって使用されるソフトウェアが異なるので速度は変わってくると思いますけど。

VMware 環境

20100529 Mandriva

Mandriva Linux 2010.0

Mac の環境構築は終えてバックアップもとったので、最後に VM の環境を整えておきます。
まずは Linux 環境。
パーティションで分けた /Volumes/Storage 配下に VMware 用ディレクトリを用意します。

Linux 環境は仮想ディスクを事前領域予約で固定で 10GB で作成します。
今は Mandriva を入れてますけど、Gentoo に入れ替え中。

# タイトル スクリーンショット
0 はじめに 1枚
1 DVD イメージの入手 3枚
2 DVD からインストール 62枚
3 urpmi の設定 6枚
4 各種パッケージのインストール 6枚
5 見栄えをよくする作業 28枚
6 Java 環境のインストール 31枚
7 残りのセットアップ作業 13枚
8 イメージバックアップ 4枚

OpenSolaris 2009.06

最近は OpenSolaris をさわることがあるので入れておきます。
頻繁に使うわけでもないので、仮想ディスクは動的領域確保にしています。

最後に

MarsEdit でこの記事を書いて環境構築終了です。
Clonezilla でイメージを作成した以上、もうクリーンインストールを行うことはないでしょう。

パッケージマネージャがない点はまあともかくとして、1年半経った今だと、Visor と Cocoa Emacs と Photoshop の点で Mac もいいなあというところ。

Linux と Mac のキーボード (キーマップ) の共存のために、ハードウェア/ソフトウェアの両面から方法を模索するお仕事が今の課題。

2010 年 5 月 12 日 | カテゴリー: プログラム, 環境構築

thrift

多言語で幸せになれるよフレームワークなる Thrift、はじめました。
多言語というか、各言語ファイルを生成してくれる RPC フレームワーク。

Thrift ってなに

Facebook が2007年にオープンソースとして公開したライブラリらしいですよ。
わたし Facebook やってない。。
国内だと、はてなとかが使っているそうな。

Thrift: Scalable Cross-Language Services Implementation

対応言語

生成可能な対応言語の種類はすさまじいです。

C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml

Smalltalk とか Erlang とか OCaml も!

インストール前の諸注意

boost や ruby-dev など、devel パッケージはそれなりに必要なので入れておいてください。

make 時に ant まで走ってしまい、ivy をダウンロードしようとするので、プロキシ環境下において ant のプロキシ設定が必要です。

[kei@rororina ~]$ export ANT_OPTS="-Dhttp.proxyHost=proxy.example.com -Dhttp.proxyPort=3128"

README にも少し書いてありますが、–prefix オプションを使ってもいくつかのファイルは無視して展開されます。

[kei@rororina thrift-0.2.0]$ ./configure --prefix=$HOME/softwares/thrift-0.2.0 --with-boost=/usr

たとえばこんな風にしてホームディレクトリに閉じ込めようとしても、make までは通りますが、make install でパーミッションエラーになります。

インストール

http://incubator.apache.org/thrift/download/ から tar.gz をダウンロード。
README 曰く、.tar.gz ではなく、svn からダウンロードした場合は、boostsprash.sh を実行する必要があるそうです。

/opt/develop/thrift-0.2.0 にインストールします。
boost の位置はパッケージからインストールした場合を想定しています。

[kei@rororina thrift-0.2.0]$ ./configure --prefix=/opt/develop/thrift-0.2.0 --with-boost=/usr
[kei@rororina thrift-0.2.0]$ make
[kei@rororina thrift-0.2.0]$ sudo make install

例えば ruby のライブラリは /usr/lib/ruby/site_ruby/1.8/thrift/ に展開されてしまうように、いくつかのライブラリは –prefix を無視してインストールされます。

IDL を記述

実際にコードを書いてみます。ここは、みずぴーさんの日記と同じです [1]。

ここでは作業ディレクトリは ~/src とします。

[kei@rororina src]$ vim fact.thrift
1
2
3
service fact{
    i32 fact(1: i32 n)
}

スケルトンを生成

C++ と Python のスケルトンを生成します。
昔は -cpp や -py というオプションだったようですが、昔のオプションを使うと –gen を使うように警告が出ます。

[kei@rororina src]$ thrift --gen cpp --gen py fact.thrift

ruby サーバの例は、thrift-0.2.0 だと生成されるインターフェースが違うのか、Iface がありませんでした [2]。

C++ (サーバ) の実装

gen-cpp/fact_server.skelton.cpp に実装を追記します。

1
2
3
4
5
6
7
8
9
10
11
class factHandler : virtual public factIf {
 public:
  factHandler() {
    // Your initialization goes here
  }
 
  int32_t fact(const int32_t n) {
    // Your implementation goes here
    return (n == 0) ? 1 : n * fact(n - 1);
  }
};

コンパイルします。
ライブラリとヘッダーの位置を教えます。-l (小文字エル) と -I (大文字アイ) は意味を知らない人には同じに見えるので注意。

[kei@rororina src]$ g++ fact.cpp fact_server.skeleton.cpp -o fact \
    -lthrift \
    -L/opt/develop/thrift/lib/ \
    -I/opt/develop/thrift/include/thrift

Python (クライアント) の実装

gen-py/fact.py を作成します。

1
2
3
4
5
6
7
8
9
10
11
12
import thrift
import thrift.transport.TSocket
import thrift.protocol.TBinaryProtocol
import fact.fact
 
socket   = thrift.transport.TSocket.TSocket('localhost',9090)
protocol = thrift.protocol.TBinaryProtocol.TBinaryProtocol(socket)
client   = fact.fact.Client(protocol,protocol)
 
socket.open()
print client.fact(3)
socket.close()

計算サーバ・クライアントの実行

ターミナルを2枚開いたり、tmux で画面分割などして、サーバとクライアントを実行します。

[kei@rororina src]$ LD_LIBRARY_PATH=/opt/develop/thrift/lib/
[kei@rororina src]$ ./gen-cpp/fact
[kei@rororina src]$ python ./gen-py/fact.py
6

参考

[1] Thriftを使おう(2) – みずぴー日記
[2] CyDN – フレームワーク 「 Thrift 」 調査報告
[3] Thrift – ocaml-nagoya

Page 1 of 131234510...Last »
TOP