プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

古い QNAP の HDD を流用して別の QNAP の設定でつまづきました

既存の QNAP TS-251+ に追加して、 TS-231P を追加することにしました。

というのも、この秋は、ルータや作業PCのSSDが壊れたり、壊れるまで行きませんでしたが昔から使ってる Netgear の NAS (Ready Nas Duo v2) が 変なタイミングでシャットダウンしてたりと、いろいろとトラブルが多かったため、 そろそろバックアップ体制をちゃんとしとかないとやばいんじゃないかな?と直感的に思ったためです。

実は、iSCSI ターゲットを Netgear Ready Nas Ultra で運用しているのですが、これのバックアップがいまいちです。というよりちゃんと取れていないのが現状です。

そこで、上記で述べたように QNAP TS-231P を導入して、これに iSCSI ターゲットを乗せ換え、 バックアップは、2台のQNAP間でスナップショットを撮るようにしようと思います。

ということで、TS-231P 自体のセットアップ作業を行ったのですが、なぜかここで躓いたので、メモに残しておきます。

設定

基本的には、本体に付属している『QNAP 簡単セットアップガイド』の通り作業すればよいだけです。 ですが、このマニュアルと若干違っていたところがあったので、その点だけ書いておきます。

ファームウェアのインストール順

セットアップガイドに従い、HDDをインストールする前に、本体の電源をオンにして、ブラウザでアクセスします。

ちなみに、作業PCに接続用のツール(NASのIPアドレスを表示してくれるやつ)をインストールしたくないので、ルータのDHCPの割り当て情報から、QNAPのNASのIPアドレスを割り出して、これを使ってアクセスしました。

セットアップガイドによると、ブラウザでアクセスした際に、『ハードドライブが見つかりません』(この時点ではHDDをまだセットアップしていないので当然ですね)と表示されるはずなんですが、なぜか、

f:id:junichim:20181122230609p:plain

とファームウェアのインストール画面が先に表示されました。

細かい手順は覚えてないのですが、ファームウェアのインストール後、

f:id:junichim:20181122230721p:plain

のように、無事にハードドライブをセットアップするように指示されました。

HDDのセットアップ

さて、次に、HDDをセットアップしたのですが、この時、別の QNAPの NAS (TS-251+) から取り出した古いHDDを、中身の消去をせずにそのままセットアップしてしまいました。 すると、昔のNASに設定していた情報でセットアップされたようで、よくわからない状態になってしまいました。というのも、本来表示されるはずの

f:id:junichim:20181122232818p:plain

のようなセットアップ開始画面が表示されなかったり、セットアップしていなのでパスワードを設定していないはずなのにパスワードの入力を求められて接続できないとか、いろいろでした。

最初は理由もよくわからなかったので、電源ボタンで強制的にシャットダウンしたりしているうちに、新旧のNASでホスト名が重複していることに気づきました。 となると、未消去で流用したHDDが悪さをしていそうだなとなったので、いったんHDDをPCにつないでパーティションをすべて削除し、本体のほうはリセットボタン長押しで工場出荷時の状態に戻す、とやってから、 再度、中身を消去したHDDを使っってセットアップしてみると、今度は問題なくセットアップできました。

Netgear の NAS ではこういうケースはなかったので、注意していませんでしたね。 HDD流用する際にはお気を付けください。

第19回伊勢IT交流会 with GCPUG Mie を開催しました

2018年11月10日に、第19回伊勢IT交流会 with GCPUG Mie と題して、伊勢IT交流会を開催しました。 ご参加いただいた皆様ありがとうございました。 今回はいつもの伊勢IT交流会とは少し違い、 GCPUG Mie さんとの共催という形で行いました。

GCPUG はご存知の方も多いと思いますが、 Google Cloud Platform Users Group の略です。 その 三重県のユーザーグループである GCPUG Mie さんからお声がけいただき、共催となりました。

内容的には、大きく分けて前半が GCPUG のセッション、後半が伊勢IT交流会のセッションとし、 最後に(アルコール抜きでの)交流会を行う、というものでした。

GCPUG のセッション

最初に GCPUG Mie 代表の方から GCP および GCPUG についての説明がありました。

f:id:junichim:20181110234404j:plain

続いて Google の方から GCP のより詳しい説明と

f:id:junichim:20181110234432j:plain

実際にGCPを触ってみるというハンズオン。

f:id:junichim:20181110234502j:plain

続いて、クラウドエース株式会社の方から中小企業でのGCPの事例紹介。

f:id:junichim:20181110234548j:plain

このあと、講師の方々への質問コーナーや GCPUG Mie の運営募集などの話もありました。

伊勢IT交流会のセッション

休憩後はLTタイムです。

まずは masaaki_nakamura さんから 『Max1000』ということでFPGAの話をしていただきました。

f:id:junichim:20181110234942j:plain

続いて、私から『Twilio で FAX 試した』というタイトルで話しました。

