[Mavericks] ipfw, pf를 이용하여 톰켓 포트포워딩 안될때 해결법

Published on: 2014. 4. 9. 15:12 by louis.dev

맥에서 이클립스를 사용하여 웹개발을 할때 기본적으로는 80포트를 사용할 수 없습니다. 그래서 톰켓으로 띄운 웹페이지에 접속할때 항상 8080같은 포트번호를 입력해 주어야 하는데, 매번 작업할때마다 포트번호를 적어주는게 너무 불편해서 톰켓에서 80포트를 사용하는 방법을 찾아 보았습니다.


인터넷에 찾아보면 ipfw, pf를 이용해서 포트포워딩을 하는 방법이 있는데, 이 방법으로 설정했을때 포트포워딩이 설정이 안되는 경우는 아래처럼 추가 설정을 해주면 됩니다.


재부팅시 자동 시작하기

$ sudo vi /Library/LaunchDaemons/enable-fw.plist

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd >

<plist version="1.0">

<dict>

        <key>Label</key>

        <string>enable-fw</string>

        <key>Program</key>

<string>/usr/sbin/sysctl</string>

<key>ProgramArguments</key>

        <array>

<string>/usr/sbin/sysctl</string>

<string>-w</string>

<string>net.inet.ip.fw.enable=1</string>

</array>

        <key>RunAtLoad</key>

        <true/>

</dict>

</plist>

$ sudo launchctl load -w /Library/LaunchDaemons/enable-fw.plist

이렇게 하면 재부팅 시에도 포트포워딩이 정상적으로 동작을 하게 됩니다.








[Mac] Mountain Lion에 webdav 설정하기

Published on: 2013. 11. 14. 16:37 by louis.dev
맥미니에 저장되어있는 파일을 공유하는 방법은 여러가지가 있으나 그중에 http를 통해서 파일을 다운로드 하거나, 넷드라이브로 인식하여 쉽게 읽고 쓰기가 가능하도록 하는 기능인 webdav 설정방법에 대해서 알아보도록 하겠습니다. webdav의 설정은 크게
  1. 보안이 적용되지 않은 가장 단순한 형태의 webdav
  2. 보안이 적용된 webdav
로 나눌수 있는데, 첫번째 방식인 경우 설정하기는 쉽지만 패킷캡쳐에 따른 내용분석이 가능하다는 점이 단점이고, 두번째 방법은 강력한 보안을 제공하지만 설정하기 까다롭다는 단점이 있습니다. 이번 포스팅에서는 두가지 모두를 세팅하는 방법을 다루어 보도록 하겠습니다.  

0. 공통작업

아파치 설정파일인 httpd.conf에 주석처리되었던 부분을 주석해제 합니다.
$ sudo vi /etc/apache2/httpd.conf

#해당부분을 주석해제
Include /private/etc/apache2/extra/httpd-dav.conf

# 저장후 쉘로 나온 뒤

## DavLock파일은 여러 사용자가 한파일을 읽고 쓰기를 동시에 하지 못하도록 관리하는 파일
$ sudo mkdir /usr/var
$ sudo chmod 777 /usr/var
$ sudo touch /usr/var/DavLock
# /usr/var 디렉토리의 소유자를 아파치의 사용자:그룹(httpd.conf 파일에 User, Group으로 명시되어 있는 사용자 그룹) 으로 설정함
# /usr/var 하위에 DavLock 파일 뿐만 아니라 다른 파일도 자동으로 생성되기 때문에 /usr/var 디렉토리의 사용자:그룹을 변경해야함
$ sudo chown -R ${apache User}:${apache Group} /usr/var

1. 보안이 적용되지 않은 가장 단순한 형태의 webdav 설정

$ sudo vi /etc/apache2/extra/httpd-dav.conf

## 아래 내용을 httpd-dav.conf에 추가

DavLockDB "/usr/var/DavLock"

# 공유하고자 하는 디렉토리 명, 접근은 http://your.domain.com/webdav 로 접근 가능
Alias /webdav "/your/directory/name"

#위의 Alias 부분의 디렉토리 위치와 동일해야 함
<Directory "/your/directory/name">
    Dav On
    Order allow,deny
    Allow from all
    AuthType Basic      #가장 기본적인 형태의 인증
    AuthName DAV      #webdav 인증 창에 나타날 메세지
    AuthUserFile /etc/apache2/mydavuser.passwd     #로그인을 허용할 사용자를 저장하고 있는 파일, 아직 생성하지 않았음
    <Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        require user ${mydavuser.passwd에 추가한 사용자 명}
    </Limit>
    Options FollowSymLinks Indexes
