RHEL7에서 Ansible을 사용하여 $PATH에 프로젝트를 영구적으로 추가

RHEL7에서 Ansible을 사용하여 $PATH에 프로젝트를 영구적으로 추가

/home/another-user/binAnsible이 RHEL 7 VM의 $PATH 변수에 성공적으로 추가하려면 다음 특정 구문 중 무엇을 변경해야 합니까?

플레이북의 현재 버전:

우리가 사용한 플레이북은 다음과 같이 변수를 설정한 /home/another-user/bin다음 해당 변수를 사용하여 줄을 추가합니다 /etc/environment.

vars:
  extra_path: /home/another-user/bin
vars_files:
  - myVars.yaml
#Other stuff

- name: Update /etc/environment for newly loaded apps
  lineinfile:
    dest: /etc/environment
    line: "export PATH={{ extra_path }}:$PATH"
    owner: root
  become: true
  become_user: root
  vars:
    ansible_become_password: "{{ root_pass_word }}"

나쁜 결과

문제는 위의 예가 $PATH의 기존 항목을 모두 삭제하므로 및 cat기타와 같은 기본 명령이 더 이상 인식되지 않는다는 것입니다.

[my-user@ip-10-0-0-171 ~]$ echo $PATH
/home/another-user/bin:$PATH:/usr/local/sbin:/usr/sbin:/home/my-user/.local/bin:/home/my-user/bin
[my-user@ip-10-0-0-171 ~]$ cat /etc/environment
-bash: cat: command not found
[my-user@ip-10-0-0-171 ~]$

정규식을 사용하여 여기와 스택 오버플로에서 다른 예제를 찾았지만 command not found어떤 방식으로든 수정하면 동일한 문제가 발생합니다./etc/environment

답변1

/etc/environment파일은 쉘 스크립트로 평가되지 않습니다. 인용해 보세요매뉴얼 페이지(명확성을 위해 재배열됨):

구성 파일에는 줄 바꿈으로 구분된 "KEY=VALUE" 환경 변수 할당 목록이 포함되어 있습니다.

이러한 할당의 오른쪽은 "${OTHER_KEY}" 및 "$OTHER_KEY" 형식을 사용하여 이전에 정의된 환경 변수를 참조할 수 있습니다.

...

쉘 구문의 다른 요소는 지원되지 않습니다.

따라서 삽입된 줄 export에는 파일에 유효하지 않은 명령이 포함 되어 있습니다 /etc/environment. 다음에서 변경됨:

line: "export PATH={{ extra_path }}:$PATH"

도착하다

line: "PATH={{ extra_path }}:$PATH"

잘 작동할 겁니다.


여기서 확인해야 할 또 다른 사항은 추가하려는 새 경로입니다 /home/another-user/bin. 사용자의 홈 디렉터리는 일반적으로 700 권한으로 보호되므로 콘텐츠는 소유자(즉, 해당 홈 디렉터리에 해당하는 사용자)에게만 표시됩니다. /etc/environment모든 사용자에게 적용되지만 새 경로 구성이 모든 사용자에게 적용됩니까? 조사를 고려해 볼 사항입니다.

답변2

Centos7에서는 허용된 답변이 작동하지 않는 것으로 나타났습니다. 일반적으로 RHEL7과 Centos7은 이 수준에서 동일한 기능을 가지고 있습니다.

/etc/environment비어 있고 설명된 대로 정확하게 동작합니다.우분투 문서(예, 다시 확인했는데 VM은 확실히 Centos7입니다.) 변수를 확장하지 않아 해당 리터럴이 $PATH마음에 들지 않아 경로가 중단되었습니다 .$

문서에서 권장 솔루션을 찾았으며 스크립트를 추가하면 /etc/profile.d/예상대로 작동합니다.

echo 'export PATH=$PATH:/some/other/path' > /etc/profile.d/my_path.sh

또는 사용앤서블 복제 모듈

- name: Add to PATH
  copy:
    content: "export PATH=$PATH:/some/other/path"
    dest: "/etc/profile.d/my_path.sh"

RHEL7 가상 머신이 없기 때문에 이 솔루션도 작동하는지 테스트할 수 없습니다.

관련 정보