Gentoo Logo
Gentoo Logo Side

env.d HOWTO

Content:

1. env.dの概要と一般的な変数について

Gentooの基本的な環境変数 

よく、Gentooユーザーが次のような質問をしているのを見かけます。 「環境変数はどこで設定されてんの?」「環境変数はどういう風に設定されてんの?」 このあたりのことを理解するためには、まず、そもそも環境変数が何かということについて知らないといけません。 環境変数はexportコマンドが発行されるたびに設定されます。 たとえばexport EDITOR="/usr/sbin/vim"と実行すると、 システムに自分のデフォルトエディタがvimだと伝える環境変数を設定したことになります。 あなたがGentooで設定できる環境変数には多種多様なものがあります。以下に例を示します:

Note: exportコマンドで設定した環境変数は、現在のシェル*だけではなく*その子プロセスでも有効になります。 とりあえず変数は指定したいんだけど子プロセスには影響を与えたくない、なんていうときは FOO="bar"とすれば良いです。

Note: あなたのシステムの00basicファイルの内容は、以下と異なっているかもしれません。でも大丈夫です。以下に示すのは、 Gentooが提供するデフォルトのものです。

以下の例は/etc/env.d/00basicで見ることができます。
変数名 その役割
PATH プログラムを検索するときに用いられる、デフォルトのパスです。「:」で区切ります。 PATH=/usr/local/bin:/opt/binのように設定されます。
ROOTPATH 上のPATHと似ていますが、rootが使用するプログラムのデフォルトパスです。 ROOTPATH=/usr/local/bin:/opt/binのように設定されます。
LDPATH リンクの際に使われるライブラリのパスを指定します。PATH等と同様「:」で区切ります。 例えばLDPATH=/usr/local/libのようになります。
MANPATH マシンのどこにマニュアルページが保存されているか指定します。 PATHと同様のものですがマニュアルページ用です。 MANPATH=/usr/share/man:/usr/local/share/manという感じです。
INFODIR 全てのinfo用ファイルが置いてある場所です。 INFODIR=/usr/share/infoのようになります。
PAGER 例えばlessやmoreなど、ページャとして何を使うかを指定します。 PAGER=/usr/bin/lessという風になるでしょう。
EDITOR システムでデフォルトで使うエディタを指定します。例えばこんな感じです: EDITOR=/usr/bin/vim

以下は00basicファイルの例です。これは単に、このファイルがどんな感じなのかを示すためのものです。 ただし、いま使ってる00basicが使いものにならないなら、これをそのまま使うのも良いですね!

Code Listing 1.1: 00basic

# /etc/env.d/00basic:
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/env.d/00basic,v 1.11 2003/02/17 02:48:39 azarah Exp $

PATH="/usr/local/bin:/opt/bin"
ROOTPATH="/usr/local/bin:/opt/bin"
LDPATH="/usr/local/lib"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info"
INFOPATH="/usr/share/info"
CVS_RSH="ssh"
PAGER="/usr/bin/less"
LESSOPEN="|lesspipe.sh %s"
		

env.dの構造 

env.dディレクトリ以下のファイルは、env-updateが実行されたときに正しい順番で変数を設定できるように、 順番が明確になるようなファイル名になっています。ファイル名の先頭にある数字はどういう順番で各ファイルが解析されるかを表しているので、 まず最初に00basicが解析され、次に01somethingが処理され、続いて同じく次のものが、という風になります。 各ファイルは先程と同様の書式になっています:

Code Listing 1.2: ファイルの書式

# この行はコメントです。BASHと同じですね。
VARIABLE1=/path/to/something
# 変数の中には : で区切った値を持つものもあります。
VAR1A=/path/to/something:/path/to/another/something
VARIABLE2=name_something
		

2. 特殊な変数、そしていかにして各変数はひとつにまとめられるのか

特殊な変数 

env.dに含まれるものの中には、特殊な変数もあります。 KDEDIRS、PATH、CLASSPATH、LDPATH、MANPATH、INFODIR、ROOTPATH、CONFIG_PROTECT、 CONFIG_PROTECT_MASKがそうです。何故これらが特殊なのかというと、あとで説明しますが、 特別なやり方で処理され、特別なファイルに収められているからです。

Note: 以下で説明する変数のうちいくつかは、既に上記00basicで既に取り上げたものです。 素晴しいことに、これらの変数は同じ変数が別々のファイルで使用されていても問題ありません(以下で詳しく説明します)。

変数名 その役割
KDEDIRS KDE関連の全てのパス。
PATH 上に書いた通りで、「:」で区切られます(上記説明を参照のこと)。
CLASSPATH Javaの各クラスへのパスをセットします。「:」で区切られます。
LDPATH 上に書いた通りです(上記説明を参照のこと)。
MANPATH 先程説明した通り(上記説明を参照のこと)で、「:」区切りです。
INFODIR 先程説明した通り(上記説明を参照のこと)で、「:」区切りです。
ROOTPATH 先程説明した通り(上記説明を参照のこと)で、「:」区切りです。
CONFIG_PROTECT /etcディレクトリ中の設定ファイルのうち新しいebuildsで上書きされたくないものを、 スペース区切りで指定します。
CONFIG_PROTECT_MASK 基本的にはCONFIG_PROTECTの逆で、/etc中のファイルのうち、 emerge処理で自動的に変更して欲しいものを指定します。

ぜーんぶ一緒にする 

さてさて、これで私は全部説明したわけですが、 あなたは各変数が自分のGentooマシンに一体どう影響するんだか訝しんでることでしょう。 env.dのスゴさは、変数を変更したいファイルで好きなようにその変数を変更して良いということです。 そういうことが、嬉しいことにできちゃうんですね。

