Showing posts with label pkg_info(1). Show all posts
Showing posts with label pkg_info(1). Show all posts

Saturday, February 18, 2012

FreeBSD: system administrators tasks, package

ทุกข์ - อุปาทานในขันธ์ ๕
เจ็บนี้อีกนาน เจ็บจริงๆ
ความที่ใช้งานในสภาพแวดล้อมรุนแรง ความร้อนสูง ฝุ่นเยอะ ใช้งานต่อเนื่องนาน ... ฯลฯ ดังนั้นจึงเกิดกรณีที่เครื่องดับโดยไม่ทันได้ สั่งเสีย อะไรเลย กล่าวคือ ยังไม่ได้ unmount file systems และ shutdown operating system

ผลน่ะหรือ เมื่อเปิดเครื่องมาอีกครั้ง ก็จำต้องลงไปสู่ single user mode และสั่ง

# fsck -y

เท่านั้นเอง ซึ่งมันเป็นเหตุให้ บางส่วนของข้อมูล หายไป แล้วเราก็ไม่รู้ด้วยว่า ส่วนไหน หายไป โดยดูจาก messages ระหว่างที่ทำ ฟี้สกี้, fsck -y, นั้นแล้วบอกได้ว่า

อ้อ ส่วนนี้เน้าะ ที่หายไป ไม่เป็นไร นั่นมันแฟ้มขยะ ...

ไม่มีทางบอกได้เลยในขณะนั้น

ในครั้งนี้ ที่มันเกิดเหตุขึ้นมา ก็เพราะไปเผลอทำ portupgrade เข้า ข้อมูลส่วนที่ขาดหายไปจึงเป็นเพียง, เท่าที่รู้, package informations, ของหลายๆ packages เท่านั้น

ก็ยังนับว่าโชคดีไม่ใช่น้อยเลย

ที่ว่า ไม่ใช่น้อยนั้น ก็เพราะทุกครั้งที่ลงโปรแกรมผ่าน ports มักจะเก็บ binaries เอาไว้ในรูปแบบของ package เสมอ ก็ลำบากเพียงสั่ง

# make package

ก่อนสั่ง

# make clean

เท่านั้นเอง การนี้ มีข้อเสียคือเปลืองเนื้อที่ใน hard disk นอกนั้นแล้ว ไม่ว่าจะคิดในแนวไหนก็ล้วนแต่เป็นข้อดีไปทั้งสิ้น

กับอุบัติเหตุครั้งนี้ทำให้แฟ้มบางแฟ้มเสียหาย เวลาใช้งาน แม้จะไม่มีผลอะไร เพราะโปรแกรมที่ลง ก็ยังอยู่ครบ แต่เมื่อจะทำ portupgrade กลับพบว่า มีปัญหา เพราะเขาบอกว่า บางโปรแกรม นั้น ยังไม่ลง ทั้งๆที่ก็ได้ลงไปแล้ว  .... ฐานข้อมูลส่วนนี้ หายไปนั่นเอง หายไปจากอุบัติเหตุดังกล่าวมาแล้ว

ก็เลยตรวจดูว่ามีโปรแกรมไหนบ้าง ที่ package info[rmations] หายไปด้วยคำสั่ง

# pkg_info

แล้วดูผลลัพธ์ ที่บอกว่า

pkg_info: the package info for package '.....' is corrupt

นั่นแหละ โปรแกรม ..... นั่นแหละ ฐานข้อมูลเสียหาย

แก้ไม่ยาก ก็ลงโปรแกรมนั้นผ่าน port เสียใหม่อีกครั้ง ก็จบ

แฮ่ เครื่องของผม มันเก่ามาก และ  กรอบ มาก ทำงานหนักอีกไม่ไหวแล้วคร้าบ เพราะมั้นตั้ง ร่วมสามสิบโปรแกรม ที่เสียหายในลักษณะนี้

ยังนับว่าโชคดี ที่มี binaries ของโปรแกรมที่ข้อมูลส่วนที่เสียหายนี้อยู่ ครั้งที่สั่ง make package โน้น

เมื่อทราบดั่งนี้แล้ว แนวทางแก้ไขก็คือ
  1. ลบโปรแกรมเดิมที่ลงไว้แล้วนั้นออกไป
  2. ลงโปรแกรมเดิมนี้ จากคำสั่ง pkg_add โดยชี้ไปยังที่เก็บแฟ้มที่เราได้สร้างไว้แต่คราวสั่ง make package นั้น
เราทราบว่า โปรกรมดังกล่าว ดูได้ หรือ รู้ได้จากคำสั่ง pkg_info แล้วบรรทัดไหที่ขึ้นต้นด้วย pkg_info: ก็ นั่นแหละ โปรกรมนั้นแหละ ที่ฐานข้อมูลมันเสียหาย เราก็กรองเอามา ดังนี้

# pkg_info | grep ^pkg_info >  packages-info-brokens

จากนั้นก็ส่งไปเก็บไว้ในแฟ้ม ชื่อ packages-info-brokens อีกทีหนึ่ง โดยการ redirection ธรรมดาๆ

