สร้าง mirror ส่วนตัว ด้วย apt-move

การแก้ไขจากต้นฉบับเก่า: เพิ่มเรื่องการเซ็น archive ด้วย GPG

อัปเกรดกันบ่อย ๆ มีการดาวน์โหลดแพกเกจมาไว้ที่เครื่องทุกวัน อยากเอามาใช้ประโยชน์อื่นหลังจากติดตั้งแล้วหรือเปล่า? ไม่อยาก? โอเค aptitude clean หรือ aptitude autoclean จบ ไม่ต้องอ่านต่อ :-) แต่ถ้าคิดว่าน่าเอาไปรีไซเคิล ก็ทำได้หลายอย่างครับ แต่ขั้นแรกที่น่าทำ คือการย้ายเข้า sub-mirror ส่วนตัวเสียก่อน ด้วยเครื่องมือที่จะแนะนำในวันนี้ คือ apt-move

apt-move จะช่วยย้าย deb ต่าง ๆ ที่ดาวน์โหลดมา เข้าไปไว้ใน package pool พร้อมทั้งสร้างรายชื่อแพกเกจให้ด้วย กล่าวคือ สามารถใช้เป็น apt source ได้เลย โดยสามารถกำหนดให้ลบแพกเกจเก่าได้ด้วย ซึ่งเมื่อใช้ไปนาน ๆ ก็จะได้ mirror ย่อย ที่มีแต่แพกเกจที่เราดาวน์โหลดมาเท่านั้น แต่ถ้าจะทำ mirror เต็ม ๆ ก็มีคำสั่งให้ทำได้เหมือนกัน

ผลก็คือ สามารถใช้สร้าง local mirror ไว้ใช้เองเวลาจะ reinstall หรือไว้ใช้ร่วมกันใน intranet ก็ได้ หรือจะเก็บใส่ CD ไว้ใช้ติดตั้งในเครื่องอื่นก็ได้ (ถ้าแพกเกจครบพอ) ผมเคยใช้วิธีนี้แทน apt-proxy ในบางกรณี เพื่อแก้ปัญหาอาการค้างที่เกิดกับ apt-proxy บ่อย ๆ รวมทั้งใช้ทำ apt source สำหรับใช้ในองค์กร โดยคัดเลือกแพกเกจจาก unofficial site (เช่น LTN APT) มารวมด้วย

ติดตั้งกันก่อน:

# aptitude install apt-move

จากนั้น แก้ค่าตั้งใน /etc/apt-move.conf โดยค่าที่น่าสนใจคือ:

APTSITES
เลือก mirror site ที่จะใช้อ้างอิงเวลา move เช่น "linux.thai.net ftp.jp.debian.org" หรือใช้ค่า "/all/" เพื่อแทนทุกแหล่งที่อยู่ใน /etc/apt/sources.list
LOCALDIR
กำหนดไดเร็กทอรีปลายทางที่จะเก็บ package pool
DIST
กำหนด distribution ที่ใช้ เช่น unstable
DELETE
กำหนดว่าจะลบแพกเกจเก่าทิ้งด้วยหรือไม่ โดยปกติควรจะกำหนดเป็น yes เพื่อประหยัดเนื้อที่
MAXDELETE
กำหนดว่าจะลบแพกเกจเก่ากี่เปอร์เซ็นต์ ที่เหลือจะเก็บไว้หลายเวอร์ชัน เผื่ออยาก downgrade แพกเกจไหน
GPGKEY
กำหนด GPG private key ที่จะใช้เซ็นกำกับแฟ้ม Release เพื่อที่เครื่องลูกข่ายจะสามารถตรวจสอบความน่าเชื่อถือของแหล่งเราผ่าน secure apt ได้ (หากยังไม่ทราบเกี่ยวกับ GPG กรุณาอ่านจากเอกสารของ GPG ก่อน เพราะอธิบายในที่นี้จะยาวเกินไป)

กำหนดคอนฟิกเรียบร้อยแล้ว ก็มาที่คำสั่งสำหรับย้ายแพกเกจ:

# apt-move update

จะย้ายแพกเกจที่ดาวน์โหลดมา ไปยังไดเร็กทอรีที่กำหนด พร้อมสร้างแฟ้ม Packages[.gz] ให้ด้วย ไดเร็กทอรีที่ได้ สามารถเอาไปเพิ่มใน /etc/apt/sources.list ของเครื่องที่ต้องการใช้ได้เลย เช่น สมมุติว่าย้ายเข้า /home/ftp/debian ก็กำหนดเป็น:

deb file:///home/ftp/debian unstable main contrib non-free

และถ้าเปิด FTP service ไว้ด้วย ก็ไปกำหนดที่เครื่องลูกได้:

deb ftp://server-ip/debian unstable main contrib non-free

โดยที่ถ้าคุณกำหนด GPGKEY สำหรับเซ็นรับรอง คุณก็สามารถ export public key ให้ลูกข่ายใช้ตรวจสอบได้:

# gpg -o archive-key.gpg --export -a 0xXXXXXXXX

โดยแทน 0xXXXXXXXX ด้วย key id ที่ใช้เซ็น จะได้ ascii-armored public key ออกมาในแฟ้ม archive-key.gpg (ตั้งเป็นชื่ออื่นก็ได้ แล้วแต่)

จากนั้น ก็ส่ง public key นี้ให้ผู้ใช้ด้วยวิธีใดวิธีหนึ่ง (เอาใส่ใน FTP เลยก็คงได้ แล้วบอกเขาดาวน์โหลดเอา) ซึ่งเขาสามารถ import public key เข้าใน keyring ของ apt ได้ด้วยคำสั่ง:

#  apt-key add archive-key.gpg

เนื้อหาใน sub-mirror จะมีแต่แพกเกจที่มีการดาวน์โหลดมาเท่านั้น ดังนั้น ความครบถ้วนของ mirror ก็ขึ้นอยู่กับว่า มีการดาวน์โหลดแพกเกจต่าง ๆ ขนาดไหน ซึ่งก็มีหลายกลวิธี ที่จะทำให้เกิดการดาวน์โหลดให้ได้แพกเกจครบตามต้องการ ไว้เป็นเรื่องของเทคนิคส่วนตัวของแต่ละคน หรือไว้พูดถึงในภายหลังถ้ามีโอกาส แต่ถ้าคุณมีผู้ใช้จำนวนมาก ไม่รู้ว่าเขาจะใช้อะไรบ้าง ก็อาจจะ mirror ให้ครบที่สุดไว้ก่อน ก็ใช้คำสั่ง:

# apt-move mirror

ระวังให้ดีก่อนเรียก เพราะมันจะดาวน์โหลดเยอะมาก อย่าลืมเตรียมเนื้อที่ดิสก์ไว้รองรับด้วยล่ะ แล้วก็อย่าลืมพิจารณาเครื่องมือ mirror อื่น ๆ ที่ออกแบบมาเพื่อการ mirror โดยเฉพาะ ที่อาจจะเหมาะกว่า apt-move ด้วย :-)

Topic: 
Creative Commons License ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น
ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้