PHP Fatal error: Class ‘DOMDocument’ not found

PHP Fatal error:  Class ‘DOMDocument’ not found

วันนี้ลอง RoundCube พบว่ามันไม่แสดงเนื้ออีเมล ถ้าคลิกไปบนอีเมลจะมีคำว่า “Loading…” ขึ้นค้างอยู่และทำอะไรต่อไม่ได้เลย ต้องกด refresh อย่างเดียว กลับไปเช็คใน IMAP ก็แสดงเนื้ออีเมลครบถ้วนสมบูรณ์ดีเลยเพ่งประเด็นไปที่ตัว PHP หรือเว็บเซิร์ฟเวอร์ พอเข้าไปดูใน error log ของเว็บเซิร์ฟเวอร์ก็พบ error ที่น่าจะเป็นสาเหตุของปัญหานี้ ลอง Google ดูพบว่าไม่ได้ลงแพคเกจ php-xml พอทำการติดตั้ง php-xml ก็แก้ปัญหานี้ได้

[08-Sep-2014 20:14:06] PHP Fatal error: Class 'DOMDocument' not found in /opt/roundcubemail-x.x.x/program/lib/Roundcube/rcube_washtml.php on line xxx

Linux Performance Analysis and Tools

ไปเจอสไลด์เรื่อง Linux Performance Analysis and Tools เข้าท่าดีเลยเอามาแปะไว้ก่อน ใครเคยทำงานเกี่ยวกับ system มาบ้างคงจะรู้ดีกว่าเวลาไล่หาปัญหาของ server ทำงานผิดปกติค่อนข้างยากขนาดไหน การเข้าใจ sub system ลึกๆของ Linux รวมถึงการมีเครื่องมือวัดที่ดีจะทำให้แก้ปัญหาได้เร็วครับ

Gentoo, profile contains unsupported EAPI

ไม่กี่วันก่อนพยายาม upgrade portage ของ Gentoo แต่เจอ error แปลกๆตามนี้

# emerge -u portage
!!! Unable to parse profile: ‘/etc/make.profile’
!!! ParseError: Profile contains unsupported EAPI ‘5’: ‘/usr/portage/profiles/eapi-5-files/eapi’
!!! If you have just changed your profile configuration, you should revert
!!! back to the previous configuration. Due to your current profile being
!!! invalid, allowed actions are limited to –help, –info, –sync, and
!!! –version.

รู้สึกว่าเกิดจาก bug ของ Gentoo และการที่ปล่อยระบบทิ้งไว้นานๆไม่ upgrade วิธีแก้ก็คือไปเปลี่ยนข้อมูลในไฟล์

/usr/portage/profiles/eapi-5-files/eapi

และเปลี่ยนเลขในไฟล์จาก 5 เป็น 4 save ไฟล์แล้วสั่ง emerge portage อีกครั้ง

จากนั้นแก้เลขในไฟล์ eapi กลับจาก 4 เป็น 5 แล้วลอง

emerge --sync

อีกครั้งก็จะแก้ปัญหาได้

udhcp client script hooking

Hooking เป็นเทคนิคหนึ่งซึ่งทำให้ซอฟต์แวร์สามารถ ปรับเปลี่ยน หรือเพิ่มเติม ได้ในภายหลัง โดยผ่านการดักจับ (intercept) function call, message หรือ event

การที่ต้องมีความสามารถนี้เนื่องจาก เพื่อให้ซอฟต์แวร์สามารถปรับเปลี่ยนไปตามเหตุการณ์ หรือค่าบางอย่างที่เกิดขึ้นในโปรแกรมในขณะ run-time ได้ในภายหลังโดยที่ไม่ต้องไปแก้ไขที่ source code ต้นฉบับ ซึ่งอาจทำโดยบุคคลที่ไม่ใช่ผู้พัฒนาโปรแกรมนั้นๆ ทำให้โปรแกรมมีความยืดหยุ่นสูง สามารถเปลี่ยนแปลงในภายหลังได้ง่าย

โปรโตคอล DHCP เองนั้นมีความยืดหยุ่นสูง สามารถใส่ค่า option ไว้ได้หลายค่า การจะเขียนโปรแกรมเพื่อประมวลผล option ต่างๆที่ใส่มาใน โปรโตคอล DHCP จึงไม่ใช่เรื่องง่าย เนื่องจากบางครั้งเราไม่รู้ว่า option ที่ใส่มานั้นต้องการจะทำอะไรกับมัน ใน DHCP client หลายๆตัว จึงได้ออกแบบให้นักพัฒนา หรือ ผู้ดูแลระบบสามารถเขียน script ง่ายๆในการประมวลผล DHCP option เหล่านั้นได้โดยไม่ต้องแก้ไข source code หลักของโปรแกรม และ script เหล่านั้นเป็นสิ่งที่ผู้ดูแลระบบคุ้นเคยอยู่แล้ว เช่น shell script เป็นต้น

