среда, 2 июля 2008 г.

Patch для pidgin (Ubuntu 8.04)



Качаем и ставим. http://ppa.launchpad.net/philipp-dreimann/ubuntu/pool/main/p/pidgin/libpurple0_2.4.1-1ubuntu2-1_i386.deb
Или можно собрать самим. (Например для Debian)
1) apt-get install build-essential fakeroot
2) apt-get source pidgin
3) Качаем патч http://launchpadlibrarian.net/15741199/pidgin-2.4.2-icq.patch
4) cd pidgin-2.4.1 && patch -p0 < ../pidgin-2.4.2-icq.patch
5) dpkg-buildpackage -rfakeroot
6) dpkg -i libpurple0_2.4.1-1ubuntu2-1_i386.deb

воскресенье, 18 мая 2008 г.

Установка ubuntu-server 8.04 на VirtualBox 1.6.0

Установка проходит отлично, но после установки GRUB выдает сообщение, что не может загрузиться с текущим ядром. Все дело в том, что PAE поумолчанию включено в ядре ubuntu-server.
Для решения этой проблемы можно или загрузиться еще раз в rescue режиме с ISO образа и устновить general ядро. Или так как PAE поддерживается в VirtualBox 1.6.0 включить в настройках:

пятница, 2 мая 2008 г.

Полезные утилиты для работы с XFS

Если у вас есть большой раздел с XFS который по каким-то причинам достаточно часто заполнялся практически на 100%, то фаилы на нем могут быть достаточно сильно фрагментированы. Для того, чтобы это проверить и воспользоваться онлайн дефрагментацией необходимо установить xfs_utils, xfsdump.

Для Debian/Ubuntu выполняем

sudo apt-get install xfs_utils xfsdump

Смотрим насколько сильно фрагментирован раздел

sudo xfs_db -r /dev/sdb1
xfs_db> frag
actual 278616, ideal 24966, fragmentation factor 91.04%

Итак теперь, когда мы выяснили, что дефрагментировать раздел не помешает - воспользуемся тем, что xfs умеет проводить онлайн дефрагментацию раздела.
Запускаем

sudo xfs_fsr -v /dev/sdb1
/home/ftp start inode=0
ino=163
extents before:2 after:1 DONE ino=163
ino=169
extents before:2 after:1 DONE ino=169
ino=171
extents before:2 after:1 DONE ino=171
ino=1391
......

После первого прохода результат

xfs_db> frag
actual 48121, ideal 24966, fragmentation factor 48.12%

Чтобы выполнить сразу несклько проходов можно запустить с парметром -p или указать сколько по времени работать с -t

вторник, 12 февраля 2008 г.

Сетевая установка OpenBSD на Sun Netra T1


Попалась мне старая списанная машинка Sun Netra T1 105. Штука оказалась очень замечательная 1U, глубина как раз под комуникационный шкаф. В общем мечта, а не роутер. Если бы не одна проблема. CDROM в этой модификации как класс отсутствовал, выхода на клаву и монитор тоже нету. Покрутив ее пару раз обнаружил 2x serial, 2x ethernet, SCSI и питание. В общем-то на первый взгляд ситуация очень нехорошая :)
Доступные порты:

Ситуация еще осложнилась тем, что отсутствовал serial кабель. Sun за такой кабель хотела что-то около 150$. Но посмотрев на рядом лежащий стандартный цисковский кабель пришла глупая идея воткнуть его, вдруг заработает :) Как ни странно - заработало.
Итак подключаемся к консоли, открываем minicom. Коннект есть, Netra начинает грузиться SunOS 5.8 (Solaris 8).

Netra t1 (UltraSPARC-IIi 360MHz), No Keyboard
OpenBoot 3.10.24 ME, 512 MB memory installed, Serial #XXXXXX.
Ethernet address XX:XX:XX:XX:XX:XX, Host ID: XXXXX.

