Env.d HOWTO

Автор: John P. Davis

Переводчик: Иван Зенков

Это руководство разъясняет значение и способы применения каталога /etc/env.d и того, что внем находится.

1.4 21 Dec 2002

Введение, env.d и универсальные переменные

Один из самых частых вопросов которые мы получаем от пользователей Gentoo, это: "где находятся переменные рабочей среды и как они настроены?". Чтобы понять этот вопрос сначала мы должны узнать какие бывают переменные. Обычно переменные устанавливаются с помощью команды export. Например выполнив export EDITOR="/usr/sbin/vim", вы установите переменную, сообщающую системе, что редактором по умолчанию является vim. Есть много других переменных которые могут быть установлены на вашей Gentoo системе, некоторые из них - в таблице.

Замечание: export выставляет переменные для оболочки и *всех* дочерних процессов. Если вы хотите установить переменную без воздействия на (другие) процессы, то просто используйте что-то вроде FOO="bar". Ваш файл 00basic может быть несколько другим. Это - не проблема, поскольку это заданные по умолчанию переменные, настройки которых с самого начала упакованы в Gentoo.

Эти примеры могут быть найдены в /etc/env.d/00basic. PATHЭта переменная устанавливает путь поиска программ. ':' разделитель путей.

Эта переменная указывает путь на каталоги с info страницами. Пример, INFODIR=/usr/share/info.
Переменная Функция переменной
PATH Эта переменная устанавливает путь поиска программ. ':' разделитель путей. Пример переменной, что-то вроде PATH=/usr/local/bin:/opt/bin.
ROOTPATH Эта переменная похожа на PATH, но устанавливает путь поиска программ для пользователя root. ':' разделитель путей. Пример переменной, ROOTPATH=/usr/local/bin:/opt/bin.
LDPATH Эта переменная указывает путь поиска библиотек для связывания. Тот же разделитель путей ':'. Пример переменной, будет смотреться как LDPATH=/usr/local/lib.
MANPATH Эта переменная указывает путь на каталоги man страниц вашей системы. Чем-то схоже с PATH, но только для man страниц. Пример переменной, MANPATH=/usr/share/man:/usr/local/share/man.
INFODIR
PAGER Эта переменная устанавливает используемый вами пейджер, то есть less или more. Например, PAGER=/usr/bin/less.
EDITOR Данная переменная устанавливает системный редактор. Например так, EDITOR=/usr/bin/vim.

Этот пример файла /00basic/, даст вам представление о там как все должно выглядеть, а также пригодится на случай если с вашим 00basic что-нибудь случится.

# Copyright 1999-2002 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/env.d/00basic,v 1.6 2002/06/20 22:07
:37 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
CVS_RSH=ssh
PAGER=/usr/bin/less
EDITOR=/usr/bin/vim
LESSOPEN="|lesspipe.sh %s"

Формат env.d

Файлы внутри env.d размещаются в логическом порядке, так чтобы выполнение env-update определяло переменные в заданной последовательности. Числа в начале названия файла определяют в каком порядке производит их чтение, то есть 00basic анализируется первым, 01что-то вторым и т.д. Содержание внутри файлов также имеет определенный формат:

Содержание формата

# Это комментарий, как в BASH
/переменная1=/куда/-/то/
# Некоторые переменные имеют разделитель ':'.
/пер1а=/путь/к/чему/-то:/другой/путь/куда-то/
/переменная2=/что_то/

Специальные переменные и как это все вместе контактирует

Специальные переменные

Есть некоторые специальные переменные, которые включены в env.d. Такие, например как: /KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK/. Они специальные, потому что они обработан особым способом, и помещены в специальные файлы, о которых я все объясню позже.

Некоторые из переменных рассматриваемых ниже, также были рассмотрены в примере с 00basic. Это хорошо, потому что значения переменных могут использоваться несколько раз в отдельных файлах, подробнее смотри ниже.

Переменная Функция переменной
KDEDIRS Эта переменная указывает путь для всех файлов KDE.
PATH Уже упомянуто, ':' разделитель (см. выше).
CLASSPATH Эта переменная указывает путь для Java классов, ':' разделитель.
LDPATH Уже упомянуто, (см. выше).
MANPATH Уже упомянуто (см. выше), ':' разделитель.
INFODIR Уже упомянуто (см. выше), ':' разделитель.
ROOTPATH Уже упомянуто (см. выше), ':' разделитель.
CONFIG_PROTECT Эта переменная определяет конфигурационные файлы /etc, которые не будут изменены после установки нового пакета. Параметры данной переменной могут быть разделены.
CONFIG_PROTECT_MASK Эта переменная - инверсия CONFIG_PROTECT. Она выставляет, какие файлы в защищенном каталоге (/etc>) все-таки должны быть изменены после установки нового пакета.

Объединим все в одном

Хорошо, теперь когда я все объяснил, вы вероятно зададитесь вопросом, какое отношение все это имеет к вашей Gentoo системе? Сила /env.d/ в том, что вы можете изменять эти переменные под свои нужды как пожелаете. С описанным выше вам это будет легче сделать.

Теперь мы знаем о том, как все устроено, пришло время объяснить что происходит с этими переменными. Когда запускается env-update, то он связывает все эти файлы в указанном порядке. Помните, когда я сказал, что хорошо иметь множественные переменные /PATH/, находящиеся в различных файлах Это, потому что env-update проходит файлы последовательно соединяя пути вместе. Так, если у вас есть, /PATH/ для KDE, GNOME и для X, env-update свяжет все это в один объединенный путь. Нравится?

Так как эти переменные теперь связаны вместе, то важно обратить внимание где они сохранены.

Нижеперечисленные файлы создаются при запуске env-update

Файлы, созданные объединением всех фалов в env.d

LDPATH ----> /etc/ld.so.conf
CONFIG_PROTECT и CONFIG_PROTECT_MASK ----> /etc/profile.env (как экспортированные переменные
Специальные и всякие ----> /etc/profile.env

Если вы посмотрите внутрь /etc/ld.so.conf, вы увидите, что источником размещенной там информации был env.d.

/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 это тоже самое, что и ваш shell.env (то есть /csh.env/ или /bash.env/). А хорошо это, потому, что теперь вы можете использовать все ваши переменные в оболочке после следующего запуска.

Последовательность этапов действия env-update

/etc/env.d настройки ----env-update----> /etc/profile.env ---> /etc/profile ---> bash ---> все ваши программы

Теперь когда у вас есть /profile.env/ он может выглядеть так:

/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'

Хорошо, это все что я хотел сказать, наслаждайтесь и постарайтесь ничего не нарушить!