カスタムOSインストールガイド - Ubuntu 16.04 – さくらのサポート情報 を見ながらインストールまでやる。

旧サーバと同じホスト名にしてDNSをふりかえたいが、DNS やホスト名まわりは最後にやる。

SSH の設定

手元からまず copy-id

$ ssh-copy-id user@ufhostname

リモートの設定をかえる

$ sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no
UsePAM no
$ sudo /etc/init.d/ssh restart
# 別のターミナルを開いて ssh できることを再度確認

Firewall の設定

ssh, http, https と mosh 用の udp ポートをあけておく (該当するソフトウェアをインストールすると勝手に空いたりするのだが念のため)

sudo ufw default deny
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 22
sudo ufw allow 60000:61000/udp

sudo ufw enable

必要なパッケージいれる

sudo apt-get install zsh gcc libncurses5-dev language-pack-ja git daemontools daemontools-run mysql-server ca-certificates cpio curl dnsutils imagemagick imagemagick-common irssi libcairo2-dev libcurl4-openssl-dev mime-support   nginx nginx-common nginx-full ntp ntpdate optipng pkg-config  rsync shared-mime-info w3m wget xz-utils xml-core zip libxml2-dev libtiff5-dev libssl-dev libsqlite3-dev libreadline-dev libpng12-dev  libpango1.0-dev libopenjpeg-dev libmysqlclient-dev libjpeg8-dev libgif-dev libfreetype6-dev libffi-dev cmake screen ruby-dev rrdtool libdb-dev postfix unattended-upgrades
sudo ln -s /etc/service /service

旧サーバから rsync

home ディレクトリごとまるごと移す

一時的に sudo で rsync をつかえるようにする

$ sudo vi /etc/sudoers.d/rsync
Defaults    env_keep += "SSH_AUTH_SOCK"
Defaults!/usr/bin/rsync    !requiretty
cho45    ALL=(ALL)       NOPASSWD: /usr/bin/rsync
 ||<

>||
## dry-run 
sudo rsync --dry-run -auvz -e 'ssh -i /home/cho45/.ssh/id_ecdsa' --rsync-path='sudo rsync'  --progress  /home/cho45/ cho45@160.16.210.51:/home/cho45/

ほかもうつす

/srv
/etc/nginx
/etc/postfix
# /etc/mysql 変更点がなかった。。。あらためて見直そう
/etc/letsencrypt
# /var/lib/mysql mysqldump でやった
# /service 手動でやる

意外とうつすのない?

h2o のインストール

git の HEAD を入れてるので再度コンパイルして /usr/local にインストール

cd ~/project/h2o
git clean -f
cmake -DWITH_BUNDLED_SSL=on .
make
sudo make install

ログファイルを /var/log/h2o に作るようにしてるが前もってディレクトリがないとしぬ

sudo mkdir /var/log/h2o

/etc/logrotate.d/h2o の設定

/var/log/h2o/*.log {
    daily
    missingok
    rotate 90
    compress
    delaycompress
    notifempty
    create 0640 www-data adm 
    sharedscripts
    postrotate
        svc -h /service/h2o
    endscript
}

perl のインストールしなおし

5.14.4 が gcc の関係?で入らなかったので、これを期に 5.22.2 に移行

perlbrew install perl-5.22.2 --as perl-5.22

前のマシンで perlbrew list-modules した結果を保存して cpanm にくわせてインストール。入らないやつが無視されるので、完全ではないがだいたい入る。

5.22 で動かなくなったコードを地味に修正したりした。

mysql

db ファイルだけ rsync したらいけるだろと思ったけど割といけなかったので、dump して restore する。mysql 自体のバージョンもあがってるのでまぁこのほうがよさそう。

mysqldump -uroot --routines --all-databases --flush-privileges | ssh cho45@160.16.210.51 'mysql -uroot'

たいしてデータ入ってないので一瞬。--routines でユーザテーブルもコピーしている。 --flush-privileges をつけないとコピーしたユーザデータが反映されないのでつけとく。

動作確認

160.16.210.51 www.lowreal.net
160.16.210.51 lowreal.net
160.16.210.51 cho45.stfuawsc.com
160.16.210.51 coqso.lab.lowreal.net
160.16.210.51 no-real.net
160.16.210.51 block.lab.lowreal.net

みたいなのを /etc/hosts に書いて検証。証明書も転送して設定済みなので DNS だけ書きかえればうごいてくれるという感じのはず。。

DNS 変更

DNS の向き先を新サーバに向ける

ホスト名と逆引きを設定

さくらのVPSはA レコードがひけてないと逆引き設定がつくれないので、Aレコードが適用されたあとにやる。

/etc/hostname も変える。

ここまでやったら一旦リブート。30秒ぐらいで起動するのでたすかる……

cron の再設定

旧サーバからぬいてくる

crontab -l > crontab.user
sudo crontab -l > crontab.root

新サーバに適用する

crontab crontab.user
sudo crontab crontab.root

カーネルパラメータ

/etc/sysctl.conf に追記

net.core.somaxconn = 50000
net.ipv4.tcp_max_syn_backlog = 30000
net.core.netdev_max_backlog = 5000

net.ipv4.ip_local_port_range= 1024 65535

sudo sysctl -p で反映

ref

  1. トップ
  2. tech
  3. Ubuntu 16.4 LTS クリーンインストールして引越
▲ この日のエントリ