ではどういうことができるのか何となくわかったところで、各変数で何が起こっているのが説明しましょう。 env-updateが実行されると、各ファイルの内容はすべてひとつにまとめられます。 先程、PATH変数が複数ファイルに記述されても問題ないと言ったこと覚えてますか?  どうしてこれで問題ないかというと、env-update が各ファイルを順に走査して各パスを順番に追加してくれるからなのです。 というわけで、KDE、GNOME、デフォルトのPATH、それからX用のパスをそれぞれ別のPATHで指定していても、 env-updateが各パスをひとつにまとめてくれるので、 結局でき上がるデフォルトのPATHは各パスがひとつになったものになるわけです。いい感じでしょ?

各変数がまとめられることになるので、 それぞれがどこに保存されているかについて気を付けないといけません。

Note: 以下のファイルはenv-updateを実行することで生成されます

Code Listing 2.1: env.d以下のファイルをまとめたもので作られるファイル

LDPATH ----> /etc/ld.so.conf
CONFIG_PROTECT and CONFIG_PROTECT_MASK ----> /etc/profile.env (exportされた他の変数と同様に)
Specials and Others ----> /etc/profile.env
			

/etc/ld.so.confの中をよく見れば、 その中にある情報はenv.dを元にしてできていることがハッキリ分かると思います。

Code Listing 2.2: /etc/ld.so.conf

# ld.so.conf autogenerated by env-update; make all changes to
# contents of /etc/env.d directory
/usr/local/lib
/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2
/usr/lib/opengl/nvidia/lib
/usr/lib/mozilla
/usr/X11R6/lib
/opt/blackdown-jdk-1.3.1/jre/lib/i386/
/opt/blackdown-jdk-1.3.1/jre/lib/i386/native_threads/
/usr/qt/3/lib
/usr/qt/2/lib
/usr/kde/3/lib
			

/etc/profile.envがシェルを起動するごとに読み込まれることを知っておくのは良いですね。 これで、次にログインしたときから新しく設定した変数を全部使えるようになったわけですから。

Code Listing 2.3

/etc/env.dでの設定 ---> env-update ---> /etc/profile.env ---> /etc/profile 
---> bash ---> すべてのプログラム
			

これでprofile.envが完成したわけですが、以下のようになっていると思います:

Code Listing 2.4: /etc/profile.env

(以下の例では、読みやすくするために複数の行に分けています)
export CONFIG_PROTECT='/usr/kde/3/share/config /usr/share/config'
export KDEDIRS='/usr/kde/3:/usr'
export MANPATH='/usr/share/man:/usr/local/share/man:/usr/X11R6/man:/opt/blackdown-jdk-1.3.1/man'
export INFODIR='/usr/share/info:/usr/X11R6/info'
export PATH='/usr/local/bin:/opt/bin:/opt/rar/bin:/usr/X11R6/bin:/opt/blackdown-jdk-1.3.1/bin: \ 
/opt/blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/qt/2/bin:/usr/kde/3/bin'
export CONFIG_PROTECT_MASK='/etc/gconf'
export CLASSPATH='/opt/blackdown-jdk-1.3.1/jre/lib/rt.jar:.'
export ROOTPATH='/usr/local/bin:/opt/bin:/opt/rar:/usr/X11R6/bin:/opt/blackdown-jdk-1.3.1/bin: \ 
/opt/blackdown-jdk-1.3.1/jre/bin:/usr/qt/3/bin:/usr/qt/2/bin:/usr/kde/3/bin'
export KDEDIR='/usr/kde/3'
export VIMRUNTIME='/usr/share/vim/vim61'
export JDK_HOME='/opt/blackdown-jdk-1.3.1'
export JAVAC='/opt/blackdown-jdk-1.3.1/bin/javac'
export PAGER='/usr/bin/less'
export HOSTNAME='l00ser.muc.edu'
export QMAKESPEC='linux-g++'
export LESSOPEN='|lesspipe.sh %s'
export CVS_RSH='ssh'
export EDITOR='/usr/bin/vim'
export QTDIR='/usr/qt/3'
export JAVA_HOME='/opt/blackdown-jdk-1.3.1'
export XINITRC='/etc/X11/xinit/xinitrc'
export MOZILLA_FIVE_HOME='/usr/lib/mozilla'
			

はい、ではこれで全部です。あとは楽しく、色々やってみてください。ただし「色々」をやり過きないようにね!


The contents of this document are licensed under the Creative Commons - Attribution / Share Alike license.
line
Updated October 23, 2003
line
John P. Davis
Author

萩原佳明
翻訳

line
Summary:  このドキュメントでは、/etc/env.dディレクトリの意味や使い方、 そしてディレクトリ内の各ファイルについて説明します。
line

Donate to support our development efforts.

line
php|architect

php|architect is the monthly magazine for PHP professionals, available worldwide in print and electronic format. A percentage of all the sales will be donated back into the Gentoo project.

line
SevenL.net

Seven L Networks provides customizable Dedicated Servers for your customized Gentoo install. Colocation and other hosting services are also provided.

line
Tek Alchemy

Tek Alchemy offers dedicated servers and other hosting solutions running Gentoo Linux.

line
$99/mo dedicated servers

No BS Dedicated Gentoo Linux Servers from vr.org.

line
DDR Memory at Crucial.com

Purchase RAM from Crucial.com and a percentage of your sale will go towards further Gentoo Linux development.

line
The Gentoo Linux Store
line
Copyright 2001-2004 Gentoo Technologies, Inc. Questions, Comments, Corrections? Email [email protected].