Skip to main content

· One min read

리눅스 유저 비밀번호를 변경해보자. 비밀번호를 변경하고 싶은 유저로 로그인을 한 뒤 아래 명령어를 날리면 된다.

$ passwd

Root 권한이라면 다른 아이디의 비밀번호도 변경이 가능하다.

# passwd 뒤에 유저아이디를 적는다
$ passwd userid

· One min read

리눅스에서 재부팅시 자동으로 프로그램을 실행해야하는 경우가 있다. init.d에 등록하는 방법이 있지만 스케쥴 작업인 경우 크론에서 관리하는게 깔끔한 것 같다.

예제

$ crontab -e

@reboot /test/test.sh start

@reboot를 쓴 뒤 부팅시 실행시킬 명령어를 적어주면 된다.

· One min read

수동으로 내부 아이피 세팅 중 문제가 발생하는 경우 확인해봐야한다.

NetworkManager

네트워크 매니저가 돌아가고 있으면 충돌이 발생할 수 있다.

# 확인
$ service NetworkManager status

# 서비스 종료
$ service NetworkManager stop

# 부팅 서비스 삭제
$ chkconfig NetworkManager off

내부 IP 확인

$ /sbin/ifconfig $1 | grep "inet addr" | awk -F: '{print $2}' | awk '{print $1}'

정상적으로 할당될 것이다.

· 3 min read

포트 확인

# grep 뒤에 확인할 포트를 적으면 된다.
$ netstat -lp | grep 3307

iptable 수정

$ vi /etc/sysconfig/iptables

# 해당 포트를 방화벽에서 열어준다.
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3307 -j ACCEPT

database 포트 변경

$ vi /etc/my.cnf

# 포트가 설정되있는 부분을 찾아 변경한다.
port = 3307

서비스 재시작

$ service mysql restart

잘 했는데 서비스가 올라가지 않는다!!!

원인

로그 확인

mysql 설치 경로로 이동하여 로그를 살펴보자.

$ cd /var/lib/mysql/ # basedir 설정이 되어있다면 해당경로를 덧붙힌다.

$ cat {hostname}.err

[ERROR] Cant start server: Bind on TCP/IP port. Got error: 13: Permission denied
[ERROR] Do you already have another mysqld server running on port: 3307 ?
[ERROR] Aborting

해당 포트에 권한이 없다. 해당 포트를 다른 mysqld 서비스가 사용하는가? 라고 로그가 남겨져있다.

SELinux 확인

$ sestatus

SELinux status: enabled

혹시나 역시나 SELinux가 활성화 되어있다. SELinux에서 포트가 서비스용으로 활성화가 되지 않았기 때문에 계속 거절당한 것이였다.

해결

SELinux 설정 확인

semanage 명령어를 사용해서 확인하고 변경할 수 있다. 명령어 실행이 안될 경우 policycoreutils-python 패키지를 설치해주면 된다.

# semanage 설치
$ yum install -y policycoreutils-python

# 포트 확인
# mysql
$ semanage port -l | grep mysqld_port_t
# http
$ semanage port -l | grep http_port_t

mysqld_port_t tcp 1186, 3306, 63132-63164

변경하려는 3307 포트는 등록되어 있지 않다.

SELinux에 포트 등록

$ semanage port -a -t mysqld_port_t -p tcp 3307

명령어가 iptables에 등록하는 것과 유사하다.

확인

$ semanage port -l | grep mysqld_port_t

mysqld_port_t tcp 3307, 1186, 3306, 63132-63164

이제 mysql restart를 하면 정상적으로 구동된다.

여담

리눅스에서 정상적으로 진행했는데 뭔가 안된다면 SELinux부터 의심해보자.

· One min read

모듈 설치시 domain을 사용하거나, telnet 도메인 포트를 호출해봤는데 name resolution에서 일시적인실패 또는 Temporary failure 문구의 에러가 보이는 경우가 있다.

원인

nameserver를 찾지 못해서 발생한다.

해결

Root 계정으로 접속 후 nameserver 설정을 추가한다.

$ vi /etc/resolv.conf

# 아래 내용을 추가
nameserver 58.227.193.227
nameserver 221.143.20.131

저장하면 서비스 재시작이 필요없이 바로 적용된다.

여담

  • 통신사별 DNS 정보 페이지를 첨부한다.
  • 아마존 DNS 오류로 이 페이지의 조회수가 급증했다.

· One min read

