サーバーバックアップ

linux マシンが 2台あれば,rsync で良いのだけれど,ない場合には工夫がいる.
日常使いのPC→Win
サーバー→Linux
Winは使う時だけ起動
の前提の時,こんな風にしてみた.

linux マシン

crontab で zip を走らせる(etc var home を圧縮)

zip -P password -rq /tmp/etc.zip /etc

みたいな感じ。
mysql もバックアップ。

mysqldump | gzip > hoge.gz

Win マシン

C:> Winscp.com /script=scriptfilename
open username@hostaddr -privatekey=ppkfile.ppk
cd /remote_directory
lcd c:\local_directory
get etc.zip var.zip home.zip hoge.gz .\
exit

タスクスケジューラで,Winscp.com のコマンドを書いた bat ファイルを実行.

NOOK Color へ CyanogenMod 10 を入れる

基本的には,こいつに従って,作業するだけ → [GUIDE] Install CM7 or CM10 + Recovery to EMMC - ALL NOOK COLORS! (Updated:11/19/12) - xda-developers
元々,過去の記事 rooted NOOK Color に Google 日本語入力を入れたよ | hadacchi blog でパッチ当てをしているので,CWM は展開していない.
手順については自分で調べること.

手順

  • 1gb CWM 3.2.0.1 を SD カードに焼く.
  • CM10 の zip と,対応する gapps をその SD カードにコピー.
  • その SD カードを挿して NOOK を再起動.
  • CM10,gapps の順で zip を選択して適用.
  • 再起動.

使用感

  • 日本語フォントが中華じゃない
  • 検索バーが,ホームのアイコン配置スペースの外に置いてあり,アイコン配置の邪魔にならない
  • CM9 ではなかった画面上の通知領域が標準で On に戻っている
  • adb でアクセスできない(over NW も無理)
  • デバッグモードで PC から認識しない(不明なデバイスとしてすら表示されず,ドライバインストールもできない)
  • 初回起動時の Google アカウントの設定時に,落ちる(後で設定したら動いたので,原因は不明)
  • 設定画面が,シングルカラム
  • 4月21日版の CM 9 (Unofficial) よりも軽快に動く
  • Android 4.1 対応のブラウザで動く Flash player がない (追記:Adobe が Play Store での公開をやめちゃったのね)

Flash が問題で必要なサイトが一部見られないため,CM9 か CM7 に戻す予定.

追記:

  • Flash について
    Android 4.0 向けの Flash Player が動いたので,これで勝つる.
    Archived Flash Player versions
  • adb について
    ターミナルエミュレータで su すれば,とりあえず root でシェルは使えるので,これで動かすしかあるまい…
    bluetooth キーボードが欲しい…

    設定画面で,「開発者向けオプション」の「Rootアクセス」を「アプリとADB」にしたら,adb shell が通るようになった.
    更にデバッグモードでも,PC からデバイスとしても認識するようになった.

SD カード上に入れた gnupack で python numpy を使う

SD カード上の gnupack (gnupack_devel-10.00) で、python numpy を apt-cyg から入れても動かない。

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.6/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from lib import add_newdoc
  File "/usr/lib/python2.6/site-packages/numpy/lib/__init__.py", line 13, in <module>
    from polynomial import *
  File "/usr/lib/python2.6/site-packages/numpy/lib/polynomial.py", line 17, in <module>
    from numpy.linalg import eigvals, lstsq
  File "/usr/lib/python2.6/site-packages/numpy/linalg/__init__.py", line 48, in <module>
    from linalg import *
  File "/usr/lib/python2.6/site-packages/numpy/linalg/linalg.py", line 23, in <module>
    from numpy.linalg import lapack_lite
ImportError: No such file or directory
>>>

web を検索すると、こういう情報が出てくる。→
numpyでlapack_fileを読み込んでくれないとき – 放置演算子
このサイトで言っているのは、必要なライブラリにパスが通ってないということだが、このサイトの対応方法では新しいバージョンを上書きインストールした時に、使っているライブラリとズレが出て、将来にハマる可能性がありそう。
なので、リンクを張ることにするが、やっぱ怒られる。

