Tagged: CentOS

Yum 패키지 충돌 발생시 쓸 수 있는 명령어

최근에 CentOS 8 에서 Kubernetes 를 테스트하던 중에 패키지 업데이트가 되지 않는 일이 발생 했다. 아직 Kubernetes 는 CentOS 8 배포판을 정식으로 지원하지 않아 CentOS 7 배포판의 패키지를 사용해야 하는 상황이다.

그런데, yum 명령어로 업데이트를 할려고 보니 오류가 발생 했다. 이럴 경우에 다음과 같은 명령어를 사용해서 의존성을 체크해 볼 수 있다.

위와같은 명령어를 이용하면 패키지 의존성에 대한 내용을 풀어서 볼 수 있다.

참고: kubeadm and kubelet 1.15 fail to install on centos 7 after patches released today#92242

CentOS에서 SNMP 설치 및 설정하기

SNMP(Simple Network Management Protocol) 은 원래 네트워크 장비를 관리하기 위한 통신 규약입니다. 그런데, 이제는 네트워크 장비뿐만아니라 컴퓨터, 전자장비까지 확장해서 사용하고 있습니다. 리눅스 시스템에서도 SNMP를 사용할 수 있습니다.

이를 이용하면 SNMP 를 이용해서 중앙집중식으로 각각의 장비들의 자원, 자원사용량등을 장비에 거의 모든 것을 알 수 있고 가지고 올 수 있습니다. 저의 경우에는 Cacti 라는 시스템 자원 모니터링 시스템에서 원격 시스템의 자원 사용량을 가지고 오기 위해서 각 서버마다 SNMP를 사용합니다.

준비

이 문서는 다음과 같은 환경에서 작성되었습니다.

  • CentOS 7
  • X86_64

SNMP는 서버/클라언트 구조를 가지고 있습니다. 중앙 집중식으로 한 곳에서 정보를 모을 경우에는 중앙 서버를 제외하고 SNMP 데몬만 설치해주면 됩니다.

설치

설치는 Yum 을 이용해 다음과 같이 해주면 됩니다.

위에 뒷부분 ‘net-snmp-utils’ 는 SNMP 데몬하고는 아무런 관련이 없기 때문에 설치를 않해되 되지만 SNMP 데몬의 제대로 동작하는지를 테스트하기 위해서는 설치해주는 것이 좋습니다. ‘net-snmp-utils’ 는 말 그대로 SNMP를 다루기위한 여러가지 명령어들이 들어 있습니다.

설정

CentOS7 의 특징은 데몬이 실행될때에 옵션을 제공해 줄 수 있는데, 이를 위해서 ‘/etc/sysconfig’ 디렉토리에 데몬이름으로 파일을 가지게 됩니다. 그러면 데몬 실행 프로그램에서 이를 import 해서 사용하곤 하는데 SNMP 데몬도 이와 같습니다.

먼저 데몬 실행 옵션을 다음과 같이 설정 해줍니다.

위 옵션들은 다음과 같습니다.

  • -Ls 는 로그 메시지 stderr, stdout 으로 내보내고 로그레벨을 정한다. 기본은 -Lsd 로 d 는 LOG_DEBUG 을 말한다. 로그의 수준은 0 ~ 7 까지 존재하는데 다음과 같다.

    이는 -LSwd 나 -LS4d 식으로 숫자와 알파벳으로 지정할 수 있다. -LSed / -LS3d 같은 예제이다. 또, -LS1-5d 처럼 로그레벨 수준을 어디서 어디까지로 정할 수도 있다. 위 예제에서는 데몬 메시지를 syslog 로 보내는데 로그 레벨 1~5까지를 보내라는 뜻이다.
  • -Lf 는 지정한 파일로 로그 메시지를 보낸다. 위 예제에서는 /dev/null 임으로 로그 메시지를 삭제하는 효과를 보인다.
  • -p 는 pid 파일을 지정해 준다.

다음으로 SNMP 자체 설정을 합니다. 아래의 예제는 시스템 자원을 읽기 전용으로만 설정하는 것입니다.

