리눅스 환경에서 새로운 패키지를 설치할 때에 "yum을 통해 손쉽게 다운로드할 수 있지만,

현재 구축하려는 서버는 사내망에 있어서 인터넷이 불가능한 환경이라 yum명령어를 사용할 수 없었습니다..

 

yum을 사용하지 못할경우에는 설치하려는 rpm 파일을 하나씩 설치해야 하는데,

해당 rpm 파일을 설치하기 위해서는 이에 해당하는 의존성 패키지 또한 같이 설치해줘야 하는 번거로움이 존재합니다.

 

인터넷이 안 되는 서버에 패키지를 쉽게 설치하는 방법은

인터넷이 되는 환경의 서버에서 yumdownloader를 사용해서 필요한 패키지. rpm파일을 다운로드하는 것입니다.

 

yumdownloader 명령어에 --resolve 옵션을 추가하면 의존성 있는 패키지도 같이 다운로드할 수 있습니다.

# yumdownloader --resolve [패키지 명]

 

해당. rpm 파일이 다운됐으면 인터넷이 안 되는 서버에 옮긴 후,

# rpm -ivh [패키지 파일명].rpm

명령어를 통해, 패키지를 설치합니다.

 

하지만, 이상하게도 패키지를 설치하는 도중 다른 패키지가 없어 설치가 안된다는 에러 문구를 발견할 수 있는데.. 🤣

 

 

구글링 해본 결과,

yumdownloader 명령어를 통해 패키지를 다운로드할 때 이미 서버에 설치된 dependency의 경우 다운로드를 하지 않는다고 하더라구요..ㅠㅠㅠ

그래서 다운받을 rpm을 폐쇄망 서버에 옮겨서 설치했을 때 위와 같은 오류가 발생하는 것이었습니다..

 

그래서 저는 repotrack을 사용해 rpm패키지를 다운로드하였습니다.

repotrack은 yumdownloader --resolve과 매우 유사하지만, yumdownloader는 종속성을 해결할 때 이미 설치되어 있으면 해당 종속성을 설치하지 않고 건너뛰고 repotrack의 경우 모든 종속성을 다운로드할 수 있는 차이점이 있습니다.

 

repotrack -p [다운로드 파일 경로] [다운받을 패키지 명]

해당 명령어를 통해 모든 종속성 패키지와 함께 rpm을 다운받을 수 있었습니다!

 

repotrack으로도 위와 동일하게 패키지가 없어 설치가 안된다는 에러 문구가 보일 경우에는 

yum install [패키지 명] --downloadonly --downloaddir=[다운받을 경로]

로 설치해보세요!

Centos7에서 docker 최신버전 설치 후, docker run 명령어를 치면 아래와 같은 오류가 발생했다.

- 서버 정보 : Centos7

- 설치한 docker version : 18.09.3

docker: Error response from daemon: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error mounting "/var/lib/docker/containers/241adecbff77a64f06883d9fe12c346d8928e8061f13ac5681e0b9990f71b3af/resolv.conf" to rootfs at "/etc/resolv.conf": possibly malicious path detected -- refusing to operate on /etc/resolv.conf: unknown.

 

 

구글링한 결과, Centos7버전대에서 해당 에러가 빈번히 발생하고 있는 걸 확인할 수 있었고, issue solved된 docker 버전으로 재설치했다.

 

해결방법

1) docker version : 19.03.1으로 재설치

# yum install docker-ce-19.03.1 \
                  docker-ce-cli-19.03.1 \
                  containerd.io
                  
                  
# systemctl start docker
# systemctl enable docker

--> 해당 버전으로 재설치했으나, 위와 동일한 오류 발생

 

 

2) docker version : 19.03.4으로 재설치

# yum install docker-ce-19.03.4 \
                  docker-ce-cli-19.03.4 \
                  containerd.io-1.3.7-3.1.el7
                  
                  
# systemctl start docker
# systemctl enable docker

--> 오류 해결!!

 

1. CMAK를 설치하게 된 이유

Kafka Manager는 GUI 기반 카프카 관리도구이다.

배치를 돌리면서 consumer하는 속도보다 producer 하는 속도가 더 빨라 설정된 kafka 메모리 초과로 배치가 제대로 실행되지 않았던 경험이있어, 카프카 모니터링 툴을 찾던 중 오픈소스인 CMAK를 설치하기로 했다.

 

카프카 모니터링 툴은 CMAK외에도 Kafdrop, Burrow 등 여러 오픈소스가 존재하지만,

