Saneyan Notes

軌跡を残す

ML110 G7 でサーバ構築 I

 

はじめに

 この記事には先日購入した ML110 G7 でサーバを構築する過程を記している。細かい設定が幾つかあるので備忘も兼ねて作成した。サーバを構築するにあたり、自分が挑戦してみたいことを以下にリストアップしてみる。

  • mdadm で RAID 1 を構築
  • LVM2 で論理ボリュームの容量を可変にする
  • LUKS によるパーティションの暗号化でセキュリティを高める
  • KVM仮想マシンを作成する
  • 仮想マシンにゲスト OS として FreeBSD をインストールする
  • 仮想マシンをサーバとして構築し外部に公開できるようにする
  • 物理・仮想 NIC をブリッジ接続させ、iptables によるパケットフィルタリングを行う
  • ホスト OS には GNOME をインストールする

 ML110 G7 には Smart Array B110i と呼ばれる RAID コントローラが付いているが、適用できる HDD の最大数が2台という大きな制約がある。これに対して RAID ボードを用意できればいいのだが、資金を調達できないため断念するしかない。結果的に、ソフトウェア RAID に頼らざるを得ないわけだ。そこで mdadm を利用する。RAID レベルは 1 で、2台を1ペアとして構築するという具合である。LVM を利用する理由は、近いうちにさらに1ペアを追加して容量増大を図るためであり、必要に応じてボリューム容量を変更できるからである。

 ひと通りのインストール作業を終えた後は仮想 NIC の作成など、仮想マシンをサーバとして機能させるのに必要な設定を行なっていく。

 

環境

  • サーバ機: HP Proliant ML110 G7
  • HDD: 2台 (250GB, 320GB)
  • IP 1: 192.168.24.71 (eth0)
  • IP 2: 192.168.24.72 (br0, MAC: 00:00:00:00:00:01)
  • IP 3: 192.168.24.73 (tap0, MAC: 00:00:00:00:00:02)
  • gentoo-sources: 3.6.11

 ※ IP は CTU 側で固定 IP を割り振るように設定してある。

 

ブートドライブの設定

  POST 画面が表示されている間に F11 キーを押すとブートメニューが表示される。

f:id:Saneyan:20130113234614p:plain

 

 今回は USB ドライブから Live CD を起動させるので「3」を選択する。

f:id:Saneyan:20130113234811p:plain

 

Gentoo Linux のインストール

ブート


 Live CD からのブート時に、途中でキーボードタイプの設定ができるので使っているキーボードのタイプに合わせること。一定時間が経つと自動的にデフォルトの US が適用される。

f:id:Saneyan:20130114000340p:plain

 

SSH でリモート操作


  Live CD を起動させた後、SSH でリモート操作できるように準備する。まずはネットワークの設定。

livecd ~ # net-setup eth0

 

 インターフェースの詳細を確認したら「< Yes >」を押す。

f:id:Saneyan:20130114001553p:plain

 

 有線接続か無線接続かを選択する。インターネットには有線で接続しているので「2 My network is wired」を選択する。

f:id:Saneyan:20130114002201p:plain

 

 DHCP か静的 IP かを選択する。CTU 側で固定 IP を振るように設定してあるが DHCP にしても IP は取得できるので「1 Use DHCP to auto-detect my network settings」を選択する。

f:id:Saneyan:20130114002940p:plain

 セットアップが完了したら ifconfig コマンドで NIC が認識されていることを確認する。

 

 次にパスワードを設定する。

livecd ~ # passwd

 そして SSH デーモンを起動。

livecd ~ # /etc/init.d/sshd start

 あとはクライアントからホストに SSH 接続して操作する。

livecd ~ # ssh root@192.168.24.71

 

 カーネルモジュールのロード


 LVM と RAID 1 が扱えるように「raid1」と「dm-mod」の2つのカーネルモジュールをロードしておく。

