「Node.js」をさくらでやるならVPSを契約しないとだろうなあ、レンタルサーバじゃ無理だよなあ。と思っていたら、できるという噂が。そこで、試してみた。
尚、開発環境はMac OS X 10.9(2014/06時点で最新のもの)。
さくらのレンタルサーバにSSHでログインする
ターミナル(自分の場合はiTerm2)を開いて、sshコマンドでログイン。(サーバの文字コード設定がEUC-JPになっているため、ターミナルの文字コード設定も「Japanese(EUC)」にしないと日本語が文字化けする。)
$ ssh (sakura's login name)@(sakura's domain name)
password:(input your password)
vimをインストール
別に不要かもしれないが、何かと便利そうだったので、vimをインストールすることにした。以下のサイトを参考にさせてもらった。(この後の内容は、ほぼ、このサイトと一緒。)
まず、ソース用のディレクトリを作成して移動。
% mkdir -p $HOME/local/src
% cd $HOME/local/src
ソースを手に入れる。2014/06時点でのvimの最新版は7.4版だが、「extra」なるものと「lang」なるものが7.2版までしかないため、vim本体も7.2版をゲットした。
% wget ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
% wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-extra.tar.gz
% wget ftp://ftp.vim.org/pub/vim/extra/vim-7.2-lang.tar.gz
解凍し、出来上がった「vim72」へ移動。
% tar jxf vim-7.2.tar.bz2
% tar xvzf vim-7.2-extra.tar.gz
% tar xvzf vim-7.2-lang.tar.gz
% cd vim72
パッチ用のディレクトリを作成し、パッチをゲット。(2014/06現在の7.2版のパッチは「446」まである。)
% mkdir patches
% cd patches
% curl -O 'ftp://ftp.vim.org/pub/vim/patches/7.2/7.2.[001-446]'
ひとつ上に戻り、パッチを適用。
% cd ../
% cat patches/7.2.* | patch -p0
インストール。オプションは、参考サイトに従った。
% ./configure --enable-multibyte --enable-xim --enable-fontset --with-features=big --prefix=$HOME/local
% make
% make install
これでインストールは完了。あとは、参考サイトにも書いてある、「vi」で「vim」が起動させるようにする設定を行った。
% cd
% vi .cshrc
"set path = (◯◯...)" となっているカッコ内の一連の記述に「$HOME/local/bin」を追加し、更に、このファイルのどこかに1行、「alias vi vim」の記述を追加。sourceコマンドで、その設定を反映。
% source .cshrc
whichコマンドで確認してみた。
% which vi
vi: aliased to vim
ついでに$HOMEに.vimrcも作成。内容は、Vimの設定ファイルを作ると、ずんWiki - vimにある「文字コードの自動認識」のものをそっくりそのまま入れさせてもらった。
"#####表示設定#####
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント
"#####検索設定#####
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
function! AU_ReCheck_FENC()
if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
let &fileencoding=&encoding
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif
もう一度「vi .vimrc」で開いて、文字色など設定した内容が反映されていることを確認。これで、vimのインストールは完了。
# Node.jsをソースコードからインストール
## その前にlibexecinfoのインストール
[root権限なしでNode.js、MongoDBをインストールする方法](http://uguisu.skr.jp/Windows/node.html) や [さくらのレンタルサーバ(スタンダード)にnode.jsをインストールしてみた](http://blog.tmtr.jp/2013/04/nodejs.html) を参考にした。Node.jsの前に「libexecinfo」とやらをインストールしないとNode.jsをビルドできないらしいので、まずはlibexecinfoをインストールする。
### 更にその前にportsのインストール
そのlibexecinfoをインストールする上で、どうやらportsというもののインストールが必要であるっぽい。[Sakura共用サーバにportsをインストール](http://d.hatena.ne.jp/faw/20090109)を参考に、インストールしてみた。
まずはports treeとやらの取得。
```shell-session:
% cd ~/local
% mkdir work
% mkdir work/ports
% mkdir work/ports/distfiles
% mkdir var
% mkdir var/db
% mkdir var/db/portsnap
% vi work/ports/portsnap.conf
portsnap.confを以下のように記述。
# Default directory where compressed snapshots are stored.
WORKDIR=/home/(user name)/local/var/db/portsnap
# Default location of the ports tree (target for "update" and "extract").
PORTSDIR=/home/(user name)/local/work/ports
# Server or server pool from which to fetch updates. You can change
# this to point at a specific server if you want, but in most cases
# using a "nearby" server won't provide a measurable improvement in
# performance.
SERVERNAME=portsnap.FreeBSD.org
# Trusted keyprint. Changing this is a Bad Idea unless you've received
# a PGP-signed email from <security-officer@FreeBSD.org> telling you to
# change it and explaining why.
KEYPRINT=9b5feee6d69f170e3dd0a2c8e469ddbd64f13f978f2f3aede40c98633216c330
# Example of ignoring parts of the ports tree. If you know that you
# absolutely will not need certain parts of the tree, this will save
# some bandwidth and disk space. See the manual page for more details.
#
# WARNING: Working with an incomplete ports tree is not supported and
# can cause problems due to missing dependencies. If you have REFUSE
# directives and experience problems, remove them and update your tree
# before asking for help on the mailing lists.
#
REFUSE arabic chinese french german hebrew hungarian
REFUSE korean polish portuguese russian ukrainian vietnamese
REFUSE x11 x11-clocks x11-drivers x11-fm x11-fonts x11-servers x11-themes x11-toolkits x11-wm
REFUSE palm cad astro
portsnapコマンドで、このconfigファイルを指定。
% portsnap -f ~/local/work/ports/portsnap.conf fetch extract update
次にportsからのインストール設定。portsからインストールするものは「$HOME/local/ports」に全てインストールするようにした。
% cd ~/local
% mkdir ports
% cd ports/
% mkdir -p bin sbin etc lib tmp/dist tmp/work var/db/pkg var/db/ports var/run
% vi ~/.cshrc
portsとNode.jsのための設定を.cshrcに追加する
以下のsetenvの設定を追加。
setenv PATH ${PATH}:${HOME}/local/ports/bin
setenv NODE_PATH ${HOME}/local/ports/bin/node
setenv NODE_MODULES ${HOME}/local/lib/node_modules
setenv LD_LIBRARY_PATH
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/local/lib
setenv INSTALL_AS_USER yes
setenv PREFIX ${HOME}/local/ports
setenv LOCALBASE ${HOME}/local/ports
setenv PKG_DBDIR ${LOCALBASE}/var/db/pkg
setenv PKG_TMPDIR ${LOCALBASE}/tmp/
setenv PORT_DBDIR ${LOCALBASE}/var/db/pkg
setenv DISTDIR ${LOCALBASE}/tmp/dist
setenv WRKDIRPREFIX ${LOCALBASE}/tmp/work
setenv PORTSDIR ${HOME}/local/work/ports
setenv PKGTOOLS_CONF ${LOCALBASE}/etc/pkgtools.conf
setenv DEPENDS_TARGET 'install clean'
setenv X11BASE ${LOCALBASE}
setenv PKG_CONFIG_PATH "$HOME/local/ports/lib/pkgconfig:$HOME/local/ports/libdata/pkgconfig:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/libdata/pkgconfig:/usr/libdata/pkgconfig"
# Set user and group variables to ourself
setenv BINOWN `whoami`
setenv BINGRP `id -G -n ${BINOWN}`
setenv SHAREOWN ${BINOWN}
setenv SHAREGRP ${BINGRP}
setenv MANOWN ${BINOWN}
setenv MANGRP ${BINGRP}
# Make sure files are installed with correct default permissions
setenv BINMODE 744
setenv SHAREMODE 644
setenv MANMODE 644
# Make sure we don't really try to become root, but just execute everything as ourselves
setenv SU_CMD "sh -c"
# Make sure the systemdefault make.conf is not read
setenv __MAKE_CONF ${LOCALBASE}/etc/make.conf
# Keep our own version of ldconfig hints
setenv LDCONFIG "/sbin/ldconfig -i -f ${LOCALBASE}/var/run/ld-elf.so.hints"
#setenv LDCONFIG "/sbin/ldconfig -f=${LOCALBASE}/var/run/ld-elf.so.hints -i -R=${LOCALBASE}/etc/ld-elf.so.conf "
setenv LD_LIBRARY_PATH ${LOCALBASE}/lib
setenv LD_RUN_PATH ${LOCALBASE}/lib
setenv PATH ${LOCALBASE}/bin:${LOCALBASE}/sbin:${PATH}
setenv MANPATH_MAP ${LOCALBASE}/bin:${LOCALBASE}/man
# Set application specific variables to make sure it doesn't pick up things from the main system
setenv APXS ${LOCALBASE}/sbin/apxs
setenv PERL ${LOCALBASE}/bin/perl
setenv PERL5 ${PERL}
setenv SITE_PERL ${LOCALBASE}/lib/perl5/site_perl/5.8.8
setenv SITE_PERL5 ${SITE_PERL}
setenv PERL_VERSION 5.8.8
setenv PERL_VER ${PERL_VERSION}
setenv SRCCONF ~/local/ports/etc/src.conf
Node.jsのインストール
Node.js公式のダウンロードページからソースコードをゲットし…とやってみたものの、上手くいかなかった。試行錯誤の結果、先ほどインストールしたportsとやらにNode.jsが入っていたので、そちらのものを「make install」することでインストールした。
% cd ~/local/work/ports/www/node
% make install
途中、依存するライブラリに関して「◯◯をインストールしますか」的なダイアログが表示されるが、全てデフォルトのままで「OK」を選び、インストールを続けた。
インストールが完了したら、「node -v」のコマンドで、インストールが正常に完了したかを確認する。
% node -v
v0.10.28
バージョンが表示されれば、インストールは正常に完了。
このあと調べたいこと
で、どこまでNode.jsが使えるかっていう。root権限なしでNode.js、MongoDBをインストールする方法 に書かれているような、express入れて、socket.ioで何やかんやとか、MongoDB入れて、とかって本当にレンタルサーバでできるのか、を調べてみたい。もう少し遊んでみる予定。