Raspberry Pi で作るネットワークエミュレータ

明けましておめでとうございます。

この記事は、 Raspberry Pi Advent Calendar 2020 24日目の記事だ。
…遅刻すぎるのもいいとこだわ。


さて、ネットワーク回りの仕事をしていると、意図的にネットワークの遅延やパケロスを発生させて、検証したくなる状況がままある。

対象のサーバーにネットワークを遅延させるようなモジュール入れるようなやり方も考えられるが、もっと手軽に、 LAN ケーブルの間に挟むだけで、そこを通る通信が全て遅延するみたいな、そんな機材が欲しくなる。

もちろん、そのような需要があれば、それに応える製品があるわけで、それらは一般的に「ネットワークエミュレータ」として売られている。
しかし、高いものでは数百万を軽く超え、安くても数万円はするものばかりだ。

なんか安く作れないかなぁ…
Raspberry Pi あたりで。

…ということで、 Raspberry Pi 4 を使って、遅延とパケロスを制御できる、お手軽ネットワークエミュレータを作ってみよう。

先駆者

そもそもなのだが、そのものズバリなことを実践している先駆者様がいらっしゃった。

この記事の Raspberry Pi には、小型ドットマトリックス LCD ディスプレイや、様々な物理キーが GPIO に繋がっていて、 THE IoT という仕上がりになっている。

かっこいいと思う。
でも、電子工作するのめんどくさいよね。

GUIで手っ取り早く作る

そんな複雑 (…というほど複雑でもないけど) な電子工作しなくても、 RasPi にタッチパネルディスプレイつけちゃえばいいじゃん。
…ということで、 Amazon で割と評判のよい、 OSOYOO の 2,980円 タッチスクリーン付き LCD を取り付けて、めっちゃ簡単な UI をつくってみよう。

