pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


Bash on Windows のタイムゾーン表示がキモいので変更してみる

Bash on Windows で date コマンドを実行してみると、タイムゾーンがなんだかおかしい。

$ date
Sat Aug 26 21.00:00 DST 2017

DSTってなんやねん。日本ならJSTでしょーと思うのだが、Windows 側のタイムゾーンを引き継いではくれないようだ。

ではこいつはいったい何者なのだろうかと思って調べてみることにする。

$ md5sum /etc/localtime
ea4135d28ac2a759d0ac4cde8dcb9e55  /etc/localtime

$ find /usr/share/zoneinfo/ -type f -print0 | xargs -0 md5sum | grep ea4135d28ac2a759d0ac4cde8dcb9e55
ea4135d28ac2a759d0ac4cde8dcb9e55  /usr/share/zoneinfo/Msft/localtime

Msft って Microsoft の略称じゃんかよ。

日本なら Japan でしょ、ということで、以下のように localtime を書き換えてみる。

$ sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime

$ date
Sat Aug 26 21.05:23 JST 2017

よし、これでOKだ。

「Yahoo路線情報」のページを予め好みの検索条件を設定した状態で開きたい

以前に、こんな記事を書きました。

pslabo.hatenablog.com

このときは、Excel ベースの交通費精算用シートと連動させることを考えていました。これはこれで便利なのですが、あくまで交通費精算時にしか使えません。

しかし普段でも外出前の経路検索にYahoo路線情報を使ったりするわけですが、このときに普通にサイトにアクセスしてみるとデフォルトの検索条件が適用されてしまって不便だなあと思います。たとえば以下のような場合が不便です。

  • 空路よりも新幹線移動を優先したい場合
  • ICカード料金で検索したい場合
  • 指定席優先
  • 歩く速度を「少し急いで」に変えたい場合

こういうのを都度都度変更して検索するのは、めんどくさいです。そこでこれらの設定を予めパラメータで指定出来ないものかと思って試してみたら、うまく行ったので、メモとして残しておきます。

URL の例

前述の条件で路線検索のページを開きたい場合は、こんなカンジのURLでOKでした。

https://transit.yahoo.co.jp/?ticket=ic&type=1&expkind=2&al=0&shin=1&ex=1&hb=1&lb=1&sr=1&ws=2

こういうのをブックマークしておけばよいわけですね。さらに付け加えるなら、from に自宅付近の住所とや勤務先の住所を設定しておけば、その場所からの移動時の経路検索がカンタンになります。

その他、もうちょっとカスタマイズしたい場合は、過去記事を参考の上で調整するとよいでしょう。

Twilio で SMS を送信してみる

単なるメモ。久しぶりにやったら忘れていたのです。

なお、トライアル利用の場合はアカウントを作成した上でUSの電話番号を取得しておくことが大事。

何も考えずに電話番号取得すると日本の 050 番号が振られるけれど、この番号では SMS が送れない。

そしてトライアル利用では電話番号が1つしか取得できないので、この時点で詰む。(が、しかし別のメールアドレスでトライアルアカウントを取り直せばよいい)

Accounts にアクセスして AccountSid を取得する

https://{AccountSid}:{AuthToken}@api.twilio.com/2010-04-01/Accounts

AccountSid を含むカタチで Messages に POST する。

https://{AccountSid}:{AuthToken}@api.twilio.com/2010-04-01/Accounts/{AccountSid}/Messages

Post する内容はとりあえずこんなカンジで試してみた。

To=%2B[送信先電話番号]&Body=SMS Sending Test&From=%2B[発信元電話番号]

Content-type は application/x-www-form-urlencoded で。

パラメータって、JSONで渡せなかったっけ?

Google Public DNS64 や OpenWRT, LEDE + tanya 関連の忘備録

ちゃんとキャッチアップできてなかったのだけど、Google Public DNS64 というのができていました。 Google Public DNS64  |  Public DNS  |  Google Developers

NAT64 の Prefix を 64:ff9b::/96 とした上で、2001:4860:4860::6464 か 2001:4860:4860::64 にDNS問い合わせすると DNS64 な AAAA が返されるのですね。

そうすると Unbound が不要になるわけだ。

実際にそういうのを試している事例。 Sideceres Blog: DNS64/NAT64してみた

OpenWRT, LEDE + tagya で Google Public DNS64 を組み合わせた NAT64 を設定できるスクリプトも見つけた。 GitHub - cvmiller/nat64: Configure and Startup script for Tayga, a NAT64 daemon for OpenWRT

