[最先端から] WindowsでRuby/node環境 [逃げない]


10年近くMacに浮気してたんだがWindowsに帰ってきたよー
というわけで環境構築ではまった所をメモっていきます。

**2017-04-11 Ubuntu 16.04.2 LTS で動作確認済み**

# Bash on Windows いまどこまで来てる？

## .profile 読まれない
情報が錯綜しているけど、環境変数は .profile に書くのが正しい。 (.bash_profile は廃止された)
のだけど、ロードされない、なんでやねん。起動オプションが足りないらしい。
http://pachicoma.hateblo.jp/entry/2016/09/19/Bash_on_Ubuntu_on_Windows%E3%81%A7~/.profile%E3%81%8C%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%AA%E3%81%84%E4%BB%B6%E3%81%AE%E5%AF%BE%E5%BF%9C

## rbenv & ruby
以下のコマンドで普通にインスコできる

```shell-session
 git clone https://github.com/rbenv/rbenv.git ~/.rbenv
 cd ~/.rbenv && src/configure && make -C src
 echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
 git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
 cd
 . .profile
 rbenv install 2.3.1
```

他に 2.3.3 および 2.4.0 はビルド成功を確認した。

## nokogiri
bundle config build.nokogiri "--use-system-libraries --with-xml2-include=/usr/include/libxml2"

## spring がおかしいお？
http://stackoverflow.com/a/40186301/683157

## nodejs
``sudo apt install nodejs`` で 4.2.6が入る。
``sudo apt install npm`` で 3.5.2が入る。

```shell-session
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt install nodejs
```
で 7.0系が入る。 mastodon に 4.6 以降が必要だった。

## yarn
正式サポートされたので
https://yarnpkg.com/en/docs/install#linux-tab
の最初の方法でインストールできる。

```shell-session
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
```

## docker
docker for windows を入れて、 Windows のメイン側を Docker Host とし、 WSL 側には docker toolbox を入れてクライアントから localhost に接続する。

## mysql / postgresql
ふつうに Windows 側に chocolately とかでインストールし、 localhost:5432 とかでつながる。

## sshd を開始できない?
RubyMine はまだ WSL に対応していないが、自分のマシンの WSL 上で ssh サーバを立ち上げ、 remote 扱いで ruby 環境をセットアップすると使える。(パフォーマンスはあまり出ない)
というわけで sshd を立ち上げるのだが、
``sudo apt-get install openssh-server`` でパッケージ入れて、 ``sudo /etc/init.d/ssh start`` で立ち上げられるはずのだが、
``UsePrivilegeSeperation `` を no に変更する必要あるっぽい
http://superuser.com/a/1111750/185240

毎回自分で起動するのめんどいので自動起動したい、という方は
https://wsl-forum.qztc.io/viewtopic.php?f=6&t=10
自動起動は公式 issue が still open なので、もっと素敵な方法が発表される可能性は高い
https://github.com/Microsoft/BashOnWindows/issues/612

## ssh-add でけん
`` eval `ssh-agent` `` ってしてから実行する
http://qiita.com/sshojiro/items/60982f06c1a0ba88c160
fish の場合は ``eval (ssh-agent -c)``

## heroku CLI
ubuntu 用のインストール方法で普通にいけた。すごい
https://devcenter.heroku.com/articles/heroku-cli

## iptables が使えないようだ
https://github.com/Microsoft/BashOnWindows/issues/767
Mac で pow.cx 使ってて、それに代わるものとして [prax.cr](https://github.com/ysbaddaden/prax.cr) 入れようとしたんだけど無理っぽい

## go の1.6をインストール
**2017-11-08** `sudo apt install golang-go` で 1.6 が入る

~~sudo apt-get install golang すると 1.2 がインストールされてしまう。古い。
http://pachicoma.hateblo.jp/entry/2016/09/19/WLS%E3%81%AB%E6%96%B0%E3%81%97%E3%82%81%E3%81%AEGo%E8%A8%80%E8%AA%9E%E7%92%B0%E5%A2%83%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
これで 1.6 が入る。~~


## go build でコケる
```shell-session
: read |0: interrupted system call
```
とか言われるやつ。
https://github.com/Microsoft/BashOnWindows/issues/349
修正済みだが正式リリースはまだ。The Windows 10 Creators update which is due early 2017 でリリースされる見込み。

> I read somewhere that go 1.6.x might work and indeed, 1.6.4 does work for me. More recent versions of go don't work.

という情報もあり。

## ghq
https://github.com/motemen/ghq
使えている。

## hub
https://hub.github.com/
まだインストール出来てない
script/build で失敗する


# 次点としての Vagrant Hyper-V
Bash on Windows でどうしようもないときは仮想マシンを立てるんだけど、 VirtualBox がんばるのも芸がないので Hyper-V を使う。
Hyper-V はほとんどのマシンでデフォルトオフになってて、BIOSの設定でオンにするのだが、 VirtualBox とは排他関係らしく、Hyper-V をオンにするとVirtualBoxはまともに動かないとかなんとか（よくわかってない）
そんで Vagrant の box に Hyper-V 対応と非対応があって、 Hyper-V 対応の Ubuntu ということで以下の box は使えた。

```bash
vagrant init karlatkinson/hyperv-ubuntu-14
vagrant up --provider hyperv
```
provider オプションを毎回つけないと virtualbox を取りに行ってしまうので面倒なのだが、これは ```VAGRANT_DEFAULT_PROVIDER``` という環境変数をセットすればいいらしい。
https://www.vagrantup.com/docs/providers/default.html
Hyper-V の致命的な点として、起動や停止に **管理者権限が必要** になる。言い換えると、 ``vagrant up`` コマンドを打つターミナルをあらかじめ管理者権限で立ち上げる必要がある。これには、 cmd なり git-bash なりを立ち上げる際に以下のようにすると良い。

- スタートメニューキーを押す。スタートメニューが開く
- ``cmd`` とタイプ
- 「最も一致する検索結果」に目当てのアイコンが出て、フォーカスが当たったら ctrl+shift+Enter
- 「このアプリがデバイスに変更を加えることを許可しますか？」というダイアログが出るので、左キー押して Enter

# また追記します。ツッコミ、鉞、大歓迎