Windows UpdateによってSIMの通信規制された&対策をとった

最近、数年ぶりにWindows PCを買いました。モバイルノートなので、どれくらいバッテリが持つものなのかを試すために、外出先でテザリングによって通信しながらバッテリが切れるまで作業しました。すると、ある時点から通信が極端に遅くなってしまいました。なぜかと思ってスマホの通信量を確認すると、案の定、一日あたりの通信規制にひっかかる通信量を超えていました。あーあ。

きっとWindows Updateの自動ダウンロードの仕業だろうと思って、Windows Updateの設定から自動ダウンロードを無効化しようとするも、そういう設定はありませんでした。但し書きを見たところ、

利用可能な更新プログラムが自動的にダウンロードされ、インストールされます。従量制課金接続(料金が発生する場合があります)では実行されません。

と書いてありましたが、どうやって従量制課金接続かどうかを判定しているのかは不明でした。

調べた結果、wifiの設定の中でアクセスポイントごとに従量制課金接続かどうかを設定できるようです。具体的には次の設定項目です。

設定 → ネットワークとインターネット → wifi → <AP名> → 従量課金制接続として設定する

これを設定したら通信量の急激な増加が収まったので、おそらくWindows Updateが原因という仮説も正しかったのでしょう。

さくらVPSから無期限無料で使えるGCEインスタンスへ乗り換えた

私は、さくらVPS(1GBプラン)を数年間使ってきました。昔はこのサーバを多種多様な用途に使っていたのですが、最近では一部を除くほとんどの機能は無料で使える、他者が提供するwebサービス(github, qiita, はてなブログなど)に移行してしまいました。

現在の用途は次の通りです。

  • 公開webサイト(ほぼ静的コンテンツ)の提供。アクセス数は一日に数百程度と、非常に少ない
  • 自宅の計算能力の高いマシンのインターネット側IPアドレス(非固定)の記録: インターネットから自宅マシンに接続するために必要。
  • ホームティレクトリ以外のシステム領域の変更も含めた種々の実験。動作確認程度なのでCPU性能は必要ない

用途がこれだけになったことによって、元々それほど性能が高くない上記VPSであっても、要求スペックに対する価格が若干上回ってしまっていました。そのため、次のような要求仕様のマシンをしばらく探していました。

  • 1サーバを専有できる
  • 静的IPアドレス
  • CPU性能はほとんど必要ない
  • メモリはUbuntuの要求仕様の最低である512MBもあれば十分
  • ストレージは20GB程度あればOK。HDDかSSDかは問わない
  • 現在のVPS(年間一万円強)より安価

その最中、無期限無償で使えるGCEインスタンスの存在を知りました。このインスタンスについては過去に以下のエントリで触れました。

satoru-takeuchi.hatenablog.com

このインスタンスはCPUとメモリのスペックが非常に低いのですが*1、ここ最近色々と評価した結果、私の用途では一応要件を満たすことを確認しました。VMインスタンス以外にも通信料と固定IPアドレスに関して課金要素がありますが、通信料については枠内に収まりそうですし、静的IPアドレスについては、マシンの電源を落とさなければ課金されない、かつ、落とすつもりはないので問題ありません。

本日移行したところ、移行そのものはあっさり終わって(待ち時間を含めて4,5時間)、いまのところ問題なく動いています。元々は、「今のところより安いものがあればいいな」程度に思っていましたが、まさか無料になってしまうとは思いませんでした。これだけのものが無料で使えるというのは凄いと共に、恐ろしいものです。今後はサービス規約の変更が無いかを注意深く観察しながら、しばらく使ってみようと思います。

*1:linuxなどの大きなプロジェクトのgitリポジトリの操作やビルドなどは非常に辛い…というか無理です

sshを使ってリモートマシンでコマンドを叩く際の注意点

知ってる人には当たり前なのかもしれないですが、自分用のメモです。

先に結論を書くと次の通り。

  • sshでリモートマシンにログインするのではなく<ssh command>によってコマンドを叩く場合には、ttyが割り当てられない。sshに-tオプションを付与すると、端末を無理矢理割り当てられる
  • cronなどのttyが割り当てられていない環境からは-tオプションだけでは不十分で、-ttオプションが必要

事の経緯は、固定IPアドレスが無い自宅マシン(回線はフレッツ光)にインターネットからアクセスしたいというものでした。DDNSを使うんではなく、固定IPを持っている自前VPSと"who am i"を使えば、簡単になんとかできるだろ、と思ったのが運の尽き。どハマリしました。