ここら辺を週末に試してみた上で、次の過去記事のアップデートしてみることにしよう。

pslabo.hatenablog.com

InterBaseやFirebirdのバージョンとODSの比較表

InterBase や Firebird はデータの格納先が1ファイルという個性的な形式なので、データのバックアップやコピーが非常にカンタンで便利なのですが、データファイルの形式 (ODS) のバージョンが InterBase や Firebird のバージョンによって異なるのが気になったので、自分が見やすい形式の表にしてみました。

ODSバージョン InterBase Firebird 読み書き可能なODS
ODS 8.0 InterBase 4.0
ODS 8.2 InterBase 4.1
ODS 9.0 InterBase 4.2
InterBase 4.5
InterBase 5.0
ODS 9.1 InterBase 5.1
InterBase 5.6
ODS 10.0 InterBase 6.0 Firebird 1.0
ODS 10.1 InterBase 6.5 Firebird 1.5
ODS 11.0 InterBase 7.0 Firebird 2.0
ODS 11.1 InterBase 7.1 Firebird 2.1
ODS 11.2 InterBase 7.5 Firebird 2.5
ODS 12 InterBase 2007 Firebird 3.0
ODS 13 InterBase 2009
ODS 14 InterBase 2009 (Special)
ODS 15 InterBase XE/XE3 13-15(10-12は動作するがサポート対象外)
ODS 16 InterBase XE7 13-16
ODS 17 InterBase 2017 13-17
ODS 18 InterBase 2020 13-18

内容的にはここらへんの内容を参考に書き換えただけです……

blog.kimuradb.com

owlsperspective.blogspot.jp

InterBaseの各リリースがサポートするODSバージョンの情報はここらへんからの拾い物です。 http://docs.embarcadero.com/products/interbase/IBXEUpdate4_JP/IB_XE_ReadMe_JP.html http://docs.embarcadero.com/products/interbase/IBXE3Update4_JP/IBsetup_XE3up4_ja.html http://docwiki.embarcadero.com/InterBase/XE7/en/On-disk_Structure(ODS) http://docwiki.embarcadero.com/InterBase/2017/en/On-disk_Structure(ODS) http://docwiki.embarcadero.com/InterBase/2020/en/On-disk_Structure_(ODS)

Raspberry Pi Zero WにLEDEをインストールして自分専用の携帯用WiFiアクセスポイントにする

※この記事の投稿時点ではLEDEを選択していますが、2018年にLEDEとOpenWrtはマージされたので、これ以降の選択肢はLEDEではなくOpenWrtとなります。最新のOpenWrtでも基本的な導入手順は同じなので、参考程度のお読みください。

Raspberry PI Zero W が日本国内でも発売となりましたね。とはいえ、スイッチサイエンスやKSYの販売分は品薄が続いているようで、当分は入手が難しい様子。

自分はというと、PIMORONI から Zero W + Adaptors + Pibow Zero W のセットを買ってみました。この通販サイトは在庫はそれなりに潤沢なようです。

Raspberry Pi Zero Wshop.pimoroni.com

手元に届いたのは日本の技適のマークや番号がシルク印刷されているので各種法令上の問題は多分無いと認識しています。 f:id:pslabo:20170805204721j:plain

さて、Raspberry Pi Zero W を入手した目的なのですが、「出張時に持ち運びが容易なWiFiアクセス」にしようと考えています。この構成を Raspbian で手作業でいろいろやってもよいのですけど、簡単に設定できる管理画面が欲しいので LEDE でやることにします。

なお LEDE というのは openwrt からフォークしたプロジェクトです。openwrt は Pi 3 や Zero W 向けのインストールイメージが現時点 (2017/08時点) では存在しないのですけど、LEDE は Pi 3 や Pi Zero W 向けのインストールイメージが公開されているので、Raspberry Pi で使う場合は LEDE のほうが便利なのです。

準備物

必要なもの

  • Raspberry Pi Zero W
  • HDMIアダプタ
  • USBキーボード
  • microUSB給電ケーブル
  • USB-LANアダプタ

USBキーボードとUSB-LANアダプタを除けばこういうセット品が便利ですけど、若干割高な気がしなくもないです。この金額にもうちょい足せばRaspberry Pi 3 が買えてしまいます。品薄感がもうちょっと減ればもうすこしお手頃な価格になるのかなあ、とも思うのですが、当面は厳しいんでしょうねえ。

あったほうがよいもの

  • USB-HUB

USB-HUB はあったほうがよいです。USBキーボードとUSB-LANアダプタの両方を同時に使うためには絶対に必須。

