CentOS 5をプログラミング環境で使う

インストールメモ

CentOS 5 インストールメモ(x86)

CentOS 5.Xをx86 PCにインストールしたときのメモです。

なお、WindowsマシンでVMware上でCentOSをインストールするメモはこちらのページに記載します。

インストール対象マシン

種別 型式 備考
CPU Athlon XP 2500+  Bartonコア、1.83GHz, FSB 333MHz, 512KB2次キャッシュ
メモリ PC2700(DDR333)
M/B MSI 746F Ultra-L SiS 746FX+963L, DIMMx3, AGP 8x, PCI, LAN Realtek 8201BL
Video GeForce 6600
CD/DVD

インストール

CentOS 5.1のDVDイメージをダウンロードし、DVD-Rに焼きました。

続いて、DVDを装填してPCの電源起動、boot:のところで、linux vesa と入力します。[Enter]だけだとインストーラのX画面が化け化けになってしまいました。グラフィックスカードとの相性による原因と思われます。

補足: CentOS 5.5からは、ファイルシステムとしてext4が利用できるようになりました。インストール時にext4を使う場合、上記のboot: において、ext4 をオプションとして指定する必要があるようです。

boot: linux ext4 vesa

ネットインストール用CD

CentOSのインストール用CD/DVDイメージには、1枚のCDからネットワークインストールするISOイメージが提供されています。CentOS 5.5用の場合は、"CentOS-5.5-i386-netinstall.iso"というファイル名です。これをCD-Rに焼いて、ブートします。

途中でインストール先の接続種類を聞いてくるので、リストからFTPもしくはHTTPを選択します。

次に、使用するネットワークとIPアドレス割付手段を聞いてくるので使用するネットワーク環境に合わせて選択します(デフォルトはIPv4はDHCP)。それから、接続先のホストアドレスとディレクトリを入力するよう求められるので、CentOSのミラーサーバの1つとそのディレクトリを入力します。(例: Web site nameに、ftp.riken.jp、CentOS directoryに、Linux/centos/5.5/os/i386)

指定した場所から、images/state2.img を取得しインストールを続行します。

メモリテスト

boot:のところで、memtest86と入力すると、メモリテストが開始します。

ディスプレイドライバ

nVIDIAディスプレイドライバ

GeForce 6600を搭載しているので、nVIDIAのサイトからLinux用ドライバをダウンロードしインストールしました。

NVIDIA-Linux-x86-256.35.run

インストールにあたっては、Xが起動していると怒られるので、まずランレベルを1にしたところ、ランレベル3でないとだめだと怒られ、init 3でランレベル3でやっとインストールができました。

/etc/X11/xorg.confに追加するため、以下のコマンドを実行しました。

# nvidia-xconfig --composite
# nvidia-xconfig --render-accel
# nvidia-xconfig --add-argb-glx-visuals -d 24

起動/停止させるサービス

開発環境として使用する場合、余計なサービスは動いて欲しくないので、取捨選択します。

不要なサービス