SNMP 설정은 ‘sec.name’ 별로 설정을 할 수 있습니다. sec.name 을 여러게 정의하면 group도 여러개 설정할  수 있고 이렇게 되면 access 도 여러개 설정할 수 있습니다. 주목할 것은 access 에서 뒷부분에 read, write, notif 가 보이는데, 위 예제가 시스템 자원을 읽기만 할 것이기 때문에 read 부분만 all 로 하고 나머지를 none 으로 한 것입니다.

마지막으로 systemd 에 snmpd 를 활성화 해주고 시작해 줍니다.

로깅 변경

위 설정대로 하면 snmpd 로그가 /var/log/messages 에 저장이 됩니다. 하지만 /var/log/messages 는 커널 메시지도 저장되고 하는 중요한 것이여서 별도 파일에 저장하는 것이 좋습니다.

이를 위해서 snmpd 를 위한 별도의 로그 파일 설정을 해주는데, 먼저 /etc/sysconfig/snmpd 설정을 다음과같이 바꿔 줍니다.

rsyslog 데몬에서 다음과 같이 설정해 줍니다.

위에 예제에서 첫번째라인은 로그레벨 6 에 대해서는 /var/log/message 에서 제외하고 로그레벨6은 /var/log/snmpd.log 에 저장하도록 지정한 것입니다.

이렇게 해주고 데몬을 재시작 해줍니다.

로그 로테이션도 설정해 줍니다.

만일 일일이 출력하고 싶지 않다면 /etc/snmp/snmpd.conf 파일에 다음과 같이 설정해 줍니다.

 

Firewalld 설정

CentOS 7 에서는 iptables 에서 firewalld 로 변경되었습니다. snmpd 를 위해 firewalld 를 설정해 줘야 합니다.

먼저 snmp 관련해서 방화벽 열기위한 정보를 xml 파일로 작성해 줍니다.

그리고 다음과 같이 public zone 에 등록해줍니다.

 

Vim 디렉토리 구조.

Vim 은 Unix/Linux 시스템에서 가장 있기는 편집기(Editor) 입니다. 터미널상에서 다양한 파일들을 편집할 수 있고 다양한 기능을 제공 합니다. 다양한 기능들은 플러그인(Plugin) 들로 제작되어 필요로하는 기능들만 사용할 수 있습니다. 이러한 플러그인들은 Vim 의 디렉토리에 넣기만하면 동작하도록 아주 간편하게 되어 있습니다.

이 문서는 다음의 문서를 직역해서 만들어졌습니다. 이글의 저작권도 원글에 있음을 밝힙니다.

기본 레이아웃(Basic Layout)

Vim 은 여러파일들로 분리된 플러그인들을 지원합니다.  “~/.vim” 디렉토리 아래에 새성할 수 있는 아주 많은 다른 디렉토리들은 많은 것을 의미합니다.

이제 아주 중요한 디렉토리들에 대해서 살펴보고 그들에 대한 스트레스를 날려버리자.

~/.vim/colors/

~/.vim/colors/ 안에 파일들은 컬러(Color) 스킴(Shemes)들을 다룹니다. 예를들어 (vim 실행상태에서 Command Mode 에서) “:color mycolors” 를 실행한다면 Vim 은 “~/.vim/colors/mycolors.vim” 파일을 찾을 것이고 그것을 실행할 겁니다. 이 파일은 컬러 스킴을 생성하는데 필요한 모든 Vimscript 명령어들을 포함해야 합니다.

여기서 컬러 스킴에 대해서 다루지 않을 것입니다. 만일 자신만의 컬러 스킴을 원한다면 이미 존재하는 컬러스킴을 복사하고 수정하면 됩니다. “:help” 는 여러분의 침구라는 걸 기억하세요(응?)

~/.vim/plugin/

“~/.vim/plugin/” 안에 파일들은 Vim 이 시작되는 매순간마다 각각 실행 됩니다. 이러한 파일들은  Vim 을 시작할때 마다 항상 로드되어질 원하는 코드를 포함한다는 것을 의미합니다.

~/.vim/ftdetect/

