понедельник, 24 мая 2010 г.

Apache mod_rewrite - Modifying the Query String

By default, the query string is passed through unchanged. You can, however, create URLs in the substitution string containing a query string part. Simply use a question mark inside the substitution string to indicate that the following text should be re-injected into the query string. When you want to erase an existing query string, end the substitution string with just a question mark. To combine new and old query strings, use the [QSA] flag.

Origin.

суббота, 27 февраля 2010 г.

Мегафон порадовал.

Являюсь я счастливым владельцем 3G-модема HUAWAY, приобретенного с подпиской Мегафона.

До последнего времени сей девайс чудесно обнаруживался моей Fedor'ой как модем. Соответственно, подключение к Сети настраивалось в 3-4 клика мышью в мастере настройки модемного соединения NetworkManager'а. Но вот пришли обновления udev и NetworkManager'а. Очень неприятные, надо сказать, обновления.

"Благодаря" первому девайс перестал обнаруживаться как модем. Откат обновлений исправил ситуацию. Но тут подоспело обновление NetworkManager'а, после которого модемное подключение через оный перестало работать вообще :( Подробнее здесь.

С горя решил я заглянуть в flash-раздел, который располагается на том же девайсе. И, не поверите, среди виндоподобного хлама я узрел директорию Linux. В ней оказался дистрибутив программы аналогичной, что пользуют с модемом под Windows. Установка с помощью ./install оказалась простой и удобной: спросила куда лучше развернуться, развернула свою JRE, развернула себя. :)

Сия программа видит девайс и устанавливает соединение! Ура, я в Сети. Спасибо ребятам из Мегафона, за продуманность сервиса.

Теперь можно неторопясь ждать, когда все-таки пофиксят это, чтобы проверить это. Т.к. после последнего обновления udev, даже даунгрейд не помогает.

понедельник, 18 января 2010 г.

Сборка примеров plplot под Fedora x86_64

plplot - это чудесная библиотека, позволяющая формировать графики и отображать их на экран либо сохранять в файл. Главная прелесть библиотеки заключается в том, что она позволяет не заморачиваться на GUI и графическом приложении, что мне собственно и понадобилось. Кому интересно, библиотека имеет громадную пачку биндингов от C++ до Perl. Но мне лично нужен C.

Прежде чем встараивать библиотеку в мою прогу, решил я собрать plplot'ские примеры. На моем ноуте живет Fedora x86_64, а програма, которую я разрабатываю собирается пока только под i386. Соответственно, и примеры мне нужно было собрать под i386.

Что установлено:

$ yum list plplot\*
Installed Packages
plplot.x86_64            5.9.5-1.fc12         @fedora
plplot-devel.i686        5.9.5-1.fc12         @fedora
plplot-libs.i686         5.9.5-1.fc12         @fedora
plplot-libs.x86_64       5.9.5-1.fc12         @fedora
plplot-qt.i686           5.9.5-1.fc12         @fedora
plplot-qt.x86_64         5.9.5-1.fc12         @fedora
plplot-qt-devel.i686     5.9.5-1.fc12         @fedora
plplot-tk.x86_64         5.9.5-1.fc12         @fedora

Для начала скопировал всю директорию с примерами из /usr/share/plplot5.9.5/examples/ к себе в домик.

$ make
cd c; make
make[1]: Entering directory `/home/neuron/study/development/plplot_examples/c'
/usr/bin/gcc x01c.c -o x01c `pkg-config --cflags --libs plplotd`
Package plplotd was not found in the pkg-config search path.
Perhaps you should add the directory containing `plplotd.pc'
to the PKG_CONFIG_PATH environment variable
No package 'plplotd' found
In file included from x01c.c:25:
plcdemos.h:14:22: error: plConfig.h: No such file or directory
plcdemos.h:15:20: error: plplot.h: No such file or directory
plcdemos.h:51:1: warning: "isnan" redefined
In file included from plcdemos.h:10,
                 from x01c.c:25:
/usr/include/math.h:257:1: warning: this is the location of the previous definition
x01c.c:26:21: error: plevent.h: No such file or directory
...
x01c.c:349: error: ‘y’ undeclared (first use in this function)
make[1]: *** [x01c] Error 1
make[1]: Leaving directory `/home/neuron/study/development/plplot_examples/c'
make: *** [c/x01c] Error 2

Локализуем ошибку.

$ pkg-config --cflags --libs plplotd
Package plplotd was not found in the pkg-config search path.
Perhaps you should add the directory containing `plplotd.pc'
to the PKG_CONFIG_PATH environment variable
No package 'plplotd' found