>>> import numpy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/numpy/__init__.py", line 137, in <module>
    import add_newdocs
  File "/usr/lib/python2.6/site-packages/numpy/add_newdocs.py", line 9, in <module>
    from lib import add_newdoc
  File "/usr/lib/python2.6/site-packages/numpy/lib/__init__.py", line 13, in <module>
    from polynomial import *
  File "/usr/lib/python2.6/site-packages/numpy/lib/polynomial.py", line 17, in <module>
    from numpy.linalg import eigvals, lstsq
  File "/usr/lib/python2.6/site-packages/numpy/linalg/__init__.py", line 48, in <module>
    from linalg import *
  File "/usr/lib/python2.6/site-packages/numpy/linalg/linalg.py", line 23, in <module>
    from numpy.linalg import lapack_lite
ImportError: Exec format error
>>>

しょうがないので、調べてみる。

# cygcheck.exe /lib/python2.6/site-packages/numpy/linalg/lapack_lite.dll
G:\gnupack_devel-10.00\app\cygwin\cygwin\lib\python2.6\site-packages\numpy\linalg\lapack_lite.dll
  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cygwin1.dll
    C:\WINDOWS\system32\KERNEL32.dll
      C:\WINDOWS\system32\ntdll.dll
  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cyglapack-0.dll  G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\libpython2.6.dll
chgcheck: G:\gnupack_devel-10.00\app\cygwin\cygwin\bin\cyglapack-0.dll is a symlink instead of a DLL

シンボリックリンクはダメ、らしい。
じゃぁ、とハードリンクを張ろうとするが、Fat32 でフォーマットされている SD カード上ではハードリンクが張れない。
ということで、SD カードを NTFS でフォーマットし直す。→SDカードをNTFSフォーマットする
で、その SD カード上でハードリンクを張れば、ちゃんと動く。

# cd /usr/bin
# ln /usr/lib/lapack/cygblas-0.dll cygblas-0.dll
# ln /usr/lib/lapack/cyglapack-0.dll cyglapack-0.dll

kobo glo 買ったよ

蓋,開けたよ.
参考は,こちら.

で,外から telnet が通るようにしてみた.
参考はこちらだが,注意があるkoboが来た - kobo
このサイトでは kobo (多分,touch) が使われていて,kobo glo とは少し仕様が違う.
microSD はただ引っこ抜くだけだし,4GB だし,DD for Win からは認識しないし.
なので,Linux から mount していじること.

リンク先のコピーだけど,まぁやったこと.

  • Ubuntu on VBox から microSD をマウント.
    • VBox のインストールは省略.
    • デバイスから,USB デバイスのmicroSDを選択.
    • どうせ最初は dd で吸い出すだけなので,念のため umount しておく.
  • コピー
    # dd if=/dev/sdb of=backup

    デバイス名は df とかで確認すること.3つパーティションがあるけど,焦らない.

  • /rootfs/etc/init.d/rcS へ,ターミナルが使う pts デバイスをマウントさせる.
    hostname kobo
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    

    1行目の hostname がなかったら,どうなるかは調べてない.

  • /rootfs/etc/services でコメントアウトされているポートとサービスの対応を認識させる.
  • /rootfs/etc/inetd.conf で ftpd と telnetd のコマンドを書く.
    ftp stream tcp nowait root /bin/busybox ftpd -w -S  /
    telnet stream tcp nowait root /bin/busybox    telnetd -i

    busybox へのリンクを /rootfs/bin 辺りに作っておけばいいじゃないか,という気がせんでもないが...
    各オプションの意味は,-w: アップロード許可,-S: /var/log/ftpd へ出力,-i: inetd 経由で起動,らしい.

  • /rootfs/etc/inittab で inet の起動コマンドを記述.
    ::respawn:/usr/sbin/inetd -f /etc/inetd.conf
    参照先のコマンドには typo があるので注意.

追記:
結局,swap 領域を作りたくて,KoboFW2.2.1Patch を拾ってきて入れちゃった.

追記2:
4GB のオリジナルイメージを 32GB の SanDisk Ultra Speed に DD でつっこもうとしたら,1時間たっても終わらんとか,鬼過ぎるほど時間かかる.
メインストレージの差し替えを考えてる人,マジ注意だぜ.

Word Press の設定

導入時の注意点