“~/.vim/ftdetect/” 안에 모든 파일들 역시 Vim이 시작될때마다 실행되어 집니다.

“ftdetect”는 “filetype detection”을 의미 합니다. 이 디렉토리안에 파일들은 탐지와 파일들의 파일타입이 지정하거나 아무것도 안하는 자동명령어들을 설정합니다. 이것은 하나 혹은 두라인 이상 길게 존재하지 않는다는 것을 의미합니다. (뭔소리??)

~/.vim/ftplugin/

“~/.vim/ftplugin/” 안에 파일들은 다릅니다.

The naming of these files matters! Vim 이 버퍼의 “filetype” 값으로 지정되면, “~/.vim/ftplugin/” 에서 일치하는 파일을 찾습니다. 예를들어, 만약 “set filetype=derp” 를 실행하면, Vim 은 “~/.vim/ftplugin/derp.vim” 을 찾을 것입니다. 그리고 만약 파일이 존재한다면 이것을 실행할 것입니다.

Vim 은 또한 “~/.vim/ftplugin/” 안에 디렉토리들을 지원 합니다. 예제에서 “set filetype=derp” 는  “~/.vim/ftplugin/derp/” 안에 모든 “*.vim” 파일들을 실행 시킵니다.  이것은 플러그인의 “ftplugin” 파일들을 로지컬 그룹으로 나눕니다.

이러한 파일들이 매번 버퍼의 filetype을 실행시키기 위해서는 반드시 buffer-local 옵션들을 지정해줘야 합니다. 만얀 전역적으로 옵션들을 지정했다면 모든 열린 버퍼들을 덮어쓰게 됩니다.

~/.vim/indent/

“~/.vim/indent/” 에 파일들은 “ftplugin” 파일과 매우 유사합니다. 그들은 그들의 이름을 기반으로 로드됩니다.

“indent” 파일들은 그들의 파일타입에 들여쓰기와 연관된 옵션들을 지정하고 이러한 옵션들은 buffer-local에 존재해야 합니다.

당연히, 단순하게 “ftplugin” 파일들에 이러한 코드를 집어넣을 수 있지만 Vim 사용자들이 당신이 무슨 일을 하는지 이해할수 있도록 이것을 분리시키는게 더 낫습니다. 이건단지 관습적인 것인데, 플러그인 제작자를 배려하도록 그것을 따르는게 좋습니다.

~/.vim/compiler/

“~/.vim/compiler/”에 파일들은 정확하게 indent 파일들처럼 동작합니다. 이것은 이름을 기반으로 현재 버퍼에서 compiler-related 옵션들을 지정합니다.

~/.vim/after/

“~/.vim/after/” 디렉토리는 약간의 꼼수같은 겁니다.  이 디렉토리에 파일들은 Vim 이 시작될때마다 로드되어 지지만, “~/.vim/plugin/” 에 파일이후에나 로드되어 집니다.

이것은 Vim의 내부 파일들을 오버라이드(override) 하도록 허용합니다.

~/.vim/autoload/

“~/.vim/autoload” 디렉토리는 굉장한 꼼수다. 들리기로는 실제보다 뭔가 더 복잡해 보입니다.

아주 간단하게 말하면, “autoload” 는 실제로 필요할때까지 플러그인 코드 로딩을 지연시키는 방법입니다.

~/.vim/doc/

마지막으로, “~/.vim/doc/” 디렉토리는 플러그인에 대한 문서를 위한 디렉토리 입니다.

git 파일 삭제후 복구.

git 를 사용하다 보면 local 저장소에서 실수로 파일을 삭제하는 실수를 저지를 수 있다. 이때 파일을 되살린다고 ‘git pull’ 이나 ‘git fetch’를 해봐도 나오는 메시지는 최신판(Already up-to-date)라는 것이다.

이를 이용하는 경우에 어떻게 해야하나?

먼저 삭제한 디렉토리로 이동한다. 그리고 다음과 같이 입력을하면 삭제한 파일 목록을 얻을 수 있다.

사실 삭제된 파일은 다시 checkout 받으면 된다. 다음과 같이 말이다.