これが無い場合はコンソール操作のときにキーボードとLANを同時に使えないのでとても面倒なことになります。

今回の購入先である PIMORONI で販売されているような 3ポートUSBハブ + Ethernet アダプタがあると大変便利なのですが、そうなると全部入りな RasPi3 の方が良いかもしれませんから判断は微妙です。。。

Three Port USB Hub with Ethernet - microB connectorshop.pimoroni.com

作業手順

LEDE は Ethernet + WiFiRaspberry Pi 3 に導入するのはとてもカンタンなのですが、Pi Zero W は Ethernet を含まないのでセットアップのハードルが少々上がります。そこで、作業の手間を省くために uci コマンドを活用することにします。

LEDEは通常はWebの管理画面で設定を行いますが、USB-HUBが無い場合や手持ちのUSB-LANアダプタが認識されない場合はシェル上で uci コマンドを用いて WiFi ルータの機能を有効化するのが一番カンタンなのですよ。

サマリ

  • Raspberry Pi Zero W 向けの LEDE イメージの入手
  • 使用するUSB-LANアダプタ用の追加ドライバの入手と導入
  • uci コマンドによる設定の投入
  • 動作確認

Raspberry Pi Zero W 向けの LEDE イメージの入手

下記のページによると、Pi Zero W 向けの LEDE イメージは snapshot のものがある、ということになっています。

https://lede-project.org/toh/hwdata/raspberrypifoundation/raspberrypifoundation_raspberry_pi_zero_w

しかし実際に探してみると、snapshotの他にも17.01.4 ベースのイメージが下記の場所にありました。(2017年12月時点)

https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/

このバージョンは KRACKs 対応パッチが当たっているので安心して使えます。

ここから lede-17.01.4-brcm2708-bcm2708-rpi-ext4-sdcard.img.gz というファイルをダウンロードして microSDHC に焼いておきます。

焼く手順は通常どおりに dd ですから、この説明は省略します。

使用するUSB-LANアダプタ用の追加ドライバの入手と導入

LEDE のイメージには、私が持っているLANアダプタのドライバは含まれていませんでした。そこで、USB-LAN アダプタの動作に必要なドライバを予め microSDHC に入れておくことにします。そうすれば、LEDE の起動後にコンソールからの操作でUSB-LAN向けのドライバを導入可能になります。

LEDE 17.01.4 向けの Pi Zero W で利用できるドライバはここからダウンロードできます。

Index of /releases/17.01.4/targets/brcm2708/bcm2708/packages/

USB-LAN アダプタを扱うための必須パッケージはここらへんの6つ。

https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-libphy_4.4.92-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-mii_4.4.92-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-usb-net_4.4.92-1_arm_arm1176jzf-s_vfp.ipk
http://downloads.lede-project.org/releases/17.01.4/packages/arm_arm1176jzf-s_vfp/base/usbutils_007-7_arm_arm1176jzf-s_vfp.ipk
http://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/librt_1.1.16-1_arm_arm1176jzf-s_vfp.ipk
http://downloads.lede-project.org/releases/17.01.4/packages/arm_arm1176jzf-s_vfp/base/libusb-1.0_1.0.21-1_arm_arm1176jzf-s_vfp.ipk

さらにUSB-LANアダプタ固有のパッケージをインストールします。PIMORONI の3ポートUSBハブ+LANアダプタの場合はRTL8152のドライバを用意します。

https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-usb-net-rtl8152_4.4.92-1_arm_arm1176jzf-s_vfp.ipk

また、自分の手元にあったUSB-LANアダプタ2種類のドライバは下記の通りでしたので、自分の場合はこれも入れておきます。

https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-usb-net-asix-ax88179_4.4.92-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2708/packages/kmod-usb-net-pegasus_4.4.92-1_arm_arm1176jzf-s_vfp.ipk

なお、自分が所有しているLANアダプタのドライバがよくわからない、という方は、最低限必要な6種類をインストールの後に lsusb コマンドで認識されているデバイスを表示させてみると良いでしょう。以下は PIMORONI の3ポートUSBに Microsoftタッチパッド付きワイヤレスキーボードを接続している状態です。

root@LEDE:~# lsusb
Bus 001 Device 005: ID 0bda:8152 Realtek Semiconductor Corp. RTL8152 Fast Ethernet Adapter
Bus 001 Device 003: ID 045e:0801 Microsoft Corp. 
Bus 001 Device 002: ID 1a40:0101 Terminus Technology Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

この出力から、PIMONORI のデバイスRealtek RTL8152 を使っていることがわかります。この情報で Google 検索するなどして、適切なドライバを探します。