Ага. Информацию о пакете найти не может... Устанавливаем необходимую переменную окружения и идем дальше.

$ export PKG_CONFIG_PATH=/usr/lib/pkgconfig
$ pkg-config --cflags --libs plplotd
-I/usr/include/plplot  -lplplotd -lltdl -ldl -lm -lcsirocsa -lcsironn -lqhull -lqsastime -lfreetype

$ make
cd c; make
make[1]: Entering directory `/home/neuron/study/development/plplot_examples/c'
/usr/bin/gcc x01c.c -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/4.4.2/../../../libplplotd.so when searching for -lplplotd
/usr/bin/ld: skipping incompatible /usr/lib/libplplotd.so when searching for -lplplotd
/usr/bin/ld: cannot find -lplplotd
collect2: ld returned 1 exit status
make[1]: *** [x01c] Error 1
make[1]: Leaving directory `/home/neuron/study/development/plplot_examples/c'
make: *** [c/x01c] Error 2

Собираться пытаться начинает, devel-пакета не находит. Помните, что установлен только plplot-devel.i686? Поэтому идем в директорию 'c' и правим Makefile. В параметры сборки добавляем ключ -m32. Так как меня интересовали только примеры на C, то в этой директории я и остался. Собираемся дальше.

$ make
/usr/bin/gcc x01c.c -m32 -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/ld: skipping incompatible /usr/lib64/libltdl.so when searching for -lltdl
/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [x01c] Error 1

Угадайте откуда косяк? Правильно. Собирраем мы теперь 32-битное приложение и зависимости ему нужны 32-битные...

$ rpm -qf /usr/lib64/libltdl.so
libtool-ltdl-devel-2.2.6-17.fc12.x86_64
$ sudo yum install libtool-ltdl-devel.i686

Далее таким же образом выяснилась необходимость qhull-devel.i686, freetype-devel.i686, gtk2-devel.i686, atk-devel.i686, glib2-devel.i686, pango-devel.i686, cairo-devel.i686 и fontconfig-devel.i686. И вуаля:

$ make
/usr/bin/gcc x01c.c -m32 -o x01c `pkg-config --cflags --libs plplotd`
/usr/bin/gcc x02c.c -m32 -o x02c `pkg-config --cflags --libs plplotd`
...
/usr/bin/gcc x31c.c -m32 -o x31c `pkg-config --cflags --libs plplotd`
/usr/bin/gcc x32c.c -m32 -o x32c `pkg-config --cflags --libs plplotd`

Результаты работы тестовых примером меня порадовали. Библиотека оказалась именно тем, что мне нужно. А благодаря легкому сексу при сборке примеров, я знаю чего стоит ожидать при сборке своей проги с этой библиотекой...

P.S. Не зря Bugzill'е есть репорт об ошибках при сборке примеров ;) Там, кстати, решили баг не фиксать кажется...

воскресенье, 20 декабря 2009 г.

Движения разделов или grub потерялся...

Давно хотел синхронизировать свои наработки по учебе накопленные на ноутбуке с тем, что живет на домашнем компьютере.

Сразу стоит оговорится, что с незапамятных времен живет у меня на домашнем компьютере две ОС. Fedora Linux и еще одна известная проприетарная система. Так вот, когда ставил эти системы, то решил, что для домиков в Linux мне вполне хватит нескольких Гб, и почти весь диск (кроме /, /boot, /home и /var) отдал под общий раздел с форматированием присущим той самой проприетарной системе. Соответственно, на этот раздел легло тяжкое бремя хранения мультимедиа-контента и остального хлама. А у этого самого волшебного формата ФС есть неприятная особенность - он понятия не имеет о POSIX-правах доступа :( Здесь-то я как раз и "наступил на грабли"...

Т.к. при виде прав доступа к файлам в 777 у меня сердце кровью обливается, то на точку монтирования (с всем содержимым выли выданы чёткие права) и при попытке взять свежий слепок из svn-репозитария я получал много варнингов/ошибок, мол: "Хозяина, права выставить не могем. Совсем плёхо-плёхо..." И подобный неприятные ощущения всплывали периодически. Последней каплей стала попытка учебную директорию со всем содержимым закатать в bzr-репозиторий. Волшебная ФС вообще не поняла, чего от нее хотят и тупо хлопала глазками в пол...

И тут я понял! А нафига мне под мои видео-музыки так много пространства... Хауса и Друзей давно пора на болванки закатывать и в погреб!

Решил я подвинуть немного разделы :) Благо интересующие меня сущности в таблице разделов располагались близко друг от друга. Между ними буквально /var только затесался.
Дальше тривиально:
 - убил лишнее пор^W видео на большом разделе;
 - снял dump с /var и /home;
 - слил их от греха подальше на ноут;
 - подвинул раздел с неext ФС;
 - загрузился с Fedora 12 DVD в rescue-режиме;
 - cfdisk'ом снес /home и /var;
 - им же создал вышеозначенные разделы где и какие надо;
 - отформатировал свежие разделы, но уже в ext4;
 - восстановил содержимое /home и /var с помощью restore.

