け~ふかふかのろぐ

ゲームや興味のある技術に関して書いていく

Google Pixel SlateにDockerを入れてみた

はじめに

アメリカに住んでていいなって思うこととしては、日本ではまだ使えないサービスが使えたり、
手に入らないデバイスが手に入るというものがあります。
昨年末にまだ日本では発売されてないGoogle Pixel Slateというものを手に入れて
そいつにDockerを入れてみたのでそれに関してちょっと書いてみました。
ぶっちゃけ大したことは書いてないですし、なんで入れたの?意味あるの?って意見もあるかもですが、
そこら辺はまぁ気にしないでください。

Google Pixel Slateって?

公式サイトを見てもらえばわかりますが、Googleタブレットです。
2018年12月頃発売されました。https://store.google.com/product/pixel_slate

自分が買ったのは以下のモデルです。スペック不足を気にして上位のモデルを買いました。
f:id:kfukafuka:20190127165143p:plain

一番下のモデルは$599で買えて結構安いと思います。
https://store.google.com/product/pixel_slate_specs

Docker を入れた理由

会社の先輩から「タブレットだけど、入るらしいから入れてみようぜ」って
言われたのでものは試しと思って入れてみようと思ったのと、

タブレットなのにどうやってDocker入れるの?

Google Pixel Slateはタブレットですが、今までものやスマホとは違いChromeOSで動いています。
ベータ版の機能ではありますが、実はChromeOSはLinuxを起動することができCLIを使って
パッケージのインストールとかができます。
方法は下記の公式ページに書いてあります。ChromeBookと書いてありますが方法は同じです。 Chromebook で Linux(ベータ版)をセットアップする - Chromebook ヘルプ

f:id:kfukafuka:20190127171508p:plain

これを有効化するとターミナル起動できるようになり、CLIでいろいろできます。

Linux環境

こんな感じです。

$ cat /etc/issue
Debian GNU/Linux 9 \n \l

$ uname -a      
Linux penguin 4.14.74-07776-gac52e5f750c8 #1 SMP PREEMPT Thu Dec 6 17:36:39 PST 2018 x86_64 GNU/Linux

$  cat /etc/debian_version
9.7

実際にDocker入れていく

今回Dockerをインストールするにあたって、以下のサイトを参考にさせてもらいました。
chromebookで動作するLinuxにdockerを入れる · GitHub

ちなみに、参考にさせてもらったページにあるrepositoryからのインストールを一応自分も試しましたが
失敗しました。コマンドを実行しても出力などは特になく、返り値は0でしたがDockerのコマンドなどは入ってませんでした。
なので、自分も今回はpackageからのインストールを行いました。

必要なファイルをダウンロード

下記のリンクから必要なファイルをダウンロードします。
自分のモデルはCPUがIntel i5のため、amd64のものをダウンロードしました。
ダウンロード元のリンクは https://download.docker.com/linux/debian/dists/buster/pool/stable/amd64/
必要なファイルは以下の通りです。

インストール

ダウンロードしたパッケージをdpkgコマンドを使ってインストールしていきます。

# 依存関係で必要なためインストール
$ sudo apt-get install iptables

# ダウンロードしたファイルをインストール
$ sudo dpkg -i containerd.io_1.2.2-1_amd64.deb 
$ sudo dpkg -i docker-ce-cli_18.09.1_3-0_debian-buster_amd64.deb 
$ sudo dpkg -i docker-ce_18.09.1_3-0_debian-buster_amd64.deb 

Hello World の実行

無事インストールできたら、docker run hello-world を実行してみましょう。

$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
 

無事Dockerで実行できました!

まとめ

これでタブレットでもDockerが使える環境ができました。
Docker以外にもzshVim、Gitコマンド使えるし、
Pythonのプログラミングとかも普通に動きました。
仕事で使うのでgcloudコマンドもインストールしてみましたが、
こちらも問題なく動作して、GKEのクラスタ作成とかできました。
ちょっとしたプログラミング書いたりとか、クラウド環境のクライアントとして使うなら、
普通にありだなと感じました

最後に

