삽질하는플머

Synology USBStation2 사용기 1. 전원 꽂고 optware 깔기.

이런저런잡다구리/Synology-nas

클리앙 장터에서 1TB 하드와 함께 쿨매로 나온 USBStation2 를 손에 넣게 되었다. 

흔히 NAS Adapter 라고도 불리는 이 제품은, 기계 자체에 펌웨어가 내장되어있어 단순히 외장하드를 연결해 주는 것 만으로도 바로 사용할 수 있는 멋진 물건이다. 






하드웨어 설치는 간단한 편인데 아답터가 에러 @_@!! 

전원 부분이 얇아 220v 소켓에 꽂으면 싸구려 중국제마냥 덜렁거려 아무래도 적당한 녀석으로 바꿔줘야 할 듯 싶다. 


책상속에 마침 곰팡이가 핀 2GB USB 메모리가 보이길래 함께 꽂아주었다. 




DS110j의 경우 부팅이 끝나면 삑~! 하고 비프음이 나오는데, USBStation2는 그딴 거 없다!! 

POWER 와 DISK 램프의 깜박임이 완료된 후 기본 호스트명인 usbstation2 에 핑을 날려본다. 




웹브라우저를 띄우고 http://usbstation2 에 접속. 초기 접속 아이디는 admin 이며 암호는 없다. 




깔려있는 DSM 버전은 3.2-1944, USBStation2 는 최신버전 DSM 4.0의 지원대상에서 제외되었다.
아쉬움을 뒤로하고 제어판에서 DSM 3.2-1968 버전을 내려받는다. 




업데이트를 마치고 재부팅한 뒤 네트워크 이름을 usbstation2 에서 my-storage 등으로 적당히 변경. 

표준 시간대 설정하고 NTP서버와 동기화를 선택해 시간은 자동으로 맞춰지도록 한다. 

제어판 - 사용자에서 admin 과 guest 에 적절한 암호를 설정. 

나머지 설정도 적당히 마무리 짓고... 마지막으로 제어판 - 터미널에서 SSH 서비스를 활성화 한다. 




PuTTy 로 접속 테스트. 





제어판 -> 외부 장치에서 뒷면에 꽂아둔 2GB 메모리를 EXT4 파티션으로 포멧한다. 

이 공간은 optware 용으로 사용할 것이다. 




구글에서 USBStation2와 optware 로 검색해서 건진 마르님의 멋진 따라하기. 


http://blog.naver.com/amarese/140153263988

http://cafe.naver.com/synologynas/13207


기왕에 DSM 버전도 가능한 최신버전으로 업했으니... 
두번째 링크에 isul 님이 남겨주신 댓글을 참조해 수정펌이 아닌 정펌에 optware를 올리는 방법을 찾아보자. 



이하 작업은 root 로 로그인한 뒤 진행. SSH로 root 접속시 암호는 admin에 설정한 것과 동일하다. 


USB메모리에 @optware 라는 폴더를 만들어 준다. 


# cd /volumeUSB2/usbshare

# mkdir @optware



/volume1 은 USBStation2의 플래시 영역이다. 앞에서 만들어준 @optware 디렉토리에 대한 심볼릭 링크를 여기에 만들어준다. 


# mkdir /volume1/system

# cd /volume1/system

# ln -s /volumeUSB2/usbshare/@optware



/opt 에 이 심볼릭 링크를 마운트 한다. 


# mount --bind "/volume1/system/@optware" "/opt"



