実PCを仮想PCに移行

投稿日: Leave a comment

実家PCをリプレイスしたときに引き上げてきた旧PCを処分するに当たって、念のためPCの中身を吸い出して保存することにした。

データは新PCに移してあるので、どちらかというとアプリとか環境とか。なので、実PCから仮想PCに移してみることに。仮想PCはoracle virtualbox、OSはwindows xp home edition。

HDDの吸出し

その名もDisk2vhdというのがマイクロソフトのページにおいてある。Virtual PC用に実PCからHDDのイメージを吸い出すものだが、vhdファイルはvirtualboxでも使えるので、これを使うことにした。

160GBのHDDのうち約30GB使用中。Windows XPはPC環境に合わせたHALが選ばれているらしく、そのまま移しただけでは起動しない可能性が大。”Prepare for use in Virtual PC”にチェックを入れておくと環境変化に対応させるためdisk2vhdがうまいことごにょごにょしてくれるらしく、ここではチェックを入れることにする。

上の画面だと保存先はローカルのディスクにしているけど、後で転送しやすいように他マシンの共有フォルダにする。

virtualboxの設定

まずは普通にwindows xpをゲストOSとなるように仮想マシンを新規作成。

HDDを指定するところで新規ではなくdisk2vhdを選ぶ。ただそれだけ。

起動とドライバのインストール

起動するとこんなブートセレクタが出てくる。HALを変えたのと元のが選べるようになっている。

最初の起動は念のためF8を押してセーフモードで起動。

起動したら、virtualboxお約束のVboxGuestAdditions.isoをマウントしてドライバ一式をインストール。

終わったら普通に再起動したらOK。

起動するたびにライセンス認証の画面が出るが、このGuest Addisionsを入れるまではぐっと我慢する。

ちなみに、ブートセレクタで追加されていた”Disk2vhd Microsoft Windows XP Home Edition”はboot.iniを見るとこんな感じで”/KERNEL=ntkernlpa.exe /HAL=halacpi.dll”が追加されていた。HDDを新しいパソコンにつなぎなおすときもこれを書いておくといいのかなと思った。