Для начала пытаемся загрузиться по сети. Ребут, тыканье во все подряд и выдергивание дисков не помогает.По сети машинка отказывается грузиться совершенно. Но, как говориться, если ничего не помогает - прочтите, наконец, инструкцию:
Инструкция гласит, что управление загрузкой производиться через утилиту lom. Чтобы ее запустить нужно ввести "lom" Приглашение коммандной строки меняется на lom>
lom>version
LOM version: 2.1
LOM checksum: 7CA3
LOM firmware build Aug 6 1999 09:46:27
Далее жмем .# и попадаем в приглашение "ok>"
ok> boot net bsd.rd
Данная команда пытается загрузить по сети bsd.rd фаил через tftpd
Для установки нам понадобиться настройка rarpd,tftpd,nfs-server. Сервером в данном случае выступал другой комп с OpenBSD.
Итак,
1) Добавляем MAC адрес нашей нетры в /etc/ethers.
XX.XX.XX.XX.XX.XX netra
2) Добавляем запись в /etc/hosts
3) Копируем файлик owfboot.net из текущего релиза OpenBSD/sparc64 в /tftpboot
4) Запускаем tftpd
Убираем комментарии в /etc/inetd.conf
5) Cоздаем файлик bootparams

# cat /etc/bootparams
netra root=192.168.1.10:/tftpboot/root \
swap=192.168.1.10:/tftpboot/swap

6) Cоздаем swap фаил dd if=/dev/zero of=/tftpboot/swap bs=1k count=16000
7) Настраиваем NFS сервер

# cat /etc/exports
/tftpboot -alldirs -ro -network=192.168.1 -mask=255.255.255.0

8) В каталоге /tftpboot должны находиться следующие фаилы
lrwxr-xr-x   1 root    nobody        11 Jul 12  2007 C0A801C8 -> ofwboot.net
-rw-r--r-- 1 root nobody 5507788 May 11 2007 bsd
-rw-r--r-- 1 root nobody 1975791 May 11 2007 bsd.rd
-rw-r--r-- 1 root wheel 51000 May 11 2007 ofwboot.net
-rw-r--r-- 1 root nobody 16384000 May 11 2007 swap

9) Дальше - маленькая хитрость. Чтобы получить имя фаила который Netra пытается использовать как загрузчик, включаем нетру и запускаем tcpdump

tcpdump -i xl0 port tftp

Должно появиться что-то вроде

netra.XXXX > localhost.tftp: 17 RRQ "C0A801C8" <- Вот это и есть искомое имя фаила.
cd /tftboot
ln -s owfboot.net C0A801C8


Если все сделано правильно, то запуститься инсталяция OpenBSD.

понедельник, 4 февраля 2008 г.

Хранимые процедуры и динамические таблицы

Довольно часто возникает задача обработать одну или несколько таблиц с помощью одной и той же процедуры. Причем, передавая название таблицы в параметре процедуры.
MySQL не воспринимает зарпосы такого вида:

SET @mytable='users';
SELECT * FROM @mytable;


Обойти эту проблему можно так, вот пример процедуры выполняющие архивацию таблиц:

DELIMITER $$

DROP PROCEDURE IF EXISTS `mydb`.`create_archive`$$
CREATE DEFINER=`alex`@`%` PROCEDURE `create_archive`(
IN current_table VARCHAR(50)
)
BEGIN
DECLARE template,archive_template VARCHAR(50);
/* Если название таблицы было my_data
то получаем название архивной таблицы my_data_200802 */

SET archive_prefix='200802';
SET template=CONCAT(current_table,"_",archive_prefix);

/* Эта конструкция формирует запрос который будет выглядить так
CREATE TABLE my_data_200802 ENGINE_ARCHIVE
AS (SELECT * FROM my_data); */

SET @archive_query:=CONCAT
("CREATE TABLE ",template, " ENGINE=ARCHIVE AS
(SELECT * FROM ",current_table," )");

PREPARE archive_query FROM @archive_query;
EXECUTE archive_query;
DEALLOCATE PREPARE archive_query;

END$$

DELIMITER ;


Продолжение следует....