Windowsのバックアップ~イケてないなぁ~

GWにSSD化する

Asus K53EというWindowsマシンを使っています.
前の会社でMacBookAirを買ってもらっていたので,暫くはメインマシンがこのMacだったので正直Windowsマシンは放置状態でした.かなり重たい動作だし,重くなるとPCファンがう~~ん,とノイズを奏でます.
とはいえ,流石に出向している身分で前の会社の資産を使い続けるわけにもいかないので,WindowsマシンをSSD化して快適なマシンにして,GW明けにMacを返却することにしました.
なんと,嫁の許可がでました・・・なんだろう?
何年後かには新しいノートor1in2タブレットに移行するとのこと,それまでの延命策ということを理解してくれたようです.

さっそく吉祥寺のツクモ電気に買いに行く

SSDって初めて買うので少しドキドキしながら,移行の手順とかを調べて買い物に出掛けます.
ネットではD万円前後ということでしたが,ツクモ電気のGWセールスということで,C万G千ちょっとで購入.
16GのUSBメモリも購入しました.

バックアップのHDはLinuxマシンのバックアップ用のものを転用する

SSDに移行するに当たり,ひとまず今のPCのデータをどっかに逃さないといけない.
今日いろんなクラウドのサービスがあるので,すこし悩んでやはりLinuxマシンに繋ぎっぱなしなっているUSB-HDDを使うことにしました.(手堅くやるつもりでした)

とりあえずやってみて案の定エラーになる

かなり詳細に書いてあるので,この手順どうりにやるのが王道かと思います.

でも私の場合,この手順どうりにやって,リカバリする段になってエラーになります(ディスっているわけではなく条件が違います).いろいろ調べてみるとどうも下記のようなカラクリの様です.

移行元のDiskサイズをチェックしているようです.移行元のDiskがCドライブとDドライブの合計で500GB程度で,移行先のSSDが多分フォーマットとかの都合で500GB弱でしたので,バックアップファイル自体は100Gちょっとしかないですが,”移行元のDiskサイズ>移行先のDiskサイズ”というのをエラーだということにしているようです.最終的な移行先のSSDドライブのサイズが500GBを下回っているが原因でした.
ISOファイルと同じ仕様だと理解するんでしょうね.でも「Bios」云々のエラーメッセージは今みても意味不明でしゃあります(技術的は正しいのかも知れませんが).このエラーメッセージでググると結構色んな人が引っかかっているようですが,どうも文章だけだと状況がチャンと理解できないので,理解した範囲で上のような絵にしてみました.

対処します

移行するファイルサイズではなく,移行元のHDDのボリュームサイズの合計で,移行先のDiskを拒否しているんですから,移行元のDiskサイズを調整するしかないです(と分かるまで結構時間がかかる).幸運なことにDドライブにはなにもデータが入っていませんので,ドライブごと消去して同じ手順で移行します.

今度は上手く行きます.USB-HDに逃したバックアップファイルのサイズはそんなに変わっていないのにね.

そして快適になります

PCのファンの音は気にならないレベルになりした.(エアダスタで掃除したせいかも知れません)
起動時間は体感で1/10程度になります.起動直後はChromeやらアンチウィルスの動作でDiskIOの使用率が100%に張り付いて,数分使い物にならない状態が続いていて,その間中ファンの音が五月蝿かったです.この状況がかなり改善出来たことはかなり投資対効果のあるお買い物になりました.

atコマンドの備忘録

歳を取ると覚えられなくなる

歳を取ると覚えられなくなるのと,ググってもちゃんと動くパターンがなかな見つからなかったので,うまく言ったパターンを記録しておく.
2016年12月29日の21時59分に,NHKのFMを録音する場合は,以下の通り.

echo "$HOME/bin/rec_nhk.sh FM 182 $HOME/Dropbox" | at "2159 December 29 2016"

