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

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

รักษาความปลอดภัยอย่างง่ายๆบน 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

อาการแปลกๆของ MySQL บน Xeon quad-core

เรื่องมีอยู่ว่า ผมทำ benchmark MySQL เพื่อให้แน่ใจว่ามันสามารถรับ load ได้จริง แต่เนื่องจากยุคนี้เป็นยุคของ Multi-cores การขยาย CPU จะไม่แข่งกันด้วย clock speed แต่จะแข่งกันที่จำนวน core ของ CPU โปรแกรมก็ต้องปรับเปลี่ยนเพื่อให้สามารถทำงานได้ดีบนจำนวน core ที่มากขึ้นเหล่านี้

MySQL เป็น database server ตัวหนึ่งที่ทำงานในลักษณะของ multi-threads ซึ่ง OS กระจาย thread ไปทำงานในแต่ละ core ของ CPU เคยได้ยินมาว่า MySQL ทำงานได้ไม่ดีนักกับจำนวน thread มากๆ มีหลายคนที่พยายามจะแก้ข้อจำกัดนี้ หนึ่งในนั้นคือ google ซึ่งมี code อยู่บน google code โดยจะมี patch เพื่อแก้ปัญหานี้

เดิมผมมี MySQL ทำงานอยู่บนเครื่อง PC Quad-core (Q6600) เครื่องหนึ่ง ลง Gentoo Linux ไว้ เมื่อได้ source code MySQL มาก็จัดแจง patch compile และ run โปรแกรม sysbench เพื่อทำ benchmark ผลออกมาน่าพอใจ throughput ออกมาได้พัน transaction ต่อวินาที (กราฟสีแดง)

ต่อมาได้ server ที่มี CPU Xeon quad-core มาทดสอบ ก็จัดแจงทำเหมือนเดิม แม้กระทั่ง mysql configuration file ก็ใช้ของเดิม พอ run sysbench อีกครั้ง ผลที่ออกมาน่าตกใจมาก (กราฟสีเขียว) throughput หล่นลงไปเหลือร้อยนิดๆ ลองเจ้าไปดูระระบบ CPU ก็ idle เกือบ 90% มันเกิดอะไรขึ้นหว่า พยายามหาคำตอบอยู่สองวันสองคืน ค้นใน Google ไม่มีใครพูดถึงเรื่องนี้เลย

sysbench-1

พี่ที่ทำงานช่วยดูเรื่องนี้ด้วยโดยลองลง FreeBSD 7.1 ให้ผลที่ไม่ต่างกัน ลองทำแบบเดิมในเครื่อง server ที่ใช้ Xeon quad-core อีกเครื่องก็ได้ผลไม่ต่างกัน นั่นแสดงว่าไม่ใช่ความบังเอิญ ผมยังไม่มีคำตอบในเรื่องนี้ เพราะไม่มีปัญญาจะแก้ไขอะไรได้

วิธีแก้ปัญหาของผมคือ เปลี่ยน OS ผมเริ่มด้วยการลง CentOS 5.2 ไว้ที่ server เครื่องหนึ่ง และตามด้วย Open Solaris ไว้ที่ server อีกเครื่องโดยที่ยังไม่ได้ทำ benchmark ใน CentOS เพราะคิดว่า Linux เหมือนกันคงเจอปัญหาเดียวกัน เลยมุ่งเป้าไปที่ Open Solaris มากกว่า พอลงเร็จพยายาม set network ให้ Open Solaris อยู่นานแต่ไม่สำเร็จ เริ่มเบื่อเลยกลับมาทำ benchmark ใน CentoOS ที่ลงไว้ก่อนหน้านี้ ผลออกมาอยากจะกรี๊ดดังๆ เพราะอดนอนมาสองคืน แต่แก้ได้ด้วย CentOS สาเหตุเกิดจากอะไรไว้จะกลับมาหาคำตอบ

sysbench-2

เมื่อถูก Brute-Force Attack ที่ sshd

Unix server ส่วนมาก เปิด secure shell daemon (sshd) ไว้เพื่อให้ admin สามารถ access เข้ามาจัดการ server และส่วนมากก็ไม่ได้ตั้ง ACL ใดๆไว้ เพราะต้องการที่จะ remote จากที่ไหนๆก็ได้ แต่ผลที่ตามมาคือ มักจะมีผู้ไม่ประสงค์ดีลักลอบมาเดา username และ password ของ account ในเครื่องเรา วันดีคืนดีเกิดมันเดาถูกขึ้นมา อาจจะซวยได้ ถ้าจะให้ดีก็ควรเปลี่ยน password บ่อยๆ

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