Pages

2/04/2014

Rsync(synchronizes files and directories)

서버간의 데이터 동기화나 백업을 해야할 경우는 종종 생긴다.
rsync(Remote Sync)를 이용하면 간단한 설정으로 쉽게 동기화 시킬 수 있다.

rsync는 xinetd를 이용하기 때문에 rsync와 xinetd가 설치되어있어야한다.

yum install rsync
yum install xinetd
rsync는 ssh를 사용할수 있고 873포트를 이용 할 수있다.
873포트가 열려 있지 않다면 열어주자.
$telnet localhost 873
Trying ::1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 30.0

#didn't open port 873
$vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

/etc/init.d/iptables restart
rysync를 사용할 수 있게 활성화 시킨다.
$vi /etc/xinetd.d/rsync

#disable = yes -> disable = no
service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
rsync모듈을 등록하자.
$vi /etc/rsyncd.conf

#모듈 명
[testr]
#백업 경로
path = /mnt/testdir
#코멘트
comment = testr
#user
uid = root
gid = root
#위 path를 루트로 사용
use chroot = yes
#일기 전용
read only = yes
#허용 ip
hosts allow = 10.24.132.164
#허용커넥션갯수
max connections = 3
#타임아웃
timeout = 600


#restart xinetd
$service xinetd restart
이제 백업서버에서 rsync를 이용해 file을 가져오자.
rsync (option) user@127.0.0.1::module /path
$rsync -avz root@12.34.56.78::testr  /data/backup

#use ssh
$rsync -avz -e ssh root@12.34.56.78:/mnt/testdir  /data/backup
끝~

