#author("2016-07-14T10:44:14+09:00","","")
#author("2016-07-14T10:45:55+09:00","","")
*Node.js [#qa8b7d2c]
**公式 [#p9401ccf]
[[公式Node.js:https://nodejs.org/en/]]
//**さくらインターネットスタンダードプランにnodejsをインストール ports編
//[[レンタルサーバへのNode.js導入:http://aics-app.sakura.ne.jp/blog/2015/03/15/%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%81%B8%E3%81%AEnode-js%E5%B0%8E%E5%85%A5/]]を参考にした。

**さくらインターネットスタンダードプランに git をインストール [#h636bf84]
[[さくらインターネットレンタルサーバにGitをインストールする:http://blog.onpu-tamago.net/entry/2016/03/25/182707]]を参考に最新バージョンをインストール

[[https://curl.haxx.se/download/]]から最新版をダウンロード
 wget https://curl.haxx.se/download/curl-7.49.1.tar.gz
 

[[最新のGitソースコード:https://github.com/git/git/releases]]をインストール

[[https://github.com/git/git/archive/v2.9.1.tar.gz]]

「fatal: Unable to find remote helper for ‘https’」が出るので「--with-curl=/usr/local」をつける
[[「fatal: Unable to find remote helper for ‘https’」が出るので「--with-curl=/usr/local」をつける:http://qiita.com/ynakajima/items/d3015c1d5b90cc31c9c7]]

 cd ~/local/src
 wget https://github.com/git/git/archive/v2.9.1.tar.gz
 tar xjvf v2.9.1.tar.gz
 cd git-2.9.1/
 gmake configure
 ./configure --prefix=$HOME/local --enable-pthreads=-pthread --with-curl=/usr/local
 gmake all install

**さくらインターネットスタンダードプランにnodejsをインストール [#e09cf94e]
[[node.js v0.12.0 インストール レンタルサーバー さくらスタンダード編:http://fanblogs.jp/scripts/archive/1/0]]を参考にした。

[[root権限なしでNode.js、MongoDBをインストールする方法:http://uguisu.skr.jp/Windows/node.html]]

***環境変数を追加 [#cae95f63]
.cshrc に下記を追加
 setenv PATH ${PATH}:${HOME}/local/bin
 setenv NODE_PATH ${HOME}/local/lib/node_modules
 setenv NODE_MODULES ${HOME}/local/bin/node_modules
 setenv LD_LIBRARY_PATH
 setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:${HOME}/local/lib

設定を反映させる。
 source ~/.cshrc

***libexecinfoをインストール [#df253821]

 wget ftp://ftp.tw.freebsd.org/pub/distfiles/libexecinfo-1.1.tar.bz2
 tar yxvf libexecinfo-1.1.tar.bz2
 cd libexecinfo-1.1
 vi execinfo.c

81行目を次のように修正する
 -    (char **)cp = &(rval[size]);
 +    cp = (char *)&(rval[size]);

 setenv SRCCONF ~/usr/local/etc/src.conf
 make
 cp libexecinfo.* ~/local/lib/
 cp execinfo.h ~/local/include/


[[https://nodejs.org/download/release/]]から最新版をダウンロード

今回はv0.12.15をダウンロード

 cd ~/
 mkdir -p local/src
 cd local/src
 wget https://nodejs.org/download/release/latest-v0.12.x/node-v0.12.15.tar.gz
 tar xvzf node-v0.12.15.tar.gz
 cd node-v0.12.15

vi deps/v8/tools/gyp/v8.gyp
 ['OS=="freebsd"', {
     'include_dirs+': [
         '${HOME}/local/include'
     ],
     'link_settings': {
         'include_dirs+': [
             '${HOME}/local/include'
         ],
         'libraries': [
             '-L/usr/local/lib -lexecinfo',
             '-L/usr/local/lib -${HOME}/local/lib -lexecinfo',
         ]},
         'sources': [
             '../../src/base/platform/platform-freebsd.cc',
             '../../src/base/platform/platform-posix.cc'
         ],
     }
 ],

下記コマンドでなぜかMD5のエラーが出るので、[[別でダウンロード:http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.zip]]して./deps に置く

./configure --with-intl=small-icu --download=all --prefix=$HOME/local
 creating  ./icu_config.gypi
 * ECMA-402 (Intl) support didn't find ICU in ./deps/icu..
  <http://download.icu-project.org/files/icu4c/55.1/icu4c-55_1-src.zip>
  Fetch: : 0.0MB total, 0.0MB downloaded   
  MD5:      0103b909e19ca9c6497a7ae696c16480  ./deps/icu4c-55_1-src.zip
  Expected: 4cddf1e1d47622fdd9de2cd7bb5001fd      *MISMATCH*
 
  ** Corrupted ZIP? Delete ./deps/icu4c-55_1-src.zip to retry download.
 
  Cannot build Intl without ICU in ./deps/icu.
  (Fix, or disable with "--with-intl=none" )

***deps/v8/src/platform-freebsd.cc を修正 [#fdb381f6]

vi deps/v8/src/platform-freebsd.cc

   std::vector<OS::SharedLibraryAddress> OS::GetSharedLibraryAddresses() {
 -  std::vector<SharedLibraryAddress> result;
 +  std::vector<SharedLibraryAddress> address_result;
    static const int MAP_LENGTH = 1024;
    int fd = open("/proc/self/maps", O_RDONLY);
 -  if (fd < 0) return result;
 +  if (fd < 0) return address_result;
    while (true) {
      char addr_buffer[11];
      addr_buffer[0] = '0';
  @@ -156,10 +156,10 @@ std::vector<OS::SharedLibraryAddress> OS::GetSharedLibraryAddresses() {
      // There may be no filename in this line.  Skip to next.
      if (start_of_path == NULL) continue;
      buffer[bytes_read] = 0;
 -    result.push_back(SharedLibraryAddress(start_of_path, start, end));
 +    address_result.push_back(SharedLibraryAddress(start_of_path, start, end));
    }
    close(fd);
 -  return result;
 +  return address_result;
 }

***deps/v8/src/base/platform/platform-posix.ccを修正 [#yd1bcd37]
vi deps/v8/src/platform-freebsd.cc
 @@ -328,7 +328,7 @@ int OS::GetCurrentThreadId() {
  #elif V8_OS_ANDROID
    return static_cast<int>(gettid());
  #else
 -  return static_cast<int>(pthread_self());
 +  return static_cast<int> ((int64_t) (void *) pthread_self());
  #endif
  }

[[参考:https://github.com/nodejs/node-v0.x-archive/issues/9175]]

***nodejsをインストール [#z38186d0]
 ./configure --with-intl=small-icu --download=all --prefix=$HOME/local
 gmake
 gmake install

**nodist [#vc24a062]
[[node.js インストール備忘録(windows7):http://qiita.com/yokoh9/items/20d6bdc6030a3a861189]]