インストールは解凍するだけなので簡単.
mysql を展開しておわりかと思いきや,落とし穴があった.

  • mod_php を使う場合,フォルダ配下のオーナーを www-data とかにしておく.
  • 真っ新な wordpress を入れることにする場合,テーマとかプラグインとかが入ってなくて動かないので,バックアップの DB をインポートする前にとりあえず新規インストールを完了させてしまって,テーマとプラグインは入れておく.
  • プラグインやテーマのインストール時に FTP 接続情報を求められる場合,define('FS_METHOD','direct');を wp-config.php に入れる.
    多分,現象から推測するに,サーバーにプラグインを pull しにいくよう動作を変更させるのだと思われる...多分...

DB 構成について

  • wp_users,wp_usermeta はユーザー情報.とりわけ wp_users にはパスなんかも hash をかけて保存されている.
  • wp_terms,wp_term_* は,タグとかカテゴリとかリンクグループなどの名前・slug・分類・記事との関係を保存したもの.
  • wp_options は,プラグインとかの設定を保存したもの.消したプラグインの設定も残っているので,ゴミが多い.新規に入れ直して綺麗にしたい時にはバックアップ不要.
  • wp_posts は記事,wp_postmeta は記事内からのメディアファイルの参照や更新ロックの情報など.
    更新ロックの情報は削除しても問題なさげ.詳しくは,[WordPress] postmetaテーブルの_edit_lastと_edit_lock | きほんのき
    要は,meta_key="_edit_lock" に格納される UNIX タイムスタンプと,meta_key="_edit_last" に格納される最終更新ユーザーのユーザー ID は消しても構わんということ.
  • wp_comments はレス,wp_commentmeta はコメント削除などの情報.
  • 他は,そのまんまなので省略.

プラグインとか

  • WPTouch は, ver 1.9.5 以降は投稿できないバグがあるので,1.9.42 以前とすること. (1.9.4.2 の間違いではない.各人で readme.txt を読むこと)

また追記します…

BIND9 で DNS サーバ

昔,自鯖のwebサーバ化 という記事でちらっと書いたが,改めて再インストールしたマシンに書こうとすると,書けなかったので,調べ直した.

named.conf

named.conf から include しているファイルの設定も含む.

記述箇所 項目 tips とか
options version named が返す version 情報を変更する場合に指定.教えたくない場合に書く.
version 情報を調べ方は,

# dig @localhost chaos txt version.bind

localhost のトコは,調べたいサーバー名.

allow-update DNS の更新の許可をするか否か. 拒否したい場合は,
``allow-update {none;};``
zone zone ファイルを指定.
順引きの場合

zone	"domain.com"	{
	type	master;
	file	"path";	// options に記述した directory からの相対
};

逆引きの場合

zone	"x.y.z.in-addr.arpa"	{ // リトルエンディアン的表記
	type	master;
	file	"path";
};

zone ファイル (順引き)

記述箇所 項目 tips とか
$ORIGIN 記述対象のドメイン.
以降に,全く同じゾーン名を書く場合,@ と記述を略すことができる.
また,ホスト名を記述する時に,host と記述した場合,host.$ORIGIN を意味する.
$ORIGIN の末尾には . (ピリオド) を忘れないこと.
$TTL キャッシュの有効期限.このサーバーを参照する他のサーバーが,有効期限として活用する.
DNS が死んでも,この時間くらいは保持してもらえるかも知れない. (後述の をより長く指定していた場合)
SOA レコード (概略) そのゾーンの記述のトップに書くレコード.
例はこんな感じ.

@ IN SOA     (
	
	
	
	
	
	)
このゾーンのプライマリー DNS サーバ.A レコードで記述されたものを書くこと.
責任者のメールアドレス.アドレスの @ は . (ピリオド) で記述すること.@ より前に . (ピリオド) を使っている場合,\ (バックスラッシュ) でエスケープすること.
ゾーン記述のバージョンを示す通番.yyyymmddnn (nn は 01 からの通番) で書くのが一般的.前回更新より小さい数字だと,ちゃんと記述が伝播しない.間違えてデカすぎる数字を指定した場合は桁溢れさせてリセットするらしいが,その時に調べることにする.
このサーバーを参照するサーバーが,この数値毎に更新確認に来る. が増えていたら,更新をかける.
前回更新が失敗した時に,リトライするまでの周期. の約数を指定するらしい.約数を指定しなかった場合,落ち続けた時にプロセスが増えるのだろうか?試すのに時間かかりまくるので試さないで,言いつけに従うことにする.
更新が失敗し続けた時に,キャッシュを破棄するまでの期間.$TTL との値が違う時,どちらが優先されるかは不明.
ネガティブキャッシュ (aaa.domain.com が定義されてなかった時,「aaa.domain.com は未定義」という情報のキャッシュ) を保持する期間.
その他のレコード (概略) 記述は,