리눅스를 잘 다루는 사람이라면 이것을 한번에 할수 있다.

 

 

 

Cassandra 2.1.2 설치하기.

Cassandra 로고

 

카산드라(Cassandra)는 분산 데이터 스토리지 시스템 입니다. 아파치 재단에서 오픈소스로 만들어 배포하고 있고, 자바기반으로 제작되었습니다. peer to peer 프로토콜을 이용한 고가용성이 구현되어 있습니다.

이 문서는 카산드라(Cassandra) 2.1.2 에 싱글(Single) 노드를 위한 설치에 대한 것입니다. 설치환경은 CentOS 입니다.

jdk 7 update 75

카산드라(Cassandra) 2.1.2 는 jdk 7 update 75 버전 이상을 필요로 합니다. 만일 idk 버전 이하를 사용한다면 시작스크립트에서 오류를 내며 작동하지 않습니다. Oracle 홈페이지에서 jdk 7 update 75 를 다운받아 다음과 같이 압축을 해제합니다.

카산드라(Cassandra) 2.1.2 설치

카산드라(Cassandra) 는 리눅스의 슈퍼유저인 root 로 실행할 필요가 없습니다. 카산드라(Cassandra) 를 운영하기 위한 시스템 계정을 만들고 그 시스템 계정으로 운영하면 됩니다.

카산드라(Cassandra) 2.1.2 는 홈페이지에서 다운로드 받을 수 있습니다.

다운로드: 카산드라(Cassandra) 2.1.2

설치는 별도의 진행이 필요 없이 압축을 해제하면 됩니다.

이제 카산드라(Cassandra) 에서 사용할 디렉토리를 생성해야 합니다. 필요한 디렉토리는 다음과 같습니다.

  • data_file_directories: /home/cassandra/data
  • commitlog_directory: /home/cassandra/commitlog
  • saved_caches_directory: /home/cassandra/saved_caches

카산드라(Cassandra) 에서 위 디렉토리를 설정하기 위해서 설정파일을 편집해 줍니다.

시작 스크립트

jdk 7 update 75 에 대해 시스템 java 설정을 해주면 별도로 필요가 없지만 카산드라(Cassandra) 에서만 쓰게 하기위해서는 시작스크립트를 작성하고 jdk 7 update 75 를 인식시켜줘야 합니다.

Bash History 를 Syslog 에 남기기

centos logoBash 쉘은 명령어 히스토리 기능을 제공 합니다. history 명령어를 입력하면 지금까지 사용했던 Bash 명령어들이 모두 보여 줍니다.

이러한 기능은 사용자 홈 디렉토리에 ‘.bash_history’ 파일에 기록되어 집니다. 그러나 여러 사람이 사용하는 서버에서 각 사용자 홈 디렉토리에 히스토리를 남기기 보다는 리눅스의 syslog 에 남기게 함으로써 사용자가 못된 일을 하는지 않하는지를 감시하도록 하면 좋을 것입니다.

이 문서는 Bash History 를 Syslog 에 남기기 에 대한 것입니다.

1. logger 를 이용한 방법

logger 는 쉘 명령어를 syslog 에 적도록하는 모듈 입니다. 이를 이용하면 수동으로 syslog 에 기록을 남기게 할 수 있습니다. 이를 이용해서 다음과 같이 /etc/profile.d/cmd.sh 파일을 작성 합니다.

이제 이를 Source 해 줍니다.

2. rsyslog 설정

다음과 같이 설정을 해줍니다.

이렇게하면 ‘/var/log/bash_history’ 파일에 Bash 쉘 히스토리가 남기며 ‘192.168.0.2’ 서버에 로그를 전송합니다.

Atheros AR81 Family GigaEthernet 드라이버 설치.

AMD 칩셋을 달고 나오는 저가형 메인보드의 경우에 Atheros 의 Ethernet 칩셋을 탑재하는 경우가 있습니다. 문제는 Atheros Ethernet 드라이버가 윈도우용은 제공하는데 리눅스용은 제공을 않하더군요.

