일상의 정리

debconf: unable to initialize frontend: Dialog

리눅스/설치

apt update 시

debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline

위와 같은 메시지가 나올 경우 아래의 패키지를 설치해 준다.

apt -y install dialog

 

MariaDB can't create test file lower-test

리눅스/설치

Ubuntu Server 에 MariaDB 설치 후 또는 업데이트 후에 

systemctl start mysql 로 서비스 기동 시에 아래와 같은 에러메시지 발생 시 처리 방법

Can't create test file xxx.lower-test

원인 : MariaDB 의 기본 저장 위치는 /var 아래 위치해야 하나 그 이외의 (/home 등) 위치로 설정할 경우에 문제 발생

해결 방법: 

vi /usr/lib/systemd/system/mariadb.service

ProtectHome=true

위 부분을 찾아서

ProtectHome=false

로 바꿔 준 후에

systemctl daemon-reload

systemctl start mysql

로 재시작 하면 해결

 

하지만 위와 같이 하면 다음 업데이트에서 동일 현상이 나타나므로 영구적으로 해결 하려면 아래 부분을 실행

systemctl edit mariadb

아래 구문 추가

[Service]
ProtectHome=false

저장 후에

systemctl daemon-reload

하면 완료

Ubuntu 16.04.1 MariaDB + Tomcat 9 + Apache 2.4 + PHP 7.1 설치

리눅스/설치

1. MariaDB 설치

공식 미러를 통한 Maria DB 설치

아래 명령을 실행하여 공식 Repository로 부터 Maria DB를 설치한다.

# apt install software-properties-common
# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
# add-apt-repository 'deb [arch=amd64,i386] http://ftp.kaist.ac.kr/mariadb/repo/10.2/ubuntu xenial main'

키를 가져오고 저장소가 추가되었으면, 다음 명령으로 Maria DB를 설치한다.

# apt update

# apt install mariadb-server

Maria DB 보안 설정

설치 후 DB접속 전에 Maria DB의 보안을 설정한다. (익명 사용자 및 Test DB 제거)

# mysql_secure_installation

Maria DB 연결

Maria DB 인스턴스에 접속한다.

# mysql -u root -p

로컬 사용자 추가

mysql> create user 'user'@'localhost' identified by 'password';

로컬 및 원격 사용자 추가

mysql> create user 'user'@'%' identified by 'password';

DB권한 설정

    grant all privileges on [DB_NAME].* to 'user'@'%'; //특정 DB

    grant all privileges on *.* to 'user'@'%'; //모든 DB

    flush privileges;

Character set UTF-8설정

다음 내용을 /etc/mysql/my.cnf 에 추가한다.

[client]

default-character-set=utf8

[mysqld]

init_connect='SET collation_connection = utf8_unicode_ci'

init_connect='SET NAMES utf8'

character-set-server=utf8

collation-server=utf8_unicode_ci

Maria DB restart

# service mariadb restart


2. Tomcat 9 설치

관련 파일 다운로드

다음 파일을 다운로드 한다.

Tomcat 9.0 : http://tomcat.apache.org/download-90.cgi

Tomcat Native: http://tomcat.apache.org/download-native.cgi

Tomcat Connector : http://tomcat.apache.org/download-connectors.cgi

apr: http://apache.mirror.cdnetworks.com/apr/apr-1.6.2.tar.gz

사용자 추가

Tomcat 구동 사용자를 추가한다.

# useradd -s /bin/false -d /usr/local/tomcat tomcat

의존성 파일 설치

설치를 위해 아래 파일을 먼저 설치한다.

# apt install libssl-dev libexpat1-dev

APR 설치

# tar zxvf apr-1.6.2.tar.gz

# cd apr-1.6.2

# ./configure --prefix=/usr/local/apr

#make && make install


만약 cannot remove 'libtoolT': No such file or directory 에러 발생 시 아래 명령 후 다시 실행

cp -arp libtool libtoolT

JDK 설치

오라클 공식 Repository를 통해 JDK 를 설치한다.

# add-apt-repository ppa:webupd8team/java

# apt update

# apt install oracle-java9-installer

