停電でバックアップが不安なのでlsyncdとNILFS2でバックアップ

先日の台風16号で09/19 23:00頃から09/22 12:45頃まで停電していました……. とりあえずサーバはシャットダウンしてThinkPad X200はバッテリが4本,X220は2本,モバイルバッテリは10000mA x3という感じで停電開始. とりあえず普通に使っていてもX200だけでも3営業日以上は耐えられるはずです.

でも一応NotePCは必須デバイス以外は取り外して輝度を下げてpowertopで省電力モードに.

#powertopについては以下の辺りを参考に.

これで1台ずつ使っていくことに.しかし,不安点がデータのバックアップ. 何時もはワークディレクトリはownCloudで自動バックアップ&デイリーでファイルサーバへのバックアップがされています.しかし停電時はサーバが動いてない&電池の切れたPCから別のPCに作業内容が移行できない.ということでlsyncdを使ってデータをUSBメモリにコピー&ファイルシステムはNILFS2にしてスナップショットも取得できるようにしました.

まずはUSBメモリの用意.普通にNILFS2で作ります.
/dev/sdzのパーティション情報を削除して全領域1パーティションで作成し,NILFS2で初期化して/mntにマウントしてユーザ,グループを自分のものにしています.

$ sudo wipefs -a /dev/sdz
$ sudo fdisk /dev/sdz
Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1):
First sector (51-7821311, default 51):
Last sector, +sectors or +size{K,M,G,T,P} (51-7821311, default 7821311):

Created a new partition 1 of type 'Linux' and of size 3.7 GiB.

Command (m for help): w
$ sudo mkfs.nilfs2 /dev/sdz1
$ sudo mount /dev/sdz1 /mnt
$ sudo chown `id -u`.`id -g` /mnt
$ sudo chmod 700 /mnt

続いてlsyncdを実行してデータを同期します.lsyncdはinotifyをトリガーに任意のコマンドを実行したり出来ます.一般的にはrsyncでファイルの同期に使います.今回はアドホックにコマンドとして動かしました.同期元同期先はrsyncと同じ書き方だと思うので前もってrsync -avn from toみたいな感じで動作確認しておくと安心です.

$ lsyncd -log all -nodaemon -rsync /home/mk/ownCloud /mnt/ownCloud

これでlsyncdのターゲット以下のファイル,ディレクトリは自動的にUSBメモリにコピーされ,USBメモリの中では自動的にチェックポイントが作成される状態です. 作業の区切りのタイミングで明示的にスナップショットを取るようにしておくと更に安心です.(チェックポイント,スナップショットには何時でもその状態に巻き戻せる.但しチェックポイントは古いものから順に自動的に削除される.スナップショットは自動削除されない)

マシンを切り替えるときにはlsyncdを止めて念の為rsyncをdry runして同期状況を確認しておいて,新しいマシンでUSBメモリからSSDにrsyncしてlsyncdを動かすという感じでした.

関東在住時の計画停電のときは計画的だし時間もずれないしで案外困りませんでした(仕事は大変だったけど).でも念の為NotePCの大容量バッテリは買い増しして持ち歩いていました.(今回のバッテリの一つもそれ)
↓はその頃の発表スライド

ちなみに停電から14,5時間で携帯基地局のバッテリも尽きたようで完全にオフラインになってしまいました.NILFS2は大抵標準では導入されていないし手元ではGit管理もしているのでNILFS2は使わなくても良かったかなと後で思いました.

復旧時の残容量はNotePC が1.5本/モバイルバッテリが50% x2という感じ未だ行けるなという感じでした.でもネットワークが繋がっていたらもっと利用していたでしょう.

しかしこの辺は雷やら強風やらでよく停電になります.大抵は携帯基地局が落ちるまでには復旧するのですが,台風だと今回のように長い停電に.でも復旧状況を停電情報サイトで確認していると深夜にもステータスが変わっていて24時間体制で復旧してるのかと驚きました.九州電力の関係者のみなんさんありがとうございます_o_
(でも昼頃復旧->本日中->本日未明復旧とステータスがずれ込んでいくとはちょっとつらかったです……)

ついでに今回役にたったものを

  • PETZLのワイヤ式ヘッドライト
    手元のは初代かその次くらいの古いもので暗いけど便利でした.

  • モバイルバッテリー
    Cheerox2に秋葉原で買った謎バッテリーの3本を使っていました.基地局が落ちるまではスマホに給電.基地局が落ちてからはiPad/Kobo/Raspberry Piに給電していました.

  • Raspberry Pi B+ とAdafruit3.5インチ液晶
    USB稼働の液晶モニタもあるのですがバッテリ消費量的にこいつのほうが食わない感じなのでちっこいですがこれで作業したりも.でもNotePCのバッテリが切れなかったのでテスト程度.

    Adafruit PiTFT – 320×240 2.8 TFT+Touchscreen for Raspberry Pi ID: 1601 – $34.95 : Adafruit Industries, Unique & fun DIY electronics and kits

  • エネループ
    自己放電の少ない充電式乾電池です.自己放電が少ないので充電しておいておけば何時でも使えるのが良いです.電気をあまり食わないものはこいつで. ちなみに充電器は単三・単四 ニッケル水素充電池対応 放電機能 USB充電ポート搭載 充電器 (16本用)の通信販売【上海問屋】 | 上海問屋を主に使っています.

  • ユニフレームガスバーナー
    一般的なイワタニとかのタイプのカセットコンロガスが使える(非推奨)なガスバーナーです.山向けのガスやアルコールに比べて大分ランニングコストが安く付きます.低地のみならこれで十分.(手持ちのはゴトクの小さい恐らく古いモデルのものもっと安かったし)

