「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 vivi: aliased to vim
ついでに$HOMEに.vimrcも作成。内容は、Vimの設定ファイルを作ると、ずんWiki - vimにある「文字コードの自動認識」のものをそっくりそのまま入れさせてもらった。
"#####表示設定#####setnumber"行番号を表示するsettitle"編集中のファイル名を表示setshowmatch"括弧入力時の対応する括弧を表示syntaxon"コードの色分けsettabstop=4"インデントをスペース4つ分に設定setsmartindent"オートインデント"#####検索設定#####setignorecase"大文字/小文字の区別なく検索するsetsmartcase"検索文字列に大文字が含まれている場合は区別して検索するsetwrapscan"検索時に最後まで行ったら最初に戻る" 文字コードの自動認識if&encoding!=# 'utf-8'setencoding=japan
setfileencoding=japan
endifif has('iconv')lets:enc_euc ='euc-jp'lets:enc_jis ='iso-2022-jp'" iconvがeucJP-msに対応しているかをチェックif iconv("\x87\x64\x87\x6a",'cp932','eucjp-ms')==# "\xad\xc5\xad\xcb"lets:enc_euc ='eucjp-ms'lets:enc_jis ='iso-2022-jp-3'" iconvがJISX0213に対応しているかをチェックelseif iconv("\x87\x64\x87\x6a",'cp932','euc-jisx0213')==# "\xad\xc5\xad\xcb"lets:enc_euc ='euc-jisx0213'lets:enc_jis ='iso-2022-jp-3'endif" fileencodingsを構築if&encoding==# 'utf-8'lets:fileencodings_default =&fileencodingslet&fileencodings=s:enc_jis .','. s:enc_euc .',cp932'let&fileencodings=&fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
elselet&fileencodings=&fileencodings .','. s:enc_jis
setfileencodings+=utf-8,ucs-2le,ucs-2if&encoding=~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'setfileencodings+=cp932
setfileencodings-=euc-jp
setfileencodings-=euc-jisx0213
setfileencodings-=eucjp-ms
let&encoding=s:enc_euc
let&fileencoding=s:enc_euc
elselet&fileencodings=&fileencodings .','. s:enc_euc
endifendif" 定数を処分
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')==0let&fileencoding=&encodingendifendfunctionautocmdBufReadPost * call AU_ReCheck_FENC()endif" 改行コードの自動認識setfileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにするif exists('&ambiwidth')setambiwidth=double
endif
もう一度「vi .vimrc」で開いて、文字色など設定した内容が反映されていることを確認。これで、vimのインストールは完了。
```
Node.jsをソースコードからインストール
その前にlibexecinfoのインストール
root権限なしでNode.js、MongoDBをインストールする方法や さくらのレンタルサーバ(スタンダード)にnode.jsをインストールしてみたを参考にした。Node.jsの前に「libexecinfo」とやらをインストールしないとNode.jsをビルドできないらしいので、まずはlibexecinfoをインストールする。
更にその前にportsのインストール
そのlibexecinfoをインストールする上で、どうやらportsというもののインストールが必要であるっぽい。Sakura共用サーバにportsをインストールを参考に、インストールしてみた。
まずはports treeとやらの取得。
% 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 ~/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 -vv0.10.28
バージョンが表示されれば、インストールは正常に完了。
このあと調べたいこと
で、どこまでNode.jsが使えるかっていう。root権限なしでNode.js、MongoDBをインストールする方法に書かれているような、express入れて、socket.ioで何やかんやとか、MongoDB入れて、とかって本当にレンタルサーバでできるのか、を調べてみたい。もう少し遊んでみる予定。