ap_dark8 という名前で、ターミナル配色と vim カラースキーマを github に公開しました。
http://github.com/apribase/ap_dark8
公開というか、自分が必要で作ったのを github で管理してるから勝手に公開になるだけなんですが、README を初めて Markdown 記法で書いてみたらそれっぽくなったという。
256色ターミナル環境を求めて右往左往してたけど、「そもそもおまえ、256色使えたとして、結局8色しか使わないんだろう…?」という天恵が勝手に聞こえた気がしたので、思い切って8色で作ってみました。
以下、README.md をそのまま抜粋。
github に書いてあるのと同じ。
「Apribase » SaaSes VPS を契約しました」の Debian Lenny 環境構築です。
今回は作業ログの意味でサクっと、説明は簡略化して。
大まかには、開発環境は paco 管理で /opt/paco 以下に make install。
Java 環境は /opt/java 以下に展開。
パッケージ管理は aptitude。
ビルドに必要なライブラリはパッケージでインストール。
サーバはパッケージインストールで LEMP (Linux + NginX + MySQL + PHP) 構築。
初期設定
まずは 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
ビルド用ライブラリパッケージのインストール
オブジェクトファイル操作というか 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-devtmux ビルドに必要な 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} ntpdateXML 処理機能がビルド時に組み込まれるように 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-devGauche などビルドするときに必要になるはずの 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-devXML を使うソフトウェアのビルドで必要になる 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}サーバ関連パッケージのインストール
[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} subversionDebian Lenny の rsync は 3 なのでパッケージでインストール。
2 と 3 の性能の違いっぷりは Apribase » rsync2 と rsync3 のベンチマークの比較とまとめ で以前述べたとおり。
[root@cuderia] # aptitude install rsync rsync
/opt/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 開発環境
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/
環境変数
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
肝は、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 環境の部分もほとんど省略してます。
入れてあるソフトウェアの把握の意味合いが大きいのが今回の作業ログ。
先月、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
Mac を使うようになってから1年半経って振り返り、最初の1ヶ月のときと比べれば少しは変わったので整理です。
曖昧だったままところも使いながらはっきりしましたし。
(Apribase » Mac OS X 環境構築終わりました)
Linux と Mac で新しい環境をつくろうとして試行錯誤中につき、キーマップがバラバラすぎてかつてなくタイピングが遅くなってますけど、それはまた別のお話。
Macbook Pro 2009 Mid スペック
| 項目 | パーツ | ディスプレイ | 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 インストール
インストールディスク
パーティションを分けて 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> |
システム環境設定
Dock
とりあえず全部のアイコンをドラッグアンドドロップで削除します。
Dock のサイズを調整して、拡大もするように。
Spotlight
意識して使わないし、ショートカットを外します。
セキュリティ
外出するときは以下を有効に。
スクリーンセーバから復帰するときのパスワードを要求するようにします。
自動ログインを使用不可にします。
ファイアウォールを有効にします。
キーボード
修飾キーの設定で、Caps Lock を Control にします。
キーボードの発光を無効にします。
メタキーの設定はなぜか Terminal で行うので後で説明。
共有
コンピュータ名を変更します (frederica)。
ホスト名を変更します (frederica.local)。
コンピュータ名とホスト名で分かれてる不思議。
ファイル共有のオプションで、AFP を無効にして SMB を有効にします。
AFP は何がおいしいのか、いまだに分かりません;
リモートログインにチェックをいれて sshd を有効にします。
アカウント
基本、sudo を使うようにするべきと覚えましたけど、せっかく隠されしディレクトリユーティリティの場所は見つけてあるので。
ログインオプションを選択するとネットワークアカウントサーバの接続ボタンが現れます。
そこからディレクトリユーティリティを開くことができます。
そこからさらにメニューバーの編集を選択すると、root ユーザを有効にできるので、パスワードを設定します。
アプリケーション
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
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 する必要あり。
凝った使い方してないですけど、プロンプトの色が変えられてイイデスネ。
シェル環境設定
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
/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
今回一番大きいのは、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 環境
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 のキーボード (キーマップ) の共存のために、ハードウェア/ソフトウェアの両面から方法を模索するお仕事が今の課題。
多言語で幸せになれるよフレームワークなる 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/thriftPython (クライアント) の実装
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






