ubuntuでpipが見当たらない状態を復旧

鹿児島らぐのオフ会で @seoponさんからpipでjanome入れてみましょうって時に,以前sudo hogehogeしてからpip使えなくなっちゃって方が. 見てみるとpkgは入っているけどpipコマンド自体がいなくなってる感じみたいでした.恐らくオペミスで消したかパスのないところに移動しちゃった? (以下は多分こんなだったというのを再現.)

$ pip
プログラム 'pip' はまだインストールされていません。 次のように入力することでインストールできます:
sudo apt install python-pip
$ sudo apt install python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
python-pip はすでに最新バージョン (8.1.1-2ubuntu0.2) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
$ which pip
$ dpkg -L python-pip | grep \/pip$
/usr/bin/pip
/usr/lib/python2.7/dist-packages/pip
$ ls -l /usr/bin/pip
ls: '/usr/bin/pip' にアクセスできません: そのようなファイルやディレクトリはありません

pkgをreinstallして解決しました.

$ sudo apt install --reinstall python-pip
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレード: 0 個、新規インストール: 0 個、再インストール: 1 個、削除: 0 個、保留: 0 個。
144 kB のアーカイブを取得する必要があります。
この操作後に追加で 0 B のディスク容量が消費されます。
取得:1 http://jp.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 python-pip all 8.1.1-2ubuntu0.2 [144 kB]
144 kB を 0秒 で取得しました (571 kB/s)
(データベースを読み込んでいます ... 現在 902816 個のファイルとディレクトリがインストールされています。)
.../python-pip_8.1.1-2ubuntu0.2_all.deb を展開する準備をしています ...
python-pip (8.1.1-2ubuntu0.2) で (8.1.1-2ubuntu0.2 に) 上書き展開しています ...
man-db (2.7.5-1) のトリガを処理しています ...
python-pip (8.1.1-2ubuntu0.2) を設定しています ...
mk@x201s:~$ !ls
ls -l /usr/bin/pip
-rwxr-xr-x 1 root root 292  8月 12 06:59 /usr/bin/pip
$ which pip
/usr/bin/pip
$ pip -V
pip 8.1.2 from /usr/local/lib/python2.7/dist-packages (python 2.7)

とりあえず.

鹿児島linux勉強会-2016-09に参加

鹿児島Linux勉強会 2016-09に参加

鹿児島らぐの鹿児島Linux勉強会 2016-09に参加してきました.今回はSoftware Freedom Dayも兼ねています.

参加者は5人と前回の半分以下でした. 最近は10人超えが多かったので久々にひっそりと.

今回の会場はさくらハウスさんをお借りしました.

一人あたり1日500円で利用可能. Wi-Fi/電源利用可能.プロジェクターあり,スタジオは今は使えないそう. 基本的に土日はお休みなのですが今回は特別に開けていただきました.

プロジェクタの共有にChromeCastを利用しようとしたのですが,ChromeCastの設定をしても2台の端末から探しましたが見つかりませんでした.avahi-browse commandでも見えず.ちゃんと確認していませんが,恐らくWi-Fi内の通信ができない設定になっているのではないかと.

てことで結局有線で利用. 利用者の環境はVGA(D-Sub15pin)/mini-DP/HDMIという感じでした. 幸いこれらのケーブルやアダプタは会場備え付けのものがありお借り出来ました.

発表内容はざっとこんな感じ

  • 10分ではじめる形態素解析(janome)
  • microPythonを使ってみた
  • オープンソースカンファレンス2016福岡参加のお誘い
  • GPS情報をLinuxで活用
  • 正規表現の違い
  • terminalのshortcut
  • 古い本

次回の日程は未定です.

10月は16(Sun)に情報処理技術者試験があるのでこれを避けた方がいいのかも? そうすると10/8(Sat), 10/22(Sat)?

byobu+screenでfunctionkeyを無効にする

機能覚えてないし遠いしたまに間違って押して混乱したりするので無効にしました.
Debian stretch amd64, Ubuntu 16.04 LTS amd64で確認.

$ vi ~/.byobu/keybindings

して

source $BYOBU_PREFIX/share/byobu/keybindings/common

の次の行頭で i して編集モードにした後
Ctrl+a !(aは設定してあるescape key)する.
するとこんなのが出てくるので,

:source /usr/share/byobu/keybindings/f-keys.screen

頭の : を消して

source /usr/share/byobu/keybindings/f-keys.screen.disable

を書いておく

保存して起動しなおして反映.