rsync option들은~ 이러하다.
-a : archice mode ( 심볼릭 링크, 속성, 퍼미션, 소유권 등 보곤)
-v : verbose mode (자세한 정보 출력)
-z : compress (전송시 압축)
-r : 하위 디렉토리 포함
-u : --update update only (don't overwrite newer files)
-e ssh : ssh를 이용한 rsync 동기화
--stats : 결과보고
--delete : 원본 서버에 없는 파일은 백업 서버에서 삭제
--progress : rsync 진행 상항 보기
--exclude : 제외할 파일 지정
--bwlimit : 대역폭(복사속도) 제어
--max-size : 특정 크기 이상 파일 제외
--min-size : 특정 크기 이하 파일 제외

2/03/2014

Enable ssh login without password(공개키 인증)

linux를 사용하다보면면 공개키인증으로 패스워드없이 로그인해야될때가 있다.(혹은 그냥하고싶을때도 있다..콜록)
그러나 우리는 망각의 동물 항상 까먹는다....
정리해 놓자...^^

centos에서 start@12.12.12.12에서 destination@34.34.34.34로 인증없이 접속한다고 가정하겠다.
공개키 인증은 사설키를 가지고 배포한 공개키로 조합하여 인증을 한다.
공개키와 사설키를 만들자.

$ssh start@12.12.12.12
start@12.12.12.12's password:
Last login: Mon Feb  3 09:47:08 2014 from 111.223.54.49
#if ~/.ssh doesn't exist
#you should make '.ssh' directory.(mkdir ~/.ssh)
$cd ~/.ssh/
$ssh-keygen -t rsa

#if you want a defualt value, push enter!!
Generating public/private rsa key pair.
Enter file in which to save the key (/home/start/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/start/.ssh/id_rsa.
Your public key has been saved in /home/start/.ssh/id_rsa.pub.
The key fingerprint is:
60:20:69:d4:64:8a:29:3a:1b:3d:d8:1d:0e:7b:59:7e silapps@e297d92a-7cf3-40be-8085-f344091a98eb
The key's randomart image is:
+--[ RSA 2048]----+
| .o++            |
| oo+..           |
|+.o . +          |
|o+ = * .         |
|= = = . E        |
| + o   .         |
|.                |
|                 |
|                 |
+-----------------+
공개키와 사설키가 생성되었다. 이제 공개키를 destination에 배포하자.

destination서버에도 .shh 디렉토리가 없다면 생성해주자.
$ssh destination@34.34.34.34 mkdir -p .ssh
$cat ~/.ssh/id_rsa.pub | ssh destination@34.34.34.34 'cat >> .ssh/authorized_keys'
destination에 공개키인증으로 접속 할 수 있도록 설정해주자.
$ssh destination@34.34.34.34
$sudo vi /etc/ssh/sshd_config
# 주석을 풀어준다.
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

$sudo service sshd restart
#권한 설정
$chmod 700 ~/.ssh
$chmod 600 ~/.ssh/authorized_keys
끄읕~ 테스트해보자.
$ssh start@12.12.12.12
$ssh destination@34.34.34.34
Last login: Mon Feb  3 16:46:54 2014 from 12.12.12.12
$
성공~

1/27/2014

Disable Root SSH Login on Linux

root계정 로그인을 막아야 해킹의 위험에서 조금 벗어날 수 있다.
자주하는 작업인데도 맨날 생각이 나지 않는다.콜록~
외부에서 루트계정으로 바로 로그인하는 것을 막아보자.

root계정을 막기전에 root대신 로그인할 수있는 유저를 추가하는 것을 잊지말자.

$useradd userid
$passwd userid

$vi /etc/ssh/sshd_config

sshd_config에서 PermitRootLogin 옵션을 no로 바꾼다.

#PermitRootLogin yes
PermitRootLogin no

sshd를 재시작한다.

service sshd restart

1/06/2014

Read files in Scala

Scala를 이용해 파일을 읽어보자.
물론 java를 사용할 수 있으니 java FileReader를 사용해도 된다.
하지만 스칼라를 이용하면 더욱 간단하다.콜록~
scala.io.Source를 이용하자.
http://www.scala-lang.org/api/2.10.3/#scala.io.Source api를 확인해보면 알겠지만 엄청난 기능을 제공하고있다. 따봉~ ㅇㅅㅇb

일단 읽을 파일을 만들어 보자.

$echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > testSource.scala
이제 Source를 이용하여 file을 읽어보자.
vi fileReader.scala
object MainObj{
  def main(args: Array[String]) {
    fileReadTest
  }

  def fileReadTest = {
    import scala.io.Source
    val fileSource = Source.fromFile("testSource.scala")
    val lineList = fileSource.getLines.toList

    lineList.foreach(println)
    fileSource.close()
  }
}
확인~
$scala fileReader.scala
끄읕~ 콜록!

12/23/2013

Create eclipse project by sbt

sbt만으로도 작업하면 좋겠지만 그래도 오랬동안 사용한 eclipse를 버릴 수는 없다..콜록
sbt는 sbteclipse plugin만 추가하면 eclipse프로젝트를 쉽게 생성 할 수 있다.
https://github.com/typesafehub/sbteclipse
사용방법부터 source까지 친절하게 나와있다.
sbteclipse를 한번 사용해보자. (우선 sbt 0.13 버전이 필요하다..난 이미 설치되어있다^^콜록)

$mkdir testSbtEclipse
$cd testSbtEclipse
$vi build.sbt

name := "testSbtEclipse"

version := "1.0"

scalaVersion := "2.10.3"

setting 사이에 꼭 Enter로 띄워주도록 하자..^^

build.sbt가 만들어졌으면 sbt를 실행해보자.
$sbt
[info] Set current project to testSbtEclipse (in build file:/Users/sil-010/Documents/scala-works/workspace/testSbtEclipse/)
> exit
$ll
drwxr-xr-x  5 sil-010  staff  170 12 23 12:30 .
drwxr-xr-x  8 sil-010  staff  272 12 23 11:56 ..
-rw-r--r--  1 sil-010  staff   70 12 23 12:28 build.sbt
drwxr-xr-x  3 sil-010  staff  102 12 23 12:23 project
drwxr-xr-x  3 sil-010  staff  102 12 23 12:30 target
프로젝트 폴더가 생성된것을 확인 할 수 있다.
이제 sbteclipse플러그인을 추가해보자.
global로 추가하려면 ~/.sbt/0.13/plugins/ 폴더
아니면 현제 프로젝트 폴더안의 project폴더안에 plugins.sbt 파일을 생성하고 sbteclipse를 추가한다.
$vi ~/Documents/scala-works/workspace/testSbtEclipse/project/plugins.sbt

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "2.4.0")

eclipse 명령어로 eclipse 프로젝트를 생성한다.
$sbt eclipse
[info] Loading project definition from /Users/sil-010/Documents/scala-works/workspace/testSbtEclipse/project
[info] Updating {file:/Users/sil-010/Documents/scala-works/workspace/testSbtEclipse/project/}testsbteclipse-build...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Set current project to testSbtEclipse (in build file:/Users/sil-010/Documents/scala-works/workspace/testSbtEclipse/)
[info] About to create Eclipse project files for your project(s).
[info] Updating {file:/Users/sil-010/Documents/scala-works/workspace/testSbtEclipse/}testsbteclipse...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Successfully created Eclipse project files for project(s):
[info] testSbtEclipse
$ll
drwxr-xr-x  8 sil-010  staff  272 12 23 12:43 .
drwxr-xr-x  8 sil-010  staff  272 12 23 11:56 ..
-rw-r--r--  1 sil-010  staff  589 12 23 12:43 .classpath
-rw-r--r--  1 sil-010  staff  368 12 23 12:43 .project
-rw-r--r--  1 sil-010  staff   70 12 23 12:28 build.sbt
drwxr-xr-x  5 sil-010  staff  170 12 23 12:43 project
drwxr-xr-x  4 sil-010  staff  136 12 23 12:43 src
drwxr-xr-x  5 sil-010  staff  170 12 23 12:43 target
많이 보던 익숙한 폴더 구조를 확인 할 수있다. 끄읕^^

12/08/2013

Install the ensime & sublime-ensime (Sublime text 3)

다음은 scala개발을 더 원할하게 도와줄 ensime을 설치 하겠다. 그리고 sublime-ensime플러그인까지 설치하겠다. 드디어 eclipse와 작별하는건가.. 콜록.. ㅎ

우선 sbt에 ensime-sbt-cmd plugin을 설치하자.

mkdir ~/.sbt/0.13/plugins
echo "addSbtPlugin(\"org.ensime\" % \"ensime-sbt-cmd\" % \"0.1.2\")" >> ~/.sbt/0.13/plugins/plugins.sbt
플러그인 설치 끝.
다음은 전에 만들었던 project혹은 새로운 프로젝트 폴더로 가서 ensime config file을 생성한다.
$sbt
[info] Loading global plugins from /Users/jknyou/.sbt/0.13/plugins
[info] Updating {file:/Users/jknyou/.sbt/0.13/plugins/}global-plugins...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] downloading http://repo1.maven.org/maven2/org/ensime/ensime-sbt-cmd_2.10_0.13/0.1.2/ensime-sbt-cmd-0.1.2.jar ...
[info]  [SUCCESSFUL ] org.ensime#ensime-sbt-cmd;0.1.2!ensime-sbt-cmd.jar (1412ms)
[info] Done updating.
[info] Set current project to testsbt (in build file:/Users/jknyou/workspace/scalaworks/testSbt/)
> ensime generate
[info] Gathering project information...
[info] Processing project: ProjectRef(file:/Users/jknyou/workspace/scalaworks/testSbt/,testsbt)...
[info]  Reading setting: name...
[info]  Reading setting: organization...
[info]  Reading setting: version...
[info]  Reading setting: scalaVersion...
[info]  Reading setting: moduleName...
[info]  Evaluating task: projectDependencies...
[info]  Evaluating task: unmanagedClasspath...
[info]  Evaluating task: managedClasspath...
[info]  Evaluating task: internalDependencyClasspath...
[info]  Evaluating task: unmanagedClasspath...
[info]  Evaluating task: managedClasspath...
[info]  Evaluating task: internalDependencyClasspath...
[info]  Evaluating task: exportedProducts...
[info]  Evaluating task: unmanagedClasspath...
[info]  Evaluating task: managedClasspath...
[info]  Evaluating task: internalDependencyClasspath...
[info]  Evaluating task: exportedProducts...
[info]  Reading setting: sourceDirectories...
[info]  Reading setting: sourceDirectories...
[info]  Reading setting: classDirectory...
[info]  Reading setting: classDirectory...
[info]  Reading setting: ensimeConfig...
[info] Wrote configuration to .ensime
성공!
다음은 sublime의 package Controller를 사용하여 sublime-ensime 를 설치하자.
Preferences > Package Control > Install Package > Ensime
설치가 완료되면 Ensime server를 패키지에 설치한다. sublime pageckage 확인은
sublime console에서 sublime.packages_path() 명령어로 알 수 있다.
scala버전에 맞게 Ensime을 다운 받는다. Download
Sublime pacakge폴더에 디렉토리를 생성한다.
Ensime/server (ex:/Users/jknyou/Library/Application Support/Sublime Text 3/Packages/Ensime/server) 다운 받은 ensime을 Ensime/server 디렉토리에 압축을 푼다.
drwxr-xr-x   7 jknyou  staff   238 12  8 13:20 .
drwxr-xr-x   4 jknyou  staff   136 12  8 13:20 ..
-rw-r--r--@  1 jknyou  staff   251  2 27  2013 LICENSE
-rw-r--r--@  1 jknyou  staff  3889  2 27  2013 README.md
drwxr-xr-x@  4 jknyou  staff   136  2 27  2013 bin
drwxr-xr-x@ 22 jknyou  staff   748  2 27  2013 elisp
drwxr-xr-x@ 17 jknyou  staff   578  2 27  2013 lib
jknyouui-MacBook-Air:server jknyou$ pwd
/Users/jknyou/Library/Application Support/Sublime Text 3/Packages/Ensime/server
restart Sublime Text
마우스 우클릭, Ensime > Maintenance > start
에러를 표시해주는 똑똑한 scala editer가 된것을 확인 할 수 있다.
언제나 친절한 Documentation ^^
https://github.com/sublimescala/sublime-ensime
https://www.dropbox.com/sh/ryd981hq08swyqr/V9o9rDvxkS/ENSIME%20Releases