livecd ~ # modprobe raid1
livecd ~ # modprobe dm-mod

 

パーティションの作成


  /dev/sda, /dev/sdb の両方に同じパーティションを設定する。ミラーリングさせたい領域にはパーティション ID を fd (Linux raid autodetect) に設定する。/dev/sda1 と /dev/sdb1 にはブート可能フラグをセットしておくこと。/dev/sda2 と /dev/sda2 は LVM 領域として扱う。

Partition/dev/sd[ab]SizeType
/dev/sd[ab]1 /boot 1024MB fd (Linux raid autodetect)
/dev/sd[ab]2 - remainder fd (Linux raid autodetect)

 

 fdisk でパーティションを作成する。m コマンドでヘルプを表示でき、q コマンドで終了できる。

livecd ~ # fdisk /dev/sda
Welcome to fdisk (util-linux 2.21.2).
...
Command (m for help): 

 

 まずはブートパーティションを作成する。n コマンドで新規パーティションが作成できる。

Command (m for help): n

 

 次に基本パーティションか拡張パーティションかを決める。ここでは「p」の基本パーティションを選択する。

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p

 

 適用するパーティション番号を選択する。現在、1つしかパーティションがないので「1」を選択する。

Partition number (1-4, default 1): 1

 

 ここから指定のサイズに分割していくが、AFT を採用した HDD を使っている可能性があるので各パーティションの開始セクタは 8 の倍数にしたほうがよい。ブートパーティションの開始セクタはデフォルトの LBA 2048 に設定する。

First sector (2048-488397167, default 2048): (Enter)
Using default value 2048

 

 パーティションサイズを設定する。ここでは終了セクタ、任意のセクタ数、任意のサイズ (単位は G, M, K) のいずれかを入力する。

Last sector, +sectors or +size{K,M,G} (2048-488397167, default 488397167): +1024M
Partition 1 of type Linux and of size 1 GiB is set

 

 t コマンドでパーティション ID を設定する。現在、1つしかパーティションがないので自動で1番が選択される。

Command (m for help): t
Selected partition 1

 

 ID を入力する。ID は L コマンドで一覧できる。

Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

 

 a コマンドでブートパーティションにブート可能フラグを付ける。

Command (m for help): a
Partition number (1-4): 1

 

 残りのパーティションと /dev/sdb に対しても同じ流れで設定していけばよい。最終的には以下のようになる。

livecd ~ # fdisk -l

Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xce8cf09e

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   fd  Linux raid autodetect
/dev/sda2         2099200   488397167   243148984   fd  Linux raid autodetect

Disk /dev/sdb: 319.9 GB, 319936615424 bytes
255 heads, 63 sectors/track, 38896 cylinders, total 624876202 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x46936882

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048     2099199     1048576   fd  Linux raid autodetect
/dev/sdb2         2099200   624876201   311388501   fd  Linux raid autodetect


RAID アレイの構築


 下表に従って RAID アレイを構築していく。/dev/md1 はブート用、/dev/md2 はLVM 用のデバイス。

ArrayPartitionDirectoryLevelHomehostNameMetadata
/dev/md1 /dev/sd[ab]1 /boot 1 - - 0.90
/dev/md2 /dev/sd[ab]2 / 1 host lvm 1.2 (Default)

 

 まずはデバイスファイルを作成する。

livecd ~ # mknod /dev/md1 b 9 1
livecd ~ # mknod /dev/md2 b 9 2

 

 次に mdadm (v3.1.4) で RAID アレイを構築する。/dev/md1 のメタデータのバージョンは 0.90 にする必要がある。そうしないと GRUB のセットアップができなくなる。

