ホーム » コンピュータ (ページ 40)
「コンピュータ」カテゴリーアーカイブ
VPNルータの気絶で、自宅内ネットワーク総倒れ
今朝置きたら、”OK, Google”と呼びかけると、”インターネットに接続されていない”と悲鳴をあげてくれた。色々調べると、ネットワークが機能していない。我が家はDHCPやDNSを自宅サーバで運用しているから、サーバと繋がらないだけで、全機能麻痺。
状況分析
システムがトラブって、PCから ping を打つけど、どれにも繋がらない。このため、WiFiルータ(Buffalo-WZR-1166DHP2)の故障を想定した。
しかし、手持ちの代替え用WiFiルータにServer,PCとつなぐと簡単に復旧。これでWiFiルータ故障決定かと、HUB,VPNルータ(EdgeRouter-X)とつなげたら、またネットワークが落ちてしまった。そこで、HUBだけつなげたら…VPNルータだけつなげたら…と実験したら、VPNルータがつながるとネットワークが落ちることが判明。
VPNルータの故障かと思い、ひとまず電源リセットを行ったら、あっさり復旧。原因がWiFiルータでもないため、故障を疑ったWiFiルータをもとに戻したら、これまた正常動作。ということで、原因はVPNルータが気絶して、同一セグメントの機器を巻き込むような異常パケットを垂れ流していたのだろう…という結論に至る。
EdgeRouter-X のファームウェアを 1.10.9 に戻す/2019-05-10
今回の EdgeRouter-X のトラブルだけど、前回ファーム更新で、2.0.1 があったので、適用したけどその後すぐに消えてしまった。
たぶん、ファームが不安定だったのかと思われる。ということで、不安定の原因も考えられるので、1.10.9 に戻した。
iphoneの検知難しい
大学でアパート住まいの子供が、帰っているのか確認するために、LINE beacon を置いて検知を試したけど、bluetooth を切って既読スルーなヤツなので、ほとんど検知することができない。
そこで、アパートでは無線LANルータを使ってるし Raspberry-Pi で、arpalert を使えば簡単に検知できるだろうと、実験中。でも iPhone はセキュリティ対策なのか、 arp の返答は必要最小限なので同じサブネットとはいえ、そのままでは通信の必要の無い raspberry-pi には、ARP 情報が送られてこない。また ping には返答しないようで、単純に ping で確認も困難。ということで単純な arpalert では検知が難しいなぁ。
定時処理で、”arping -c 1 -I wlan0 IPHONEのIPアドレス” を実行させて、強制的に ARP を送ってもらうか…
cec-clientのデバイス番号とアドレス番号
自宅では、テレビやケーブルテレビチューナーやレコーダを赤外線リモコンで制御できるようにしているが、電源はトグル動作でON→OFFかOFF→ONという制御ができない。そこで、HDMI端子経由のチャンネル制御を行っている。
この際に、デバイス番号とcecのアドレス番号を使うが、デバイス番号が時々変化している。
しかたがないので、cecのscan処理でデバイス番号とアドレス番号の対応情報を保存するようにしてみた。
#!/usr/bin/perl
my $cec = "/usr/bin/cec-client -d 1 -s" ;
open( my $fd , "/bin/echo 'scan' | $cec |" )
|| die( "Can't open $cec\n" ) ;
open( my $ft , "> /home/xxxxxxxx/lib/cec-table.sh" )
|| die( "Can't open cec-table.sh\n" ) ;
my $device = "" ;
my $dev_str = "" ;
my $address = "" ;
my $osd_str = "" ;
print $ft "#!/bin/bash\n" ;
while( my $line = <$fd> ) {
if ( $line =~ /^device\s+#(\d+):\s+(.*?)$/ ) {
$device = $1 ;
$dev_str = $2 ;
} elsif ( $line =~ /^address:\s+(\d+)\.0\.0\.0$/ ) {
$address = $1 ;
} elsif ( $line =~ /^osd\s+string:\s+(.*?)$/ ) {
$osd_str = $1 ;
print $ft "DEV[$address]=$device\n" ;
print $ft "OSD[$address]=\"$osd_str\"\n" ;
}
}
close( $fd ) ;
close( $ft ) ;
stretchで起動しづらい
自宅で色々と動いている Raspberry-Pi 。OS更新はまめにやっているけど、外気温測定に使っているのが Jessie のままだったのに気づく。stretch に上げたけど、どうも起動に失敗する。更新に失敗したかと思ったけど、キーボードをつなぐために USB WiFi を抜いて起動すると、普通に動いている。
今までも、多少 boot が不安定なのはあったけど、stretch になって起動シーケンスが最適化されたのか、WiFi 有効化のタイミングが早まり、ブート時の電力不足が発生していると思われる。
ひとまず、改造面倒だし USB WiFi を抜いて、boot がそれなりに進んでから USB を指して対応。
ER-X EdgeOS v2.0.1
EdgeRouter-X の新しいファームウェアが、2019/3/29 にリリースされたみたいということで、早速インストール。特にどんな機能が増えたのか、よくわからないけれど無事更新完了。
![]()
ただ、更新が終わって改めて、何が新しくなったのかとファームウェアのページを見たら、v2.0.1の情報が消えている。どーゆーことぉ?
アマチュア無線: aprx を動かしてみた
知り合いより譲り受けた、TH-D72を活用したいということで、APRS の iGate 局を動かしてみた。
我が家は、ロケーション的に福井市にあるリピータにも、ハンディ機では接続できず、無線機の位置情報などをインターネットに伝えることができる APRS や、インターネットを経由した通話ができる D-STAR などを、あまり活用することが難しい。
aprx を動かす
そこで、TH-D72 を APRS の iGate 局として動かすために、aprx をインストール。
以下のように設定したけど、まずい所がないか要チェックだな。ひとまず、データ流しまくりでaprsインターネット側には、迷惑をかけていないはず。ハンディ機なので、どのあたりまで電波が飛んでいるのか、チェックしてみよう。
$ sudo aptitude install aprx $ sudo vi /etc/aprx.conf $ sudo systemctl enable aprx.service $ sudo systemctl start aprx.service
# /etc/aprx.conf
mycall JR9PVZ-10
myloc lat 3553.48N lon 13613.33E
<aprsis>
passcode 22202
server rotate.aprs2.net
</aprsis>
<logging>
pidfile /var/run/aprx.pid
rflog /var/log/aprx/aprx-rf.log
aprxlog /var/log/aprx/aprx.log
dprslog /var/log/aprx/dprs.log
</logging>
<interface>
serial-device /dev/ttyUSB1 9600 8n1 KISS
initstring "HBAUD 9600\x0dKISS ON\x0dRESTART\x0d"
alias RELAY,WIDE,TRACE
callsign $mycall # callsign defaults to $mycall
tx-ok true # transmitter enable defaults to false
telem-to-is false # set to 'false' to disable
</interface>
<beacon>
beaconmode both
cycle-size 60m
beacon symbol "I#" $myloc comment "Tx-iGate + Digipeater"
</beacon>
<digipeater>
transmitter $mycall
<source>
source $mycall
</source>
</digipeater>
TH-D72の設定
| [TNC]-[TNC] | KISSモード | |
| [メニュー]-310 | データバンド | A-BAND |
| [メニュー]-311 | パケットスピード | 9600 bps |
| — | 無線周波数 | 144.640 MHz |
MinGW gcc + Visual Studio Code でC言語
Visual Studio 2017は激重、BCC+Visual Studio Codeは、個人利用なら無償だけど、職場のシステムに入れるにはライセンスが微妙ということから、C言語環境には、MinGW (Minimalist GNU for Windows) の gcc を使ってみる。
MinGW gcc のインストール
MinGWのサイトから、インストーラー mingw-get-setup.exe をダウンロードする。
“Install” を選ぶと、インストーラが開始。保存先のディレクトリ名の入力になるけど、デフォルトの “C:\MinGW”をそのままで、”Continue”を選ぶ。
必要最小限のファイルのダウンロードが終わると、以下の画面となるので、さらに”Continue”。
Installation Manager が表示されたら、インストールする開発環境を選ぶ。C言語の基本的な勉強用であれば、以下の2つをチェックする。項目を選んで右ボタンを押して、プルダウンメニューから、Mark for Installation を選ぶ。
- mingw32-base-bin
- mingw32-gcc-g++-bin
あとは、左上の “Installation”から、”Apply Changes”を選ぶとインストールが始まるので、終わるまで待つ。
MinGWのPathを通す
プログラムを起動する場合、どのフォルダにあるのかを、環境変数 Path に登録しておく必要がある。
⚙ 設定を起動し、システム→バージョン情報を選ぶと、画面右側のスクロールダウンした先の関連設定の下のシステム情報をクリック。
以下のような、コントロールパネルのシステムの画面が表示されたら、画面左の”システムの詳細設定をクリック。
以下のようなシステムのプロパティが表示されたら、詳細設定のタブの”環境変数(N)…”をクリック。
環境変数の画面になったら、画面下側の”システム環境変数”の Path を選んで、”編集”をクリック。
“環境変数名の編集”の画面が出たら、右上の”新規”を選ぶと、変数名のPath一覧の最下部に、追加画面が表示されるので、MinGWをインストールした、場所の bin の場所を記載する。今回ならば、”C:\MinGW\bin” を加え、”OK”を押せば完成。
Visual Stuido Code のインストール
別資料でも記載したが、この後は、”Visual Studio Code”をインストール。Windows であれば、Code Runner は標準設定で MinGW の gcc を使うように設定されているので、普通にインストールすれば終わり。
Visual Studio Code のサイトに行って、OSが64bit版であれば、Windowsの “System Installer 64bit” 版をダウンロード。あとは、インストーラを起動して、標準構成でインストール。
インストールが終わったら、左中段下の”Marketplace”を押し、以下の3つのアドオンをインストールする。
- Japanese Language Pack for Visual Studio Code 1.32.4
- C/C++ 0.22.1
- Code Runner 0.9.7
あとは、エディタ画面でC言語のプログラムを入力し、画面右上の▶ボタンを押せば、プログラムをコンパイル&実行ができる。

