まぁ特にDocker入れたから、今すぐ何をやりたいってわけでもないんですが入れてみました。
せっかくなのでちょっとの間、Pixel Slateで開発とかしていこうかなと思ってます。
もう少ししたら使用感とか自分がやった設定とか書こうかなと思ったりもしてます。
もし、なんか試してほしい機能とかあるようならコメントもらえると嬉しいです。

Splathon#9のネットワーク検証と構成について

はじめに

これはSplathon Advent Calendar 2018 - Adventarの16日目の記事です。
前日のTONYさんの記事はこちらから

皆さんこんにちわ。Splathon運営アメリ支部?のけ~ふかです。
普段はアメリカのとある田舎でのんびりと過ごしながらゲームしています。(仕事しろ)
Splathonについては 本カレンダーの1日目のkawakuboxさんの記事を御覧ください。
kawakubox.hatenablog.com
この記事では来年に都内某所で行われる予定のオフラインイベント Splathon#9の会場下見で
行ったネットワーク検証やその中で判明したこと、当日のネットワーク構成(案)ついて書いています。

Nintendo Switchの登場で機器の持ち込みがしやすくなり、オフライン大会がしやすくなったと思います。
なので、今回のような記事は需要があるのではと思い記事にしました。

この記事を読むにあたって

この記事に記載しているネットワークの設定などはSplatoon2イカッチャ LANプレイモード
関してのものになります。Switch自体のネットワーク設定についてではありませんのでご注意ください。
【スプラトゥーン2】「LAN プレイ」とは何ですか?

なお、この記事中の「プライベートマッチ」という言葉はすべて
イカッチャ LANプレイモードでのプライベートマッチ」という意味になります。

この記事では題名の通りネットワークに関して書いていますが、困ったことにネットワーク機器のことを
スイッチ(主にL2/L3をつけて)と呼ぶことが多いです。そのため紛らわしいのでこの記事では
みんな大好き Nintendo SwitchSwitch、ネットワーク機器の方をスイッチと記載しています。

また、MACアドレスIPアドレスDHCPVLANDNS あたりの用語を理解しておくと
記事の理解の助けになると思いますので調べてから読むのをおすすめします。
( なお、この記事内で各用語の説明はしておりませんのでご了承ください。)

要件

今回のネットワークに関する要件は
1. 外(インターネット)に出られない
2. DHCPで各SwitchにIPを割り当てる
という上記2つのことを満たしてプライベートマッチができるネットワークでした。

また、個人的にやりたかったこととして、
3. 対戦卓ごとにネットワークを分ける
というものがありました。

この 対戦卓ごとにネットワークを分ける はどういうことかというと、
イカッチャ LANプレイモードを用いてプライベートマッチをしたい場合は
接続したいSwitchが同一ローカルネットワークに属している必要があります。
家庭で集まってプレイする分にはこれで特に問題ありません。

しかし、Splathonは規模が大きく同一ネットワークにSwitchが50台近く接続されます。
また、更に対戦が同時並列で進行します。過去事例:Splathon#8 開催報告するぞっ
このような場合、プラベが複数立ち上がることになり、イカッチャの「 部屋を探す 」を
選択したときに複数の部屋が見える状態になります。

これを対戦卓ごとにネットワークを分けることにより、他の対戦卓のプラベが表示されることが
なくなります。今までのSplathonでは「~卓の対戦は~というユーザに合流してください。」という
オペレーションを現場でしていたのですが、このオペレーションが不要になります。
これはそれぞれの対戦卓ごとに専用のネットワーク機器を置けばこの問題は解決できますが、
それだと各機器の設定が面倒だったり、DHCP機能を持った少し高価な機器を
用意してあげる必要があり、あまり現実的ではありません。

今回ネットワークを自分で構成するにあたり、上記の問題をVLANを使ってネットワークを
分けるのを実現しようと考えたわけです。

事前準備

機器

当日の検証に向けて以下の機器を用意しました。
ホスト名はコンソールログインとかしたときの判別のためにつけました。深い意味はありません。

機器 ホスト名 用途
CISCO C841M-4X-JSEC/K9 splathon.net.spl L3スイッチ
一番大事な機器
VLANによるネットワーク設定や
DHCPによりIPの割り振りを担当
CISCO WS-C2960L-8TS-JP es-splathon.net.spl L2スイッチ
対戦並列数が多い場合にC841Mの接続ポートが
足りないため利用。各ポートにVLANをそれぞれ流す
Netgear GS116E-200JPS ホスト名なし 単なるハブとして利用