NetworkManager, NetworkManagerDispatcher
無線LAN/有線LANの切り替えなど。モバイルでないマシンには不要。
acpid
Advanced Configuration and Power Interface daemonの略。電源管理系サービス。デスクトップPCの場合、サスペンド・休止状態を扱いたいなら必要。でなければ不要。
cron, anacron, atd
cronは必須。デスクトップPCならanacron、atdは不要。
apmd
ACPIに対応したデスクトップPCなら不要。
auditd
監査機能を使わないなら不要。なお、カーネル内で完全に監査を無効にするには、パラメータaudit=0でブートする。
autofs
リムーバルメディアを使用しないなら不要。
avahi-daemon, avahi-dnsconfd
DNSサーバなしにローカルネットワーク上のデバイスとサービスを見つける。不要。
bluetooth, hcid, hidd, sdpd, dund, pand
Bluetoothデバイスを持っていないなら不要。
cpuspeed
アイドル時にCPUクロックを下げる機能だが開発者用マシンには不要(RDTSC等に障害となる)
cups, cups-config-daemon
CUPS互換プリンタがなければ不要。
firstboot
いらなさそう
gpm
コンソールでマウスを使う。不要かも。ランレベル3ではonにしてもよいかも。
haldaemon
USBメモリを使用しないなら不要かも。
hplip, hpiod, hpssd
HPプリンタサポート。HP互換プリンタがないなら不要。
irqbalance
マルチCPUでなければ不要。
mcstrans
SELinuxを使用しているなら必要。
mdmonitor
ソフトウェアRAIDおよびLVM情報の監視。不可欠なサービスではないので不要。
netfs
NFS、Samba等の共有ネットワークファイルに自動でマウントするのがいらないなら不要。
nfslock
NFSを使わないなら不要。
pcsd
Smart Card機能なんで使わないなら不要。
portmap
NFS、NISの一部。不要
readahead_early, readahead_later
ファイルシステム先読み。CD等遅いファイルシステム上でUNIXを起動していないなら不要。
restorecond
SELinuxのファイル内容監視と復元に使用する。SELinuxを使わないなら不要。
rpcgssd, rpcidmapd, rpcsvcgssd
NFS v4で使用する。NTFS v4を使わないなら不要。
sendmail
普通メール転送エージェントはデスクトップPCには使わないので不要。
yum-updatesd
インターネットにつながないなら不要。
参考URL

サービスの停止操作

--levelオプションで指定するランレベルでサービスを無効にします。--levelオプション省略時は全ランレベル指定となります。

# /sbin/chkconfig [--level n] <サービス名> off

ftpd

ftpサーバはセキュアでないので、sshを使用するのが通例ですが、プログラム開発においてftp機能を使用するものがあるのでインストールします。

# yum install vsftpd
...
# 
# chkconfig vsftpd on
vsftpd    0:off 1:off 2:on  3:on  4:on  5:on  6:off
#

ホスト名の設定

DHCPでIPアドレスを設定すると、ホスト名が localhost になってしまう

/etc/sysconfig/network ファイルの HOSTNAME= の行を修正します。

HOSTNAME=myhost

起動時間の短縮

起動時間の詳細を計測するーBootchart

Bootchartというツールを使うと、Linuxのブート処理の状況をロギングし結果を画像ファイルでタイムチャートで示してくれます。

インストールと実行

起動時間短縮のアプローチ

対象マシン
CPU: Athlon XP 2500+ (Bus clockを166MHz→189MHzにOCして2081MHz運転、2800+相当)
M/B: MSI 746F-Ultra L(SiS 746FXチップセット)
Memory: PC3200(DDR400)
Video: GeForce 6600GT AGP
デフォルトのbootchart計測結果(初回)

46秒となっています。

最初の対策(rhgbの停止)

まず、起動後18秒目くらいからXorgによるディスク負荷が、20秒目くらいからXorgによるCPU負荷が増えています。CentOSをインストールした場合、デフォルトでは、Linuxが起動するときにrhgb(Red Hat Graphical Boot)が呼ばれ、X Window System上で初期化状況を表示します。これはX Window Systemを起こしているので、コンソールのみの場合に比べて立ち上がり時間が遅くなります。

そこで、まずrhgbを停止します。/etc/grub.confのカーネルオプションにあるrhgbを削除します。

title Bootchart logging
    root (hd0,0)
    kernel /vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/VolGroup00/LogVol00 quiet init=/sbin/bootchartd

また、/etc/sysconfig/initファイルのGRAPHICAL=yesをnoに書き換えます。

# Turn on graphical boot
GRAPHICAL=no
bootchart計測結果(2回目)

38秒となっています。17%の短縮です。

2回目の対策(不要なサービスの停止)

起動しているサービスのうち、不要なものを停止します。要否の判断に悩みますが、ネット上の情報を集めて以下のとおりにしました。

