Theppitak's blog

My personal blog.

03 สิงหาคม 2547

APT Management

หลังจากที่เซ็ตระบบเน็ตเวิร์กในบ้านให้กลับมาอยู่ในสภาพปกติ (wireless LAN + ipmasq ผ่าน TOT 56K) แล้ว ก็ทยอยเซ็ต service อื่นต่อ จนมาถึงเรื่องการจัดการ debian package

โจทย์คือ ตอนนี้มี debian 3 เครื่อง แต่ bandwidth ที่ใช้ upgrade package ต่างๆ ต่ำมาก และต่อได้ครั้งละ 2 ชั่วโมงเท่านั้น จึงพยายามใช้ bandwidth ให้คุ้มที่สุดในการ update package ต่างๆ แผนการณ์ที่วางไว้แต่ต้นคือ ใช้ apt-proxy แต่ในระหว่างที่เน็ตเวิร์กไม่สมบูรณ์ ก็ใช้วิธีนี้มาโดยตลอด:

  • การดูด package อาศัย script apt-off ที่เขียนขึ้นเอง เพื่อที่เครื่องต่างๆ จะสามารถฝากดูดกันได้ผ่าน thumb drive หรือเอาไปฝากดูดในเครื่องชาวบ้านที่ bandwidth สูงกว่าได้ อิอิ (สำหรับ script นี้ เพิ่งมาพบภายหลัง ว่ามี package apt-zip สำเร็จรูปให้ แถมสามารถใช้ฝากดูดในเครื่องที่ไม่ใช่ debian ได้ด้วย แต่ไหนๆ ก็ใช้ script ตัวเองมาจนติด ก็เลยใช้ต่อไป)
  • จาก archives ที่ดูดมา ใช้ apt-move ย้าย package เข้า mirror tree เก็บไว้ mirror นี้จะเป็น subset ของ full debian mirror โดยมี package เท่าที่ใช้ ถ้าตั้งไว้ให้ move เข้า ftp area ก็จะกลายเป็น source สำหรับ apt-get ได้
  • จาก mirror นี้ เมื่อดูด package พื้นฐานต่างๆ มาเพิ่มให้ครบ (โดยเฉพาะ package ที่ไม่มีการ upgrade เป็นเวลานาน ซึ่งทำให้ไม่มีใน archive ที่ดูดๆ มาหลังการติดตั้งครั้งแรก) รวมทั้ง boot image ต่างๆ ด้วย ก็สามารถใช้ debian-cd สร้างแผ่นติดตั้ง debian ได้ เอาไว้ใช้ติดตั้งหรือ upgrade ที่เครื่องใดๆ ก็ได้ตามต้องการ โดยมี package เฉพาะเท่าที่ใช้เท่านั้น (ปัจจุบันยังไม่เต็ม 2 แผ่น CD)

แต่พอเน็ตเวิร์กกลับมาต่อกันครบเหมือนเดิม ก็จัดการทดลองตั้ง apt-proxy ในเครื่องที่กำหนดไว้เป็น file server พบว่า apt-proxy รุ่นนี้ ถูกเขียนขึ้นมาใหม่หมดด้วย python มี daemon รันต่างหาก แต่วิธีการใช้งานยังเหมือนเดิม ใช้ไปๆ ก็พบปัญหาบางประการ:

  • ไฟล์ที่ดาวน์โหลดไม่สมบูรณ์ เมื่อต่อเน็ตใหม่ มันจะไม่ resume บางครั้งเริ่มใหม่ บางครั้งมีอาการค้าง ต้องไป restart apt-proxy เพื่อเริ่มดาวน์โหลดใหม่
  • ไม่ยอม cache package บางตัว ลองตรวจ debian bug ก็พบ Bug #260951 รายงานว่า apt-proxy ไม่ยอม cache package ขนาดใหญ่ (อ้าว.. นั่นน่ะต้องการให้ cache มากที่สุดเลยนะ)

อันที่จริงก็อยากจะช่วยเขาจับแมลงเพื่อปรับปรุงให้ดีขึ้นอยู่หรอก แต่กับเหตุการณ์เฉพาะหน้าก็ต้องหาวิธีแก้ขัดก่อน ก็เลยใช้วิธีนี้:

  • เขียน script rsync dpkg status file จากเครื่องลูกไปยังเครื่อง file server โดยตั้งชื่อแยกตามชื่อเครื่องลูก
  • ที่ file server เรียก apt-off ดูด package ตาม status file ทั้งหลาย ถ้าจะลง package ใหม่ ก็ ssh มาที่ file server แล้วสั่ง apt-off ดึงเอาก่อน
  • ใช้ apt-move ย้าย archive เข้า ftp
  • จากนั้น ค่อยมา apt-get ที่เครื่องลูกผ่าน mirror ภายใน

ด้วยวิธีนี้ จะทำให้ file server มี package ที่เป็น union set ของ package ที่ใช้ในเครื่องต่างๆ ทั้งหมด ซึ่งทำให้ตัดแผ่น CD ได้โดยมี package ครบเต็ม และการดูด package จาก internet ก็จะเกิดแค่ครั้งเดียวเหมือนที่ apt-proxy (อยากจะ) ทำ แถม resume ได้ด้วย

ความจริง ยังมีอีกวิธีหนึ่งที่ง่ายกว่า คือจัดการ mount archive dir ผ่าน NFS ซะ แบบนี้แชร์กันทันทีโดยไม่ต้องมีขั้นตอนอะไรเพิ่ม แต่ข้อเสียคือ ใช้กับการดูดแพกเกจเพื่อการ upgrade เครื่องลูกค้า ซึ่งไม่ได้ต่อกับเครือข่ายเราไม่ได้ ถ้าใช้วิธี sync status ยังพอสามารถ sync จากเครื่องลูกค้าผ่าน thumb drive ได้อยู่ พอจะเข้าไป upgrade ที่ off-line site ที ก็เผาแผ่น CD-RW ถือเข้าไป

2 ความเห็น:

แสดงความเห็น (มีการกลั่นกรองสำหรับ blog ที่เก่ากว่า 14 วัน)

<< กลับหน้าแรก

hacker emblem