[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Disk2vhd Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn /KERNEL=ntkrnlpa.exe /HAL=halacpi.dll
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Home Edition" /fastdetect /NoExecute=OptIn

とりあえず今のところは普通に動いている。microsoft updateも問題なし。動作も元のPC (Pentium4 2.4BがMBの制約で1.8GHz動作) よりも軽く、むしろ快適。

というわけで、旧PCは心置きなく消去して処分できるようになった。

samba over ipv6

投稿日: Leave a comment

かなり昔の続き。

DNS周りを整理していて、sambaサーバのホスト名をipv4とipv6で同じにしたら例の問題が再発。

もしやと思ってsmb.confのhosts allowに <prefix>::/64 を追記したら問題が解消した。

単に、名前を引く→AAAAが返ってくるのでipv6アドレス:445にアクセス→hosts allowにないから拒否 となっていただけっぽい。

これでしばらく様子を見てみる。

DNSキャッシュポイズニング対策

投稿日: Leave a comment

UDPを使うDNSで応答パケットを偽装してDNSキャッシュにウソデータを送り込む、いわゆるキャッシュポイズニング対策で、DNSサーバが権威サーバに問い合わせる際の送信元ポート番号をランダム化するというのがある。

で、自宅のDNSサーバをルートに問い合わせるようにしたときにどうなるのかを確かめてみた。

まずはプロバイダのDNSサーバをforwarderに設定したときの応答

> dig -x dig +short porttest.dns-oarc.net TXT
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"210.130.xxx.xxx is GREAT: 26 queries in 2.8 seconds from 26 ports with std dev 20098"

std dev 20098 で GREAT判定。(210.130.xxx.xxxはおそらくプロバイダのDNSサーバアドレス)

次に、forwarderを設定しない場合

> dig -x dig +short porttest.dns-oarc.net TXT
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"125.30.y.yy is GOOD: 26 queries in 3.1 seconds from 26 ports with std dev 1156"

std dev 1156 で GOOD と今ひとつな感じ。(125.30.y.yy はPPPoEで自宅に振られたアドレス)

BIND自体は最新のものを使っていてちゃんと source port randomization されているはずなので、少し考えてみた。

もしかしてもしかすると、NATが悪さしてるか?と思い、RTX810のNAT descripterをいじってみた。打ったコマンドはこれ。

nat descriptor masquerade unconvertible port 1000 if-possible

1000はPPPoE(IPv4)用のNAT descriptor の番号。

IP マスカレードで変換しないポート番号の範囲を設定する。
if-possible が指定されている時には、処理しようとするポート番号が他の通信で使われていない場合には値を変換せずそのまま利用する。

とのことなので、ポート番号に関してはNATでほぼ透過的になるはず。で、試してみた。

> dig -x dig +short porttest.dns-oarc.net TXT
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"125.30.y.yy is GREAT: 26 queries in 3.4 seconds from 26 ports with std dev 4859"

std dev 4859 で GREAT判定。少し良くなったけど、プロバイダのDNSサーバには遠く及ばない感じ。

NATが関係していることはわかったけど、forwarderを指定すればすべてうまくいくことも分かったので、named.confにはforwarderを書いておくことにする。

DNSSECの設定

投稿日: Leave a comment

忘れないようにリンクを張っておく。

@IT総合トップ > Master of IP Network > キャッシュDNSサーバのDNSSEC対応

最初から順を追ってトラストアンカーの設定をしたけど、使っているのがbind9.8なので options のところに

dnssec-validation auto;

と書くだけでOKというオチ。

一応、

> dig +dnssec jprs.jp

; <<>> DiG 9.6.-ESV-R5-P1 <<>> +dnssec jprs.jp
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23804
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
...

と、status NOERROR、ad flag でdnssecがちゃんと機能していることを確認。

CNAMEの注意点

投稿日: Leave a comment

CNAMEとAAAAを同じホスト名に設定できない件RFC1912に載っていた。

RFC1912の2.4章。

2.4 CNAME records

   A CNAME record is not allowed to coexist with any other data.  In
   other words, if suzy.podunk.xx is an alias for sue.podunk.xx, you
   can't also have an MX record for suzy.podunk.edu, or an A record, or
   even a TXT record.  Especially do not try to combine CNAMEs and NS
   records like this!:

           podunk.xx.      IN      NS      ns1
                           IN      NS      ns2
                           IN      CNAME   mary
           mary            IN      A       1.2.3.4

   This is often attempted by inexperienced administrators as an obvious
   way to allow your domain name to also be a host.  However, DNS
   servers like BIND will see the CNAME and refuse to add any other
   resources for that name.  Since no other records are allowed to
   coexist with a CNAME, the NS entries are ignored.  Therefore all the
   hosts in the podunk.xx domain are ignored as well!

   If you want to have your domain also be a host, do the following:

           podunk.xx.      IN      NS      ns1
                           IN      NS      ns2
                           IN      A       1.2.3.4
           mary            IN      A       1.2.3.4

   Don't go overboard with CNAMEs.  Use them when renaming hosts, but
   plan to get rid of them (and inform your users).  However CNAMEs are
   useful (and encouraged) for generalized names for servers -- `ftp'
   for your ftp server, `www' for your Web server, `gopher' for your
   Gopher server, `news' for your Usenet news server, etc.

CNAMEは他のいかなるデータと共存できません、特にNSと共存させると名前引けなくなりますよ、とな。

自宅ネットワークのダイナミックDNS設定

投稿日: Leave a comment

ここ

自宅サーバのIPv4アドレスはYamahaのネットボランチDNSサービスで使っているホスト名にCNAMEを向けて、IPv6アドレスはプロバイダから(半)固定で割当たっているアドレスをそのままAAAAにのせるつもり。

と書いてたけど、さくらインターネットのコントロールパネルから同じホスト名にCNAMEとAAAAを設定できない(AとAAAAは設定できる) ようで、仕方ないので MyDNS.jp の適当なホスト名に動的IPのAレコード、固定IPのAAAAレコードを設定して、rose.everblooming.netのCNAMEをMyDNS.jpのホストに設定した。

ここには結果は書かないけど、

> dig rose.everblooming.net a
> dig rose.everblooming.net aaaa

などとすればどんな感じになっているかわかるはず。

IPv4の動的IPアドレスはこんな感じのスクリプトをcronで4時間おきくらい(←適当)に回して更新する。IPv6は匿名アドレスを使っているので固定設定。source IPの設定が出来ればIPv6も動的IPにしたいところだけど、よくわからないのでまた今度。

# cat /usr/local/etc/update_mydnsjp.sh
#!/bin/sh

id=mydnsxxxxxx
pw=xxxxxxxxxxx

host=ipv4.mydns.jp
opt="-4 -q"

/usr/bin/fetch ${opt} ftp://${id}:${pw}@${host}/ > /dev/null 2>&1

一応、バックアップでネットボランチDNSの方にも登録。

日記の引越し完了

投稿日: Leave a comment

日記の引越しが完了しました。

旧URLへアクセスすると自動的に転送するようにしているので、ブックマークなりお気に入りに入れている人は、転送後のページ

https://snapshot.everblooming.net/

に変更してくださいな。

参考までに引越し手順。ここを参考にDBごと移しました。

(1) データベースをエクスポートしてPCに保存

さくらインターネット サーバーコントロールからphpMyAdminに入り、wordpressで使用しているデータベースを全選択→エクスポートを実行。

すると、PC上にデータベースファイルがダウンロードでされる。

(2) 新規データベースを作成

phpMyAdminでは新規作成ができないようになっているため、さくらインターネット サーバーコントロールで新規データベースを作成。データベースサーバとユーザー名・パスワードを記録しておく。

(3) サーバにSSHログインして、wordpressをお引越し

基本はディレクトリ丸ごとコピー。そのあと、wp-config.phpを編集してデータベースサーバの設定を新しいデータベースサーバのものに変更。

% tar cf - ./ | ( cd ../snapshot.everblooming.net/ && tar xvf - )

(4) wordpressのインストールとDBの初期設定

一度 https://snapshot.everblooming.net/ にアクセスしてwordpressのインストールとDBの初期設定を実行

初期設定といっても、次の手順で全部消すので何もしなくてもいいかも。

そもそもこのステップは不要だったりもするかも。

(5) データベースのリプレイス

再びphpMyAdminに入り、(4)でできたデータベースを一度全部削除して、(1)でエクスポートしたデータベースファイルをインポート。

(6) 最終確認

新サイトにアクセスしてデータが復元されていることを確認

これで一応日記としては移動完了だけど、コンテンツに書かれたリンクは旧アドレスのままだったりする。旧アドレスへのアクセスを自動転送しておけば問題ないけど気持ちが悪いので、投稿一覧で旧アドレスを検索して一つ一つ書き換えた。全部で70件くらいあった。

サイトの転送設定

投稿日: Leave a comment

wordpressの引越し(ドメイン変更)について調べていたらapacheのmod_aliasモジュールの機能で転送設定ができることが判明。

設定はいたって簡単。.htaccessに次の1行を書くだけ。

Redirect permanent /snapshots https://snapshot.everblooming.net/

これで旧アドレス、しかも /snapshots/xxx のxxxの部分も考慮して https://snapshot.everblooming.net/xxx に転送するようになる。

昔、別のサーバで日記を引っ越したときにこれと全く同じことをjavascriptで長々と書いてたのを思い出した。ちゃんと調べればおけばと今更ながらに思う。

ドメインを取得

投稿日: Leave a comment

前々からドメインをとりたいと思っていたけど、なかなかいい名前が思いつかずとれていなかったが、思いついたので昨日申請をした。

というわけで、この日記のアドレスが変更になりますが、wordpressでアドレスでドメインを変更する方法がすぐにわからず、追々作業します。

DBサーバは別になっているので、wordpress本体の方をそのまま移行すればいいはずではあるのだけど、いまいちやり方がわからず。

この辺を見るとダッシュボードでアドレス設定を変更してから、サーバ上でフォルダを移動すればさくっと変更できるようには書いてあるけど、自信がないのでバックアップを取りつつ作業する予定。はまってもここを見る限りは何とかなりそうには思えるけど。

ちなみに、新ドメインはレンタルサーバと自宅サーバで使う予定。今は自宅サーバはドメインなしで動いていて、ドメインありのFQDNがないと動かないデーモンがあったりと何かと面倒なので、何とかしたいと思っていた。

自宅サーバのIPv4アドレスはYamahaのネットボランチDNSサービスで使っているホスト名にCNAMEを向けて、IPv6アドレスはプロバイダから(半)固定で割当たっているアドレスをそのままAAAAにのせるつもり。

レンタルサーバの方は、IPv4は自動で設定してくれて、IPv6はここを見ると借りてるサーバはIPv6に対応してないみたいなので、しばらくはIPv4 only。順次IPv6に対応すると書いてあるのでそのうちAAAAを名乗るようになると思う。

emacs24のpackage管理

投稿日: Leave a comment

先日C++のコードを書こうとしたときに、自宅PCにまともなエディタを入れていなかったことを思い出して、Emacs24.2とgvimを入れた。最近コードを書くときはもっぱらgvimだけど、たまにemacsも使いたくなる。

で、windows用のemacsは今まで自前でコンパイルしていたけど、ライブラリの準備が面倒なので先人がコンパイルしたものを使ってみた。使ったのはここemacs-24.2-20120922.exe

ついでに、emacs24で使えるようになったといわれているパッケージ管理システムも使えるようにしてみた。

(1) ~/.emacs.d/init.el にこれを書く。

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
(package-initialize)

(2) Emacsを立ち上げて M-x package-list-packages を実行する

すると、こんな画面になる。

ここで、

  • “i”で、インストールしたいパッケージにマーク
  • “d”で、アンインストールしたいパッケージにマーク
  • “r”で、リストを更新
  • “x”で、インストール/アンインストールを実行

インストールした後は、init.elファイルを特にいじらなくてもインストールしたパッケージが有効になる模様。