ตัวอย่างของแฟ้มที่ ฐานข้อมูลเสียหายก็ประมาณนี้

pkg_info: the package info for package 'mousepad-0.2.16_8' is corrupt
pkg_info: the package info for package 'mplayer-1.0.r20111218_3' is corrupt
pkg_info: the package info for package 'org-mode.el-emacs23-7.4' is corrupt
pkg_info: the package info for package 'p5-Compress-Raw-Bzip2-2.048' is corrupt
pkg_info: the package info for package 'p5-Parse-Yapp-1.05' is corrupt
pkg_info: the package info for package 'p5-Switch-2.16' is corrupt
pkg_info: the package info for package 'p5-XML-DOM-1.44' is corrupt
pkg_info: the package info for package 'p5-XML-RegExp-0.03' is corrupt
pkg_info: the package info for package 'p5-XML-XQL-0.68' is corrupt
pkg_info: the package info for package 'p5-YAML-Syck-1.19' is corrupt
pkg_info: the package info for package 'qt4-network-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-opengl-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-porting-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-qt3support-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-script-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-sql-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-sqlite-plugin-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-svg-4.7.4' is corrupt
pkg_info: the package info for package 'qt4-uic3-4.7.4' is corrupt
pkg_info: the package info for package 'smplayer-0.6.10' is corrupt
pkg_info: the package info for package 'wxgtk2-common-2.8.12' is corrupt
pkg_info: the package info for package 'wxgtk2-contrib-2.8.12' is corrupt
pkg_info: the package info for package 'wxgtk2-contrib-common-2.8.12' is corrup

ตัวโปรแกรมนั้น จะอยู่ระหว่างเครื่องหมาย single quote ก็ง่ายเลย ใช้ awk(1) เขียน sh script มาจัดการได้เลย ง่ายๆสำหรับการลบออก

#  awk -F\' 'BEGIN {print "#\!/bin/sh\nset -x\n"} {print "/usr/sbin/pkg_delete -f "$2}' packages-info-brokens > z-d-pkgs-brokens

และการลงโปรแกรมที่ได้ลบออกไปด้วย

#  awk -F\' 'BEGIN {print "#\!/bin/sh\nset -x\n"} {print "/usr/sbin/pkg_add -ifF /kaitag/packages/All/"$2".tbz"}' packages-info-brokens > z-a-pkgs-brokens


แล้วก็กำหนด permission mode ให้เป็น +x ทั้งคู่


# chmod +x z-d-pkgs-brokens z-a-pkgs-brokens


ที่สุดก็ลำบากเพียงสั่ง


# ./z-d-pkgs-brokens
# ./z-a-pkgs-brokens


เท่านั้นเอง ก็ได้แต่หวังว่า คงพอเกิดประโยชน์กับเพื่อนๆบ้าง และ หวังว่าคงเกิดประโยชน์แต่เพียงประเทืองปัญญา แต่ไม่ได้หวังว่าจะได้ใช้ น่ะครับ
อ้อ ลืมไป ปกติ เวลาสั่ง make package นั้น binaries จะเก็บไว้ใน /usr/ports/packages/ ครับ แต่ ผมกำหนดให้ไปเก็บที่ /kaitag/packages/ ครับ และเขาจะนำไปเก็บภายใต้ ..../All/ นั้น อีกเตาหนึ่ง

ลืมไปอีกครับ  ยังคงลืมไป (ติดใจอยากอยู่ต่อ) เราต้องทำ pkgdb -F ด้วย เพื่อให้ฐานข้อมูลส่วนที่ขาดหายไปนี้ กลับมามีคืนดั่งเดิม

