회사 내에서 쿠버네티스를 이용한 자동화 프로젝트를 다루면서, Linux를 사용할 기회가 많이 생겼다. 아무래도 내가 Linux를 얉게 알고 있다보니, 프로젝트를 진행하면서 막히는 경우가 많이 생겼다.
특히, 도커 이미지가 쿠버네티스(with kube operator) 상에서 배포되는 과정에서, 초기화 과정으로 Python 가상 환경에 접속 작업이 필요한 경우가 있었다. 이 때 이미지 빌드하기 전에 단순히 ~/.bashrc 파일을 고치는 것만으로 해결될 줄 알았지만, 그렇게 간단하게 해결되지 않았고, Kubernetes Operator와 Linux Shell 실행 순서 등등 여러 문서를 뒤져보면서 이 문제를 해결할 수 있었다.
본 글을 해당 이슈를 해결하면서 공부했던 Linux Shell 초기화 설정에 대한 글이다.
Linux에서 shell은 명령어를 제공하여 사용자가 커널이 상호작용할 수 있도록 돕는다. 즉, 쉘을 통해 사용자가 파일에 접근하거나 프로세스를 다룰 수 있도록 돕는다.
/bin/sh
)이 따로 설정된 게 없다면 기본적으로 dash 쉘을 사용하도록 설정되어 있다. 다른 쉘에 비해 기능이 간소화되어 있어 실행 속도가 빠르다.같은 Linux 계열이라도 어떤 OS에는 특정 설정 파일이 있고, 없을 수가 있다. shell 실행 순서에 대해서는 자주 사용하는 Ubuntu 기준으로 작성되어 있다.
/etc/profile
파일: 전체 시스템에 대한 기본 설정을 담고 있다./etc/profile.d/
디렉토리 내의 .sh
파일: 시스템 전체의 환경 변수를 설정한다.~/.profile
파일: 개별 사용자의 환경 변수를 설정한다.만약 사용자가 .profile
파일을 변경하였다면, 재로그인 하거나 source ~/.profile
명령어를 실행하여 변경 사항을 바로 적용시켜야 한다.
/etc/profile
파일: 전체 시스템에 대한 기본 설정을 담고 있다./etc/profile.d/
디렉토리 내의 .sh
파일: 시스템 전체의 환경 변수를 설정한다.~/.bash_profile
파일: bash가 로그인쉘로 실행될 때 작동한다.~/.bashrc
파일: Bash의 설정 파일로, Bash가 실행될 때마다 실행된다. export
를 이용한 환경 변수 설정이나 별칭 등을 정의할 때 주로 사용된다.dash와 마찬가지로, ~/.bashrc
를 변경하였다면, 다시 접속을 하거나 source ~/.bashrc
명령어를 실행하여 변경 사항을 바로 적용시켜야 한다.
번외로 앞서 언급했던 이슈에 대한 히스토리를 더 설명하자면... ~/.bashrc
파일을 변경하여 특정 초기화 코드를 실행시키고자 했다. 하지만, 사용하고 있던 kubernetes operator에서는 pod가 실행될 때 비로그인 쉘 접근을 유도하고 있었다. 해당 부분을 bash 쉘 사용하도록 수정하여 Kubernetes Operator 개발자 깃허브에 PR 날리고자 했지만, 이미 다음 operator 버전에서는 해결된 내용이었다고 한다...