Monthly Archives: October 2013

Intellij 유용한 단축키 목록

Ctrl Shift I : 클래스 안의 소스 ㅇ출력

Ctrl J : Insert Live Template

Ctrl W : 캐럿이 있는 위치르 ㄹ중심으로 블록 설정

Alt HomeKey : 현재 수정중인 파일의 위치 표시

Ctrl Shift R 리소스 파일 찾기

Ctrl Alt o : 임포트 정리

Ctrl Alt l : 코드포매팅

우분투 12.04 삼바 서버 설정:Ubuntu 12.04 Samba Server Setting

sudo apt-get install samba
간단히 sudo로 설치.

켄트오스는여물로 설치가될거고
다른리눅스 쓰는 사람들은 다 전문가니까
그리고 설치하는건 별로 어려울게 없으니 패스

[datashare]
   comment = 공유 디렉토리다.
   read only = no
   writeable = yes
   browseable = yes
   locking = no
   path = /home/shareaccount
   guest ok = no
   valid user = root shareaccount

 

[공유디렉토리명]
   comment = 공유 디렉토리다.
   read only = no읽기만하게할까
   writeable = yes쓰기가능?(왠지 위랑 중복같지만 그냥 한다)
   browseable = yes 다 알지
   locking = no파일에 락(쓰기방지)을 걸수있느냐... 여러명이 쓰는 경우 필요할수도있다
   path = /home/shareaccount 리눅스 시스템 내부의 경로
   guest ok = no
   valid user = root shareaccount

 

세부설정

workgroup = WORKGROUP
기본설정이 이건데... 바꿔도된다.
; interfaces = 127.0.0.0/8 eth0
이렇게 돼있는데 세미는 기본셋팅이라는걸 뜻하고 샤프는 그냥 주석
기본셋팅이 이러니까 네트워크가 다르게 잡혀있으면...(버추어박스를 쓴다거나 아니면 돈이 많아서 비싼서버를 쓴다거나) 자신의 환경에 맞게 수정
비싼서버 쓰는사람은 고수니까 비싼거 쓸거니까 알아서 하고...
버추어박스의 경우에는 ifconfig해보면 eth0을 기본으로 쓰고, eth1를 네부네트워크 통합용으로 설정해놨을거다. (이 부분은 자동은 아니니까.. 수동으로 해야된다) 게스트확장에 공유폴더기능이 있는데 굳이 삼바를 써야할지 의문이네... 필요없겠다. 어려운 부분은 아니니

그밖에는 쭉 훑어봤는데 별로 손댈게 없어보인다.

 

사용자 비밀번호 설정

sudo adduser userid(삼바에서 사용할 우분투 계정을 만든다)
sudo nano /etc/sudoers(수도추가)
root All=(ALL)ALL
[userid] ALL=(ALL)ALL(이거 추가)
sudo smbpasswd -a userid (계정을 삼바에 셋팅)
sudo nano /etc/samba/smb.conf(설정파일 에디트)

디렉토리 권한은 707로한다

윈도우에서 – Tom새끼 – 네트워크 드라이브 연결(상단메뉴에 있다) – \\서버주소\아까입력한폴더경로

위에서 설정한 아디비번쳐주면 셋

sudo service smbd restart

에스엠비디다. 에스엠디비로 치는 오타가 종종 발생….의외로 자주 생기는 실수

no transaction is in progress – jpa셋팅중에 만난 알수없는 메세지.

javax.persistence.TransactionRequiredException: no transaction is in progress

웹셋팅을 마치고 나니 이런 메세지가 뜨면서 addPost가 동작하지 않는다.

그래서 junit을 통해 테스트코드를 만드니까 돌아간다.

여기서 @transactional태그와 관련된 문제라는 판단.

한마디로 Junit에서는 @Transactional태그가 먹히고 Web에서는 먹히지 않는다.

Jpa의 셋팅이 DiapatcherServlet의 servlet-context에서 재 로딩되면서 발생하는 문제가 아닐까 싶었다.

 

해결방안으로 생각했던 것이… 모든 셋팅을 root로 옮기는것.

그러면 로딩할때 한꺼번에 해서 이런 문제가 안 생기지 않을까 싶었다

근데 귀찮아서 나랑 비슷한 상황이 있나 한번 더 검색해보니…

http://stackoverflow.com/questions/10633240/spring-jpa-transactions-works-only-in-junit-test-but-not-in-application/10869397#10869397

exactly same problem이 나왔다.

servlet에 <tx:annotation-driven/>을 추가해주랜다.

잘된다.

설정 깔끔하게 하려고 필요없는거 이것저것 제외하고 하다보면 이런 문제를 더 많이 겪는 것 같다. 옛날에 잘 할줄모를때는 이것저것 지저분하게 막 갖다껴놔가지고 그냥 대충 막 돌아갔었는데

Ubuntu14.04우분투 미러 리포지터리 만들기

우분투 버전 12.04, 14.04 테스트

필요대상 :
우분투 서버를 몇 개 이상 이용하는 사람

