반응형

아파치 톰캣 연동 작업을 위해 필요한 톰캣 커넥터(Tomcat connector) 설치 작업 중 다음과 같은 에러가 발생했다.

톰캣 커넥터를 다운받고 tar로 압축을 푼 후 해당 폴더의 native폴더에 들어가 다음의 MakeFile을 만들기 위해 명령어를 실행

./configure --with-apxs=/usr/bin/apxs

다음과 같은 에러 발생

configure: error: in `/usr/local/src/tomcat-connectors-1.2.48-src/native':
configure: error: C compiler cannot create executables

mod_jk를 설치 하려면 gcc, gcc-c++, httpd-devel 세가지 패키지가 설치되어 있어야 한다.

다음과 같이 설치해주고 다시 실행

yum install gcc gcc-c++ httpd-devel

좀 더 자세한 설명이 필요하다면 아래의 포스팅을 확인바랍니다.

https://cionman.tistory.com/26

 

09. 리눅스(CentOS) 개발 놀이터 만들기 - Apache와 Tomcat 연동

블로그가 이전 작업 중에 있습니다.아래의 링크를 클릭하시면 동일한 내용을 보실 수 있습니다. https://suwoni-codelab.com/linux/2017/05/29/Linux-CentOS-Apache-Tomcat/ 안녕하세요~ Apache와 Tomcat의 연동..

cionman.tistory.com

 

반응형
반응형

설치환경 : 리눅스 centos7버전 때

 

기본 환경설정(git)

추후 superset git repository clone을 위해 필요

sudo yum install git

docker 설치 centos7

참고문서 : https://linuxize.com/post/how-to-install-and-use-docker-on-centos-7/

1. Start by updating your system packages and install the required dependencies:

sudo yum update
sudo yum install yum-utils device-mapper-persistent-data lvm2


2. Next, run the following command which will add the Docker stable repository to your system:

sudo yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo


3. Now that the Docker repository is enabled, install the latest version of Docker CE (Community Edition) using yum by typing:

sudo yum install docker-ce


4. Once the Docker package is installed, start the Docker daemon and enable it to automatically start at boot time:

sudo systemctl start docker sudo systemctl enable docker

5. To verify that the Docker service is running type:

sudo systemctl status docker

 

Executing the Docker Command Without Sudo #

By default managing, Docker requires administrator privileges. If you want to run Docker commands as a non-root user without prepending sudo you need to add your user to the docker group which is created during the installation of the Docker CE package. You can do that by typing:

 

sudo usermod -aG docker ${USER}

$USER is an environment variable that holds your username.

 

Docker Compose 설명 및 설치


1. docker-compose download

sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose


2. APPLY EXECUTABLE PERMISSION TO THE BINARY
sudo chmod +x /usr/local/bin/docker-compose

 

3. alias setting

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker, docker-compose 설치 이후 compose실행시 에러가 난다면 해당 세션창을 나갔다가 다시 접속해야한다.

superset source code clone & install

1. clone superset source codegit clone https://github.com/apache/incubator-superset/

 

2. dockerfile 수정

# First, we just wanna install requirements, which will allow us to utilize the cache

# in order to only build if and only if requirements change

COPY ./requirements.txt /app/ RUN cd /app \         && pip install --no-cache -r requirements.txt

해당 부분에 pip로 사용할 라이브러리들 추가

COPY ./requirements.txt /app/

RUN cd /app \        

      pip install --upgrade pip \        

      && pip install --no-cache -r requirements.txt \        

      && pip install mysqlclient \        

      && pip install impyla \        

      && pip install redis==3.2.1 \        

      && pip install gevent==1.2.2 \        

      && rm -rf /root/.cache/pip

 

 

3. docker-compose.yml 파일 수정

version: "3.7" => version: "3.4"
  superset:
    ports:
      - 8088:8088  => -8089:8088     (8088포트로 띄울 경우 정상적으로 동작안함)

4. docker-compose up

docker-compose up 명령어로 dockerfile의 이미지를 읽어가며 설치

docker-compose up

기존 리서치 superset에서 발생했던 이슈

1. 다운로드한 CSV가 엑셀로 열 경우 한글이 깨지는 문제 수정

2. sql tab이 한글명일 경우 정상적으로 csv다운로드 안되는 이슈 처리

vi /home1/irteam/incubator-superset/superset/views/core.py

 

docker기반 superset 설치시 발생했던 이슈 정리

1.설치는 되었는데 default id/pw가 생성이 안되어 있을 경우 =>  docker-init을 통하여 계정 설정


docker-init

## Initializing Database To initialize the database with a user and example charts, dashboards and datasets run:

```bash

