起動中の Raspberry Pi のモデルを調べる
cpuinfo に含まれる Revision を見る。
$ cat /proc/cpuinfo | grep Revision Revision : a01041
RPi HardwareHistory - eLinux.org に書いてある通りに表を参照する。
上記の例では
a01041 Q1 2015 2 Model B 1.1 1 GB (Mfg by Sony)
関連エントリー
- ネットワーク内の Raspberry Pi の IP アドレスを調べる いちいちモニタ繋いで確認とかするのは面倒ですが同じネットワーク内なら簡単に調べることができます。 まず ifconfig で所属するネットワ...
- Raspberry Pi の Wi-Fi 自動再接続 Raspberry Pi で Wi-Fi が一度切れると二度と繋がらない、という現象に遭遇した。しかたないので変なことをした。 #!/bin...
- stm32f0x 書きこみ速度大会 NanoVNA (stm32f07) に対しての書きこみで、どの方法が早いのだろうか?と気になったので試した。対象は 95764bytes ...
- Raspberry Pi で Chromium (Google Chrome) を Kiosk モードで起動する まず sudo raspi-config で desktop がデフォルトで起動するようにしておく Chromium などをパッケージからイ...
- ESP-WROOM-02 OTA firmware update / platformio Over The Air で (すなわち Wifi 経由で)、ファームウェア書きかえをするやつ。 コード https://github.co...
第二種電気工事士 技能試験
(写真は練習の別の候補問題のもの)
日曜日が試験日だった。どうやら筆記試験と違って、試験会場が県あたり1つしかないようで、試験会場の最寄りのマイナー駅がものすごい混雑だった。こんなに受験者がいるのかーとびっくり。
追記:神奈川県の場合、試験会場は2つだったみたい。
候補問題が13問なので2週間ぐらい前から1日1問ずつ消化していった。練習してみると結構欠陥 (不合格) を出してしまう。特に電線の種類・長さを間違えると、他の欠陥に比べて取り返しがつかないことになる。ということで当日は特にこのへんを気をつけようという心掛けをした。
出題問題は候補問題7の4路スイッチを含む回路だった。
あんまり好みの問題ではなかったけど一通りやるだけやったという感じ。電線色が任意の箇所が多いので逆に不安になる。約15分ほど残して終わり。見た目的には教科書通りという感じだけど、一通りチェックはしても細かい欠陥があるかどうかは、勘違いとかもあるのでよくわからない。合格発表は8月20日。合格していなかったら下期に再受験。
関連エントリー
- 第二種電気工事士 筆記試験 日曜日が試験日だった。近所の大学が試験会場だった。思いのほかたくさん受験者がいてびっくりしてしまった。学生が結構いたかな。工業高校とかの生徒...
- 第二種電気工事士 試験終わり 無事に合格通知がきたのでよかった。 免状申請もすませた。2週間後ぐらいにくるらしい 最近は2種電気工事士の試験の勉強とかをしてる - 氾濫原...
- 最近は2種電気工事士の試験の勉強とかをしてる 6月3日が筆記試験・7月22日が実技試験ということになっている。 筆記試験までかなり時間があるが、参考書をパラパラめくって(特に何か覚えると...
- ITパスポート試験を受けてきた IT技術者なのに情報処理系の試験はまったく受けずに生きてきてしまった。アマチュア無線技士や第二種電気工事士とは違って法的に別にできることが増...
- ✖ 電気工事士2種の技能試験の練習 とりあえず問題1を通しで時間を計りながらやってみた。35分ぐらいでおわった。試験時間が40分なのギリギリだ。...
L2スイッチとルーター
今更ながらいまいち理解できてないポイントがあったので、いっかい自分でまとめてみることにする。当たり前のことではあるが……
L2スイッチ
セグメントを構築する機器 スイッチングハブ
用途はリピーターハブと同じで、あるポートに届いたイーサネットフレームを他の全てのポートへ転送する。ただし帯域を有効利用するため転送されてきたポートと MAC アドレスの対応を記憶して、次回から必要のないポートに転送することをやめる。
ルーター
セグメント間を接続する機器
IPヘッダを解釈し、ルーティングテーブルから次に転送すべきルーターへパケットを転送する。
頻出事例
(IPv4) L2スイッチに接続されたコンピュータ同士の通信
同一セグメント内の通信ということになる。L2スイッチで完結する。
192.168.0.101 から 192.168.0.102 への通信の例
- 101 は 102 の IP アドレスをのせてARPリクエストをイーサネットにブロードキャスト
- 102 は自分の MAC アドレスをのせてARPレスポンス
- 101 は取得した MAC アドレス宛にIPパケットをのせたイーサネットフレームを送信
L2 スイッチは多段接続しても1つのネットワーク。
(IPv6)L2スイッチに接続されたコンピュータ同士の通信
ほとんど IPv4 と同じだが ARP ではなく ICMPv6 で MAC アドレスが解決される。Neighbor Solicitation メッセージと Neighbor Advertisement メッセージが使用される。
(IPv4) ルーターを介したコンピュータ同士の通信 (外部ネットワークなど)
192.168.0.101 から 93.184.216.34 への通信の例
- 101 は自分のルーティングテーブルを参照する
- 接続先が同一セグメントではないため、デフォルトゲートウェイ(またはルーティングテーブルにあるホスト) へ転送しようとする
- 転送するホストのIPアドレス (例:192.168.0.1) の MAC アドレスを取得する (ARP)
- 取得した MAC アドレス宛にIPパケットをのせたイーサネットフレームを送信
- ルータは送られてきたイーサネットフレームとIPパケットを解釈し、次のルータにIPパケットを転送する。このときIPパケットを載せるプロトコルはイーサネットとは限らない。PPP ということもある。
(IPv6) ルーターを介したコンピュータ同士の通信 (外部ネットワークなど)
こちらも ARP 部分が ICMPv6 でおきかわる。ルーターの場合はネットワーク接続時の要求や、定期的にブロードキャストされる Router Advertisement メッセージから MAC アドレスがキャッシュされているため、基本的にルーター MAC アドレスが既知のものとなる。
関連エントリー
- DS-Lite の挙動の理解 おおざっぱにいうと 家庭内のルーター(B4)で IPv4 パケットを IPv6 にカプセル化 (IP IP tunnel) IPv4 ネット...
- IPv6 IPoE + DS-Lite 環境での RTX1200 の設定 ひょんなことから(?)RTX1200を譲ってもらったので使ってみる。VPN 貼りたいとかいう欲求はなくて、普通に家庭用ブロードバンドルーター...
- さくらのVPSを踏み台にして IPv6 アドレスがついているホストへ ssh さくらのVPSはIPv4/IPv6デュアルスタックで、双方ともにグローバルアドレスがついているため、IPv4 しかない環境から IPv6 ア...
- Raspberry Pi で別のマシンと有線LANを直結して通信 スイッチを介さず直接イーサネットケーブルを接続して相互通信を行いたいというケースがあった。あんまりやらないので不安に思ったけど簡単にできた。...
- ネットワーク内の Raspberry Pi の IP アドレスを調べる いちいちモニタ繋いで確認とかするのは面倒ですが同じネットワーク内なら簡単に調べることができます。 まず ifconfig で所属するネットワ...
BBR 輻輳制御アルゴリズムの考えかた
- これまで採用されていた輻輳制御アルゴリズムの多くはパケットロスベースであった
- CUBIC / (New) Reno など
- しかし実際はパケットロスと輻輳は厳密に対応しない
- 輻輳はネットワークの処理能力の限界を超えたときに発生する
- 処理すべきデータ容量が処理可能なデータ容量を超えると発生する
- パケットロスは瞬間的なトラフィック増加や、電気的ノイズなどネットワーク処理能力以外の要素でも発生する現象
- 無線ネットワークのように原理的にパケットロス率が高いことも多い
BBR では通信先との間の実際に使える帯域を推定し、パケットロスが起こっていても、あるいはパケットロスが起こらなくても、輻輳しない程度に最大のスループットを出す。
実際のアルゴリズムは解説してるサイトを見るほうが早い。
ref
関連エントリー
- DS-Lite の挙動の理解 おおざっぱにいうと 家庭内のルーター(B4)で IPv4 パケットを IPv6 にカプセル化 (IP IP tunnel) IPv4 ネット...
- RNN (時系列) AutoEncoder で遊んでいる keras を使ってみたらすんなりモデルを書けたので、少し遊んでいる。入出力の shape の意味を理解できれば、詳しいアルゴリズムまで知る...
- Chrome の brotli 圧縮アルゴリズム対応がデフォルトで有効に https://chromium.googlesource.com/chromium/src.git/+/52b672b2462d6a375...
- L2スイッチとルーター 今更ながらいまいち理解できてないポイントがあったので、いっかい自分でまとめてみることにする。当たり前のことではあるが…… L2スイッチ セグ...
- ✖ Google は機械だけど、クラウドソーシングは人間なわけで、Google が「ハック」されないで勝つためには、Google の機械は人間を...
curl の Expect: 100-continue を抑制する
curl は POST や PUT でリクエストボディの長さが長いなどの特定条件になると、まず Expect: 100-continue をつけてリクエストを送り、サーバ側の対応を待ってからリクエストボディを改めて送るという行儀が良い実装になっている。
しかし、特に IoT っぽい機器では Expect: 100-continue に対応していないものもあるので、抑制したい場合がでてくる。そういうときは以下のようにする。
curl -H "Expect:" -d ... url
空の Expect ヘッダを指定することで上記のような挙動をしなくなり、最初からリクエストをフルで送りつけるようになる。
関連エントリー
- nginx の rewrite ルールっぽく h2o の mruby でリクエストの rewrite を行う このサイトのHTTPS化にあたって nginx で書いていた rewrite のルールを h2o の mruby で処理するように変える必要...
- https 通信が不可能な原因が時刻ずれ 手元の NanoPi NEO2 が、証明書エラーでどうしても https 通信が不可能に。 Ubuntu 16.04 なのでそれほど古いOS...
- Spring MVC で @Async と @RequestScope を共存させるには? @Async と @RequestScope を同時につかうとどうなるか @RequestScope、これは @Scope(value = ...
- h2o での server-push タイミングの最適化 h2o は mruby ハンドラで link ヘッダを使って push を指示すると、バックエンドへの問合せと非同期で静的ファイルを pus...
- Prometheus から VictoriaMetrics への移行(Ubuntu, systemd) 自宅ラズパイのメトリクスとかセンサー類を VPS 上の prometheus に溜めているけど、1年分で12GBぐらいと、用途の割にかなり大...
10GBASE-T LANケーブル CAT6 CAT6A CAT7 CAT8
結論からいうと CAT6 か CAT6A を使う。33m までなら CAT6 でも良いことになっているので家庭なら CAT6 でも十分ということになる。ただ伝送帯域に余裕がないので、取り回しに問題がないなら CAT6A を使うほうが良さそう。
8P8C (RJ45) コネクタを使う CAT7 CAT8 規格は存在しない
簡単にいうと CAT7 CAT8 のコネクタは CAT6A 以前とは互換性がない。市場には 8P8C で CAT7/CAT8 なケーブルが売っているではないか?と思うかもしれないが、あれはケーブルだけ CAT7/CAT8 なだけで、全体としては規格に適合していない野蛮なものである。
ケーブルにいくら CAT7 CAT8 適合なものを使っても、コネクタに 8P8C (RJ45) を使う場合には CAT6A と同等の扱いとなる。ただの硬い CAT6A ケーブルでしかない。それなら CAT6A で良い。
また、CAT7 以上では STP (シールド付き) なので、機器側でアースがしっかりとれていなければならない。家庭用機器でアースをとるものはほとんどない (接地用端子・接地極がついたコンセントがそもそも普及してない) で、この点でもやはり意味がない。
電位が浮いてる状態の導体があると、そこがアンテナになってしまう。また、適切に両端を接地したとしても、今度はグラウンドループが形成されるため、かえってノイズが増えることもある。接地すべきかどうかがケースバイケースで決まってしまう。ノイズ対策は「グランド繋げば解決」みたいな簡単なものでは全くない。
この点でシールドケーブルは素人には光ケーブルよりも取り扱いが難しい。なので10Gbpsを超えるようになってくると本格的にファイバーに移行する必要が出てくるのではないかと思う
関連エントリー
- NASの10Gbps接続を10GBASE-SR(光ファイバー)に 2021年から使っているNASのHDDの音が気になるようになってしまった。作業部屋を移動したからかもしれないがなんとかすることに。 玄関に追...
- 4本しか結線されてないLANケーブルでハマった 自作キーボードのコネクタとして 8P8C を使っていて、市販のLANケーブルを流用しているのだけれど、特定のLANケーブルで動作せず悩んだ。...
- 粗悪品のUSBケーブルが多いので買ったら必ずベンチをとるべき 5Gbps / 10Gbps 対応の通信用ケーブルは購入したら必ずベンチをとるべき。 というのも粗悪品であっても再送制御などで実行速度が下が...
- Fusion 360 練習 パネルマウント USB コネクタ (USB 内部延長) USB の規格的にはダメな気はするけど ebay でしばしば売っているパネルマウント可能な USB 延長ケーブルのコネクタ部分 結構慣れてき...
- Voron 2.4 ADXL345で共振周波数を測定する 基本的に Klipper のドキュメントに従うのみ。ただ準備がなかなか面倒くさい https://www.klipper3d.org/Mea...
RaspberryPi を家庭内 LAN の DNS キャッシュサーバーに
LAN向けのDNSキャッシュサーバ
経緯としてRTX1200 の DNS 機能が TCP フォールバックに対応してないのでオフにした、というのがある。直接 8.8.8.8 8.8.4.4 を DHCP で広告するようにしてみたが、RTT が 8ms ぐらいあるので、やはり LAN 内にキャッシュサーバがあったほうがいいかなと思いはじめた。
LAN内には常時動いている Raspberry Pi のホストがいるので、ついでにこのホストにDNS機能もやらせることにしてみた。
unbound
unbound がキャッシュサーバ専用でよさそうなのでこれにする。
sudo apt-get install unbound
#/etc/unbound/unbound.conf.d/my.conf
# See /usr/share/doc/unbound/examples/unbound.conf for a commented
server:
verbosity: 1
num-threads: 4
interface: 0.0.0.0
interface: ::
msg-cache-size: 64m
msg-cache-slabs: 4
rrset-roundrobin: yes
rrset-cache-size: 128m
rrset-cache-slabs: 4
infra-cache-slabs: 4
access-control: 192.168.0.0/16 allow
key-cache-size: 64m
key-cache-slabs: 4
neg-cache-size: 64m
prefetch: yes
minimal-responses: yes
incoming-num-tcp: 100
outgoing-num-tcp: 100
forward-zone:
name: "."
forward-addr: 8.8.8.8
forward-addr: 8.8.4.4 # 自動起動 sudo systemctl enable unbound # 起動 sudo systemctl start unbound # ステータス sudo systemctl status unbound # ログ sudo journalctl -r
以下のようなコマンドでクエリ数やキャッシュヒット率が見れる。
unbound-control stats_noreset | grep total
今後
キャッシュヒット率を見つつ、あんまり意味がなさそうなら (数%ぐらいしかヒットしないとか) やめるつもり。
自宅は昼間は誰もいないので、このタイミングでTTLが短いほとんどのキャッシュは無効になってしまう。unbound の prefetch は TTL が残り10%になったときにクエリがくると再問合せする機能なので、クエリがこなければ一切 prefetch はされない。
さらには一番影響がでるブラウザでは、DNS prefetch が実装されているので、体感的にはネットワークの近くにDNSがあっても意味がないことが多い。
自分で DNS キャッシュサーバを運用するコストと釣り合わないかもしれない。
(備考)raspberry pi の ip アドレスを固定
raspi の IP アドレスを固定しておく
#/etc/dhcpcd.conf interface eth0 static ip_address=192.168.0.222/24 static routers=192.168.0.1 static domain_name_servers=127.0.0.1
sudo systemctl daemon-reload sudo systemctl stop dhcpcd sudo ip addr flush dev eth0 ; sudo systemctl start dhcpcd sudo systemctl restart avahi-daemon.service
確認
dig @192.168.0.222 example.com
同一ホストで
sudo unbound-control stats_noreset | grep total sudo unbound-control dump_cache
関連エントリー
- Klipper 用の raspiberry pi のカスタマイズ Raspberry Pi の負荷が高くなると mcu との通信に支障がおこり、最悪プリンタが止まる。なので cron をできるだけ止める a...
- Prometheus から VictoriaMetrics への移行(Ubuntu, systemd) 自宅ラズパイのメトリクスとかセンサー類を VPS 上の prometheus に溜めているけど、1年分で12GBぐらいと、用途の割にかなり大...
- Raspberry Pi から HDMI-CEC コントロール サイネージ HDMI CEC 連携 カレンダーを表示するおうちサイネージ というのを作っていたがモニタの置き場がなくなってしまったので、テレ...
- Ubuntu 16.4 LTS クリーンインストールして引越 カスタムOSインストールガイド - Ubuntu 16.04 – さくらのサポート情報 を見ながらインストールまでやる。 旧サーバと同じホス...
- NanoPi NEO2 + NanoHAT OLED に armbian しばらく放っておいてどうセットアップしたか忘れたので、https://www.armbian.com/nanopi-neo-2/ armbi...
localhost と書くと IPv6 対応したときに死ぬことがある
127.0.0.1 より localhost のほうが書きやすいし良さそう、と思って localhost と書いているとしばしばハマります。
というかなんとなく localhost = 127.0.0.1 と考えがちではないでしょうか? そんなことはないので気をつけましょう。
最近のシステムなら /etc/hosts を確認すると少なくとも2つの localhost エントリを見ることができるでしょう。
127.0.0.1 localhost ::1 localhost
上は IPv4、下は IPv6 です。localhost はどちらのアドレスにも解決しうるホスト名となっています。
どういうときにハマるか
例えば同一サーバでリバースプロキシを行ってバックエンドサーバと繋ぎこみを行う場合、フロントのリバースプロキシで localhost:5000 と書くと IPv4 IPv6 どちらでアクセスされるか不定です。バックエンドサーバが IPv4 しか bind していないと IPv6 アドレスが選択されたとき接続不可になります。
正しい方法
すべてのサービスで IPv4 IPv6 ともに接続可能にし、ホスト名でアクセスできるようにすること。
非公開な内部向けサーバとかだと割と IPv4 しか使えないようにしがちではないかと思いますが、ちゃんとやったほうが無難です。
次善の策
ホスト名でひける IP アドレスの種類と実際に受けつけるプロトコルの種類をあわせること。
localhost の替わりに 127.0.0.1 か ::1 を使ってプロトコルを明示すること。
localhost に限らない
実際にところは localhost に限らず、ホスト名でアクセスするときには必ず気をつけるポイントです。DNS で IPv4 IPv6 いずれのアドレスも解決できるようにするなら、そのホスト上で待ち受けるサービスは全てデュアルスタックになっていないと、あらぬところでハマったりします。
関連エントリー
- mDNS と IPv6 とアクセス制限 デフォルトでプライベートIPアドレスを許可するようなLAN内向けのアプリケーションがあったりする。つまり192.168.0.13 とかでアク...
- さくらのVPSを踏み台にして IPv6 アドレスがついているホストへ ssh さくらのVPSはIPv4/IPv6デュアルスタックで、双方ともにグローバルアドレスがついているため、IPv4 しかない環境から IPv6 ア...
- IPv6 対応にした さくらのVPSのウェブサーバでIPv6の接続をうける | tech - 氾濫原 で、IPv6 アクセス環境がないと書いたが、スマフォで簡単に...
- さくらのVPSのウェブサーバでIPv6の接続をうける 最初からアドレスついてたので意外とやることない。 ifconfig すると既に v6 のアドレスがついている。Scope:Global にな...
- h2o の proxy.reverse.url で localhost を指定していたら確率的に connection failure リバースプロキシとして使っている h2o で proxy.reverse.url: http://localhost:5001/ みたいに書...
RTX1200 prometheus exporter Lua スクリプト
RTX1200 から直接 prometheus 形式でメトリクスを取得できる Lua スクリプトを書いた。
prometheus + grafana のセットアップ (Ubuntu 16.04.4 LTS) | tech - 氾濫原 自宅 raspberrypi への prometheus セットアップとリモートの prometheus との連携 | tech - 氾濫原 とやってきて、自宅内のメトリクスを grafana で表示できるようにしたので、自宅のルーターの RTX1200 のメトリクスをとるようにした。
RTX1200 はユーザー Lua を実行できる環境があり、そこそこ高級なことができる。TCP サーバは簡単に立てられる。HTTP サーバはないが、不特定多数のリクエストを受けるものでもないので、自力で簡単なものを実装した。
Luaスクリプト
https://github.com/cho45/rtx1200_exporter/blob/master/rtx1200_exporter.lua
エンコーディングが sjis なのが注意点。9100 を listen している。IPv6 を listen する方法はないっぽいので、必ず IPv4 でアクセスする必要がある。
出力サンプル
メトリクス名が prometheus のベストプラクティスから外れてるのは、もともと SNMP でとっていた値があるため。
というか SNMP ではとれるけど Lua からは直接とることのできないメトリクスがあるのでちょっと困る。 Lua から自分向けに SNMP 使えばとれると思うが今回やっていない。
# Collecting metrics...
# TYPE yrhCpuUtil5sec gauge
yrhCpuUtil5sec 3
# TYPE yrhCpuUtil1min gauge
yrhCpuUtil1min 2
# TYPE yrhCpuUtil5min gauge
yrhCpuUtil5min 2
# TYPE yrhInboxTemperature gauge
yrhInboxTemperature 46
# TYPE yrhMemoryUtil gauge
yrhMemoryUtil 24
# TYPE ifOutOctets counter
# TYPE ifInOctets counter
ifOutOctets{if="1"} 51255053848
ifInOctets{if="1"} 8057224805
ifOutPkts{if="1"} 43465561
ifInPkts{if="1"} 27396255
ifOutOctets{if="2"} 8411163805
ifInOctets{if="2"} 52401299138
ifOutPkts{if="2"} 25933809
ifInPkts{if="2"} 42718551
ifOutOctets{if="3"} 0
ifInOctets{if="3"} 0
ifOutPkts{if="3"} 0
ifInPkts{if="3"} 0
# TYPE ipSession counter
ipSession{proto="v4"} 59
ipSession{proto="v6"} 35
# TYPE ipChannel counter
ipChannel{proto="v4"} 59
ipChannel{proto="v6"} 35 Lua のデバッグ方法
いまいちベストのデバッグ方法がわからないが、以下のような手順でやった。
以下の upload.sh を保存するたびに実行
#!/bin/sh
PASS=adminpass
cat <<EOF | tftp 192.168.0.1
put rtx1200_exporter.lua /rtx1200_exporter.lua/$PASS
quit
EOF telnet 繋ぎっぱなしで以下を手動で実行
terminate lua all lua /rtx1200_exporter.lua show status lua
関連エントリー
- mackerel-agent + snmpで RTX1200 のメトリクス取得 検索すると Lua スクリプトを RTX にいれる方法もあるみたいだが、別途プロキシが必要みたいなので LAN 内の raspberrypi...
- GPSDO のメトリクス なかなかやる気が湧かなくてやってなかったが GPSDO のメトリクスをしばらくとってみることにした。そのへんに転がっていた NanoPI N...
- 自宅 raspberrypi への prometheus セットアップとリモートの prometheus との連携 Public VPS 上の Ubuntu に prometheus と grafana をセットアップしたので、自宅のネットワークのメトリク...
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...
- Prometheus から VictoriaMetrics への移行(Ubuntu, systemd) 自宅ラズパイのメトリクスとかセンサー類を VPS 上の prometheus に溜めているけど、1年分で12GBぐらいと、用途の割にかなり大...






