プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Bash on Ubuntu on Windows でまともにコピー&ペーストできる端末を使う

最近、Bash on Ubuntu on Windows (以後、BoW と略します)をよく使うようになってきました。これよくできてますね。Windowsでありながら、Ubuntu(bash)上であれこれ操作できてしまうので、VirtualBox に Ubuntu のせて・・・なんててんでやらなくなりました。

Creators Update 以後の BoW だと日本語表示・入力も問題ないですしね。

とはいえ、まったく標準のBoW環境に不満がないというわけでもなくて、文字列のコピー&ペースト操作がとにかくやりづらい。 多分、元々のコマンドプロンプトの流れを汲んでいるせいなんでしょうが、個人的には現時点でこれが唯一にして最大の不満です。

ということで、あれこれ調べてみると、同じように使いやすいターミナル環境を求めている人は多いようで、今回はこちらの記事

qiita.com

を参考にさせていただいて、wsltty をインストールしました。

まあ、前述の記事さえ読めばよいのですが、自分用のメモということで、インストール&初期設定時にやったことを書いておきます。

インストール

インストールは全然難しくなく、公式サイトからインストーラをダウンロードして、実行するだけです。 インストール時点のバージョンは 1.7.9 でした。 あ、Windows と BoW は

  • Windows 10 Pro 64bit版 1703
  • Ubuntu 16.04.2 LTS

でした。

設定

インストール後スタートメニューから起動できるようになります。

  • WSL % in mintty
  • WSL ~ in Mintty
  • WSL -l in Mintty

3つメニューが追加されていますが、どれでも起動はできます。違いは、

  • % のものが Windows のユーザーディレクトリ(C:\Users\ユーザー名 など)で起動
  • ~ はubuntuのホームディレクトリ(/home/ubuntuユーザー名 など)で起動
  • -l がログインシェル

とのことです。

ターミナルを起動後、ターミナル上で右クリックするか、ウィンドウの左上のアイコンをクリックするとオプションメニュー『Options』が表示されるので、それを選択します。 オプション画面が表示されたら、あとは好きなように設定します。デフォルトから変更したものは次のものです。

端末の色

f:id:junichim:20170815170708p:plain

Options -> Terminal -> type

を選び

xterm-256color

に変更します。これで色付きで表示されます

.bashrc にて端末種類が xterm-color や *-256color の時に色付きにしているためです

日本語化

Window -> UI language

を選び、

@ Windows language @

に変更します。 これで、 wsltty 再起動後、オプションメニューの表記が(Windows に合わせて)日本語になります。

フォント変更

テキスト -> フォント

を選択して、

フォント種類を Lucida Console から MS ゴシック にして、フォントサイズを 9pt -> 12 pt にしました。 文字が小さいと辛くなってきたので、これでだいぶ見やすくなったかな。

コピーアンドペースト

特に設定を変更しなくてもデフォルトで

  • 選択でコピー
  • 中マウスボタンでペースト

になっています。これだと随分使いやすいなー。 右ボタンでペーストしたいとかあれば、設定変更できるようです。

他にもいろいろと設定すると快適に使えそうですが、とりあえずはこれで試していきます。

CoderDojo伊勢 第3回 へ参加してきました

2017年8月5日(土) 雨上がりの蒸し暑い天気の中、CoderDojo伊勢の第3回へメンター(教え役のスタッフ)として参加してきました。

今回の会場はハートプラザみその 駐車場がいっぱいあって車で来ても楽ですね(近所なんで自転車ですが・・・)。

今日はこんな雰囲気でした。

f:id:junichim:20170805215306p:plain

まだ、ブログで紹介したことなかったので、この機に書いてみたいと思います。

CoderDojoとは?

CoderDojo を知らない方のために、簡単に説明すると、子供を対象としたプログラミング道場、というもので、ボランティア活動で運営しています。 CoderDojo Japan のサイトには、

CoderDojo は7〜17歳の子どもを対象にしたプログラミング道場です。2011年にアイルランドで始まり、世界では69カ国・1,250の道場、日本では全国に90以上の道場があります。

と書かれています。

よくあるプログラミング教室との一番の違いは、CoderDojo は子供が自分のペースで自由に取り組める場を提供することを目的としているものです。 わかりやすく、子供向けのプログラミングクラブといったりもします。

なので、先生がいて、何かのカリキュラムがあって、それに従って教える、というスタイルではなく、参加者が自分でやりたいことを考え、その過程でわからない点を他の参加者やメンターに尋ねるというスタイルになります。個人的にはこのスタンスが気に入ってます。

下記のスライドにまとめていただいているので、これを見るほうがもっとわかりやすいかもしれないですね。

三重県初

