2008年03月16日

Gentoo Linuxのインストール(自己流)

いつも手順を忘れちゃうのでメモ。
自分用なのでけっこう端折ってる部分も多いです。

基本的には、ハンドブックの手順に従います。

Gentoo Linux Documentation -- Gentoo Linux x86 ハンドブック
http://www.gentoo.org/doc/ja/handbook/handbook-x86.xml

まずは起動用のCDを用意。
その時一番新しいLiveCDを使います。(minimalでもいいんですけど)
ダウンロードはいつも東大にお世話になってます。

ftp://ftp.ecc.u-tokyo.ac.jp/GENTOO/releases/x86/current/livecd の一覧
ftp://ftp.ecc.u-tokyo.ac.jp/GENTOO/releases/x86/current/livecd/

ダウンロードしたISOイメージをCDに焼いたら、CDから起動。
無事起動したらターミナルを起動します。

とりあえず時刻があっていることを確認します。(date)
あってなかったら合わせます。タイムゾーンはUTCのままでOKです。

続いてネットワークが繋がっていることを確認します。(ipconfig)
DHCPの環境で普通のハードウェアなら、たいてい何もしなくても繋がります。運悪く繋がらなかったらハンドブックを熟読して何とか繋ぎましょう。

母艦からsshで作業を進めるつもりなら、rootのパスワードを設定(passswd)してから、/etc/ssh/sshd_configの以下の2行を修正します。
PermitRootLogin yes
PasswordAuthentication yes

そしたらsshdの起動します。
/etc/init.d/sshd start

続いてディスクの準備。
私の場合はWindowsとのデュアルブート環境が多い&LVM大好きなので、基本パーティションと論理パーティションを使って以下のような感じでディスクを構成します。
基本:ブートパーティション(128MB)
論理1:ルートパーティション(512MB)
論理2:LVM用の領域(ありったけ)

Windowsとのデュアルブート構成で、ブートローダにNTLDRを使う場合はブートパーティションは基本パーティションに作らないと駄目なので注意しましょう(grubを使った場合はどうなんだろう…)。デュアルブートしない or Windowsで使ってるパーティションが1つの場合は全部基本パーティションでも構いません。デュアルブート環境であればWindowsとLinuxから共通で使えるFAT32な領域も作っておくと便利かもしれません。

ここからはディスクを/dev/sda、Windowsが/dev/sda1/dev/sda2を使っていると仮定して話を進めます。

まずはディスクのパーティション作成。(fdisk)
/dev/sda3128MB/dev/sda5512MB/dev/sda6に残り全部を割り当てます。
パーティションタイプはsda3sda583(Linux)、sda68e(Linux LVM)です。最後 'w' でパーティション情報を書き出すのを忘れずに。

完成したらディスクをフォーマットします。
mkfs.ext3 /dev/sda3
mkfs.ext3 /dev/sda5

続いてLVM領域の作成。まずは物理ボリュームの作成。
pvcreate /dev/sda6

続いてボリュームグループの作成。
vgcreate rootvg /dev/sda6

最後に論理ボリュームの作成。とりあえずこんな感じに。
/usr:3GB
/usr/portage:2GB
/var:1GB
/tmp:4GB
/opt:512MB
/home:128MB
swap:2GB

LVMなので足りなくなったら拡張できるので、サイズは小さめに設定しておきます。/tmpはportageの一時ファイルを置くので大きめ。/usr/portageは3GBくらい取っておいてもいいかもしれません。
実際に論理ボリュームを作るコマンドはこちら。
lvcreate -L3G -nlv_usr rootvg
lvcreate -L2G -nlv_portage rootvg
lvcreate -L1G -nlv_var rootvg
lvcreate -L4G -nlv_tmp rootvg
lvcreate -L512M -nlv_opt rootvg
lvcreate -L128M -nlv_home rootvg
lvcreate -L2G -nlv_swap rootvg

