Changes between Initial Version and Version 1 of EC2ChrootLinux


Ignore:
Timestamp:
05/03/09 13:18:30 (10 years ago)
Author:
sgk
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • EC2ChrootLinux

    v1 v1  
     1= アマゾンEC2でchrootなLinuxを動かす = 
     2 
     3EC2がどうも怖いのは、インスタンスをシャットダウンするとディスクが消えて無くなることです。 
     4そのため、適宜S3にバックアップをしなさいという話になっています。 
     5長らく貧弱な自前サーバを運用してきた身としては、どうも居心地の悪い不安感がつきまといます。 
     6完璧なデータセンターで運用されているはずなので、マシントラブルでコケて落ちることなんて皆無なんでしょうけれどね。 
     7 
     8それで、EC2のオプションサービスであるEBS(Elastic Block Store)というディスクにLinuxを構築することにします。 
     9EBS上にLinuxを構築したとしても、そのままでは起動することができません。 
     10そこで、起動の途中で`/sbin/init`が動いた瞬間に、EBS上のLinuxにすげ替える戦略で行きます。 
     11この戦略は、昔から多くの人々がやっているし、そもそも通常のLinuxを起動するプロセスでもinitrdから本体への移行で使われています。 
     12 
     13適当なLinuxのAMIを元にして、自前のAMIを作ります。 
     14`/sbin/init`は、`/sbin/init-orig`という名前に変更します。 
     15`/sbin/init`として、以下のスクリプトを置きます。 
     16ファイルのモードは、0755など実行可能にします。 
     17 
     18{{{ 
     19#!sh 
     20#!/bin/sh -x 
     21 
     22DEV=/dev/sdf1 
     23PATH=/usr/sbin:/usr/bin:/sbin:/bin 
     24 
     25if [ "`e2label $DEV`" != "chroot" ]; then 
     26  exec /sbin/init-orig 
     27fi 
     28 
     29mount $DEV /mnt 
     30cd /mnt 
     31pivot_root . mnt 
     32cd / 
     33 
     34if [ -f /sbin/init-orig ]; then 
     35  exec /sbin/init-orig 
     36fi 
     37 
     38exec < /dev/console > /dev/console 2>&1 
     39 
     40umount -a > /dev/null 2>&1 
     41umount /mnt/proc > /dev/null 2>&1 
     42umount /mnt/sys > /dev/null 2>&1 
     43umount /mnt/dev > /dev/null 2>&1 
     44 
     45exec /bin/sh -c "umount /mnt; exec /sbin/init" 
     46}}} 
     47 
     48`/dev/sdf`にEBSがアタッチされ、`/dev/sdf1`にext3なファイルシステムがあり、そのボリュームラベルが「`chroot`」である場合に限り、このファイルシステム上のLinuxを起動します。 
     49いずれかを満たさない場合は、通常通りに起動します。 
     50`chroot`云々と言っていますが、実際には`chroot`は行わず、`pivot_root`を行っています。 
     51最初にあったルートファイルシステムをアンマウントするのに、ちょっと苦労をしています。 
     52この部分は、元にしたAMIのLinuxの種類によって調整が必要かも知れません。 
     53上記の例は、Ubuntu 9.04でうまく動作しています。 
     54 
     55''(2009/5/3 - sgk)''