반응형
반응형

특정 환경에서 cp 명령어 -f 옵션이 먹지 않는 경우가 있는데,

이런 경우 아래와 같이 백슬래쉬를 하나 넣어주면 해결이 된다.


$ \cp -rf test.txt a.txt
반응형
,
반응형

SSL 인증서 설치 후, 기존 http 요청은 더이상 필요가 없기 때문에, http로 들어온 요청을 모두 https로 강제로 Redirect 시키는 방법에 대해 알아 보았다. 


1. mod_rewrite library를 사용하도록 설정한다.

$ a2enmod rewrite


2. 아래와 같은 구문을 설정에 추가한다.

<VirtualHost *:80>
    ...
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    ...
</Virtualhost>


3. Apache2를 재시작해준다.

$ service apache2 restart


반응형

'개발 > Linux, System' 카테고리의 다른 글

[CentOS] overcommit_memory  (0) 2017.01.16
[Linux] cp 명령어 overwrite  (0) 2016.07.12
[Linux] History logging 시간 남기기  (0) 2016.06.22
[Apache2] SSL 인증서 적용  (1) 2016.06.17
[Nginx] SSL 인증서 적용  (0) 2016.06.17
,
반응형

Linux에 문제가 발생하면, upstart log, syslog, history를 먼저 추적을 하는 것이 보통인데,

upstart log, syslog는 시간이 남아 있기 때문에, 언제 발생한 상황인지 추적이 가능하다.


다만, history의 경우 기본 설정으로 사용하면 커맨드 목록만 나오고, 시간이 안나오기 때문에

어떤 커맨드를 입력 후 문제가 발생했는지 찾기가 어렵다.


아래와 같이 환경변수를 추가해주면, history에서도 시간 값을 남길 수 있다.


/etc/profile 파일을 연다.

$ vi /etc/profile


가장 하단에 아래 구문을 추가해준다.

HISTTIMEFORMAT="%F %T -- "
export HISTTIMEFORMAT


적용한다.

$ source /etc/profile


확인

$ history

 1000  2016-06-22 16:39:37 -- exit
 1001  2016-06-22 16:39:56 -- history
 1002  2016-06-22 16:41:14 -- cat /etc/profile
 1003  2016-06-22 16:43:34 -- vi /etc/profile
 1004  2016-06-22 16:43:43 -- cat /etc/profile
 1005  2016-06-22 16:45:24 -- history

기존에 history목록에 나왔던 커맨드 들은 현재 시간으로 세팅이 되고, 이후 커맨드부터는 현재 System의 시간이 보여지게 된다.

반응형

'개발 > Linux, System' 카테고리의 다른 글

[Linux] cp 명령어 overwrite  (0) 2016.07.12
[Apache2] Rewrite Engine을 이용한 Http Https Redirect  (1) 2016.06.23
[Apache2] SSL 인증서 적용  (1) 2016.06.17
[Nginx] SSL 인증서 적용  (0) 2016.06.17
[Linux] sudo 권한  (0) 2016.06.10
,
반응형

MOD_SSL 모듈을 활성화 시켜준다.

$ sudo a2enmod ssl


VirtualHost 설정을 아래와 같이 추가한다.

<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile # 인증서 경로 입력
        SSLCertificateKeyFile # 인증서 key 경로 입력
...
</VirtualHost>

Apache2를 재시작 한다. (또는 리로드)

$ service apache2 restart # 재시작
$ service apache2 reload # 리로드


443포트의 Listening을 확인한다.

$ netstat -nlp | grep 443


반응형
,
반응형

Nginx.conf 파일을 열어 아래와 같은 구문을 추가한다.

       
server {
    listen [::]:443;
    listen 443;
 
    ssl on;
    ssl_certificate # 인증서 경로 입력           
    ssl_certificate_key # 인증서 key 입력
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers on;
}


Nginx 재시작 or 리로드

$ service nginx restart # 재시작
$ service nginx reload # 또는 리로드


443포트가 Listening 되었는지 확인

$ netstat -nlp | grep 443


반응형

'개발 > Linux, System' 카테고리의 다른 글