docker-compose run -e SUPERSET_LOAD_EXAMPLES=yes --rm superset ./docker-init.sh

 

2. docker-compose.yml 내부의 버전과 docker-compose 버전이 맞지 않는 경우

[incubator-superset]$ docker-compose up



ERROR: In file './docker-compose.yml' service 'version' doesn't have any configuration options. All top level keys in your docker-compose.yml must map to a dictionary of configuration options.

해결책 docker-compose version 3.7 -> 2버전대로 낮추거나 docker-compose 버전을 높여주어야 한다.
참고 : https://github.com/docker/compose/issues/3331

 

3. 알파환경에서는 문제가 없었는데 리얼환경에서 클러스터 OS Partition 차이로 인한 이슈

-> docker-compose up 명령어 실행시 발생

ERROR: Service 'superset' failed to build: OCI runtime create failed: /var/lib/docker/overlay2/17f563586397ce35fab5733d85b37fc68073a42eb4a5044025e68fd89e87b573/merged is not an absolute path or is a symlink

해결책

# 실행되고 있는 docker stop
$ sudo systemctl stop docker

# 잘죽었는지 확인
$ sudo systemctl status docker

# 원하는 디렉터리 이동을 위한 디렉터리 생성
$ sudo mkdir /mnt/extra

# 기존 문제 발생했던 디렉터리의 내용들을 새로 만든 디렉터리로 이동
$ sudo mv /var/lib/docker /mnt/extra

# 링크생성
$ sudo ln -s /mnt/extra/docker /var/lib/docker

# docker 시작
$ sudo systemctl start docker

# docker 잘올라왔는지 상태 확인
$ sudo systemctl status docker

# 재설치 (iteam) $ docker-compose up

 

반응형
반응형

쉘스크립트 작업을 하다가 정말 별거 없는 스크립트인데 실행시켜보면 command not found가 뜬다.

그것도 변수명인데 해당 변수명의 command를 찾지 못하겠다니???

 

RECENTFILE : command not found

#!/bin/sh

RECENTFILE =`hadoop fs -ls -R /user/irteam/dmp/demo/data/ | grep "^d" | sort -k6,7 | tail -1 | tr -s ' ' | cut -d' ' -f8`

echo "${RECENTFILE}"

잉??? RECENTFILE은 변순인데...왜 커맨드로 인식해???

 

문제는 RECENTFILE뒤에 공백....(공백을 제거해준다.)

RECENTFILE=`hadoop fs -ls -R /user/irteam/dmp/demo/data/ | grep "^d" | sort -k6,7 | tail -1 | tr -s ' ' | cut -d' ' -f8`

 

만약 처음 처럼 공백을 넣게 되면 bash는 RECENTFILE이라는 명령을 뒤에 있는 문자열을 매개변수로 실행하려 한다.

ex) RECENTFILE = 'foo' (RECENTFILE 옆에 한번 띄고 = 옆에 한 번 띄게 되면 RECENTFILE이라는 커맨드를 '=', 'foo' 두 개 인자와 함께 실행하려 할 것이다.)

 

따라서 변수선언시에는 뒤에 공백을 주어 bash에서 command로 인식하지 않도록 하자.

반응형
반응형

서버간 통신시 acl체크가 필요한 경우가 많이 있다.

항상 telnet 응답값을 보고 이게 정상적으로 된게 맞는지 헷갈리는 경우가 있어 추후 기억을 위해 포스팅

 

출발서버 -> 목적지 서버 확인

telnet ip port

출발서버에서 telnet 목적지서버IP 확인하고싶은 port로 명령을 내린다.

ex) 10.65.777.23 서버에서 10.62.332.555 80port 요청의 acl 을 확인

10.65.777.23 서버에서 telnet 10.62.332.555 80 로 요청

 

반응 message에 따라 유형이 다르다.

1. Trying 10.62.332.555... 

위와 같은 반응일 경우 방화벽 오픈이 안된 것이다.

 

2. Trying 10.62.332.555...
telnet: connect to address 10.161.241.152: Connection refused
telnet: Unable to connect to remote host: Connection refused

바로 연결거부가 발생하면 방화벽 오픈은 되었으나 해당 서버에 해당 포트로 프로세스가 안 떠있는 것이다.

 

Trying 172.0.0.1...
Connected to 172.0.0.1
Escape character is '^]'.

방화벽 오픈이 정상적으로 되었고 프로세스가 올라가 있는 것이다.

=> 정상적으로 통신을 할 수 있는 상태이다.

반응형
반응형

