Ubuntu Server の auth.log に定期的に出力されるログ

我が家のサーバーでも、この記事とモロに同じことが起こっていた。
cron と anacron | ちりぢりな記憶の寄せ集め
もうひとつの cron | ちりぢりな記憶の寄せ集め

17分のログは記事の通りで、/etc/crontab に記載された、/etc/cron.hourly を呼び出すルーチンのログだということが分かった。
9分と39分のログも記事の通りで、/etc/cron.d/php5 に記載されたルーチンのログっぽい。
なお /etc/cron.d/php5 のログは、php5 の GC らしい。sessionとgc [wiki.catatsumuri.org]
ということで、今回は意外とあっさり分かって良かった。

WinSCP を使って Win から Linux サーバのバックアップ

前提:

  • Linux サーバを多重化したり RAID を組む予算がないために,シングル構成をとらざるを得ない.
  • Win マシン上には大事なデータがあるので多重化している.
  • Linux サーバには,SSH 公開鍵を使った入力レスの SSH セッションが疎通.
  • Win マシン上には WinSCP 導入済.

準備1 Linux サーバ

バックアップしたいパスを決定し,アーカイブを自動化.
例)cron 利用

# crontab -l
0 10 * * * rm /bkup/var.cache.bind.zip;zip -P `cat ZIPPWDFILE` -rq /bkup/var.cache.bind.zip /var/cache/bind
0 40 * * * mysqldump -u MYSQLUSER -p`cat MYSQLPWDFILE` --opt DBNAME --net_buffer_length=8000 | gzip > /bkup/mysql.sql.gz

準備2 Winマシン

  • WinSCP で動作させるスクリプトの作成.
    例)ファイル名「backup_script」とする.

    open PAMUSER@host.domain -privatekey="c:\PATH\.ssh\id_rsa.ppk"
    cd /bkup
    lcd c:\STORAGEPATH
    get var.cache.bind.zip mysql.sql.gz .\
    exit
    
  • WinSCP を呼ぶスクリプトの作成.
    例)ファイル名「backup.bat」とする.

    c:\PATH\winscp437\winscp.com /script=c:\PATH\backup_script
    

実施

  • backup.bat を実行する.

追記(Feb 13 2013)
info-zip の場合, –f オプションで差分だけ上書きできるよ!(新規ファイルの追加はなし)
更新(上書き+新規追加)したい時は,–u オプションでいいよ!
消えたファイルはアーカイブからも消したい時は,–FS オプションでいいよ!
–x オプションで除外できるよ!
除外リストでワイルドカードを使う時は,\ でエスケープしないといけないよ!

apache2 の設定メモ

毎回,OS を入れ直す度に忘れるので,今回こそはきちんとメモるぞー.
記事の趣旨が趣旨なので,この記事は随時アップデートされると思う.

前提

LAMP サーバが入った状態で Ubuntu server をインストールしたことが前提.
自分しか使わないサーバなので,mod_php5 で勘弁する.
(この後の予定) SSL 対応と,vhost 対応.←済