OSOYOO(オソヨー) HDMI 3.5 インチ LCD ディスプレイ IPS モニター IPSタッチスクリーン 1920x1280ハイビジョン Raspberry Pi 4 3 2 Model B に対応 (3.5" HDMI LCD+クリアケース)

もはや、 IoT 感を感じるのが難しくなってしまっているな……

続きを読む

.NET Interactive で C# と PowerShell を股に掛ける

この記事は、「C# Advent Calendar 2020」 9日目の記事、かつ 「PowerShell Advent Calendar 2020」 9日目の記事だ。

スミマセン。横着した。

この時期になれば .NET Interactive の Preview 4 が出てるだろうしその記事でも書こうかな~ などと目論んでいたものの、 残念ながら登場しなかった。

このため、 .NET Interactive .NET 5 対応版の導入と、 Variable sharing の内容でお茶を濁そうと思う。

.NET Interactive のなんたるかについては、以前の以下の記事で取り扱っているので、そちらを参照願いたい。

.NET Interactive を .NET 5 で動かしてみる

いきなり本題とは関係ない話になるが、 せっかく .NET 5 がリリースされたところなので、 .NET Interactive を .NET 5 で動かしてみよう。

続きを読む

[v2021.6.15s 対応] Among Us 用超便利 Discord bot “AutoMuteUs” をセルフホストする方法 (公式推奨簡単版)

注: この記事は、 2020年11月23日~25日 時点の話を基にして、 一部 2021年7月 現在の内容に更新しているよ。 状況は今後も刻々と変わる可能性が高いよ。
なお 7月9日 現在、 Among Us バージョン v2021.6.30s では、 以下の手順で問題なく動いていることを確認している。

うまく動かすコトができない場合は、記事の最後にトラブルシューティングも用意したので、そちらを参考にして欲しい。


2020年の夏あたりから、日本でも爆発的なブームが続いており、 宇宙人狼, アモアス 等とも呼ばれている Among Us

Discord でボイスチャットしながらやるのが面白いのだけれど、 ゲームの仕様上、ミュート管理が結構面倒だ。

そこに、 Among Us のゲーム画面に同期してミュート管理を超いい感じに自動で行ってくれる Discord bot が存在する。

それが AutoMuteUs だ。

このツールは、 以前は "AmongUs AutoMute" などとも呼ばれ、 誰か一人が Windows Steam 版 Among Us のゲームと一緒にキャプチャープログラムを立ち上げ、 公式の Discord Bot と連携させるだけで超お手軽に使える…
…はずだった。

1月下旬現在、 AutoMuteUs 公式の手順に従って、 bot の .au new コマンドでゲームを作成しようとすると、以下のような悲しいメッセージを目にするだろう。

If I start any more games, Discord will lock me out, or throttle the games I'm running! :frowning:
Please try again in a few minutes, or consider AutoMuteUs Premium (.au premium)
Current Games: 151/150

Discord 側の制限で、これ以上 bot を実行できないって。
しばらく待つか、有料の AutoMuteUs Premium を使ってくれとのこと。

そして、仮にゲームの作成が無事にできたとしても、 bot のミュート変更が遅れたり、変更しそびれたりと不安定だったり…

そこで、 AutoMuteUs のサーバーを自分で実行 (セルフホスト) することで、上記の制限を無料で回避してしまおう というのが、この記事の目指す内容だ。

記事内では画像とテキストで導入手順を解説しているが、 それだけではわかりにくい場合、 こちらに本記事の内容を解説する動画も作成しているので、併せて見ていただくとわかりやすいだろう。

ちょっと古い v2.4.3 をセルフホストするのが推奨

続きを読む

Raspberry Pi に Ubuntu を入れて SSH でログインするまでの A to B

追記:

以下の記事で、 Raspberry Pi 5 と Ubuntu 24.04 LTS の組み合わせで更新した内容を掲載しているので、基本的にはそちらを参照してほしい。

何番煎じかわからないが、 Raspberry Pi (以下、 RasPi) に Ubuntu を入れる手順についてまとめてみようと思う。

Ubuntu 公式の How to install Ubuntu on your Raspberry Pi チュートリアルは充実しているし、 単にインストールして動かすだけなら、既にある記事でも十分だろうとは思う。
しかし、初回セットアップ時の細かいカスタマイズについて書かれているものがあまり見当たらず、 ディスプレイなし かつ Wi-Fi 接続のセットアップ方法などを、詳しく解説されているようなものが見つからなかった。

本記事では、それについて補足しながらまとめていく。

先に断っておくが、 cloud-init による IaC の話が中心になる。

TL;DR

  • 焼いた SD を RasPi に挿すにブートプロセスの設定を書き換える
  • cloud-init の挙動を理解しろ
  • ディスプレイなし & 無線LAN Only だと、工夫がいる
  • ARP リクエストのブロードキャストが届かないと苦労する

きっかけ

続きを読む

激安液タブPC: CHUWI UBook 11.6″ CWI509 お絵かきレビュー

親戚が簡単なお絵かきができる 2-in-1 タブレット PC を欲しがっているということなので、 セールしていた CHUWI UBook を入手してみた。

中華PCを人にオススメするのもどうかとは思ったが、一応 技適もとってる 日本向けのモデルだし、予算と目的がバッチリ一致するので、お絵かき用途ならこれでいいかなと。
10万近くかけて高いノートPC買うほどではものの、そもそもプライベートの PC も持ってないらしいので、基本的人権のメモリ 8GB はある安いの探してたのよね。

買ったマシンのキッティングを行うにあたって、 Windows OS 搭載の一体型液タブとして見てどうだったのかをレビューして見ようと思う。

購入したモデル

今回購入したのは CHUWI UBook と言うモデル。

主なスペックは以下の通り。

続きを読む

Outlook の “会議室の検索” が表示されない場合の対処法

Microsoft 365 (Office 365) など、 Exchange 上の Outlook で新しい会議を作成するウィンドウには、本来であれば 「会議室の検索」 というペインを表示させることができる。
具体的には、以下のスクリーンショットのように、リボンの 「スケジュール アシスタント」 タブに、「会議室の検索」ボタンが存在し、そのボタンによって「会議室の検索」 というペインが切り替えられるようになっている。
本来の表示

ところが、一部のユーザの環境で、この「会議室の検索」ペインも、リボンのボタンも表示されない状態に陥ってしまった。
会議室の検索が表示されない状態

これでは、組織で作成された「会議室の一覧」などが使えず、空き会議室を探すのがとても不便で困る。

ということで、この「会議室の検索」が消える問題の、解消法を紹介する。

続きを読む

ルータを経由すると仮想ブリッジ接続の VM にアクセスできない?

今回は、ネットワークの話。

解決してみれば割としょうも無いトラブルで、時間を浪費してしまったので、自戒の意味を込めて記事にしておく。

サブネット外から ping が通らない

ある日、 ホストPC の NIC とブリッジ接続されている VM に、 サブネット外からアクセスできなくなってしまった。

構成を図にすると、以下のような感じ。
(あまり UML図 に明るくないので、書き方がヘタクソだったり本来の意味と違う記号の使い方をしている点は大目に見て欲しい。)

data:application/gzip;base64,H4sIAAAAAAAEAIVTPU/DMBDdI+U/nLIihziUAhVC5UOCDmWgqAtlMM61jZTYleOIAbW/Hcdy6qQtwkt8757f3dkv40ozpeuyCIMw4IWsM4gmQqMSqCNgFeQuMFkptJIFRG+yNpjNKrsNA4VcM7EqECJ6lcZ0GA/SODlPBxH8hAGYxWW5kQKFhuhFVhqmjK9zgVZlwy3kmM2yVZeMo2O/Th4tE/W6iT2xU3g+raKuxoHO6/27lRBM9zm+s4PDBwKmNm2boMfMzoDzKTzXWGk3nN3/J5200kmfue2H7gKAfKzzLEPxSY4HMoDPn5BsENjtCa7BEZSoVc6BLgS9ad7wOr4cxmn/rCPDzt7CCPxr0+HpTnct9UHl2Qo9yU22PfKHswZIsRAzViLM6q/WjhtuGtqeNNzFn4brCj7lyyWqBu6pUqvamh1uCdl72ySB3Hmr2y+QTH4LcuYdaTpzYOLBMBijyMzv9QsMZU+SaAMAAA

同一サブネット内 (図の "Machine on Same Subnet") から 172.16.42.16 を叩くと VM ゲストに到達するのだが、 サブネット外 (図の "Machine on Different Subnet") からだと ping すら通らない。

以前は同じ構成で、サブネット外から繋がっていたはずだ。

ちょうど直前に、ネットワーク機器のメンテナンスがあったため、 そちらで IPフィルタの動作がおかしくなったのではないかと疑ってしまった。
しかし、繋がらなくなった直接的な原因は、 VM Gurest 側にあった。
このため、答えにたどり着くのに時間がかかってしまった。

アクセスできなかった原因

続きを読む

AWX をインストールした後の Server Error を解決したかった話

この記事は、 Ansible AWX をインストールしたときに、 Server Error に なったりならなかったりする 問題に対処したときのポエムだ。

はじめに断っておくが、最終的に AWX 8.0.0 で解消しているっぽいものの、 原因や正確な条件などは不明なままである。
また後述するが、 (タイトルに反して)おそらく Ansible AWX の問題ではなく、 postgres:9.6 の docker イメージの問題ではないかと思われる。

発生した問題の状況

続きを読む

プロキシ環境下で Ansible AWX をインストールする Playbook を作る

構成管理ツール (いわゆる Infrastructure as Code(IaC)) の中でも比較的易しいと言われる Ansible。
その Ansible の運用を省力化してくれるツールとして Ansible Tower というものがあり、そのコミュニティ管理版 (OSS版) が AWX だ。

その AWX がインストールされたサーバを作成する Playbook を作ろうとしたら意外と手間取ったので、そのメモ。

なお、インストール先は CentOS 7 である。
AWX のインストールは、 公式ビルド済み docker イメージを Docker Compose を使ってコンテナ化する方法 を使った。

11/21: 追記

docker-compose の PyPI (pip) パッケージが 1.25.0 に更新後、 CentOS 7 (正確には、 Python 2 系を使っている環境) で docker-compose のインストールや実行がうまくいかなくなった。
(commit:719a1b0 で) subprocess32 に依存するようになり、 gcc 等のビルド環境のインストールが別途必要になったためだ。

それに加え、たとえ gcc をインストールしても、依存パッケージの python2 対応が不十分なようで、 docker-compose 実行時にエラーになってしまう。

docker/compose#7030 の Issue には挙がっているが、修正されるかどうか不明なため、一つ前の 1.24.1 を使うことで回避するように、コードを修正した。

python2 ツラい。。。
しかし、 2020年にサポート切れになった後も、 CentOS 7 が生きているしばらくの間はこの辛みと付き合わなければならないようだ。
ツラい。。。

追記ここまで

最終的な Playbook

続きを読む

Proxy 下で vscode の WSL 上の他の拡張機能のインストールに失敗する

プロキシ環境下の vscode で、 WSL 上で拡張機能を動かしたいのに、 インストールインストールに失敗する問題を解決するメモ。

前回の↓の記事は、 『Remote – WSL 拡張が有効にできない』問題だったが、今回は『Remote – WSL 拡張 を有効にした後、その環境上で他の拡張機能がインストールできない』問題なのでちょっと違う点に注意。ややこしいね。

遭遇した問題

Visual Sutdio Code (以下、 vscode) へ 無事に Remote – WSL 拡張機能 の "VS Code Server for WSL" のインストールが完了し、 Windows 上から 快適に WSL の環境にアクセスできるようになった。
しかし、 いくつかの vscode の拡張機能は、 Windows 上の環境とは別に WSL 上の環境で改めてインストールしなくてはならない。

そこで、 UI 上の案内に従って各拡張機能で "Install in WSL" を行ったところ、 プロキシ環境下だと以下のエラーが発生してインストールに失敗する問題に遭遇した。

Failed to install extension

パネル上の OUTPUT タブで "Log (Remote Server)" の情報を見ると、以下のようなエラーが発生しているのがわかる。

[remoteagent] [error] Failed to install extension: {拡張機能ID} connect ECONNREFUSED 13.107.6.175:443

settings.json ではプロキシの設定しているし、更には WSL 上の環境変数 (http_proxy, https_proxy) にだってプロキシを入れている。
更には(前述の)前回の記事に倣って、 WSL のコンソール上から code . の立ち上げまで行ってみた。

それでも解消しない。何故だ。

なお、試した vscode のバージョンは、 August 2019 (version 1.38.1) だ。

"Remote [WSL]" 用の設定ファイルを書き換える

続きを読む