[Linux] History logging 시간 남기기  (0) 2016.06.22
[Apache2] SSL 인증서 적용  (1) 2016.06.17
[Linux] sudo 권한  (0) 2016.06.10
[Linux] 원격으로 mysql 쿼리 실행하기  (0) 2016.06.10
[Sphinx Search] Mysql과의 연동  (0) 2016.06.10
,
반응형

전 리눅스를 많이 써보지 않았기에.. 명령어 등이 매우 어색하더군요. 

 

현재 개발 시 시스템 팀에서 제공해주는 아파치 서버를 사용하고 있는데..

web.xml 설정을 바꿀일이 생겼는데 해당 경로로 가서,

vi web.xml 라고 치니.. 권한이 없다고 나오더군요.

 

권한이 없을 경우 sudo vi web.xml 이라고 치니 권한을 무시하고 접근이 가능하더군요.

 

기초적인 것이긴하지만.. 시스템 관련 쪽을 모르는 저로썬 유용한 정보라서 포스팅!

반응형
,
반응형

얼마 전에 웹페이지에서 Shell Script를 호출해서 mysql쿼리를 실행하는 기능을 만들었던 적이 있었습니다.

 

제가 게임 퍼블리싱 개발 쪽 일을 하고 있는데,

 

개발사에서 요청이 많이 들어오기 때문에, 아예 그냥 편리하게 만들어놓고,

니들이 알아서 해라~ 라고 하기 위해서였죠.

 

쉬울줄 알았는데, 리눅스 터미널을 많이 사용해보지 않은 저로써는 약간의 삽질이 필요했었습니다.

 

일단 리눅스 터미널에 들어가서 mysql --help 를 쳐보았습니다.

 

option들이 나오더군요.

 

원격으로 접속하기 위해 필요한 -h(호스트), -u (유저), -p (패스워드), -e (쿼리) 의 옵션이 보이더군요.

 

의외로 빨리 찾은 듯하여, 즐거운 마음으로 위 옵션들을 이용해서 Shell Script를 작성했었죠.

 

mysql -h {호스트} -u {유저} -p {패스워드} -e {쿼리} 로 일단 테스트를 해보았습니다.

 

안되네요???!!

 


-p 다음에 패스워드 입력시에는 띄어쓰기를 하지 않고 바로 입력을 해야되는거였습니다.

 

따라서, 정답은...

 

mysql -h {호스트} -u {유저} -p{패스워드} -e {쿼리} 라는거죠.

 

다른건 띄어쓰면서 왜 패스워드는 붙여쓰는지-_-.. 암튼 해결!

반응형
,
반응형

현재 사용하고 있는 버전이 Mysql 5.5버전에 innoDB를 사용하는 테이블에서 like 쿼리를 날리니, 

full text 검색이 지원이 되지 않아, 쿼리가 몇초씩 걸리더군요.

 

5.6부터는 지원을 한다고는 하는데, 불안정할 것 같아서 이번 기회에 Sphinx라는 검색엔진을 붙여보기로 했습니다.

 

 

1. 설치

 

http://sphinxsearch.com/downloads/release/ 로 이동해서, 본인 OS 버전에 맞는 것을 받아줍니다.

(저는 Cent OS 5.X버전을 기준으로 설명하겠습니다.)

 

다운받기가 귀찮으신 분은 wget을 이용해서 바로 받아주시면 되겠습니다.

wget http://sphinxsearch.com/files/sphinx-2.0.5-1.rhel5.x86_64.rpm  (2.0.5버전 rpm) 

이렇게 하면, 위 명령어를 친 경로에 파일이 받아집니다.  

 

rpm을 설치해줍니다. 

[rpm옵션]

설치 옵션: -i 또는 -U   (install, upgrade)
제거 옵션: -e             (erase)
질의 옵션: -q             (query)
기타: -v              (정보 표시)
       -h              (진행상태 표시)
       --force        (강제설치)
       --nodeps     (의존성 무시)

 

$ rpm -Uvh sphinx-2.0.5-1.rhel5.x86_64.rpm 

 

이렇게 하면 설치완료!

 

 

2. Sphinx.conf 설정

 

설치된 폴더로 이동해보시면 Sphinx.conf 라는 설정파일이 있습니다. (저는 /etc/sphinx/ 라는 경로에 설치되더군요.)