</Directory>

# 기본적으로 설정된 부분
BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully

# httpd-dav.conf 파일을 저장하고 나옴

# webdav에 접근 가능한 사용자 리스트를 저장할 파일로 만든다.
# 아래에서 입력한 사용자명은 위의 httpd-dav.conf 에 require user 뒷부분에 들어갈 유저명이다
# -c 옵션은 파일을 새로 생성하는 옵션이다. 만약 존재하는 파일에 사용자를 추가하려면 이 -c 옵션을 제거 하고 하면 사용자를 추가할수 있다.
$ sudo htpasswd -c /etc/apache2/mydavuser.passwd ${로그인할 사용자 명}
New password:
Re-type new password:
Adding password for user ${로그인할 사용자 명}

## 아파치 설정이 이상없는지 확인한 뒤 아파치를 재시작 한다.
$ sudo apachectl -t
#위의 명령이 문제 없으면
$ sudo apachectl graceful
이제 브라우저로 http://your.ipORdomain.com/webdav로 접근하여 로그인이 되는지를 확인합니다. 위의 방법은 설정이 간단하다는 장점이 있지만 Windows 시스템에서 보안설정이 되어있지 않은 방식으로는 바로 네트워크 드라이브로 설정할 수가 없습니다. 따라서 위와 같이 설정한다음 windows에서도 네트워크 드라이브로 잡으려면 이 포스팅을 확인하시면 됩니다.  

2. 보안이 적용된 webdav 설정

ssl을 적용한 webdav는 여기에서 확인 할 수 있습니다

[Mac]mod_jk를 이용하여 apache와 tomcat 연결하기

Published on: 2013. 11. 14. 16:37 by louis.dev
tomcat을 실행시키기 위해서는 JRE(Java Runtime Environment)가 필요합니다. JRE를 설치하는 방법은 Oracle에서 JRE를 다운받아 설치하는 방법도 있지만 맥에서는 쉽게 다운로드 받아 설치할수 있습니다.

1. JRE설치

먼저 터미널을 실행시킨 후
$ java -version
을 실행시켰을 경우 현재 JRE가 설치되어 있다면
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)
위와 같이 현재 맥에 설치된 JRE의 버전이 출력될것입니다. 만약 자바가 설치되어 있지 않으면 이렇게 얼럿창이 뜨면서 JRE를 설치하도록 유도하고 있습니다. 여기서 설치를 누르면 손쉽게 JRE를 설치할 수 있습니다.  

2. Tomcat 설치

Tomcat은 따로 설치할 필요가 없습니다. 여기에서 tomcat의 압축파일을 다운로드 받은 후 적당한 곳에 압축을 풀어 놓음으로서 설치는 끝나게 됩니다. 혹은 아래 명령어를 터미널에 입력함으로서 쉽게 다운로드 받을 수 있습니다.
$ curl -O http://mirror.apache-kr.org/tomcat/tomcat-7/v7.0.42/bin/apache-tomcat-7.0.42.tar.gz
$ tar xzvf apache-tomcat-7.0.42.tar.gz
$ mv apache-tomcat-7.0.42 ${적당한디렉토리}
#톰켓 실행방법
$ 톰켓설치디렉토리/bin/startup.sh
#톰켓 종료방법
$ 톰켓설치디렉토리/bin/shutdown.sh

3. JK Connector 컴파일 설치

톰켓 홈페이지에서 JK Connector Source 압축파일을 다운로드 하거나 여기를 눌러 직접 다운로드 하시면 됩니다.
$  curl -O http://apache.mirror.cdnetworks.com//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
$ tar zxf tomcat-connectors-1.2.37-src.tar.gz
$ cd ./tomcat-connectors-1.2.37-src/native
$  ./configure --with-apxs=/usr/sbin/apxs

#설치시 
# checking for gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain/usr/bin/cc
# checking for C compiler default output file name... configure: error: C compiler cannot create executables
# See `config.log' for more details.
# 라는 에러가 발생하면 아래의 명령어를 입력합니다.
$ sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.8.xctoolchain

$ make
$ sudo make install
위와 같은 명령어로 컴파일을 완료하면 /usr/libexec/apache2/mod_jk.so가 생성됩니다. 생성된 모듈을 활성화 하고 설정을 합니다.
$ sudo vi /etc/apache2/httpd.conf

