검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Create a Local Repository on Ubuntu 13.04 Server
참조 원문 : Create a Local Ubuntu Repository using Apt-Mirror and Apt-Cacher

  로컬 네트워크에 있는 다수의 시스템에 소프트웨어, 보안 업데이트를 자주 설치해야 한다면 로컬 우분투 저장소를 두는 것이 효율적입니다. 필요한 모든 패키지를 LAN을 통해 받을 수 있어 인터넷 대역폭을 아낄 수 있기 때문입니다. 이 글에서는 우분투 13.04 서버에 로컬 저장소를 설치하는 두 가지 방법을 소개합니다.

방법 1: APT-Mirror
  이 방법은 공인 저장소(우분투 메인 서버)로부터 모든 패키지를 끌어와 우리 서버의 로컬 하드 드라이브에 저장하는 방법입니다. 먼저 Apache 서버를 설치합니다. 이는 네트워크를 통해 패키지를 공유하기 위해 필요합니다. 그 후 APT-Mirror를 설치합니다.
$ sudo apt-get install apache2
$ sudo apt-get install apt-mirror
  최소 50GB 이상의 빈 공간이 필요합니다. 이 글에서는 /myrepo라는 디렉토리를 생성하여 모든 패키지를 그 디렉토리 안에 저장할 것입니다.
$ sudo mkdir /myrepo
  /etc/apt/mirror.list 파일을 열어서 아래에서 설명하고 있는 부분들을 변경합니다.
############# config ##################
#

## 주석을 해제하고 저장소 디렉토리를 설정 ##
set base_path    /myrepo

#
# 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 raring main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu raring-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu raring-updates main restricted universe multiverse [...]
  위 설정 파일에서 우분투 소스 목록을 추가할 수 있습니다. 이 글에서는 디폴트 13.04 소스 리스트를 사용합니다.

  32비트와 64비트를 모두 사용한다면 위 파일에서 저장소를 지정할 때 관련 내용을 넣어야 합니다. 32비트와 관련된 줄은 deb-i386로 시작해야 하며, 64비트와 관련된 줄은 deb-amd64로 시작해야 합니다. 수정을 마치면 아래 명령어로 저장소를 생성합니다.
$ sudo apt-mirror
[sudo] password for mirashi:
Downloading 2028 index files using 20 threads...
Begin time: Wed May 29 23:23:09 2013
[20]...
  이제 공인 저장소의 패키지가 로컬 저장소에 저장됩니다. 당연히 이 작업에는 상당한 시간이 소요됩니다. 참고로 중간에 중단했다가 후에 다시 실행하면 중단했던 부분부터 다시 재개하므로 부담없이 중간에 중단할 수 있습니다.

  위 명령어는 새로운 소프트웨어와 업데이트를 받기 위해 주기적으로 실행할 필요가 있습니다. /etc/cron.d/apt-mirror 파일을 열어서 아래 줄의 주석을 제거합니다.
0 4 * * *   apt-mirror      /usr/bin/apt-mirror > /var/spool/apt-mirror/var/cron.log
  이제 클라이언트가 http를 통해 패키지를 가져갈 수 있도록 만들어야 합니다. Apache의 DocumentRoot에 가서 아래와 같이 심볼릭 링크를 생성합니다. 기본적으로 Apache의 DocumentRoot는 FollowSymLinks 옵션을 가지고 있기 때문에 이것으로 해결할 수 있지만 보안을 강화하기 위해 해당 옵션을 제거한 상태라면 다시 추가하거나 Apache의 Alias 기능을 사용하는 등 다른 방법을 찾아야 합니다.
$ cd /var/www/html
$ sudo ln -s /myrepo/mirror/us.archive.ubuntu.com/ubuntu/ ubuntu

클라이언트 설정
  클라이언트에서 /etc/apt/sources.list 파일을 열어서 로컬 저장소 경로를 추가합니다.
[...]
deb http://192.168.1.200/ubuntu raring universe
deb http://192.168.1.200/ubuntu raring main restricted
deb http://192.168.1.200/ubuntu raring-updates main restricted
[...]


방법 2: APT-Cacher
  APT-Cacher는 이름처럼 클라이언트가 요청한 적이 있었던 패키지들을 보관했다가 클라이언트가 해당 패키지를 요구할 때 제공하는 방식입니다.

  이 방식도 Apache 서버를 설치해야 합니다. 그 후 APT-Cacher를 설치합니다.
$ sudo apt-get install apache2
$ sudo apt-get install apt-cacher
  이때 데몬(스탠드얼론)과 inetd 중 어느 방식으로 운영할지를 묻는데 원하는 방식을 선택합니다. 설치가 끝나면 /etc/default/apt-cacher 파일을 열어 AUTOSTART가 0으로 되어 있으면 1로 수정합니다.

  원한다면 /etc/apt-cacher/apt-cacher.conf 파일의 allowed_hosts와 denied_hosts 항목으로 캐시에 접근 가능/불가 호스트를 지정할 수 있습니다. 만약 해당 항목을 수정했다면 apt-cacher를 재시작합니다.
sudo /etc/init.d/apt-cacher restart
  이제 모든 클라이언트에서 /etc/apt/apt.conf.d/90-apt-proxy.conf 파일을 만들어 아래 내용을 넣습니다.
Acquire::http::Proxy "http://서버IP:3142";
2013/07/15 16:40 2013/07/15 16:40
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Find USB device details in Linux/Unix using lsusb command

1. lsusb를 통해 얻을 수 있는 정보
$ lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 05c8:021e Cheng Uei Precision Industry Co., Ltd (Foxlink)
Bus 001 Device 007: ID 0cf3:3005 Atheros Communications, Inc. AR3011 Bluetooth
Bus 002 Device 003: ID 0781:5567 SanDisk Corp. Cruzer Blade
  • Bus 002 : SanDisk USB가 연결된 버스 번호
  • Device 003 : 002 버스의 세 번째 장치임을 뜻함. 첫 번째 장치는 Linux Foundation 2.0 root hub, 두 번째 장치는 Intel Corp. Integrated Rate Matching Hub
  • ID 0781:5567 : 콜론 왼쪽에 있는 번호는 제조사 ID, 콜론 오른쪽에 있는 번호는 장치 ID
  • SanDisk Corp. Cruzer Blade : 제조사 및 장치명

2. 머신에 있는 USB 포트 개수 확인
$ find /dev/bus/
/dev/bus/
/dev/bus/usb
/dev/bus/usb/002
/dev/bus/usb/002/006
/dev/bus/usb/002/005
/dev/bus/usb/002/004
/dev/bus/usb/002/002
/dev/bus/usb/002/001
/dev/bus/usb/001
/dev/bus/usb/001/007
/dev/bus/usb/001/003
/dev/bus/usb/001/002
/dev/bus/usb/001/001

3. 연결된 USB 장치의 자세한 정보 출력
$ lsusb -D /dev/bus/usb/002/005
Device: ID 0951:1643 Kingston Technology DataTraveler G3 4GB
Couldn't open device, some information will be missing
Device Descriptor:
  bLength 18
  bDescriptorType 1
  bcdUSB 2.00
  bDeviceClass 0 (Defined at Interface level)
  bDeviceSubClass 0
  bDeviceProtocol 0
  bMaxPacketSize0 64
  idVendor 0×0951 Kingston Technology
  idProduct 0×1643 DataTraveler G3 4GB
  bcdDevice 1.00
  iManufacturer 1
  iProduct 2
  iSerial 3
  bNumConfigurations 1
  Configuration Descriptor:
    bLength 9
    bDescriptorType 2
    wTotalLength 32
    bNumInterfaces 1
    bConfigurationValue 1
    iConfiguration 0
    bmAttributes 0×80
      (Bus Powered)
    MaxPower 200mA
    Interface Descriptor:
      bLength 9
      bDescriptorType 4
      bInterfaceNumber 0
      bAlternateSetting 0
      bNumEndpoints 2
      bInterfaceClass 8 Mass Storage
      bInterfaceSubClass 6 SCSI
      bInterfaceProtocol 80 Bulk-Only
      iInterface 0
      Endpoint Descriptor:
        bLength 7
        bDescriptorType 5
        bEndpointAddress 0×81 EP 1 IN
        bmAttributes 2
          Transfer Type Bulk
          Synch Type None
          Usage Type Data
        wMaxPacketSize 0×0200 1x 512 bytes
        bInterval 0

4. 모든 USB 포트 및 연결된 USB 장치의 자세한 정보 출력
$ lsusb -v

5. 시스템에 있는 모든 대용량 저장 장치 출력
  아래 결과로 대용량 저장 장치가 3개 있음을 알 수 있습니다.
$ lsusb -v | grep -Ei '(idVendor|Mass\ Storage)'
idVendor 0×2006
bInterfaceClass 8 Mass Storage
idVendor 0×0781 SanDisk Corp.
bInterfaceClass 8 Mass Storage
idVendor 0×0951 Kingston Technology
bInterfaceClass 8 Mass Storage

6. USB 장치들의 프로토콜 버전 출력
$ lsusb -v | grep -i bcdusb
bcdUSB 1.10
bcdUSB 2.00
bcdUSB 2.00
bcdUSB 2.00
  버전에 따른 속도는 아래와 같습니다.
  • USB 1.1 : 12Mb/s
  • USB 2.0 : 480Mb/s
  • USB 3.0 : 5Gb/s

7. USB 포트가 지원하는 속도를 트리 형태로 출력
$ lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
   |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
   |__ Port 1: Dev 6, If 0, Class=stor., Driver=usb-storage, 480M
   |__ Port 1: Dev 6, If 1, Class=vend., Driver=, 480M
   |__ Port 2: Dev 7, If 0, Class=stor., Driver=usb-storage, 480M
   |__ Port 3: Dev 5, If 0, Class=stor., Driver=usb-storage, 480M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
   |__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
   |__ Port 3: Dev 3, If 0, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
   |__ Port 3: Dev 3, If 1, Class='bInterfaceClass 0x0e not yet handled', Driver=uvcvideo, 480M
   |__ Port 4: Dev 7, If 0, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
   |__ Port 4: Dev 7, If 1, Class='bInterfaceClass 0xe0 not yet handled', Driver=btusb, 12M
2013/07/15 14:33 2013/07/15 14:33
Posted
Filed under 프로그램과 명령어/관리와 유지보수
  지금에서야 이런 기본 명령어가 있다는 걸 알았다는 게 좀 신기하군요. 블록 디바이스명을 트리 형태로 보여주고 그와 함께 메이저 및 마이너 번호, 용량, 마운트 포인트 등을 출력하는 명령어로 USB의 장치명을 찾을 때 특히 유용할 것 같습니다.
$ lsblk
NAME                         MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda                            8:0    0    20G  0 disk
├─sda1                         8:1    0   243M  0 part /boot
├─sda2                         8:2    0     1K  0 part
└─sda5                         8:5    0  19.8G  0 part
  ├─ubuntu--vg-root (dm-0)   252:0    0  15.8G  0 lvm  /
  └─ubuntu--vg-swap_1 (dm-1) 252:1    0     4G  0 lvm  [SWAP]
sr0                           11:0    1  1024M  0 rom 
2013/07/15 12:55 2013/07/15 12:55
Posted
Filed under 프로그램과 명령어/모니터링
참조 원문 : Visualize log files using gltail on CentOS RHEL Fedora Debian Ubuntu
관련 글 : [리눅스] 접속 로그를 실시간으로 시각화해서 보여주는 Logstalgia

  gltail은 얼마 전에 소개한 Logstalgia와 비슷한 프로그램으로 SSH를 이용해 원하는 서버의 로그 파일을 실시간으로 시각화해서 보여주는 프로그램입니다. 아래는 프로그램의 주요 특징입니다.
  • 실시간
  • 다수의 서버에 있는 다수의 로그 파일 처리 가능
  • 레이아웃 설정 가능
  • 다양한 로그 파일 분석 능력(Apache, Rails, IIS, Postfix/spamd/clamd, Nginx, Squid, PostgreSQL, PureFTPD, MySQL, TShark, qmail/vmpop3d)
  • 커스텀 이벤트
  • 비율, 총, 평균 값 출력
  • 'tail'을 할 수 있다면 뭐든 시각화 가능
  • Ruby로 작성했으며 net-ssh, chipmunk, ruby-opengl을 사용
  • 무료(GPLv2)

1. 필요한 라이브러리 설치
(1) 레드햇 계열
# yum groupinstall "Development Tools"
# yum install freeglut libX11-devel mesa-libGL-devel perl-Time-HiRes freeglut-devel readline-devel libffi-devel libtool bison libxml2-devel libxslt-devel zlib zlib-devel sqlite-devel git openssl-devel
(2) 데비안 계열
# sudo apt-get install build-essential libx11-dev libgl1-mesa-dev libxext-dev freeglut3-dev freeglut3 xlibmesa-gl xlibmesa-glu libgl1-mesa-dri libgl1-mesa-glx mesa-common-dev git libssl-dev

2. Ruby와 필요한 gem 설치
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p392.tar.gz
tar zxvf ruby-1.9.3-p392.tar.gz
cd ruby-1.9.3-p392
./configure --prefix=/usr/local --enable-shared --disable-install-doc --with-opt-dir=/usr/local/lib
make
make install
gem install chipmunk net-ssh-gateway net-ssh mkrf ftools net-ssh ruby-opengl file-tail
gem install opengl -v 0.7.0.pre1

3. github를 사용하여 gltail 설치
git clone git://github.com/Fudge/gltail.git
cd gltail

4. 설정 파일 수정
  config.yaml 파일을 열어서 모니터할 서비스를 추가합니다. 파일은 아래와 같은 형식으로 되어 있습니다.
servers:

site1:
    host: foobar.com
    user: foo
    password: topsecret
    command: tail -f -n0
    files: /var/log/apache/access_log
    parser: apache
    color: 0.2, 1.0, 0.2, 1.0
rails:
    host: anotherfunsite.com
    user: anotherfunuser
    port: 222
    command: tail -f -n0
    files: /var/www/apps/funapp/current/log/production.log
    parser: rails
    color: 0.2, 0.2, 1.0, 1.0
dev:
    host: clockingit.com
    source: local
    files: /var/www/clockingit/logs/production.log
    parser: rails
    color: 0.2, 0.2, 1.0, 1.0

(이하 생략)

4. gltail 실행
  설정 파일을 사용해 gltail을 실행합니다.
cd bin
./gl_tail ../config.yaml
  사용할 수 있는 옵션은 아래 명령어로 볼 수 있습니다.
./gl_tail ../config.yaml -h
  분석할 수 있는 로그의 종류는 아래 명령어로 볼 수 있습니다.
./gl_tail ../config.yaml -p

출처 : http://linuxdrops.com

2013/07/15 12:06 2013/07/15 12:06
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문 : Create and Restore manual Logical Volume Snapshots

1. 소개
  LV(Logical Volume) 스냅샷을 생성하면 로지컬 볼륨의 현재 상태를 고정시켜 쉽게 백업하거나 스냅샷을 찍었을 때의 상태로 되돌릴 수 있습니다. 쉽게 말하자면 백업 대상인 파일들이 계속 변한다면 백업이 불가능하므로 특정 시간을 기준으로 파일들의 내용을 얼려버리는 겁니다. 이에 대한 개념과 원리는 밑에서 따로 설명합니다. 참고로 이 스냅샷은 VMware에서 같은 이름의 유사한 기능으로 존재합니다.


2. 이 글에서 다룰 내용
  이 글에서는 LVM(Logical Volume Manager)을 다룰 줄 모른다는 가정하에 1기가 용량을 가진 가짜 하드 드라이브 /dev/sdb를 가지고 아래의 내용을 진행합니다.
  1. /dev/sdb 드라이브에 2개의 파티션을 만든다. 이 파티션들은 "8e Linux LVM" 타입으로 설정할 것이며 PV(Physical Volume)을 생성하는데 사용한다.
  2. 두 파티션을 생성하면 pvcreate 명령어로 PV를 생성한다.
  3. 새로운 VG(Volume Group)를 생성하고 ext4 파일시스템으로 300MB짜리 LV(Logical Volume)를 1개 생성한다.
  4. 새로운 LV를 마운트하고 실험용 데이터를 넣는다.
  5. 스냅샷을 찍고 실험용 데이터를 삭제한다.
  6. LV 스냅샷을 사용해 롤백한다.


3. LV(Logical Volume) 생성
3.1. LVM(Logical Volume Manager)의 기본 개념
  LVM을 사용하면 다수의 PV(Physical Volume)로 구성된 하나의 VG(Volume Group)를 생성할 수 있습니다. 하드 드라이브 전체가 PV일 수도 있고 하나의 파티션이 PV일 수도 있습니다. 일단 VG를 생성하면 그것을 이루고 있는 PV의 구조는 신경쓰지 않으면서 다수의 LV(Logical Volume)를 생성할 수 있습니다. VG에 PV를 추가하면 VG의 크기를 확장할 수 있으며 이를 통해 그 안에 새로운 LV를 생성하거나 기존의 LV를 확장할 수 있습니다.

3.2. 파티션 생성
  먼저 2개의 파티션을 PV용으로 생성합니다. 사실 파티션을 2개 만드는 이유는 2개의 PV로 하나의 VG를 만드는 것을 보여주기 위한 것일 뿐 별다른 의미는 없으므로 디스크 전체를 하나의 파티션으로 만들어 작업해도 상관 없습니다. 아래가 작업 대상인 물리 디스크의 정보입니다.
# fdisk -l /dev/sdb

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x335af99c

   Device Boot      Start         End      Blocks   Id  System
  fdisk로 2개의 파티션을 생성합니다. 물론 fdisk로 안 해도 상관 없습니다.
# fdisk /dev/sdb
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +400M

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (821248-2097151, default 821248):
Using default value 821248
Last sector, +sectors or +size{K,M,G} (821248-2097151, default 2097151): +200M

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

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

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

Calling ioctl() to re-read partition table.
Syncing disks.
  아래는 위 작업으로 생성한 파티션을 출력한 모습입니다.
# fdisk -l /dev/sdb

Disk /dev/sdb: 1073 MB, 1073741824 bytes
255 heads, 63 sectors/track, 130 cylinders, total 2097152 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x335af99c

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      821247      409600   8e  Linux LVM
/dev/sdb2          821248     1230847      204800   8e  Linux LVM

3.3. PV(Physical Volume) 생성
  이제 pvcreate 명령어로 두 파티션을 PV로 만듭니다.
# pvcreate /dev/sdb[1-2]
  Writing physical volume data to disk "/dev/sdb1"
  Physical volume "/dev/sdb1" successfully created
  Writing physical volume data to disk "/dev/sdb2"
  Physical volume "/dev/sdb2" successfully created

3.4. VG(Volume Group) 생성
  vgcreate 명령어로 /dev/sdb1과 /dev/sdb2라는 PV로 구성됐으며 "volume_group"이라는 이름을 가진 하나의 VG를 생성합니다.
# vgcreate volume_group /dev/sdb1 /dev/sdb2
  Volume group "volume_group" successfully created
  vgdisplay 명령어를 사용하면 VG의 정보를 볼 수 있습니다.
# vgdisplay
  --- Volume group ---
  VG Name               volume_group
  System ID            
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               592.00 MiB
  PE Size               4.00 MiB
  Total PE              148
  Alloc PE / Size       0 / 0  
  Free  PE / Size       148 / 592.00 MiB
  VG UUID               37jef7-3q3E-FyZS-lMPG-5Jzi-djdO-BgPIPa

3.5. LV(Logical Volume) 생성
  이제 LV를 생성할 수 있습니다. LV의 크기는 당연히 VG의 크기를 넘을 수 없습니다. 여기서는 크기가 200MB이고 "volume1"이란 이름으로 생성하겠습니다.
# lvcreate -L 200 -n volume1 volume_group
  Logical volume "volume1" created
  lvdisplay 명령어를 사용하면 LV의 정보를 볼 수 있습니다.
# lvdisplay
  --- Logical volume ---
  LV Path                /dev/volume_group/volume1
  LV Name                volume1
  VG Name                volume_group
  LV UUID                YcPtZH-mZ1J-OQQu-B4nj-MWo0-yC18-m77Vuz
  LV Write Access        read/write
  LV Creation host, time debian, 2013-05-08 12:53:17 +1000
  LV Status              available
  # open                 0
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           254:0
  위의 LV Path 값을 이용하여 LV에 ext4 파일시스템을 생성합니다.
# mkfs.ext4 /dev/volume_group/volume1

4. LV(Logical Volume) 스냅샷
  드디어 이 글에서 설명하고자 하는 주제에 도달했습니다. 이제 위에서 만든 LV에 데이터를 넣고 스냅샷을 생성한 후 그 데이터를 지우고 스냅샷을 이용해 복구하겠습니다.

4.1. 스냅샷의 개념
  스냅샷을 이해하려면 먼저 LV가 무엇으로 구성되어 있는가와 데이터를 어떻게 저장하는가를 이해해야 합니다. 이 개념은 심볼릭 링크와 비슷합니다. 파일에 대한 심볼릭 링크를 만들면 실제 파일을 복사하지 않고 그 파일이 있는 위치만 보관하듯이 LV도 그런 정보만 보관하며 아래의 두 가지 기초 정보로 구성되어 있습니다.
  • 메타데이터 포인터들
  • 데이터 블록
  스냅샷을 생성하면 LVM은 모든 메타데이터 포인터를 별도의 LV에 복사합니다. 메타데이터는 용량을 별로 차지하지 않으므로 생성 자체만 생각한다면 2GB 크기의 LV를 5MB 크기의 스냅샷 볼륨이 커버하는 것도 가능합니다. 스냅샷 볼륨의 크기는 원본 LV의 데이터에 변화가 발생할 때만 커집니다. 그 이유는 원본 LV에 있는 파일을 삭제하거나 수정할 때마다 그 파일(데이터)을 스냅샷 볼륨에 복사하기 때문입니다. 작업 중에 변경사항이 많이 발생하지 않는다면 원본 LV의 5~10% 정도의 크기로 스냅샷 볼륨을 생성하면 됩니다. 변경사항이 많이 발생한다면 10% 보다 훨씬 많이 필요할 수 있습니다.

4.2. 실험용 데이터 복사 후 스냅샷 생성
  먼저 "volume1"을 위한 마운트 포인트 디렉토리를 생성하고 마운트를 합니다.
# mkdir /mnt/volume1
# mount /dev/volume_group/volume1 /mnt/volume1
  마운트 포인트에 들어가서 실험용 데이터를 복사합니다.
# cd /mnt/volume1
# cp -r /sbin/ .
# du -s sbin/
8264    sbin/
  이제 LV의 스냅샷을 생성합니다. 이 스냅샷은 별도의 LV에 저장되기 때문에 사실상 별도의 LV를 생성하게 됩니다. 아래 명령어는 20MB 크기의 "volume1_snapshot"이란 스냅샷용 LV를 생성합니다.
# lvcreate -s -L 20M -n volume1_snapshot /dev/volume_group/volume1
  Logical volume "volume1_snapshot" created
  lvs 명령어로 생성된 스냅샷용 LV를 확인합니다.
# lvs
  LV               VG           Attr     LSize   Pool Origin  Data%  Move Log Copy%  Convert
  volume1          volume_group owi-aos- 200.00m
  volume1_snapshot volume_group swi-a-s-  20.00m      volume1   0.06
  스냅샷이 생성됐으므로 "volume1"의 데이터를 변경하기 위해 복사했던 파일들을 삭제합니다.
# cd /mnt/volume1
# rm -fr
# rm -fr sbin/
  실행 후 lvs 명령어로 "volume1_snapshot"의 Data%를 보면 값이 올라간 것을 확인할 수 있습니다. 원한다면 스냅샷 볼륨을 마운트하여 "volume1"의 원본 데이터가 여전히 존재하는 것을 확인할 수 있습니다.

4.3. LV 스냅샷을 이용한 복구
  복구를 진행하기 전에 /mnt/volume1/sbin이 없는 것을 확인합니다.
# du -s /mnt/volume1/sbin
du: cannot access `/mnt/volume1/sbin': No such file or directory
  LV 스냅샷을 이용한 복구는 두 단계로 이루어집니다.
  • 다음 번 LV 활성화 때 스냅샷 복구가 진행되도록 예약
  • LV 비활성화 후 활성화
  스냅샷 복구를 예약하기 위해 아래 명령어를 실행합니다.
# lvconvert --merge /dev/volume_group/volume1_snapshot
  Can't merge over open origin volume
  Merging of snapshot volume1_snapshot will start next activation.
  사용 중인 볼륨에 스냅샷을 병합하는 것은 불가하므로 다음 활성화 때 병합(즉, 복구)하겠다는 메시지가 나옵니다. 그러므로 복구를 진행하려면 "volume1"을 재활성화해야 합니다. 먼저 "volume1"을 언마운트 후 볼륨을 비활성화 및 활성화합니다.
# umount /mnt/volume1
# lvchange -a n /dev/volume_group/volume1
# lvchange -a y /dev/volume_group/volume1
  마지막으로 LV "volume1"을 다시 마운트하여 데이터가 복구된 것을 확인합니다.
# mount /dev/volume_group/volume1 /mnt/volume1
# du -s /mnt/volume1/sbin
8264    /mnt/volume1/sbin
2013/07/14 23:04 2013/07/14 23:04
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Configuring VNC Server Access on a Redhat Linux

  VNC는 소개한 적이 여러 번 있으므로 레드햇 계열의 배포판에 설치하는 것을 중점으로 핵심 내용만 나열하겠습니다.

1. VNC 서버 설치
# yum install tigervnc-server

2. VNC 세션 설정
  각 계정마다 개별적인 세션을 부여하고 싶다면 VNC 설정 파일인 /etc/sysconfig/vncservers 파일을 수정합니다. 아래는 "lubos"라는 계정을 위해 추가하는 내용입니다.
VNCSERVERS="2:lubos"
VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -localhost"
  위의 내용을 추가하면 VNC session 2가 지정된 해상도로 lubos라는 계정에 할당됩니다. -nolisten과 -localhost는 보안을 위해 추가한 것으로 VNC에 직접 접속할 계획이라면 두 옵션을 뺀 후 방화벽에서 VNC 포트를 열어야 합니다. 이 글에서는 보안을 위해 SSH 터널을 사용하는 쪽으로 설명하겠습니다.

  VNC 서비스를 시작하기 전에 /etc/sysconfig/vncservers에 설정한 각 계정의 세션을 위한 VNC 패스워드를 생성해야 합니다. 해당 계정으로 변경 후 vncpasswd 명령어를 사용합니다.
[root@localhost ~]# su lubos
[lubos@localhost root]$ vncpasswd
Password:
Verify:
  이제 VNC 서비스를 시작합니다.
# service vncserver start

3. VNC 서버에 직접 접속
  SSH 터널을 사용하지 않고 직접 접속할 수 있게 설정했다면 접속을 위해 먼저 방화벽을 적절히 설정해야 합니다. 그 후 아래와 같은 방법으로 쉽게 접속할 수 있습니다.
$ vncviewer 서버주소:2
Connected to RFB server, using protocol version 3.8
Performing standard VNC authentication
Password:
Authentication successful
  서버주소 뒤에 있는 2는 아까 계정에 할당한 세션 번호입니다. 패스워드를 입력하면 세션이 시작됩니다.

4. SSH 터널을 통해 VNC 서버에 접속
  vncviewer의 -via 옵션을 사용하면 자동으로 ssh 터널을 만들어주기 때문에 쉽게 접속할 수 있습니다.
$ vncviewer -via lubos@서버주소 localhost:2
2013/07/14 00:13 2013/07/14 00:13
Posted
Filed under 프로그램과 명령어/모니터링
참조 원문 : Apache / Nginx: Visualize Web Server Access Log In Real Time

  Logstalgia는 웹사이트 접속 로그를 직관적으로 보여주는 툴로 Apache, Lighttpd, Nginx의 접속 로그를 분석할 수 있습니다. OpenGL을 지원하는 비디오 카드가 필요하기 때문에 상용 서버에서 사용하기 힘들 것이라 생각할 수도 있지만 ssh를 이용하면 원격 서버에서 로그 파일을 읽어서 보는 것이 가능하기 때문에 큰 문제는 없습니다.

(출처 : 참조 원문 사이트)

1. 필요조건
  1. OpenGL을 지원하는 비디오 카드
  2. 리눅스 OS.

2. 설치(우분투 기준)
(1) 바이너리 패키지를 이용한 방법
$ sudo apt-get install logstalgia
(2) 소스 코드를 이용한 방법
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev
$ cd /tmp
$ wget https://logstalgia.googlecode.com/files/logstalgia-1.0.3.tar.gz
$ tar xvf logstalgia-1.0.3.tar.gz
$ cd logstalgia
$ ./configure
$ make
$ sudo make install

3. 사용법
# 디폴트 설정으로 로그 파일 분석
$ logstalgia /var/www/apache2/access.log

# 표준 입력으로 로그 읽기
$ tail -f
/var/www/apache2/access.log | logstalgia --sync

# 원격 서버에서 로그 파일 분석
ssh 계정명@서버명 tail -f
/var/www/apache2/access.log | logstalgia --sync

# 결과물을 비디오 파일로 저장
$ logstalgia -1280x720 --output-ppm-stream output.ppm
/var/www/apache2/access.log

# 원격 서버에서 결과물을 비디오 파일로 저장
$ ssh
계정명@서버명 tail -f /var/www/apache2/access.log | logstalgia -1280x720 --output-ppm-stream --sync output.ppm

# ffmpeg를 사용해서 .ppm 파일을 mp4 파일로 변환
$ ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i output.ppm -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 logvideo.mp4

4. 단축키
  • n : 다음 로그 항목으로 점프
  • +/- : 시뮬레이션 속도 조정
  • </> : 시간 단위 조정
  • Esc : 종료
2013/07/13 23:32 2013/07/13 23:32
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : What is RCRON.. & How to Setup High Availability of cron Jobs Using RCRON

  HA(High Availability) 환경에서 cron을 사용해보신 분들이라면 이 프로그램이 유용하단 걸 동감하실 수 있으실 겁니다. 서버가 2대 있고 이 2대가 클러스터 구성일 때 액티브 서버에서만 실행되어야 할 cron 스케줄이 있다면 꽤 귀찮은 일이 생깁니다. 액티브와 스탠바이가 바꼈을 때 두 서버의 cron을 수동으로 수정해야 하기 때문이죠. Rcron은 이런 경우에 사용하는 프로그램으로서 구성 서버들 간의 상태를 확인하고 액티브 상태의 서버에서만 지정한 작업을 실행할 수 있게 해줍니다.

  그런데 rcron은 다른 서버의 생존을 파악하는 능력이 없기 때문에 그 역할을 위한 프로그램을 추가로 함께 사용해야 합니다. 이를 위해 이 글에서는 keepalived라는 별도의 데몬을 사용할 것입니다. Keepalived는 상대 노드에 신호를 보내고 응답이 없을 경우 링크가 죽었다고 판단하는 역할을 합니다.

  여기서는 하나의 노드를 keepalived 마스터로 설정하고 다른 한 노드를 keepalived 백업으로 설정할 겁니다. 마스터 노드는 rcron 상태가 액티브로 되며, 백업 노드는 패시브로 설정됩니다. 마스터 노드는 죽을 때 백업 노드에게 0 우선순위 신호를 보내며 이를 받은 백업 노드는 마스터 노드가 되어 rcron을 액티브 상태로 전환합니다. 그러다가 이전의 마스터 노드가 다시 살아나면 마스터 권한을 넘긴 후 백업 모드로 돌아가게 설정할 겁니다.

  설정 환경은 레드햇 계열 배포판인 것으로 가정합니다.


1. /etc/sysctl.conf 파일을 수정하여 두 노드의IP 포워딩 활성화시키기
net.ipv4.ip_forward = 1
# sysctl -p      ; 리부팅 없이 변경사항 적용

2. 두 노드에 EPEL 저장소 추가
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

3. 두 노드에 필요한 패키지 설치
# yum install subversion byacc flex gcc

4. 프록시 서버를 통해 인터넷 연결을 할 경우 svn에 대한 http_proxy 설정(직접 인터넷 연결을 할 경우 생략)
# mkdir /root/.subversion/
#  vi ~/.subversion/servers
http-proxy-exceptions = *.example.com
http-proxy-host = www.example.com
http-proxy-port = 8080
http-compression = no

5. SVN으로 rcron 설치
# cd /root;
# svn co http://rcron.googlecode.com/svn/trunk rcron
# cd rcron/rcron
# ./configure
# make
# make install

6. 두 노드에 디렉토리 및 설정 파일 생성
# mkdir /etc/rcron/
# vi /etc/rcron/rcron.conf
(1) 마스터 서버 노드
  아래 내용 입력
# An arbitrary name
cluster_name        = cluster

# A file containing either the word "active" or the word "passive"
state_file          = /var/run/rcron/state

# The default state in case state_file can't be read
#default_state       = active
syslog_facility     = LOG_CRON
syslog_level        = LOG_INFO

# We can tune jobs niceness/priorities
nice_level          = 19
  아래 명령어 실행
# mkdir /var/run/rcron
# touch /var/run/rcron/state
# echo "active" > /var/run/rcron/state
(2) 백업 서버 노드
  아래 내용 입력
# An arbitrary name
cluster_name = cluster
# A file containing either the word "active" or the word "passive"
state_file = /var/run/rcron/state
# The default state in case state_file can't be read
#default_state = passive
syslog_facility = LOG_CRON
syslog_level = LOG_INFO
# We can tune jobs niceness/priorities
nice_level = 19
  아래 명령어 실행
# mkdir /var/run/rcron
# touch /var/run/rcron/state
# echo "passive" > /var/run/rcron/state

7. 두 노드에 Keepalive 패키지 설치
(1) 최신 소스 다운로드
# cd /root
# wget http://cgit.luffy.cx/keepalived/snapshot/keepalived-1.2.7.tar.gz
(2) RPM BUILD 패키지 설치
# yum -y install rpm-build
(3) 압축 풀기 및 keepalived.spec.in 파일 수정
# tar -zxvf keepalived-1.2.7.tar.gz
# mkdir -p /root/rpmbuild/SOURCES/
# cp /root/keepalived-1.2.7.tar.gz /root/rpmbuild/SOURCES/
# vi /root/keepalived-1.2.7/keepalived.spec.in
(Version 1.2.2를 Version 1.2.7로 수정)
# yum -y install popt*
# cd /root/keepalived-1.2.7
# rpmbuild -ba keepalived.spec.in
  위 명령어를 사용하면 소스를 이용해 컴파일된 RPM이 /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm라는 경로 및 파일명으로 생성됩니다. 이 파일을 이용해 설치합니다.
# rpm -ivh /root/rpmbuild/RPMS/x86_64/keepalived-1.2.7-5.x86_64.rpm

8. keepalived 설정
(1) 마스터 노드(172.16.243.144)
# vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 31
priority 101
advert_int 5
vrrp_unicast_bind 172.16.243.144
vrrp_unicast_peer 172.16.243.145

authentication {
auth_type PASS
auth_pass 1111
}

notify_backup "/bin/echo passive > /var/run/rcron/state"
notify_master "/bin/echo active > /var/run/rcron/state"
notify_fault "/bin/echo passive > /var/run/rcron/state"
}
(2) 백업 노드(172.16.243.145)
# vi /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 31
priority 100
advert_int 5
vrrp_unicast_bind 172.16.243.145
vrrp_unicast_peer 172.16.243.144

authentication {
auth_type PASS
auth_pass 1111
}

notify_backup "/bin/echo passive > /var/run/rcron/state"
notify_master "/bin/echo active > /var/run/rcron/state"
notify_fault "/bin/echo passive > /var/run/rcron/state"
}

9. 두 노드에 실험용 crontab 항목 생성
* * * * * /usr/local/bin/rcron --conf /etc/rcron/rcron.conf echo `date` >> /tmp/output
  두 노드 모두 keepalive 서비스를 시작합니다.
# service keepalived start ; chkconfig keepalived on

10. keepalived 데몬이 죽을 경우에 대비
  아래의 crontab 항목을 추가합니다.
* * * * * * /root/keep-alive-monitor
  그리고 아래 스크립트를 생성합니다.
# vi /root/keep-alive-monitor

#!/bin/sh
echo "test" >> /tmp/monitor;
ps -ef|grep -v grep|grep -i keepalived;
if [ $? -eq 0 ] ; then
exit 0
else
echo "passive" > /var/run/rcron/state;
/etc/init.d/keepalived restart;
fi
2013/07/13 22:52 2013/07/13 22:52