설정하기 전에 주의하실 점은, 사용하고 계신 mysql의 charset을 아래 설정과 동일하게 해주어야 한다는 점입니다.

전 UTF-8을 기준으로 설명하도록 하겠습니다. 

 

열어보면 아래와 같은 구조로 되어 있습니다.

자세한 내용은 주석 참조

 

#
# Minimal Sphinx configuration sample (clean, simple, functional)
#
source src1
{
        type                      = mysql
        sql_host                = {DB호스트}
       sql_user                = {ID}
       sql_pass               = {PASSWORD}
       sql_db                   = {DB}
       sql_port                 = {PORT}  # optional, default is 3306
        sql_query_pre         = SET NAMES UTF8                  # 쿼리 실행 전에 처리되는 구문
        sql_query_pre         = SET CHARACTER SET UTF8    # 쿼리 실행 전에 처리되는 구문
        # 결과 값을 가져올 쿼리 (항상 아래 sql_attr_xxxx 들과 매칭을 시켜주어야 정상적으로 인덱싱 됩니다.)
        sql_query               = SELECT test_id, test_value, UNIX_TIMESTAMP(test_dt) AS test_dt FROM test_table 
        sql_attr_timestamp   = test_dt      # 결과 값 중 timestamp 형태를 가진 컬럼에 대해 명시
        sql_attr_uint            = test_id      # 결과 값 중 uint 형을 가진 컬럼에 대해 명시
        # string만 sql_field_string을 사용하는 이유는 sphinx는 기본적으로 string형태를 가진 컬럼을 기준으로 인덱싱 하기 때문에
        # 굳이 추가하지 않아도 되지만, java코드에서 log 등을 확인하기 위해 추가합니다.)
        sql_field_string        = test_value # 결과 값 중 string 형을 가진 컬럼에 대해 명시       
        # $id는 sphinx내에서 인덱싱한 값들에 대한 고유값으로, 테이블 내에서 sequence id로 사용하는 컬럼을 매칭시켜 줍니다.)
        sql_query_info          = SELECT * \
                                  FROM test_table \
                                  WHERE test_id=$id
}

index test_idx
{
        source                 = src1
        path                     = /var/data/rt         # 인덱싱 될 데이터들을 저장할 경로
        docinfo                 = extern
        # 한글 처리를 위해 utf-8로 해주고, charset_table 추가 (공식홈 참조)
        charset_type          = utf-8
       charset_table         = 0..9, A..Z->a..z, _, a..z, U+AC00..U+D7A3,\
                                      U+1100..U+1159, U+1161..U+11A2, U+11A8..U+11F9
        min_word_len         = 1      # 검색 시 단어로 취급할 문자의 수 (1은 한 글자도 단어로 취급한다는 의미)
        min_prefix_len         = 0     
        min_infix_len           = 1
}

indexer
{
        mem_limit               = 256M          # indexer가 사용할 메모리 최대치(기본값)
}

searchd
{
        compat_sphinxql_magics  = 0        # 추가하지 않으면 에러가 발생하는 경우가 있으므로, 그냥 추가
                                                    # 이건 거의 정보가 없어서, 삽질할 가능성이 높으므로, 그냥 추가합니다.
        listen                    = 9312
        listen                    = 9306:mysql41
        log                       = /var/log/sphinx/searchd.log      # 인덱싱 된 결과 로그가 추가될 경로
        query_log              = /var/log/sphinx/query.log          # 인덱싱 처리 시 위에 명시된 쿼리에 대한 로그가 추가될 경로
        read_timeout          = 5
        max_children         = 30
        pid_file                  = /var/run/sphinx/searchd.pid
        max_matches         = 1000
}


여기까지 세팅 완료!

 

 

 