必要なファイルがそろったら LEDE を焼いたあとの microSDHC に転送しておきます。このファイルは LEDE では /boot 上にあります。

なお、microSDHC には、本記事の後半に記載の「uci を使った設定投入用のスクリプト」も入れておいてください。これをこの時点で入れておくと、いろんな意味で手間が省けるはずです。

さて、LEDE を Pi Zero W で起動したら、上記のファイルをインストールします。ファイルは /boot にあるはずです。これを以下のようにインストールします。

cd /boot
opkg install *.ipk

インストールすると、こんなメッセージが出るかもしれませんが、これは無視して構いません。他のエラーの場合はパッケージが足りないために出ているはずですから不足するパッケージを追加してインストールしてください。

Collected errors:
 * pkg_run_script: package "kmod-usb-net" postinst script returned status 255.
 * opkg_configure: kmod-usb-net.postinst returned 255.

このエラーメッセージが出ないようにするには、下記記事に記載の対処を行います。 pslabo.hatenablog.com

インストールできたら LEDE を reboot します。この reboot は uci コマンド実行の前提となる環境を作るために必須です。

uci コマンドによる設定の投入

LEDE はブラウザからの管理画面で設定できるのですが、Pi Zero W をアクセスポイント化するための設定を行うのは意外にめんどくさいので、ここはサクッとコマンドで設定投入するのがよいだろうと思います。

手元の環境でGUIからの設定を行う前と後で設定内容が変わった箇所を抽出してみると、こんな感じになっておりました。

#!/bin/sh

uci set dhcp.lan.ra_management='1'
uci delete dropbear.@dropbear[0].RootPasswordAuth='on'
uci set network.wan.ifname='eth0'
uci set network.wan.proto='dhcp'
uci set network.wan=interface
uci delete network.lan.ifname='wlan0'
uci set network.lan._orig_bridge='true'
uci set network.lan._orig_ifname='wlan0 wlan0'
uci set network.lan.ipaddr='192.168.4.1'
uci set system.@system[0].conloglevel='8'
uci set system.@system[0].cronloglevel='8'
uci set system.@system[0].log_proto='udp'
uci set wireless.default_radio0.encryption='psk2'
uci delete wireless.radio0.disabled='1'
uci set wireless.radio0.country='JP'
uci set wireless.default_radio0.ssid='[設定するSSID名]'
uci set wireless.default_radio0.key='[WPA-PSKのパスフレーズ]'

これを microSDHC の /boot にスクリプトとして保存しておき、LEDE のコンソールから実行すれば一通りの設定が完了します。SSID名やパスフレーズは適切に設定しておいてください。

またこの設定では LAN 側 (WiFi側) のIPアドレスが 192.168.4.1 になっています。これも適切に変更しておいてください。

実行した時にエラーメッセージが2つ出る場合があるかもしれませんが、特に問題ありません。(修正の手間に対して得るものがないので放置しています。。。)

設定したら uci commit して reboot してみてください。

動作確認

USB-LANアダプタを接続した状態で、設定したSSIDに接続してインターネット通信できていれば基本的にはOKです。

ただしこの状態は LEDE の管理画面のパスワード設定を行っていない状態ですので、パスワードはかならず設定してください。

また、WAN側には管理画面の口が開かないように dropbear の設定を lan に限定しておきましょう。

その他の設定調整

管理画面を日本語化したい場合は luci-i18n-base-ja を追加した上で System の設定から Language を日本語に変更します。

GoogeDrive で特定のファイルを期間限定公開する方法を考える

GoogleDriveで何かのファイルを共有するときに、期間限定で共有したい場合があると思うんです。

しかしGoogleDriveの標準機能では共有期間を設定する方法が無かったと思います。

そこで、Googel Apps Script で出来ないかと思ってしらべてみました。

そしたら File.setSharing() という関数を見つけました。

Class File  |  Apps Script  |  Google Developers

これをこんなふうに使えば、特定のファイルの共有設定を off にできます。

function myFunction() {
  var GoogleDriveFileID="[ファイルのID]";
  var GoogleDriveFile=DriveApp.getFileById(GoogleDriveFileID);
  
  GoogleDriveFile.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.NONE); 
}

あとはこれを共有期間終了後に実行してやればよいわけです。

ただし個別のファイル毎にこういう関数を作るのは無駄な作業となりますので、Google Spreadsheet でファイル一覧と共有期限を記入した台帳を作成し、それをトリガーで1日1回チェックして期限が過ぎているものを共有停止にするように実装すればよさげです。

ここらへんの実装は別の機会に。