이제 부트스트랩 작업. (참조: http://lycons.iptime.org/tc/49)


# wget http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/syno-mvkw-bootstrap_1.2-7_arm.xsh

# sh syno-mvkw-bootstrap_1.2-7_arm.xsh



/opt/etc/ipkg.conf 파일을 열고 마지막에 다음 라인을 추가. 


src cs08q1armel http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable



/etc/profile 열고 마지막에 다음과 같이 수정 또는 추가. 


PATH=/opt/bin:/opt/sbin:$PATH



ipkg 의 업데이트. 


# ipkg update

# ipkg upgrade



/etc/rc.local 에 붉게 적힌 내용 추가. 재부팅 후에도 동작하도록 해준다. 


#!/bin/sh


until [ -d /opt/bin ];

do

  sleep 5

  mount --bind "/volume1/system/@optware" "/opt"

done


# Optware setup

[ -x /etc/rc.optware ] && /etc/rc.optware start


exit 0



USB 마운트가 성공해서 /opt/bin 디렉토리가 생길 때 까지 5초마다 한번씩 마운트를 시도를 되풀이 하고 있다. 

원래 마르님의 글에서는 2초면 충분하다고 했는데, 내가 가진 일부 하드의 경우 40초 이상이 필요한 경우도 있어 꼼수를 부림. 


이제 재부팅. 


# reboot



df -h 명령으로 /opt 에 /volume1/system/@optware 가 제대로 마운트 되었는지 살핀다. 





ipkg 테스트 겸 설치해보는 nano. 


# ipkg install nano

# nano





마지막 산이 하나 더 남아있다. USBStation2 는 저가형 답게 공유폴더를 따로 지정할 수 없고 USB에 접속한 스토리지 자체가 통째로 공유되는 방식이다. 때문에 탐색기로 방금 optware 를 설치한 2GB 메모리를 들여다 보면 속살이 모두 드러나 조금 곤란하다. 




공유기능을 끄는 것도 불가능하다. 물론 탐색기 환경에 나타나지 않도록 설정할 수는 있지만 그래도 찜찜하다. 

정책 때문이라고 해도 왠치 치사하다는 느낌이 든다. 뭐 Synology의 장점은 맘에 안들면 고쳐 쓰면 된다는 거니... 


볼륨 루트 밑에 새 공유 디렉토리 public을 생성한다. 


# mkdir /volumeUSB2/usbshare/public



/usr/syno/etc/smb.conf 파일을 열고 다음과 같이 수정. 


......

[usbshare2] <<-- 이 부분도 맘에 드는 이름으로 바꿔주자

        invalid users=nobody,nobody

        valid users=nobody,guest,admin,nobody

        comment="Power Quotient International Co., Ltd"

        path=/volumeUSB2/usbshare/public

        guest ok=yes

        browseable=yes

        fileindex=no

        mediaindex=yes

......



삼바 데몬 재구동. 


# /usr/syno/etc/rc.d/S80samba.sh restart



다시 탐색기로 접근해 보면 더이상 불필요한 내용은 표시되지 않는다. 
비슷한 요령으로 USBStation2에서 제한된 여러개의 공유디렉토리 기능을 흉내낼 수 있으며, 이렇게 만들어낸 각 공유디렉토리는 DSM 내부에서 얼마든지 사용자권한이나 탐색기에서 표시여부 등을 수정해줄 수 있다. 


하지만 재부팅하면 말짱 도루묵 @_@ !!! 

chmod 444로 쓰기 권한을 빼앗아도 이 파일은 부팅과 동시에 재작성된다. 

고민하다가... 수정한 설정파일을 백업하고, optware 가 구동될 때 새로 생성된 설정과 바꿔치운 뒤 삼바를 재구동하는 방법을 쓰기로 함. 


일단 설정파일 백업. 


# cp /usr/syno/etc/smb.conf /usr/syno/etc/smb.conf.myconf



/etc/rc.local 을 다시 열고 다음 내용을 추가한다. 


#!/bin/sh


# mount usb's optware directory

until [ -d /opt/bin ];

do

  sleep 5

  mount --bind "/volume1/system/@optware" "/opt"

done


cp /usr/syno/etc/smb.conf /usr/syno/etc/smb.conf.org  

cp /usr/syno/etc/smb.conf.myconf /usr/syno/etc/smb.conf

/usr/syno/etc/rc.d/S80samba.sh restart


# Optware setup

[ -x /etc/rc.optware ] && /etc/rc.optware start


exit 0



이후 사용자 설정등을 변경하거나 할 때는 다시 smb.conf.myconf 를 복사해 두어야 한다. 약간의 귀차니즘이 느껴지네... 


오늘은 여기까지... 다음번에는 USBStation2에 이유없이 금지된 웹서비스 대신 APM을 올려보자. 



Synology NAS DS110j 에 mono 올리기

이런저런잡다구리/Synology-nas



Synology NAS 에 mono 를 올리면 아주 신나는 일이 많이 생길 것 같아. 
닷넷 바이너리가 직접 돌아간다면 윈도에서 작업한 이런 저런 물건들을 쉽게 돌려볼 수 있잖아~ 
ipkg system이 설치된 DS110j 는 "ipkg install mono" 명령으로 2.4 버전의 모노를 설치할 수 있지만
닷넷 4.0 바이너리를 구동하려면 mono 버전이 2.8 이상이 되어야 하니... 직접 빌드하는 방법을 찾아보자. 

일단 구글을 뒤적뒤적. Synology DS211 에 mono-2.11.0 을 올리는 방법이 잘 정리된 아주 멋진 블로그를 건짐. 

http://blog.hexad.dk/2012/03/mono-211-binary-build-for-synology-211.html



이 글을 적는 시점에서 최신버전은 2.11.1 이니 그걸로 해보자. 과정은 위의 링크와 동일.
먼저 빌드에 필요한 패키지들을 설치한다. 

# ipkg install wget make automake autoconf bison glib libc-dev libstdc++ m4 gcc gawk textutils gettext zlib



mono 2.11.1 의 소스를 내려받고 압축을 푼다. 그리고 빌드 준비. 

configure 에서 --prefix 파라미터를 통해 /usr 가 아닌 /opt/mono-2.11 에 설치한다. 
혹시 나중에 제거할 일이 생겨도 이렇게 해 두면 편하다. 


# wget "http://download.mono-project.com/sources/mono/mono-2.11.1.tar.bz2"

# tar -xf mono-2.11.1.tar.bz2

# cd mono-2.11.1

# ./configure --prefix=/opt/mono-2.11.1



다음 파일들을 편집기에서 열어준다. 


mono/metadata/Makefile

mono/mini/Makefile

mono/profiler/Makefile



아래 라인을 찾아서 


LDFLAGS = 



-lrt 플래그를 추가해준다. 이유는 여기를 클릭. 


LDFLAGS = -lrt 



ipkg 에서 제공되는 pthreads 라이브러리에 문제가 있기 때문에, 빌드를 위해서는 원래의 pthreads 로 바꿔주어야 한다. 

방법은 다음과 같다. 

# mkdir /opt/arm-none-linux-gnueabi/lib_disabled
# mv /opt/arm-none-linux-gnueabi/lib/libpthread* /opt/arm-none-linux-gnueabi/lib_disabled
# cp /lib/libpthread.so.0 /opt/arm-none-linux-gnueabi/lib/
# ln -s /opt/arm-none-linux-gnueabi/lib/libpthread.so.0 /opt/arm-none-linux-gnueabi/lib/libpthread.so
# ln -s /opt/arm-none-linux-gnueabi/lib/libpthread.so.0 /opt/arm-none-linux-gnueabi/lib/libpthread-2.5.so


DS110j 는 아주 느린 환경이므로 빌드는 지루한 작업이다. 
혹시라도 중간에 네트웍에 문제가 생겨 SSH 연결이 끊기면 말짱 황이므로 screen 의 사용을 적극 권장한다. 

# ipkg install screen


screen은 딱 네가지만 기억하면 된다. 실행은 screen, 디태치는 Ctrl+A+D, 다시 붙일 때는 screen -r, 종료는 exit. 
좀 더 자세한 사용기는 여기를 클릭

이제 빌드 시작. 

# make


정말 하루 종일 걸린다. 헥헥... 다 끝났으면 다음 명령으로 /opt/mono-2.11.1 에 설치

# make install


인생을 좀 편하게 살기 위해 몇개의 심볼릭 링크를 만들어주자. 

# ln -s /opt/mono-2.11.1/bin/mono /opt/bin/mono
# ln -s /opt/mono-2.11.1/bin/mcs /opt/bin/mcs
# ln -s /opt/mono-2.11.1/bin/gmcs /opt/bin/gmcs


실행시켜보면 

# mono --version







설치가 끝났으니 제대로 굴러가는지 테스트를 해 봐야지. 
SharpDevelop 를 실행시키고 간단한 콘솔프로그램을 만들어 보자. 



윈도에서 실행시킨 모습. 





컴파일된 console.exe 를 NAS 로 옮겨서 돌려보자. 

# mono ./console.exe



지난번 포스트에서 테스트했던 간단한 C# 에코서버도 물론 잘 동작한다. 



초기 구동은 아무래도 느리지만, 반응은 제법 빠릿빠릿 하다. 아주 만족스럽네.
간단한 채팅서버나 작은 게임서버 정도는 충분히 돌릴 수 있을 듯. 



Synology NAS의 MySQL 테이블 대소문자 구분 설정

이런저런잡다구리/Synology-nas

윈도의 MySQL 에서 작성한 DB 스키마를 Synology NAS 의 MySQL로 옮겨 테스트 하자마자 쏟아지는 에러. 

CREATE TABLE 또는 CREATE DATABASE 에서 대소문자를 예쁘게 구분해봐야 저장될 때는 소문자로 저장되는게 어찌 희안하더라니... 

윈도의  MySQL 에서는 SQL문 내의 테이블과 데이터베이스에서 대소문자를 구분하지 않지만, NAS의 리눅스에서는 구분하고 있다. 

일단 SQL문을 뜯어고쳐 대소문자를 맞춰주기는 했는데... 덕분에 아무래도 유기농 코드가 잔뜩 만들어진 듯...  (벌레 벌레~)

윈도와 리눅스의 MySQL 설정이 달라서 애를 먹은 게 한두번이 아니었지만... 그래도 이건 좀 아니잖아. 

이 설정을 동일하게 맞추는 방법이 없을까 하고 뒤져보니  lower_case_table_names 를 살펴보란다. 


http://dev.mysql.com/doc/refman/5.0/en/identifier-case-sensitivity.html



이 변수의 기본값이 윈도와 맥에서는 1로, 리눅스에서는 0으로 설정된다고 한다. 각 값의 의미는 다음과 같다. 


의미
0테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분한다.
1테이블과 데이터베이스 이름들은 소문자로 저장되고 이름 비교시 대소문자를 구분하지 않는다.
2테이블과 데이터베이스 이름들은 CREATE TABLE 또는 DATABASE 문에 정의된 문자로 디스크에 저장되며 이름 비교시 대소문자를 구분하지 않는다.


가성비가 떨어지는데도 불구하고 Synology NAS를 좋아하는 건, SSH 연결을 지원하기 때문이지.
부트스트랩을 통해 이런저런 도구들도 마음대로 설치할 수 있고...

http://lycons.iptime.org/tc/49


요새는 QNAP 것도 끌리는데... 어디 출장 나가는 사람 없나... 가격 차이가 이건 뭐 두배나 나니...


아무튼 SSH로 접속한 다음 my.cnf 를 찾아보자. 응? 그렇게 생긴 파일이 하나도 없네??

my*.cnf 로 검색해보니 다섯개의 파일이 튀어나온다. 


# find / -name my*.cnf

/usr/syno/mysql/share/mysql/my-huge.cnf

/usr/syno/mysql/share/mysql/my-small.cnf

/usr/syno/mysql/share/mysql/my-innodb-heavy-4G.cnf

/usr/syno/mysql/share/mysql/my-large.cnf

/usr/syno/mysql/share/mysql/my-medium.cnf



현재 사용중인 물건은 메모리 128M짜리 DS-110j



my-medium.cnf 을 설정파일로 사용하면 되겠군. 이 파일을 /ect/my.cnf 로 복사한다. 


# cp /usr/syno/mysql/share/mysql/my-medium.cnf /etc/my.cnf



my.cnf 파일을 열고 [mysqld] 항목 아래에 다음 설정을 추가. 


lower_case_table_names = 1



NAS의 mysql 데몬 재구동은 다음과 같이. 


/usr/syno/etc/rc.d/S21mysql.sh restart



제대로 설정되었는지 확인하려면 아래 SQL을 실행. 


SHOW VARIABLES LIKE  'lower_case_table_names'


Variable_nameValue
lower_case_table_names1


우분투의 경우도 요령은 동일하다. 



NAS 갖고놀기 - DS110j

이런저런잡다구리/Synology-nas
Synology의  NAS 는 X86, PPC, Arm 등 다양한 CPU를 사용한 제품이 있다. 그 중 ARM 기반의 DS110j 를 갖고 놀게 되었다. 




카페도 있다. 
http://cafe.naver.com/synologynas

대충 설치를 마치고 접속해보니 이것이야말로 신세경. 진작 써볼 껄... 

일단 SSH 접속부터 설정.  




부트스트랩을 올리는 방법이라는데 후덜덜하군. 

DS110j 의 CPU 정보는 여기서 확인. 독일어이므로 영어로 바꿔보자. 

여기에 나와있는 링크를 NAS의 Public 에 저장. 
http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/stable/syno-mvkw-bootstrap_1.2-7_arm.xsh

SSH로 접속해서 /volume1/public 으로 이동 후 과감하게 실행해보자.  ipkg 사용가능. 우햐~~ 뭐 이런~~
(루트권한 필요. su 또는 아예 root로 접속해 처리할 것) 
업데이트/업그레이드 실행. 

ipkg update
ipkg upgrade


몇년이 지나도 vi 는 익숙해지지 않는다. 발전이 없구먼... 암튼 nano 부터 깔아보자.  

ipkg install nano


히야~ nano 가 떴다~~




데몬 스크립트들은 /usr/syno/etc/rc.d 에 위치한다. 루트디렉토리에 etc, etc.defaults 가 별개로 있는 이유는 잘 모르겠네. 



로컬 네트웍상의 익명 rsync 서버로서 가지고 놀아보기.  


현 시점에서 /etc/rsyncd.conf 파일은 다음과 같이 되어있다. 

#motd file = /etc/rsyncd.motd
#log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = no
[NetBackup]
path = /var/services/NetBackup
comment = Network Backup Share
uid = root
gid = root
read only = no
list = yes
charset = utf-8
auth users = root
secrets file = /etc/rsyncd.secrets


여기에 설정된 NetBackup 이 제대로 동작하는지 테스트 해 보자. 

C:\SyncWork-Test> rsync -avz --delete root@zh-storage::NetBackup
rsync: failed to connect to zh-storage: Connection refused (111)
rsync error: error in socket IO (code 10) at /home/lapo/packaging/rsync-3.0.7-1
src/rsync-3.0.7/clientserver.c(122) [Receiver=3.0.7]


rsync 데몬이 돌고있지 않은 상태이므로 일반 접속으로는 붙지 않는다. 
RSH 접속은 어떨까. 

C:\SyncWork-Test> rsync -avz --delete root@zh-storage:~/
root@zh-storage's password:
receiving incremental file list
drwxr-xr-x        4096 2010/11/02 17:18:18 .
-rw-r--r--          22 2010/11/02 17:18:18 .bashrc
-rw-r--r--          40 2010/11/02 17:17:21 .inputrc
-rw-r--r--         396 2003/09/04 18:49:39 .profile

sent 11 bytes  received 85 bytes  21.33 bytes/sec
total size is 458  speedup is 4.77


아주 잘 동작하는군... 현재 설정된 rsh 에서 대상의 rsync 를 구동시키기 때문이다. 
그리고 쩝... 현 시점에서 /var/services/ 에 NetBackup 이라는 디렉토리는 존재하지 않는다. 카페의 사용기를 보면 네트웍 백업을 활성화하면 나타나는 듯 한데... 이 펌웨어에는 그런 메뉴가 없다. 


NAS로 들어가서 rsync 데몬을 굴려보자. 

일단 /volume1/public/rsync-test 디렉토리를 만들고 /etc/rsyncd.conf 를 rsyncd.my.conf 로 복사. 내용을 다음과 같이 편집하자. 

pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = no

[rsync-test]
path = /volume1/public/rsync-test
comment = rsync test directory
read only = no
list = yes
charset = utf-8


이제 rsync 를 데몬모드로 구동. 

rsync --config=/etc/rsyncd.my.conf --daemon


데몬이 도는지도 확인해보자. 

$ ps | grep rsync
30870 root      8000 S    rsync --config=/etc/rsyncd.my.conf --daemon
30980 root      2944 S    grep rsync
$ cat /var/run/rsyncd.pid
30870


앞에서 내렸던 명령을 다시 한 번 때려보자. 익명모드로 만들었으므로 유저없이 접근 가능. 

C:\SyncWork-Test>rsync -avz --delete zh-storage::rsync-test
receiving incremental file list
drwxrwxrwx        4096 2010/11/02 17:55:13 .

sent 32 bytes  received 68 bytes  66.67 bytes/sec
total size is 0  speedup is 0.00


잘 되는군. 위에서 read only = no 로 설정했으므로 보내기도 가능하다. 

C:\SyncWork-Test>rsync -avz --delete ./ zh-storage::rsync-test
sending incremental file list
./
rsync: failed to set times on "." (in rsync-test): Operation not permitted (1)
aaa.bmp
aaa.png
curl_stack.h
curl_stack.o
main.o

sent 151433 bytes  received 106 bytes  303078.00 bytes/sec
total size is 1513787  speedup is 9.99
rsync error: some files/attrs were not transferred (see previous errors) (code
3) at /home/lapo/packaging/rsync-3.0.7-1/src/rsync-3.0.7/main.c(1042) [sender=3
0.7]


문제는 이 명령어를 NAS 로그인과 동시에 실행시키는 건데... rc.d 는 /usr/syno/etc 에 있고 rc.local 은 /etc 에 존재... 
일단 /etc/rc.local 에 다음과 같이 추가하고 재부팅 해 보자. 

#rsync daemon
rsync --config=/etc/rsyncd.my.conf --daemon


(루트계정으로 로그온한 상태에서는 poweroff, reboot 명령이 먹는다.)

재부팅한 뒤 ps | grep rsync 때려보면 데몬이 잘 돌아가고 있는 게 보인다. 일단 해결. 

--------
2010.11.3

도움말을 읽다보니 이렇게 데몬을 띄우지 않아도 활성화되는 rsync 모듈이 이미 있는 듯 하다. 
/usr/syno/etc/rc.d/S84rsyncd.sh 이 그 물건이겠지. 

일단 위에서 띄운 데몬을 죽이고 관리화면에서 백업및 복원 -> 네트워크 백업서비스 활성화 를 켜보자. 




zh-storage> ps | grep rsync
22587 root      8000 S    /usr/syno/bin/rsync --daemon
22890 root      2944 S    grep rsync

rsync 데몬이 구동중이고, 이 설정파일은 위에서 살펴봤던 /etc/rsyncd.conf 를 사용할 것으로 보인다. 

이 서버스는 동종의 Synology 머신에서 백업을 때릴 때 받아주는 역할을 하므로, 자유도가 떨어진다. 
좀 더 살펴봐야겠지만, 나하고는 안어울림. 





한걸음만 더 나가보자... crond 를 써서 원격지에서 주어진 시간마다 특정 폴더를 자동으로 rsync로 동기화하는 것도 테스트. 
일단 rsync 와 달리 crond 는 기본적으로 떠있는 상태. 다행 다행~~

위에서 살펴본 것 처럼 /etc/rc.local 이 제대로 동작하므로 /etc/crontab 도 잘 동작할 것으로 보인다. 




WebDAV 설정법 참고



2010.11.6  Bash 설치

 http://isulnara.com/tt/202

Bootstrap 과 coreutils 가 먼저 설치되어있어야 한다. 설치 후 bash 깔 것. 

# ipkg install coreutils
# ipkg install bash

/etc/passwd 에서 root의 셸을 bash로 변경

root:x:0:0:root:/root:/opt/bin/bash

설정파일 링크. 

# ln -s /opt/etc/profile /root/.bash_profile
# ln -s /opt/etc/profile /root/.bashrc

/opt/etc/profile 수정 - 필요에 따라 적당히 수정
#
# Bash initialization script
#

PS1='[\u@\h:\w]# '
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/bin:/usr/syno/sbin:/opt/sbin:/opt/bin
LD_LIBRARY_PATH=/opt/lib:${LD_LIBRARY_PATH}

export PS1 PATH LD_LIBRARY_PATH

MANPATH=/opt/man:${MANPATH}

if [ `/usr/bin/id -u` -eq 0 ]; then
HOME=/root
else
HOME=/volume1/`/usr/bin/id -n -u`
fi

EDITOR=vim
PAGER=less
TERM=linux
TERMINFO=/opt/lib/terminfo
MANPAGER='less -isrR'
RSYNC_RSH=ssh

export PATH OUTPUT_CHARSET MANPATH HOME EDITOR PAGER TERM MANPAGER RSYNC_RSH TERMINFO

alias ll='ls -la --color=auto'


그리고 접속확인. 무엇보다 중요한 것은 현재 작업중인 연결을 끊지 말고 새 연결을 시도할 것
잘못되면 완전 초기화해야 할 수도 있기 때문임. 






2011.3.30. SVN 설정하기. 

http://forum.synology.com/wiki/index.php/Step-by-step_guide_to_installing_Subversion 

먼저 제어판에서 snvowner 라는 유저를 생성하자. 어드민권한도 줌. 
svn 폴더를 만들고 네트웍에서 감춤. svnowner 에 접근권한도 줌. 

SSH접속후 다음과 같이 입력해 설치. 
ipkg install svn

위 글에서는 SVN 데몬을 상시로 띄우는 것 보다는 inetd 를 써서 필요할 때만 쓰는 방법을 추천하고 있다. 

/etc/inetd.conf 파일에 다음 라인 추가. 

svn stream tcp nowait svnowner /opt/bin/svnserve svnserve -i -r /volume1/svn



/etc/services 파일에 다음 라인 추가. 

svn 3690/tcp # Subversion 
svn 3690/udp # Subversion



이 시점에서 reboot 한 번 해줌. 

 root로 SSH접속 후 다음과 svnowner 로 변경. 

su svnowner --> 잘 안되네...
/etc/passwd 에서 로그인용 셸을 지정해주어야 한다. 
svnowner:x:1026:100:SVN 관리자:/var/services/homes/svnowner:/sbin/nologin
다시 su svnowner

SVN을 테스트 해보자.

cd /volume1/svn 
svnadmin create test 

권한설정을 테스트 해보자. 
/volume1/svn/test/conf/passwd 파일을 열고 다음과 같이 입력. 

[users] 
testuser = 1234


 /volume1/svn/test/conf/svnserve.conf 파일에 다음과 같이 구성. 
 

[general] 
anon-access = none 
auth-access = write 
password-db = passwd 
realm = I am your test repository


exit 를 입력, root 로 돌아온다. 

이제 거북이 등 SVN 클라에서 위에 설정한 유저로 체크아웃. 

svn co svn://<IP of your Diskstation>/test <some localfolder>

로컬에서 테스트하려면 이렇게. 

svn co svn://127.0.0.1/test test

root의 암호를 물을 때는 그냥 엔터. 이후 유저와 암호를 위에서 설정한 값으로 입력. 

체크아웃된 test 디렉토리로 이동후 다음과 같이 해보세. 

echo "I am a Test" > test.txt
svn add test.txt
svn ci -m "Commit test"


커밋 잘된다. 거북이에서도 요령은 동일.


2011.5.4 추가. 
pre--revprop-change 라는게 있군. 이걸 설정해줘야 거북이 SVN에서 지난로그 수정하는게 된다. 
http://www.pyrasis.com/main/SubversionCommitMail-HOWTO
 
SVN 작업디렉토리 내 hook 디렉토리에 가서 다음과 같이 하자. 

cp pre-revprop-change.tmpl pre-revprop-change
chmod 755 pre-revprop-change






2011.3.31. 모니위키 이전을 위한 설정. 

아파치 설정파일은 /usr/syno/apache/conf 에 존재. httpd.conf  들여다봄.  
도큐멘트 루트는 다음과 같이 되어있다. 

DocumentRoot "/var/services/web"

이 디렉토리는 /volume1/web 으로 심볼릭 링크되어있음. 

웹 디렉토리 밑에 주렁주렁 깔아주는 것 보다 다른 곳에서 링크하는 게 나아보임.  /volume1/@hideweb/moniwiki 디렉토리 생성. 
웹서비스 재시작시 httpd.conf 는 원래대로 돌아가버리니  httpd.conf-user 파일을 편집. 

<IfModule alias_module>
    # Alias for MoniWiki

    Alias /MoniWiki/    "/volume1/@hideweb/moniwiki/"
    Alias /MoniWiki     "/volume1/@hideweb/moniwiki/"

    <Directory "/volume1/@hideweb/moniwiki">
        #Options Indexes MultiViews
        #Options MultiViews
        Options All

        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</IfModule>



시놀로지 관리자에서 서비스 재구동시켜봄. 잘 동작한다. 아싸~
 여기에 모니위키를 설치하면 됨. 
 




2012. 3. 27. 

SVN의 오래된 내용 정리하는 방법. 종택형님이 갈쳐줌.