udhcp เป็น dhcp client ที่นิยมใช้ใน embedded system เนื่องจากมีขนาดเล็ก ประมาณ 19KB เราจึงเห็น udhcp ถูกใส่ไว้ใน busybox ซึ่งเป็น UNIX utility suite ที่มักใช้ใน embedded system

DHCP protocol นอกจากจะช่วยแจก IP address ให้แก่ client ได้แล้ว ยังสามารถ ส่งค่าต่างๆไปให้ client ได้ ยกตัวอย่างเช่น DNS server ip address และ gateway address เป็นต้น

dhcp client ส่วนมาก จะรับค่ามาตรฐานเหล่านี้มาแล้วทำการเซ็ทให้กับ client อัตโนมัติ แต่ค่าบางค่า อย่างเช่น hostname dhcp client จะไม่ทำอะไรให้ เนื่องจากไม่ใช่เรื่องปกติที่ client จะรับค่า hostname มาจาก dhcp server
อ่านเพิ่มเติม

รักษาความปลอดภัยอย่างง่ายๆบน Gentoo Linux ด้วย glsa-check

Gentoo เป็น Linux distribution ประเภท source-based ซึ่งการจะลงโปรแกรมต่างๆ จะต้องทำผ่าน source repository ของตัวเอง ซึ่งใน Gentoo เรียก portage ซึ่งหลักการจะคล้ายกับ FreeBSD ซึ่งใช้ port ในการจัดการ software package

สิ่งที่ผมชอบใน Gentoo คือความตรงไปตรงมา และไม่ลงอะไรเกินจำเป็น ซึ่งเป็นสาเหตุของปัญหาความปลอดภัยในระบบส่วนใหญ่ ความปลอดภัยในระบบปฏิบัติการ หลายๆคนคิดว่า พอมี Firewall แล้วจะปลอดภัย แต่จริงๆแล้ว firewall แค่ช่วยป้องกันในระดับหนึ่งเท่านั้น เหมือนประเทศที่มีขุนศึกชั้นดี แต่การบริหารภายในประเทศเน่าเฟะ ไม่นานข้าศึกก็เจาะเมืองก็แตกจนได้

ปัญหาความปลอดภัยหนึ่งที่พบ ในระบบปฏิบัติการคือ การที่ไม่เคย update software เลย เช่นลง web server ตัวไหน อีกห้าปีก็ใช้ตัวเดิม จึงไม่แปลกที่จะเห็น server ตัวนั้นโดนเจาะระบบอยู่เรื่อยๆ พอโดนเจาะทีก็ update ทีนึง ดังนั้นเรื่องความปลอดภัยจึงเกี่ยวกับการบริหารจัดการ ไม่ใช่เรื่องของเทคโนโลยีเพียงอย่างเดียว ซึ่งในบทความนี้จะพูดถึง เครื่องมือตัวหนึ่งที่จะคอยตรวจสอบว่า ซอฟต์แวร์ตัวไหนในระบบปฏิบัติการมี ความเสี่ยงเรื่องความปลอดภัย

Gentoo หรือ Linux distribution อื่นๆจะมีสิ่งที่เรียกว่า Security Advisories ซึ่งต้องเข้าไปดูที่หน้าเว็บของ Distribution นั้นๆเอาเอง ซึ่งของ Gentoo Linux สามารถเข้าไปดูได้ที่ http://www.gentoo.org/security/en/glsa/ Gentoo มีเครื่องมือตัวหนึ่งที่คอยตรวจสอบได้ว่า ซอฟต์แวร์ตัวไหนที่มีความเสี่ยง โดยเครื่องมือตัวนี้เรียกว่า glsa-check GLSA เป็นตัวย่อของ Gentoo Linux Security Advisories อยู่ในชุดเครื่องมือที่ชื่อ gentoolkit

อ่านเพิ่มเติม

G-Cpan

หากเคยเขียนโปรแกรมภาษา Perl คงจะเคยได้ยินคำว่า CPAN ซึ่งย่อมาจาก Comprehensive Perl Archive Network CPAN เป็นที่เก็บ Perl module จำนวนมาก ซึ่งถูกพัฒนาโดยชุมชนนักพัฒนาโปรแกรมภาษา Perl

บน Gentoo Linux มี portage ของ Perl module มาให้จำนวนหนึ่ง แต่ก็ไม่ได้มากมายอะไร ถ้าหากต้องการติดตั้ง Perl module จาก CPAN เราสามารถทำได้โดยใช้ โปรแกรมที่ชื่อว่า g-cpan

การติดตั้ง g-cpan ก็ทำได้โดย

$ emerge g-cpan

การค้นหา Perl module สามารถทำได้โดยใช้คำสั่ง (ยกตัวอย่าง ต้องการหา module ที่มีคำว่า grep)

$ g-cpan -s grep

 * No ebuild exists, pulling up CPAN listings for grep