3. 실행 (설정 파일이 바뀌거나 데이터가 바뀔 경우 매번 해줘야 하는 작업)

 

   1) INDEXING (설정파일에 명시된 모든 index를 indexing한다. 옵션을 다르게 주면, 개별 indexing도 가능하지만, 귀찮으므로 all로 ㄱ)

     : indexer --all {설정파일 : sphinx.conf} 

 

   2) SEARCHD(데몬 띄우기)

     : searchd --config {설정파일}

 

   3) INDEX를 이용한 쿼리 실행 확인 

      (여기서 한글로 테스트하는 건 별로 의미가 없으니, 대충 영어로 테스트하고 넘어갑시다. like검색처럼 못찾는다면,

       설정이 잘못된거니까 설정 파일 수정 후 데몬을 죽이고, 다시 indexing한 후 테스트 합니다.)

     : search {keyword}

 

      ※ pid를 이용하지 않고 sphinx 데몬을 죽이는 법 : searchd --stop

         (여러개가 뜨면 느려질 수 있으므로, 다시 indexing할 때는 왠만하면 실행해줍니다.)

 

 

4. JAVA 코드를 이용한 연동

 

http://sphinxsearch.com/downloads/release/ 로 다시 이동해서, windows OS용을 하나 받아서, 압축을 풀어봅니다.

압축을 푼 내용 중에 보면 api폴더가 있는데, 그 안에 java를 이용해서 연동할 수 있는 example코드가 있습니다.

 

 

test.java를 열어보면, 테스트를 할 수 있도록 연동코드가 들어가 있는데,

like검색처럼 하기 위해서는 MATCH MODE를 바꿔주어야 합니다.

기본적으로 SPH_MATCH_ALL 이라고 되어 있는데, SPH_MATCH_ANY 로 바꿔주어야 like검색이 됩니다.

 

나머지 부분은, 다른 코드들을 참조하셔서 filtering이라던지 sorting이라던지 mysql과 동일하게 이용하실 수 있습니다.

 

filtering이라던지, sorting같은 경우 java코드에서 처리하는 것이 indexing 설정파일에서 하는 것보다 성능이 좋더군요.

 

연동코드까지 마친 후에는, 위에 3번의 indexing작업을 crontab 등을 이용해서 주기적으로 업데이트 해주는게 중요합니다.

반응형
,
반응형

로컬 PC에 가상환경 구축에 대해서 간단히 정리합니다.

 

1. VirtualBox 다운로드 및 설치 

https://www.virtualbox.org/wiki/Downloads

 

2. CentOS 6.5 Netinstall ISO파일 다운로드

http://ftp.daum.net/centos/6.5/isos/x86_64/CentOS-6.5-x86_64-netinstall.iso 

 

3. VirtualBox 실행 후 가상머신 추가 및 설치 진행 

 - 종류 : Linux

 - 버전 : Red Hat (64 bit) // 64bit로 명시적으로 적어주지 않으면, 설치 시작 화면 진입 전에 cpu관련 오류가 발생함.

 - 64bit로 되어있는 경우에도 에러가 발생하는 경우 CMOS Setup에 들어가서 CPU Vitualization 관련 옵션을 On해준다.

 - 설치 진행 도중, HDD, CD/DVD 등 CentOS이미지 경로를 고르는게 나오는데, HTTP를 선택하여 아래 URL을 입력해준다.

http://ftp.neowiz.com/centos/6.5/os/x86_64/

 - 모드를 고르라고 하면, 가급적 SoftWare Development 어쩌고로 설치하는 것이 정신건강에 좋다. (가장 아래에 있음)

 

4. 설치 후, 거의 필수적으로 실행해야 하는 명령어

 - yum install -y make kernel-devel gcc perl

 - yum groupinstall "Development Tools"

 

5. 게스트 확장 설치

 - 일단 떠있는 가상머신을 완전히 끈다.

 - 가상머신에서 우측 마우스를 눌러 설정으로 들어간다.

 - 저장소 탭을 선택, 컨트롤러 IDE에서 CD/DVD 장치 추가를 해준다.

 - VirtualBox경로(경로를 기본으로 설치했다면 ProgramFiles/Oracle/VirtualBox)에 있는 VBoxGuestAdditions.iso를 마운트 해준다.

 - 가상머신 시작

 - /media/마운트된 폴더/VBoxLinuxAdditions.run 실행

 

 

중간중간 뭔가 삽질을 더 했던거 같은데... 인상깊게 생각나는것은 이정도.. ㅠㅠ

다음에 설치할 기회가 되어서, 문제를 새롭게 발견하면 여기다가 추가해야겠다. 

반응형
,
반응형

SELinux를 꺼주면 된다.. 

반응형
,
반응형