www.slideshare.net

次は、emotion さんから WMI に関する話。

f:id:junichim:20181110235123j:plain

最後は moyashi さんから『リモートワークで働いてみた(みてる)』という話でした。

f:id:junichim:20181110235204j:plain

と思いきや、飛び入りで、このイベントのネットワークをご提供いただいているNSC運営事務局さんからネットワーク設営にまつわる話をいただきました。

f:id:junichim:20181110235354j:plain

交流会&懇親会

両セッションの終了後は、会場にてアルコール抜きで交流会です。

f:id:junichim:20181110235455j:plain

このあと、居酒屋で懇親会もやりました。

感想

今回は、 GCPUG Mie さんと共催ということで、かなり盛沢山の内容になりました。 また、参加者数も講師の方含めて24名となり、過去最大の参加者数でした。

講師としていらっしゃった皆様、イベント開催にご協力いただいた皆様、ご参加いただいた皆様、ありがとうございました。

次回は予定ではいつもの伊勢IT交流会になりはずです。時期的には来年の5~6月ごろを予定しておりますので、また遊びに来てください。

本日はお疲れ様でした。

Twilio 試した(3/3):FAX 受信と通知を試しました

Twilio 試用のその3になります。

Twilio 試した(1/3):電話(音声通話)機能を使ってみました - プログラマーのメモ書き

Twilio 試した(2/3):FAX 送信を試しました - プログラマーのメモ書き

Twilio 試した(3/3):FAX 受信と通知を試しました - プログラマーのメモ書き

さて、最後は FAX の受信と通知を試してみたいと思います。

FAX 受信

受信するだけなら、下記のように定義した TwiML を作成し、

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Receive mediaType="application/pdf" storeMedia="true">
  </Receive>
</Response>

電話番号の設定画面で、下記のようにFAX受信時に、上記のTwiMLを呼び出すように設定します。

f:id:junichim:20181109115719p:plain

受信テスト

上記の設定後、自宅の電話器からFAXをTwilioの電話番号あてに送ります。するとなんの変化もありません。 まあ、電話機側はFAX送信に失敗するとエラーを表示するので、送れてはいるんだと思います。

受け取ったFAXはどうやって確認するのだろうか?

と思っていたら、FAXに関しては、電話の録音などと違い、REST API 経由でしか確認ができないそうです(Twilio のサポートさんに教えていただきました)。

とりあえずブラウザで受信FAX一覧リストを取得するURLをたたきます。

jp.twilio.com

ユーザー名とアカウント名の入力が求められるので、AccountSid と AuthToken を入力します(コントロールパネルのダッシュボードで確認できます)。 詳しくはここに載ってます。

するとJSON形式の文字列がずらずらと取得されます。こんな感じのイメージです。