#viである必然性はないのでお好きなテキストエディタでどうぞ.
#tmuxの場合はこっち~/.byobu/keybindings.tmuxになるのかな?(それとも byobu-select-backend で切り替えるとファイル名入れ替わる?)

コマンドラインからGooglecastにcast出来るcastnowを試す

見つけたので試してみました

Debian stretch amd64, Ubuntu 16.04 LTS amd64で確認しています.

$HOME以下にPATH通してnpmで導入しています./usr/local以下で良ければnpm install castnow -gだけでいいかも.

$ sudo apt install npm nodejs-legacy
$ echo 'PATH="$PATH":$HOME/node_modules/.bin' >> ~/.bashrc
$ source ~/.bashrc
$ npm install castnow

入りましたがChromecastがみあたらない?

$ castnow --help
 
Usage: castnow [<media>, <media>, ...] [OPTIONS]
 
Option                  Meaning
--tomp4                 Convert file to mp4 during playback
--device <name>         The name of the Chromecast device that should be used
--address <ip>          The IP address or hostname of your Chromecast device
--subtitles <path/url>  Path or URL to an SRT or VTT file
--subtitle-scale <scale> Subtitle font scale
--subtitle-color <color> Subtitle font RGBA color
--myip <ip>             Your local IP address
--quiet                 No output
--peerflix-* <value>    Pass options to peerflix
--ffmpeg-* <value>      Pass options to ffmpeg
--type <type>           Explicitly set the mime-type (e.g. "video/mp4")
--bypass-srt-encoding   Disable automatic UTF-8 encoding of SRT subtitles
--seek <hh:mm:ss>       Seek to the specified time on start using the format hh:mm:ss or mm:ss
--loop                  Loop over playlist, or file, forever
--help                  This help screen
 
Player controls
 
Key                     Action
space                   Toggle between play and pause
m                       Toggle mute
up                      Volume Up
down                    Volume Down
left                    Seek backward
right                   Seek forward
n                       Next in playlist
s                       Stop playback
quit                    Quit
 
$ castnow
Error: device not found

名前解決が出来なかったようでipを指定するとcast出来ました.別のマシンでは通ったのでこのマシンがおかしいようです.

$ avahi-browse -a -t -l -r
+ wlp3s0 IPv6 x201s                                         Remote Disk Management local
+ wlp3s0 IPv4 Chromecast-KagoLUG                            _googlecast._tcp     local
= wlp3s0 IPv6 x201s                                         Remote Disk Management local
   hostname = [x201s.local]
   address = [fe80::222:faff:fe33:456a]
   port = [22]
   txt = []
= wlp3s0 IPv4 Chromecast-KagoLUG                            _googlecast._tcp     local
   hostname = [Chromecast-KagoLUG.local]
   address = [192.168.2.206]
   port = [8009]
   txt = ["rs=" "bs=FA8FCA59198D" "st=1" "ca=4101" "fn=Chromecast-KagoLUG" "ic=/setup/icon.png" "md=Chromecast" "ve=05" "rm=A652B47431F36207" "id=7c14aaaa62a6002dd95ba94814e5c5e0"]
$ castnow --address 192.168.2.206 http://commondatastorage.googleapis.com/gtv-videos-bucket/ED_1280.mp4
 
  State     : Playing....

パイプも使えるので色々応用できそうな気がします.
(最近Chromiumがamd64/i386しかなくなったようですが,これを使えば他のアーキテクチャでもスクリーンキャストもできそう?)

Adobe Flash Player NPAPI for Linux が復活ぽい

てことでちょっと試してみました.

update-flashplugin-nonfree では見えないようです.ベータだししょうがないですね.

$ sudo /usr/sbin/update-flashplugin-nonfree --status
Flash Player version installed on this system  : 11.2.202.632
Flash Player version available on upstream site: 11.2.202.632
flash-mozilla.so - auto mode
  link best version is /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so
  link currently points to /usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so
  link flash-mozilla.so is /usr/lib/mozilla/plugins/flash-mozilla.so
/usr/lib/browser-plugin-freshplayer-pepperflash/libfreshwrapper-flashplayer.so - priority 70
/usr/lib/flashplugin-nonfree/libflashplayer.so - priority 50

ということで手動で.何時もの感じで動きました.

$ wget https://fpdownload.macromedia.com/pub/labs/flashruntimes/flashplayer/linux64/libflashplayer.so
$ mv libflashplayer.so ~/.mozilla/plugins/
$ sha256sum ~/.mozilla/plugins/libflashplayer.so 
413a82524b218ce49869bd9756fe4e85de0feb43e50737f05e5632599394f488  /home/mk/.mozilla/plugins/libflashplayer.so
$ firefox-esr about:plugins

とりあえず艦これが動くのは確認.

20160905_22:09:07-5170

20160905_22:09:23-7621

消すときはこんな感じで

$ rm ~/.mozilla/plugins/libflashplayer.so

ブラウザ側ではサポート打ち切っていく方針だと思うのですが Adobe はどういう心変わりなんでしょうね? Google ChromeのPPAPIはどうなるかな?