ปัญหา apt-listchages และ libdjvulibre21 ใน sid ช่วงนี้
ช่วงนี้ใครใช้ sid อยู่ อาจพบปัญหาการอัปเกรดอยู่สองเรื่อง คือ apt-listchanges กับ libdjvulibre21
apt-listchanges
อาการของ apt-listchanges คือ ไม่แสดง changelog ใด ๆ เลย โดยพังกลางทาง แจ้งข้อความทำนองนี้:
Reading changelogs... Done Traceback (most recent call last): File "/usr/bin/apt-listchanges", line 227, in ? main() File "/usr/bin/apt-listchanges", line 148, in main seen.close() File "/usr/lib/python2.4/bsddb/__init__.py", line 237, in close v = self.db.close() bsddb.db.DBRunRecoveryError: (-30975, 'DB_RUNRECOVERY: Fatal error, run database recovery -- PANIC: fatal region error detected; run recovery')
ปัญหา ดูได้จาก Bug #469221 สาเหตุมาจากปัญหา db4.6 ใน python2.5 ซึ่ง upstream python แก้ปัญหาด้วยการห้ามใช้ db4.6 แต่ apt-listchanges ฝืนใช้ ขณะนี้ นักพัฒนากำลังถกกันอยู่ ว่า apt-listchanges ควรถอยกลับมา db4.5 หรือควรแก้ปัญหา db4.6 ที่ python2.5 ดี แต่ในระหว่างนี้ มีวิธีแก้ขัดอยู่สองวิธี
- ลบ apt-listchanges แล้วติดตั้งใหม่:
# aptitude purge apt-listchanges # aptitude install apt-listchanges
วิธีนี้ดูง่ายดี เป็นการทำลายประวัติการอ่าน changelog เก่า ๆ ของเราทิ้งแล้วเริ่มใหม่หมดด้วย db4.5 แต่ข้อเสียคือ บางทีโปรแกรมจะแสดง changelog เก่า ๆ ที่เราเคยอ่านมาแล้วด้วย
- dump ฐานข้อมูลจาก db4.6 เพื่อนำมาสร้างใหม่สำหรับ db4.5
# db4.6_dump /var/lib/apt/listchanges.db | db4.5_load a.db # mv a.db /var/lib/apt/listchanges.db
แต่จะต้องติดตั้งแพกเกจ db4.5-util และ db4.6-util เพิ่มเติม เพื่อใช้คำสั่ง
db4.6_dump
และdb4.5_load
วิธีนี้ทำให้ไม่เสียข้อมูลประวัติการอ่าน changelog เก่า ๆ ที่เคยอ่านแล้ว
ปัญหานี้ เกิดใน sid เท่านั้น ผู้ใช้ lenny จะไม่เจอปัญหานี้ เพราะแพกเกจยังไม่ได้ migrate ไป
libdjvulibre21
อาการคือ เมื่อปรับรุ่นขึ้นแล้ว พบข้อผิดพลาดดังนี้:
dpkg: error processing /var/cache/apt/archives/libdjvulibre21_3.5.20-5_i386.deb (--unpack): trying to overwrite `/usr/share/djvu/osi/cs/messages.xml', which is also in pac kage libdjvulibre15
จากนั้น สถานะของระบบแพกเกจจะค้างอยู่ที่ unconfigured state ทำให้ไม่สามารถติดตั้งแพกเกจอื่น ๆ อีกได้ บอกให้แก้ด้วย apt-get -f install
ลูกเดียว ซึ่งแม้จะสั่งแล้ว ก็ไม่สามารถแก้ปัญหาได้
ปัญหานี้ เข้าใจได้ไม่ยาก.. สาเหตุก็คือ libdjvulibre21 ไปเขียนแฟ้มทับซ้อนกับ libdjvulibre15 โดยไม่ได้ประกาศ "Replaces: libdjvulibre15"
ซึ่งถือว่าผิด policy แต่ก็อาจเป็นความจำเป็นก็ได้ เพราะเมื่อวันก่อน ยังมีบางแพกเกจที่ยังลิงก์กับ libdjvulibre15 อยู่ แล้ววันต่อมาก็มี binNMU สั่ง build ใหม่ให้ลิงก์กับ libdjvulibre21 ตามมา คาดว่าคงต้องรอให้แพกเกจเหล่านี้ build ใหม่ให้ครบก่อน จึงจะสั่งให้ libdjvulibre21 conflicts/replaces libdjvulibre15 ได้
วิธีแก้ปัญหา เป็นไปได้สองอย่าง
- คงรุ่นแพกเกจต่าง ๆ ที่ใช้ libdjvulibre21 ไว้ก่อน โดยใช้ aptitude สั่ง remove libdjvulibre21 แล้วไป downgrade แพกเกจที่ถูกกระทบเป็นตัว ๆ ไป (สำหรับเครื่องผม ที่เจอคือ evince และ libmagick10) จากนั้นก็ hold ไว้ที่รุ่นเดิม รอสักพักค่อยลอง upgrade ใหม่
- ใช้ libdjvulibre21 นี่แหละ ถ้าระบบไม่มีแพกเกจไหนใช้ libdjvulibre15 เหลืออีกแล้ว ก็สั่ง purge libdjvulibre15 ด้วย dpkg แล้วใช้
apt-get -f
ซ่อม:# dpkg --purge libdjvulibre15 # apt-get -f install
วิธีนี้เอามาจากความเห็นใน Bug #471650
และเช่นกัน ปัญหานี้มีแต่ใน sid ไม่ตกไปถึง lenny
- thep's blog
- Log in to post comments
![]() |
ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้ |
Comments
Re: ปัญหา apt-listchages และ libdjvulibre21 ใน sid ช่วงนี้
on 21 March, 2008 - 16:02 Permalink
เจอเหมือนกันเมื่อเช้าครับ ใช้วิธี purge ตาม Bug #471650 ครับ
___
Neutron: Linux Addict!
Re: ปัญหา apt-listchages และ libdjvulibre21 ใน sid ช่วงนี้
on 29 March, 2008 - 07:26 Permalink
Update: ปัญหาของ libdjvulibre21 แก้แล้วใน 3.5.20-6 ด้วยการย้ายไฟล์ออกไปที่ djvulibre-desktop แล้ว conflict กับ libdjvulibre15 และ libdjvulibre21 (<= 3.5.20-5)
แพกเกจเพิ่งเข้า sid เมื่อเช้านี้ เหตุที่มาช้า เท่าที่อ่านดูเป็นเพราะมีการเพิ่ม binary package ใหม่ ทำให้ติดอยู่ที่ NEW queue ครับ