설치가 간단하고, GUI로 토픽을 생성 및 변경할 수 있으면 좋을 것 같아 CMAK를 선택했다.

 

CMAK의 주요 기능

CMAK에서 제공하는 기능은 다음과 같다.

1. Kafka Cluster 관리

2. Consumer Lag 관리

3. GUI로 토픽 생성 및 변경

4. 파티션 추가

 

 

2. CMAK 설치

설치할 서버환경

  • CentOS 7

CMAK 설치 전, 기본 환경

  • JDK 11 이상
  • kafka 0.8 이상

 

1) tar.gz 파일 다운로드

# wget https://github.com/yahoo/CMAK/archive/refs/tags/3.0.0.6.tar.gz
# tar -zxvf 3.0.0.6.tar..gz

 

2) 현재 서버는 jdk1.8이지만 CMAK는 최소 JDK11 이상이기 때문에 sbt 파일을 수정했다.

- 1)에서 압축을 푼 파일로 이동하면 sbt 파일이 있다.

# vi sbt


[sbt]
-- 35번째 java_cmd 경로를 설치한 jdk11 위치로 변경

declare sbt_jar sbt_dir sbt_create sbt_version sbt_script sbt_new
declare sbt_explicit_version
declare verbose noshare batch trace_level

# declare java_cmd="java"
declare java_cmd="/usr/lib/jvm/jdk-11/bin/java" --이렇게!
declare sbt_launch_dir="$HOME/.sbt/launchers"
declare sbt_launch_repo

 

 

3) 빌드

# ./sbt clean dist

- 설치경로/CMAK-3.0.0.6/target/universal/cmak-3.0.0.6 생성된걸 확인 할 수 있다.

 

4) cofing 파일 수정

# cd /빌드한 파일 경로/confi/

-- application.conf 파일 수정

# Settings prefixed with 'kafka-manager.' will be deprecated, use 'cmak.' instead.
# https://github.com/yahoo/CMAK/issues/713
# kafka-manager.zkhosts="kafka-manager-zookeeper:2181"
kafka-manager.zkhosts="localhost:2181"
kafka-manager.zkhosts=${?ZK_HOSTS}
# cmak.zkhosts="kafka-manager-zookeeper:2181"
cmak.zkhosts="localhost:2181"
cmak.zkhosts=${?ZK_HOSTS}

 

5) 실행

# cd /app/kafkaManager/CMAK-3.0.0.6/target/univeral/cmak-3.0.0.6
# bin/cmak -Dhttp.port=9003 -java-home /usr/lib/jvm/jdk-11

- 자바버전을 11으로 잡아주기 위해 JAVA_HOME을 따로 잡아주었다.

- 기본 포트는 9000번이지만, 옵션을 통해 9003으로 변경해주었다. 

 

 

3. 실행결과 확인

 

1. WebSocket connection to failed

개발 서버에서는 WebSocket을 통한 채팅이 정상적으로 됐는데, 배포한 서버에서는 Connection 오류가 발생하면서 채팅 기능이 제대로 동작하지 않았다..

 

 

서버 환경

  • Ubuntu 20.04
  • Nginx 1.18.0

 

💡 해결방법

1. /nginx.conf > proxy_http_version, proxy_set_header 부분 추가

location /endpoint {
		proxy_pass <http://localhost>:포트번호/endpoint;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

		proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

에러 해결 ❌

 

 

2. 위의 방법이 안될경우

location /endpoint {
		proxy_pass <http://localhost>:포트번호/endpoint;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
		proxy_set_header Origin ""; // 이 부분 추가

		proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
}

proxy_set_header Origin ""; 을 추가해보자!

contextLoads() FALIED error

  • build 중contextLoads() FALIED 에러가 발생했다.

💡 해결방법 💡

  • main에는 application.properties 파일이 존재하지만 test에는 application.properties 파일이 없어서 발생하는 문제!
  • Spring Boot 에서 ApplicationTest.java 파일에 @SpringBootTest 주석처리 해주면 해결!

npm not found error

  • build 중 npm install 에서 npm not found 에러가 발생했다.

 

💡 해결방법 💡

1️⃣ NodeJS 플러그인 설치

  • Jenkins 관리 -> 플러그인 관리 -> 설치 가능 탭 -> NodeJs 검색 후 설치

 

 

2️⃣ NodeJs 플러그인 설정

  • Jenkins 관리 -> Global Tool Configuration
  • NodeJS -> Add NodeJS에서 위에와 같이 설정 후 저장

 

3️⃣ Job 설정

  • 구성 -> 빌드 환경 설정

+ Recent posts