VLAN / IP

設定したVLANとIPは以下の通りです。サブネットはすべて /24 で設定しています。

VLAN Num VLAN Name IP Address
1000 streaming-match 192.168.222.0
2 private-match-2 192.168.0.0
3 private-match-3 192.168.1.0
4 private-match-4 192.168.2.0
5 private-match-5 192.168.3.0

設定

事前準備ではC841Mのみ設定を行い、設定したVLANのIPがDHCPで手持ちのPCにIPが割り振れるまで
確認しました。WS-C2960L の方はC841MのDHCPなどの動作検証がうまくいった場合に
使うつもりで使うかはわからなかったため、事前準備の段階では設定をしませんでした。
Netgearの方はハブとして使うつもりだったので、設定に関して特に何もしていません。
C841MはGUIからもDHCPなどの設定をできるため、CLIでの設定が怖い方におすすめです。

f:id:kfukafuka:20181215181012p:plain
C841M WebUI

当日の検証

検証1 : プライベートマッチができるか

この検証は要件の1,2を満たした状態でプライベートマッチが問題なくできるかというものです。

方法

方法は単純で設定してきたスイッチに接続して問題なくプライベートマッチが行えるか
というものです。この検証の構成は以下の通りです。

f:id:kfukafuka:20181215174129p:plain
検証1:ネットワーク構成

結果

しかしここでさっそく問題が起きました。
イカッチャ LANプレイモードにするためにイカッチャに入ると「ローカル通信の準備をしています」の
画面から変わらずうまくイカッチャ LANプレイモードが起動しませんでした。

f:id:kfukafuka:20181215172050j:plain
この状態から進まない
スイッチ側で見てみるとDHCPによりIPは払い出されているように見え、
すぐには原因はわかりません。しかしイカッチャは起動しません。


ということでここから切り分けが始まりました。

切り分け1:IPを手動で設定する

方法

先ほどのネットワーク構成のまま、Switchのインターネット設定からIPなどの設定を
手動で行いプライベートマッチができるかを試しました。

結果

これは特に問題なくプライベートマッチができました。
なので、設定がちゃんとしていればSwitch同士が通信できる環境であり、
どこかの配線がだめなどの物理的な要因の可能性ではないと考えられました。

切り分け2 : DHCPでIPが振られたPC同士で疎通ができるか

方法

前日にDHCPでPCにIPが振られて、振られたPCにping が飛ぶまで
確認はしていましたが、念の為もう一度PC2台を使い下記のような状態で
DHCPで振られたIPに対して相互にpingが届くのを確認しました。

f:id:kfukafuka:20181215174305p:plain
切り分け2:ネットワーク構成

結果

これも特に問題はなく、相互にpingは飛びました。
なので、やはりDHCPの機能は問題なさそうと考えられました。


残念ながらここまでの2つの切り分けからは原因を特定をすることができませんでした。
Switch自体にpingなどのネットワーク通信に関連するコマンドがないため、
問題の原因追求に行き詰まりました。

しかし!困っているときにこんな発言が!
「IPの設定は自動で、DNSの設定を手動でやったらプライベートマッチできた」

うまくいかなかった原因

上記の発言からうまくいかなかった原因がわかりました。
それは DHCPの設定にDNSの設定を記載していなかった ということです。

通常DHCPの設定を行うときは振り分けるIPやサブネット、リース期間、DNSなどが設定できます。
しかし、今回の構成ではインターネットに出れないという点やIPの設定しか必要ではないと考えたため、
DNSを使うことはないと考え VLAN / IP に書いたようなIP関連の設定しかしていませんでした。

これがまさに原因で、Switchではインターネット設定のためにDNS設定を
ちゃんとしてあげないといけないのです。そのDNSにたとえ接続ができなくて、使わないとしても。
実は手動インターネット設定するときもこれは同じことで、使わないとはいえDNSの設定をしないと
接続設定は保存できませんした。検証1の段階で原因に気づける要素はあったのです。

設定が複雑にならないように、不要だと考えて設定していなかったことが裏目にでてしまいました。

解決方法