selinux 를 끄는건 보안상 취약하다. 하지만 켜놓으면 ftp 가 접근이 안되거나, 접근이 되어도 패시브모드가 접근이 안 되는 경우가 있다.

해결

아래 세가지 명령어를 실행해서 selinux 의 설정을 바꿔준다.

$ setsebool -P httpd_enable_homedirs 1
$ setsebool -P httpd_can_network_connect 1
$ setsebool -P allow_ftpd_full_acccess 1

여담

옵션명이 곧 설명을 대신한다고 믿는다.

· One min read

lynx(링스) 브라우저를 설치하고 사용해보자

설치

# 설치 확인
$ yum list installed | grep lynx

# lynx 설치
$ yum install -y lynx

예제

# lynx로 브라우저 호출
$ lynx https://gracefullight.github.io

# 브라우저 호출'만' 하고 싶을 때 (결과를 표시하지 않음)
$ lynx -dump https://gracefullight.github.io

여담

crontab과 병행해서 서버의 API를 주기적으로 동작시킬 수 있다.

· 3 min read

rpm이 설치되어있지 않은 환경에서의 compile 설치 방법을 다룬다.

운영체제 확인

$ cat /etc/issue
# bit 확인
$ getconf LONG_BIT

JDK 설치

다운로드

여기에서 다운로드하면 된다. image from hexo

업로드 및 압축 해제

$ tar -zxvf jdk.tar.gz

경로 설정

$ vi .profile

# 추가 내용
export JAVA_HOME=/유저경로/java
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin

# 저장
$ :wq!

bin 폴더 PATH들은 명령어를 위해 필요하고 \$PATH < 기존 PATH를 추가하지 않는 이유는 TOMCAT 실행시 기본 설치 PATH를 먼저 읽어오기 때문이다.

경로 갱신

$ source .profile

설치 확인

$ javac -version

Tomcat 설치

다운로드

여기에서 다운로드하면 된다.

업로드 및 압축 해제

apache-tomcat-...의 이름이 길어 tomcat으로 변경 후 업로드하시면 편합니다.

$ tar -zxvf tomcat.tar.gz

경로 설정

$ vi .profile

# PATH 뒤에 tomcat/bin 경로를 추가
export PATH=/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin

경로 확인

$ $PATH

/bin:/usr/bin:/usr/local/bin:$JAVA_HOME/bin:/home/myuser/tomcat/bin
# 위에 설정한 PATH의 값이 보이면 정상

Tomcat 설정 추가

tomcat\bin\catalina.sh를 열고 Tomcat과 Java의 경로를 추가해준다.

CATALINA_HOME="/where/to/tomcat"
CATALINA_BASE="/where/to/tomcat"

JAVA_HOME="/where/to/java"

주의

catalina.sh의 주석 표시된 내용을 읽으면 변수를 추가하지 말고 setenv.sh를 만들어서 커스터마이징 옵션을 분리하라고 나온다.

setenv.sh를 수정하고 싶으면 파일을 열고 아래와 같이 추가해준다.

export CATALINA_HOME="/where/to/tomcat"
export CATALINA_BASE="/where/to/tomcat"

export JAVA_HOME="/where/to/java"

서버 실행

tomcat\webapps에 war파일을 옮긴 후 서버를 실행한다.

$ startup.sh

Tomcat started.

· One min read

서버 Mysql이 예전 커넥션을 그대로 가지고 있어서 발생한다.

해결

Mybatis Config에 아래처럼 커넥션과 관련된 옵션을 추가한다.

<!-- @author http://linuxism.tistory.com/580 -->
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>

<!-- 동시 커넥션 수 -->
<property name="poolMaximumActiveConnections" value="20"/>
<!-- 유휴상태의 커넥션 수 -->
<property name="poolMaximumIdleConnections" value="20"/>
<!-- 커넥션 요청 후 획득까지 기다리는 시간 -->
<property name="poolMaximumCheckoutTime" value="20000"/>
<!-- 커넥션 ping 테스트 -->
<property name="poolPingEnabled" value="true"/>
<!-- 커넥션 확인 쿼리 -->
<property name="poolPingQuery" value="select 1"/>
<!-- 커넥션이 얼마동안 사용하지 않으면 닫히는지 시간 설정 -->
<property name="poolPingConnectionsNotUsedFor" value="43200"/>
<!-- 사용불가능한 커넥션을 기다리는 시간 설정 -->
<property name="poolTimeToWait" value="30000"/>
<!-- 인코딩 -->
<property name="driver.encoding" value="UTF-8"/>
</dataSource>
</environment>
</environments>