論理ボリュームが完成したら一気にフォーマット。
mkfs.ext3 /dev/rootvg/lv_usr
mkfs.ext3 /dev/rootvg/lv_portage
mkfs.ext3 /dev/rootvg/lv_var
mkfs.ext3 /dev/rootvg/lv_tmp
mkfs.ext3 /dev/rootvg/lv_opt
mkfs.ext3 /dev/rootvg/lv_home
mkswap /dev/rootvg/lv_swap

スワップは早速使います。
swapon /dev/rootvg/lv_swap

作成したファイルシステムを順次マウントします。
mount /dev/sda5 /mnt/gentoo
cd /mnt/gentoo
mkdir boot usr var tmp opt home proc dev
mount /dev/sda3 /mnt/gentoo/boot
mount /dev/rootvg/lv_usr /mnt/gentoo/usr
mkdir /mnt/gentoo/usr/portage
mount /dev/rootvg/lv_portage /mnt/gentoo/usr/portage
mount /dev/rootvg/lv_var /mnt/gentoo/var
mount /dev/rootvg/lv_tmp /mnt/gentoo/tmp
mkdir /mnt/gentoo/tmp/portage
mount /dev/rootvg/lv_opt /mnt/gentoo/opt
mount /dev/rootvg/lv_home /mnt/gentoo/home
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev

procdevは作成したファイルシステムではないのですが、あとでchrootするときに必要になるのでここでマウントしてしまいます。

そしたらstage tarball(stage3)portageをダウンロードします。
cd /mnt/gentoo
links http://www.gentoo.org/main/en/mirrors.xml

linksの使い方は何となく分かると思います(ファイルのダウンロードは'd'です)。ダウンロード先としてJapanの中からお好きなサイトを選んでください。(Japanじゃなくてもいいんですが)

stage tarballは "release -> x86(x86以外の方ごめんなさい) -> current -> stages" の先にある stage3-i686-xxxx.x.tar.bz2 です。間違えてx86を選ばないように注意しましょう。(Pentium Pro以降のCPUは全てi686です)

portageは "snapshots" の下にある portage-latest.tar.bz2 です。こちらはアーキテクチャによる違いはありません。

ダウンロードが完了したらファイルを展開します。
tar xvjpf stage3-*.tar.bz2
tar xvjf portage-latest.tar.bz2 -C /mnt/gentoo/usr

続いてコンパイルオプションの設定をします。ハンドブックではnanoを使っていますが、私はviしか使えないのでviで編集しています。
vi /mnt/gentoo/etc/make.conf

私が設定しているのは以下の項目です。

CHOST
基本的には編集する必要ありません。i686をダウンロードしたはずなので"i686-pc-linux-gnu"と設定されているはずです。それ以外の値が設定されている場合はダウンロードするstage tarballを間違えている可能性があります。

CFLAGSとCXXFLAGS
CFLAGSのmarchは使用するCPUによって細かく分かれています。Gentoo WikiSafe Cflagsを参照して、自分のCPUに適合した値を設定してください。その他のフラグはハンドブックのとおりですが、私はXenを使う可能性を考慮して-mno-tls-direct-seg-refsもセットしています。

USE
これはもう作ろうとする環境によって全然違うので、基本的には各自で設定していただく以外にないと思います…。と言うか正直、私もよく分かっていません。最初に師匠に作ってもらったものを適宜入れ替えているうちに今の設定値になった、という秘伝のタレみたいな状態になっています。(笑)

PORTAGE_TMPDIR
私の場合portageの作業ディレクトリ用としてtmpを大きく確保しているので、設定値は/tmp/portageとしています。デフォルトだと/var/tmpです。とにかく場所を食うので大容量でパンクしてもダメージの少ないファイルシステムに設定してください。

ACCEPT_KEYWORDS
基本的には編集する必要ありません。i686をダウンロードしたはずなので"x86"と設定されているはずです。それ以外の値が設定されている場合はダウンロードするstage tarballを間違えている可能性があります。

MAKEOPTS
とりあえずシングルコアであれば"j2"、デュアルコアであれば"j3"でOKかと思います。distccを使うようになると値が変わってくるのですが、それはまた先の話と言うことで。