host	IN <レコード種別>	definition

という感じ.
NS:そのドメインのネームサーバーを記述.必ずしも, で指定したサーバーを記述する必要はない.
A:host -> IP addr の記述をする.
CNAME:別名の指定.
MX とかその他:とりあえず使う予定がないので,略.

zone ファイル (逆引き)

順引きで,AレコードがPTRになったと思えばOK.

チェック

named.conf の記述のチェックは,# named-checkconf [PATH] で行なう.
zone ファイルの記述チェックは,# named-checkzone domain PATH で行なう.
逆引きの場合,domain には x.y.z.in-addr.arpa を指定する.

resolv.conf への反映

resolv.conf の修正を忘れないこと.
ubuntu を新しいものにしたら,dhclient.conf の domain-name-servers とかをコメントアウトしても書き換えされてしまうようになった.
なので,/sbin/dhclient-script を書き換えることにした.
基本的には,resolv で出てくる行をコメントアウトするか,make_resolv_conf() を役立たずにすれば OK.
if 文の中に resolv の行しかないトコをコメントアウトする場合は,if 文ごとコメントアウトすること.
resolv.conf を普通のファイルにしたら,networking の restart でエラーを吐くようになったので,/etc/resolvconf/resolv.conf へのシンボリックリンクにした.元が何だったかは分からんが,まぁいいだろう.

パナソニック P-01D の root 奪取

追記
Superuser.apk が正しく動かなかったので,対策をとった.

症状:

  • バイナリの su は正しく動作するため,adb shell の中で su はきく
  • アプリから Superuser.apk が呼べず,su を取得するダイアログが表示されない

対策は,下記でも参照している,P-01Dをroot化する - ごりぽんソフトウェア のコメント欄の uru さんの報告を頼りに,

  1. Superuser.apk を入手する.(hadacchi は HT-03a から抜き出した v3.0.4 を使った.最新のでも動きそうだが,容量が大きいのでやめた.)
  2. P-01D の /system/app/Superuser.apk を消す.
  3. リブートし,/system/app へ手動で Superuser.apk を配置する.

Clocksync で時刻合わせをしようとすると,su 権限を取得するダイアログが表示され,その後正常に動作することが確認できた.
原因はよく分からん.

なお,adb push が通らず Superuser.apk の再配置でうまくいかないかもしれない.
SD カードへ一旦コピーして,shell からコピーすること.


ドコモポイントを使って,2,100円で手に入った.
下に書いてあることをやって,購入から5時間で保証対象外の端末にしてしまった.
高いものではないので,マネして文鎮化したら,買い直すこと.hadacchi は責任もたない.

P-01D の特徴

  • 妙に安い,android 2.3 スマホ
  • 安定版と呼べそうなカスタム ROM は,まだなさげ.
  • 本体メモリが小さい… といっても,これまで使ってた HT-03A よりも多い 340MB ある.いらんものを消せば,問題なし.
  • スペックが低い… らしいけど,HT-03A より百倍マシ.いらんものを消せば,問題なしになりそう.
  • 画面が小さい… HT-03A よりも横幅が狭い.使ってみると不満出るかも?
  • 航空機モードで Wi-Fi が動かない… これは,セルスタンバイ問題が現れるので,痛い.仕方ないので,ガラケーに入れてた SIM を差して,ケータイとしても使ってみることにする.不満が出るかは不明.

ということで,いつも通り root を取って,いらんアプリを消す.

root 奪取

基本は,P-01Dをroot化する - ごりぽんソフトウェアで公開していただいている,ツールを使う.
adb は,公式頒布のものと異なるものを使うらしいと 2ch 情報にもあったので,間違いが起こらないよう「_run_me.bat」は,

set ADB=.\adb
...
(以降の「adb」を「%ADB%」に書き換え)