最初に思い描いたサービスは次の通りです。

  • 自宅マシンからVPSsshで定期的に接続して、IPアドレスを所定のファイルに書き込む。ssh接続時はパスフレーズ無しの鍵を使う。接続時に使うユーザは、上記作業以外をする以外の権限を持たない特別なものを使う
  • 自宅マシンのIPアドレスは、"who am i"の出力(例: “sat pts/8 2017-04-11 22:19 (xxx.xxx.xxx.xxx)”)の第5フィールドを整形する
  • インターネットから自宅マシンに接続する前に、VPSに自宅マシンのIPアドレスを問い合わせる。もちろんIPアドレスの問い合わせとsshによる接続は1つにまとめてスクリプト化する

うまくいかなかったのは自宅マシンのIPアドレスを取得するところです。取得したIPアドレスを書き込んでいるはずのファイルが空になっていました。問題切り分けのために、インターネット上からsshで自宅マシンに一旦ログインして、そこからIPアドレス取得コマンドを実行するとうまくいきました。

色々とぐぐった結果、sshからログインでなく直接コマンドを叩くときは、ttyが割り当てられないことがわかりました。ttyが無いとwhoコマンドの出力の元ネタであるutmpファイルにログが残りませんので、IPアドレス取得コマンド内のsshの出力も空になった、それに伴ってコマンド全体の出力も空になってしまったというわけです。回避策は、以下の通りsshに-tオプションを付けることです。

man(1) sshより抜粋:

-t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services.

まずはインターネット上からcrontabに書いたコマンドを実行すると、正しくIPアドレスが得られました。これで解決したと思ってcrontab上のsshに-tオプションを付与したものの、またしてもIPアドレスを書き込んでいるはずのファイルは空でした。

man(1) sshを再度読んでみると、さきほど抜粋した-tオプションの説明には続きがありました。

-t Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

cronなどのttyを持たないプロセス(daemon)からsshを実行する場合は、-tオプションだけでは不十分で、-ttオプションが必要と書いてあります。crontab上のsshに-ttオプションを付与したところ、無事問題は解決できました。最初からmanをちゃんと読んでおけばもう少し解決が楽でした。反省。

追記。優しい人に、IPアドレスを知る目的であれば$SSH_CLIENTないし$SSH_CONNECTIONが使えるということを教えていただきました。なんてこった

ノートPCを買い替えました

今使っているMacBook Air (13-inch, Mid 2012)のバッテリが劣化してきたので、新しいマシンを買いました。

HP EliteBook Folio G1/CT Notebook PC

あまりカスタマイズはしていませんが、ストレージだけは256GBに増量しました。SSDSATA接続のものにするかNVMe接続のものにするかで少し悩んだのですが、後述の通り性能よりも駆動時間重視だったので、消費電力がSATAのものに比べて高くなると考えられるNVMe接続のものは避けました。ストレージをわざわざ増量したのは、増量することによって税引き価格が10万円を超えるのと、税引き価格が10万円を超えると7%offになるクーポンがあったからです(別サイト)。結果、5000円くらいの追加でSSDを128GB追加できました。まんまと売り手の思惑にハマってます。

もともと探していたマシンの要求仕様は次の通りです。一言で言えば性能はどうでもよくて、高性能なマシンに接続して繋ぐシンクラっぽい使い方を想定していました。

  • ディスプレイの解像度はfull HDなら嬉しいけど1280x800あれば十分
  • CPU性能にはこだわらない。Chromessh(mosh)クライアントがさくさく使えればそれでいい。前者についてはタブはあんまり開かないし、重い動画を見たりはしない
  • ストレージ容量は購入後のアップデートに支障が無い程度(最悪32GBでもアリ?)でよい。その他のデータは上述の理由により手元に置いておかなくてもよい
  • サイズは10インチ以上、13インチ以下
  • 重量は1.2kg以下、できれば1kgを切って欲しい
  • キーボードはプログラミングに支障を来さない程度に。変な配置になっていなければ各キーのサイズは若干小さくてもよい
  • バッテリ駆動時間は最低8時間、できれば10時間以上
  • OSにこだわりは無い
  • 価格は5万円前後が嬉しい。出しても10万円くらいまで