Отдельный поклон BSD'ям за dump/restore.

Бутаюсь и получаю первый болт :( Стартует голый GRUB и весело подмигивает курсором. Ну, думаю, таблицу изменял, может где MBR зацепил... Бутнулся обрабно в rescue mode. Провалился в /mnt/sysimage. Дошел ножками до конфигов grub'а. Осмотрел - все на месте. Проинсталил grub заново (grub-install hd0). Бутнулся...

И получил второй болт :( Теперь grub видел свой конфиг, но из меню отрабатывал только chainloader, который вел в ту ось, в которую мне не надо. На законных ядрах grub опять грустно разводил руками... Мол: "Нету здесь ничего, хозяйна... :'( " Как же так, я ж не двигал разделы в начале. Порядок, номера, все на месте осталось...

Ну чтож делать. Подался я гуглить на ноуте, параллельно загружаясь в rescue mode с диска. Нашел несколько несчастных с подобными симптомами, и почитал реплики сочуствующих. Так как проблема ограничивалась конфигом grub'а, то решил покурить его по-внимательнее:

# cat /boot/grub/grub.conf
default=0
timeout=2
splashimage=(hd0,2)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.31.6-166.fc12.x86_64)
        root (hd0,2)
        kernel /vmlinuz-2.6.31.6-166.fc12.x86_64 ro root=UUID=fff0ee4c-021c-45e4-84fd-de8bdd25e731 rhgb SYSFONT=latarcyrheb-sun16 LANG=ru_RU.UTF-8 KEYTABLE=us nomodeset
        initrd /initramfs-2.6.31.6-166.fc12.x86_64.img
title Fedora (2.6.31.5-127.fc12.x86_64)
        root (hd0,2)
        kernel /vmlinuz-2.6.31.5-127.fc12.x86_64 ro root=UUID=fff0ee4c-021c-45e4-84fd-de8bdd25e731 rhgb SYSFONT=latarcyrheb-sun16 LANG=ru_RU.UTF-8 KEYTABLE=us nomodeset
        initrd /initramfs-2.6.31.5-127.fc12.x86_64.img
title Other
        rootnoverify (hd0,0)
        chainloader +1

Через некоторое время до меня дошло, а чего это Other живет на (hd0,0), а /boot с ядрами (который идет следом в таблице разделов) на (hd0,2)! Правлю все на (hd0,1) и получаю полностью работоспособную систему.

Собственно был еще один болт. Разделы-то я подвинул, а новые UUID в fstab я не прописал :) Но система ткнула меня в эту оплошность при первой же попытке загрузиться... rescue mode -> blkid -> vim /etc/fstab и все в шоколаде.

Внимание, вопрос! Какого х%#?

Оно ж работало как-то? Или это волшебство произошло при обновлении на Ferora 12-ю, которое недавно перенесла домашняя машина... Если кто подскажет, я крепче спать стану...

Про merge bzr-веток расскажу позже, если чего интересное будет...

четверг, 28 мая 2009 г.

Если Вы пытаетесь поставить Fedora 10 (или около того) на сервер с RAID-контроллером от Adaptec, то скорее всего вы сталкнетесь с тем, что система встанет нормально, но загружаться не захочет. А дело в том, что образе initrd не хватает модуля i2o_block. Решение простое: пересобрать initrd с нужным модулем.

Ниже пример с использованием Fedora install CD в rescue режиме:

chroot /mnt/sysimage
rm /boot/initrd-2.6.27.24-170.2.68.fc10.i686.img
mkinitrd --with=i2o_block /boot/initrd-2.6.27.24-170.2.68.fc10.i686.img 2.6.27.24-170.2.68.fc10.i686