Edited at

さくらのレンタルサーバ(スタンダード)でNode.jsをインストールする

More than 3 years have passed since last update.

「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にある「文字コードの自動認識」のものをそっくりそのまま入れさせてもらった。


.vimrc

"#####表示設定#####

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をインストールする方法さくらのレンタルサーバ(スタンダード)に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を以下のように記述。


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の設定を追加。


.cshrc

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入れて、とかって本当にレンタルサーバでできるのか、を調べてみたい。もう少し遊んでみる予定。