みたく,ちょっとだけ触った.
で実行したが,解説にあるドライバインストールのダイアログも出ず,動かない…
仕方ないのでデバイスマネージャからandroid-sdkのドライバを入れる.
その後,1回目はSDのマウントに失敗し,バックアップは取れないまま,本体にsuコマンドは追加された.
adb shell を叩いても プロンプトが「#」にならない.(su すれば良いことに後で気付いた.)
なので,念のためもう一回実行してみた.

不要アプリの削除

容量にあまり余裕がないので,不要アプリは全て adb pull で引っ張り出して (sdcard に mv がうまくできなかった) 本体からは削除してみた.
↑df するまで知らなかったが,/system と /data は別パーティション.
消したアプリの一覧は,apk 名で,下記ども.
随時消していたので,pm list packages -d -f の出力はない.
他にも GooglePlus だとか navitime だとか壁紙系だとか,消す候補はまだまだあるものの,気力不足でもう力尽きた.
今後は,battery use を見て,使ってないものを消すことにする.

  • AreaMail.apk
  • BeeTV.apk
  • BookShelf_preset_ver092.apk
  • Customapp_DLApp_20110621.apk
  • DocomoMarket.apk
  • Econavi.apk
  • EconaviManager.apk
  • Email.apk
  • EstarAP1DL.apk
  • Evernote_launcher_docomo.apk
  • FuturePlus.apk
  • FuturePlusProvider.apk
  • GREEforP.apk
  • GenieWidget.apk
  • GoogleQuickSearchBox.apk
  • iChannel.apk
  • Koe_no_Takuhaibin_DL.apk
  • MakerSiteLink.apk
  • ManualDownloaderP01DNewIcon.apk
  • Papercraft.apk
  • PhoneBookCopy.apk
  • PhoneCall.apk
  • RakutenGatewayDownloader.apk
  • Shortcut.apk
  • SyncMLApp.apk
  • Talk.apk
  • Twitter_release.apk
  • VPL_Android_dcm_Rel_Signed.apk
  • WeathernewsTouch.apk
  • auction_downloader.apk
  • dmapnavi_navi.apk
  • docomoAccountAuthenticator.apk
  • docomo_market.apk
  • gnavi-20110909.apk
  • installer.apk
  • mai.apk
  • mcd_pre2_signed_ver202.apk
  • melodycall.apk
  • mixi_downloader.apk
  • nttdocomo_gs_utility_downloader_v100_20110720.apk
  • spmode_mail_downloader.apk
  • toruca.apk

WebDAV + SSL + SNI + SVN

WebDAV+SSL+SNIを進行中。
SSL+SNIの設定は、通常通り。
WebDAVは、

a2enmod dav
a2enmod dav_fs

とした上で、site-enabled にある記述に、SSLを行なうSNIの設定を記載。
dav_fs.conf で設定している事例を良く見るが、SNI で動かすためには VirtualHost ディレクティブで記載しないといけないので、site-enabled からリンクしているサイト設定に記載した。
なので dav_fs.conf はこんな感じで小さい。

DAVLockDB ${APACHE_LOCK_DIR}/DAVLock
DAVMinTimeout 600

で、サイト設定はこんな感じ。


        ServerName host.domain
        ServerAdmin user@domain
        DocumentRoot /webdav
        SSLEngine on
        # 他、SSLの設定とか

        
                DAV On
                Options Indexes
                SSLRequireSSL
                # 他にdigest認証とかここに書いてもいいし、.htaccessを置いてもいい
        

現在、WebDAVクライアントで動作確認済。Windowsファイルシステムから直接アクセスするのは諦めた。

今後の計画

  • DAV+SVN で、SVN over SSL を通す
  • WPのspam投稿の分析プラグインの作成
  • 最初は、WPのダッシュボードから、手動でのアク禁適用
    • 投稿をフックしてスパムフラグのあるものは別DBにも格納
    • DBには、IPを8bitずつのアドレスに分割して、格納?
    • ネットマスクの短さとspamアクセスの多さの閾値から、自動的にアクセス拒否をさせる
    • 拒否後も403のアウトプットでphpを呼び出して、投稿されたのと同じ扱いでアクセス数をカウント
    • アクセス数の増により、長いネットマスクでアク禁した複数のアドレスを統合するなど