livecd ~ # mdadm --create /dev/md1 \
> --verbose \
> --assume-clean \
> --level=1 \
> --raid-devices=2 \
> --metadata=0.90 \
> /dev/sd[ab]1
...
Continue creating array? yes <- 'yes' or 'no'
...
mdadm: array /dev/md1 started.

 

 /dev/md2 のメタデータはデフォルトの v1.2 にする。--homehost と --name に任意の文字列をアサインしてデバイス名を命名しておくと、mdadm が自動アセンブルするときに /dev/md/[homehost]:[name] というリンクを作ってくれる。これで /dev/md2 が /dev/md127 にリネームされても問題ない。

livecd ~ # mdadm --create /dev/md2 \
> --verbose \
> --assume-clean \
> --level=1 \
> --raid-devices=2 \
> --homehost=host \
> --name=lvm \
> /dev/sd[ab]2
...
mdadm: array /dev/md2 started.

 

 構築が完了したら次のコマンドを実行して mdadm.conf を更新する。

mdadm --detail --scan >> /etc/mdadm.conf

 

 RAID アレイの状態は /proc/mdstat で見ることができる。 

livecd ~ # cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] [linear] [multipath]
md2 : active raid1 sdb2[1] sda2[0]
      243147824 blocks super 1.2 [2/2] [UU]

md1 : active raid1 sdb1[1] sda1[0]
      1048512 blocks [2/2] [UU]

unused devices: <none>

 

 また、ディスクアレイの詳細は mdadm --detail /dev/mdx で見ることができる。

livecd ~ # mdadm --detail /dev/md1
/dev/md1:
        Version : 0.90
  Creation Time : Mon Jan 14 03:16:03 2013
     Raid Level : raid1
     Array Size : 1048512 (1024.11 MiB 1073.68 MB)
  Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : Mon Jan 14 04:21:34 2013
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           UUID : 6532958d:e5e4affc:2840be58:c7aa88bb
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

 

暗号化


  /dev/md2 を暗号化する。暗号化アルゴリズムは AES、ハッシュアルゴリズムは SHA-256、鍵長は 256bit に設定しておく。

livecd ~ # cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 /dev/md2

 

 暗号化されるとデータが上書きされる。この作業は取り消しできないので注意すること。大文字で「YES」と入力し、パスワードの設定をする。

WARNING!
========
This will overwrite data on /dev/md2 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase: (Password)
Verify passphrase: (Password)

 

 この後、LVM の論理ボリュームを作っていくのでロックされたデバイスをアンロックし、/dev/mapper/encrypted からアクセスできるようにする。

livecd ~ # cryptsetup luksOpen /dev/md2 encrypted
Enter passphrase for /dev/md2: (Password) 

 ※ 誤って /dev/md2 にアクセスしないように。データが破壊される恐れがある。

 

論理ボリュームの作成


/dev/VG/LVSizeFile system
/dev/vg/root 10GB ext4
/dev/vg/swap 3GB swap
/dev/vg/home 10GB ext4
/dev/vg/usr 20GB ext4
/dev/vg/opt 5GB ext4
/dev/vg/var 20GB ext4
/dev/vg/tmp 10GB ext4

 

  まずは pvcreate コマンドで物理ボリュームを作成する。

livecd ~ # pvcreate /dev/mapper/encrypted
  Writing physical volume data to disk "/dev/mapper/encrypted"
  Physical volume "/dev/mapper/encrypted" successfully created

 

 次に vgcreate コマンドでボリュームグループを作成する。VG 名は「vg」

livecd ~ # vgcreate vg /dev/mapper/encrypted
  Volume group "vg" successfully created

 

 上表に従って lvcreate コマンドで論理ボリュームを作成する。

livecd ~ # lvcreate -L10G -nroot vg
  Logical volume "root" created
livecd ~ # lvcreate -L3G -nswap vg
  Logical volume "swap" created
livecd ~ # lvcreate -L10G -nhome vg
  Logical volume "home" created
livecd ~ # lvcreate -L20G -nusr vg
  Logical volume "usr" created
livecd ~ # lvcreate -L5G -nopt vg
  Logical volume "opt" created