ASRock 960GM-VGS3 FX Mainboard
ASRock 960GM-VGS3 FX Mainboard

인터넷을 검색해보니까 누군가 리눅스용 드라이버를 제작해 놨는데, 오래된 경우라 최신의 리눅스 커널을 위해서는 패치를 해야하고 그 패치도 누군가 만들어서 올려놨더군요.

이 문서는 Atheros AR81 Family GigaEthernet 리눅스 드라이버를 설치하는 방법을 설명한 것 입니다.

1. 다운로드

첨부파일을 다운로드 하면 됩니다.

첨부파일: AR81Family-linux-v1.0.1.14.tar

2. 설치

먼저, 커널 소스를 설치합니다. 현재 설치된 커널의 버전에 맞는 것을 설치해야 합니다.

Atheros 드라이버는 커널의 소스를 ‘/usr/src/linux’ 디렉토리에서 찾습니다. 다음과 같이 심볼릭 링크를 생성해 줍니다.

압축을 푼 드라이버 디렉토리에서 컴파일 설치를 해줍니다.

부팅시 마다 자동으로 모듈을 로딩하도록 하기 위해서 다음과 같이 해줍니다.

재부팅해서 eth0 가 올라오는지 살펴봅니다.

대부분 다 잘 올라 옵니다. eth0 가 올라오면 이제 IP 설정을 해주면 됩니다.

  • Camera: Nikon D200
  • Focal length: 5.6mm
  • ISO: 100
  • Shutter speed: 1/204s

아파치 로그 분석하기

Apache Logo

아파치 웹 서버에는 접속에 대한 로그를 남길 수 있습니다.

로그의 형식은 다양하지만 대략적으로 어느 컴퓨터(IP 주소)에서 어떤 기기, 어떤 프로그램을 이용해서 어떤 웹 페이지를 접속했는지, 각 컨텐츠의 전송량등의 정보가 담깁니다.

이 문서는 아파치 로그 분석하기 에 대한 것입니다.

전송량 통계

로그 파일에 컨텐츠의 전송량이 담기기 때문에 이것들을 전부 더하면 아파치 웹 서버가 내보낸 전송량을 알 수 있겠지요? awk 쉘 스크립트로 간단하게 할 수 있습니다.

여기서 중요한 것이 access_log 파일에 전송량을 표시하는 위치 입니다. 위 명령어 앞줄에 ‘s += $10’ 이 있는데, 공백을 기준으로 10번째 칸이 전송량을 표시한다는 거기 때문에 전송량 표시되는 부분이 12번째 칸이라면 이것을 ‘s += $12’ 로 고쳐줍니다.

좀 더 나가서 특정 아이피에 대한 것만 계산하고 싶다면 다음과 같이 해줍니다.

grep 을 이용해서 필요로하는 컨테츠만을 뽑아서 총 전송량을 계산할 수 있습니다.

로봇에 의한 전송량도 계산할 수 있습니다. 구글 봇이 페이지를 긁어가는데 들어간 전송량은 다음과 같이 계산할 수 있습니다.

HTTP 응답코드별 트래픽 계산은 다음과 같이 할 수 있습니다.

응답코드만을 다르게하면 응답코드별로 트래픽 양을 알수 있습니다.

HTTP 응답코드 세기

HTTP 응답코드는 중요 합니다. 이를 잘 파악하면 웹 사이트에 대한 상태를 알 수도 있습니다.

외부에서 이미지 링크 파악

종종 외부 사이트에서 내 사이트에서 이미지를 링크걸어놓은 것을 볼 수 있습니다. 트래픽을 절약하기 위해서 종종 사용하기도 하는데, 이러한 것을 다음과 같이 파악할 수 있습니다.

http://linux.systemv.pe.kr 부분을 자신의 웹사이트 주소를 입력해 주시면 됩니다.

CentOS 6 Xen 설치

centos logoCentOS 6을 사용하고 있다면 별다른 노력없이 Xen 가상화 서버를 구축할 수 있습니다. 현재(2014년 9월 19일) CentOS 의 최신 배포판은 6.5 입니다.

