対象とするUbuntuのバージョン
- 9.10 Karmic Koala
概要
一言でいうと、「別のマシンにインストールしたUbuntuをtarで固め、それを専用サーバーにアップロードして解凍・展開する」です。
debootstrap(とchroot)を用いる方法では、エレガントに、次のパターンが可能でした。
- 32ビット版Ubuntu→32ビット版Ubuntu・・・/(ルート)パーティションを変更(LVM化、ext4化、等)したい場合等に便利。
- 64ビット版Ubuntu→64ビット版Ubuntu・・・ 〃
- 32ビット版Linux→32ビット版Ubuntu
- 64ビット版Linux→64ビット版Ubuntu
このtarを用いる方法は、エレガントではない(=とてもプリミティブ/原始的な)方法ですが、非常に汎用的で、次のパターンが可能です。
- 32ビット版Ubuntu→32ビット版Ubuntu・・・/(ルート)パーティションを変更(LVM化、ext4化、等)したい場合等に便利。
- 32ビット版Ubuntu→64ビット版Ubuntu
- 64ビット版Ubuntu→32ビット版Ubuntu
- 64ビット版Ubuntu→64ビット版Ubuntu・・・/(ルート)パーティションを変更(LVM化、ext4化、等)したい場合等に便利。
- 32ビット版Linux→32ビット版Ubuntu
- 32ビット版Linux→64ビット版Ubuntu
- 64ビット版Linux→32ビット版Ubuntu
- 64ビット版Linux→64ビット版Ubuntu
特にdebootstrap編ではできなかった「32ビット版と64ビット版の入れ替え」が可能なのが本tar編の最大の特長といえるでしょう。
本Tipsの対象
- 32ビット版Ubuntuがデフォルトな専用サーバーを、64ビット版Ubuntuにしたい(あるいは、64ビット版Ubuntuがデフォルトな専用サーバーを、32ビット版Ubuntuにしたい)
- Ubuntu以外のLinuxディストリビューション(RHELやCentOS等の32/64ビット版)がデフォルトな専用サーバーを、Ubuntu(32/64ビット版)化したい
- Ubuntu(32/64ビット版)の/(ルート)パーティションを変更(LVM化、ext4化、等)したい
本Tipsの対象外
- Ubuntu(32/64ビット版)がデフォルトな専用サーバーを、Ubuntu以外のLinuxディストリビューション(32/64ビット版)にしたい
これも技術的には十分可能ですが、本Wikiや本Tipsの趣旨外のため、ここでは対象外とします。
必要なもの
- 専用サーバー
ローカルPC・・・・おてもとのPC。物理的なPCでなくても、VMwareやVirtualBoxやParalleles等の仮想デスクトップ環境でも可。
設定ファイル
tarを専用サーバーにアップロード&解凍(展開)後に、最低限必要となる設定ファイルは次の通りです。
- ファイルシステム関連
- /etc/fstab (要編集)
- ネットワーク関連
- /etc/network/interfaces (コピー)
- /etc/hosts (コピー)
- /etc/hostname (コピー)
- /etc/resolv.conf (コピー)
- ブートローダー関連
- /boot/grub/grub.cfg (要編集)
ここまでを正しく設定すればとりあえず新Ubuntuが起動します。
ただし、udevなLinuxやUbuntu間での移行の場合は、このままではeth0がうまく認識されず、sshでアクセすることができない場合があります。
eth0が正しく認識され、sshでアクセス可能にするには、次の設定ファイルの編集(調整)が必要となります。
- デバイス関連
- /etc/udev/rules.d/70-persistent-net.rules (コピー)
その他
Ubuntu to Ubuntu(U2U)の場合のメリット
UbuntuからUbuntuへ移行(Ubuntu to Ubuntu: U2U)する場合、「コピー」となっているファイルは、元Ubuntuの設定ファイルをそのまま新UbuntuにコピーするだけでOkです。
よって、U2Uの場合、実際に編集が必要となる設定ファイルは「要編集」となっている2つのファイル(/etc/fstabと/boot/grub/grub/cfg)だけです。
apparmor
このtarでの移行方法でも、apparmorが原因でうまくいかない場合があったりします。
ですので、念のため元OS側でも新OS側でも、apparmorとその関連パッケージをアンインストール(Ubuntuの場合は、apt-get removeとdpkg --purge)しておくことを推奨します。
実際の手順
今回は、次の目標で進めます。
- 32ビット→64ビット化(i386→amd64化)
- 新環境(64ビット環境)の/(ルート)パーティションのLVMとext4化
使用する機器
- ▼専用サーバー役のPC・・・・・ここでは実際にはSony VAIO VGN-TZ90NSを用いました。32ビット版Ubuntu(i386)をインストールします。これを「元OS」と呼ぶことにします。
▽おてもとPC役の仮想環境・・・ここではMacBookにVirtualBoxをインストールし、そこに64ビット版Ubuntuをインストールし、それをtarで固めます。これを「新OS」と呼ぶことにします。また、tarファイルを作成・アップロードするためにもう一つのUbuntuをインストールします。これを「補助OS」と呼ぶことにします。
専用サーバー(役のPC)への旧OSのインストール
まず、専用サーバー役のPCに32ビット版Ubuntuをインストールします。ここでは 8.04 LTS(Hardy Heron)サーバー版の32ビット(i386)のCDインストーラーを用いました。
専用サーバーは固定IPアドレスである必要がありますので、ここでは、ネットワーク設定を自動設定(DHCP)ではなくマニュアルを選びましょう。ここでは、ご家庭やオフィス等のLAN上でよく用いられるプライベートアドレス空間を用い、IPアドレス10.0.1.100、サブネットマスク255.255.255.0、デフォルトゲートウェイ10.0.1.1、ネームサーバー8.8.8.8で設定しました。
パーティション構成は、/dev/sda1に100MB・ext2で/boot、/dev/sda2に62GB・ext3で/(ルート)、/dev/sda3に2GBでswapとします。
インストーラーの終盤でのソフトウェアパッケージの選択では、openssh-serverを選択します。
専用サーバー(役のPC)での準備
専用サーバーにssh等でログインします。
専用サーバーに共通の初期設定
これは必須な作業ではありませんが、専用サーバーのログイン直後に最低限しておくべき設定・作業をしてしまいましょう。
- ファイアウォール(ufwコマンド)
- セキュリティアップデート(apt-get updateとapt-get upgrade)
- パスワードの変更(passwdコマンド)
apparmor関連パッケージの削除
次に、apparmor関連パッケージを削除してしまいましょう。
▼次のコマンドでapparmorという文字列を含むパッケージを検索します。
dpkg -l |grep apparmor
▼検索されたapparmor関連パッケージをapt-get removeで削除します。
sudo apt-get remove apparmor apparmor-utils
▼念のためdpkg --purgeで完全に削除します。
sudo dpkg --purge apparmor apparmor-utils
9.10へのアップグレード
次に、今回は新OSの/(ルート)パーティションをLVMとext4化しますので、ブートローダーがLVMとext4に対応した9.10 Karmic Koala(あるいはそれ移行のバージョン)にアップグレードします。
▼念のため、現状のsources.listのバックアップコピーをとっておきましょう。
sudo cp /etc/apt/sources.list /etc/apt/sources.list.0
▼/etc/apt/sources.listを編集します。
sudo vi /etc/apt/sources.list
▼編集完了後、/etc/apt/sources.listをcat確認します。
cat /etc/apt/sources.list
▼次のように表示されるように編集して下さい。
deb http://jp.archive.ubuntu.com/ubuntu/ karmic main restricted deb http://jp.archive.ubuntu.com/ubuntu/ karmic-updates main restricted deb http://jp.archive.ubuntu.com/ubuntu/ karmic universe deb http://jp.archive.ubuntu.com/ubuntu/ karmic-updates universe deb http://jp.archive.ubuntu.com/ubuntu/ karmic multiverse deb http://jp.archive.ubuntu.com/ubuntu/ karmic-updates multiverse deb http://security.ubuntu.com/ubuntu karmic-security main restricted deb http://security.ubuntu.com/ubuntu karmic-security universe deb http://security.ubuntu.com/ubuntu karmic-security multiverse
▼アップグレードします。
sudo apt-get update && sudo apt-get dist-upgrade
必要なパッケージのインストール
▼別途必要なパッケージをインストールします。ここではgrub2(パッケージ名grub-pc)と、lvm2をインストールします。
sudo apt-get install grub-pc
sudo apt-get install lvm2
パーティション構成の変更
次にパーティション構成を変更していきます。ここでは、現swap領域を、新Ubuntuの/(ルート)パーティションにします。
スワップ領域の削除
▼まずfreeコマンドでswapを確認します。
free
▼次にswapoff -aでスワップを停止します。
sudo swapoff -a
▼freeコマンドでswapが停止したことを確認します。
free
次回起動時にswapが動作しないように/etc/fstabを編集しておきましょう。
▼まずは、現在の/etc/fstabのバックアップコピーをとっておきましょう。
sudo cp /etc/fstab /etc/fstab.0
▼/etc/fstabを編集します。
sudo vi /etc/fstab
swapの行の先頭に#を入力します。
▼編集が完了したら、念のため、cat確認します。
cat /etc/fstab
fdiskでのパーティション構成の編集
次にfdiskでパーティション構成を編集します。
▼現状をdf確認します。
df
▼fdiskコマンドでHDD(/dev/sda)を編集します。
sudo fdisk /dev/sda
- スワップを削除(d)
- 旧スワップ領域に、新たに領域を作成(n)
- 新たな領域のタイプをLVMに(t, 8e)
- 変更を保存(w)
▼現在の状況は次の通りとなります。
/dev/sda1 100MB, ext2 /dev/sda2 63GB, ext3 /dev/sda3 2GB, LVM
▼パーティション構成を変更しましたので、念のため、ここでいったん再起動しておきましょう。
sudo reboot
LVMの設定
起動後、再度ログインし、LVMを設定していきます。
▼まず、LVM物理ボリュームを作成します。
sudo pvcreate /dev/sda3
▼LVM物理ボリュームを確認します。
sudo pvdisplay
▼次に、LVMボリュームグループを作成します。ここでは「lvm」という名前のボリュームグループとします。下記のコマンドで「lvm」という名前のボリュームグループを、/dev/sda3というLVM物理ボリューム上に作成します。
sudo vgcreate lvm /dev/sda3
▼LVMボリュームグループを確認します。
sudo vgdisplay
▼次に、LVM論理グループを作成します。ここでは「root」という名前のLVM論理ボリュームを作成します。「-L」オプションで容量を指定し、「-n」オプションで論理ボリュームの名前を指定して、LVMボリュームグループ名「lvm」上に作成します。
sudo lvcreate -L 10g -n root lvm
▼LVM論理ボリュームを確認します。
sudo lvdisplay
▼LVMの編集が完了したら、念のため、システムをリブートしておきましょう。
新OS用のパーティションのext4フォーマット
再起動後、ログインしたら、作成したLVM論理ボリュームをフォーマットします。
LVM論理ボリューム「root」は/dev/lvm/rootまたは/dev/mapper/lvm-rootという名前になります。
▼ext4でフォーマットします。
sudo mkfs.ext4 /dev/lvm/root
▼フォーマットが完了したら、そのマウントポイントを作成します。ここでは/mnt以下にamd64rootというディレクトリを作成します。
sudo mkdir /mnt/amd64root
▼LVM領域をフォーマットしたので、念のため再起動しておきますが、その前にきちんとフォーマットされマウントされるかどうかを確認することを兼ねて、/etc/fstabを編集して、次回起動時に/dev/lvm/rootが/mnt/amd64rootにマウントされるようにしましょう。
sudo vi /etc/fstab
▼システムを再起動します。
sudo reboot
▼再起動後、ログインしたら、dfコマンドで、LVM領域(/dev/lvm/rootまたは/dev/mapper/lvm-root)が/mnt/amd64rootにきちんとマウントされていることを確認しましょう。
df
ls -al /mnt/amd64
マウントができたら専用サーバー側の準備はできましたので、おてもとPC上での作業を行っていきます。
ローカルPC(おてもとPC)上での操作
新OSの準備
おてもとPCには、64ビット版Ubuntu(amd64)をインストールします。
- ネットワーク設定・・・なんでもかまいませんので、自動設定(DHCP)でOkです。ホスト名やドメイン名も何でもOkです。
- パーティション設定・・こちらもどのような設定でもかまいません。ただし、補助OSをインストールする領域を残しておく必要があります。
- ユーザー設定・・・・・ユーザー名も何でもOkです。ここでは「ubuntu」にしました。
- ソフトウェア・・・・・openssh-serverは必ずインストールしましょう。
- ブートローダー・・・・HDDの先頭=MBR(/dev/sda)にインストールします。
これがそのまま専用サーバー上で動作することになりますので、インストール完了後にシステムが再起動したら、ログインして、次の操作をしましょう。
- 必須パッケージ(openssh-server)・・・必須です。(絶対にインストールし忘れることのないよう、別PC上のターミナルからsshでログインして作業するようにしましょう。)
次は必須ではありませんが、是非やっておいた方が良い操作です。
- apparmor関連パッケージの削除(万が一の失敗を防ぐためにも念のため前述の手順を参考に削除してしまいましょう。移行完了後にいつでもまたインストールすることができますので。)
- ufwの設定(新環境が起動した時点からファイアウォールが動作しているように。)
- セキュリティアップデート(apt-get updateとapt-get upgrade)新環境が起動した時点からセキュリティアップデートが完了しているように。
- apt-getのautoremove、clean、autoclean、等(不要なパッケージや、ダウンロードしたパッケージのキャッシュを、削除しておきましょう。)
補助OSの準備
新OSのインストールが完了したら、同じおてもとPC上にもう一つUbuntu(補助OS)をインストールしていきます。ここでは新OSと同様にUbuntu 9.10 (Karmic Koala)の64ビット版(amd64)をそのまま用いました。
ポイントは、次の通り。
- パーティション設定で、前のUbuntu(新OS)の領域をフォーマットしない。
- ブートローダー(grub2またはgrub-pc)のインストール先は、HDDの先頭(MBR:マスターブートレコード)にする。
インストールが完成したら、システムを再起動します。ブートローダーをHDDの先頭(MBR)にインストールしましたので、新しいUbuntu(補助OS)が起動されます。
新しいUbuntu(補助OS)が起動したらログインして、前のUbuntu(新OS)をtarで固めましょう。
▽前のUbuntu(新OS)の領域のためのマウントポイントを作成します。
sudo mkdir /mnt/amd64root
▽作成したマウントポイントに前のUbuntu(新OS)のパーティションをマウントします。
sudo mount -t ext4 /dev/sda1 /mnt/amd64root
▽念のためdfとlsで確認します。
df
ls -al /mnt/amd64root
▽マウントポイントに移動します。
cd /mnt/amd64root
▽tarでかためます。ここでは、amd64root.tarというファイル名でホームディレクトリ(ここでは/home/ubuntu)以下に作成します。
sudo tar cfz /home/ubuntu/amd64root.tar .
▽ホームディレクトリに戻ります。
cd
▽pwdで現在のディレクトリを確認します。ubuntuというユーザー名ですのでホームディレクトリは/home/ubuntuとなるはずです。
pwd /home/ubuntu
▽作成されたtarファイルを確認します。
ls -al
▽scpコマンドでtarファイルを専用サーバーにアップロードします。
scp /home/ubuntu/amd64root.tar [email protected]:
scpコマンドのすぐ後に「アップロードしたいファイル名」、次に「アップロード先のホストのユーザー名@IPアドレス」を指定します。
▽アップロードにはしばらく時間がかかります。
専用サーバー(役のPC)=元OS側での作業
▼tarファイルのアップロードが完了したら、専用サーバー側でアップロードされたtarファイルを確認します。
ls -al
▼tarファイルを、新OS用のマウントポイント/mnt/amd64rootにコピーします。
sudo cp amd64root.tar /mnt/amd64root
▼/mnt/amd64rootに移動します。
cd /mnt/amd64root
▼tarを解凍(展開)します。
sudo tar xfz amd64root.tar
▼必要なファイルをコピーします。
sudo cp /etc/fstab etc/fstab sudo cp /etc/hosts etc/hosts sudo cp /etc/hostname etc/hostname sudo cp /etc/network/interfaces etc/network/interfaces sudo cp /etc/udev/rules.d/* etc/udev/rules.d/
▼blkidコマンドでUUIDを調べておきます。
sudo blkid
▼編集が必要なファイルを編集します。
sudo vi etc/fstab
編集のポイントは次の通りです。
- 以前の/(ルート)パーティションの行を、新しく作成したLVMな/(ルート)のUUIDに変更し、ファイルシステムのタイプをext3→ext4に変更
- /mnt/amd64rootの行の先頭に#を入力しコメント化
▼次に、/mnt/amd64root/boot以下のカーネル関連のファイルを/bootにコピーします。
sudo cp /mnt/amd64root/boot/*2.6* /boot
▼/mnt/amd64root/boot以下のファイルを、念のためtarでバックアップコピーを作成しておきます。
cd /mnt/amd64root/boot sudo tar ../amd64boot.tar .
▼/mnt/amd64root/boot以下のファイルは削除してしまいます。
sudo rm -rf /mnt/amd64root/boot/*
▼update-grubでブートローダーに先程コピーした64ビットなカーネルを認識させます。
sudo update-grub
▼/boot/grub/grub.cfgのmenuentryの行を検索します。
sudo cat /boot/grub/grub.cfg |grep menuentry
▼/boot/grub/grub.cfgのバックアップコピーをとっておきます。
sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.0
▼/boot/grub/grub.cfgを編集します。
sudo vi /boot/grub/grub.cfg
変更するポイントは次の通りです。
- 「set default=」行・・・先程検索したmenuentryの行のうち、新しい64ビットカーネルの行が上から3番目に表示されたら「set default="0"」を「set default="2"」に変更します。5番目に表示されていたら4に。つまり、表示された行数マイナス1の数字に変更するということです。
- 先程検索したmenuentryの行のうち、新しい64ビットカーネルの箇所の「linux /boot/vmlinuz-2.6.31-19-server root=UUID=77ac849b-0a3f-438e-a6cc-7b5fd5f4ab9b ro quiet splash」のような行のUUID以下を、blkidで表示されたLVMなルートのUUIDに変更します。
- viを保存して終了する際には強制の!を使用する必要があります。
▼念のためcat確認し、変更をdiff比較します。
sudo cat /boot/grub/grub.cfg
sudo diff /boot/grub/grub.cfg /boot/grub/grub.cfg.0
きちんと変更されていることを確認します。
▼以上で、変更は完了です。sudo rebootで再起動をかけます。再起動したら64ビット版Ubuntuで起動されるはずです。
sudo reboot
▼sshで新OSにユーザーubuntuでアクセスします。
ssh -l ubuntu 10.0.1.100
▼/(ルート)をls確認して、lib64ディレクトリが存在すれば64ビット環境となっていることを確認できます。
ls /
以上の通りです。