1/22/2020

引っ越しました。

MarsEditがBloggerをサポートしなくなったので以下に引っ越しました。
引っ越し先

2/09/2018

EdgeRouterの最新ファームウェア 1.10.0

どのような理由があるかわからないが、公式ダウンロードサイトではないとろこでなぜかEdgeRouterの最新ファームウェア1.10.0が公開。

https://community.ubnt.com/t5/EdgeMAX-Updates-Blog/EdgeMAX-EdgeRouter-software-security-release-v1-10-0/ba-p/2233263

EdgeRouter ER-8-XGを使っている人でPPPoEをオフロードしている人は使えないらしい。。。実は結構前にベータフォーラムにあって、1週間程度つかっているけど問題はないです。。。今の所。

1.9.7 hotfix-4ベースなので、とりあえず当てておいた。

2/05/2018

Raspberry pi 3とiOSでMarantz NA8005をコントロール

Raspberry PIを手に入れてから音楽ざんまいなのだが、一つ問題があって、簡単にステレオの類の電源のオンができない。

使っているステレオアンプは、昭和バブル時代の名機のアンプSony TA-F222ESJ というリモコンもない無骨なもの。長岡鉄男先生大絶賛。ハードオフなどで見かけたら是非ゲットしておくべきもの。このアンプMOS FET(今はもうほぼ手に入らない。)という素子で作られているので、温まるまで音が不安定でも、一度温まればってやつである。バイポーラでよければ(これも今、もうほとんど手に入らない)、TA-F500とかTA-F510Rとかがおすすめ。これもハードオフなどで捨て値で売られている。部屋が広ければ確保したい。

これらのアンプは、以下のやつでiOSから普通にオンオフできる。

ちなみに、こいつのコンセントはオーディオ的にあてにならないので、昔のオーディオタイマー対応コンセントを利用してオンオフしている。しかし、オーディオタイマーという昭和のラジオ録音をするための機材に関連する機器なんてもう売っておらず、ヤフオクだのみである。。。(机のしたのケーブルは突っ込まないでください。)

NewImage

閑話休題

利用しているDACは、MarantzのNA8005という最近生産中止になったもの。Spotifyとか使えないけど、AirplayとかDAC、USB HDD、DLNA再生ができるという、当時では全部入りの192KHzまで対応したDACである。これさえあれば、数年前までは何も困らなかったんだが。。Spotifyに対応せず。。。10万円もしたのに。。。と今、価格.comをみたら49800円で売られている (2018/2/4現在)

 

ちなみに価格コムの値段

http://kakaku.com/item/K0000653399/

音の好き嫌いがあるかもしれないが、音がいい。ラズパイにDACをつけている人もいるが、電源がスイッチング電源になる上にアナログ回路とデジタル回路が同居というのもなんだがかなぁと言う感じ。大学が甲州街道沿いにあったせいか、自分はノイズには結構うるさい。シールドとかしていなくて、学生実験レベルでも値が反転することが多々あった。まぁ、高調波ノイズにしかならなくて、普通の人にはあまりわからないからいいっちゃいいんだけど、気持ちわるいので自分はしない。。。

このNA8005をRaspberry PI 3にHomeBridgeをインストールして制御をしようというのが今回のお話。。。

やるべきことは、ラズパイに、

- Homebridgeのインストール

- homebridge-cmdswitch2のインストール

- NA8005のオンオフ、ステータス確認の設定

- デーモン起動の設定

多分だが、NA7004とかNA6005とかでもいけると思う。

- HomeBridgeのインストール

相変わらずベタ書きだが、以下を実行

 

sudo apt-get -y install libavahi-compat-libdnssd-dev
mkdir homebridge
cd homebridge
wget https://nodejs.org/dist/v8.9.4/node-v8.9.4-linux-armv7l.tar.xz
tar -xvf node-v8.9.4-linux-armv7l.tar.xz
cd node-v8.9.4-linux-armv7l/
sudo cp -R * /usr/local/
cd
node -v
sudo npm install -g homebridge --unsafe-perm
sudo useradd --system homebridge
sudo mkdir /var/homebridge
sudo chown homebridge:homebridge /var/homebridge/

