суббота, 3 декабря 2011 г.

Как скачать образ виртуальной машины citrix xen из консоли

На dom0 выполняем команду, чтобы посмотреть список виртуальных машины и их uuid.

xe vm-list

Копируем uuid нужной нам машины.

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

Теперь выполняем у себя на компьютере, чтобы скачать образ

curl http://root:password@example.com/export?uuid=00000000-0000-0000-0000-000000000000 -o vm.xva

Чтобы закачать образ обратно, выполняем

curl -T vm.xva http://root:password@example.com/import

четверг, 1 декабря 2011 г.

Зависшие Prepared Transaction в Postgres

Если в базе postgres не удаляется таблица (на запрос drop database сервер выдает ошибку database  is being accessed by other users, хотя ни кто базу не использует)   или в этой таблице невозможно изменить данные и перезагрузка сервера тоже не помогает, то следует обратить внимание на зависшие распределенные транзакции.

Выполняем запрос

select * from pg_prepared_xacts

Копируем значение поля gid.
Теперь выполняем запрос

ROLLBACK PREPARED 'gid'

где за место gid подставляем скопированное значение.

среда, 30 ноября 2011 г.

Поиск и замена текста в файлах

Рекурсивный поиск и замена в файлах исключая определённые файлы и каталоги.

В данном примере из поиска исключаются каталоги ".svn" и файлы, попадающие под шаблон "*.log". В остальных найденных файлах производится замена.

#!/bin/sh
oldstr='oldtext'
newstr='newtext'

for fileName in `grep -rl --exclude=*.log --exclude-dir=.svn $oldstr .`;
do
sed -i 's/'$oldstr'/'$newstr'/g' $fileName
done;

среда, 23 ноября 2011 г.

Настраиваем firewall c помощью iptables

Откроем только нужные нам порты на системе.

Чтобы правила выполнялись после поднятия сетевого интерфейса в ubuntu/debian создадим файл


touch /etc/network/if-up.d/firewall
chmod +x /etc/network/if-up.d/firewall

и добавим в него правила

#!/bin/sh
iptables -F INPUT

#разрешаем нужные нам порты
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 --syn -j ACCEPT #ssh
iptables -A INPUT -p tcp --dport 21 --syn -j ACCEPT #ftp

### Разрешаем мультикаст для IPTV
iptables -A INPUT -d 224.0.0.0/240.0.0.0 -p igmp -j ACCEPT
iptables -A INPUT -d 224.0.0.0/240.0.0.0 -p udp -m udp ! --dport 1900 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем входящие пакеты по уже установленным соединениям
iptables -A INPUT -i eth0 -j DROP

четверг, 27 октября 2011 г.

Как перенести раздел на другой диск

Чтобы увеличить размер раздела /var было решено перенести его на другой жесткий диск.

ОС - debian, виртуальная машина на citrix xenserver.

1) Останавливаем виртуальную машину. Раздел /var был на отдельном виртуальном диске. Оторвем этот раздел от виртуальной машины с помощью citrix xencenter (кнопка Detach на вкладке Storage).

2) Для переноса данных нам потребуется второй виртуальный сервер Добавим этот раздел ко второму серверу желательно в режиме read-only.
Создадим новый виртуальный диск через xencenter, на который будем переносить данные.

3) Запускаем второй сервер.
Выполняем
fdisk -l
и находим наши диски
/dev/xvde -старый диск
/dev/xvdf - новый диск

4) Создаем новый раздел на новом диске (/dev/xvdf):
fdisk /dev/xvdf
жмем
n - новый раздел
p - primary
1 - номер раздела
жмем несколько раз Enter
w - сохраняем все изменения.
посмотрим что получилось:
fdisk -l

находим что-то вроде:
Disk /dev/xvdf: 171.8 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfac3e7ec

Device Boot Start End Blocks Id System
/dev/xvdf1 1 20886 167766763+ 83 Linux

5) Форматируем новый раздел
mkfs -t ext3 /dev/xvdf1

6) Монтируем
mkdir /mnt/new
mkdir /mnt/old