livecd ~ # lvcreate -L20G -nvar vg
  Logical volume "var" created
livecd ~ # lvcreate -L10G -ntmp vg
  Logical volume "tmp" created

 

 物理ボリューム、ボリュームグループ、論理ボリュームの状態はそれぞれ pvs, vgs, lvs で確認できる。 

livecd ~ # pvs
  PV                    VG   Fmt  Attr PSize   PFree
  /dev/mapper/encrypted vg   lvm2 a--  231.88g 153.88g

 

livecd ~ # vgs
  VG   #PV #LV #SN Attr   VSize   VFree
  vg     1   7   0 wz--n- 231.88g 153.88g

 

livecd ~ # lvs
  LV   VG   Attr   LSize  Origin Snap%  Move Log Copy%  Convert
  home vg   -wi-ao 10.00g
  opt  vg   -wi-ao  5.00g
  root vg   -wi-ao 10.00g
  swap vg   -wi-a-  3.00g
  tmp  vg   -wi-ao 10.00g
  usr  vg   -wi-ao 20.00g
  var  vg   -wi-ao 20.00g

 

フォーマットとスワップ領域の操作


 ブートパーティションを ext2 でフォーマットする。ext3 か ext4 でフォーマットすると、これもまた GRUB のセットアップができなくなる。

livecd ~ # mkfs.ext2 /dev/md1

 

 それぞれの論理ボリュームをフォーマットする。ファイルシステムext4

livecd ~ # mkfs.ext4 /dev/vg/root
livecd ~ # mkfs.ext4 /dev/vg/home
livecd ~ # mkfs.ext4 /dev/vg/usr
livecd ~ # mkfs.ext4 /dev/vg/opt
livecd ~ # mkfs.ext4 /dev/vg/var
livecd ~ # mkfs.ext4 /dev/vg/tmp

 

 スワップ領域を作成し、有効にする。

livecd ~ # mkswap /dev/vg/swap
livecd ~ # swapon /dev/vg/swap

 

マウント


 ブートパーティションと論理ボリュームをマウントする。まずは /mnt/gentoo がルートになるように /dev/vg/root をマウントする。

livecd ~ # mount /dev/vg/root /mnt/gentoo

 

 カレントディレクトリを /mnt/gentoo に変更し、各論理ボリュームとブートパーティションに対応するマウントポイントを作成する。

livecd ~ # cd /mnt/gentoo
livecd gentoo # mkdir boot home usr opt var tmp

 

 そしてマウントしていく。

livecd gentoo # mount /dev/md1 /mnt/gentoo/boot
livecd gentoo # mount /dev/vg/home /mnt/gentoo/home
livecd gentoo # mount /dev/vg/usr /mnt/gentoo/usr
livecd gentoo # mount /dev/vg/tmp /mnt/gentoo/tmp
livecd gentoo # mount /dev/vg/var /mnt/gentoo/var
livecd gentoo # mount /dev/vg/opt /mnt/gentoo/opt

 

インストールファイルのダウンロードと展開


 stage3 ファイルと最新の Portage をダウンロードする。まずは links コマンドでミラーサイトに行く。

livecd gentoo # links http://www.gentoo.org/main/en/mirrors.xml

 

 ミラーサイトに行くと下のスクリーンショットのように表示される。矢印キー (↑・↓) でカーソル移動ができる。また z で前のページに戻り、x で先のページに進むことができる。左サイドバーにある「Mirrors」にカーソルを移し、 Enter でそのページにリンクする。

f:id:Saneyan:20130115013731p:plain

 

 Mirrors ページの下部にある ChannelX.biz (http) にカーソルを移し、リンクする。

f:id:Saneyan:20130115013722p:plain

 

 releases → amd64 → current-stage3 と移動して stage3-amd64-20121210.tar.bz2 を保存する。