/CPAN: Storable loaded ok
Going to read /var/tmp/g-cpan/.cpan/Metadata
  Database was generated on Fri, 03 Apr 2009 10:27:10 GMT
Author          GREP ("Christian Brink" <cbrink@flylines.org>)
Author          VIGREP ("Alireza Aghamohammadi" <aghamohammadi@hotmail.com>)
Distribution    D/DC/DCOPPIT/grepmail-4.80.tar.gz
Distribution    D/DC/DCOPPIT/grepmail-5.10.tar.gz
Distribution    D/DC/DCOPPIT/grepmail-5.30.1.tar.gz
Distribution    E/EL/ELLIOTJS/PPIx-Grep-v0.0.6.tar.gz
Distribution    G/GR/GREP/Acme-Yoda-0.02.tar.gz
Distribution    L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz
Distribution    M/MN/MNEYLON/File-Grep-0.02.tar.gz
Distribution    O/OV/OVID/App-Grepl-0.01.tar.gz
Distribution    S/SB/SBURKE/File-Findgrep-0.02.tar.gz
Distribution    T/TH/THECRAMPS/Acme-Grep2D-0.01.tar.gz
Module          Acme::Grep2D    (T/TH/THECRAMPS/Acme-Grep2D-0.01.tar.gz)
Module          App::Grepl      (O/OV/OVID/App-Grepl-0.01.tar.gz)
Module          App::Grepl::Base (O/OV/OVID/App-Grepl-0.01.tar.gz)
Module          App::Grepl::Results (O/OV/OVID/App-Grepl-0.01.tar.gz)
Module          App::Grepl::Results::Token (O/OV/OVID/App-Grepl-0.01.tar.gz)
Module          Bio::Grep       (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Backend::Agrep (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Backend::BackendI (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Backend::GUUGle (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Backend::RE (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Backend::Vmatch (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Filter::FilterI (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Filter::FilterRemoveDuplicates (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::Root (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::SearchResult (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Grep::SearchSettings (L/LI/LIMAONE/Bio-Grep-0.10.5.tar.gz)
Module          Bio::Tools::Run::PiseApplication::cpgreport (B/BI/BIRNEY/bioperl-run-1.4.tar.gz)
Module          Bio::Tools::Run::PiseApplication::newcpgreport (B/BI/BIRNEY/bioperl-run-1.4.tar.gz)
Module          DS::Transformer::Grep (M/MA/MADZ/DSlib-2.13.tar.gz)
Module          Data::Pipeline::Action::StringReplace (J/JS/JSMITH/Data-Pipeline-0.01.tar.gz)
Module          File::Findgrep  (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Findgrep::I18N (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Findgrep::I18N::en (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Findgrep::I18N::en_us (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Findgrep::I18N::fr (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Findgrep::I18N::i_default (S/SB/SBURKE/File-Findgrep-0.02.tar.gz)
Module          File::Grep      (M/MN/MNEYLON/File-Grep-0.02.tar.gz)
Module          Goo::Grepper    (N/NI/NIGE/Goo-0.09.tar.gz)
Module          Mail::Box::Search::Grep (M/MA/MARKOV/Mail-Box-2.088.tar.gz)
Module          Mail::Mbox::MessageParser::Grep (D/DC/DCOPPIT/Mail-Mbox-MessageParser-1.5000.tar.gz)
Module          POE::Filter::Grep (R/RC/RCAPUTO/POE-1.004.tar.gz)
Module          PPIx::Grep      (E/EL/ELLIOTJS/PPIx-Grep-v0.0.6.tar.gz)
Module          Perl::Critic::Policy::BuiltinFunctions::ProhibitBooleanGrep (E/EL/ELLIOTJS/Perl-Critic-1.098.tar.gz)
Module          Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidGrep (E/EL/ELLIOTJS/Perl-Critic-1.098.tar.gz)
Module          Perl::Critic::Policy::BuiltinFunctions::RequireBlockGrep (E/EL/ELLIOTJS/Perl-Critic-1.098.tar.gz)
Module          Pipe::Tube::Grep (S/SZ/SZABGAB/Pipe-0.03.tar.gz)
Module          Plagger::Plugin::Search::Grep (M/MI/MIYAGAWA/Plagger-0.7.17.tar.gz)
Module          SVK::Log::Filter::Grep (C/CL/CLKAO/SVK-v2.2.1.tar.gz)
Module          Test::ConfigureGrepmail (D/DC/DCOPPIT/grepmail-5.30.1.tar.gz)
Module          Text::Pipe::List::Grep (M/MA/MARCEL/Text-Pipe-0.08.tar.gz)
Module          XMLTV::Grep     (E/ED/EDAVIS/xmltv-0.5.33.tar.gz)
53 items found

สมมติว่าต้องการ install module File::Grep การ install ใช้คำสั่ง

$ g-cpan -i File::Grep

ข้อมูลเพิ่มเติม g-cpan Guide