GENTOO_MIRRORS
私の場合はmirrorselectを使用せず直接make.confに書いてしまいます。設定するのは"ftp://ftp.ecc.u-tokyo.ac.jp/GENTOO ftp://gg3.net/pub/linux/gentoo http://mirror.gentoo.gr.jp"の3つのサイトです。

SYNC
emerge --syncに使用するサーバを指定します。ごはんの国の人なので設定は"rsync://rsync.jp.gentoo.org/gentoo-portage"としています。

FEATURES
使用する機能を設定します。正直よく分かってないんですが、USEフラグ同様秘伝のタレ状態で"ccache noauto noclean keeptemp keepwork digest"を設定しています。

INPUT_DEVICES
これはXを使用しないのであれば必要ないと思います。私はよく分からないまま"keyboard mouse"を指定しています。

VIDEO_CARDS
これもXを使用しないのであれば必要ないと思います。使っているビデオカードによって設定値が変わるので注意が必要です。設定できる値は emerge -pv x11-base/xorg-server で確認可能です。私の場合はIntel 945チップセット内蔵のVGAを使用しているので"i810 vesa fbdev"としています。

LINGUAS
使用する言語を設定します。フランス語とかポルトガル語とかインストールされても困ってしまうので"ja"とだけ設定します。

そんなこんなで完成したmake.confはこんな感じです。→ make.conf

上記で触れていない値も存在しますがあまり気にしないでください。あとXのデスクトップ環境にはXfce4を使用するため、Gnome/KDE関連のUSEフラグは全部OFFってあります。

ついでにglibcのロケールも設定しておきましょう。
vi /mnt/gentoo/etc/locale.gen

私は英語と日本語を有効にするために以下のようにしています。
en_US ISO-8859-1
en_US.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP
ja_JP.UTF-8 UTF-8
ja_JP EUC-JP

chroot前の最後の作業。DNS情報をコピーします。
cp -L /etc/resolv.conf /mnt/gentoo/etc/

これで準備完了!いよいよchrootします。
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile
export PS1="(chroot) $PS1"

最後の1行(プロンプト変更)は必須ではありませんが、間違いを防ぐためにもやっておいた方がいいでしょう。ここでの手順もchrootした環境とchrootしてない環境での作業が混ざるため、chrootしてない環境を緑、chrootした環境を青で書いていきます。

chrootに成功したらまずはタイムゾーンを設定しておきましょう。
cp /usr/share/zoneinfo/Japan /etc/localtime

時刻が狂っていたらここで時刻修正も行います。
date MMDDhhmmYY

そしたらportageツリーを更新します。
emerge --sync

サーバが混雑しているとけっこう待たされるので、気長に待ちましょう。

最新のPortageツリーを取得すると、たぶんportageをバージョンアップしろと警告が出ると思います。警告されたとおりにportageをemergeします。
emerge portage

さぁ、いよいよインストールの第1の山場!全てのパッケージを再作成します。これはハンドブックの手順にはないのですが、環境最適化を標榜するGentooなので是非とも行いたいところです。コマンドとしては至って簡単。
emerge -ev world

これで初期状態で導入されている全てのパッケージを再コンパイルします。だもんでCPUが非力のマシンだととんでもない時間がかかります。デュアルコアなPenD820だと4時間くらいで完走しましたが、Celeron650MHzなノートでやったときには丸1日以上かかりました。諦めて待ちましょう。事前にdistccをemergeしておいて周りのマシンの力を借りるという手もありますが、gccのバージョンの差違とかを考えるとちょっと怖いので単独でやることが多いです。

