ปรับปรุงจาก debian: เครื่องคัดลอกแผ่นซีดี
ทำบนเดเบียน Lenny โดยจะปรับให้สามารถเขียนแผ่น DVD ได้ด้วย
มีการเปลี่ยนแปลงสคริปต์เล็กน้อย แต่คราวนี้ขอเขียนขั้นตอนแบบเริ่มใหม่ตั้งแต่ต้น
สมบัติของเครื่องที่นำมาใช้ทดสอบและรุ่นของเดเบียน
cpu: AMD Athlon (tm) XP 2400+
motherboard: ECS L7VMM2
ram: DDR 512M
harddisk: Seagate 10G เป็น /dev/hda
cdrom: DVD-Writer Lite-on จำนวน 3 เครื่อง เป็น /dev/hdb /dev/hdc และ /dev/hdd ตามลำดับ
os: Debian GNU/Linux 5.0 (2.6.26-2-686) - Lenny
packages: wodim setcd dvd+rw-tools
ความสามารถของโปรแกรม
สามารถคัดลอก cd, vcd และ dvd ได้ เป็นแบบเข้า 1 ออก 3 และเขียนด้วยความเร็วต่ำสุดที่เป็นไปได้ ทั้งนี้เพื่อให้แผ่นมีความทนทานใช้งานได้ยาวนาน
การทำงานของเครื่อง
เริ่มสร้างด้วย...
การติดตั้งเดเบียนแบบเปล่า ๆ ดูตัวอย่างจาก debianclub: การติดตั้ง Debian เป็น Desktop แต่ของเราไม่ต้องเลือก Desktop Environment
ติดตั้งแพกเกจที่ต้องการ
# aptitude install vim less wodim dvd+rw-tools setcd
สร้างไฟล์เริ่มการทำงานอ่านซีดี ชื่อ d.inittab-cpcd
# vi /root/d.inittab-cpcd
#!/bin/bash # CD COPIER PROGRAM # PREREQUISITE: # # aptitude install wodim setcd dvd+rw-tools # file: d.inittab-cpcd d.func-cpcd # PUT THE LINE # D1:2345:once:/root/d.inittab-cpcd # IN /etc/inittab THEN REBOOT # #VARIABLE DEV=/dev/hdb #SOURCE DRIVE TMP=/tmp/x.bin #TEMP.IMAGE FILE beep() { echo -e "\a" } beeperror() { for i in `seq 1 6`; do beep; sleep .15; done } wait_read_close() { # MAX RETRY LOOP = 100 for (( i=0; i<=100; i++ )) do if setcd -i $DEV | grep open >> /dev/null; then # SLEEP 1 SECONDS beep; sleep 3 else #TRY CLONE MODE readom -v dev=$DEV f=$TMP -clone retries=128 ts=128k ISCLONE=$? if [ $ISCLONE -ne 0 ]; then readom -v dev=$DEV f=$TMP retries=128 ts=128k fi return fi done eject -t $1 /sbin/shutdown -h now return } rm -rf $TMP #CHECK 1ST CDR IS ORIGINAL CD THEN DUP. TO /tmp while ! [ -s $TMP ] do eject $DEV wait_read_close $DEV beep done # CALL MULTIPLE INSTANCE IN 3 DRIVES /dev/hdb /dev/hdc AND /dev/hdd /root/d.func-cpcd /dev/hdb $ISCLONE 1 $TMP & /root/d.func-cpcd /dev/hdc $ISCLONE 1 $TMP & /root/d.func-cpcd /dev/hdd $ISCLONE 1 $TMP & wait /sbin/shutdown -h now
# chmod 755 /root/d.inittab-cpcd
สร้างไฟล์ฟังก์ชั่นเขียนซีดีแบบขนาน
# vi /root/d.func-cpcd
#!/bin/bash DEV=$1 ISCLONE=$2 SPEED=$3 TMP=$4 beep() { echo -e "\a" } beepwrite() { beep; sleep .15; beep } beeperror() { for i in `seq 1 6`; do beep; sleep .15; done } 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 beepwrite; sleep 3 # IF NO DISC INSERTED THEN BREAK elif setcd -i $DEV | grep 'No disc' >> /dev/null; then exit 1 else if [ $ISCLONE -ne 0 ]; then wodim -v gracetime=2 dev=$DEV speed=$SPEED driveropts=burnfree -overburn -eject $TMP else wodim -v gracetime=2 dev=$DEV speed=$SPEED driveropts=burnfree -raw96r -clone -overburn -eject $TMP fi # LAST CHECK WRITING if setcd -i $DEV | grep 'error' >> /dev/null; then beeperror; sleep 3 else eject $DEV return fi fi done #END PROG eject -t $1 exit 1 } if [ ! $1 ] && [ ! $2 ] && [ ! $3 ] ; then echo " USAGE : $0 DRIVE SPEED TEMP-IMG" echo " EXAM1 : $0 /dev/hdb 8 /tmp/x.bin" exit 1 fi #CHECK IMAGE FILE if ! [ -f $TMP ] ; then echo " Image file $TMP does not existed" exit 1 fi #COPY TO NEW BLANK CD while [ -f $TMP ] do eject $DEV wait_write_close $DEV beepwrite done
# chmod 755 /root/d.func-cpcd
แก้ไข inittab ให้เรียกการทำงานตอนเริ่มต้นเปิดเครื่อง
# vi /etc/inittab
... #COPY CD D1:2345:once:/root/d.inittab-cpcd
เสร็จแล้ว บูตเครื่องแล้วใช้ได้เลย
เที่ยวนี้มีเวลาทดสอบน้อย ฝากทดสอบกันเองนะครับ