ทุกข์ ควรกำหนดรู้

    Wednesday, January 26, 2011

    FreeBSD : pkg_info -W

    commands
    xfrun4 คือชื่อโปรแกรมที่เรียก application มาทำงาน คล้ายๆ Run ในวินปากซอยนั่นแหละ
    อยู่ดีดี ไปเผลอ update โปรแกรม octave เข้าทั้งๆที่แทบไม่ได้จับเลย ผลก็คือมัน update libicui18n ไปด้วย จาก so.38 --> so.46 ซะงั้น

    งานเข้าเลย

    portupgrade -f -r icu-\*

    จากแฟ้ม /usr/ports/UPDATING แนะให้ ทำแล้วก็ยังแก้ไม่ได้ บางแฟ้มต้องมานั่งทำเอาเอง ทีละตัวๆ เป็นรายตัว รายตัวไป

    มาจนแต้มเอาตรงแฟ้มที่ว่านี่แหละ ไม่รู้ว่ามันลงจาก port ไหนของชุด xfce4 นั้น

    ไม่ได้รู้เองหรอก ไปถามที่  forums.freebsd.org ถึงได้รู้
    # pkg_info -W xfrun4
    นั่นแหละจึงทำให้แก้ปัญหาได้ ไม่งั้น สั่งทีไร มันฟ้องไปทุกทีว่า libicui18n.so.38 หาไม่เจอ ทั้งๆที่ก็มีตัวใหม่ ที่ทันสมัยกว่า ดีกว่า , libicui18n.so.46, แต่มันคงติดใจรสชาติดั้งเดิม กับของคุ้นเคยกันอันเก่า มากกว่ามั้ง เลยเอาแต่ถามหาอยู่ร่ำไป ไม่ยอมทำงานให้

    แปลก เน้อะ โปรแกรม มันก็มีจิตใจ เป็นไปกับเข้าด้วย

    Sunday, June 28, 2009

    FreeBSD: ---> ports --> VirtualBox

    ทดลองใช้ VM Ware ของ Sun อีกรอบหนึ่ง
    วันว่าง ไม่รู้ทำไรนี่นา commandsติดตั้ง ก็ไม่ยาก ไปที่ ports ตรง emulators/virtualbox นั่นแหละ มันนานตรงไปเอาแฟ้มเอกสานมา กับตอน compile นอกนั้นก็ไม่มีไรมาก อืมม จะว่าไม่มีไรก็ไม่ได้ซิน่า มันต้องมีมั่ง ก็อ่านดูเอาก็แล้วกัน เด้อ ไม่ยากแก่การเข้าใจหรอกน่า
    [~] # pkg_info -D virtualbox-2.2.51.r20457_3
    Information for virtualbox-2.2.51.r20457_3:

    Install notice:
    =============================================================================

    VirtualBox was installed.

    You need to load the vboxdrv kernel module and a mounted /proc filesystem.

    % mount -t procfs proc /proc
    % kldload vboxdrv

    You also have to add all users to your vboxusers group in order to use vbox.

    % pw groupmod vboxusers -m jerry

    Running VirtualBox as non-root user may fail with a fatal error NS_ERROR_FACTORY_NOT_REGISTERED. In this case delete /tmp/.vbox-*-ipc file.

    Please report any problems to emulation@. Thanks!

    =============================================================================
    น่ะ ดูเอา แล้วก็ทำตามซะ ก่อนที่จะสั่งเรียกเขามาทำงาน
    เผอิญว่า มะไฟ ใช้ gnome2 เลยง่าย ต่อการเรียกใช้งาน พอลงเสร็จปุ้บ ยังไม่ทันสั่ง เม้คคลีน เลย พวกก็มาอยู่ในเมนูให้แล้ว พอเรียกจากเมนู ก็มา อย่างทีเห็นในรูปซ้ายมือนี่แหละ กดขยายดูเอาเอง
    อ้อ ท่าน ต้องลงทะเบียน ด้วยน่ะ ยังไงๆใช้ของฟรีแล้วนี่ เขาถามชื่อ ที่อยู่ ก็บอกเขาไปเถอะ ตราบเท่าที่ เราไม่เอาไปใช้ ในทางทุจริต เราก็ไม่ต้องไปกังวลใจอะไร กับข้อมูลที่เราให้เขาไปเลย จริงมั้ย
    พอดี มะไฟ ลง Virtual Box บน FreeBSD โดยจะจำลองการใช้งาน window xp ก็เลยใช้ชื่อว่า Motor Cycles อย่าแปลกใจ ก็ วินปากซอย แหละน่อ นั่นแหละ รูปที่เห็นทางขวามือ ก็กดเพื่อขยายใหญ่ ดูเอาเองน่ะ
    ก็ กด Next ไปเรื่อยๆ
    มาถึงตอน กำนหนด hard disk เลือก new เพราะเพิ่งสร้าง แต่ไปเปลี่ยนขนาดเอา ไม่เอาตามที่เขาแนะมา ดูอีกรูป ทางซ้ายมือเอาน่ะ
    พอกำหนดขนาดของ hard disk แล้วก็จะมาที่หน้า summary แหละ ทีนี้ พอเรา กัดปุ่ม Finish ก็หมายถึงว่า OS ตัวใหม่ ได้สร้างขึ้นมาให้เราแล้ว
    ก็กัดปุ่มนั้นไป ดูรูปซ้ายมือน่ะ

    ตานี้ ก็รอเพียงแค่เรา start ระบบ เท่านั้นเอง

    ดูดูไปแล้ว ต้องนับถือแนวคิดของเขา มันทำให้คนใช้ง่าย ดูเอาเถอะหวะ, ดูถั้วะ ในภาษาขนโขราด, แค่รู้จักกับคำว่า Next, Finish, Back, Cancel, OK ก็ทำงานได้แล้ว
    หวังว่า แอ้ดเวนเจ้อร์ สำหรับวีคเอนด์นี้ คงพอมีสาระบ้าง ไม่มากก็น้อย แลหากท่านจะชื่นชม หรือ เห็นว่า มีความดีงามอันใดบ้าง ก็ขอได้โปรด ยกให้กับ ทารกในรูป ด้วยเถิด เมตตามันด้วย มันกำพร้าแม่ ตอนนี้ มันยังจากพ่อ จากน้อง ไปยังแดนไกล เพื่ออนาคตของมันเอง
    ก็แลว่า หากจะมีอันใดขาด ตก บกพร่อง แม้สักน้อยหนึ่ง ผม ผู้เป็นพ่อของมัน ขอน้อมรับไว้ด้วยดี แต่เพียงผู้เดียว

    View My Stats