Install SBT

sbt는 Simple Build Tool의 약자다. project 셋팅, 빌드등을 수행해주는 역할을 한다. 요즘 스칼라를 사용해보려고 하고있다. Intelli-j나 eclipse를 사용하면 되지만 왠지...sublime으로 하고 싶은 충동이 들었다... 스칼라 스크립트로 실행해도 되지만...프로그래머는 귀찮은 작업을 싫어해야한다..ㅋㅋ 그래서 sbt를 설치 하게 되었다..콜록

sbt는 설치하는 법은 어려가지가 있다. sbt setup doc 에서 확일해 볼수 있듯이 macports, brew등을 이용해 인스톨 할 수 있다.(난 언제나 맥 위주로...콜록) 하지만 난 언제나 download해서 설치하는 것을 좋아한다..콜록

다운 받자. download sbt-0.13.0
압축을 풀쟈.

tar -zxvf ./sbt.tgz
필요한 launch만 가져온다. 경로는 클래스 패스로 잡을 경로또는 잡혀있는 경로로 한다. 런처를 실행 시킬 스크립트를 만든다.
cp bin/sbt-launch.jar ~/bin
cd ~/bin
touch sbt
vi sbt
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
끝! documentation에 있는것 처럼 헬로우 월드를 찍어보자!! ㅋㅋㅋㅋ
mkdir hello
cd hello
echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > hw.scala
sbt run
잘된다...콜록 폴더 구조 및 설명도 자세히 나와있다. Documanetation 만세....콜록