三重県でも、子供向けのプログラミング関係のイベントなどがいろいろと増えてきました。 ワークショップ主体でやったり、学校でイベントやったり、教室だったり・・・ 調べるといろいろ出てくると思います。

実は、CoderDojo伊勢 は三重県内で初のDojoです。というか、このブログを書いている時点で CoderDojo Japan を見てみたら、全国に90の道場がありますが、県内ではまだ伊勢だけです。そろそろ県内にも Dojo が増えないかな、と期待しているところです。

(あ、誤解を招くといけないので補足ですが、県内でも CoderDojo ではありませんが、似たような趣旨の活動を行っているところもあります。)

雑感など

第3回になり、メンターも初参加の方が増えてきました。大学生が2名参加してくれていたのがうれしかったですね。 参加者もCoderDojoは初参加だけど、家でやってます、という方もちらほら見かけるようになった印象です。 また、チャンピオン(CoderDojo伊勢の代表者の事)に聞いたところ、募集開始をして、その当日に定員が埋まってしまったとのことです。

なんとなくですが、だんだん世間が『プログラミング』という単語に反応してきているような印象です。

今回以前も参加していたので、それと比較すると、いままでは初心者が多くて、先生対生徒、というスタイルがメインだったようなのですが、今回からは少しでもScratchをやったことのある子どもは経験者として扱うようにしたためか、参加者が自ら作ろうとしている姿勢のようなものを感じました。こういう雰囲気が増えてくるといいなと思っています。

まだ、Scratch しかやってませんが、他の言語もやりたいという子供が増えてきてほしいですね。

最後に

CoderDojo伊勢では メンター・運営に協力してくれる方・寄付などを随時募集しているとのことです。

CoderDojo伊勢 支援のお願い - CoderDojo伊勢 (コーダー道場伊勢) -三重県伊勢市のプログラミング道場-

少しでもご興味を持った方は、ぜひお気軽にコンタクト取ってみてください。

リモートアクセスVPN を QNAP 上で動かす

今まで、こちらの記事にあるように、 SoftEther を利用して自宅LANへのリモートアクセスを実現していました。

しかし、SoftEtherVPN の Server を動かすために動かしていたマシンを廃棄したくなってきたため、これを QNAP 上に移動できないか検討したので、その際のメモをまとめておきます。

QNAP の機種は下記の TS-251+ を使ってます。

www.qnap.com

SoftEther VPN Server 立ち上げ

QNAP TS-251+ だと、 Virtualization Station と Container Station があり、仮想マシンとdockerコンテナを動かすことができます。 dockerコンテナで動かしたいなと思ったのですが、NIC周りでトラブルのが嫌だったので、とりあえずは Virtualization Station (KVM) 上で仮想マシンを立ち上げ、そちらで動かしてみました。

OS は、 Ubuntu 16.04.2 (64bit, サーバー)としました。 SoftEther VPN Server は現時点の最新版を使います(Ver 4.20, Build 9608, rtm)。ダウンロードページはこちらになります。

インストール手順としては、ほぼこちらの記事と変わりないのですが、若干違いがあったところだけ、追記しておきます。

起動方法

Ubuntu は 16.04 からスタートアップ処理が SysVinit から systemd に変更になったそうです。 これに伴い、 /etc/init.d にスタートアップスクリプトを書くスタイルから、 /etc/systemd/system に起動用設定ファイルを書くスタイルになったそうです。

で、ネットを探すと、そのものずばりのサイトがありました。

Systemd用SoftEther設定ファイル - blog.204504byse.info

qiita.com

実際に作成したスクリプトは下記になります。