이 문서는 CentOS 6 Xen 설치에 관한 것 입니다.

 

 

1. Xen 패키지 저장소 활성화

Xen 가상화를 위해서 CentOS 6.5 에서는 Xen 가상화 패키지 설치를 쉽게할 수 있도록 저장소를 제공합니다. 이 저장소를 이용하기 위해서 다음과 같이 쉘 명령어를 입력해 줍니다.

2. xen 설치.

저장소를 활성화 했기 때문에 yum 으로 xen 을 설치할 수 있습니다.

3. grub 에 xen 하이퍼바이저 이식

xen 패키지를 설치하면 이를 위한 커널도 새롭게 설치되는데, 여기에 xen 하이퍼바이저를 부팅시에 되도록 고쳐줘야 합니다. 이것도 스크립트로 제공해 줍니다.

4. 재부팅 해줍니다.

5. 확인

재부팅이 끝나면 제대로 됐는지 다음과 같이 확인 합니다.

저의 CPU 는 하드웨어 가상화를 지원하기 때문에 HVM (전 가상화)까지 지원 합니다.

6. libvirt 설치.

Xen 을 사용하기 위해서는 xm, xl 명령어를 사용하는데 이것보다 Python 으로 작성된 프로그램을 이용하면 더 쉽게 관리를 할 수 있습니다. 이를 위해서 다음의 패키지를 설치 합니다.

다시 재부팅을 해주면 끝납니다.

CentOS 7 RabbitMQ 설치

RabbitMQ Logo RabbitMQ 는 AMQP(Advanced Message Queuing Protocol) 를 지원하는 메시징 큐 브로커 입니다. 큐(Queue) 자료구조의 동작방법 그대로 서버로서 역활을 하도록 만든 서버 입니다.

CentOS 7 RabbitMQ 설치 방법을 설명 합니다.

1. EPEL 저장소 추가.

RabbitMQ  는 Erlang 이라는 언어로 작성되었습니다. 따라서 이 패키지가 설치되어 있어야 하는데,  CentOS 7 에서는 패키지로 제공하지 않습니다. 대신에  EPEL 저장소를 추가해서 사용 합니다.

2. RabbitMQ 설치.

현재(2014년 9월 16일)  RabbitMQ 서버의 최신 버전은 ‘3.3.5-1’ 입니다. 이를 설치 합니다.

3. Web Console 활성화.

RabbitMQ 는 Web Console 을 지원 합니다. 이를 위해서 RabbitMQ 의 Console Management 플러그인을 활성화 해주고 서버를 재시작 해줍니다.

4. 서비스 등록

CentOS 7 부터 서비스 관리는 systemd 에서 하도록 변경되었지만 RabbitMQ  는 아직 여기에 대응하지 않습니다. 예전과 같이 chkconfig 도구를 이용해서 서비스를 런레벨(run level) 에 등록해 줍니다.

5. CentOS 7 에서 시작 문제.

RabbitMQ 의 최신 패키지는 CentOS 7 의 Systemd 를 지원하지 않아 구동을 한다고 하더라도 다음과 같은 오류를 만나게 됩니다.

이는 SELINUX 를 disabled 처리해주면 구동이 가능합니다.

6. Web Console 에 로그인 계정 추가.

메뉴얼에 의하면 Web Console 의 기본 계정인 guest/guest 는 로컬호스트에서 접속할때만 가능합니다. 외부에서 접속할때는 불가능 합니다. 그래서 새로운 계정을 다음과 같이 추가해줍니다.

7. firewalld 로 Web Console 접속 포트 개발

RabbitMQ 의 Web Console 은 15672 포트를 사용 합니다. 이를 firewalld 를 이용해서 개방해 줍니다.

8. http://서버IP:15672 접속.

이제 웹 브라우저를 열고 http://서버ip:15672 를 하면 로그인 화면이 나옵니다. 여기서 아까 생성한 관리자 아이디/패스워드를 입력해서 로그인이 되면 정상입니다.

RabbitMQ 서버 관리자 화면
RabbitMQ 서버 관리자 화면