rsync는 두 컴퓨터 사이에 미러링과 같이 특정 디렉터리를 동기화 하기위해 널리 사용되는 프로그램이다. 여기서는 Ubuntu Linux에서 xinetd를 이용하여 rsync daemon을 설정하는 방법에 대해 다룬다. 물론 시스템에 xinetd가 설치돼 있어야 한다.

1. xinetd를 이용 rsync daemon을 실행하기 위해서 /etc/default/rsync 파일의 RSYNC_ENABLE 값을 아래와 같이 설정한다.

RSYNC_ENABLE=inetd


2. 파일 /etc/xinetd.d/rsync를 아래와 같은 내용으로 생성 저장한다.

$ sudo vi /etc/xinetd.d/rsync

service rsync
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

3. rsync daemon 설정 파일 Create the file /etc/rsyncd.conf 를 아래와 같은 내용으로 생성 저장한다.

$ sudo vi /etc/rsyncd.conf

max connections = 2
log file = /var/log/rsync.log
timeout = 300

[share]
comment = Public Share
path = /home/share
read only = no
list = yes
uid = nobody
gid = nogroup
auth users = user
secrets file = /etc/rsyncd.secrets

4. rsync daemon 접속시 필요한 사용자 아이디와 패스워드 목록 위한 파일 /etc/rsyncd.secrets 를 아래와 같은 형식으로 생성 저장한다. 이때 파일명은 rsyncd.conf 파일의 secrets file 항목에 지정된 것과 일치 시킨다.

$ sudo vi /etc/rsyncd.secrets

userid:password


5. 보안을 위해 파일 rsyncd.secrets의 퍼미션을 600으로 설정한다.

$ sudo chmod 600 /etc/rsyncd.secrets

6. 아래 명령으로 xinetd를 재가동 시켜 rsync daemon을 실행한다.

$ sudo /etc/init.d/xinetd restart


7. 설정이 끝났으면 아래 명령으로 rsync daemon이 올바르게 동작하는지를 확인한다.

$ telnet localhost 873
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@RSYNCD: 30.0

@ERROR: protocol startup error
Connection closed by foreign host.
$
AND

Ubuntu Linux 9.10 이 바로 얼마전 발표되었다. 그래서 9.04를 이 버전으로 업그레이드 했는데 Eclipse Galileo 에서 몇몇 버튼이 동작하지 않아 키보드로 포커스를 잡고 스페이스 또는 엔터키를 눌러 해결하곤 했다. 그런데 마우스를 이용할 때와 비교 여간 불편한게 아니다.

인터넷을 찾아보니 이 문제로 올라온 글들이 꽤 있는데 다음과 같은 해결책도 함께 찾을 수 있었다.

우선 이클립스가 설치된 디렉터리(여기서는 "/usr/local/eclipse"로 가정)에 eclipse.sh를 다음과 같은 내용으로 만든다.

export GDK_NATIVE_WINDOWS=1
/usr/local/eclipse/eclipse &

그리고 "eclipse"를 직접 실행하는 대신 "eclipse.sh"를 실행하면 아쉬운대로 사용이 가능하다.

sudo vi /usr/local/eclipse/eclipse.sh

export GDK_NATIVE_WINDOWS=1
/usr/local/eclipse/eclipse &

sudo chmod 755 /usr/local/eclipse/eclipse.sh

AND

서버를 인터넷 공유기처럼 사용하려면 IP forwarding기능이 가능해야 하고 또한 DHCP 서버가 실행되고 있어야한다. 아래 예는 Ubuntu Linux에 eth0, eth1 두 개의 네트워크 카드가 설치돼 있으며, eth0는 인터넷과 eth1은 사설 IP(192.168.1.xxx)를 사용하는 내부 네트워크와 연결됐음을 가정하였다.

1. 다음 명령을 이용 IP forwarding이 가능하도록 한다.

sudo sysctl -w net.ipv4.ip_forward=1

2. 위 명령을 주어도 서버가 재 부팅 된다면 IP forwarding 기능이 활성화 되지 않기 때문에 부팅 시 자동으로 IP forwarding이 가능하도록 해야하는데 이를 위해서 /etc/sysctl.conf 파일의 #net.ipv4.ip_forward=1 부분의 주석 처리 '#'를 없애다.

sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1

