Linux에서는 below 1024(1024 아래) 밑의 포트들을 root가 아닌 권한인 유저들이 여는 것을 허용하지 않는다


이것 땜에 좀 문제가 있었는데, 2가지 해결 방법이 있다.


1. iptables에서 port fowarding을 해준다.

reroute를 통해서 8080을 80으로 포워딩해주는 방법이 있다.

(root 권한에서 실행)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080


2. authbind를 설치한다.

 authbind는 debian 패키지에 있는 1024 이하의 포트들을 root가 아닌 유저들이 열 수 있게 하는 것. 사실 나도 1번이 하기 싫어서 찾아보다가 이번에 처음으로 알게 되었다.


원래대로 서비스에 설치해서 쓰는거면 /etc/init.d/tomcat* (해당버전)에 들어가서 authbind 를 YES인가 OK로 설정하면 되는데, 나는 서비스에 설치해서 안쓰니까..험난하다


우선 authbind를 설치한 다음에.. 80포트를 접근 가능하게 바꿔준다. 백형 블로그 참고했다

http://www.2ality.com/2010/07/running-tomcat-on-port-80-in-user.html


ㄱ. authbind를 설치

ㄴ. root 로 authbind 폴더에 쓸 포트(80)을 chown으로 쓸 계정에 줌. 이 백형은 glassfish를 쓰지만 난 촌스럽게 톰캣 쓰므로 톰캣으로 간다

* ipv6은 지원안한다는데, 음.. 아직 신경쓰지 않기로 했다. nginx경우에는 신경을 좀만 쓰면 되지만, 이 놈은 아닌 듯. 그렇다고 톰캣을 root로 올릴 순 없잖음...

ㄷ. setenv.sh 에 CATALINA_OPTS에 IP4stack   쓴다고 설정

ㄹ. startup.sh에 authbind를 통해 구동하게 강제로 바꿈


되나 확인해보면 됨

Posted by TY
,

개발환경

HW: Apple Macbook Pro 13" early 2011 (i7@2.7 / 4g / intel graphic)

OS: Mac OSX 10.8.2 (mountain lion)

IDE: Eclipse Juno

JDK: 1.6

 


이미지 몇 백장을 리사이즈하고 앞으로 이 일이 반복될 것 같은 끔찍한 느낌이 들어서 걍 만듬..


ImageIcon 으로 리사이징된 이미지를 리턴해줌... 소스코드는 메인이랑 함수 딸랑 하나 있는 클래스랑..  끝임.


원래 할라고 했던 것들은..


1. 처음에 구동하면 최대 width * height 적어줌 (width나 height중 원본 사이즈와 비교해서 원본대비 더 큰 것에 맞춰서 비율을 맞춰서 줄여줌..)

2. 다이얼로그 박스가 떠서 디렉토리를 선택

3. 프로그레스 바와 로그 텍스트가 나와서 얼마나 됐고 무슨 이미지들을 바꿨는지 찍어줌 


근데 귀찮아서

width*height는 그냥 함수 인자로 넣고 / 경로도 걍 소스에 string에 대입하고 / 어떤 파일 리사이징 됫는지 콘솔창에 찍힘 


근데 다시 고칠라나? 귀찮을듯.. 나중에 심심하면 할듯 --;


자바로 짠 이유는 노트북에 obj-c랑 java랑 python이 깔려있는데 마침 eclipse를 켜놨었음..


ImageResize.java


import java.awt.Graphics2D;

import java.awt.geom.AffineTransform;

import java.awt.image.BufferedImage;

import java.io.File;


import javax.imageio.ImageIO;

import javax.swing.ImageIcon;



public class ImageResize {

public static ImageIcon resizeImage(String fileName, int maxWidth, int maxHeight){

String data = fileName;

BufferedImage src, dest;

ImageIcon icon;

try{

src = ImageIO.read(new File(data));

int width = src.getWidth();

int height = src.getHeight();

if(width > maxWidth){

float widthRatio = maxWidth/(float)width;

width = (int)(width*widthRatio);

height = (int)(height*widthRatio);

}

if(height > maxHeight){

float heightRatio = maxHeight/(float)height;

width = (int)(width*heightRatio);

height = (int)(height*heightRatio);

}

dest = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

Graphics2D g = dest.createGraphics();

AffineTransform at = AffineTransform.getScaleInstance((double) width / src.getWidth(), (double)height / src.getHeight());

g.drawRenderedImage(src, at);

icon = new ImageIcon(dest);

return icon;

}catch(Exception e){

System.out.println("This image can not be resized. Please check the path and type of file.");

        return null;

}

}

}




Main.java


import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;


import javax.imageio.ImageIO;

import javax.swing.ImageIcon;



public class Main {


/**

* @param args

* @throws IOException 

*/

public static void main(String[] args) throws IOException {

String path = "/Users/TY/Dropbox/사진/";

File dirFile = new File(path);

File [] fileList = dirFile.listFiles();

for(File t:fileList){

String tmpPath = t.getParent();

String tmpFileName = t.getName();

int extPosition = tmpFileName.indexOf("jpg");

if(extPosition != -1){

String fullPath = tmpPath+"/"+tmpFileName;

ImageIcon ic = ImageResize.resizeImage(fullPath, 1024, 1024);

Image i = ic.getImage();

BufferedImage bi = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB);

Graphics2D g2 = bi.createGraphics();

g2.drawImage(i, 0, 0, null);

g2.dispose();

String newFileName = tmpFileName.replaceFirst(".jpg", "_resize.jpg");

String newPath = tmpPath+"/"+newFileName;

ImageIO.write(bi, "jpg", new File(newPath));

System.out.println(newPath);

}

}

System.out.println("FIN");

}

}





Posted by TY
,
엄청 많은데 그 때 급급해서 다 못 적어 놓은 것 같다.... 아쉽다


iBatis SqlMap 에서 DOCTYPE root 'null' 발생시..

  • 위에 주석같이 생긴걸 빼먹거나 지우는 경우가 있는 것 같다. 하지만 여기엔 그 주석을 꼭 써주어야 한다. DOCTYPE 을 정의해주기 때문...
  • sqlMapConfig 와 sqlMap 파일 각각 다르기 때문에 따로 적어 줄 것
  • http://www.bywoong.com/?p=1816

Error parsing XPath '/sqlMap/update'. Cause: java.util.NoSuchElementException

  • 조건에 #을 빠뜨린 것
  • 각각의 값에 #이 붙어있는지

Error creating bean with name '-----': Injection of resource fields failed; ....

  • 톰캣을 올리다 에러가 난다
  • Service Interface 를 Implements 한 클래스에 @Service 가 붙어있는지 확인하자


'study > java' 카테고리의 다른 글

java.net.BindException: permission denied: 80  (0) 2013.09.22
간단한 jpg(jpeg) 리사이징하는 java 클래스  (0) 2013.03.12
Posted by TY
,