sudo vi /etc/default/homebridge
# Defaults / Configuration options for homebridge
# The following settings tells homebridge where to find the config.json file and where to persist the data (i.e. pairing and others)
HOMEBRIDGE_OPTS=-U /var/homebridge

# If you uncomment the following line, homebridge will log more
# You can display this via systemd's journalctl: journalctl -f -u homebridge
# DEBUG=*

sudo vi /etc/systemd/system/homebridge.service
[Unit]
Description=Node.js HomeKit Server
After=syslog.target

[Service]
Type=simple
User=homebridge
EnvironmentFile=/etc/default/homebridge
ExecStart=/usr/local/bin/homebridge $HOMEBRIDGE_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target

ちなみに以下をしないと動かなかった。

cd /usr/local/lib/node_modules/homebridge
sudo npm install --unsafe-perm mdns
sudo npm rebuild --unsafe-perm

 

- homebridge-cmdswitch2のインストール

sudo npm install -g homebridge-cmdswitch2

 

- NA8005のオンオフ、ステータス確認の設定

 

sudo apt-get -y install telnet
sudo mkdir /usr/local/na5008

以下DENON_IPにNA8005のIPアドレスを入れる。

電源オンスクリプト。起動したときに、USB-DACで起動するようにしてある

sudo vi /usr/local/na5008/pwon.sh
#!/bin/sh
DENON_IP=192.168.8.7
echo "PWON"|telnet $DENON_IP 23
sleep 10s
echo "SIPC"|telnet $DENON_IP 23

電源オフスクリプト

sudo vi /usr/local/na5008/pwoff.sh
#!/bin/sh
DENON_IP=192.168.8.7
echo "PWSTANDBY"|telnet $DENON_IP 23
sleep 10s
echo "PW?"|telnet $DENON_IP 23

電源ステータススクリプト これだけはWEB UIから拾ってくることに。。。

sudo vi /usr/local/na5008/pwstatus.sh
#!/bin/sh
DENON_IP=192.168.8.7
curl -s http://$DENON_IP/goform/formMainZone_MainZoneXml.xml |grep \<Power\> | grep ON

最後に実行権限をつけて終了

