จะรีไซเคิลเครื่องเก่า มาทำเครื่องคัดลอกซีดีเพื่อถวายวัด
สเปคเครื่องเก่าคือ AMD Sempron(tm) 2000+, RAM 512MB, HD 40G (เป็น /dev/sda)
ลงทุนซื้อใหม่คือ CD-Writer 4 ตัว ตัวละ 545 บาท (IDE 3 และ SATA 1)
เนื่องจากจะไม่มีจอภาพ จึงจะใช้เสียงเป็นตัวแจ้งสถานะ
จะทำให้มีการทำงานคือ
เริ่มด้วยติดตั้งเดเบียน squeeze แบบไม่ติดตั้งอะไรเพิ่มเติมเลย
ดามด้วยเอาแพกเกจที่จำเป็นที่สคริปต์เราต้องเรียกใช้ คือ
# aptitude install eject setcd cdrdao
สร้างสคริปต์สำหรับให้ rc.local เรียกใช้ตอนเปิดเครื่อง สำหรับให้อ่านแผ่นต้นฉบับ
ตั้งชื่อว่า d.rc-cpcd
# vi /usr/local/sbin/d.rc-cpcd
#!/bin/bash # CD COPIER PROGRAM # PREREQUISITE: # # aptitude install eject cdrdao setcd dvd+rw-tools # file: d.rc-cpcd d.func-cpcd # PUT d.rc-cpcd AND d.func-cpcd IN /usr/local/sbin # THEN CALL d.rc-cpcd FROM /etc/rc.local #VARIABLE SRC=/dev/sr0 #SOURCE DRIVE TOC=/tmp/toc.bin #TEMP.IMAGE FILE DSC=" /dev/sr0 /dev/sr1 /dev/sr2 /dev/sr3 " #DESTINATION DRIVE . /usr/local/sbin/d.common-func wait_read_close() { # MAX RETRY LOOP = 100 for (( i=0; i<=100; i++ )); do if setcd -i $SRC | grep 'CD tray is open' >> /dev/null; then # SLEEP 1 SECONDS beep_close elif setcd -i $SRC | grep 'Drive is not ready' >> /dev/null; then sleep 1 else if setcd -i $SRC | grep 'No disc is inserted' >> /dev/null; then break else #DO READ cdrdao read-cd --device $SRC --read-raw --datafile /tmp/data.bin $TOC return fi fi done eject -t $SRC /sbin/shutdown -h now return } rm -rf $TOC #CHECK 1ST CDR IS ORIGINAL CD THEN DUP. TO /tmp while ! [ -s $TOC ]; do eject $SRC echo "eject $SRC" wait_read_close $SRC beep done # CALL MULTIPLE INSTANCE IN $DSC DRIVES for i in $DSC; do if [ "$i" ]; then /usr/local/sbin/d.func-cpcd $i $TOC & fi done wait /sbin/shutdown -h now
อีกไฟล์นึงเป็นฟังก์ชั่นสำหรับเขียนซีดี ตั้งชื่อว่า d.func-cpcd
# vi /usr/local/sbin/d.func-cpcd
#!/bin/bash DEV=$1 TOC=$2 SPEED=1 . /usr/local/sbin/d.common-func wait_write_close() { # MAX RETRY LOOP = 100 for (( i=0; i<=100; i++ )); do # WAIT FOR INSERT DISC if setcd -i $DEV | grep 'is open' >> /dev/null; then beep_write; sleep 3 elif setcd -i $DEV | grep 'Drive is not ready' >> /dev/null; then sleep 1 elif setcd -i $DEV | grep 'No disc' >> /dev/null; then # IF NO DISC INSERTED THEN BREAK exit 1 else # DO WRITE cdrdao write --device $DEV --speed $SPEED --overburn -n $TOC # LAST CHECK WRITING if setcd -i $DEV | grep 'error' >> /dev/null; then beep_error; sleep 3 eject $DEV else eject $DEV return fi fi done #END PROG eject -t $DEV exit 1 } if [ ! $1 ] && [ ! $2 ] ; then echo " USAGE : $0 DRIVE SPEED TEMP-IMG" echo " EXAM1 : $0 /dev/sr0 /tmp/toc.bin" exit 1 fi #CHECK IMAGE FILE if ! [ -f $TOC ] ; then echo " Image file $TOC does not existed" exit 1 fi #COPY TO NEW BLANK CD while [ -f $TOC ]; do eject $DEV wait_write_close beep_write done
และสุดท้ายคือไฟล์ฟังก์ชั่นที่ใช้ร่วมกัน
# vi /usr/local/sbin/d.common-func
#!/bin/bash beep() { echo -e "\a" } beep_close() { beep; sleep 1; } beep_write() { beep; sleep .15; beep } beep_error() { for i in `seq 1 6`; do beep; sleep .15; done }
ต่อไปแก้ไขไฟล์ /etc/rc.local ให้มาเรียกใช้โปรแกรม d.rc-cpcd ตอนเปิดเครื่อง
# vi /etc/rc.local
... /usr/local/sbin/d.rc-cpcd exit 0
เสร็จแล้วรีบูตทดสอบได้เลย