Uniвсячина

понемножку о Linux и программировании

Sun бесплатно раздает 2 DVD с OpenSolaris Start Kit

Заходим на http://get.opensolaris.org/. Регистрируемся, заполняем форму и, если верить тому что написано на сайте, через 2-4 недели к вам придут два DVD с OpenSolaris Start Kit, в который входит:

  1. Solaris Express – версия Соляриса, в которой реализованы все самые последние технологии: ZFS, DTrace, Containers и сотни других уникальных фич.
  2. Live CDs – образы live-cd с дистрами Nexenta OS, BeleniX и SchilliX.
  3. Sun Studio compilers – родные компиляторы от Sun под Solaris SPARC и x86/x64 платформы.
  4. OpenSolaris source code – ну тут все понятно.

Настройка Nginx для работы с Apache2 и Subversion

Есть Apache2 + mod_dav_svn. Висит на 127.0.0.1:80. Есть Nginx с конфигурацией:

....
server {
    listen                  aa.bb.cc.dd:443;
    server_name             .domain.tld;

    ssl                     on;
    ssl_certificate         /etc/nginx/ssl-domain.tld.pem;
    ssl_certificate_key     /etc/nginx/ssl-domain.tld.pem;

    location / {
        proxy_pass          http://127.0.0.1:80;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

При выполнении команды svn copy на Nginx приходит запрос приблизительно такого вида:

COPY /pathname HTTP/1.1
Host: domain.tld
Destination: https://domain.tld/another_pathname

Когда такой запрос проксируется на Apache, то из-за того, что в команде
COPY источник — это URI со схемой http, а destinationURI со схемой https (как это и указано в заголовке Destination), Apache сразу возвращает код 502. В принципе, поведение Apache соответствует RFC2518:

502 (Bad Gateway) — This may occur when the destination is on another server and the destination server refuses to accept the resource.

В результаты, пользоваться в такой конфигурации Subversion практически невозможно. Если сделать вот такой финт, то все работает нормально:

....
        set $fixed_destination $http_destination;
        if ($http_destination ~* ^https(.*)$)
        {
                set $fixed_destination http$1;
        }

        proxy_pass              http://127.0.0.1:80;
        .....
        proxy_set_header        Destination     $fixed_destination;
....

Будем надеяться, что в следующих версиях Nginx это починят.

Quake3 на Linux (Aka OpenArena)

Есть такой интересный проект OpenArena — first person shooter на движке Quake 3 (который, как известно, Id Software выпустила под лицензией GPL. По сути это и есть Quake 3, только контент (карты, модели, текстуры, звук) разрабатывается с нуля под лицензией GPL. Чтобы сделать полностью открытую игру.

Все это классно и замечательно, но пока что у разработчиков с успехом удалось довести до ума только движок. А вот с контентом – как то не очень. Текстурки так себе, модельки совсем кривые, про звуки лучше промолчу.

Но есть решение. Не очень идеологически правильное, но зато работает :)
Ну вы уже догадались наверное. Да-да, можно закопировать .pk3 файлы от windows-версии Quake 3 в ОпенАрену. И будет Quake 3 под линуксом точь в точь, как под виндовсом.

Бэкпортинг на Ubuntu 6.10 Edgy

Я уже писал как можно самим делать бэкпорты для Debian Sarge. А оказывается, что точно так же можно делать бэкпорты из Ubuntu 7.04 Feisty Fawn в Ubuntu 6.10 Edgy.

Все что нужно – это прописать в /etc/apt/sources.list следующие строчки:

deb-src http://archive.ubuntu.com/ubuntu/ feisty-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ feisty main universe multiverse

Остальные строчки начинающиеся на deb-src закомментировать. А дальше по накатанной схеме :)

Профайлинг PHP-приложений на Debian Sarge

Когда какой нибудь сайт на PHP начинает тормозит и кушать ресурсы, первое что приходиться делать — локализовать кто жрёт проц, MySQL или PHP. Если мускул, то включаем mytop и начинаем шаманить с индексами и оптимизацией запросов. Если PHP – то все несколько сложнее. С помощью mod_status в Apache можно приблизительно прикинуть какие запросы грузят. Но посмотреть, что именно грузит, не так просто. Необходимо воспользоваться profiling tools.

Для PHP есть два наиболее популярных профайлера – APD: и Xdebug. Первый достаточно примитивен и с 2004 года не развивается. Поэтому будем использовать более продвинутый и мощный вариант – xdebug.

apt-get install php4-dev php4-pear
pear install xdebug

Добавляем в php.ini:

zend_extension="/usr/lib/php4/20020429/xdebug.so"

Перезагружаем апач:

apache2 -t
apache2ctl restart

Делаем тестовую пхп-страничку с <? phpinfo(); ?> и проверяем, чтобы в браузере появилась строчка:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
with Xdebug v1.3.2, Copyright (c) 2002, 2003, by Derick Rethans

Предположим мы хотим профилировать файл index.php. Создаем его копию с именем index_prof.php и добавлаем в начало страницы вызов функции xdebug_start_profiling(), а в конец вызов xdebug_dump_function_profile(XDEBUG_PROFILER_FS_SUM) и xdebug_stop_profiling(). XDEBUG_PROFILER_FS_SUM – константа задающая режим отчета.

Открываем в браузере http://domain.tld/index_prof.php и получаем после тега </html> аккуратную табличку с результатами профайлинга.