Tomcat 9.0 설치

tar xvzf apache-tomcat-9.0.0.M26.tar.gz

mv apache-tomcat-9.0.0.M26 /usr/local/

ln -s /usr/local/apache-tomcat-9.0.0.M26/ /usr/local/tomcat

Tomcat 사용자 권한 설정

chown -R tomcat:tomcat /usr/local/tomcat/

chmod -R g+r /usr/local/tomcat/conf

chmod g+x /usr/local/tomcat/conf

JAVA_HOME 확인

Tomcat Native 컴파일 시 JAVA_HOME을 지정해 주어야 한다. 다음 명령으로 확인한다.

update-java-alternatives -l

Tomcat Native 설치

tar xvzf tomcat-native-1.2.14-src.tar.gz

cd tomcat-native-1.2.14-src/native

./configure --with-apr=/usr/local/apr --with-java-home=/usr/lib/jvm/java-9-oracle

make && make install

환경파일 구성

/etc/profile 파일의 마지막에 다음 행 추가

export LD_LIBRARAY_PATH=/usr/local/apr/lib

export TOMCAT_HOME=/usr/local/tomcat

export PATH=$TOMCAT_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib

설치내용 확인

# source /etc/profile
# java -version
************* 다음 내용이 출력되면 성공 ***************************
java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
**********************************************************************

방화벽 포트 오픈

다음 명령으로 방화벽에서 8080 포트를 열어 준다.

# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
# iptables-save > /etc/iptables.rules
/etc/network/interfaces 파일에 아래 라인 추가
pre-up iptables-restore < /etc/iptables.rules

Tomcat 시작

# /usr/local/tomcat/bin/startup.sh

Tomcat 동작 확인

웹브라우저에서 서버의 IP와 포트를 입력하여 접속되는 지 확인

http://server-ip:8080/

구동파일 생성

다음 명령으로 tomcat Service 파일 생성

# vi /etc/systemd/system/tomcat.service

/etc/systemd/system/tomcat.service

