はじめに
- Bash on Ubuntu on Windowsの、Creators Updateでの強化点&新機能【Insiders Preview版】 - Build Insider
- 上記記事を見ててBoWのインストール、アンインストールを繰り返したり、環境を作り直したりしまくったので、ここにメモを残しておく。
- Versionは Windows 10 Pro ver 1703(Creators Update) 適用後です
- 前述記事で「Bash on Ubuntu on Windows」をBoWと略していたので、この記事も同じように略していく
- BoWの下にあるシステムを「Windows Subsystem for Linux (beta)」といいますが、これもこの記事内は「WSL」と表記します(一部題名とか除く)
Windows Subsystem for Linux (beta) の有効化
- 「コントロールパネル>プログラムと機能>Windowsの機能の有効化または無効化」を選び
- 「Windows Subsystem for Linux (beta)」を有効化しておく。これをしておかないと、BoWを入れる下地ができないので…
- 最初の1回は、有効化と同時にBoWのインストールが走るはずです
BoW 自体 の インストール
- powershell上で下記コマンドを実行(コマンドプロンプトでもいいかもしれない)
lxrun /install
- インストール時にデフォルトユーザ名とそのパスワードの設定を求められるので適宜設定する。
- 下記のようなログが出る
PS> lxrun /install
-- ベータ機能 --
これにより Windows に Ubuntu がインストールされます。Ubuntu は Canonical によって配布される製品であり、
次のサイトに示される条件に基づいてライセンスされています。
https://aka.ms/uowterms
続行するには、"y" を入力してください: y
Windows ストアからダウンロードしています... 100%
ファイル システムを展開しています。この処理には数分かかります...
Ubuntu のロケールを Windows のロケール (ja-JP) と一致するように設定しますか?
既定のロケールは en_US です。
続行するには、"y" を入力してください: y
既定の UNIX ユーザー アカウントを作成してください。ユーザー名は、Windows のユーザー名と一致する必要はありません。
詳細: https://aka.ms/wslusers を参照してください
新しい UNIX ユーザー名を入力してください: hoge
新しい UNIX パスワードを入力してください:
新しい UNIX パスワードを再入力してください:
passwd: password updated successfully
インストールが正常に終了しました
PS>
BoW環境整備系
- BoW自体をインストールしたら、WinキーからBoWを立ち上げるか、コマンドプロンプト等から
bash
コマンドでログインして使用する。
ノンパス設定 sudo
- 取りあえずはsudoのノンパスで使えるようにsudoers に追加する
sudo bash -c "echo \"[デフォルトユーザ名] ALL=(root) NOPASSWD: ALL\" >> /etc/sudoers.d/nonpass_sudo"
sudo chmod 0440 /etc/sudoers.d/nonpass_sudo
sudo visudo -c
- 最後の
sudo visudo -c
にてエラーが出なければOK。壊れたらインストールからやり直し
git 導入
sudo apt-get install git -y
- BoW for Creators update だとデフォルトで
git 2.7.4
が入っている模様だが、後述の手順で必須になりそうなので念の為。
pyenvやrbenvを導入して言語環境を整える
- ベースは Ubuntu 16.04 の為、python系やruby系のツールを利用しようとすると一部バージョン問題が出てきてしまう。その対処として
pyenv
rbenv
を導入して補完していく。
pyenv の install
- pyenvは
pyenv-installer
という公式インストールスクリプトが存在するので活用する - apt-getで入れている依存ライブラリは適当です。後から増減するかもしれません
sudo apt-get install -y gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
vim ~/.bashrc
- 下記を
~/.bashrc
に追記する
PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
- 設定が終わったら、実際に
pyenv
を動かしてみる
pyenv install 2.7.13
pyenv global 2.7.13
rbenvの install
- rbenvも
rbenv-installer
という公式インストールスクリプトが存在するので活用する - apt-getで入れている依存ライブラリは適当です。後から増減するかもしれません
sudo apt-get install -y gcc make autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-installer | bash
vim ~/.bashrc
- 下記を
~/.bashrc
に追記する
PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
- 設定が終わったら、実際に
rbenv
を動かしてみる
rbenv install 2.3.4
rbenv global 2.3.4
- pyenvには自身のupdateに
pyenv update
があるからいいけど、rbenvには存在しない為、サードパーティー製のpluginを入れる - 参考
mkdir -p "$(rbenv root)/plugins"
git clone https://github.com/rkh/rbenv-update.git "$(rbenv root)/plugins/rbenv-update"
アプリケーション/ミドルウェアインストール
ansible
- ansibleの動作にはpyenvとは別にどうやらシステム自体にもpythonが入っていることが必須の模様
- 無いと 'MODULE FAILURE' といわれてこけました
- アプリケーションのインストール後は
pyenv rehash
を忘れずに。
sudo apt-get install -y python
sudo apt-get install -y libffi-dev
pip install ansible
pyenv rehash
- 確認コマンド
ansible all -i localhost, -c local -a 'uname -a'
localhost | SUCCESS | rc=0 >>
Linux xxxxx 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
nginx
- ごく普通に。
sudo apt-get install nginx
sudo service start nginx
curl http://127.0.0.1/
mysql
- ごく普通に…
sudo apt-get install mysql-server
sudo service mysql start
mysql -u root -p -h localhost
scala/sbt
- scala は どこかの誰かさんがscalaインストールshをgistに上げていたので、そのまま使う
- scala インストール前にjdkがいるようなので、インストールsh実行の前に入れておく
sudo apt-get install -y openjdk-9
curl -L https://gist.githubusercontent.com/DanielGGordon/160c32f42f233a4025ce33ee5f4a40f2/raw/3f85a9f5dcbfe5d86552f3ca495b420bc7e5e6d3/updateScalaVersion | sudo bash
- sbt は公式に ubuntuでのインストール手順があるので従う
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823
sudo apt-get update
sudo apt-get install sbt
jenkins
- 公式にubuntuでのインストール方法が記述されているので従う
- 多分、別途jdkいりますが、それは各自入れましょう
wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
sudo service jenkins start
curl http://127.0.0.1:8080/login
zsh
- 普通にapt-getで入りはする。zshの設定は多種多様にわたるような上、自分自身zsh詳しくないので、その後の設定は他の方に任せます
sudo apt-get install -y zsh
その他BoW上で動作する/しない アプリケーションとか
-
apt経由で入れるdocker
- インストール自体は成功して
sudo service docker start
が通ったように 見える が、実際は動いてなさそう - 素直にdocker for windowsへGoですかね…
- インストール自体は成功して
-
ssh
- リモートへのsshは普通に通る
ssh -T git@github.com
は普通に通りました - localhostへのsshはなぜか失敗する
-
sudo service ssh start
してsshd上げても変わらず。何かあるんだろうか?
-
- リモートへのsshは普通に通る
-
その他メジャーアプリ試されたいが、あまり興味なし
- tmux、apache、postgresql、nodejs あたり?
BoW自体のアンインストール
- powershell上で下記コマンドを実行(コマンドプロンプトでもいいかもしれない)
lxrun /uninstall /full
- 下記のようなログが出る
PS> lxrun /uninstall /full
これにより Windows 上の Ubuntu がアンインストールされます。
Ubuntu 環境およびすべての変更内容、新しいアプリケーション、およびユーザー データが削除されます。
続行するには、"y" を入力してください: y
アンインストールしています...
PS>
所感
-
「BoW自体を壊しても、WSL内のBoW自身の全消去→再構築だけで対応可能」 って実はものすごい事なのではないでしょうか
- 「あー、ローカル環境汚くしたのできれいにしなきゃな…」というのが気軽にできるのはBoWやWSLの強みなのかなーと、要・構築スクリプトではあるのですが。
-
あと、MSの言い分をまともに受けるのであれば、「各ミドルウェアの導入手順」については「純粋なUbuntu 16.04のOS上」でもほぼ同じ手順で導入可能 な筈。実際、いくつかのインストール手順は「 Ubuntu上で実行されること前提のスクリプト 」を使ってインストールを行っています。
-
あとは WindowsアプリやIDE(IntelliJとか)との連携がどれだけスムーズ か、によってWSLやBoWの評価が変わりそうです。この辺は開発体験の向上や作業効率の向上に直結しますからね。その辺はまだ Beta 状態なので結論出すにはまだ早いんですが。
-
でもMacOSのTerminalから展開されるローカル環境に勝てるか?と言われると、微妙な感じは受けるので、マカーの皆さんはまだMacOSで頑張る でいいんじゃないかな!
参考記事まとめ
- BoW自体系
- pyenv系
- rbenv系
- ansible系
- scala/sbt系
- jenkins系