Valery's Mlog

Mindlog of a Freak

Archive for the ‘Linux’ Category

March 27th, 2005 by Valery Dachev

Postfix Matters

Последните два дни преминаха основно в реорганизация на нещата в доставчика в Казанлък – трябва??е да превърна “една ма??ина за всичко” в “две ма??ини за малко повече”. Гръмко наречената “corwin” вече няколко месеца сервира??е ??нтернет на PPTP клиенти, носе??е Bind, Apache с PHP, MySQL и какво ли още не. Ма??инката е наистина мощна – AMD Athlon 64 @ 2.8 GHz и 512 Mb памет. ??нсталирането и преди доста време наистина ми взе здравето, тъй като amd64 архитектурата все още няма официална поддръжка от страна на Debian. Още повече, че на няколко пъти прекомпилирах ядрото заради странното поведение на HighPoint 374 SATA RAID контролера и невероятния проблем с блокиращата ми??ка.

Както и да е… поставих си задачата да отделя друга ма??ина за router, PPTP server и accounting. ??нсталирах я набързо Debian-Installer RC2 (не бях обърнал внимание, че само преди броени дни е излязъл и RC3). Останалото време прекарах в мигриране и стягане на набързо написаната преди вече половин година система. Ако се хвана по-сериозно, може и да я пусна свободно…

Ноооо… и това не ми бе??е мисълта. ??нтересното се получи, когато трябва??е да подкарам електронна поща на така поосвободилото се amd64. Привикнал към комбинацията на qmali и vpopmail, която относително лесно се подкарва под Debian, но пакетите просто ги няма??е в така или иначе неофициалния amd64. Не съм превърженик на “make && make install” и ре??их, че ще подходя друго яче: отдавна бях ре??ил да поразгледам Postfix и наистина се оказа нещо особено ценно, още повече, че всичко замина директно в MySQL. Възмущавах се, че така и не направиха едно читаво описание на това кое какво е и да дадат примерни структури за тези бази и съответните файлове, но съм се лъгал: на сайта на Postfix Admin намерих едно кратко (макар и не изцяло разяснено) ръководство за инсталиране на Postfix, което ми помогна много бързо да подкарам работещо ре??ение включващо Postfix (с виртуални домейни и MySQL поддръжка), Courier POP3(-SSL)+IMAP(-SSL) и Squirrelmail. Тези дни се надявам да намеря място за SpamAssassin и ClamAV в цялата картинка, за да бъде по-пълна, а ако намеря и повече свободно време да задълбая повече в тези неща, ще скалъпя нещо на български по въпроса.

??ска??е ми се да направя и някакъв елегантен изход от обстоятелството, че пощенският сървър “corwin” всъщност се намира в рамките на една локална мрежа и не разполага със собствен публичен адрес (неуредици в Digsys ?), а стои зад ма??ината “gateway”. Под думата “елегантен” си представях нещо от типа: на “gateway” да има инсталиран SMTP сървър, като MX записите за Internet да сочат неговия публичен IP адрес, а за локалната мрежа – частния IP адрес на “corwin”. Така всяка поща, която идва от ??нтернет, ще??е да отива на на “gateway”, който да ползва “corwin” за Smart Host. Тя пък от своя страна директно ще??е да обработва локалната поща и да играе ролята на SMTP сървър за клиентите ни. Спънката се оказа, че “RFC-1918 addresses are never valid for MX targets on the public Internet!”. Единият вариант бе??е да се опитам да изключа тази проверка от smail, но пък не бе??е ясно дали, ако мина на друг SMTP сървър, щях да мога да го направя. Другият вариант, който всъщност реализирах, бе??е въобще да махна какъвто и да било SMTP сървър от “gateway” и да правя DNAT за връзките откъм Internet към 25ти порт до “corwin”. Най-красивото е, че работи перфектно и не изисква никакви други промени…

February 21st, 2005 by Valery Dachev

netacct-mysql

Днес излезе нова версия (0.78) на netacct-mysql (наследник на едновремешния netacct), който към момента се поддържа от Николай Христов (Geroy). С въпросната програмка се наложи да се сблъскам наскоро, когато правих отчитане на трафика на VPN потребителите за един от доставчиците в Казанлък. Затова успях и аз да дам своя принос, като пооптимизирах кода на места, разчистих друг, оптимизирах заявките към MySQL и поправих отчитането така, че да работи с PPP интерфейси. Останалите нови неща (с които нямам нищо общо) са поддръжката на Oracle, запис на данните на всеки 5 мин. (помага за rrdtool графики), подходящи индекси на таблиците и т.н. и т.н. (няма да ям хляба на сайта на проекта я). Последната официална версия беше от преди две години и половина и се нуждаеше от разчистване на ненужен код, обновление и поправка на документацията. Към въпросната програмка съществува и PHP интерфейс Netacct-NetStat. За съжаление така плаче за преправяне, че единственият начин сълзите му да се забършат, е да се пренапише (най-малкото защото SQL injection атаките там въобще не са чужди).

January 20th, 2005 by Valery Dachev

DotDeb.Org: PHP5 и libpng2

Дам, май временно ще се откажа от идеята за PHP5 на сървъра. Оказва се, че пакетът php5-gd (5.0.3-1.dotdeb.0) не е особено съвместим с libpng2 (1.0.18-1), които имам инсталирани на сървъра. Или поне това е грешката, която изплюва:

Fatal error: imagecreatefrompng() [function.imagecreatefrompng]: gd-png: fatal libpng error: Incompatible
libpng version in application and library in ... on line ...

Интересно, че същият скрипт, пуснат от командния ред не дава тази грешка. Двете позлват един и същи php.ini файл, така че на дали използваното разширение е различно.

php-cgi като че ли също не дава този проблем. Мислих да подкарам PHP да работи като CGI, но това директно ми отрязва всякакви PHP флагове, които слагам в конфигурациите на виртуалните хостове (като open_basedir, safe_mode и т.н..). Върнах се на PHP4, докато отстранят проблема. Отделно, че в Debian модулът за Action директивата не се зарежда по подразбиране (бях достатъчно глупав да не проверя това). Тия дни съм егати блейката…

October 29th, 2004 by Valery Dachev

PHP: PHP5, PHP5 в Debian

Ще започна с това, че PHP се занимавам вече около 5-6 години. Голяма част от това време прекарах пишейки на тогава последните версии, а именно PHP4. От известно време насам обаче пропагандата на новия PHP5 стана доста сериозна, та рекох и аз да се заигря с това животно. Е, страшно въм въодушевен, честно. Едно е да четеш тук-таме, друго си е да понапишеш нещо на практика. То само четейки документацията, на човек му става мъчно направо, че хостинг сървърите, с които разполага на дали скоро ще мигрират към PHP5 и ще трябва доста дълго да следи някаква съвместимост с PHP4 (да не говорим колко машини из Интернет са все още на вече архаичния PHP3). Та какво е новото и на теория, и на практика:

  • Zend Engine 2: PHP5 върви с нов Zend Engine 2 – тотално преправен и гарантиращ по-бързо parse-ване и изпълнение на скриптовете. Отделно, че редица оптимизатори вече поддържат или работят по поддръжката на PHP5.
  • Нов-та-лъска обектен модел: PHP преди версия 5 никога не си е поставял за цел да бъде обектен език, макар обектният модел да датира от времената на PHP3. В PHP4 не е пипван кой знае колко и наистина не представлява нищо особено. Въпреки това, въпреки ограниченията си, по света се използва доста за по-големи приложения. Поддръжката е наистина слаба, вкарани са минимален брой възможности, а и има някои абсолютни недомислици: обектите се подават по стойност, а не по указател (което при извикването на функция с обект като параметър прави клониране на обекта); проблеми с конструкторите при онаследяването и още редица други. Е, в PHP5 всичко това е пренаписано. Макар да съм си свикнал на доброто старо структурно програмиране, обектния модел на PHP5 предоставя невероятни възможности – имате почти всичко за което можете да се сетите: модификатори за достъп до променливи и методи, деструктори (каквито в PHP3/4 нямаше), интерфейси, клониране на обекти, статични членове, абстрактни класове и методи, интератори и какво ли още не.
  • Изключения (exeptions): Във връзка с това пренаписване (защото си е такова) на обектния модел в PHP5 се появи възможността за създаване и обработка на изключения. Няма да влизам в подробности с тях, тъй като в една от статиите изброени по-долу всичко е описано страхотно.
  • Пренаписана XML поддръжка: Всички библиотеки използващи XML вече използват libxml2 библиотеката. По-подробно тези неща са разгледани в една от статиите по-долу.
  • MySQLi (MySQL Improved): Интересно е да се отбележи и наличието на нова подобрена библиотека от функции за работа с MySQL бази данни с версия 4.1.2 и нагоре. Поддържат се подготвени заявки, компресия, SSL криптиране, контрол на транзакции и др..
  • Вграден SQLite: SQLite вече е върви със самия PHP5, така че да се нуждаете от допълнителната му инсталация при редица малки приложения. Какво е SQLite ? Еми… малка C библиотека – имплементацция на SQL стандарта, която не се нуждае от отделен SQL сървър.

Абе невероятно е ! Направо ми иде да скачам като Стив Балмър на developer-ски семинар на Майкрософт… с риск да ме помислят за тотално изперкал. Не че ще сгрешат много де…

Естествено, образовайки се толкова много с изчитане на редица статии в Интернет по въпроса, рекох си да го сложа. Карам я на Debian GNU/Linux. За съжаление към този момент PHP5 още не се е появил на пакет даже в testing дистрибуцията. Въпреки това, за тези от вас, които (като мен) ги мързи да си го компилират на ръка, могат да добавят следните редове в /etc/apt/sources.list:

deb http://packages.dotdeb.org ./
deb-src http://sources.dotdeb.org ./

Вторият ред е за тези, които искат и изходния код на пакетите, но може и без него. Следват в командния ред:

apt-get update
apt-cache search php5
apt-get install php5

За съжаление модулът (в пакета libapache-mod-php5) в момента са само за първата версия на Apache, т.е. за Apache 2 ще трябва да използвате PHP5 като CGI (както всъщност доста администратори го предпочитат) – нещо което ще направите така или иначе, ако ползвате пакети и друг уеб-сървър.

Та, ето малко връзки за образоване:

Еми… успех. Аз продължавам да си играя… :)