サービス選定〜OSのインストール | |
サーバー類のインストール | |
nginx | |
さくら de Ubuntu | |
>>> | サーバーの引越 |
バックアップ | |
Let's Encrypt |
配送は止まるがSMTPは生きているので、やってきたメールはキューに溜まって配送待ちになる。
うちの構成の場合、基本的には/usr/local/etc
の下。
コミット漏れがないかどうか確認
ホームディレクトリと、うちの場合、リポジトリは/usr/local
の下に固めてあるので、とにかく/usr/local
の下をよく見て転送する。
これはssh
を使ってtar
で引っ張ってくるのが早いが、新旧両方のホストでroot
になる必要がある。
ところが、root
でのログインを許可していないと、sudo
かsu
でroot
になる必要があり、パスワードで困ってしまう。
いろいろ方法はあると思うが、ここでは名前つきパイプで解決してみる。
old-host$ su old-host# cd /var old-host# mkdir priv old-host# chmod 700 priv old-host# chown user priv old-host# cd priv old-host# mkfifo tar old-host# chmod 600 tar old-host# chown user tar old-host# cd /home old-host# tar xfvz /var/priv/tar *
new-host$ cd /home new-host$ sudo ssh user@old-host "cat /var/priv/tar" | tar xfvz -
UNIXってほんとよくできてる。
最初に作ったアカウントと同じ名前のアカウントがあると上書きされてしまうので、今あるアカウントを取っておきたい場合は/home
をどこか適当な場所に作っておいて、init 1
でシングルユーザーモードになってからちまちまとmv
すればよい。
逆に、最初に作ったアカウントをここで消してしまう場合、sudoers
に自分を登録しておかないと二度とroot
になれないので注意。
root
にパスワードがないとレスキューディスクのお出ましになる。
.ssh
の対応
旧ホストと新ホストに関わるエントリを変更する必要がある。
localhost
も変わる点に注意。
実際には旧ホストから持ってきた.ssh
は.ssh.old
とかにリネームしてしまって、新ホストでさっきまで使ってた.ssh
を持ってきたほうが早い。
スタッフじゃないユーザーがいる場合は適宜考える必要がある。
とりあえずlocalhost
をコメントアウトする、とかかなー。
.profile
とか、.bashrc
とか。
これは手マージするしかない。
カスタム設定だけ別ファイルにしておいて、source
するようにした方がいいかも。
あとは.google_authenticator
とかのなくすとヤヴァそうなやつ。
root
さんのホームディレクトリ
案外大事なファイルが転がってたり。
SOA・NS・MXレコードや、必要に応じてAレコードも書き換える。 そして、新旧両方のサーバーで新しいデータベースファイルをリロードする。 これを忘れるとDNSのシントーに時間がかかってしまう。
この時点で、キャッシュのTTLが満了したサーバーから、新しいサーバーのレコードを返すようになります。
メール配信を再開する前に、旧ホストのメール配信を、強制的に新ホストへのリレーに設定します。
qmailならばlocals
を空に、virtualdomains
を削除した上で、smtproutes
ファイルに
example.jp:new-host.example.jp .example.jp:new-host.example.jpと書けばOK。
locals
・virtualdomains
を殺して全部リモートに振り向けていたのを元に戻します。
SMTPを止めていた場合は動かします。
旧ホストのキューに溜まっていたメールは新ホストにリレーされます。 新ホストのキューに溜まっていたメールは新ホストのメールスプールに配送されます。
システムcrontab
とユーザーcrontab
。
システムcrontab
は/etc/crontab
と、/etc/cron.d/
以下に、また、/etc/cron.daily
なんかの下にシェルスクリプトが入っている。
一度ls -ld /etc/cron*
してみた方がよい。
ユーザーcrontab
は/var/spool/cron/tabs
あたりにある。
crontab
に書かれているコマンドが実行できるようになってることも確認。
旧ホストのcrontab
は必要に応じて無効にしておく。
使ってるようなら。
旧ホストのOSを入れ替える前に。
/etc
の下と、/usr/local/etc
の下。
OSアップデート後にSSHで同じ鍵を使うなら、鍵はここに入っている。
/var
の下。
Apacheのアクセスログとかね。
結局、解析してないんだけれども。
ただ、DNSを切り替えた直後は両方のホストにアクセスが来るからなんとも。
リバースプロキシみたいにして新ホストに転送してもいいんだけど、そうすると結局ソースIPアドレスが取れない気がする。
サーバーを機能名(git.example.jp
)で指定している場合は、DNSキャッシュのTTLが切れるまで待てばよいが、切り替わらないときはとりあえず固有名(host1.example.jp
)を指定してしのげばよい。
CVSはこんな感じ。
Subversionはsvn switch URL
で変更できたはず。
gitはgit remote set-url origin URL
で変更できる。
引越の機会に、dot-qmailファイルに少し手を入れました。
普通は~/.qmail
やら~/.qmail-owner
やら、ホームディレクトリ直下にファイルを作りますが、拡張アドレスが増えてくるとls -a
したときに.qmail
だらけになって見づらいのと、Gitなんかで管理するときもサブディレクトリにまとまってないとやりにくいので。
仮想ドメインを運用していて、locals
とvirtualdomains
の衝突というか、別名ができるのを防ぐために、locals
は空にしてあります。
つまり、実ドメインも仮想ドメイン扱いにしていて、そうすると実ユーザーをqmail-getpw
で扱うことができないのでqmail-users
で扱っています。
もし、virtualdomains
に
domain.example.jp:domain
と書いてあったとすると、users
は普通はこう書きます。
=domain-user:user:uid:gid:/home/user::: +domain-user-:user:uid:gid:/home/user:-::
この場合、
user@domain.example.jp のdot-qmailは | ~/.qmail
|
user-ext@domain.example.jp のdot-qmailは | ~/.qmail-ext
|
になります。
これを
=domain-user:user:uid:gid:/home/user:/:@: +domain-user-:user:uid:gid:/home/user:/::
こう書くと、
user@domain.example.jp のdot-qmailは | ~/.qmail/@
|
user-ext@domain.example.jp のdot-qmailは | ~/.qmail/ext
|
になります。
このとき、~/.qmail/@-owner
をtouch
しておくと、転送のときに表書き差出人がuser-owner@domain.exampe.jp
になりますが、このアドレスは~/.qmail/@-owner
ではなく、~/.qmail/owner
の配送指示に従います。
つまり、~/.qmail/owner
もtouch
しないといけません。
これはちょっとつまらないので、~/.qmail/@-owner
のためのルールも作ります。
ついでにVERP用のルールも。
=domain-user:user:uid:gid:/home/user:/:@: =domain-user-owner:user:uid:gid:/home/user:/:@-owner: +domain-user-owner-:user:uid:gid:/home/user:/:@-owner-: +domain-user-:user:uid:gid:/home/user:/::
これで、
user@domain.example.jp のdot-qmailは | ~/.qmail/@
|
user-owner@domain.example.jp のdot-qmailは | ~/.qmail/@-owner
|
user-owner-ext@domain.example.jp のdot-qmailは | ~/.qmail/@-owner-ext
|
user-ext@domain.example.jp のdot-qmailは | ~/.qmail/ext
|
になります。
ただ、これだとuser-@-owner@domain.example.jp
宛のメールが~/.qmail/@-owner
の配送指示に従うので、このアドレスでもメールが届いてしまいます。
変なアドレスですが実際にqmail-inject
すると届きます。
fixme@fixup方式のメッセージIDの付加はこれを使っています。
それと、user-@domain.example.jp
宛のメールはdot-qmailファイルが~/.qmail/
(ディレクトリ)になってしまうので、default
を設定していない限り届きません。
対策として、通常の拡張アドレスにもプレフィックスを付けることにします。
.
や-
は使い勝手が悪い(前者は隠しファイル、後者はコマンドラインでオプションとして扱われる)ので_
を使うことにします。
=domain-user:user:uid:gid:/home/user:/:@: =domain-user-owner:user:uid:gid:/home/user:/:@-owner: +domain-user-owner-:user:uid:gid:/home/user:/:@-owner-: +domain-user-:user:uid:gid:/home/user:/:_:
これで、
user@domain.example.jp のdot-qmailは | ~/.qmail/@
|
user-owner@domain.example.jp のdot-qmailは | ~/.qmail/@-owner
|
user-owner-ext@domain.example.jp のdot-qmailは | ~/.qmail/@-owner-ext
|
user-ext@domain.example.jp のdot-qmailは | ~/.qmail/_ext
|
user-@domain.example.jp のdot-qmailは | ~/.qmail/_
|
になります。
user-owner-ext@domain.example.jp
宛のdot-qmail、~/.qmail/@-owner-ext
がなかった場合は、
~/.qmail/@-owner-default
~/.qmail/@-default
~/.qmail/default
の順に検索されます。
user-foo-bar@domain.example.jp
宛のdot-qmail、~/.qmail/foo-bar
がなかった場合は、
~/.qmail/_foo-bar
~/.qmail/_foo-default
~/.qmail/default
の順に検索されます。
~/.qmail/_default
は検索されないことに注意。
Copyright (C) 2018 akamoz.jp
$Id: moving.htm,v 1.5 2019/05/24 15:20:20 you Exp $