설치순서 :
—————-우분투 미러 생성 패키지 설치——————–
$ sudo apt-get install apt-mirror
설정파일 편집
/etc/apt/mirror.list

14.04에서 설정파일은 다음과 같다

############# config ##################
#
# set base_path    /var/spool/apt-mirror
#
# set mirror_path  $base_path/mirror
# set skel_path    $base_path/skel
# set var_path     $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch  <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads     20
set _tilde 0
#
############# end config ##############

deb http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse
#deb http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse

deb-src http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu trusty-proposed main restricted universe multiverse
#deb-src http://archive.ubuntu.com/ubuntu trusty-backports main restricted universe multiverse

clean http://archive.ubuntu.com/ubuntu

– 리포지터리를 추가하려면 목록을 추가하면 된다
– basepath 등 윗쪽 설정을 변경하면 파일 저장경로를 변경할 수 있다. 파티션을 나눠놔서 용량이 부족할 수 있다변 필히 설정해줘야 할 부분. 디렉토리를 변경했다면 mkdir을 해준다. 자동으로 안되는 모양이다.
– 32/64 리포지터리를 두개다 저장하지 않고 한쪽만 하려면 이것을 명시해줄 수 있다. 그런데 이거 64비트로 깔고 써도 두개가 같이 깔리는게 있던데 호환성 문제가 발생 할 수 있지 않을까 싶다. (이런모양 deb-amd64 http://archive.ubuntu.com/ubun……….)

기본설정된거 쓰지말고 서버에서 사용되고있는 리포지터리 목록을 갖다붙이자
용량이 부족하면 src부분은 다 빼도된다? 되지 않을까?

 

미러링 시작!
$ sudo nano /etc/apt/mirror.list
명령을 입력하면 아래와 같은 모양으로 업데이트가 시작된다. 시간이 꽤 걸리는편이니 기다리지 말자

$ sudo apt-mirror /etc/apt/mirror.list
Downloading 162 index files using 20 threads...
Begin time: Thu Jun 12 10:21:40 2014
[20]... [19]... [18]... [17]... [16]... [15]... [14]... [13]... [12]... [11]... [10]... [9]... [8]... [7]... [6]... [5]...

설정을 잘못하고 실행시킨 경우 다음과 같은 에러메세지를 보게 된다(고한다)
apt-mirror is already running, exiting at /usr/bin/apt-mirror line 187.
이런경우 설정파일을 고치고 다시 실행을 해도 실행이 되지 않으니 /spare/var/apt-mirror.lock이 파일을 먼저 지워줘야된다.

—————-/우분투 미러 생성 패키지 설치——————–
—————-미러 자동업데이트——————–
주의! 테스트서버가 아닌 실제운영 서버라면, 그중에서도 우분투 공식리포지터리가 아닌 개발자 리포지터리에서 패키지를 설치했다면 버전을 고정시킬 필요가 있다. 이런경우에는 미러를 운영용/테스트용으로 두개를 돌려서 테스트용에서 안정성이 확보된 이후에 사용하는게 좋다. 꼭 수동으로 할 필요는 없지만 안전장치는 필요하다. 운영서버의 10%만 최신업데이트를 해서 뻑이나면 그부분만 갈아엎는다던가 추가조치는 알아서~

위에 설정한 mirror.list를 기반으로 미러 업데이트 크론 설정
실행을 시킬 때 $ apt-mirror 만 치면 기본적으로 mirror.list를 쓴다

$ sudo nano /etc/cron.d/apt-mirror
-----다음내용 추가-----
#
# Regular cron jobs for the apt-mirror package
#
# 0 4     * * *   apt-mirror      /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
----------------------------
$ sudo chmod 755 /etc/cron.d/apt-mirror

또는 /etc/cron.daily/~ 경로에 apt-mirror.sh형태로 넣어도 된다.
!#/bin/bash
apt-mirror /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log

—————-/미러 자동업데이트——————–
—————-http서비스——————–
우분투 서버에 접속해봤을 때 아파치서버로 접속이 된다면 패쓰
아님 아파치 서버 설치
sudo apt-get install apache2
이렇게 하면 간편하긴한데… 아파치 설정할 줄 알면 따로 하는게 좋다.
sudo ln -s /spare/mirror/gb.archive.ubuntu.com/ubuntu/ /var/www/ubuntu
—————-/http서비스——————–
—————-apt-get소스목록수정——————–
/etc/apt/sources.list 요 파일을 수정해주면 이제 미러서버를 통해서 업데이트를 하게 된다. 속도가 한결 빠른걸 볼 수 있다.

deb http://us.archive.ubuntu.com/ubuntu/ trusty universe
여기서 그냥 자기서버주소로 바꿔주면 된다.
deb http://localhost/ubuntu/ trusty universe
기본미러목록에 security는 없었으므로 security는 유지한다. 아니면 security도 미러링 해서 처리해도되고.. 하는사람마음.
—————-/apt-get소스목록수정——————–

참고사이트
http://www.danbishop.org/2011/03/11/create-your-own-local-mirror-of-the-ubuntu-repositories/

Hibernate 복합키 사용하기

pk여러개 달아놓고 쓰는 방법

pk 순서를 정하는건 잘 안된다.

이 부분을 수정하려면 하이버네이트 코드 커스터마이징을 하던가 해야할듯하다.

@Data
@Embeddable
public class GameId
    implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = -229826876863703005L;

	@Type(type = "org.beansugar.tools.hibernate.JodaDateTimeUserType")
//	@Column(name="GameTime", columnDefinition="CURRENT_TIMESTAMP")
	private DateTime          gameTime;
	private String            username;
	private String            gameCode;
}