쉘스크립트에서 특정 문자열을 기준으로 앞,뒤 문자열을 가지고 오고 싶을 경우 다음과 같이 사용하면된다.

 

%%{특정문자열}* => 해당 문자열 기준 앞 부분을 가져온다. 

#*{특정문자열} => 해당 문자열 뒷 부분을 가져온다.

[ 결과 ]

hello my youtube is I'm developer
hello my youtube
I'm developer

반응형
반응형

리눅스 쉘스크립트(shell script)에서 wc -l로 파일 line수 읽어 변수에 담기

[ Linux Getting the line count and sotring in a result set in shell script ]

 

FILE_ROW_COUNT=$(cat $FILE_PATH | wc -l)

반응형
반응형

Shell Script에서 특정 날짜 조건으로 배치성 작업을 처리할 일이 있어 원하는 날짜 범위에 맞게 처리되는지 확인하기 위해

 

다음과 같이 찍어보았다.

#!/bin/bash

for i in `seq 0 30`; do
        echo `date + %Y%m%d -d "20190322 -$i days"`; done

쉘스크립트를 실행해보면 

date: extra operand `%Y%m%d'
Try `date --help' for more information.

다음과 같이 뜬다.

 

문제는 date +%Y%m%d 시에 '+'와 날짜포맷사이에 공백이 있으면 안된다!!!

echo `date +%Y%m%d -d "20190322 -$i days"`; done

$ sh batch_conv_buy_insert.sh
20190401
20190331
20190330
20190329
20190328
20190327
20190326
20190325

원하는 범위의 date가 출력되는 것을 확인할 수 있다.

반응형
반응형


톰캣(tomcat)의 기본포트가 8080인 이유를 아시나요???


많은 분들이 WAS로써 톰캣(tomcat)을 사용하실텐데요. 


특히나 요즘은 스프링부트로 인한 임베디드 톰캣을 사용하실줄로 압니다.


톰캣도 그렇고 스프링부트의 임베디드 톰캣도 그렇고 그럼 왜 기본 디폴트 포트는 8080이냐???하는 의문이 생길 수도 있는데요...(저는 그랬습니다...)


간단히 설명을 드리자면 리눅스나 유닉스는 1024이하의 포트(well-known port)들은 일반 유저 권한에서 바인딩 할 수 없도록 되어 있습니다.


이유는 보안때문인데요~!



8080포트에 대한 특별한 이유는 없습니다. 그저 1024이상의 포트중 하나를 임의로 디폴트로 설정한 것 일뿐(이라고 저는 생각합니다.)


하지만 외부 서비스를 해야하는경우에는 80포트로의 접근이 필요한 경우가 있습니다.


단순히 naver.com:8080이라고 사용자들이 접속하게 된다면 불편할테니까요...


그래서 루트권한(sudo)로 톰캣 포트를 80으로 설정 후 어플리케이션을 기동시켜서 사용할 수 는 있습니다.


다만! 위에서 말씀드렸듯 보안 문제가 존재합니다.


애드센스 자동삽입 광고


톰캣서버는 구동시에 tomcat 유저 권한으로 구동되게 됩니다. 때문에 톰캣을 통해 서비스되는 웹을 통해 해킹이 되더라도


tomcat유저 권한에 해당하는 부분까지만 접근 가능하게 됩니다.


따라서 루트권한(sudo)로 80포트로 구동시키게 된다면 해킹당했을 경우보단 안전하다고 할 수 있습니다.




물론 이런 문제를 회피하는 방법은 iptables를 통한 포트포워딩 방식이나 WAS앞단에 웹서버(apache, nginx)를 둬서 해결할 수 있지만


저 경험상에 의해서 iptables를 통해 포트포워딩을 할 경우 문제가 있었던 경험이 있기에 톰캣 80포트 8080 포트로 포워딩 이슈 


앞단에 웹서버를 두시고 서비스하는 방법이 좋다고 생각합니다.

반응형
반응형


리눅스에서 openjdk 업그레이드 하기!!!


1. 자바 버전 확인

$ java -version


2. 설치 가능한 openjdk 버전 확인

$ yum list java*jdk-devel



3. 설치고자하는 버전을 확인 후 설치

$ yum install -y java-1.8.0-openjdk-devel.x86_64


나의 경우에는 설치하고 java -version 명령어를 통해 확인했을 때 잘 업그레이드 된 걸 확인할 수 있었다.



혹시 바뀌지 않은 경우 다음과 같이 바꾸도록 하자.

$ /usr/sbin/alternatives --config java



해당 명령어를 쳐서 원하는 버전의 번호를 선택해주면 된다~!!!!



반응형

+ Recent posts