rpmで現在のセッションの環境変数を設定するには?

rpmで現在のセッションの環境変数を設定するには?

ClearOS7(Centos7ベース)でSia用のrpmを作成していますが停止しました。SIA_DATA_DIR=/var/lib/siad-datarpmをインストールするためにセッションを確立しようとしています。これはsiaデーモンとsiacアプリケーション(コマンドラインアプリケーション)の両方に必要です。デーモンの場合は簡単です。 systemd デバイスファイルで設定できます。

グローバルに設定するために、/etc/profile.d/siad.shファイルを作成し、その中に配置しました。

[ -x /usr/bin/siad ] && export SIA_DATA_DIR=/var/lib/siad-data

仕様ファイルの%postセクションに、source /etc/profile.d/siad.sh.profile.dファイルが新しいシェルでは機能しますが、現在のシェルでは機能しないことがわかります。これは、yumが子プロセスを開き、変数が親プロセスに返されなかったためです。 %postスクリプトに直接置くこともexport SIA_DATA_DIR=/var/lib/siad-data機能しません。

rpmがインストールされているセッションに対してrpmで環境変数を設定するには?

答え1

あなたはできません。プロセスは実行中のプロセスの環境を変更できません。

環境変数に関しては、「現在のセッション」のようなものもありません。各プロセスには独自の環境変数があります。そして、「現在のセッション」が複数ある場合があります。

それにもかかわらず、プログラムに環境変数を要求するのは悪い習慣です。必要なときにのみ環境変数を定義する必要があります。その他のソフトウェア、システムレベルではこれは必要ありません。ソフトウェアは、デフォルトでシステムディレクトリを検索するようにコンパイルまたは構成する必要があります。

ソフトウェアの実行に環境変数が必要な場合は、変数を設定するラッパースクリプトで実行します。たとえば、環境変数を設定する必要がある場合は、/usr/bin/siad実行可能ファイルをインストールし、以下を含むスクリプトを作成します。SIA_DATA_DIR/usr/bin/siad.real/usr/bin/siad

#!/bin/sh
if [ -z "${SIA_DATA_DIR+set}" ]; then
  export SIA_DATA_DIR="/var/lib/siad-data"
fi
exec /usr/bin/siad.real "$@"

関連情報