Bash on Ubuntu on WindowsでMojolicious::LiteとかNet::Twitter::Liteを動かす。
Windows 10 Anniversary Update(Windows 10 バージョン 1607)を適用したので、Bash on Ubuntu on Windowsを使ってみました。念には念を入れて、アップグレードツールを使わずにWindows Updateから適用できる段階でアップデートしたのですが、失敗してOSごと起動しなくなったりしました。相変わらずですね。
私の環境の場合、MacTypeとセキュリティソフトとタッチパッドのドライバが原因だったので、セーフモードで無理やり起動させて原因のアプリを停止させた後、ツールからアップデートしたらうまくいきました。
自分のマシンだとWindows Helloは予想通りサポートされなかったので、使いたかった機能がbashだけになりました。
OSビルドは14393.51です。
Tech TIPS:Windows 10のLinux/Ubuntu互換環境でbashを使う – @IT
ここを見ながらbashを使えるようにしてみました。ちなみに、私の環境だと、bashを使うときにコマンドプロンプトのオプションから「従来のコンソールを使う」のチェックボックスを外さないと動きませんでした。
Bash on ubuntu on Windowsが起動できません。 – マイクロソフト コミュニティ
sudoすると、「名前解決が出来ません」と言われてしまうので、/etc/hostsに「127.0.0.1 ホスト名」を追加しておきました。
ちなみにPerlはv5.18.2でした。メイン環境のさくらVPS/CentOS 7環境がv5.16.3なので、ubuntuのほうがバージョン上ですね。
ubuntuのバージョンは以下のとおり。
➜ ~ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
ちなみにoh-my-zsh使ってみたのですが、(やっぱり)文字化けしちゃいました、
ホームディレクトリの実体は以下にありました。
C:\Users\ユーザ名\AppData\Local\lxss\home\ubuntuのユーザ名
cpanでモジュールを導入しようとした
最初はcpanでMojoliciousを入れようとしたのですが、「Warning: the following files are missing in your kit」みたいな感じで全然makeできないので、cpanは使えませんでした。cpanmならいけるかもしれないけどめんどくさいので試してません。
apt-getで導入する
ubuntuだとapt-getでperlのモジュールを導入できるので、sudo apt-getで導入してしまいました。
➜ ~ sudo apt-get install libmojolicious-perl ➜ ~ sudo apt-get install libnet-twitter-lite-perl
無事導入できました。
Mojolicious:Liteを動かしてみる
以下のスクリプトをhypnotoadで実行して、http://localhost:8181にアクセスしてみました。
#!/usr/bin/perl use strict; use warnings; use utf8; use Mojolicious::Lite; app->config( hypnotoad => { listen => ['http://*:8181'], }, ); get '/' => sub { my $self = shift; return $self->render(json =>{test => "hello world"}); } => 'index'; app->start;
わーい動いた。
Net::Twitter::Liteを動かしてみる
以下のスクリプトを動かしてみました。
#!/usr/bin/perl use strict; use warnings; use utf8; use Net::Twitter::Lite::WithAPIv1_1; use Encode; my $nt = Net::Twitter::Lite::WithAPIv1_1->new( consumer_key => $consumer_key, consumer_secret => $consumer_key_secret, access_token => $access_token, access_token_secret => $access_token_secret, ssl => 1 ); my $tl = $nt->user_timeline(); for my $status(@$tl){ print encode_utf8($status->{text} ."\n"); }
わーい動いた。
試したけどできなかったこと
mongodb3は導入できませんでした。以下のStackOverflowの記事と同じ症状です。
Windows 10 Linux Subsystem. How to install MongoDB – Stack Overflow
感想
VirtualBoxでやれ。
ちなみにrm -rfしたらどうなるのかなーと思ったら、やっぱり試してる人がいて「あっ…」てなりました。
`rm -rf /` on Bash on Ubuntu on Windows – Qiita