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 "$@"

관련 정보