[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

Environment=JAVA_HOME=/usr/lib/jvm/java-9-oracle
Environment=CATALINA_PID=/usr/local/tomcat/temp/tomcat.pid
Environment=CATALINA_HOME=/usr/local/tomcat
Environment=CATALINA_BASE=/usr/local/tomcat
Environment='CATALINA_OPTS=-Xms1024M -Xmx4096M -server -XX:+UseParallelGC'
Environment='JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom'

ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh

User=tomcat
Group=tomcat
UMask=0007
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target
구동파일 권한 설정
# chmod 755 /etc/systemd/system/tomcat.service
서비스 파일 reload
# systemctl daemon-reload

Tomcat 서비스 시작/종료

시작

# systemctl start tomcat

종료

# systemctl stop tomcat

부팅 시 Tomcat 서비스 시작

# systemctl enable tomcat

3. Apache 설치

관련 파일 다운로드

다음 파일을 다운로드 한다.
apr-iconv: http://apache.mirror.cdnetworks.com/apr/apr-iconv-1.2.1.tar.gz
apr-util: http://apache.mirror.cdnetworks.com/apr/apr-util-1.6.0.tar.gz
apache: http://apache.mirror.cdnetworks.com/httpd/httpd-2.4.27.tar.gz
pcre: ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz

apr-iconv 설치

# tar zxvf apr-iconv-1.2.1.tar.gz

# cd apr-iconv-1.2.1

# ./configure --prefix=/usr/local/apr-iconv --with-apr=/usr/local/apr

# make && make install

apr-util 설치

# tar zxvf apr-util-1.6.0.tar.gz
# cd apr-util-1.6.0
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr --with-apr-iconv=/usr/local/apr-iconv/bin/apriconv
# make && make install

pcre 설치

# tar zxvf pcre-8.41.tar.gz
# cd pcre-8.41/
# ./configure --libdir=/usr/local/lib
# make && make install

사용자 추가

apache 구동 사용자를 추가한다.

# useradd -s /bin/false -d /usr/local/apache apache

Apache 설치

# tar xvzf httpd-2.4.27.tgz
# cd httpd-2.4.27
# ./configure --prefix=/usr/local/apache \
--enable-authn-alias \
--enable-cache \
--enable-file-cache \
--enable-mem-cache \
--enable-disk-cache \
--enable-mods-shared=most \
--enable-proxy=shared \
--enable-proxy-ajp=shared \
--enable-proxy-ajp=shared \
--enable-dav=shared \
--with-apr=/usr/local/apr/ \
--with-apr-util=/usr/local/apr-util/ \
--enable-ssl \
--enable-dav \
--enable-cgi \
--with-mpm=event \
--enable-cgid \
--enable-vhost-alias \
--enable-rewrite \
--enable-forward=shared \
--enable-proxy-connect=shared \
--enable-proxy-http=shared \
--enable-deflate=shared \
--enable-so \
--enable-headers=shared \
--enable-include=shared \
--enable-rewrite=shared
# make&&make install
make 도중 undefined reference to `XML_GetErrorCode' 에러 발생 시
vi build/config_vars.mk 파일 수정해서
AP_LIBS = 시작하는 라인을 찾아
-lexpat를 추가 후 다시 make

Apache 구동 사용자 설정

vi /usr/local/apache/conf/httpd.conf 로 아래처럼 사용자 수정

User apache
Group apache

Apache 시작

아래 명령으로 아파치 시작

# /usr/local/apache/bin/apachectl start

Apache 테스트

브라우저에서 서버에 접속 후 It works! 페이지가 표시 되는 지 확인

http://server-ip

구동 파일 설정

서버 실행 시 아파치 자동 실행을 위해 구동 파일을 설정한다.

vi /etc/systemd/system/httpd.service

[Unit]
Description=Apache Web Server
After=network.target

[Service]
Type=forking
#PIDFile=/run/httpd/httpd.pid
Environment=HTTPD_PID=/usr/local/apache/logs/httpd.pid
EnvironmentFile=/usr/local/apache/bin/envvars
ExecStart=/usr/local/apache/bin/apachectl -k start
ExecStop=/usr/local/apache/bin/apachectl -k graceful-stop
ExecReload=/usr/local/apache/bin/apachectl -k graceful
KillSignal=SIGCONT
PrivateTmp=true
LimitNOFILE=infinity
User=apache
Group=apache

[Install]
WantedBy=multi-user.target

구동파일 권한 설정

# chmod 755 /etc/systemd/system/httpd.service
서비스 파일 reload
# systemctl daemon-reload

실행파일 권한 설정

# chown -R apache:apache /usr/local/apache/bin/apachectl
# chown -R root:root /usr/local/apache/bin/httpd
# chmod +s /usr/local/apache/bin/httpd

Apache 서비스 시작/종료

시작

# systemctl start httpd

종료

# systemctl stop httpd

부팅 시 Apache 서비스 시작

# systemctl enable httpd

 4. PHP 설치

관련 파일 다운로드

php7을 다운로드 한다.

http://php.net/downloads.php

의존성 패키지 설치

php에서 사용할 의존성 패키지를 설치한다.

apt install libxml2-dev libbz2-dev libcurl4-openssl-dev libldap2-dev libmysqlclient-dev pkg-config libssl-dev libsslcommon2-dev libjpeg-dev libpng-dev libfreetype6-dev libldb-dev libsasl2-dev

의존성 링크 설정

php에서 라이브러리 의존성을 위해 링크를 설정한다.

ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so
ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so
ln -s /usr/lib/x86_64-linux-gnu/libmysqlclient.so /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so

libmcrypt 설치

PHP에서 암호화 해독 알고리즘인 mcrypt를 사용하기 위해서 설치해야 한다.

tar xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install
/sbin/ldconfig

cd libltdl/
./configure --enable-ltdl-install --libdir=/usr/local/lib
make && make install
cd ../../

mhash 설치

hash 암호화 알고리즘.

tar xvzf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install

mcrypt 설치

암호화 해독 알고리즘.

tar xvzf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure --prefix=/usr/local --libdir=/usr/local/lib
make && make install

php 설치

php 를 설치한다.

tar xvzf php-7.1.10.tar.gz
cd php-7.1.10
./configure --prefix=/usr/local/php \
--with-libdir=lib \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli=/usr/bin/mysql_config \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-pear=/usr/share/php \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir=/usr \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-maintainer-zts \
--enable-opcache \
--with-curl \
--with-iconv=/usr/local \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-ldap \
--with-ldap-sasl \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-bz2 \
--enable-static \
--enable-intl \
--enable-exif \
--with-pdo-mysql=/usr \
--with-gettext
make && make install
make 도중 umachine.h:340:13: error: ‘char16_t’ does not name a type 에러 발생 시 Makefile 을 열어서 CXXFLAGS_CLEAN 항목에  -std=c++0x 구문을 추가 후 make

php.ini 생성

아래 명령으로 Php.ini 생성.

cp -f php.ini-production /usr/local/php/etc/php.ini

opcache 활성화

/usr/local/php/etc/php.ini 의 opcache 부분을 아래와 같이 변경.

[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
/usr/local/php/etc/php.ini 의 맨 끝에 아래와 같이 추가.
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/opcache.so

5. PHP 확장모듈 설치

관련 파일 다운로드

ImageMagick 관련파일을 다운로드 한다.

https://www.imagemagick.org/download
http://pecl.php.net/package/imagick

의존성 패키지 설치

apt install autoconf libgtk2.0-dev

ImageMagicK 설치

ImageMagick은 TIFF, JPEG, GIF, PNG, PDF 및 기타 포토 CD 등 89가지 이상의 이미지의 읽기, 쓰기 및 처리하는 데 사용할 수 있는 개발 도구입니다.

# tar xvJf ImageMagick-7.0.7-4.tar.xz
# cd ImageMagick-7.0.7-4/
# ./configure --libdir=/usr/local/lib
# make && make install
# cd ..

imagick 설치

# tar xvzf imagick-3.4.3.tgz
# cd imagick-3.4.3
# /usr/local/php/bin/phpize
# ./configure --with-php-config=/usr/local/php/bin/php-config
# make && make install
/usr/local/php/etc/php.ini 에 아래 라인 추가
extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/imagick.so

php library 추가

# echo "/usr/local/php/lib" > /etc/ld.so.conf.d/php.conf
# ldconfig

php-cgi 프로세스 시작

# cd /usr/local/php/etc
# cp php-fpm.conf.default php-fpm.conf
# cp php-fpm.d/www.conf.default php-fpm.d/www.conf

www.conf 의 User와 Group 을 nobody --> apache 로 변경 후 php-fpm 실행
# /usr/local/php/sbin/php-fpm

Apache 에서 php 지원 추가

/usr/local/apache/conf/httpd.conf 파일을 열어서 php를 검색 후 아래 라인을 추가

AddType application/x-httpd-php .php .php3 .inc
AddType application/x-httpd-php-source .phps

Apache 재시작

service httpd restart

PHP 동작 테스트

# echo "<?php phpinfo(); ?>" > /usr/local/apache/htdocs/phptest.php

한 후 웹 브라우저에서 http://server-ip/phptest.php
해서 결과가 정상적으로 나오는 지 확인

6. Apache 와 Tomcat 통합

mod_jk 생성

tar xvzf  tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/
cd native
./configure --with-apxs=/usr/local/apache/bin/apxs
make
cp ./apache-2.0/mod_jk.so /usr/local/apache/modules/

설정 파일 복사

cd ../conf
cp httpd-jk.conf /usr/local/apache/conf/mod_jk.conf
cp workers.properties /usr/local/apache/conf/

mod_jk.conf 설정

/usr/local/apache/conf/mod_jk.conf 파일에 아래 내용 추가

JkWorkersFile /usr/local/apache/conf/workers.properties
JkLogFile /usr/local/apache/logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"

JkMount /servlet/* worker1
JkMount /*.jsp         worker1
JkMount /application/* worker1
JkMount /*.do          worker1
JkMount /*.class       worker1
JkMount /*.jar         worker1

설정 파일 해석

1. JkMount 위치는 Tomcat이 해석을 담당, JkUnMount는 반대임
2.  JkMount /test/* worker1 의 의미는 test 디렉토리 아래는 Tomcat이 처리를 담당
3. jsp와servlet은 tomcat이 처리, 그 외 그림이나 정적 파일은 Apache가 처리

Tomcat 프로퍼티 설정

/usr/local/apache/conf/workers.properties 에 다음 내용 추가

worker.list=worker1
worker.worker1.type=ajp13
worker.worker1.host=127.0.0.1
worker.worker1.port=8009
worker.worker1.lbfactor=50
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300

Apache 설정파일 수정

/usr/local/apache/conf/httpd.conf 에 다음 내용 추가

Include /usr/local/apache/conf/mod_jk.conf

Tomcat 설정변경

/usr/local/tomcat/conf/server.xml에 다음 내용 수정 (docbase 경로는 원하는 위치로 변경)

<Host 를 찾음
(다음과 같음:  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">)

다음 줄에 다음 내용을 추가:
<Context path="" docBase="/usr/local/tomcat/webapps"
 debug="0" reloadable="true" crossContext="true"/>

Apache / Tomcat 재시작

service httpd start
service tomcat restart

성공여부 확인

다음 명령으로 실행 여부 확인 해서 아래 메시지가 나오면 성공

# tail -f /usr/local/apache/logs/mod_jk.log
[Sun Oct 01 11:10:43 2017][22961:139625235212032] [info] init_jk::mod_jk.c (3595): mod_jk/1.2.42 initialized

연동 테스트

/usr/local/tomcat/webapps/test.jsp 파일에 다음 내용 추가 후

웹 브라우저에서 http://server-ip/test.jsp 해서 Hello World! 가 출력되면 성공

<html>
<h1>JSP test<hr>
<%out.println("Hello World!");%>
</html>

Tomcat port 차단

Apache를 통해 접속하므로 Tomcat 으로 직접 연결은 차단

/etc/iptables.rules 에서 8080 접속 관련 라인 삭제하고 아래 처럼 생성

*filter
:INPUT ACCEPT [377:27429]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [231:101581]
-A INPUT -i enp0s3 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i enp0s3 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i enp0s3 -j DROP
COMMIT

iptables rule reload

# iptables-restore < /etc/iptables.rules





우분투 ssh 접속이 오래 걸릴 때

리눅스/설치

우분투 터미널에서 ssh 접속을 하는 경우 오랫동안 응답이 없다가 패스워드를 물어보는 현상이 발생한다.

이는 ssh의 인증이 GSS API, 공개키(Public Key), 패스워드 순으로 이루어 지는데 GSS API 인증 과정에서 Kerberos DNS 질의가 발생을 하게 되고 이 DNS 질의에 대해 응답을 받지 못하는 경우 타임아웃이 발생할 때까지 대기를 하기 때문이다.

이 경우 별도 GSS API를 사용하지 않을 경우 이 GSS API 를 비활성화 해야 한다.

비활성화 하는 방법은

/etc/ssh/ssh_config 에서 GSSAPIAuthentication을 no 로 설정한다.


참고: About GSS API : http://en.wikipedia.org/wiki/Generic_Security_Services_Application_Program_Interface



Ubuntu 12.04 콘솔 모드로 시작하기

리눅스/설치

Ubuntu 의 기본 runlevel 은 2로 설정되어 있다.

근데 Ubuntu 클라이언트 버전인데도 불구하고 콘솔 모드로 시작해서 서버처럼 사용하고 싶다면...


다음 작업을 수행하면 된다.

1. /etc/default/grub 파일을 열어서

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

라인을 

GRUB_CMDLINE_LINUX_DEFAULT="text"

바꾼다.

그리고 

GRUB_HIDDEN_TIMEOUT=0

라인 앞에 #을 넣어 코멘트 아웃한다.

저장하고 종료


2. 다음 명령으로 GRUB 설정을 저장한다.

sudo update-grub


리부팅하면 다음부터 명령어 라인으로 실행된다.


만약 계속 그래픽 모드로 동작한다면


sudo apt-get install lightdm


으로 이전 버전을 업데이트 해 본다.