f:id:Saneyan:20130115015129p:plain

 

 releases → snapshots → current と移動して portage-latest.tar.bz2 を保存する。必要なインストールファイルを一通り保存したので q で links を閉じる。

f:id:Saneyan:20130115015541p:plain

 

 stage3-amd64-20121210.tar.bz2 を展開する。

livecd gentoo # time tar xvjpf stage3-amd64-20121210.tar.bz2
...
real    0m41.069s
user    0m32.310s
sys     0m2.760s

 

 カレントディレクトリを一時的に /mnt/gentoo/usr に変更し、portage-latest.tar.bz2 を展開する。

livecd gentoo # time tar xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr
...
real    0m37.110s
user    0m20.980s
sys     0m5.020s

 

 圧縮ファイルは不要なので削除しておく。 

livecd gentoo # rm -f portage-latest.tar.bz2
livecd gentoo # rm -f stage3-amd64-20121210.tar.bz2

 

ミラーサイトの選択


 mirrorselect コマンドでミラーサイトを選択し、make.conf を更新する。

livecd gentoo # mirrorselect -i -o >> /mnt/gentoo/etc/portage/make.conf

 

 伝達遅延を考慮して日本のミラーサイトにする。

f:id:Saneyan:20130115022445p:plain

 

 Portage の更新で使うミラーサイトも付け足しておく。

livecd gentoo # mirrorselect -i -r -o >> /mnt/gentoo/etc/portage/make.conf

 

 make.conf を開き、GENTOO_MIRRORS="..." と SYNC="..." が追加されているかどうかを確認すること。 

 

make.conf の編集


 自分が使っている環境に合わせて make.conf を編集する。私は下のように編集した。

# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O3 -pipe -march=core2 -msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -mmmx -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="x86_64-pc-linux-gnu"
# These are the USE flags that were used in addition to what is provided by the
# profile used for building.
USE="bindist mmx sse sse2 ssse3"

MAKEOPTS="-j3"

GENTOO_MIRRORS="http://gentoo.channelx.biz/ ftp://ftp.iij.ad.jp/pub/linux/gentoo/ rsync://ftp.jaist.ac.jp/pub/Linux

SYNC="rsync://rsync5.jp.gentoo.org/gentoo-portage"

 

 Note: MAKEOPTS="-jx" の 'x' は CPU の数 + 1 が望ましいらしい。

 

resolv.conf の作成


 resolv.conf を /mnt/gentoo/etc に作成する。

livecd gentoo # vi /mnt/gentoo/etc/resolv.conf

 

 DNS サーバは GoogleDNS サーバ (Google Public DNS) にしておく。

nameserver 8.8.8.8
nameserver 8.8.4.4

 

 Note: わざわざ作らなくても /etc/resolv.conf からコピーしてもよい。

livecd gentoo # cp -L /etc/resolv.conf /mnt/gentoo/etc

 

mdadm.conf のコピー


 mdadm の設定が記述されている mdadm.conf を /mnt/gentoo/etc にコピーしておく。

livecd gentoo # cp -L /etc/mdadm.conf /mnt/gentoo/etc

 

chroot 環境


 chroot 環境への移行に際し、必要なファイルシステムをマウントする。

livecd gentoo # mount -t proc none /mnt/gentoo/proc
livecd gentoo # mount --rbind /sys /mnt/gentoo/sys
livecd gentoo # mount --rbind /dev /mnt/gentoo/dev

 

 ルートディレクトリを変更し、環境変数を更新する。

livecd gentoo # chroot /mnt/gentoo /bin/bash
livecd / # env-update && source /etc/profile

 

Portage ツリーの更新


 --sync オプション付きで emerge コマンドを実行し、Portage ツリーの更新を開始する。

livecd / # emerge --sync

 

タイムゾーンの設定


livecd / # cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
livecd / # echo "Asia/Tokyo" > /etc/timezone

 