# httpd.conf에 아래내용 추가
LoadModule jk_module libexec/apache2/mod_jk.so

<IfModule jk_module>
    JkWorkersFile /etc/apache2/workers.properties
    JkLogFile     ${로그파일위치}/mod_jk.log
    JkLogLevel    info
    JkMountFile   /etc/apache2/uriworkermap.properties
</IfModule>

$ sudo vi /etc/apache2/workers.properties

worker.list=worker1
worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

$ sudo vi /etc/apache2/uriworkermap.properties
/*.jsp=worker1
/*.krespo=worker1

#만약 context로 설정을 하고자 한다면 /contextName/*=worker1 으로 설정합니다.

$ sudo apachectl -t   #설정파일 테스트
$ sudo apachectl graceful #graceful로 아파치 재시작

4. tomcat 설정 및 테스트용 context 설정

$ vi ${톰켓 홈 디렉토리}/conf/server.xml
# &lt;Connector&gt; 태그의 속성으로 URIEncoding=&quot;UTF-8&quot;을 추가합니다.
# 이렇게 설정해야지 parameter로 한글을 전송할때 파라미터가 깨지지 않습니다.
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"/>

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

$ vi ${톰켓 홈 디렉토리}/conf/Catalina/localhost/ROOT.xml

# path = localhost:8080/test
# docBase = 아파치의 documentRoot
<Context path="/" docBase="/data/service/tomcat" reloadable="false" privileged="true" antiResourceLocking="false" antiJARLocking="false"  allowLinking="true">
</Context>

# 저장후 서버 재시작
이상으로 mod_jk 설정을 완료하였습니다.

[맥미니활용] Sony NEX-5R에서 무선으로 맥미니에 업로드 하기기

Published on: 2013. 11. 14. 16:36 by louis.dev
요즘은 eye-fi같은 제품을 이용해서 디지털카메라의 사진을 무선으로 이동시킬수가 있는데 이런 제품은 일반 SD카드보다 가격이 두세배는 더 비싼게 단점입니다. 그런데 소니에서 나온 NEX-5R 제품은 기본적으로 WIFI기능을 포함하고 있기 때문에 eye-fi같은 제품을 사용하지 않아도 무선으로 컴퓨터와 연결하여 사진을 이동시킬수 있습니다. 가장 먼저 해야할 일은 무선으로 연결을 할수있도록 해당 어플리케이션을 설치를 해야 합니다. 어플리케이션 이름은 Wireless Auto Import 입니다. 이 어플리케이션은 한국 소니 홈페이지에서는 다운로드 받을 수 없음으로 미국 소니 홈페이지에서 다운로드 받거나 혹은 여기를 눌러 직접 다운로드 받을수 있습니다. 설치방법은 간단합니다. 다운로드 받은 dmg파일을 더블클릭하면 패키지 안에 pkg파일이 있는데데 이파일을 더블클릭하여 하라는 데로 설치하면 됩니다. 설치를 완료하면 런치패트에 "무선 자동 가져오기"가 생기는데 이 아이콘을 선택하여 앱을 실행시킵니다. 가장 처음 나오는 화면에서 설정을 눌러 초기 연결설정을 진행합니다. 그러면 친절하게 맥과 카메라를 USB로 연결하라는 메세지가 나옵니다. 그러면 실제로 카메라를 맥에 연결하고 승인을 누릅니다. 맥과 카메라를 무선으로 연결하려면 최초 한번은 맥과 카메라를 USB로 연결을 해야 합니다. 이런 에러가 발생하면 카메라에 전원을 켰는지 확인하고 키지 않았다면 카메라를 켜면 됩니다. 그래도 연결이 안된다면 맥을 재부팅 해줘야 합니다.. 그리고 승인을 누르면 이런 화면이 나오게 되는데 이렇게 되면 설정이 완료된 겁니다. 설정을 완료하면 왼쪽의 "저장위치"를 선택하여 사진이 기본적으로 저장할 위치를 선택합니다. 저는 기본 위치인 Pictures로 지정하겠습니다. 설정을 모두 마친 후 승인을 눌러 무선 자동 가져오기 어플리케이션을 종료시키고 USB로 연결된 케이블을 분리합니다. 설정은 모두 끝났습니다. 이제부터는 실제로 카메라에서 무선으로 사진을 이동해보도록 해보겠습니다. 카메라의 메뉴버튼을 누르면 하단왼쪽에 재생이라는 아이콘이 있는데 이 아이콘을 선택합니다. 사진에서보듯이 컴퓨터로 보내기 메뉴를 선택을 합니다. 그러면 화면처럼 맥에 연결하는 화면이 나오고 실제로 맥에 연결되며 사진을 이동하게 합니다. 물론 위의 작업을 하기 전에 카메라에 와이파이 설정을 해야 합니다. 와이파이 설정은 이 포스팅에서 따로 적지는 않겠습니다. 이후에 저는 카메라에서 이미지를 다운로드 받는 경로를 다음 클라우드의 싱크폴더로 설정을 해두어 카메라에서 맥으로 이미지가 업로드가 되면 자동으로 다음 클라우드로 업로드가 되도록 설정했습니다. 이렇게 되면 따로 외장하드에 백업을 해두지 않아도 클라우드로 자동 백업되서 엄청 편리하더라구요. 이상으로 소니의 NEX-5R을 맥미니와 무선으로 연결하여 이미지 전송을 해보았습니다. 혹시 몰랐던 분들께 도움이 되었으면 좋겠습니다~^^

[Mac] 맥미니에 wordpress 설치하기(3) – MySQL 설치하기

Published on: 2013. 11. 14. 16:36 by louis.dev
[Mac] 맥미니에  wordpress 설치하기(1) - Apache 설치하기 

[Mac] 맥미니에  wordpress 설치하기(2) - PHP 설치하기


이번에는 MySQL DB를 설치하도록 하겠습니다. 여기에서 Mac OS X ver. 10.7 (x86, 64-bit), DMG Archive를 다운로드 합니다. 이전의 아파치나 php설치는 컴파일 설치를 했기 때문에 터미널에서 작업을 하였지만 mysql은 다운로드한 MDG archive를 다운로드 하는 것만으로 설치가 진행되기 때문에 따로 포스팅을 하지 않겠습니다. 다운받은 dmg 파일을 열어보면 MySQLStartupItem.pkg 파일을 확인할 수 있는데, 이파일은 맥이 시작되면 mysql이 자동으로 로드되게 해주는 패키지 입니다. 필요에 따라 설치하면 될것 같습니다. 기본적으로 설치되는 위치는 /usr/local/mysql 입니다. mysql 서버를 수동으로 시작하려면 $ sudo /usr/local/mysql/bin/mysqld_safe 로 실행합니다. 초기에는 mysql의 root 비밀번호가 설정되어 있지 않음으로 mysql  서버에 비밀번호 없이 바로 접속할수 있습니다. 이렇게 root권한으로 비밀번호 없이 mysql 서버에 접근한 뒤에 초기 mysql 초기 작업을 진행합니다.

$/usr/local/mysql/bin/mysql -u root

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.13 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=password('루트 비밀번호') where user = 'root';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

//초기에는 /usr/local/mysql/bin/mysql -u root 명령어로 패스워드 없이 접근가능했지만 이제는 불가능해 졌습니다. 이후에 로그인은 아래와 같이 하면 됩니다.
$ /usr/local/mysql/bin/mysql -u root -p
위처럼 루트 비밀번호를 설정하고, wordpress에서 사용할 mysql 사용자를 생성해야 합니다.
$ /usr/local/mysql/bin/mysql -u root -p

enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.13 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE 블로그db명 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
위의 쿼리중 눈여겨 보아야 할 부분은
GRANT ALL PRIVILEGES ON *.* TO '아이디'@'%' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
부분입니다. 부분별로 설명을 하자면 *.* :  DB명.테이블명 입니다.  MySQL서버에는 여러개의 DB를 생성할수 있고, 그 DB안에는 여러개의 Table을 생성할 수 있습니다. 지금 설정한데로 *.*는 모든 DB의 모든 테이블에 접근을 허용하겠다는 뜻입니다. '아이디'@'%' : 아이디부분에 사용하고 싶은 아이디를 넣으면 됩니다. 해당아이디로 유저가 생성됩니다. 뒤의 %는 접속 허용하는 아이피를 나타냅니다. %를 나타내면 해당 아이디로 IP제한 없이 접속가능하단 뜻이고 만약 '아이디'@'111.222.333.444'로 지정을 한다면 111.222.333.444 아이피의 접근만 허용하겠다는 뜻입니다. 이상으로 MySQL설치를 마치도록 하겠습니다.