3. 현재 IP forwarding 기능이 활성화 됐는지 여부를 확인하려면 아래 명령을 입력한다. 그 결과가 net.ipv4.ip_forward = 1 로 나오면 활성화 됐음을 의미하고 그렇지 않으면 활성화 되지 않았음을 의미한다.

sudo sysctl net.ipv4.ip_forward

4. 외부로 부터 내부로 들어오거나 내부에서 외부로 나가는 패킷을 가능하도록 하기 위해 아래 두 명령을 입력한다.

sudo /sbin/iptables -P FORWARD ACCEPT
sudo /sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

5. 위 명령 역시 부팅시 자동으로 실행되도록 하기 위해 /etc/rc.local 파일의 exit 0 윗 부분에 두 라인을 추가한다.

sudo vi /etc/rc.local

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

6. 이제 내부 네트워크의 컴퓨터들에게 IP를 할당해 줄 수 있도록 DHCP 서버를 아래 명령을 이용 설치한다.

sudo apt-get install dhcp3-server

7. 설치 후 /etc/dhcp3/dhcpd.conf의 내용을 아래와 같이 입력한다. 이 설정은 domain Name을 "mynetwork"로, Domain Name Server로 IP 주소가 61.41.153.2, 203.248.252.2인 두 대의 서버를 사용하며, 내부 네트워크에 연결된 컴퓨터가 IP 할당을 요구할 경우 192.168.1.100에서 192.168.1.254 사이의 값 중 하나를 할당해 주도록 한다.
 
sudo vi /etc/dhcp3/dhcpd.conf

ddns-update-style none;
option domain-name "mynetwork";
option domain-name-servers 61.41.153.2, 203.248.252.2;
option routers 192.168.1.1;

default-lease-time 42300;
max-lease-time 84600;
authoritative;

log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.100 192.168.1.254;
}

8. /etc/default/dhcp3-server 파일의 내용 중 INTERFACES 항목을 내부 네트워크에 연결된 네트워크 카드의 장치명으로 설정한다.

sudo vi /etc/default/dhcp3-server

INTERFACES="eth1"

9. 설정을 완료한 후 DHCP 서버를 실행하면 서버를 공유기처럼 사용할 수 있다.

sudo /etc/init.d/dhcp3-server start


AND

Ubuntu Linux에는 CVS가 기본적으로 설치돼있지 않다. 따라서 버전관리를 위해 CVS 서버를 설치하려면 다음 과정이 필요하다. 아래 예에서는 cvs를 CVS 사용자 ID 로 등록하고, /home/cvsroot를 CVS 저장소로 사용한다.

1. 다음 두 명령으로 xinetd와 cvs를 설치 한다.

sudo apt-get install xinetd
sudo apt-get install cvs

2. adduser 명령을 이룔 CVS 서버를 위한 사용자와 그룹 그리고 CVS 저장소를 위한 디렉터리를 생성한다. 아래 명령은 cvs 라는 ID를 가진 사용자 및 그룹을 만들고 홈 디렉터리로 /home/cvsroot 를 생성한다. 이 디렉터리는 나중에 CVS 저장소를 위해 사용할 것이다.

sudo adduser --home /home/cvsroot cvs

3. 사용자 cvs로 로그인 한 후 CVS 저장소를 만든다.

su - cvs
cvs -d /home/cvsroot init

4. 사용자 cvs 로부터  로그아웃 후 vi 편집기를 이용 xinetd 에 cvspserver를 등록한다.

sudo vi /etc/xinetd.d/cvspserver

service cvspserver
{
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/cvs
        server_args     = -f --allow-root=/home/cvsroot pserver
        disable         = no
        log_on_failure += USERID
}

5. cvspserver 등록을 마쳤으면 xinetd를 재가동 한다음 CVS를 사용할 수 있다. 물론 일반 사용자의 경우 CVS를 사용하려면 /home/cvsroot 디렉터리에 쓰기 권한이 있어야 한다.

sudo /etc/init.d/xinetd restart

AND

LVM 활용하기

서버관리/Linux 2009. 10. 19. 17:57
리눅스에서 LVM을 활용하면 여러개의 물리적인 디스크를 하나의 디스크처럼 사용할 수 있다. 이 예에서는 각각 160G(/dev/sdb), 500G(/dev/sdc), 250G(/dev/sdd) 용량의 HDD 세 개를 /members 라는 하나의 마운트 포인트로 액세스 할 수 있도록 LVM을 설정해 보겠다.