ちなみに途中でコンパイルに失敗して止まってしまうことが多々あります。その場合は、
rm -rf /tmp/portage/*
emerge --resume

で回避できることがけっこう多いです。単にtmpを消すだけでは駄目だった場合はエラーログを読んで然るべき対策を打ちましょう。どうしてもうまく行かない場合は、
emerge --resume --skipfirst

で失敗したパッケージを無視して次のパッケージに進むことが可能です。

USEフラグに 'X' を入れてあるので付随するパッケージが大量にemergeされるかもしれません(emerge -pev worldで確認できます)。その場合は一時的にUSEフラグを '-X' に変更するとパッケージ数が減らせると思います。他にも循環参照とか必要なパッケージがマスクされていたりとかいろいろ問題が起こる場合がありますが、その時は頑張ってどうにかしてください。(無責任でスミマセン…)

無事にworldが完走したら、設定ファイルの更新をします。
dispatch-conf

とりあえず今は全部 'u'(use new) でOKです。

あとは必要なパッケージをインストールしましょう。
emerge -av lvm2 grub gentoolkit syslog-ng vixie-cron logrotate pciutils usbutils bind-tools sudo vim eix dhcpcd acpid ntp nfs-utils pcmcia-cs pcmciautils

全てが全て必要なわけではありません(特に最後2つはPCカードスロットの付いたノート以外は必要ありません)が、私は基本の基本としてこれだけのパッケージを入れています。いらないものは削っていただいても問題ありませんが、grublvm2は必須です。(私はよくlvm2を入れ忘れて再起動で撃沈します…)

設定ファイルの更新(dispatch-conf)を要求されたら実行してください。終わったら起動時に必要なものを登録していきます。
rc-update add syslog-ng default
rc-update add vixie-cron default
rc-update add acpid default
rc-update add pcmcia default

eixのデータベースも更新しておきましょう。
update-eix

続いてfstabの設定。nanoが使いこなせない私はchroot前の環境からviを使って編集します。
vi /mnt/gentoo/etc/fstab

設定は以下のようになります。
/dev/sda3 /boot ext3 noatime 1 2
/dev/sda5 / ext3 noatime 0 1
/dev/rootvg/lv_swap none swap sw 0 0
/dev/rootvg/lv_usr /usr ext3 noatime 0 0
/dev/rootvg/lv_portage /usr/portage ext3 noatime 0 0
/dev/rootvg/lv_var /var ext3 noatime 0 0
/dev/rootvg/lv_opt /opt ext3 noatime 0 0
/dev/rootvg/lv_tmp /tmp ext3 noatime 0 0
/dev/rootvg/lv_home /home ext3 noatime 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
続いてホスト名の設定。これもchroot前の環境から、
vi /mnt/gentoo/etc/conf.d/hostname

HOSTNAME変数に任意のホスト名を設定します。
ここで設定したホスト名はhostsにも書いておきましょう。
vi /mnt/gentoo/etc/hosts

localhostの隣に設定したホスト名を記述してください。

そしてネットワーク設定。ここでは有線のNICが1つしかないと仮定して話を進めます。(複数NICとか無線とか入るとけっこう厄介なのです)
vi /mnt/gentoo/etc/conf.d/net

よくあるDHCPな環境ならこんな感じ、
config_eth0=( "dhcp" )
dhcp_eth0="nontp nonis"

IPを自分で設定するならこんな感じです。
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255")
routes_eth0=( "default gw 192.168.0.1" )

で、ネットワークを自動起動するように設定します。
cd /etc/init.d
ln -s net.lo net.eth0
rc-update add net.eth0 default

rootのパスワードを設定します。最初に実施したパスワードの設定はchroot前の環境(=LiveCDの環境)、ここで設定するパスワードは現在作成中の環境であることに注意してください。
passwd

シリアルコンソール経由でrootログインが必要な場合は以下のコマンドを実行します。
echo "tts/0" >> /etc/securetty

キーボードの設定をします。これもファイル編集が必要なのでchroot前の環境から。
vi /mnt/gentoo/etc/conf.d/keymaps

変更すべき設定値は以下のとおりです。
KEYMAP="jp106"

私のようにCtrlとCapsを入れ替えて使いたい人はこれも追加します。
EXTENDED_KEYMAPS="ctrl"

あと、私のようなnanoが使えない人はデフォルトエディタをvimにしておきましょう。
vi /mnt/gentoo/etc/rc.conf

変更すべきは以下の2行です。
#EDITOR="/bin/nano"
EDITOR="/usr/bin/vim"

あとは時計の設定。
vi /mnt/gentoo/etc/conf.d/clock

ハードウェアクロックは普通日本時間に設定されていると思うので、以下のように設定を変更します。
CLOCK="local"

いよいよカーネル設定です。まずはカーネルソースを入手します。通常の環境であれば gentoo-sources 、サスペンドを使いたい場合は tuxonice-sources をemergeします。USEフラグにsymlinkを付けておくと/usr/src/linuxへのシンボリックリンクを張ってくれて便利です。
USE="symlink" emerge gentoo-sources

そしたらもう1つの山場、カーネル設定に入ります。
cd /usr/src/linux
make menuconfig

頑張って設定してください。(としか言いようがないんです…とりあえずこの辺がとても参考になります)

設定が終わったらカーネルの作成とインストールをします。
make
make modules_install
cp arch/i386/boot/bzImage /boot/kernel-2.6.xx.y

xxとyにはカーネルのバージョンを入れておくといいと思います。

ボチボチ最終コーナーです。GRUBの設定をします。
vi /mnt/gentoo/boot/grub/grub.conf

ここまでの手順取りであれば設定は以下のとおりでOKです。
# Boot automatically after 30 secs.
timeout 30

# By default, boot the first entry.
default 0

# Fallback to the second entry.
fallback 1

# Splash image to show behind grub.
splashimage=(hd0,2)/boot/grub/splash.xpm.gz

# For booting Gentoo
title Gentoo 2.6.xx.y
root (hd0,2)
kernel /boot/kernel-2.6.xx.y root=/dev/sda5

そしてGRUBをインストールします。
grep -v rootfs /proc/mounts > /etc/mtab
grub-install /dev/sda3

ちなみにこれはWindowsとのデュアルブートを想定しているためbootパーティションにGRUBをインストールしていますが、Gentooのみを使うのであれば、
grep -v rootfs /proc/mounts > /etc/mtab
grub-install /dev/sda

とし、MBRにGRUBをインストールするのが正しい手順となります。

以上で全ての作業が完了しました。
chroot環境を抜けてシステムの再起動をします。
exit
umount /mnt/gentoo/boot
umount /mnt/gentoo/usr/portage
umount /mnt/gentoo/usr
umount /mnt/gentoo/var
umount /mnt/gentoo/tmp
umount /mnt/gentoo/opt
umount /mnt/gentoo/home
umount /mnt/gentoo/proc
umount /mnt/gentoo/dev
umount /mnt/gentoo
reboot

これでお終い。

GRUBをMBRにインストールした環境であればGRUBの起動画面が表示され、Enterを押すとGentooの起動が始まると思います。Windowsとのデュアルブートにしている場合(GRUBをパーティションにインストールした場合)はWindowsが起動してくると思いますので、bootpartなどを使ってNTLDRからGRUBを起動する設定を追加してください。bootpartの使い方については以下のページで非常に詳しく解説されています。

BOOTPARTユーティリティの使い方
http://nobumasa-web.hp.infoseek.co.jp/multi_boot/bootpart.html

ちなみにVistaの場合はbootpartが使えません。こちらを参照して手動で設定をしてください。ブートイメージの取得は再起動前に取得しておくと簡単でよいです。

さて、運悪くGentooが起動してくれなかった場合、LiveCDから起動し直して設定等の見直しを行う必要があります。その際にLVMのボリュームがそのままでは見えないので、以下のコマンドを実行してボリュームの再認識をして下さい。
vgscan
vgchange -ay

導入は大変ですが、使い始めるととっても便利なGentoo。
このエントリを見て『使ってみようかな』と思ってくれる人がいたらこれ幸いです。
posted by 月水和尚 (とも) at 23:50 | Comment(0) | TrackBack(0) | Linux(ディストリビューション固有)
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。