[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target

リンク先サイトまんまですね。 これを、 /etc/systemd/system/vpnserver.service として保存しておきます。

OS再起動後、vpnserverプロセスが立ち上がっていたらOKです。

(参考)

systemd 一般の話のリンクも載せておきます。

eng-entrance.com

qiita.com

qiita.com

NIC の追加とプロミスキャスモード

SoftEther VPN Server を使って、リモートアクセスを可能にするためには、ローカルブリッジを作る必要があります。

以前の環境だと、 ESXi 上で動かしていたため、ポートグループを作成して、そちらでプロミスキャスモードを設定するという方法を取っていました。 詳しい手順などは、下記を参考にしてください。

blog.mori-soft.com

QNAPの場合、仮想スイッチがあり、物理NICと仮想マシン上の(仮想)NICがこの仮想スイッチを経由して接続されているようです。 でも、仮想スイッチの設定に『プロミスキャスモード』みたいなものがありません。

どう設定すればいいのだろうか? と思って、あれこれ調べたのですが、これといった決め手が見つかりませんでした。

ただ、仮想スイッチは大きく3つの動作モードを持っているようで、仮想マシンと物理NICを直接つなげるような使い方でできるようです(外部専用ネットワーク)。

www.qnap.com

これを使えば、実現できそうな気がします。

ということで、とりあえず、今回は下記のように対応することにしました。

  • 外部専用ネットワークの仮想スイッチを作成する
  • TS-251+ の物理NICが1つ余っているので、これを作成した仮想スイッチにつなげる
  • 仮想マシンに(仮想)NICを追加し、この仮想スイッチに接続する
  • OS側の設定で、追加した仮想NICに対して、IPアドレスを 0.0.0.0 として設定する

外部専用ネットワークの仮想スイッチは、仮想スイッチの作成画面で、

f:id:junichim:20170710161302p:plain

『IPアドレスを割り当てない』を選択すると作れるようです。

設定後の TS-251+ のネットワークの設定画面をみると、こんな感じになります。

f:id:junichim:20170710160613p:plain

ちょっとわかりにくいですが、下側の Virtual Switch 4 というのが外部専用ネットワークで作成した仮想スイッチで、ここにつながっている仮想NICが上記で追加したものです。

/etc/network/interfaces の設定内容はこんな感じです。

mor@ubuntu-vpn:/etc/network$ cat interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto ens3
iface ens3 inet dhcp

# nic for SoftEther VPN Server
# added by Junichi MORI
# 2017/7/9
auto ens4
iface ens4 inet static
address 0.0.0.0

mor@ubuntu-vpn:/etc/network$ 

ens3 が一つ目のNIC、ens4が追加した二つ目のNICになります。

ちなみに、今回は起動時に rc.local とかで ifconfig ens4 promisc としていないのですが、ifconfig で設定内容を表示させると、ens4 に対して PROMISC が表示されていました。 以前セットアップした際は必要かと思っていたのですが、必要ないのかな? Ubuntu 16.04 だからなのか、Linuxは一般にこうなるのか、IPアドレスが 0.0.0.0 だからなのかまでは、ちょっとわからなかったです。

(参考)nicのデバイス名

Ubuntu 15.10 からnicのデバイス名の命名方法が変わっているようです。 eth0 や eth1 じゃなくて、 ens3 や ens4 となっています。

CentOS7 の記事ですが、命名規則がわかりやすかったです。

www.atmarkit.co.jp

お気を付けください。

その他

以前の方法だと、SoftEther VPN Server の設定として VPN Azure を使っていたのですが、結構おもい印象でした(いろんな要因があるので、これだけではないとは思います)。

今回はVPN Azure のよくある質問ページにも書いてある NATトラバーサル(NAT-T, 一般的には UDP ホールパンチング)を使うように変更しました。

とはいっても、クライアントとして SoftEther VPN Client を使えば接続時に自動的に試してくれるので、特別な設定は必要ないです。

SoftEther VPN Client の設定

NAT-Tを使うため、クライアント側では、 Softether VPN Client を使う必要があります。

Windows の場合

下記の手順に従って、インストール、設定をすれば完了です。

8.2 Windows へのインストールと初期設定 - SoftEther VPN プロジェクト

初回起動時に仮想LANカードが作成されます。接続設定として

  • VPN サーバー名(DDNS名)
  • ポート番号
  • VPN接続ユーザー名とパスワード

を入力すればOKです。

特に設定が間違っていなければ、これで接続できるはずです。

Linux の場合

SoftEther VPN Client はLinux版もあります。設定用のGUIツールがないので、やることはWindows版と同じですが、vpncmd で設定することになります。 設定時に使う主なコマンドとしては

  • NicCreate, 仮想LANカードの作成
  • AccountCreate, 新規接続設定の開始
  • AccountPasswordSet, 認証情報の設定

  • AccountConnect 接続

  • AccountStatusGet 接続状態の確認
  • AccountDisconnect 切断

かと思います。必要に応じてhelpコマンドで調べてください。

また、上記設定だけだと、VPN接続が成功しても、仮想LANカードにIPアドレスが割り当てられません。 なので、仮想LANカードがDHCPからアドレスを取得できるように /etc/network/interfaces に設定を書いておきます。

例えばこんな感じです。

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

allow-hotplug vpn_vpn0
iface vpn_vpn0 inet dhcp

ここでは仮想LANカード名を vpn0 としました。

これで接続を試して、問題なく接続できれば、OKです。

おわりに

これで問題なく QNAP 上で運用できるようになると、今まで使っていた古いサーバーを処分できるので、部屋が少しは涼しくなりそうです。 当面は問題が起こらないか様子見ですね。

あと、Linux 上で VPN Server を動かす場合 tap デバイスを使うのが定番のような印象を受けています。おいおい、このあたりも調べて試してみようと思います。