これらを考慮した結果、次のような候補が挙がっていました

  1. ASUS TransBook Mini R106HA-GR053T
  2. ASUS Vivobook E200HA
  3. Lenovo ideapad MIIX 310

これらのうち、とくにaかcがいいかなと思っていました。バッテリ寿命はどちらも申し分なく、さらにaについてはとにかく軽いこと、cについては価格とディスプレイ解像度が高いことが魅力でした。ただしcについては、cの実機を触ったところ、キー配置が微妙であり、かつ、比較的近い使い方をしていると考えられる(プログラミング)実際のユーザのかたからも同じことを伺ったので、見送りました。

「さあaで決まりか」というときに、上述のideapadのユーザのかたに、上述のHPのマシンを教えていただきました(余談ですが、なぜかこれらの2つのマシン以外にも複数のマシンを同時に持ち歩いておられるとか…)。このマシンは価格帯はa, b, cよりもだいぶ上ですが、同一価格帯の他のマシンに比べてのコストパフォーマンスがぶっちぎりだったので、一目惚れで買ってしまいました。同じかたから、実機を触らなければ本来わからないキーボード配置についても不満無しという感想を得られたことも購入を後押ししました。

結局、性能はどうでいいというようなことを言いながら、そこそこの性能のものを買ってしまいましたが、「たまの散財はいいものだ」と自分を納得させることにしました。

一時的に使ってたGCEインスタンスを使い終えたので削除した

数日前に下記エントリに書いたGCEインスタンスを、本日旅から戻ったので削除しました。

satoru-takeuchi.hatenablog.com

サルベージが必要なデータは帰宅時点では既に無かったので、色々考えずに速攻で消せました。VMを作ったときからのVMのローカルストレージの増分は次の通り。

  • カーネルビルド用にインストールしたいくつかのパッケージ => aptで持ってきただけのものだから不要
  • linuxカーネルのソース => kernel.orgのgit repositoryから持ってきただけ。旅行中(残念ながら)カーネルパッチは書かなかったから自前データは無し
  • githubから持ってきたいくつかのリポジトリ => 変更分はすべてgithubにpush済み

コストの面では、作業するときだけ起動させて運用してたので、旅の途中の一週間くらいの間で、総費用は800円未満。こういう一時的に作業環境が欲しいというときには、すぐに楽々使えて、かつお安く済むので、クラウドは便利ですね。ありがとうGCE(ステマ

linuxカーネル開発用に一時的にGCE使い始めた

現在自宅を離れて一週間ほどの旅の途中です。こういうとき、普段は自宅のデスクトップマシンにインターネットからsshでアクセスできるようにしておいてリモートで作業するのですが、今回は設定を間違えたせいで、それができません。

旅の途中でやりたい作業は主にlinuxカーネルのソース調査、パッチ書き、それにビルドです。幸いにも必要なリソース(linuxカーネルのgitリポジトリ)は自宅マシンだけでなく、ほとんどはインターネット上に置いてますので、GCEを使って作業することにしました。自宅のマシンに比較的近いn1-highcpu-4インスタンスを、ちょっとボタンをポチポチするだけで作って、開発、使わないときは課金されないように電源断。常時起動させておくとそれなりのお値段がしますが、これだとそれほどコストがかかりません。旅が終われば捨てればいいです。クラウドの便利な使い方の1つですね。ついでに言うと今は一年間のFree Trial Periodなので、使用料金が$300に達するまで無料。最高。

温泉施設の鍵の使い方

行きつけの温泉施設の鍵の使い方について思うところがあります。この施設では、施設内で飲み物などを買うときに現金のかわりに使える鍵を入場時受け取り、退場時に精算します。入場時に履いている靴は、この鍵に紐付いた下駄箱に入れます。脱衣所で衣類などを入れるロッカーはフリーアドレスになっており、ロッカーに備え付けの、上記とは別の鍵を使って施錠します。問題があるのはここからです。

退場時に下駄箱から靴を取り出した後に、鍵が下駄箱に紐付いていると誤解して、鍵をその場に置いたままにして退場しそうになることが過去に何度もありました*1。下駄箱は入場前の場所に置いておき、入場時に渡される鍵はロッカーに紐付いているほうが、現金のかわりに使える大事な鍵を危険にさらすリスクが少なくなるのでよいと思いました。以上、負け惜しみでした。

*1:実際は退場時に店員に呼び止められるので、そのまま退場して帰宅したことは無いですが