env.d HOWTO
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: ファイルの書式 |
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.
|