プロファイルの変更


 利用可能なプロファイルを表示する。適用されているプロファイルにはアスタリスクが付いている。

livecd / # eselect profile list
Available profile symlink targets:
  [1]   default/linux/amd64/10.0 *
  [2]   default/linux/amd64/10.0/selinux
  [3]   default/linux/amd64/10.0/desktop
  [4]   default/linux/amd64/10.0/desktop/gnome
  [5]   default/linux/amd64/10.0/desktop/kde
  [6]   default/linux/amd64/10.0/developer
  [7]   default/linux/amd64/10.0/no-multilib
  [8]   default/linux/amd64/10.0/server
  [9]   default/linux/amd64/10.0/x32
  [10]  hardened/linux/amd64
  [11]  hardened/linux/amd64/selinux
  [12]  hardened/linux/amd64/no-multilib
  [13]  hardened/linux/amd64/no-multilib/selinux
  [14]  hardened/linux/uclibc/amd64

 

 Gentoo をサーバ用途に使うので、ここでは8番の「default/linux/amd64/10.0/server」に変更する。

livecd / # eselect profile set 8

 

カーネルのインストール


 まずはカーネルソースをインストールする。

livecd / # time emerge -v gentoo-sources
...
real    4m23.535s
user    1m1.620s
sys     0m15.930s

 

  iptables でブリッジのパケットフィルタリングをしたいので、physdev モジュールを利用できるようにする。

livecd linux # echo CONFIG_NETFILTER_ADVANCED=y >> /usr/src/linux/.config
livecd linux # echo CONFIG_NETFILTER_XT_MATCH_PHYSDEV=y >> /usr/src/linux/.config

 

 カレントディレクトリを /usr/src/linux に変更し、カーネルの設定を行う。

livecd / # cd /usr/src/linux
livecd linux # make menuconfig

 

 ext4 ファイルシステムを扱えるようにする。

File Systems  --->
  <*> The Extended 4 (ext4) filesystem
    [*]   Use ext4 for ext2/ext3 file systems (NEW)
    [*]   Ext4 extended attributes (NEW)
    [*]     Ext4 POSIX Access Control Lists
    [*]     Ext4 Security Labels

 

 LUKS が使う暗号化アルゴリズム (AES) とハッシュアルゴリズム (SHA-256) をサポートする。

-*- Cryptographic API  --->
        *** Digest ***
  <*>   SHA224 and SHA256 digest algorithm
        *** Ciphers ***
  <*>   AES cipher algorithms (x86_64)

 

 RAID 1 と LVM を扱えるようにする。また、仮想マシンをネットワークに接続させたいので TUN/TAP を有効にする。

Device Drivers  --->
  [*] Multiple devices driver support (RAID and LVM)  --->
    <*>   RAID support
    <*>     RAID-1 (mirroring) mode
    <*>   Device mapper support
    <*>     Crypt target support
    [*] Network device support  --->
      <M>     Universal TUN/TAP device driver support

 

 ブリッジ接続できるようにする。

[*] Networking support  --->
  Networking options  --->
    <*> 802.1d Ethernet Bridging
    <*> 802.1Q VLAN Support

 

 KVM による仮想化を有効にする。AMD のプロセッサを使用している場合は「KVM for AMD processors support (NEW)」を選択する。

[*] Virtualization (NEW)  --->
  <*>   Kernel-based Virtual Machine (KVM) support
  <*>     KVM for Intel processors support
  < >     KVM for AMD processors support (NEW)

 

 KSM を有効にする。

Processor type and features  --->
  [*] Enable KSM for page merging

 

 カーネルをコンパイルする。

livecd linux # time make && make modules_install
...
real    11m22.920s
user    9m54.290s
sys     0m30.590s

 

 カーネルをインストールする。

livecd linux # cp /usr/src/linux/arch/x86_64/boot/bzImage /boot/kernel

 

initramfs の生成


 まずは genkernel, vim, mdadm, lvm2, cryptsetup を emerge する。