먼저 fdisk를 이용 파티션을 나누고 파티션 ID를 8e (Linux LVM)으로 설정해야 한다. 아래 예는 두 번째 SATA 디스크(/dev/sdb) 전체를 하나의 LVM으로 파티션 하는 과정을 보여준다. 아래 예에서 밑줄 굵은 글씨가 사용자에 의해 입력되는 값이다. 그리고 이탤릭체로 된 (enter_key) 부분은 해당 키를 누르라는 의미이다. fdisk 프로그램에서 'm'을 누르면 도움말이 출력된다.

root@info3:~# fdisk /dev/sdb

The number of cylinders for this disk is set to 19457.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19457, default 1): enter_key
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-19457, default 19457): enter_key
Using default value 19457

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x5d754a5f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       19457   156288321   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
root@info3:~#

위와 같은 방법으로 나머지 두 개의 디스크 /dev/sdc, /dev/sdd를 LVM 파티션으로 지정한다. 

나머지 디스크 모두 LVM으로 파티션 했으면 다음 단계로 pvcreate 명령을 이용 Physical Volume을 생성해야 한다.

root@info3:~# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
root@info3:~# pvcreate /dev/sdc1
  Physical volume "/dev/sdc1" successfully created
root@info3:~# pvcreate /dev/sdd1
  Physical volume "/dev/sdd1" successfully created
root@info3:~#

이제 세 개의 Physical Volumes을 data라 불리는 하나의 Volume Group로 vgcreate 명령을 이용 묶는다.

root@info3:~# vgcreate data /dev/sdb1 /dev/sdc1 /dev/sdd1
  Volume group "data" successfully created
root@info3:~#

현재 Volume Group의 정보는 vgdisplay 명령으로 확인할 수 있다. 

root@info3:~# vgdisplay
  --- Volume group ---
  VG Name               data
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               847.69 GB
  PE Size               4.00 MB
  Total PE              217008
  Alloc PE / Size       0 / 0   
  Free  PE / Size       217008 / 847.69 GB
  VG UUID               yPu2NU-dG4V-dPaf-zGDA-bM0O-S2Pi-LuEVDf
   
root@info3:~# 

위 내용을 보면 VG Size가 847.69 GB로 나타난다. 이제 이 모두를 lvcreate 명령을 이용 users란 이름의 Logical Volume을 생성할 것이다. 이 명령은 Volume Group 이름(data)을 -L, -n 옵션과 함께 주어 실행하는데, -L 옵션 뒤에는 Logical Volume의 크기를 -n 옵션 뒤에는 Logical Volume의 이름(users)을 준다.

root@info3:~# lvcreate -L 847G -n users data
  Logical volume "users" created
root@info3:~#

위 명령을 실행하면 /dev/data 디렉터리에 users 라는 Symbolic Link 파일이 생성되는데, 이 파일을 /dev/mapper/data-users에 링크돼 있다. 이제 마지막으로 파일시스템에서 액세스 가능하도록 Logical Volume을 포맷하고 마운트 하면 된다. 아래 예는 디렉터리 /members를 만들고 여기에 ext3 파일시스템으로 포맷한 Logical Volume users를 마운트 시킨다.

root@info3:/dev/data# mkfs.ext3 /dev/data/users
mke2fs 1.41.4 (27-Jan-2009)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
55508992 inodes, 222035968 blocks
11101798 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
6776 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
102400000, 214990848

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 38 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
root@info3:/dev/data# mkdir /members
root@info3:/dev/data# mount /dev/data/users /members
root@info3:/dev/data# df
파일시스템           1K-블럭 사용됨 사용가능 사용% 마운트 됨
/dev/sda1            237405788   5874220 219471976   3% /
tmpfs                   513228         0    513228   0% /lib/init/rw
varrun                  513228       128    513100   1% /var/run
varlock                 513228         0    513228   0% /var/lock
udev                    513228       168    513060   1% /dev
tmpfs                   513228         0    513228   0% /dev/shm
lrm                     513228      2192    511036   1% /lib/modules/2.6.28-15-generic/volatile
/dev/mapper/data-users
                     874208312    205024 829596096   1% /members
root@info3:/dev/data# 


AND