autofs           起動(CD-ROM等の自動的なマウントに必要)
crond            起動
haldaemon        起動(ネットワークの使用に必要)
ip6tables        停止
iptables         停止
kudzu            停止(着脱されたハードウェアを検出し設定)
lvm2-monitor     停止(LVMの障害監視)
messagebus       起動(X Window Systemの起動に必要)
network          起動(ネットワークの使用に必要)
nfslock          停止(NFSサーバのファイルロック機構)
setroubleshoot   停止(SELinuxのトラブルシュート機能)
smartd           停止(ハードディスクの自己診断機能S.M.A.R.Tの異常監視)
sshd             起動(リモートからの操作に必要)
syslog           起動(システムのログ採取に必要)
vsftpd           停止
xfs              起動(X Window Systemに必要)

※その他のサービスは既に停止していました。

bootchart計測結果(3回目)

34秒となっています。

3回目の対策(DHCPの停止と手動設定)

DHCPの設定も起動時間に含まれます。アドレスを手動設定することで起動時間が早くなります。

設定は、/etc/sysconfig/network-scripts/ifcfg-eth0 で指定します。

DEVICE=eth0
BOOTPROTO=none      # dhcp → none に書き換え
HWADDR=00:10:DC:XX:XX:XX
ONBOOT=yes
# DHCP_HOSTNAME=foo.bar   削除
IPADDR=192.168.x.y
NETMASK=255.255.255.0
NETWORK=192.168.x.0
BROADCAST=192.168.x.255
GATEWAY=192.168.x.z
TYPE=Ethernet
USERCTL=no
PEERDNS=no
IPV6INIT=yes

現状の情報を取得するときには、ifconfigコマンド(HWADDR, IPADDR, NETMASK, NETWORK, BROADCAST)、/etc/resolv.confファイル(DNSサーバ)、route -nコマンド(GATEWAY)で確認します。

bootchart計測結果(4回目)

36秒となっています。かえって時間が増えたようです。DHCPは意外と初期化時間には影響しないと思われます。

起動時のログイン方法の設定

デフォルトでは、起動後にX Window Systemが起動した上にGDMのログイン画面が表示されます。これは、インストール時のデフォルトで起動時のランレベルが5に指定され、ランレベル5ではgdmが起動するようになっているからです。

/etc/inittabの記述(抜粋)

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
 :(略)
# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

上記の1行目で起動時のランレベルが5となるよう設定されています。

上記の最後の行で、ランレベル5のときは、/etc/X11/prefdmスクリプトが実行されます。このスクリプトでは、システムのデスクトップ設定に基づき、GNOMEであればxdmが、KDEであればkdmが、それ以外であればxdmを起動しています。

起動時は、コンソールログインとしたい

/etc/inittabのinitdefaultをランレベル3とします。

id:3:initdefault:

自動ログインとしたい

目的

特定の用途で使用する場合(制御系のシステム等)、起動のたびにユーザがログイン操作するのが煩わしい、遠隔起動するのでそもそもログイン操作する人がいない、ということがあります。この場合、電源ONで自動で立ち上がる設定としたいことがあります。

また、PC上に仮想ソフトウェア上でLinuxを起動するとき、ほとんど個人専用なので、自動ログインすると楽です。

GNOMEデスクトップの機能で自動ログインを設定する方法と、Linuxのランレベルで自動ログイン用の起動を行う方法があります。前者はお手軽ですが、GNOME限定です。ここでは後者の方法で設定します。

参考URL

ほとんどこのページに記載のあるとおりです。

/etc/inittabの設定変更

/etc/inittabの記述で抜粋した設定のコメントで"unused"となっているランレベル4を自動ログインにしてみます。

id:4:initdefault: 
   :
l4:4:wait:/etc/rc.d/rc 5
   :
ax:4:once:/etc/rc.d/rc.autox

起動時のデフォルトランレベルを4にします。また、ランレベル4での起動スクリプトは、ランレベル5と同じとします。ランレベル4のときに起動するスクリプトを/etc/rc.d/rc.autoxとします。

rc.autoxの記述は、参考URLを参照。

ユーザーアカウント設定