設定

  • dir.conf を編集して,いらん index ファイル指定を消す.
  • userdir を使うので,有効化する.
    # a2enmod userdir
    良く考えたら,VirtualHost を使うので,なくて良い気がする.
  • php5 自体は有効化されているが,userdir では無効になってるので,有効化する.
    php5.conf を開いて,userdir のディレクティブに記述されている,php_admin_value engine Offをコメントアウト.
  • directory 内のファイルリストが見えるのは困ることがあるので,デフォルトオフにしておく.
    userdir.conf の Indexes を削除.
  • 多言語対応は,userdir.conf の MultiViews を有効にしておいて,hoge.html.ja hoge.html.en とかを用意する.
    ユーザーが hoge.html にアクセスした時,その人の言語優先度に従って表示するファイルが選択される.
    更新し忘れが多発しそうなので,管理はそれなりに考えないといかんかも.
  • favicon の設定に,rewrite モジュールを使う.
    # a2enmod rewrite
    ただし,RewriteEngine を使う場合,AllowOverride FileInfoと,Options SymLinksIfOwnerMatch辺りを
    許可しておかなければならないので,要注意.
  • DocumentRoot が /var/www とかになっているため,絶対パスで / から指定しているリンクが悉く死ぬ.
    DocumentRoot を変更しても良いけど,最終的に userdir でアクセスさせないので, sites-available に VirtualHost の設定を書いた方が良い.
  • VirtualHost ディレクティブの ErrorLog は,ログ出力先.
    LogLevel は,ログ出力レベル.指定するレベルはググること.
    CustomLog は,アクセスログの出力先.
  • VirtualHost ディレクティブでは,ServerName を指定しないと apache2 が warn を吐くが,
    設定していたとしても,サーバの hostname.domainname と一致していないと同様に warn を吐く.
    設定は,/etc/hostname を FQDN で書いてしまい,networking の restart でとりあえず動く.(←動かない時は,再起動したら動いたりする)
  • ServerTokens ディレクティブや ServerSignature ディレクティブは,conf.d/security に書かれているので,この後に読まれるよう記載する.
    ServerTokens では HTTP のヘッダの出力のサーバ情報の出力を制御でき (ErrorDocument も,この制御された token を出力する),
    ServerSignature ディレクティブでは ErrorDocument 下部のサーバ情報の出力を制御できる.
  • php のヘッダー出力の抑制は,php.ini で行なう.
    /etc/php5/apache2/php.ini の expose_php を Off とする.
  • digest 認証はモジュールをロードさせないといけない.
    # a2enmod auth_digest
  • deflate モジュールでファイルを gzip 圧縮して転送できるが,転送サイズがファイルサイズより大きいことがある.
    その時は,SSI とか PHP とかで include していないか思い返してみること…
    これでハマった.
  • SSL対応。
    署名要求ファイルを当該サーバ上で生成して、証明機関に送信して証明書が作成される。
    まずは、署名要求ファイルの作成から。

    1. 秘密鍵を作成する。
      openssl genrsa -aes256 2048 > server.key

      秘密鍵は、パスフレーズで保護する。
      server.key が秘密鍵。

    2. 秘密鍵を使って、署名要求ファイルを作成する。
      openssl req -new -key server.key > server.csr
      openssl req -new -sha256 -key server.key -out server.csr # sha-2署名を要求する
      秘密鍵のパスフレーズを求められるので、入力する。
      証明書へ埋め込みたい情報の入力が求められるので、入力する。
      とりわけ、Common Name は使いたい web site のホスト・ドメイン名と一致させておくこと。
      server.csrが署名要求ファイル。
  • 続いて、StartSSL を例にドメイン名の検証 (validation) を行なう。
    詳しくは、[無料 SSL 証明書 StartSSL を使う](http://futuremix.org/2009/02/startssl)などを参照。

    1. サインアップから名前とか住所とかを登録。
    2. クライアント証明書をインストール。(次回からのログインにはクライアント認証が必須)
    3. ドメイン名検証を通過させる。独自ドメインのメールか、ドメイン登録に使っているメールの受け取り環境が必要。
  • web サーバの検証を行なう。
    1. 登録済みサブドメインの失効は有料といわれたので、ここで手順は中止。HW 交換したら、全てのキーを保存しておかんといかんなぁ。。。
    2. 別ドメインを建ててみる.
      CSR ファイルを作る画面が出てくるが,ローカルで作成しているので skip する.
    3. トップレベルドメインは,検証済のドメインを選択する.
      次にサブドメインを入力させられるので,検証させたいサブドメインを入力する.
    4. Save Certificate という画面で,crt ファイルの中身が出てくるので,
      コピーして server.crt とかのファイル名でテキストファイルにペースト.
      改行コードは LF.
    5. 同じ画面からリンクされている「intermediate」と「root」の CA certificates をダウンロードする.
  • web サーバの設定
    1. /etc/apache2/ports.conf を編集し,mod_ssl.c のモジュール設定の部分に,
      NameVirtualHost *:443
      とか書いておく.Listen が書かれてなければ,Listen 443 も書いておく.
    2. これまで準備したファイルのうち,必要なものを配置.
      /path に放り込んだとすると,次のファイルが必要.
      /path/server.key
      /path/server.crt
      /path/sub.class1.server.ca.pem (← intermediate CA Certifications)
      /path/ca.pem (← root CA Certifications)
    3. SNI を定義しているファイル (site-enabled にあると思われる) の中で,
      ssl 用の設定を書く.
      その中で,配置したファイルを指定する.ついでに簡単な雛形も載せておく.

      
              ServerAdmin     MAIL_ADDR
      
              DocumentRoot    ROOT_DIR
              ServerName      DOMAIN_NAME
              SSLEngine       on
              SSLCertificateFile      /path/server.crt
              SSLCertificateKeyFile   /path/server.key
              SSLCertificateChainFile /path/sub.class1.server.ca.pem
              SSLCACertificateFile    /path/sslfiles/ca.pem
              
                      ...
              
              
                      ...
              
      
              ...
      
      
  • 上述のままだと,apache 起動時に server.key のパスフレーズを求められる.
    自動リブートとかさせていると問題があるので,解除する.

    # openssl rsa -in  server.key.org > server.key

-- 追記
いつからか,apache2 の再起動時に,以下のエラーを吐くようになった.
いろいろと対処しているうちに名前解決が怪しいと気付き,syslog を見て原因が分かった.
ホスト名を変更した時に,旧ホスト名を現ホスト名の CNAME にしたにも関わらず,ローカルに立てている DNS の SOA レコードとか NS レコードとかもろもろを書き換え忘れていたことが原因.

httpd: apr_sockaddr_info_get() failed for hoge.hadacchi.com
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

どうやらこれは,二つのエラーを意味しているようだ.
多分
1行目:ServerName の設定がないから自分で取ろうとしたけど,うまくいかないぜ!
2行目:なんか,ちゃんとした答えが得られないから,これこれを ServerName に使うぜ!
とうことなんだろうと思う.対応とその結果を書いておく.

  • 対処1:自分の使用しているホスト名 (# hostname -f で表示されるものの FQDN) を /etc/hosts の 127.0.0.1 の別名として併記する.
    ただし,今回のように bind の設定ミスがある場合は,hostname -f でエラーが返る.

    • 結果1:1行目のエラーのみ消え,2行目の 127.0.0.1 の部分が,/etc/hosts に設定したホスト名となる
  • 対処2:(VirtualHost を使っているとしても) httpd.conf あたりに,ServerName 定義行を追記する.値は,デフォルトで使いたいサーバ名.
    通常は,最初に apache に読み込まれる VirtualHost 名.

    • 結果2:対処1をしなくても,エラーが両方消える.
      ServerName の設定が静的に記述されているので,この一連の動作自体が発生しないのだと思う.
  • 対処3:localhost に DNS サーバを立てる.
    • 対処1,2をしなくても,エラーが両方消える.

regsvr32.exe

いつも忘れてしまうのでメモっておく。

SysWOW64 は x64 上で x86 をエミュレートするための仕組み。
SysWOW64\○○.exe は x86 エミュレータ用バイナリ。

なので、C:\Windows\System32\regsvr32.exe を実行してダイアログが表示されている状態でプロセスモニタを見れば x64 の regsvr32.exe が上がっているのが確認できるし、
C:\Windows\SysWOW64\regsvr32.exe を実行してダイアログが表示されている状態でプロセスモニタを見れば x86 の regsvr32.exe が上がっているのが確認できる。

サーバーバックアップ

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 ファイルを実行.

ドメインメールのサーバ移転

ドメイン管理に value-domain を使っており,メールのためだけにレンタルサーバーの契約を継続するのもバカバカしいので,今回移転することとした.
とはいっても,メールサーバーを自分で運用するのは面倒くさい.
そこで,value-domain でドメイン管理をしていると勝手についてくる xrea のフリースペースで運用を行なうことにした.
自分でベタに設定するのと,web UI で設定するのとではちょっと勝手が違うので,メモとして書いておく.

DNS レコード更新

value-domain の DNS レコードの更新ページで,「当サービス内サーバーの自動DNS設定」を使って基本のレコード設定を見る.
今回は,メールサーバーのみを使いたいので,1行目に入る
a * xxx.xxx.xxx.xxx
の行を,
a @ xxx.xxx.xxx.xxx
とした上で,メールサーバーの定義を
mx @ 10
とし、 必要なホスティングサーバーへのサブドメインを定義する.
未定義のサブドメインへのアクセスは,全部レンタルサーバーに流したいので,こうした.別に,a * のままでも良いのであれば,変更する必要はない.

ドメインメール設定

(DNS が反映されないと,次の工程は進まないので注意)
value domain のメニューの「サーバーアカウントの登録・管理・購入」から,設定したいドメインのメールの設定に飛ぶ.
このサービスでは,POP や web メールを使う場合,メールアドレス毎に異なるユーザーアカウントが割り当てされるので,面倒を避けるのであれば,マスターアドレスを1つ決めて,サブアドレスは全てマスターアドレスへ転送するのが良い.
マスターアドレスは「POP/WEB受信のみ」を選択しサーバー容量(フリーの場合は50MB)を選択する.
サブアドレスは「転送のみ」を選択した上で,マスターアドレスを転送アドレスとする.(私は,対外アドレスを変更する度に MUA の設定を変更したくないので,外に出すのはサブアドレスのみにしている)

MUA 設定

平文通信で良ければ,ドメインメール設定画面のパスワード欄の右に出る「確認」リンクから表示されるサーバーに対しPOPを飛ばす.
SSL 通信にしたければ,サーバーの FQDN のうち,ピリオドをハイフネーションに変換したアドレスの後ろに,「.value-domain.com」をつける.
ポートはいずれも標準のはず.

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時間たっても終わらんとか,鬼過ぎるほど時間かかる.
メインストレージの差し替えを考えてる人,マジ注意だぜ.