さくらインターネットのレンタルサーバにNode.jsを導入したので、その方法をまとめました.
0.前提
検証はさくらインターネットのスタンダードプランで行っています.
OSはFreeBSDを利用しています.
Root権限は不要ですが、sshで接続できる環境が必要です.
1. 事前準備
a. portsの設定
libexecinfoをインストールするには、portsの設定が必要になります.portsは後ほどNode.jsをインストールするときにも必要となるので、最初に設定しましょう.
まず、必要なディレクトリとconfファイルの作成をします.
1 2 3 4 5 |
% mkdir -p ~/usr/local/var/db/portsnap % mkdir -p ~/usr/ports/distfiles % vi ~/usr/ports/portsnap.conf |
confファイルの中身は以下の通り.
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 |
# Default directory where compressed snapshots are stored. WORKDIR=${HOME}/usr/local/var/db/portsnap # Default location of the ports tree (target for "update" and "extract"). PORTSDIR=${HOME}/usr/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 |
confファイルを作成したら、以下のコマンドを実行.
* portsnap は secure に FreeBSD の ports ツリーを更新することができるツールです。
1 |
% portsnap -f ~/usr/ports/portsnap.conf fetch extract update |
portsでmakeを実行する際に必要なフォルダを作成します.
1 2 3 4 5 |
% mkdir -p ~/usr/local % cd ~/usr/local % mkdir -p bin sbin etc lib tmp/dist tmp/work var/db/pkg var/db/ports var/run |
次にsetenv の設定をします.環境設定用ファイルを開きます.
1 |
vim .cshrc |
ファイル内でsetenvをしている箇所を探し、以下の設定を追加します.(vimでの検索は Esc → /setenv)
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 39 40 41 42 43 44 45 46 47 |
# [START] setenv for ports setenv INSTALL_AS_USER yes setenv PREFIX ${HOME}/usr/local setenv LOCALBASE ${HOME}/usr/local 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}/usr/ports setenv PKGTOOLS_CONF ${LOCALBASE}/etc/pkgtools.conf setenv DEPENDS_TARGET 'install clean' setenv X11BASE ${LOCALBASE} setenv PKG_CONFIG_PATH "$HOME/usr/local/lib/pkgconfig:$HOME/usr/local/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 setenv SRCCONF ~/usr/ports/etc/src.conf # [ END ] setenv for ports |
2.libexecinfoのインストール
いよいよ、libexecinfoのインストールです.
1 2 3 |
% cd ~/usr/ports/devel/libexecinfo % make install |
最後にスクリーンが青くなるので、OKを選択してEnterを押す.
これでlibexecinfoのインストールは完了です.
2. Node.jsのインストール
a.インストール前の設定
環境設定用ファイルを開きます.
1 |
vim .cshrc |
ファイル内でsetenvをしている箇所を探し、以下の設定を追加します.(vimでの検索は Esc → /setenv)
1 2 3 4 5 6 7 |
# [START] setenv for nodejs setenv PATH ${PATH}:${HOME}/usr/local/bin setenv NODE_PATH ${HOME}/usr/local/lib/node_modules setenv NODE_MODULES ${HOME}/usr/local/bin/node_modules setenv LD_LIBRARY_PATH setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/usr/local/lib # [ END ] setenv for nodejs |
:wqで保存したら、読込ませます.
1 |
source ~/.cshrc |
b. make installの実行
環境変数の設定が終わったら、portsを使ってインストールします.
1 2 3 |
% cd ~/usr/ports/www/node % make install |
以下のようなエラーが表示されたら、1.でインストールしたlibexecinfoを見つかられていません.
1 2 3 4 5 6 7 |
../deps/v8/src/base/logging.cc:9:23: warning: execinfo.h: No such file or directory ../deps/v8/src/base/logging.cc: In function 'void v8::base::DumpBacktrace()': ../deps/v8/src/base/logging.cc:25: error: 'backtrace' was not declared in this scope ../deps/v8/src/base/logging.cc:26: error: 'backtrace_symbols' was not declared in this scope gmake[1]: *** [/home/[ユーザ名]/node/node-v0.12.0/out/Release/obj.target/v8_libbase/deps/v8/src/base/logging.o] Error 1 gmake[1]: Leaving directory `/home/[ユーザ名]/node/node-v0.12.0/out' gmake: *** [node] Error 2 |
gypの修正が必要です.
1 |
vi ~/usr/ports/www/node/work/node-v0.12.0/deps/v8/tools/gyp/v8.gyp |
修正前
1 2 3 4 5 6 7 8 9 |
['OS=="freebsd"', { 'link_settings': { 'libraries': [ '-L/usr/local/lib -lexecinfo', ]}, 'sources': [ '../../src/base/platform/platform-freebsd.cc', '../../src/base/platform/platform-posix.cc' ], |
修正後( [ユーザ名]の箇所は、適宜自分のサーバー上のユーザ名に変更してください.)
1 2 3 4 5 6 7 8 9 10 11 12 |
['OS=="freebsd"', { 'include_dirs+':[ '/home/[ユーザ名]/usr/local/include' ], 'link_settings': { 'libraries': [ '-L/home/[ユーザ名]/usr/local/lib -lexecinfo', ]}, 'sources': [ '../../src/base/platform/platform-freebsd.cc', '../../src/base/platform/platform-posix.cc' ], |
修正が終わったら、再度makeします.
1 |
% make install |
インストールが無事成功すると、以下のようなメッセージが表示されます.
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 |
Note: If you need npm (Node Package Manager), please install www/npm. ====> Compressing man pages (compress-man) ===> Installing for node-0.12.0_1 ===> Checking if node already installed actual-package-depends: dependency on /usr/local/bin/python2 not registered (normal if it belongs to base) ===> Registering installation for node-0.12.0_1 Installing node-0.12.0_1... Note: If you need npm (Node Package Manager), please install www/npm. ===> SECURITY REPORT: This port has installed the following files which may act as network servers and may therefore pose a remote security risk to the system. /home/[ユーザ名]/usr/local/bin/node If there are vulnerabilities in these programs there may be a security risk to the system. FreeBSD makes no guarantee about the security of ports included in the Ports Collection. Please type 'make deinstall' to deinstall the port if this is a concern. For more information, and contact details about the security status of this software, see the following webpage: http://nodejs.org/ |
インストールが成功したことを確認します.
1 2 3 |
% node -v v0.12.0 |
4. 遭遇しがちなエラー
a. バイナリファイルの実行不可
エラーメッセージ:
1 |
Unable to execute binary file |
原因 :
node.jsのバイナリファイルを直接実行していることによるものです.ここの手順に従い、portsのsrcからmake installをする必要があります.
b. make時のエラー
エラーメッセージ:
1 2 3 4 5 6 7 |
../deps/v8/src/base/logging.cc:9:23: warning: execinfo.h: No such file or directory ../deps/v8/src/base/logging.cc: In function 'void v8::base::DumpBacktrace()': ../deps/v8/src/base/logging.cc:25: error: 'backtrace' was not declared in this scope ../deps/v8/src/base/logging.cc:26: error: 'backtrace_symbols' was not declared in this scope gmake[1]: *** [/home/[ユーザ名]/node/node-v0.12.0/out/Release/obj.target/v8_libbase/deps/v8/src/base/logging.o] Error 1 gmake[1]: Leaving directory `/home/[ユーザ名]/node/node-v0.12.0/out' gmake: *** [node] Error 2 |
原因:
libexecinfoが見つかっていません.
portsでインストールしたlibexecinfoの場所を見るようにgypの修正が必要です.
2. b.の手順に従い、makeを修正してください.
c.コマンドが見つからない
エラーメッセージ:
1 2 3 |
% node node: Command not found. |
原因:
環境設定がうまくいっていないか、インストールがうまくいっていません.
~/usr/local/bin/にnodeが存在している場合
→環境設定がうまくいってません.2. a. に従って環境設定をしてください.
~/usr/local/bin/にnodeが存在していない場合
→インストールがうまくいっていません.再度手順に従ってmakeしてください.
Pingback: 1分で出来る!Node.jsAICS | AICS
Pingback: レンタルサーバへのnpmインストールAICS | AICS
Pingback: Node.js でShift_JISを扱う方法AICS | AICS