他にもやり方があるかも知れないけど,全パターン覚えたいわけでもないので今後は,これからコピペすることにする.

ラジコの仕様が変わったみたい

粋な夜電波の録音が失敗していた

昨日というか今日(10月15日)分の放送の録音が失敗していた.
どうも,時期的な感じでは,”『タイムフリー聴取機能』の実証実験開始”に伴う変更の模様(ずっと見ていたわけではないので確度は不明).

ということでスクリプトを修正

とはいえ,エラーになったところをググって修正しただけなので,これで安定するかどうかは不明.
TBSを2分ほど録音してオッケーだったので,まぁいいかという感じです.

変更箇所は赤字で.
playerurlからバージョンでも番号が消えてくれたのはまぁよしとするが,まだauth云々のコードの所でバージョン番号を生で書いているのでイケてない感じがするけど,ひとまずこれでしのごうと思う.

!/bin/bash

LANG=ja_JP.utf8

pid=$$
date=`date '+%Y-%m-%d-%H_%M'`
#playerurl=http://radiko.jp/player/swf/player_4.1.0.00.swf
playerurl=http://radiko.jp/apps/js/flash/myplayer-release.swf
playerfile="/tmp/player.swf"
keyfile="/tmp/authkey.png"

outdir="."

if [ $# -le 1 ]; then
  echo "usage : $0 channel_name duration(minuites) [outputdir] [prefix]"
  exit 1
fi

if [ $# -ge 2 ]; then
  channel=$1
  DURATION=`expr $2 \* 60`
fi
if [ $# -ge 3 ]; then
  outdir=$3
fi
PREFIX=${channel}
if [ $# -ge 4 ]; then
  PREFIX=$4
fi

#
# get player
#
if [ ! -f $playerfile ]; then
  wget -q -O $playerfile $playerurl

  if [ $? -ne 0 ]; then
    echo "failed get player"
    exit 1
  fi
fi

#
# get keydata (need swftool)
#
if [ ! -f $keyfile ]; then
  swfextract -b 12 $playerfile -o $keyfile

  if [ ! -f $keyfile ]; then
    echo "failed get keydata"
    exit 1
  fi
fi

if [ -f auth1_fms_${pid} ]; then
  rm -f auth1_fms_${pid}
fi

#
# access auth1_fms
#
wget -q \
     --header="pragma: no-cache" \
     --header="X-Radiko-App: pc_ts" \
     --header="X-Radiko-App-Version: 4.0.1" \
     --header="X-Radiko-User: test-stream" \
     --header="X-Radiko-Device: pc" \
     --post-data='\r\n' \
     --no-check-certificate \
     --save-headers \
     -O auth1_fms_${pid} \
     https://radiko.jp/v2/api/auth1_fms

if [ $? -ne 0 ]; then
  echo "failed auth1 process"
  exit 1
fi

#
# get partial key
#
authtoken=`perl -ne 'print $1 if(/x-radiko-authtoken: ([\w-]+)/i)' auth1_fms_${pid}`
offset=`perl -ne 'print $1 if(/x-radiko-keyoffset: (\d+)/i)' auth1_fms_${pid}`
length=`perl -ne 'print $1 if(/x-radiko-keylength: (\d+)/i)' auth1_fms_${pid}`

partialkey=`dd if=$keyfile bs=1 skip=${offset} count=${length} 2> /dev/null | base64`

#echo "authtoken: ${authtoken} \noffset: ${offset} length: ${length} \npartialkey: $partialkey"

rm -f auth1_fms_${pid}

if [ -f auth2_fms_${pid} ]; then
  rm -f auth2_fms_${pid}
fi

#
# access auth2_fms
#
wget -q \
     --header="pragma: no-cache" \
     --header="X-Radiko-App: pc_ts" \
     --header="X-Radiko-App-Version: 4.0.0" \
     --header="X-Radiko-User: test-stream" \
     --header="X-Radiko-Device: pc" \
     --header="X-Radiko-Authtoken: ${authtoken}" \
     --header="X-Radiko-Partialkey: ${partialkey}" \
     --post-data='\r\n' \
     --no-check-certificate \
     -O auth2_fms_${pid} \
     https://radiko.jp/v2/api/auth2_fms

if [ $? -ne 0 -o ! -f auth2_fms_${pid} ]; then
  echo "failed auth2 process"
  exit 1
fi

#echo "authentication success"

areaid=`perl -ne 'print $1 if(/^([^,]+),/i)' auth2_fms_${pid}`
#echo "areaid: $areaid"

rm -f auth2_fms_${pid}

#
# get stream-url
#

if [ -f ${channel}.xml ]; then
  rm -f ${channel}.xml
fi

wget -q "http://radiko.jp/v2/station/stream/${channel}.xml"

stream_url=`echo "cat /url/item[1]/text()" | xmllint --shell ${channel}.xml | tail -2 | head -1`
url_parts=(`echo ${stream_url} | perl -pe 's!^(.*)://(.*?)/(.*)/(.*?)$/!$1://$2 $3 $4!'`)

rm -f ${channel}.xml

#
# rtmpdump
#
rtmpdump -q \
         -r ${url_parts[0]} \
         --app ${url_parts[1]} \
         --playpath ${url_parts[2]} \
         -W $playerurl \
         -C S:"" -C S:"" -C S:"" -C S:$authtoken \
         --live \
         --stop ${DURATION} \
         --flv "/tmp/${channel}_${date}"
#        > /dev/null 2>&1

ffmpeg -loglevel quiet -y -i "/tmp/${channel}_${date}" -acodec libmp3lame -ab 128k "${outdir}/${PREFIX}_${date}.mp3"
if [ $? = 0 ]; then
  rm -f "/tmp/${channel}_${date}"
fi

rm $playerfile

bindの設定~これで静かになるはず~

named.confの内容

色々試行錯誤しましたが,現時点では,以下が一番良さ気.

options {
        version         "unknown";
        listen-on port 53 { 127.0.0.1;192.168.253.1; };
//      listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "data/cache_dump.db";
        statistics-file "data/named_stats.txt";
        memstatistics-file "data/named_mem_stats.txt";

        allow-query             { localhost; 192.168.253.0/24; };
        allow-transfer          { localhost; 192.168.253.0/24; };
        allow-query-cache       { localhost; 192.168.253.0/24; };
//      forwarders              { 220.220.248.1; 220.220.248.9;};
        forwarders              { 8.8.8.8; 8.8.4.4; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";

        pid-file        "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
//              severity debug;
//              severity critical;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
        category lame-servers { null; };
//      category dnssec { null; };
};

悩んだポイント:logging設定

logwatchで結構な数のレポートが出ていたので,前から設定がおかしいのでは?とか,DNSSECに対応していないのが気になっていた.
まずは,

lame-servers DNS解決の際にほかのサーバで見つけた設定ミス(lame)の記録
BINDのlogを適切に設定して攻撃の予兆を察知しよう

とのことなので,他所さん設定ミスを一生懸命観ても仕方ないので,loggingを

        category lame-servers { null; };

で破棄する.DNSSEC関連も結構変なログが出るので,

//      category dnssec { null; };

を書いてはおくが,以下に書くように,ぷららのDNSサーバがDNSSECに対応していないせいなので,今のところはコメントアウトしておく.

悩んだポイント:DNSSEC設定

        forwarders              { 220.220.248.1; 220.220.248.9;};
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

で,ぷららのDNSサーバを使うと,無闇にログが出力される.特にvalidation関係で.

dnssec-validation no;

にすると少しは静かにはなるが,気持ちが悪い.
ということで,googleのDNSサーバを使おうとか考えるが,akamaiのエッジサーバが変わってしまうので,結構遅くなるぞ的な心配があったので,あまりそれは選択肢に入れいていなかった.けど,

        forwarders              { 8.8.8.8; 8.8.4.4; };

にしても,www.ntt.comのIPアドレスはぷららのDNSサーバと同じアドレスを返してくるので,あぁakamai賢いということで,結局googleのDNSサーバを使うことにしました.
しばらく,これで様子をみることにします.

あとは,IPv6をどうするかなんですが,また道のりは遠い 😛 .

色んな物を更新

保険

ちょっと前に保険会社から電話がかかってきた.
以前バブルだった頃は結構ちゃんと営業していた感があったし,時々連絡も来ていた.
前の担当だった人が定年で止めるという話を聞いてから暫く音信不通だったのが,10年もしてから突然電話がかかってきて,契約内容を確認したいだの,健康状態がどうのこうのとか言われて,そんなことを突然言われても?って結構Rejectベースで話をしてしまった.
担当の方は,自宅に訪問したいとのことだったが断り,会社のロビーで話を聞くようにしてもらったら,どうも新人さんだったらしく,上司と思しき人も同席してもらっていた.
まぁ,元々契約する段階で結構告知内容とかをいじったりしている(その当時の担当の人は知ってはいたが)ので,あまり契約更新で有利になるような感覚もなく,死亡保険金が5000万円も付いていたりするので,この際ちゃんと見直しをしようということで,吉祥寺の保険相談に行ったりもしたが,まぁ,これまでの付き合いもあるし子供ももう高校3年生だし,死亡保険金を2000万円以下にすると,結構支払いも軽くなるということで,本日契約の更新の手続きに行くことにした.
とはいえ,やはり以前のうつ病の病歴もあるので,審査でどうなるかは不明.
でも,これで10時~12時の時間がかかる.
この契約更新のために田無の保険会社社屋まで車で移動するが,そのついでに走行距離をメモしておいて,下のFedoraのUpdate後に,更新手続きを済ませておく.
今日は色んな物を更新する日になった.

Fedora23から24へ

the-fisher-king-482x298 前回22から23に更新するときは結構ハマった(それでもそれ以前に比べればかなりお手軽).

この段階では結構構えている.
保険の更新の手続きを終えて,図書館に本を返しに行って,キーボードとディスプレイケーブルを用意してから,

$ sudo dnf system-upgrade reboot

をやる.前回と同じく家庭内LANは一旦全滅になるし,ディスプレイ上ではキーボードのプロファイルみたいなパッケージの更新でエライ時間がかかっていたようだが,他の本を読みながら放置していると,あっさりちゃんと立ち上がっている.
前回はfirewalldが勝手に立ち上がっていたのに気がつくのに結構時間がかかったが,今回は割とあっさり.
現時点では特に問題もなく,httpd,mariaDB,postfix,dovecot,smb,named,dhcpd,dropboxd(こうやって列挙してみると色々やらせすぎ)は一応問題なく動いている感がある.
明日のlogwatchメールで確認する予定.

Feedlyからinoreaderへ

ってなことをやっていると,結城先生のTwitterで,

というような話があり,feedlyからinoreaderへ乗り換えることにする.
ググると色んなバージョンの手順が出てくるので,少なくとも私の場合は,opml形式のファイルをexportするして,inoreaderにinportするということで,購読状態は引き継ぐことができました.
まぁ,良さ気なUIのようなので,暫くはこれを使うことにする.
考えてみると,Google Readerに始まり,Feedlyを経て,ここに至る.が,RSSっていう文化自体がいつまで続くのかは実は謎だったりする.

wp-cron.phpとnamedな週末

bind-logo-100px-1-1

先週の金曜日に送別会ということで,少し(かなり)飲み過ぎたので,土曜日はドロドロ.
今日(日曜日)は少しリカバる.
朝からテレビ・録画を一通り観て,殆どコンピュータ関連の作業に費やす.

namedのログが五月蝿い

”FORMERR”とかのログが毎日logwatchでメールで届くので少ししんどい.
本当はちゃんと対処しないといけないのかも知れないけど,やってらんね~ということで,観ないことにしたい.

logging {
        channel default_debug {
                file "data/named.run";
//              severity dynamic;
//              severity debug;
                severity critical;
                print-time yes;
                print-severity yes;
                print-category yes;
        };
};

こんな感じにしておく.今までは”dynamic”で全部ログしていたことになるので,少しこれで静かにはなるはず.
でもなぁ.名前解決位ちゃんとできてないとなぁとは思ったりする.

WordPressの過去記事自動投稿が止まっている

ちょっと前まで,”Evergreen Post Tweeter”で過去記事をツイッターにポスト出来ていた.
でも,このPluginはメンテが止まったらしいので,他の幾つかのpluginにトライしてみたが,どれも上手くいかない.
どうもwp-cron.phpの実装が,所謂普通のLinux/cronとは違うらしく,色んな情報がネットに溢れている.
色々調べてみると,結局は,

/usr/bin/php -q /var/www/html/wordpress/wp-cron.php

というコードを,httpサーバのUIDで定期的に動かしておかないといけないらしい.
cronに登録する前にまずは試してみましょうということで,我が家はまだapacheなので,こんな感じ.

$sudo -u apache /usr/bin/php -q /var/www/html/wordpress/wp-cron.php

をやってみますが,全く終わる気配がありません 😕 .
他のサイトの情報では,curlでDLすると良いという情報もありましたが,やってみると404になります.
まぁ,当たり前というか正しい運用ですね 😆 .
ということで,

$ cat /usr/local/bin/wp-cron.sh
#!/bin/sh -f
cd /var/www/html/wordpress
/usr/bin/php -q wp-cron.php

ってなコード(なぜかcdしないと終わらないので,こういう腐ったコード)を,

$ ls -l /usr/local/bin/wp-cron.sh
-rwxr--r-- 1 apache apache 69  6月 19 11:35 /usr/local/bin/wp-cron.sh

という感じで配置して,”/etc/crontab”に

* */1 * * * apache /usr/local/bin/wp-cron.sh

登録しておきます.3時間周期位でTweetできれば良いので,1時間周期.
まぁ,それなりにトラヒックのあるWebサイトならこんなことしなくても良いのかも知れないですが,フォロー数も少ないので,こんなことでもしないと宣伝効果はないのかも知れません.
今のところ,”Wordpress+Revive Old Post”と上の処置で何とか3時間周期の過去記事Twitterポストの自動化を再開できるようになりました.

”/usr/local/bin”ってバックアップしていないので,そのうちどっかに移動させるでしょう.
WordPressも”4.5.2–ja”なバージョンでの話なので,そのうちwp-cron.phpの実装もLinux/cronっぽくなるのかも知れません.

アカマイのエキスパートによるモバイルAPI解説セミナー

 

Hiroyuki Nakamuraさん(@tel2sip)が投稿した写真

昨日,仕事の関係で(と言っても研究所なので割りとなんでもありなんですが),アカマイのセミナーに行ってきたので,概要を書き留めておきます.

内容

・アメリカではモバイルAPLの流行に伴いAPIのトラヒックが6割程度に上がっている.
6割って,帯域ベースなのかパケット数ベースなのか不明だが,多分APIのパケットサイズはゴミなので,パケット数ベースなのだろう.

・モバイルAPLのUx向上にAkamaiキャッシュサービスが有効
・APIに特化したAkamaiの提供機能としては,
 ーキャッシュパージ用のAPI提供(今年の10月に提供予定)
  ⇒API廃止時にOriginサーバのAPIとキャッシュサーバ上のAPIバージョンを整合させるために使う.
 ーバージョン切り替え
  ⇒旧バージョンのモバイルAPLと新バージョンのモバイルAPLの混在期間をアカマイキャッシュサーバで振り分ける

感想

特段サプライズっていう内容でもなかった.だから割とこじんまりとしたセミナーにしたのかも知れない.
講演後にAkamaiの人と話をしましたが,どうも彼らはキャリアを土管としてしか 見ていない感があり,やっぱり不愉快になっちゃいました.
とはいえ,Internetな世界では無視できない規模のPlayerなので情報収集は継続しておきたいなと思います.

カスタムフィールドを使ってみる.

これはカスタムフィールドのテストです.
新しいプラグインを入れようかとも思いましたが現在使っている,Catch Boxというテーマが割りとお気に入りで,当面変えないだろうという想定のもと.single.phpを編集することにしました.

<?php the_meta(); ?>

を追加するといい感じに表示されてくれます.
ただ,どうしても”catchbox-sidebarlayout”という名前のカスタムフィールドが勝手に追加されてしまいます.
対処方法不明.

DNS-Bindのエラーログ対策

昨日のエラー

 Incorrect response format:
    FORMERR resolving 'ns1.qq.com/AAAA/IN': 117.144.244.190#53: 1 Time(s)
~略~
    FORMERR resolving 'appcloud.mcafee.com/AAAA/IN': 161.69.29.63#53: 14 Time(s)

FROMERRって何?というレベルの知識しかないのですが,共通項はAAAAなのでIPv6関連だろうという割と乱暴な判断で,

       listen-on-v6 port 53 { none; };

を,

       listen-on-v6 port 53 { any; };

に変更.”any”がイマイチな感じです.
あとは,以下ですね.

 **Unmatched Entries**
    SERVFAIL unexpected RCODE resolving 'adroute.focas.jp/A/IN': 202.218.126.231#53: 1 Time(s)
~略~
    timed out resolving 'ipv6.msftncsi.com.edgesuite.net/A/IN': 84.53.139.65#53: 1 Time(s)
~略~
    validating gexperiments2.com/DNSKEY: no valid signature found (DS): 2 Time(s)
    validating gexperiments2.com/DNSKEY: verify failed due to bad signature (keyid=34936): RRSIG has expired: 2 Time(s)

これまたSERVFAILって何?という状態です.
“timed out”はなんとなくIPv6的な気がするので,上の対処でなんとかなるかも?
“validation”なんとかはDNSSEC関連なので,上の対処ではなくならないでしょうね.また別途考えます.
各々”1 Time(s)”程度な話なので,それ程気にはしていませんが,logwatchで毎日結構長いメールが来るので少し気になりました.

rndcを使えるようにする

一応,キャッシュサーバということで自宅のDNSサーバにしているつもりなのですが,取り敢えず使えているのでヨシとしている程度で上に書いたようなエラーログも支障のない範囲なら良いかなぁという感じで放置していました.
でも,流石に毎日エラーだよとlogwatchに言われると気になるし,一応をchroot化はしてあるけど,本当にこれで良いの?というのは少し疑問だったりします.
rndcコマンドでflushとかすると対処できるかも?とは思いましたが,認証キーをちゃんと設定していないので,使えません.

# rndc-confgen -a -b 512 -k XXXXX
~結構時間がかかる~
# chmod o-rwx /etc/rndc.key
# cp /etc/rndc.key /var/named/chroot/etc/rndc.key
# systemctl restart named-chroot

とやると,

# rndc status
version: BIND 9.10.3-P4-RedHat-9.10.3-13.P4.fc23  (unknown)
boot time: Sat, 21 May 2016 07:39:17 GMT
last configured: Sat, 21 May 2016 07:39:18 GMT
CPUs found: 4
worker threads: 4
UDP listeners per interface: 2
number of zones: 104
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

と,使えるようにはなりました.

Apacheの404対策

どうも,昔のURLが残っている感があり,404になっているアクセスがあります.
大した数ではないですが,エラーページを少し考えないといけないかな?と悩み中です.