[memo] Cloud9 を NanoPi NEO2 にインストールする


はじめに

https://github.com/c9/install

上記で公開されている Cloud9のローカル環境インストール手順は、
64bit ARM 環境にインストールしようとするとエラー終了してしまいます。
半無理やり感もありますが、無事インストールできたのでインストール手順~デバッグ環境構築までを書いてみます。

BeagleBoneBlack : Cloud9 もともと入っている
NanoPi NEO : 公式手順で問題なくインストールできた
NanoPi NEO2 : エラーでてインストールできなかった。
Nanohat PCM5102A : 今回関係なし。(右上のNEOにもくっつけている)

なぜインストールに失敗する?

以下の3つの理由のようです

  • install.sh でアーキテクチャ判定が非対応
    • aarch64 が未サポートなのが原因
  • install.sh で nodejs のパッケージが取れない
    • arch64 ではなく、arm64 として取得しないといけない
  • install.sh で ncurses のビルドに失敗
    • config.guess が古く、./configure で失敗する。
    • config.guess が aarch64 に対応できていない(模様)。

インストール手順 (2017/06/16 現在)

環境

Cloud9 のインストール

インストール中 g++が必要になるので、入っていない場合は apt-get install g++で入れておきます。

では、本題のCloud9インストールです。
arm64以外に入れる場合は

NanoPi-NEO
apt install g++

cd /usr/local
git clone git://github.com/c9/core.git c9sdk
cd c9sdk
./scripts/install-sdk.sh

で済みます。
が、arm64では途中で失敗しまくります。
ですので、期待する結果になるようスクリプト修正しながら進めていきます
install-sdk.sh そのものと、呼び出される install.sh の2つのファイルを編集していきます。
行頭の+-は追加削除です。

NanoPi-NEO2
cd /usr/local
git clone git://github.com/c9/core.git c9sdk
cd c9sdk

cp ./scripts/install-sdk.sh ./scripts/install-sdk-aarch64.sh
nano ./scripts/install-sdk-aarch64.sh
./scripts/install-sdk-aarch64.sh
    ・
    ・
    ・
installGlobalDeps() {
    if ! [[ -f ~/.c9/installed ]]; then
        if [[ $os == "windows" ]]; then
            URL=https://raw.githubusercontent.com/cloud9ide/sdk-deps-win32
        else
            URL=https://raw.githubusercontent.com/c9/install
        fi
-        $DOWNLOAD $URL/master/install.sh | bash
+       cat install.sh | bash
    fi
}
    ・
    ・
    ・
NanoPi-NEO2
wget https://raw.githubusercontent.com/c9/install/master/install.sh
nano install.sh
install.sh
    ・
    ・
    ・
  case "$arch" in
    *armv6l*) arch=armv6l ;;
    *armv7l*) arch=armv7l ;;
+    *aarch64*) arch=arm64 ;;
    *x86_64*) arch=x64 ;;
    *i*86*) arch=x86 ;;
    *)
      echo "Unsupported Architecture: $os $arch" 1>&2
      exit 1
    ;;
  esac

    ・
    ・
    ・

  cd "$C9_DIR"
  echo ":Compiling ncurses..."
  tar xzf ncurses-5.9.tar.gz
+  DOWNLOAD https://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz ncurses-6.0.tar.gz
+  tar xzf ncurses-6.0.tar.gz
+  cp ./ncurses-6.0/config.guess ./ncurses-5.9
+  rm -r ncurses-6.0 
+  rm ncurses-6.0.tar.gz
  rm ncurses-5.9.tar.gz
  cd ncurses-5.9
  echo ":Configuring Ncurses"
  CPPFLAGS=-P ./configure --prefix="$C9_DIR/local" --without-tests --without-cxx
  echo ":Compiling Ncurses"
  make
  echo ":Installing Ncurses"
  make install
    ・
    ・
    ・
NanoPi-NEO2
scripts/install-sdk-aarch64.sh

successでれば成功です!

自動起動

rc.local に起動コマンドを追加。
ディストリビューションによっては、rc.local で自動起動されないので注意。

/etc/rc.local
    ・
    ・
    ・
export HOME=/root
export PATH=$PATH:/root/.c9/node/bin
node /usr/local/c9sdk/server.js -l 0.0.0.0 -a : -w /root/ &
    ・
    ・
    ・

rc.local からcloud9起動するとhome directory must be set になるので、export HOMEも必要になっています。

自動起動自体は上記で動くようになるが、
デバッガ接続等する場合のために node へのパスを通しておく必要がある。
.bash の最終行にでも追加しておく。

nano ~/.bashrc

~/.bashrc
    ・
    ・
    ・
export PATH=$PATH:/root/.c9/node/bin

これでボードが起動すると自動的にCloud9が立ち上がるようになりました

デバッグ環境を整える

python

デバッガを有効にして実行すると以下が表示されるので、素直に従えばOK

stderr
/usr/bin/python2: No module named ikpdb

    To use python debugger install ikpdb by running:

        sudo apt-get update;

        sudo apt-get install python-dev;

        sudo pip install ikpdb;

指示通り
apt-get install python-dev
pip install ikpdb
を実行したらOKだった。

C, C++

デバッガを有効にして実行すると以下が表示されるので、
素直に従えうとハマる。かなりハマる。google先生に聞いても対処策が分からなかった。

srderr
ERROR while lauching the debugger:
     "gdbserver" is not installed

結論は、

apt-get install gdbserver gdb

になるが、gdbserver 入れたのに動かない!って人は、
不適切なエラーログに悩まされている結果かも知れません。
気になる人は以下を直してみてね。

~/.c9\bin\c9gdbshim.js
        this.proc = spawn('gdb', ['-q', '--interpreter=mi2', BIN], {
            detached: false,
            cwd: process.cwd()
        });

        this.proc.on("error", function(e) {
            console.error("ERROR while launching the debugger:");
            if (e.code == "ENOENT") {
-                console.log("\t\"gdbserver\" is not installed");
+                console.log("\t\"gdb\" is not found");
            } else {
                console.error(e);
            }
        });

ARM64用のインストールスクリプト (2018/09/09追加)

ARM64環境用のスクリプトを準備してみました。
以下でインストール&自動起動可能になります。

apt install g++

cd /usr/local
git clone git://github.com/blue777/Cloud9_core_arm64.git c9sdk
cd c9sdk
./scripts/install-sdk.sh

nano /etc/rc.local
-----
・・・
export HOME=/root
export PATH=$PATH:/root/.c9/node/bin
node /usr/local/c9sdk/server.js -l 0.0.0.0 -a : -w /root/ &
-----
reboot