ホーム » コンピュータ (ページ 34)
「コンピュータ」カテゴリーアーカイブ
アマチュア無線: 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言語のプログラムを入力し、画面右上の▶ボタンを押せば、プログラムをコンパイル&実行ができる。
Visual Studio CodeでBorland C++を使う
先日、Visual Studio 2017 を入れたら、激重だったので、もっと軽い環境を試す。
embarcadero C++ compiler(旧borland C++)のインストール
軽量のコンパイラとして便利なのが、embarcadero C++ compiler。というより、年配の人であれば 旧borland C++ といった方が有名だろう。以前より無料で利用できるので、職場でも初心者プログラマーの簡単プログラミングであれば、BCC55を利用している。
最新のものを探すとBCC102として公開されているので、これをインストールする。
C++ Compiler のページから、”無料版のダウンロード”より、BCC102.zip を取得する。解凍して、コンパイラのフォルダを “C:\borland\BCC102” に移動する。コンパイラの実行プログラムが “C:\borland\BCC102\bin\bcc32x.exe” となること。
Visual Studio Code の設定
以下の図に示す、3つをインストールする。(Visual Studio Codeのインストールは他の資料参照)
- Japanese Language Pack… 日本語環境
- C/C++ 0.22.1 の編集機能
- Code Runner 0.9.7 (今回のキモ)
Marketplace の検索画面で、Japanese とか C++ とか Code Runner とか入力すれば、候補に出てくるので右下の”インストール”ボタンを押せば、インストールされていく。
“ファイル→基本設定→設定” を開くと、以下のような画面になるので、検索画面で”code-runner”などと入力すれば、”Code Runner”の設定画面が出てくる。今回は、設定での入力が複数行になるので “settings.jsonで編集” をクリックすると、ユーザ情報の settings.json の編集画面になる。
ここで、settings.json に以下の内容を書き込んで保存する。(表示の都合で折り返しているけど、”cd…..exe”までは1行で)
{ "code-runner.executorMap": { "html": "\"C:\\Program Files (x86)\\Google\\Chrome \\Application\\chrome.exe\"", "java": "cd $dir && javac $fileName && java $fileNameWithoutExt", "c": "cd $dir && c:\\borland\\BCC102\\bin\\bcc32x $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe", "cpp": "cd $dir && c:\\borland\\BCC102\\bin\\bcc32x $fileName -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe" } }
編集と実行
あとは、適当な C/C++ のソースコードを開いて、編集画面の右上の▶ボタンが、実行に割り当てられているので、これを押すだけでコンパイル&実行ができる。別画面にコンパイル状態の表示と、実行結果が表示される。
Postieでimap-ssl接続に失敗
職場のサーバでWordPressを動かす中、簡単な画像付きメールでのポストをするために、plugin の Postie を使っている。
状況確認
当初は、imap-ssl で動かしていたのだが、接続に失敗するようになった。
Postie (v 1.9.32) getemails: There was an error connecting to the server
メールサーバが、自宅メールサーバなので、FireWall 関連の設定のミスが考えられたが、nagios-plugins を入れて実験すると、以下のような結果なので、接続はできている。
$ /usr/lib/nagios/plugins/check_imap -p 993 -H xxxx -S IMAP OK - 0.146 second response time on xxxx port 993 [* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN] Dovecot (Debian) ready.] |time=0.145649s;;;0.000000;10.000000
問題点
原因を確認ということで、syslog を確認すると、以下のように SSL のハンドシェークでエラーが出ている。
Mar 24 00:50:39 xxxx dovecot: imap-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=xx.xx.xx.xx, lip=192.168.xx.xx, TLS handshaking: SSL_accept() failed: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca: SSL alert number 48, session=<xxxxxx>
暫定の解決法
しかたがないので、dovecot の ssl の設定を変更、TLSv1.2 になっていた部分を TLSv1 に修正
(( /etc/dovecot/conf.d/10-ssl.conf )) - ssl_min_protocol = TLSv1.2 + ssl_min_protocol = TLSv1
”TLS 1.0にはBEASTやPOODLEといった脆弱性があり、一定の条件下であれば暗号解読が可能であると言われています。”で、2018年6月30日以降は、TLSv1.0 は通常用途では勧められないとのことなので、多少心配ではあるけど…。
通常使っているメールソフトは、TLSv1.0 を使わないだろうし、実質このPostieだけの利用だろうし。
インターネット検索の上達法
情報をGoogleなどで検索する時、うまく情報を見つける人と見つけられない人の違いをみると、検索ワードの書き方がキーポイントだと思う。
でも、ここで、Google の AND/OR 検索やら * を用いた曖昧語検索やら link: といった検索演算子といった Tips は言及するつもりはない。
検索上手になる方法
要は、今、自分が探したい情報の解説記事あるとしたら、そのページ作者ならそのページにどんなタイトルをつけるか、どんな文章を書くのか、そのタイトルや文章にはどんなことが書かれるか想像すること。これを想像できるようになると、検索フォームに自分が探したい情報として必要最小限なにを書くべきか分かるようになるはず。
まずはページ・記事を書いてみる。
でも、それが想像できないじゃん…という人は、自分で解説ページを書いてみればいい。「BLOG を書くことって自己満足じゃね?」とか「2番煎じのネタじゃね?」とか思うかもしれない。でも、最初はそれでいい。自分でやったことの解説記事を書くことを繰り返していれば、読んでもらう記事にどんなタイトルをつけると良いか考えるいい経験になる。
インターネットに+1の貢献をしよう
ただ、自己満足+2番煎じの記事ばかりを書いていると、自分も成長しないし、インターネットの情報も成長しない。できれば、2番煎じでもいいから、あなた自身で調べた情報を少しでもいいから追加した記事、自分の参考にした情報へのリンクを埋め込んだ記事を書けば、インターネット上の知識も成長するし、あなた自身も成長する。
そして、本当にあなたが成長したなら、完全オリジナルの記事を書けばいい。
元ネタは…
といっても、この+1で貢献という考えには、元ネタがある。
- 10もらったら自分の1を上乗せして11にして次の人へ渡す…(鋼の錬金術師)
- ペイ・フォワード…自分が受けた善意や思いやりを、その相手に返すのではなく、別の3人に渡すというものだ…(ペイ・フォワード 可能の王国:[映画]Wikipedia)
ハガレンのネタは、アニメが好きな人なら解説は不要だろう。映画「ペイフォワード」は、心が疲れている時にぜひとも見てほしい作品。ぜひぜひ。
C言語環境(Visual Studio 2017)のインストール
C言語の開発環境には色々なものがあるが、学校などで標準的な開発環境として用いられているのは、Visual Studio 2017 だろう。以下に、そのインストールおよび hello world のプログラムまでの手順を示す。
- 性能が低いパソコンでは、Visual Studio 2017は重過ぎる。C言語の授業で習うような内容ならば、Visual Studio Code と Borland C++の方が良い(2019-03-27)だろう。
Visual Studio のインストール
Visual Studio のページにアクセスし、以下のページが表示される。
Visual Studio IDEは、C,C++の必要最小限の開発環境なので、これを選ぶ。
画面上部に、Visual Studio 無料版へのリンクがあるので、これを使っても良いだろう。
vs_community_xxxx…xxxx.exe がダウンロードされるので、これを実行する。
Windows が実行しても良いのか確認されるけど、Yes でインストールを続行。
最初に、不足している機能をダウンロードする画面がでるけど、そのまま待つ。
必要最低限のインストール
次に、インストールする物を選ぶ画面になるので、C,C++の簡単なプログラム開発に十分な、「C++によるデスクトップ開発」にチェックを入れて「インストール」を行う。
以下のような画面がでたら、ひたすら待つ。
インストールが終われば、再起動が求められるので、再起動。
Visual Studio の起動
メニュー内のVisual Studio 2017を起動すると、以下のような画面が表示されるので、自分の Microsoft アカウントを入力する。
最初のプログラム作成
ファイル→新規作成→プロジェクトを開く。
C言語の教科書に書かれているような、簡単なプログラムは、Windows コンソールアプリケーションなので、これを選び、OKを押す。
必要最小限のC++のサンプルプログラムが入力されているけど、ばっさり消して最も簡単なC言語のサンプルコードを入力する。
注意:Visual Studio では、巨大な #include <…>のコンパイル時間の遅さの対策として、プリコンパイルヘッダを使う。(ヘッダファイルをコンピュータ処理しやすい形式に変換したヘッダファイルを生成する処理)
プログラムの先頭に #include “pch.h” を挿入すること。
入力を終えたら、ビルド→コンパイルにより、機械語プログラムを生成させる。
入力し正しくコンパイルができていたら、デバッグ→デバッグの開始でプログラムを起動する。今回は、以下のように表示された。
愚痴
C言語の環境構築のために、Visual Studio 入れたけど、ほんとクソ重いなぁ…
貧弱なパソコンでは、使う気が起こらねぇな。
he.net を使った IPv6 トンネル
IPv6 の導入の実験として、IPv6トンネルを無料で利用できる he.net を使って設定してみた。
現在、自宅サーバ自体を IPv6 対応することはできたけど、サーバ配下のパソコンもこのトンネルを使うようにできていないので、まだ目標の半分。
he.netへの登録
Hurricane Electric(he.net)の接続方法を紹介しているサイトの記事を見ながら、he.net に利用者登録をして、トンネルの割り当てを受ける。
トンネル起動の設定
he.netのサイトで、上記の登録が終わると、”Example of Configuration”のタブで、OSを選べば、接続するための設定ファイルのサンプルが表示される。
ただ、Debian/Ubuntu を選ぶと、/etc/network/interfaces 用の設定が示された。自宅サーバは systemd を使っているので、このままでは使えない。ほかのサイトで調べて、最終的に以下に落ち着いた。
(( /etc/systemd/system/he-ipv6.service )) [Unit] Description=he.net IPv6 tunnel After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/ip tunnel add he-ipv6 mode sit remote 74.82.xx.xx local 192.168.yy.yy ttl 255 ExecStart=/bin/ip link set he-ipv6 up mtu 1480 ExecStartPost=/bin/sleep 0.3 ; /bin/ip -6 route add ::/0 dev he-ipv6 Execstop=-/bin/ip -6 route del ::/0 dev he-ipv6 ExecStop=/bin/ip link set he-ipv6 down ExecStop=/bin/ip tunnel del he-ipv6 [Install] WantedBy=multi-user.target
systemd の サービス として設定するために、he-ipv6.service ファイルを作成する。
systemd ではサービスの処理を起動/停止するためのコマンドは、ExecStart / ExecStop に記載する。
“ip tunnel add” の remote 欄は、割り当てられたhe.net のIPアドレス、localには自分のグローバルアドレスを指定する。ただし、自宅サイトはルータ内にサーバがあるので、ポートフォワードされたプライベートのアドレスを指定する。
トンネル開通後のIPv6のデフォルトゲートウェイを設定する “ip -6 route add” の実行は、少し間を置かないと失敗するようなので、若干の sleep を挟んだ。ExecStart 行は、通常1行1コマンドしか使えないが、ExecStartPost は、複数コマンドが書けるので、こういう時には便利。
ExecStop でのデフォルトゲートウェイ削除の処理 “ip -6 route del ::/0″では、前述のsleepが無い場合、エラーが出ることがあるので、コマンドの先頭に”-“をつけエラーで止まらないようにしておいた。
# サービスの登録 $ sudo systemctl enable he-ipv6.service # サービスの起動 $ sudo systemctl start he-ipv6.service # サービスの停止 $ sudo systemctl stop he-ipv6.service
ただし、後にも述べるように常時 IPv6 化は現状では問題があるので、systemctl enable は行わないでおく。
RAの設定(ルーティング広告)
ルータ周りの他のパソコンがグローバルなIPv6アドレスが割り当てられるように、RAの設定を行う。実は、リンクローカル”fe80::”での自宅内IPv6ネットワークの運用では、グローバルIPv6が無いので RA が不要だけど、IPv6の DNS をアナウンスが必要なので、今までは DHCPv6 を使っていた。でも、radvd.conf の設定を調べると、アナウンスするプレフィックス設定の欄を “prefix ::/64” と記載すれば、”fe80::”のリンクローカルはアナウンスされないようなので、radvd に変更。”RDNSS”の欄で、自宅内 IPv6 対応なDNSサーバを指定することで、IPv6経由で名前解決をできるようにしておく。
interface eth0 { AdvSendAdvert on; AdvManagedFlag on; AdvOtherConfigFlag on; # 非リンクローカルなアドレスだけアナウンス prefix ::/64 { AdvOnLink on; AdvAutonomous on; AdvRouterAddr on; }; # DNSは、リンクローカルなDNSサーバをアナウンス RDNSS fe80::xxxx:xxxx:xxxx:xxxx { AdvRDNSSLifetime 30; }; DNSSL example.jp { AdvDNSSLLifetime 30; }; };
この段階で、IPv6 のファイアウォールの設定(ferm)の設定が間違っているのが判明したので、別途修正。
常時IPv6対外接続は問題あり
よく、IPv6 を使うとネット通信速度が速くなると言われているけど、現時点では IPv6 利用者が少ないので、上流が詰まらないだけ。今回のような、IPv4 を使ったIPv6トンネリングでは、IPv4 以上には速くなるはずもないし、IPv6 も無料でサービスを提供している he.net では、上流の輻輳もあるだろうし高速通信も期待できない。
このため、上記の IPv6 接続は単なる自分の勉強用で、必要な時だけ”systemctl start he-ipv6.service”でトンネル接続させる予定。。当面、常時 IPv6 運用はしないだろう。
WiFi 2.4Gのチャンネル変更
最近、子供からWiFiがよく切れるとのクレーム。調べてみたら、お隣さんのWiFiのチャンネルと被っているみたい。
2.4G [Hz] / 11n,11g,11b
何度かスキャンをかけると、2.4GHz帯のチャンネル選択は自動にしておいた状態で、自宅の1F用,2F用が3ch,11chを使っていて、しかもお隣さんも同じものを使ってる。倍速モードの拡張チャンネルも5chとか使われていて、これもかぶってる。
そこで、3ch,5ch,11chを避けるために固定チャンネルの設定を探し、お隣さんに近い WiFi-AP を 13ch(拡張9ch)、自室 WiFi-AP を 7ch(拡張11ch) にしてみた。
WiFi 場所 | メインch | 拡張ch |
---|---|---|
お隣近接側AP | 13ch | 9ch |
自室AP | 7ch | 11ch |
5G [Hz] / 11ac,11n,11a
5GHz の方は、電波が遮蔽物越しでは飛ばないようで、あんまりお隣さんが見えない。ということで、そのまま自動選択にしておこう。
丹南CATVで、逆引きに失敗
先日の光ルータのトラブルで、ルータ交換となったがDHCPで割り当てられる IP アドレスが変わってしまった。ただ、このおかげで接続ができないサーバが出てきた。
逆引きができない
調べてみると、丹南CATVの64.33.xx.xxのIPアドレスで、逆引きができない。
$ nslookup 64.33.3.xxx 8.8.8.8 xxx.3.33.64.in-addr.arpa name = ttn64-33-3-xxx.ttn.ne.jp. $ nslookup ttn64-33-3-xxx.ttn.ne.jp 8.8.8.8 ** server can't find ttn64-33-3-xxx.ttn.ne.jp: NXDOMAIN
このため、ssh などでドメイン名によるアクセス制限をしている場合に、はじかれてしまう。
悪いなぁ…と思いつつ丹南CATVの連絡窓口に
この前の、光ルータのトラブルで、丹南CATVに連絡したばかりだけど、今回の問題は、他の利用者でも同様のトラブルでクレームも出るだろう。ということで、悪いなぁ…と思いつつ再びWebの連絡窓口に投稿…。
早々に逆引き設定修正
早々に、丹南さんより、設定修正の連絡を受けた。んで、無事にサーバにも接続できました。ありがとーございますっ❢