@Data
@Entity
@Table(name = "GAME_INFO")
public class GameInfo
    implements Serializable {

	/**
     * 
     */
	private static final long serialVersionUID = -8733838789326651901L;

	@EmbeddedId
	private GameId            id;

	private boolean           callPut;
	private float             price;
}

위 코드로 생성을 하면 아래의 쿼리가 나온다.

CREATE TABLE `GAME_INFO` (
  `gameCode` varchar(255) NOT NULL,
  `gameTime` datetime NOT NULL,
  `username` varchar(255) NOT NULL,
  `callPut` tinyint(1) NOT NULL,
  `price` float NOT NULL,
  PRIMARY KEY (`gameCode`,`gameTime`,`username`)
)

pk순서가 time, code, name이면 좋겠는데… 이 부분이 조절이 잘 안된다. abc순서로 순서가 잡히는거라면 이름을 바꿔서 짓는것도 고려해봐야겠다.

특별히 제공하는 방법은 없는 것 같으니… 하이버네이트에서 어노테이션을 스캔하는 코드를 찾아서 상속받아서 수정하고 다시 쑤셔넣어주는게 좋을듯하다.

소스코드를 찾아서 재컴파일해서 lib폴더나 개인용 mavenrepo에 넣는것보다는… 낫지않을까 하는 생각이다.

Ruby error모음

Could not find a JavaScript runtime.
루비 Javascript runtime 오류 발생시
(rake db:schema:dump 실행시 발생, rails server실행시에 발생하는 경우도 있는듯하다)

gem ‘therubyracer’
gem ‘execjs’

gem update

sudo apt-get install nodejs

이런 명령을 실행하면 된다는 해결책들이 제시되고 있다.
우분투인경우는 아래처럼 하면 되나본데 센트에서 하는중이라 확인을 못했다.

gem들은 Gemfile에 추가해줘야할것같다.

Python 2.7 – Useful modules

1. Nose

https://pypi.python.org/pypi/nose/1.1.2

nose extends unittest to make testing easier

2. Numpy

http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/

3. SciPy

http://sourceforge.net/projects/scipy/files/scipy/0.10.0/

4. MathPlotLib

http://matplotlib.org/

5. PyFtpdLib

https://code.google.com/p/pyftpdlib/

6. Paramiko

python ssh lib

7. BeautifulSoup4

MySql 백업Backup & 복구|복원Restore

백업의 대상

  1. 데이터베이스 파일
  2. 오류 로그 파일, 슬로쿼리 로그 파일
  3. 바이너리 로그 파일
  4. 설정파일 my.cnf
  5. 실행 파일
  6. 기타 공유 라이브러리, 지원 스크립트, 테스트 툴

 

콜드 백업

1. 디비 정지
$ mysqladmin shutdown -uroot
2. 디렉토리 백업
$ tar cvf /var/lib/mysql ~/mysqlbak.tar
3. 디비 재기동
$myqld_safe &

바이너리 로그 이용

바이너리 로그 활성화
my.cnf
log-bin을 추가

호스트이름.0000001 이라는 바이너리 파일 생성

mysqlbinlog사용
$ mysqlbinlog hostname.000011 > recover.sql
$ mysql -uroot < recover.sql
(mysqlbinlog는 쿼리문 마지막에 rollback를 넣는다. 문제의 소지가 있으니 참고)

온라인 백업 mysqldump

잠금걸고 온라인 백업
$ mysqldump -uroot --lock-all-tables -master-data=2 > dump.sql
내용을 보고 바이너리 로그의 위치정보 찾기
$ more dump.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='hostname.00042', MASTER_LOG_POS=98;

백업파일 복구
$ mysql -uroot < dump.sql
바이너리로그적용
$ mysqlbinlog --position--98 hostname.000042 > binlog.sql
$ mysql -uroot < binlog.sql

새로운 백업후 바이너리로그 삭제

mysql> PURGE MASTER LOGS TO 'hostname.000042'
(42번 이전의 바이너리 로그를 모두 삭제하는 명령)

 

기타 백업

lvm스냅샷

전체 디비 공유잠금
mysql> FLUSH TABLES WITH READ LOCK;

바이너리 로그의 위치 정보를 알아냄
mysql> SHOW MASTER STSTUS;

디스크에 기록되지 않은 정보를 기록
$ sync

스냅샷을 취득
LVM이라면 lvcreate커맨드

공유 잠금을 해제
mysql> UNLOCK TABLES;

취득한 스냅샷을 테이프 등에 복사
cp..tar...등

innodb의 경우 Xtrabackup