NHN Cloud에 redis를 자동 설치하는 쉘 스크립트를 작성하면서 여러 환경설정 파일을 수정해야 하는 상황이 있었다.

 

사실 /etc/profile, bashrc를 수정하면서도 정확히 어떤 아이들인지 알지 못한 채 찜찜한 상태로.. 돌아가는데만 집중한 점을 반성하면서 (ㅠㅠ) 리눅스에 어떤 환경설정 파일들이 있는지, 어떤 역할을 하는지, 어떤 순서로 적용되는지 꼼꼼히 알아보고자 한다.

 

또한, 선임님께서 말씀해주신 시스템용과 유저별 환경설정 파일의 구분과 설정 내용을 영구적으로 적용하는 방법도 함께 살펴보자!


1. 시스템 / 사용자 설정 파일

시스템 설정 파일

  • 시스템(로그인 쉘)을 사용하는 전체 사용자의 공통 환경을 설정, 시스템 관리자가 관리
  • /etc 디렉토리에 존재
  • 많이 사용하는 bash 쉘
    • /etc/profile : 일반 설정 (모든 사용자에게 적용되는 환경변수, 시작 프로그램 등)
    • /etc/bashrc : alias 관련 함수 설정
    • /etc/profile.d/*.sh : /etc/profile 에서 /etc/profile.d 하위의 sh 파일들을 source하게 되어있음

 

사용자 설정 파일

  • 사용자별 환경을 설정할 수 있고, 각 사용자 홈 디렉토리에 숨김 파일로 저장
  • 많이 사용하는 bash 쉘
    • .bash_profile(.profile) : 개인 사용자에게 적용되는 환경변수, 시작 프로그램 등 (일반 설정 무시 가능)
    • .bashrc : alias 설정
    • .bash_logout : 로그아웃 시 지정 설정

이 중 .profile과 .bash_profile은 같은 것으로 보통 둘 중 하나만 존재하고 둘 다 있다면 .bash_profile 실행

 

 

2. 로그인 / 비로그인 쉘

리눅스에 로그인하면 bash 프로그램이 시작되어 전체 환경을 설정하는 시스템 환경설정을 하게 되고, 사용자별 홈 디렉토리에 있는 설정 파일을 읽어 환경설정을 덮을 수 있다.

 

여기서 사용자란 로그인한 상태를 말하고, 로그인과 비로그인은 로그인 쉘과 비로그인 쉘로 표현한다.

 

로그인 쉘

ID와 Password를 입력해서 쉘에 접근하는 방법

 

비로그인 쉘

GUI 상에서 바로 터미널로 접근하는 방법

 

 

3. 실행 순서

로그인 쉘과 비로그인 쉘 경로의 차이를 살펴보자!

 

로그인 쉘

  1. /etc/profile : 모든 사용자에게 적용되는 환경 설정
  2. ~/.bash_profile : /etc/profile의 설정을 확장하거나 무시
    • 사용자별 홈 디렉토리에 존재하는 환경설정 파일
    • 사용자 홈에서만 사용하는 터미널 설정과 환경변수 설정 기록
    • 로그아웃 될 때까지 유지 및 source 명령어로 설정 적용 가능
  3. ~/.bashrc : 상위 파일이 없으면 읽음
  4. ~/etc/bashrc : 상위 파일이 없으면 읽음

 

비로그인 쉘

로그인 쉘의 상위 프로세스로부터 환경 값을 물려 받는다.

  1. /etc/bashrc
  2. ~/.bashrc

 

최종적으로 터미널은 .bashrc로 실행

사용자가 정의한 변수, alias, 함수 등 사용자가 사용하는 항목 설정

로그인이든 비로그인이든 쉘 시작시 실행

 

💡 로그인 쉘과 자식 쉘을 같은 환경으로 하려면

모든 환경 설정 값은 .bashrc에 넣고 .profile(또는 .bash_profile)의 마지막에 .bashrc 파일을 source 명령으로 실행하기

 

 

4. 변경사항 영구 적용하기

# 시스템 : /etc/profile 하단에
export [변수명]=[환경변수값]

# 사용자 : .bashrc 나 .bash_profile
export [변수명]=[환경변수값]
source [파일명]

 

 

 

 

 

 

Reference

과제 내용

  • 스크립트를 실행하면 비밀번호 없이 접속할 수 있도록 작성
  • 가장 최신 버전을 설치함
sh install_redis.sh

 

개발환경

  • NHN Cloud
  • CentOS 7.9

 

프로세스

 

코드

  • su - : root 계정으로 실행
  • yum repository 업데이트

 

  • redis가 이미 설치되어 있는지 확인
    • 설치된 경우 삭제

 

  • dependency들이 이미 설치되어 있는지 확인

 

  • redis 설치 및 실행

 

  • redis.conf 등 설정

 

  • redis 재실행

 

  • 설치결과 로그 파일로 저장

 

결과

과제 내용

  • 스크립트를 실행하면 자동으로 redis를 설치함
  • redis-cli 입력시 자동으로 접속할 수 있는 alias 추가
  • 설치 버전을 변수로 받기
sh install_redis.sh 7.0.8

 

개발환경

  • NHN Cloud
  • CentOS 7.9

 

프로세스

 

코드

  • 버전을 입력받지 않았을 때

 

  • 버전을 입력받았을 때
    • 입력한 버전을 설치할 것인지 묻기

 

  • redis와 dependency들이 이미 설치되어 있는지 확인

 

  • redis 다운로드 및 설치

 

  • redis.conf 등 설정

 

  • redis 실행

 

  • alias 설정

 

결과

과제 내용

  • 스크립트를 실행하면 비밀번호 없이 접속할 수 있도록 작성
  • 가장 최신 버전을 설치함
sh install_mysql.sh

 

개발환경

  • NHN Cloud
  • CentOS 7.9

 

프로세스

 

코드

  • yum repository 업데이트

 

  • MySQL이 이미 설치되어 있는지 확인
    • 설치된 경우 삭제

 

  • MySQL 설치

 

  • MySQL 실행
    • 임시 비밀번호로 로그인

 

  • 설치결과 로그 파일로 저장

 

결과

과제 내용

  • 스크립트를 실행하면 비밀번호 없이 접속할 수 있도록 작성
  • 설치할 버전을 변수로 받기
sh install_mysql 8.0.32

 

개발환경

  • NHN Cloud
  • CentOS 7.9

 

프로세스

 

코드

  • 버전을 입력받지 않았을 때

 

  • 버전을 입력받았을 때
    • 입력한 버전을 설치할 것인지 묻기

 

  • OS와 아키텍처 버전 확인

 

  • MySQL이 이미 설치되어 있는지 확인
    • 이미 설치된 경우 삭제할 것인지 묻기

 

  • wget이 설치되어 있는지 확인

 

  • MySQL 다운로드 및 설치

 

  • my.cnf 설정

 

  • data, logs 파일 만들고 환경변수 설정

 

  • 초기화 및 시작

 

  • MySQL 실행

 

결과

 

피드백

  • 여러 버전의 데이터베이스를 설치하고 싶을 수 있다.
    • 설치할 때 파라미터로 포트번호도 받기
    • 설치될 디렉토리도 분리해야 함
  • OS ubuntu 까지는 분기 처리하기
  • wget --spider 통해서 url 정합성 확인하기
  • (MySQL) 비밀번호 없이 접속하기
    • --initialize-insecure 사용하기
    • --skip-grant-tables 옵션은 보안상 안전하지 않으므로 사용X (system 스키마에 있는 grant tabels를 읽지 않고, 권한 시스템에 없이 시작)
  • (redis) 재기동 이후에도 설정파일 변경사항 지속되도록 하기

 

 

+ Recent posts