mount /dev/xvdf1 /mnt/new
mount /dev/xvde1 /mnt/old

7) Копируем данные со старого раздела на новый
cd /mnt/old
cp -ax ./ /mnt/new

8) Отмонтируем
umount /mnt/new
cd /
umount /mnt/old

9) Теперь можно новый диск присоединить к первой виртуальной машине.

вторник, 25 октября 2011 г.

SSH туннель

Иногда возникают ситуации, когда между двумя *nix компьютерами/серверами нужно построить туннель чтобы получить доступ к ресурсам компьютера.

Например, ситуация, когда один компьютер находится за nat, а второй имеет белый ip.

SSH туннель можно сделать очень просто двумя командами.
Но на втором сервере нужно добавить строку PermitTunnel point-to-point в конфигурационный файл /etc/ssh/sshd_config и перезапустить ssh сервер.

ssh -f root@example.com -w 0:0 ifconfig tun0 10.0.0.1/30 pointopoint 10.0.0.2
ifconfig tun0 10.0.0.2/30 pointopoint 10.0.0.1

example.com - сервер в интернете.
При этом нам нам нужно иметь root доступы на обоих серверах, т.к. необходимы права суперпользователя для создания новых сетевых интерфейсов (tun0).

Для того чтобы ssh туннель восстанавливался  после обрыва соединения, можно создать простенький скрипт, который будет проверять доступность удаленного компьютера ping-ом . Чтобы скрипт работал в автоматическом режиме (не спрашивая пароль) нужно организовать авторизацию ssh между компьютерами по ключам.

После этого добавляем это скрипт в crontab пользователя root, того компьютера, который находится за nat.

Вот этот скрипт:

#! /bin/sh
echo "==========="`date`"================="
EXTSERVER="example.com"
EXTTUN="10.0.0.1"
LOCALTUN="10.0.0.2"

CREATETUN0="ssh -o TCPKeepAlive=yes -o ServerAliveInterval=300 -o ServerAliveCountMax=3 -f root@"$EXTSERVER" -w 0:0 ifconfig tun0 "$EXTTUN"/30 pointopoint "$LOCALTUN
CREATETUN1="/sbin/ifconfig tun0 "$LOCALTUN"/30 pointopoint "$EXTTUN

if ping -c4 $EXTTUN > /dev/null 2>&1; then
 echo "tun work"
 else
  echo "tun do not work"
   #прибьем все старые наши ssh тунели
    for PID in `pgrep -f "$CREATETUN0"`; do
     echo "kill process whith pid="$PID
     kill "$PID"    
    done;
    sleep 20
    echo "create new ssh tunnel"
    $CREATETUN0
    echo "ok"
    echo "create tun0"
    $CREATETUN1
    echo "ok"
fi
echo "===========stop cron================="

суббота, 16 апреля 2011 г.

Два MySQL сервера на одной машине

Иногда бывает необходимо установить несколько MySQL серверов на одной машине, например чтобы опробовать новую версию.

Самое простое решение — это использовать MySQL Sandbox.

понедельник, 7 марта 2011 г.

Простая статистика трафика по ip, биллинг основанный на iptables

Для работы этого скрипта необходим установленный web-сервер с php и cron.

У меня этот скрипт крутится на роутере wl500gp с прошивкой Олега, поэтому все настройки буду писать применительно к этой прошивке. Но сам скрипт может быть легко перенесен на большой linux.

Для чего этот скрипт:
Этот скрипт предназначен только для подсчета трафика. Также в нем существует возможность автоматически отключать интернет пользователям, которые превысили лимит трафика за месяц.

Увеличение памяти у роутера asus wl500gp

Год назад я решил перепаять память у своего роутера asus wl500gp v1.

До этого у меня не было практически ни какого опыта пайки. Но всё получилось удачно. И вот уже целый год роутер работает без каких либо нареканий с новой увеличенной до 128МБ памятью.

На моем роутере с момента его покупки стоит прошивка Олега и энтузиастов продолжающих его дело. Все инструкции по перепайке черпал из этой темы на форуме wl500g.info.

Память брал с планки хуникс 256mb hymd532646cp6j-d43: