Tuesday, June 8, 2010

ตัวอย่างการทำ rsync

การทำ rsync กันระหว่างเครื่องที่เป็น FreeBSD และ Debian
นะครับ สามารถไปประยุกต์ใช้ ระหว่าง OS Unix ตัวอื่นได้เหมือนกัน .. เริ่มกันเลยครับ
ฝั่ง Server
Step 1: Install rsync
freebsd-1# cd /usr/ports/net/rsync
freebsd-1# make install clean
Step 2: Config rsyncd.conf
freebsd-1# vi /usr/local/etc/rsyncd.conf
ใส่ข้อมูลไปดังนี้ครับ
[www]
comment = web server backup
path = /home/ton # ตรงนี้เป็น path ของ server ที่เราต้องการ backup
auth users = ton # user ที่ใช้ในการ Authen
uid = ton
gid = ton
secrets file = /usr/local/etc/rsyncd.secrets # ที่เก็บ file สำหรับเก็บ user-passwd
read only = no
Step 3: Create rsyncd.secrets
freebsd-1# vi /usr/local/etc/rsyncd.secrets
ใส่
ton:123456
freebsd-1# chmod 600 /usr/local/etc/rsyncd.secrets
Step 4: Edit rc.conf
freebsd-1# vi /etc/rc.conf
ใส่
rsyncd_enable=”YES”
Step 5: Start Rsync daemon
freebsd-1# /usr/local/etc/rc.d/rsyncd start
Step 6: Rsync daemon ลองดูว่ามี daemon ประมาณนี้หรือยัง
freebsd-1# sockstat | grep rsync
root rsync 60398 3 dgram -> /var/run/logpriv
root rsync 60398 4 tcp6 *:873 *:*
root rsync 60398 5 tcp4 *:873 *:*
ถ้ามีก็เป็นอันเรียบร้อยแล้วครับสำหรับฝั่ง Server ของเรา
ฝั่ง Client
Step 1: Install rsync
debian-client# apt-get install rsync
Step 2: Test rsync
debian-client# rsync -avz -e ssh ton@server1.example.com:/home/ton/ /home/ton/
Step 3: Create The Keys On mirror.example.com
debian-client# mkdir /root/rsync
debian-client# ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase):
<– Enter
Enter same passphrase again:
Your identification has been saved in /root/rsync/mirror-rsync-key.
Your public key has been saved in /root/rsync/mirror-rsync-key.pub.
The key fingerprint is:
6c:34:c9:29:cf:16:a3:c8:72:c0:28:b3:c6:61:75:a2 root@www
<– Enter
Step 4: Copy our public key to server1.example.com:
debian-client# scp /root/rsync/mirror-rsync-key.pub ton@server1.example.com:/home/ton/
กลับมาดูที่ฝั่ง Server อีกครั้งครับ
Step 7: Create authorized_keys
(Login as ton!)
freebsd-1# mkdir ~/.ssh
freebsd-1# chmod 700 ~/.ssh
freebsd-1# mv ~/mirror-rsync-key.pub ~/.ssh/
freebsd-1# cd ~/.ssh
freebsd-1# touch authorized_keys
freebsd-1# chmod 600 authorized_keys
freebsd-1# cat mirror-rsync-key.pub >> authorized_keys
Step 8: Connect from mirror.example.com only
(Still as ton!)
freebsd-1# vi /home/someuser/.ssh/authorized_keys
ใส่ เข้าไปก่อนข้อความใน file เดิม
command=”/home/ton/rsync/checkrsync”,from=”mirror.example.com”,no-port-forwardin
g,no-X11-forwarding,no-pty
ตอนนี้ก็เป็นอันเสร็จแล้วครับสำหรับฝั่ง Server เราจะสามารถใช้ rsync ผ่าน sshd ได้
โดยไม่ต้องใส่ user - password ทำให้สะดวกขึ้นเวลาทำ auto backup
มาดูที่ฝั่ง Client กันอีกครั้งครับ
Step 5: Test rsync
debian-client# rsync -avz –delete -e “ssh -i /root/rsync/mirror-rsync-key”
ton@server1.example.com:/home/ton/ /home/ton/
Step 6: Create crond job
debian-client# crontab -e
ใส่
*/5 * * * * /usr/bin/rsync -azq –delete -e “ssh -i /root/rsync/mirror-rsync-key”
ton@server1.example.com:/home/ton/ /home/ton/
ก็เสร็จแล้วครับสำหรับการทำ rsync ระหว่าง FreeBSD กับ debian

Monday, June 7, 2010

Screen command

คำสั่ง screen

คำสั่ง screen คือคำสั่งที่เก็บ session ของงานไว้โดนที่เราสามารถเรียกมาดูใหม่ได้ถึงแม้จะปิด terminal นั้นทิ้งไปแล้ว

วิธีใช้

ขั้นแรกต้องสร้าง ~/.screenrc ก่อนดังนี้
# use visual bell
vbell on
# replace ctrl-A by ctrl-O
escape ^Oo
# set a big scrolling buffer
defscrollback 5000
# Set the caption on the bottom line
caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"
  • เวลาเรียกใช้งานเรียก
screen
  • พอเรียกเสร็จจะมีหน้าจอโปรแกรม screen ให้เรากด space หรือ enter จากนั้นเราจะได้ prompt ใหม่ซึ่งเป็น prompt จากคำสั่ง screen
  • เรียกใช้โปแกรมภายใต้คำสั่ง screen ต่อได้เลยเช่น
irssi
  • ถ้าใช้เสร็จแล้วอยามf
กจะปิด connectin ก็กด ปิด terminal นั้นไปเลย หรือกด shot key
ctrl+o d
  • ถ้าต้องการกลับมาแสดงหน้าจอของโปรแกรมที่เรียกค้างไว้ให้สั่ง
screen -r -d

การใช้งานขั้นสูง

  • เราสามารถเปิด session ของscreen ได้หลายๆอันเช่นหน้าแรกเปิด irssi หน้าสองเปิด top แต่อยู่ใน terminal เดียวกันทำได้ดังนี้
screen
irssi
    • หลังจากสั่ง2คำสั่งแล้ว ให้กดshotcut ตามนี้ เพื่อสร้าง session ใหม่
ctrl+o c 
    • จากนั้นสั่งคำสั่งต่อไปเลย
top
    • จะเห็นได้ว่าตรงบรรทัดล่างสุดจะมีบอกว่า มีหน้า 1,2 โผล่ขึ้นมา
    • การสลับหน้าจอระหว่าง 1 และ 2 ทำดังนี้
ctrl+o n
ctrl+o p

การใช้งาน Rsync

การใช้งาน Rsync


Rsync เป็นทูลที่ใช้ในการแบ็คอัพหรือก็อปปี้ ( mirror ) สามารถทำการดาวน์โหลดหรืออัพโหลดได้ ลักษณะ การทำงานจะคล้ายๆ 
กับ FTP+tar Utility แต่จะมีความคล่องสูงมาก เหมาะสำหรับงาน Backup,Mirror โดยมีความสามารถต่างๆ คร่าวๆดังนี้
*สนับสนุนการแบ็คอัพทั้งแบบ Incremental และ แบบ Full *มีระบบการป้องกันความปลอดภัยสนับสนุนภายในตัว *สามารถุกำหนดผู้ใช้และรหัสผ่านเพื่อใช้งานโดยที่ไม่จำเป็นที่จะต้องเป็น user จริงๆ ในระบบ *สามารถกำหนดรูปแบบการทำงานให้เป็นในลักษณะอ่านอย่างเดียว หรือ เขียนอย่างเดียว หรือ ทั้งอ่านทั้งเขียน ได้เพื่อความคล่องตัว *กำหนดระดับผู้ใช้ให้สามารถที่ทำงานได้ *เพื่อความยืดหยุ่นในการทำงานสามารถกำหนดพอร์ทการทำงานได้ *etc.. :)
เมื่อกำหนดค่าต่างๆ เรียบร้อยแล้ว ก็สามารถเรียกให้ทำงานได้ทันทีโดยเรียกคำสั่งผ่านทางคอมมาน์ไลน์ได้โดยตรง
หรือกำหนดให้ทำงานผ่าน inetd หรือ xinetd ได้ โดยใน FedoraCORE นั้นสามารถเรียกการทำงานผ่านระบบ xinetd
โดยเข้าไปแก้ที่ file ใน /xinetd.d/rsync
ขั้นตอนการทำงาน
1. สร้างคอนฟิกไฟล์ขึ้นมาเพื่อใช้กำหนดการทำงานของ  server และ secret 
ไฟล์ที่จะใช้เพื่อเก็บผู้ใช้ที่จะทำการตรวจสอบสิทธิการใช้งานในกรณีนี้ ผมสร้างไดเรกทอรี่ rsync.d ขึ้นมาเพื่อใช้เก็บคอนฟิกไฟล์ดังกล่าว root# mkdir /etc/rsync.d root# cd /etc/rsync.d root# touch rsyncd.conf root# ln -s /etc/rsyncd.d/rsyncd.conf /etc/rsyncd.conf
2.กำหนดค่าต่างๆ เข้าไปในไฟล์ rsyncd.conf เพื่อกำหนดสภาวะแวดล้อมการทำงานของ rsync server 
รูปแบบของการกำหนดหนดไฟล์จะแบ่งเป็น ส่วนๆ คล้ายๆ การกำหนดค่าของ samba ข้างล่างยกตัวอย่าง การคอนฟิกค่าเพื่อจะใช้ Backup Mail Spool Directory
log file = /var/log/rsync.log port = 8002

[ MailSPool ]
comment = Directory Mail Spool Mail  
use chroot = true
uid = root
gid = root
path = /var/spool/mail/
use chroot = true
max verbosity = 2
read only = true
auth users = rsyncuser
secrets file = /etc/rsync.d/rsyncd.secrets
hosts allow = 192.168.0.1/24
exclude = somefile >> บางไฟล์ที่ไม่ต้องการ Backup
[ testbackup ]
commment = test backup rsync
........
comment  = ใช้กำหนดคำอธิบายเพื่อสามารถที่จะอธิบายได้ว่าไดเรกทอรี่นี้มีเพื่ออะไรเพื่อที่จะบอกรายละเอียดเพิ่มเติม
 use chroot = เมื่อกำหนดออปชั่นนี้แล้วลักษณะการเชื่อมต่อเข้าไปจะใช้รูปแบบ chroot ช่วยเพิ่มความปลอดภัยยิ่งขึ้น
 uid = user id ที่เราต้องการให้ทำการทำงาน 
 gid = group id คือ id ที่เราต้องการให้ผู้ใช้ภายใต้กลุ่มนั้นๆ มาใช้งาน
 path = directory ที่เราต้องการทำงานด้วย
 max verbosity = กำหนดรายละเอียดการ debug ลงไปใน log file มีประโยชน์เมื่อเราต้องการติดตามดูความผิดพลาดต่างๆ
ก็สามารถจะช่วยได้ดีทีเดียว
read only = กำหนดให้เป็นสถานะอ่านอย่างเดียวหรือไม่ โดยปกติแล้ว ค่าโดยปกติจะเป็นอนุญาติให้อ่านได้อย่างเดียว
auth users = กำหนดผู้ใช้ที่จะทำการตรวจสอบซึ่งเก็บไว้ใน rsyncd.secret
secrets file = ไฟล์ที่ใช้เก็บข้อมูลของผู้ที่เราจะใช้ในการตรวจสอบสิทธิ โดยลักษณะเป็น เท็กซ์ไฟล์ธรรมดา
host allow = กำหนดสิทธิได้ในระดับเครือข่ายหรือ host ที่เราจะอนุญาติให้ทำการ คอนเนกต์เข้ามาได้
exclude = ยกเว้น ไฟล์ใดๆ ที่เราไม่ต้องการให้มีการ backup 
log file = กำหนดไฟล์ที่ใช้เก็บล็อก
port = กำหนด พอร์ทการทำงานจากปกติ 833
หากต้องการกำหนดไดเรกทอรี่ใดๆ ขึ้นอีก ก็สามารถเพิ่มเข้าไปได้ โดยจะกำหนดเป็น section ๆ ไป
3. สั่งให้ทำงานได้ทันที
โดยหากเป็นการกำหนดให้ทำงานผ่านทาง commandline ก็สั่งได้โดยตรงโดยใช้คำสั่ง
root# rsync --daemon
หรือหากเป็น Fedora ก็เข้าไปที่ไดเรกทอรี่ /etc/xinetd.d เข้าไปแก้ไขไฟล์ที่ชื่อว่า rsync
               root# cd /etc/xinetd.d
root# vi rsync
  1. default: off
  2. description: The rsync server is a good addition to an ftp server, as it \
  3. allows crc checksumming etc.
service rsync { disable = yes << เปลี่ยนตรงนี้ให้เป็น no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID }
3. สั่งให้มันทำงาน root# service xinetd restart 4. พร้อมทำงานได้เลยทันที :)
ทีนี้มายังฝั่ง ไคลเอ็นต์กันบ้าง
โดยปกติแล้วเราสามารถกำหนดได้ว่าจะทำการ backup เมื่อไหร่และอย่างไร ในกรณีนี้ผมทำเป็น bash script 
เพื่อสะดวกในการเรียกใช้งาน (เพราะคำสั่งยาวพอสมควาร :p ) นอกจากจะสามารถกำหนดว่าให้ทำงานได้ทันที หรือ กำหนดระยะเวลาการทำงาน ( cron job ) โดยมีรูปแบบตัวอย่างดังนี้
ส่วนรายละเอียดเพิ่มเติม จะขอมาเพิ่มเติมภายหลังนะครับเรื่องการกำหนดฝั่งการทำงานของ ไคล์เอนต์ 
พอดีไม่ค่อยว่างหรือสะดวกที่จะเขียน สักเท่าไหร่ อย่างไรก็ดี ก็อยากให้พี่ๆ น้อง ๆ ที่ใช้งาน linux สามารถมาเพิ่มเติมหรือว่า ลบทิ้งก็ได้นะครับ ( กรณีที่ผิดพลาด หรือ ลบหมดเพื่อแก้ไข :p ) และหากผิดพลาดขาดตกบกพร่องประการใดขออภัยด้วยครับ ซึ่งหากจบเรื่องนี้แล้ว ก็กะจะพูดต่อเรื่องการ import ระบบ mail ที่เป็น mbox format และระบบเมล์เก่าๆ มาใช้กับ dovecot (maildir ) ครับ
ขอบคุณครับ
    • หากรูปแบบ layout ดูประหลาดๆ ขออภัยด้วยครับ พอดีเพิ่งเคยน่ะครับ ขออภัยด้วยครับ