sudo chmod +x /usr/local/na5008/*.sh

 

HomeBeidgeの設定ファイルはこんな感じ

sudo su homebridge -s /bin/bash
vi /var/homebridge/config.json
{
"bridge": {
"name": "Homebridge",
"username": "B8:27:EB:29:55:2D",
"port": 51826,
"pin": "031-46-160"
},

"description": "HomeBridge",

"accessories": [
],
"platforms": [{
"platform": "cmdSwitch2",
"name": "CMD Switch",
"switches": [{
"name" : "NA8005",
"on_cmd": "/usr/local/na8005/pwon.sh",
"off_cmd": "/usr/local/na8005/pwoff.sh",
"state_cmd": "/usr/local/na8005/pwstatus.sh",
"polling": true,
"interval": 15,
"timeout": 2000,
"manufacturer": "D&M Holdings Inc.",
"model": "NA8005",
"serial": "XXXXXXXXXXXXXXXXX"
}]
}]
}

exit

- デーモン起動の設定

sudo systemctl daemon-reload
sudo systemctl enable homebridge
sudo systemctl start homebridge
sudo systemctl status homebridge
sudo journalctl -u homebridge

これでiOSに登録すればOK。iOSに登録するとこんな感じになる。

NewImage

というわけで、在庫処分のNA8005とラズパイをゲットして、フル装備のオーディオセットゲットだぁ。

 

ところで、多分このブログを社長も見ているかもしれないが、「ちったぁ仕事もしてくれればなぁ」と思われていないかどうか正直不安であるw

 

 

 

2/03/2018

EdgeRouterでLets Encrypt

できるだろう、できるだろう!と思っていて、環境を汚さず、かつ自動更新してくれそうなもので簡単なものを探していたのだが、これが一番良さげ。

https://github.com/j-c-m/ubnt-letsencrypt/blob/master/README.md

注意:実行前に必ずスクリプトを確認すること。一度、スクリプトを作って、自分の環境に置換をして実行したほうがいいかも

また、しくるとあるいは変なところでコミットすると、環境がおかしくなったり、アクセスができなくなることがあるので、必ずバックアップを取っておくこと。

事前設定

設定の条件は以下

subdomain.example.com - FQDN
192.168.1.1 - LAN IP of Router
eth0 - WAN device

事前にDNSの設定をしておく。nslookupでgoogleのDNSにFQDNを聞いて、ちゃんとWAN側のIPを返してくることを確認すること!!!

80番ポートをもしかするとこのルータが答えるようにしておかないとダメかも。自分は、80番ポート開けてた。。。後で要確認!

SSHでログイン

mkdir -p /config/.acme.sh
curl -o /config/.acme.sh/acme.sh https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
curl -o /config/scripts/renew.acme.sh https://raw.githubusercontent.com/j-c-m/ubnt-letsencrypt/master/scripts/renew.acme.sh
chmod 755 /config/.acme.sh/acme.sh /config/scripts/renew.acme.sh


configure
set system static-host-mapping host-name subdomain.example.com inet 192.168.1.1
set service gui cert-file /config/ssl/server.pem
set service gui ca-file /config/ssl/ca.pem
set system task-scheduler task renew.acme executable path /config/scripts/renew.acme.sh
set system task-scheduler task renew.acme interval 1d
set system task-scheduler task renew.acme executable arguments '-d subdomain.example.com -i eth0'

sudo /config/scripts/renew.acme.sh -d subdomain.example.com -i eth0


実行すると以下のようなメッセージが流れる。

[Sat Feb 3 07:31:42 UTC 2018] Stopping GUI service.
[Sat Feb 3 07:31:42 UTC 2018] Starting temporary ACME challenge service.
[Sat Feb 3 07:31:43 UTC 2018] Creating domain key
[Sat Feb 3 07:31:45 UTC 2018] The domain key is here: /config/.acme.sh/subdomain.example.com/subdomain.example.com.key
[Sat Feb 3 07:31:45 UTC 2018] Single domain='subdomain.example.com'
[Sat Feb 3 07:31:45 UTC 2018] Getting domain auth token for each domain
[Sat Feb 3 07:31:45 UTC 2018] Getting webroot for domain='subdomain.example.com'
[Sat Feb 3 07:31:45 UTC 2018] Getting new-authz for domain='subdomain.example.com'
[Sat Feb 3 07:31:46 UTC 2018] The new-authz request is ok.
[Sat Feb 3 07:31:47 UTC 2018] Verifying:subdomain.example.com
[Sat Feb 3 07:31:51 UTC 2018] Success
[Sat Feb 3 07:31:51 UTC 2018] Verify finished, start to sign.
[Sat Feb 3 07:31:52 UTC 2018] Cert success.
-----BEGIN CERTIFICATE-----
省略/ないしょ!
-----END CERTIFICATE-----
[Sat Feb 3 07:31:52 UTC 2018] Your cert is in /config/.acme.sh/subdomain.example.com/subdomain.example.com.cer
[Sat Feb 3 07:31:52 UTC 2018] Your cert key is in /config/.acme.sh/subdomain.example.com/subdomain.example.com.key
[Sat Feb 3 07:31:52 UTC 2018] The intermediate CA cert is in /config/.acme.sh/subdomain.example.com/ca.cer
[Sat Feb 3 07:31:52 UTC 2018] And the full chain certs is there: /config/.acme.sh/subdomain.example.com/fullchain.cer
[Sat Feb 3 07:31:53 UTC 2018] Run reload cmd: cat /config/.acme.sh/subdomain.example.com/subdomain.example.com.cer /config/.acme.sh/subdomain.example.com/subdomain.example.com.key > /config/ssl/server.pem; cp /config/.acme.sh/subdomain.example.com/ca.cer /config/ssl/ca.pem
[Sat Feb 3 07:31:53 UTC 2018] Reload success
[Sat Feb 3 07:31:53 UTC 2018] Stopping temporary ACME challenge service.
[Sat Feb 3 07:31:54 UTC 2018] Starting GUI service.

sudo /config/scripts/renew.acme.sh -d subdomain.example.com -i eth0

commit
save

これでFQDNにログインしたときに証明書が有効になっているはず!

 

ssh-recovery 設定

ssh-recovery は、ルータのポート設定にしくったときにIPv4でログインができなくなったときの仕組みでIPv6でログインをする。ただし、ずっとログインができるのもまずいので、起動後何分かまでだけである。その起動後何分かあるいは永遠かは変えられる。

某社のルータのように起動後TFTPが一瞬空いているのと似ている。

さて、設定は以下のように行なった。

set service ssh-recovery listen-on eth1

とりあえず、LAN側で空いて入ればいいやということで

Commitをすると以下のメッセージが出て来る。

Warning: the SSH recovery service is started during system boot-up and
stopped when the lifetime expires.

If you want the changes to be applied now then stop/start/restart
the service manually by issuing:
sudo ssh-recovery stop
sudo ssh-recovery start

You can check the configuration with:
sudo ssh-recovery conf

どうやらこの設定はサービスを再起動しないと効かないとのこと。また設定を確認するには、コンフィグからではなく別のコマンドから。

サービスを再開させると以下のようなメッセージが表示される。

sudo ssh-recovery start
ssh-recovery: starting...
ssh-recovery: if=(eth1) port=(60257) terminate-timeout=(60)
ssh-recovery: enabling link on interfaces...
ssh-recovery: eth1 :: Mac=(秘密!)
ssh-recovery: waiting for interface/address initialization...


ssh-recovery: service started :: pid=(7982)

設定はこんな感じ

sudo ssh-recovery conf
ssh-recovery: if=(eth1) port=(60257) terminate-timeout=(60)

活用することがないことを祈りたい!

 

 

EdgeRouterの最新ファームウェア v1.10の適用

EdgeRouterのβファームを扱うフォーラムでEdgeRouter v1.10.0のファームが公開されている。まだ、メインサイトでは公開されてはいない。

https://community.ubnt.com/ に登録して、ベータの参加表明をするとかたしかチェックボックスがあったかもしれない。いずれにせよAt Own Riskである。

また、EdgeRouter Xのストレージは今や狭小住宅なみに少ないので、古いイメージの削除をしてから入れないとファームのアップグレードができない。つまり、EdgeRouter Xは実行中のファームの他にもう一つのファームしか入れられないことに注意。

詳しくはココを必ず参照

もちろんファームの適用前には、必ずコンフィグをファイルとテキストでバックアップしておくこと!!!

 

ベータフォーラムからかいつまんで新機能を説明すると(個人的な偏見も含むが)

* [Ssh-recovery] -

This is a new service which starts during early boot stage and provides emergency SSH access via IPv6 link-local address. ssh-recovery can be used to access shell from a directly connected neighbor if a router is not accessible by normal means. By default ssh-recovery service is listening on port 60257 on all ethernet interfaces and it is automatically terminated 60 seconds after start. More information is available in this article.

* [FlowAccounting] -

Added flow-accounting via ipt-netflow which performs better (+25% max throughput) comparing to original pmacct netflow implementation. This ipt-netflow can be configured in CLI with set system flow-accounting-ipt ...

* [DHCP] -

Add static ARP support for DHCP-leased IPs with "set service dhcp-server static-arp"

Add global DHCP client options to configuration (set interfaces ethernet eth0 dhcp-options global-option xxx).

* [Firewall] -

add a contiguous option to firewall time extension "set firewall name xxx rule yyy time contiguous..."

*[System] -

coredumps will not be generated anymore unless explicitly enabled with "set system coredump enabled"

* [Ubnt-discover] -

Add CLI command to disable "ubnt-discovery" daemon, thus ER will stop responding to discovery messages on 10001 UDP port. (set service ubnt-discover-server disable). Discussed here

* [BGP] -

Add support for BGP extended community that allows setting 4-byte AS numbers (set policy route-map xxx rule 42 set extcommunity rt 1234567:3200). Discussed here.

となる。数日中にリリースすれるものと思われる。

2/02/2018

Raspberry Pi 3でRoonとSpotify Connect

おくらばせながらRaspberry Pi 3を買った。どれがいいかわからなかったので、これ。

ちなみに、RS社製(UKあるいは日本のSonyの工場製)とElement 14(中国製)があるが、まぁ、安い買い物なので、Element 14製を購入。

無線LANもついている。LANポートは利用せず。ついでに電源アダプタも買った。別に携帯のでもよかったのだが、電源がシビアなので動作保証が取れているものを選択。

 

SDカードも32GBも買ったが実際は多分8GBくらいで十分。そもそもRaspberry PIでX Windowグリグリとかおかしいだろうというのが持論。あくまでも組み込み機器コントローラーという感じ。

MACで作成するのでイメージ書き込みソフト(etcher)とDebianベースのOS(Raspbian Jessie Lite)を事前に用意しておく。

EtcherでRaspbian Jessie Liteを焼き込み、焼き込みが終わったら一度SDカードを抜き差ししておく。

ターミナルを立ち上げて以下を実行。(SSHの有効化と無線LANの設定。無線LANは、11aとかには対応していないので注意!)

touch /Volumes/boot/ssh
cat << EOF > /Volumes/boot/wpa_supplicant.conf
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
    ssid=“SSID"
    psk=“PSKのキー”
}
EOF

これが終わればSDカードをRaspberry PIに刺して起動。SSHでログインができるにはしばしお時間がかかる。SSHするホスト名やIPアドレスがわからないが、raspberrypi.localでアクセスできるはず。

以下のコマンドをターミナルで実行

ssh pi@raspberrypi.local
パスワードはraspberry

そのまま以下を実行
sudo -i
raspi-config


* 4 Localisation Optionsを選択。
* I1 Change Localを選択。
* en_GB.UTF-8 UTF-8でスペースを押して*を外す。
* en_US.UTF-8 UTF-8でスペースを押して*を付ける。
* Default local for the system environment:でen_US.UTF-8を選択。

ちなみに、日本語のロケールも選択してもいいが、組み込みで別に日本語である必要もないので、英語だけ。

以下、何気にハードウェア乱数の設定やwatchdog timerの設定もついでに行なっている。使えるものはなんでも使おう。ただそれだけ。また、途中でファームもあげている。

cat << EOF >> /etc/environment
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
EOF

cat << EOF > /etc/asound.conf
pcm.!default {
type hw
card 1
}
EOF

cat << EOF >> /etc/systemd/timesyncd.conf
NTP=jp.pool.ntp.org
FallbackNTP=time.google.com
EOF

cat << EOF >> /etc/rc.local
/opt/vc/bin/tvservice --off
EOF

cat << EOF >>/boot/config.txt
dtparam=watchdog=on
EOF

cat << EOF >> /etc/modprobe.d/bcm2835-wdt.conf
options bcm2835_wdt nowayout=1 heartbeat=10
EOF

exit


sudo raspi-config nonint do_camera 0
sudo apt update ; sudo apt -y upgrade
sudo apt-get install rng-tools watchdog l libavahi-compat-libdnssd-dev
vi /etc/watchdog.conf
以下を修正
watchdog-device = /dev/watchdog
max-load-1 = 24

cat << EOF >> /etc/watchdog.conf
watchdog-timeout = 14
EOF

vi /etc/default/watchdog
以下を修正
watchdog_module="bcm2835_wdt"
vi /lib/systemd/system/watchdog.service

以下をコメントアウト
OnFailure=wd_keepalive.service

bug fixのために以下を修正
[Install]
WantedBy=multi-user.target

sudo update-rc.d watchdog defaults
sudo systemctl enable watchdog
sudo systemctl start watchdog
sudo systemctl status watchdog

sudo rpi-update
sudo apt-get autoremove
sudo apt-get cleansudo reboot

 

再起動して、再度SSHで接続。RoonとSpotifyの設定は以下。

#Roon Bridge
curl -O http://download.roonlabs.com/builds/roonbridge-installer-linuxarmv7hf.sh
chmod +x roonbridge-installer-linuxarmv7hf.sh
sudo ./roonbridge-installer-linuxarmv7hf.sh


#Spotify connect
curl -sL https://dtcooper.github.io/raspotify/install.sh | sh
sudo vi /etc/default/raspotify
  BITRATE="320"
  OPTIONS="--device=plughw:1"
sudo systemctl restart raspotify

 

ざっと書いたが以上