原因がわかったので解決方法は簡単です。
DHCPの設定にDNSの設定を追加してあげればいいのです。

設定したDNS

優先DNS 008.008.008.008
代替DNS 008.008.004.004

になります。有名なGoogleのPublic DNSですね。
多分ここの設定はIP(IPv4)の規則に沿ったIPならどんなIPでも大丈夫かと思います。
どうせ使いませんし。
※余談ですが最近 1.1.1.1 というDNSもあるみたいですね。

DNSを設定したことで、問題なくプライベートマッチができるようになりました。

検証2 : ネットワークを分けてプライベートマッチができるか

この検証は要件の3が実現できるかの検証になります。

方法

方法は構成を以下のように変更しプライベートマッチをそれぞれの色の部分のSwitchで建てます。
建てたプライベートマッチが色の同じ部分のSwitchからは見えて、色の違うSwitchからは見えない
という状態にできるかというものです。
色が違ってついている部分がそれぞれ別のネットワークになります。

f:id:kfukafuka:20181215174425p:plain
検証2:ネットワーク構成

結果

特に問題なく別の色のネットワークのSwitchのプライベートマッチは見えない状態で
プライベートマッチを行うことができました。

検証おまけ

これはおまけの検証ですが、プライベートマッチがうまくいっていないときに
別でこんな構成の検証を行ってました。

f:id:kfukafuka:20181215174504p:plain
検証おまけ:ネットワーク構成

これは検証1の構成と何が違うかというと、L3スイッチではなくL2スイッチのみで
Switch同士を接続し、手動でのインターネット設定を行いプライベートマッチが できるかというものです。つまり、手動インターネット設定ならSwitch同士をハブなどの
安価なネットワーク機器でつないでもプライベートマッチができるのかというものです。
これはSplathonのSlack内で話題に上った構成です。

これは結論としてはできました。
なので、手動でインターネット設定をするため、Switchの入れ替えはできないと思われますが
全台のSwitchのインターネット設定を手動で行えば安価なネットワーク機器でも
プライベートマッチを実現できるということです。

当日の構成(案)

構成(全体)

当日の構成は以下のようなのを考えています。ハブの部分は部材の調達具合で変更するかもしれません。
茶色の線(HDMI)でつないでいる配信用のPCはこのネットワークに接続しておらず、
配信するために別のネットワークに接続してインターネットに出れるようにする予定です。

f:id:kfukafuka:20181215174706p:plain
当日の構成案(全体)

構成(配線)

こちらは配線図になります。StreamingやPrivate2と書かれたのがVLANになります。
C841MからWS-C2960L-8TS-JPへはVLANを5個下ろして、WS-C2960L-8TS-JP から
Hubへ各ポートから各VLANを一つづつ下ろしています。

f:id:kfukafuka:20181215175039p:plain
当日の構成案(配線)

設定

今回使用した機器の設定は以下においてあります。
(自分で設定した内容以外は基本的に削除してあります。)

まとめ

  • ネットワーク機器のない会場(もしくは使えない)でもSplathonができるようになった!
  • ネットワークを対戦卓毎に分けることで他の対戦卓のプライベートマッチと混ざらなくなった!

今後

正直ネットワークに関してはもうやれることほとんどない気がします。
通信のトラフィックの可視化とかもできなくはないですが、データを取る機能などが
ない安価なハブなどを用いたりするのでそれも難しいかなと。
何か面白そうなものが思いついた方いたら連絡ください。
( スマブラSPのオフライン対戦で使えるかは気になるところ。)

最後に

最後までこの記事を読んでいただきありがとうございました。
オフライン大会を考えている人の少しでも助けになれば幸いです。

今回の記事に書いた機器じゃくても、同じような設定ができれば
インターネット環境がない場所でもオフライン大会を開けるようになると思います。
なので、みなさんもぜひ開いてみてください。

最後に会場下見で今回の検証に協力をしてくれた皆様本当にありがとうございました。
この場を借りてお礼を言いたいと思います。

なお、ガチネットワークエンジニアからの問い合わせは受け付けつけておりませんので予めご了承下さい。

次回のSplathon Advent Calendar 2018 - Adventarの17日目の記事は、
にっしーさんによる『Factorioについて書く』です。お楽しみに。