{
     "meta":{
         "page":0
        ,"page_size":50
        ,"first_page_url":"https://fax.twilio.com/v1/Faxes?PageSize=50&Page=0"
        ,"previous_page_url":null
        ,"url":"https://fax.twilio.com/v1/Faxes?PageSize=50&Page=0"
        ,"next_page_url":null
        ,"key":"faxes"
    }
    ,"faxes":[
        {
             "media_sid":"MExxxxxxxxxxxxxxxx"
            ,"status":"received"
            ,"direction":"inbound"
            ,"from":"+81xxxxxxxxxx"
            ,"date_updated":"2018-11-08T06:43:25Z"
            ,"price":"-0.6"
            ,"account_sid":"アカウントSID"
            ,"to":"+81xxxxxxxxxxx"
            ,"date_created":"2018-11-08T06:43:01Z"
            ,"url":"https://fax.twilio.com/v1/Faxes/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            ,"sid":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            ,"duration":23
            ,"num_pages":1
            ,"quality":"standard"
            ,"price_unit":"JPY"
            ,"api_version":"v1"
            ,"media_url":"https://media.twiliocdn.com/fax/xxxxxxxxxxxx"
            ,"links":{
                 "media":"https://fax.twilio.com/v1/Faxes/FXxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Media"
            }
        }
        ,{
             "media_sid":"MEyyyyyyyyyyyyyyyyyyyyyyyy"
            ,"status":"received"
            ,"direction":"inbound"

この一覧には、送信、受信の両方の情報が載っています。受信したFAXは、status が received 、送信したFAXは、delivered になります。 確かに受信できているようです。

実際の受信データは media_url に記載されているリンクを表示すると、無事に pdfが表示され、送ったFAXであることがわかりました (今回の場合 TwiML で受信データ種類を pdf と指定しています。Tiffも選べるようです)。

FAX 受信と通知

あと、もう一息。

ここまで来たら、受信があったら、通知を出せばOKです。通知にもいろいろありますが、ここはまずメールに出します。 ついでに、通知だけでなく受け取ったFAXそのものも添付ファイルで送れるとなおうれしいです。

今回は、 TwiML でFAXを受け取り、actionで受け取り後に呼び出すURLを指定します。そのURLは、TwilioのFunctions(サーバーレスな関数実行機能。AWSのlambda みたいなもの)を定義して、そいつで処理します。

Functions

TwiML がFAX受信後に呼び出す関数を定義します。

Runtime の Functions を選択します。

f:id:junichim:20181109163435p:plain

大きなプラスボタンを押すとFunctionsの定義画面が表示されます。

f:id:junichim:20181109163558p:plain

とりあえず、 Blank を選択して、Create ボタンを押します。

f:id:junichim:20181109163723p:plain

こんな感じの定義画面が出てきます。

FUNCTION NAME に関数名を入力します。 ここでは、 faxReceive としました。

下部のCODEの部分にコード(node.js)を書いていきます。 今回作ったのはこんな感じです(長くなるので、Gist に置いときます)。

Twilio FAX 受信時にメールを送信するサンプル · GitHub

(参考)

下記の記事を参考に作りました。助かりました。ありがとうございます。

qiita.com

ちなみに、上記のURL先の参考にしたサイトと違うところは、今回作ったほうは Promise をかましているところです。 (参考サイトのは、メール送信のあと、 slack への通知も行っているので大丈夫なんだと思います。)

Functions の設定

上記はnode.jsのモジュール nodemailer を使っているので、それを利用可能にする必要があります。 これは、コンソールの Runtime から Functions へ進み、設定を選択すると

f:id:junichim:20181109174055p:plain

のように、画面下部に dependencies というところが出てきます。 ここで、プラスボタンを押して、ライブラリの名前とバージョン番号を入力すればOKです。

TwiML

TwiML は上記のものを少し変えて、Functions を呼び出すようにします。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Receive mediaType="application/pdf" storeMedia="true"
      action="https://xxxxxxxxxxxxxxxxxx.twil.io/faxReceived">
  </Receive>
</Response>

faxReceived というのが作ったFunctionsの名前です。

試す

電話番号設定は上記のFAX受信のままであれば、変更する必要ありません。

これでFAXを送ってみます。 無事に送信後、メーラーでメールが受信できているかみると、

f:id:junichim:20181109183106p:plain

おぉ。無事に届いていますね。

注意点

Twilio 側の問題ではないのですが、今回使ったメールサーバーがさくらインターネットのものでした。それに関して送信できないのが2点ほどあったので、書いておきます。

エラーその1

Twilio でメール送信を設定しても、何度かエラーが出ます。Twilio のログを見ると

error: Error: Hostname/IP doesn't match certificate's altnames: "Host: SMTpサーバー. is not in the cert's altnames: DNS:*.sakura.ne.jp, DNS:*.180r.com, DNS:*.2-d.jp, DNS:*.achoo.jp, DNS:*.amaretto.jp, DNS:*.bona.jp, DNS:*.chew.jp, DNS:*.crap.jp, DNS:*.daynight.jp, DNS:*.deko8.jp, DNS:*.dojin.com, DNS:*.eek.jp, DNS:*.flop.jp, DNS:*.from.tv, DNS:*.fubuki.info, DNS:*.gokujou.biz, DNS:*.grats.jp, DNS:*.grrr.jp, DNS:*.halfmoon.jp, DNS:*.ivory.ne.jp, DNS:*.jeez.jp, DNS:*.jpn.org, DNS:*.kir...

メールサーバーのドメイン名とサーバー証明書のドメイン名が一致しないのが原因のようです。

回避するには、

tls: {
                rejectUnauthorized: false
            }

とすれば、とりあえずなんとかなります。でも望ましい状態ではないので、テスト用ですね。

(参考)

paulownia.hatenablog.com

エラーその2

上記の対策後もまだエラーが出ます。 Twilio のログをみるとこんな感じです。

error: Error: Mail command failed: 550 5.7.1 <username@domainname>... Command rejected

調べてみると、さくらインターネットのデフォルトの設定では、『国外IPアドレスフィルタ』というのが有効になっており、海外のサーバーからのSMTP送信をブロックします。

help.sakura.ad.jp

このため、最初はなかなかメールがこないという状況になってしまいました。 とりあえずテストの間だけ、この設定を無効にしたらちゃんと届きました。

メール周りはいろいろありますね。メールじゃなくてslackのほうがいいかもしれないなと思い始めてます。

まとめ

Twilio を試すというのをいろいろとやってみました。 留守電、FAX送受信とも問題なくできそうです。

FAXの料金表には、送受信ページ数に関する記載しかないですが、実際には通信量もかかってます。 通信費が、送信で1分5.4円(受信は1分0.6円)なので、FAX送信数が多いと当初の目論見は成立しないかもしれません。

まあ、FAXで送るのはそれほど多くないので大丈夫かな?とタカくくってます。

なんにしても、いろいろと便利なことができそうで楽しみです。