skkime で半角カナを入力できなくなった時の対処

skkime では、キーマップを変更してユーザー定義にすると、C-q で半角カナへ変換したり、半角カナモードに入れなくなってしまう。
参考→skkime 1.5 で [Ctrl]+[q] 問題(半角カナ)に立ち向う 仁義偉王のブログ/ウェブリブログ
まれに、(女の子に可愛い顔文字を送る時とかに)半角カナが必要になることがあるので、入力できないと困ってしまう。

というわけで、リンク先にもある方法を使えばまた入力できるようになる

レジストリを編集する。
HKEY_CURRENT_USER\Software\TT\Windows\CurrentVersion\SKKIME\1.5\Generic の MajorModeMap で、
0010行の左から2番目(0x11アドレス)の値を "59" とする。
レジストリの読込のため、ログオフ→ログオンとすることで、C-q が復活する。
(Win7の場合、プロセスを再起動してもOKだと思うけど、バックグラウンドプロセスを再起動するのがWinは面倒臭いのでオススメしない)

sshd 設定メモ

設定したものの中で知らなかったものや,設定してないけど man を読んで気になったものをメモ.
ssh v1 は使ったことないので,知らない.

設定項目 意味とか
Port セッションを受け付けるポートの指定.複数行記述することで,複数のポートで待てる.
UsePrivilegeSeparation sshの子プロセスの権限をユーザー `sshd' (yesの時) とするか,`root' (noの時) とするか.
LoginGraceTime ログインプロセスのタイムアウト.これ以上時間が経過してもユーザー名とか入れなかったら落ちる.
StrictModes 鍵の置いてあるところ (/home) の o に w 権限が付与されていたら拒否する.
RSAAuthentication ssh v1 の RSA 公開鍵認証の許可.
PrintMotd /var/run/motd の中身をログイン時に表示するか否か.yes だと表示するが,ログインメッセージが 2回表示されてしまう場合があるらしい.
TCPKeepAlive (ssh の man より)
(ClientAliveCountMax の項より) The TCP keepalive option enabled by TCPKeepAlive is spoofable.
(TCPKeepAlive の項より) Specifies whether the system should send TCP keepalive messages to the other side. If they are sent, death of the connection or crash of one of the machines will be properly noticed. However, this means that connections will die if the route is down temporarily, and some people find it annoying.
つまり,暗号化セッションの外で ack を投げる設定であって,途中経路で 1 回途絶えたら落ちて,ack の乗っ取りができるというもの.
ClientAliveCountMax (ssh の man より)
If this threshold is reached while client alive messages are being sent, sshd will disconnect the client, terminating the session. (中略) The client alive messages are sent through the encrypted channel and therefore will not be spoofable.
つまり,この数だけ ack が落ちたら切断するよ.TCPKeepAlive と違って乗っ取りされませんよ.という keepalive のこと.
ClientAliveInterval ClientAliveCountMax で言う ack が落ちる,の定義秒.
MaxStartups 認証セッションの許可数.x:y:z の形式で指定するもので,x セッションまでは 100% 受け付けるが,x+1 セッションからは確率 y で拒絶し,z セッションに達するまで拒絶率が線形に増加し,z セッションに達した後には全てのセッションを拒絶する,というパラメタ.
MaxAuthTries 1回の接続における認証のリトライ数の上限.
MaxSessions ssh は 1 接続で複数セッションを貼って通信ができ,その上限.具体的に,どのように動作に効いてくるかは不明…

あんま設定を載せたくないので,具体的にどうしてるかは秘密だけど,かなり固めに設定したと思う.
毎回,設定後に sshd を restart して,再接続を試験する時は緊張するぜ…勿論,既設のセッションは 1 つは残してテストするけど…接続できなくなった時の事を考えると怖い.

Ubuntu カスタマイズ

apt-get upgrade で出てきたパッケージ(apport)が聞いたことのないものだったので,調べたついで.
Ubuntu Server では関係ないかも知れんけど.
Ubuntu 12.04 LTS の便利なカスタマイズ方法 » Libre Free Gratis! | Libre Free Gratis!

それにしても,1分くらいで再起動してくれた我が家の Ubuntu Server 12.04 LTS … 早い.

2013/1/27 追記するよー.

apt on ubuntu

sources.list 作りはこちら → Ubuntu Sources List Generator

apt-get update のエラーについて.

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used.
GPG error: http://extras.ubuntu.com precise Releas: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 16126D3A3E5C1192
W: Failed to fetch http://extras.ubuntu.com/ubuntu/dists/precise/Release

なんか,上みたいな GPG 鍵でエラーが出たら,これ.

# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 16126D3A3E5C1192

そうしたら,普通に apt-get update が通る.

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」をつける.
ポートはいずれも標準のはず.