ユーザアカウントの作成・削除

複数ユーザが共有するディレクトリも想定し、先に共通のグループdevを作成します。

# /usr/sbin/groupadd -g 1024 dev 

ユーザーアカウントをグループ指定をして作成します。

# /usr/sbin/useradd -g dev -c "TAKAHASHI,Toru" torutk 

既に作成済みのユーザーアカウントであれば、usermodでグループをdevに変更します。

# /usr/sbin/usermod -g dev torutk 

ユーザーアカウントの削除はuserdelコマンドです。-rオプションでホームディレクトリ、メールスプールを合わせて削除します。

# /usr/sbin/userdel -r torutk 

シェル環境

bashの設定

ログイン時に設定される環境は、以下のファイルに記述されている内容が反映されたものです。

  1. /etc/profile
  2. /etc/profile.d/*.sh
  3. ~/.bash_profile
  4. ~/.bashrc
  5. /etc/bashrc

デスクトップ設定

Xに関するデスクトップ設定、およびフォント設定は、CentOS 5 Xデスクトップ設定メモのページに記述しています。

リポジトリおよびyumに関して

DVD-Rからyum install

CentOS 5.1のDVD-Rを入れると、/media/CentOS_5.1_Final にマウントされるので、/etc/yum.repo.d/CentOS-Media.repo の内容を以下に修正し、

[c5-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS_5.1_Final/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-beta

以下コマンドでネットワークのリポジトリは参照せずローカルのメディアを参照します。

# yum --disablerepo=\* --enablerepo=c5-media [command]

ローカルなミラーサイト

公開リポジトリに接続できない環境では、ローカル・エリア・ネットワーク内に公開リポジトリをミラーリングしたサイトを用意します。

LAN上にWebサーバを置き、その下にリポジトリディレクトリを用意します。

http://hoge/centos
    +-- RPM-GPG-KEY-CentOS-5
    +-- 5
        +-- addons       (公式ミラーでは空となっている)
        +-- centosplus   (カーネルの各種バリエーション、DRBDなど。通常不要)
        +-- extras    (使用頻度の低い?パッケージ群)
        +-- os
        |     +-- i386    (この下にDVDの内容をそっくりコピー)
        |           +-- CentOS
        |           +-- NOTES
        |           :
        +-- updates
              +-- i386   (この下に更新データが置かれるのでrsyncでミラーする)

osの下はDVDイメージ内容そのままなので、DVDからコピーします。

centosディレクトリ直下には公開リポジトリのGPG-KEYファイルをコピーしておきます。

centos$ wget http://ftp.riken.go.jp/Linux/caos/centos/RPM-GPG-KEY-CentOS-5

updatesの定期更新

updatesの下は定期的に更新されるファイルなので、CentOS配布サイトとの間で定期的に同期をとりたいところです。

方法1)rsyncで定期的にリポジトリと同期

rsyncでCentOSのミラーサイトと同期するコマンドは以下となります。

$ rsync -avH rsync://ftp.riken.jp/centos/5/updates/i386 \
 --delete /var/www/html/centos/5/updates/

これを、cronで定期実行するように設定しておきます。

T.B.D.
方法2)reposyncで定期的にリポジトリと同期

yum-utilsパッケージに含まれる reposync コマンドで同期します。rsyncプロトコルが通らない場合、こちらの方法を使用します。

$ reposync -r updates -n -d -p /var/www/html/centos/5/

ディレクトリ構成が違ってしまうので、シンボリックリンクで逃げます。

$ ls -l /var/www/html/centos/5/updates
RPMS -> i386/RPMS
i386
$

クライアント側の/etc/yum.repo.d/CentOS-Base.repoの記述修正

[base]
baseurl=http://reposerver.localdomain/centos/$releasever/os/$basearch/
gpgkey=http://reposerver.localdomain/centos/RPM-GPG-KEY-CentOS-5
    :
[updates]
baseurl=http://reposerver.localdomain/centos/$releasever/updates/$basearch/
gpgkey=http://reposerver.localdomain/centos/RPM-GPG-KEY-CentOS-5
    :

参考サイト

パッケージについて

OS系

日本語 man

manによるヘルプ表示を日本語にするには、man-pages-ja パッケージをインストールします。

# yum install man-pages-ja

デスクトップ系

Compiz Fusion

Fedora 8ベースが必要なので、Fedora 6ベースのCentOS 5ではちょっと厳しいかな、と思ってましたが、RHEL 5用にCompiz Fusionのバイナリパッケージを提供しているサイト「Alcance Libre」がありました。(サイト集に記載)

そのサイトからcompiz-fusionを入れようとしたら、依存関係で25パッケージの更新となります。ちょっと不安ですね。

Compiz

CentOS 5にはパッケージが用意されているので、yumでインストールします。

ウィンドウフレームが消える

nVIDIAドライバのインストールで記述した設定を行っていないと、Compizをインストール後、[システム]メニュー[設定]→[デスクトップ効果]を選び、[デスクトップ効果を有効にする]ボタンを押すと、3Dデスクトップ化はされるものの、アプリケーションウィンドウからウィンドウフレームが消えてしまいます。

プログラミング系

Java

標準でCentOSに含まれているJavaは、GCCのものであまり使えないので、SunからLinux版Javaを入手します。

C++

標準でCentOS 5.1に含まれているGCCはVer.4.1.2です。

CentOS 5.3から、標準のGCC 4.1.2とは別にGCC 4.3.2も提供されるようになりました。パッケージ名はgcc43と別名になっており、コマンドも/usr/bin/gcc43と標準のGCC 4.1.2とは重ならないようになっています。

なお、ソースから新しいバージョンのGCCをインストールした記録は、最新版GCCのインストールと活用ページに記述しています。

Eclipse CDT

Eclipse CDTについては、Eclipse CDTメモ ページにCentOSへのインストール方法を含めて記述しています。

Qt 4.3.4

GUIツールキットQtは、CentOS 5.1ではVer.3.3.6およびVer.4.2.1が標準パッケージとして提供されています。しかし、ソフトウェア開発では開発対象プログラムによって設計で規定したバージョンを使うことが多いので、任意のバージョンをインストールする必要が生じます。

パッケージ管理機構(RPM)を通さず直接インストールすると、後々の問題の原因となるので、RPMパッケージを作ってインストールします。

Qtのインストールについては、CentOS 5を使う:Qt4.xをインストールする ページに記述しています。

Emacs

Xウィンドウ上での外観設定

Xのリソースで設定する方法

$HOME/.Xresourcesに記述します。

emacs*Background: DarkSlateGray
emacs*Foreground: White
emacs*pointerColor: Orchid
emacs*cursorColor: Orchid
emacs*bitmapIcon: on
emacs*font: -shinonome-gothic-medium-r-normal-*-12-*-*-*-*-*-*-*
emacs*geometry: 81x45+480+30

SKK

SKKによる日本語入力環境を設定します。

まず、Apelが必要です。以下URLからダウンロードします。

work$ tar xzf apel-10.7.tar.gz
work$ cd apel-10.7
apel-10.7$ make
    :
apel-10.7$ sudo make install
    :
apel-10.7$

次に、DDSKKを以下URLからダウンロードします。

work$ tar xzf ddskk-13.1.tar.gz
work$ cd ddskk-13.1
ddskk-13.1$ make
    :
ddskk-13.1$ sudo make install
    :
ddskk-13.1$

SKK辞書を以下URLからダウンロードします。

work$ gunzip SKK-JISYO.L.gz
work$ sudo cp SKK-JISYO.L /usr/share/skk/
work$

辞書ファイルのパスを.emacsに設定します。

(setq skk-large-jisyo "/usr/share/skk/SKK-JISYO.L")

Trac の設定

インストール

 課題管理システムの一つTracをインストールします。Tracはpythonで記述されているので、あらかじめpythonをインストールしておきます。また、pythonのインストーラが"python-setuptoolsを使用するので、こちらもインストールします。

# yum install python python-setuptools

 tracは、CentOSのパッケージにも用意されていますが、英語版です。別途日本語化作業がインタアクト株式会社によって行われ無償で提供されています。2008/08/13現在、Trac-0.11.ja1 が最新ですのでこれを入手します。

work$ unzip Trac-0.11.ja1.zip
    :
work$ cd Trac-0.11.ja1
Trac-0.11.ja1$ sudo python ./setup.py install
    :

インストール途中で、Genshiパッケージをインターネットからダウンロードしようとするため、インターネット非接続環境だとインストールが途中でエラーとなります。そのときは、GenshiのPython 2.4用eggを別途入手して先にインストールします。

work$ sudo easy_install Genshi-0.5.1-py2.4-linux-i686.egg
    :

後でBASIC認証やダイジェスト認証を使う場合、ユーザアカウント作成用コマンドをインストールしておくと便利です。デフォルトではインストールされないので、手動でコピーします。

Trac-0.11.ja1# cp contrib/htdigest.py /usr/lib/python2.4/site-packages/Trac-0.11.ja1-py2.4.egg/trac/
Trac-0.11.ja1# cp contrib/htpasswd.py /usr/lib/python2.4/site-packages/Trac-0.11.ja1-py2.4.egg/trac/

起動

 ApacheからCGI(FastCGI、mod_python)経由で実行する方法と、httpでアクセス可能なtrac専用デーモンを実行する方法の2つがあります。簡単なのは後者です。

# tracd --port 8889 --basic-auth *,/var/trac/projects/passwd,trac -e /var/trac/projects -d

この例は、ポート番号8889でtracデーモンを起動し、ユーザ認証手段にBASIC認証(認証ファイルは/var/trac/projects/passwd)、プロジェクト(複数可能)を収容するディレクトリに/var/trac/projectsを指定し、デーモンとして実行しているものです。

BASIC認証時のユーザアカウント作成

Sambaによるファイル共有

ホームディレクトリを共有する

/etc/samba/smb.conf に [homes] セクションを記述します。

[homes]
  comment = Home Directories
  browseable = no
  writable = yes

SELinux有効時

ホームディレクトリ以下のディレクトリ・ファイルには、SELinuxの設定に基づいてセキュリティ・コンテキストが割り当てられます。/etc/selinux/targeted/contexts/files/file_contexts.homedirs に記述されている設定によると、一部ディレクトリ・ファイルを除き、user_u:object_r:user_homt_tとなります。

ホームディレクトリ以下のパターン SELinux設定 備考
ホームディレクトリ自体
user_u:object_r:user_home_dir_t
wwwディレクトリ以下 user_u:object_r:httpd_user_content_t
webディレクトリ以下
public_htmlディレクトリ以下
その他一般のディレクトリ・ファイル user_u:object_r:user_home_t

sambaのプロセスはデフォルトではuser_home_t コンテキストにはアクセスが許可されません。そのときは、論理(boolean)パラメータの"samba_enable_home_dirs"を有効にします。(デフォルト無効)

# setsebool samba_enable_home_dirs 1
ホームディレクトリ内のpublic_htmlへのSambaからのアクセス

ホームディレクトリ内のpublic_htmlは、Webサーバ(httpd)からアクセス可能とするため、httpd_sys_content_tコンテキストとなっています。これはSambaからアクセスできないタグです。そこで、httpdおよびSambaの双方からアクセスできるよう、public_content_rw_tコンテキストに変更します。

~$ chcon -t public_content_rw_t public_html -R
~$
ホームディレクトリ内のファイルのコンテキストが user_home_dir_t だと、sambaからファイルが見えない

ファイルのセキュリティコンテキストは、user_home_tに変更します。

複数のファイルをまとめて変更するコマンド例を以下に紹介します。上述でpublic_htmlのセキュリティコンテキストは設定済みな想定で、そこを除外しています。

~$ find . -type f -o -name "public_html" -prune -exec chcon -t user_home_t {} \;
~$