livecd linux # emerge -av genkernel vim mdadm lvm2 cryptsetup

 

 genkernel コマンドで initramfs を生成する。rootfs のマウントには mdadm による自動アセンブル、LUKS によるデバイスのアンロック、LVM 2 による論理ボリュームのアクティブ化が必要になるので --mdadm, --luks, --lvm オプションを付け足しておく。

livecd linux # genkernel --install --no-ramdisk-modules --mdadm --luks --lvm initramfs

 

 initramfs のファイル名が少し長いので「initramfs」にリネームする。

livecd linux # mv /boot/initramfs-genkernel-x86_64-3.6.11-gentoo /boot/initramfs

 

fstab の編集 


 fstab を編集し、ファイルシステムがブート時に自動マウントされるようにする。(ここから vim コマンドでファイル編集ができるのは Vimmer として嬉しい)

livecd linux # vim /etc/fstab

 

 mdadm は自動アセンブルするときに、RAID デバイスの名前を md127, md126, md125... としていくようだ。この機構を利用して1行目のファイルシステムを「/dev/md126」とした。LVM の物理ボリューム にあたる /dev/md127 は initramfs 内で自動アセンブルされる。私は次のように編集した。

/dev/md126             /boot           ext2            noauto,noatime  1 2
/dev/vg/root            /               ext4            noatime         0 1
/dev/vg/swap            none            swap            sw              0 0
/dev/vg/home            /home           ext4            noatime         1 2
/dev/vg/usr             /usr            ext4            noatime         1 2
/dev/vg/opt             /opt            ext4            noatime         1 2
/dev/vg/var             /var            ext4            noatime         1 2
/dev/vg/tmp             /tmp            ext4            noatime         1 2
/dev/cdrom              /mnt/cdrom      auto            noauto,ro       0 0

 

ホスト名の設定 


 /etc/conf.d/hostname を編集し、ホスト名を設定する。

livecd linux # vim /etc/conf.d/hostname

 

 私は次のように編集した。

# Set to the hostname of this machine
hostname="host"

 

net の編集


 /etc/conf.d/net を編集し、DHCP の設定をする。

livecd linux # vim /etc/conf.d/net

 

 ブリッジと TAP の設定は再起動後に行うことにする。私は次のように編集した。

config_eth0="dhcp"

 

ロケールの設定


 /etc/locale.gen を編集し、ロケールの設定をする。#en_US.UTF-8 UTF-8 の # を外す。

livecd linux # vim /etc/locale.gen

 

 /etc/env.d に 02locale ファイルを作成する。

livecd linux # vim /etc/env.d/02locale

 

 私は次のように環境変数を設定した。

LANG="en_US.UTF-8"
LC_COLLATE="C"

 

 環境変数を更新しておく。

livecd linux # env-update && source /etc/profile 

 

 システムツールのインストール


 Syslog-ng, dhcpcd, fcron, iptables, sudo を emerge する。

livecd linux # emerge -av dhcpcd syslog-ng fcron iptables sudo

 

 Syslog-ng, dhcpcd, fcron が自動的に起動するように設定。

livecd linux # rc-update add syslog-ng default
 * service syslog-ng added to runlevel default
livecd linux # rc-update add fcron default
 * service fcron added to runlevel default
livecd linux # rc-update add dhcpcd default
 * service dhcpcd added to runlevel default

 

 LVM 2 と mdadm がブート時に自動的に起動するように設定。 

livecd linux # rc-update add mdadm boot
 * service mdadm added to runlevel boot
livecd linux # rc-update add lvm boot
 * service lvm added to runlevel boot

 

ネットワークインターフェースの設定


 eth0 ネットワークインターフェースを作成する。

livecd linux # ln -s /etc/init.d/net.lo /etc/init.d/net.eth0

 

 eth0 を自動的に有効にする。

livecd linux # rc-update add net.eth0 default
 * service net.eth0 added to runlevel default

 

ユーザの設定


 root ユーザのパスワードを設定する。

livecd linux # passwd
New password: (Password)
Retype new password: (Password)
passwd: password updated successfully

 

 一般ユーザを追加する。

livecd linux # useradd user

 

 一般ユーザのパスワードを設定する。

livecd linux # passwd user
New password: (Password)
Retype new password: (Password)
passwd: password updated successfully

 

 このユーザを sudoer に追加。

root ALL=(ALL) ALL
user ALL=(ALL) ALL

 

GRUB の設定


 まずは GRUB を emerge する。

livecd linux # emerge -av grub

 

 /boot/grub/grub.conf を編集する。

livecd linux # vim /boot/grub/grub.conf

default 0
timeout 10
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Gentoo Linux
root (hd0,0)
kernel /boot/kernel crypt_root=/dev/md/host:lvm real_root=/dev/vg/root dolvm doluks domdadm
initrd /boot/initramfs

 

 grub コマンドで2台の HDD に GRUB をインストールする。

livecd linux # grub

 

 /boot/grub/stage1 を含むパーティションを検出する。

grub> find /boot/grub/stage1
 (hd0,0)
 (hd1,0)

 

 ルートを指定し、特定のパーティションをセットアップする。

grub> root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd

grub> setup (hd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... yes
 Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  17 sectors are embedded.
succeeded
 Running "install /boot/grub/stage1 (hd0) (hd0)1+17 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded
Done.

 

 (hd1,0) も同じ流れで設定する。

 

 quit コマンドで GRUB の設定を終了する。

grub> quit

 

再起動


 chroot 環境から元に戻り、ファイルシステムをアンマウントする。

livecd linux # exit
exit
livecd ~ # umount -l /mnt/gentoo{/usr,/home,/opt,/tmp,/var,/boot,/}

 

 最後に reboot コマンドで再起動する。

livecd ~ # reboot

 

その後 

 ブート中にアンロックのためのパスワードが要求されるので、cryptsetup で設定したパスワードを入力する。

 

 f:id:Saneyan:20130116074226p:plain

 そして下のスクリーンショットのようにログイン画面が表示されたらインストール成功!

f:id:Saneyan:20130116074233p:plain

 

 次は iptablesKVM などの設定をしていく。 

 

参考になったサイト

  1. KVM - Gentoo Linux Wiki: http://en.gentoo-wiki.com/wiki/KVM
  2. Gentooインストール記 システムの構築: http://bd.tank.jp/gentoo/install4.html
  3. dm-crypt による暗号化ファイルシステムの作成 - WebOS Goodies: http://webos-goodies.jp/archives/50567953.html
  4. Gentoo Linux Documentation - Gentoo Linux Genkernel Guide: http://www.gentoo.org/doc/en/genkernel.xml
  5. Gentoo Linux Documentation - Gentoo Linux x86 with Software Raid and LVM2 Quick Install Guide: http://www.gentoo.org/doc/en/gentoo-x86+raid+lvm2-quickinstall.xml
  6. Gentoo Linux Documentation - Gentoo Linux AMD64 Handbook: http://www.gentoo.org/doc/en/handbook/handbook-amd64.xml
  7. Ubuntu 10.04 LTS で暗号化 LVM を利用し、さらにパーティションを細かく分割する。 - D.: http://d.hatena.ne.jp/Naruhodius/20100718/1279443762
  8. [KVM】勉強メモ:gentoo上にkvmでFreeBSD9を立ち上げる - j-haradaの日記: http://d.hatena.ne.jp/j-harada/20110810/1312935410
  9. Gentoo LinuxVirtualBoxにインストールしてみた - chulip.org: http://chulip.org/entry/20110522/1306085652
  10. Mdadm - HelloKitty68: http://hellokitty68.main.jp/wiki/Mdadm