пятница, 28 декабря 2012 г.

Как качать торренты в консоли

apt-get install transmission-cli
transmissioncli -w /storage/ debian-6.0.6-amd64-CD-1.iso.torrent

Вот думаю на основе этого сделать торрентокачалку облачную..

вторник, 18 декабря 2012 г.

Linux Maker Blog: Поднимаем сервер виртуализации на Centos 6.3 (libv...


Задача

  • Иметь сервер виртуализации на Centos 6.3 (qemu/kvm, с libvirt-обёрткой). 
  • Иметь возможность устанавливать виртуальные машины на основе шаблонов. 

Решение

Linux Maker Blog: Поднимаем сервер виртуализации.

вторник, 11 декабря 2012 г.

Centos 6.2 и авторизация по ключам в ssh


Заработало только после отключения SeLinux
Ещё была проблема Authentication refused: bad ownership or modes for directory /home/hard/.ssh
Решилась установкой прав 600 на папку .ssh и 700 на файл authorized_keys.

четверг, 6 декабря 2012 г.

Openssl rsa sign create and check example

#!/bin/bash

echo 'Задница' > file.txt
openssl genrsa -out rsa.pvt 1024
openssl rsa -in rsa.pvt -pubout -out rsa.pub
openssl dgst -sign rsa.pvt -out sign.txt -md5 file.txt
openssl dgst  -verify rsa.pub -signature sign.txt file.txt


среда, 12 сентября 2012 г.

четверг, 30 августа 2012 г.

How to send key to running KVM guests from bash

I don't recommend this way, but I didn't found any another.

It works at rhel 6:


[root@virt ~]# LANG=C virsh version
Compiled against library: libvir 0.8.7
Using library: libvir 0.8.7
Using API: QEMU 0.8.7
Running hypervisor: QEMU 0.12.1


On ubuntu 10.04 virsh haven't command:
qemu-monitor-command

Some working shell to send strings:

#!/bin/bash


if [ "$#" = 0 -o "$1" = '--help' ]; then
        echo "Usage $(basename $0): <Domain> '<String>'"
        exit 66
fi

exec 1>/dev/null

MACHINE="$1"; shift

echo "$*" | grep -o . | while IFS= read key; do
        [ "$key" = " " ] && key='spc'
        [ ! -n "$key" ] && continue
        virsh qemu-monitor-command --hmp "$MACHINE" "sendkey $key"
done
virsh qemu-monitor-command --hmp "$MACHINE" 'sendkey kp_enter'


четверг, 10 мая 2012 г.

How to disconnect all pppoe connections to your server?

ps ax | grep pppd | egrep -v "(pptp|E|grep)" | while read PID tmp; do
  kill -HUP $PID
done

1. Grep all pppd processes
2. Filters out our grep process pid, all pptp (VPN) connections. 'E' means external interface in my current project, you can dismiss it.
3. Read in PID variable pid of remaining processes and kill -HUP them one by one.

Q: Why kill them?
A: If you restart networking, ppp interfaces (for pppoe) on server are removed, but on clients they still up, but gives no access to the internets. HUP disconnect them correctly.

воскресенье, 11 марта 2012 г.

Simple DNAT function


makednat() {
[ "$#" != "3" ] && return 1
iptables -t nat -I PREROUTING -p tcp --dport $1 -j DNAT --to-dest $2:$3
iptables -I FORWARD -s $2 -j ACCEPT
iptables -I FORWARD -d $2 -j ACCEPT
}

makednat 8686 10.80.140.1 22 #desktop

Libvirtd virtual machines backup



Задача

Сделать полноценную систему копирования с конфиг файлом состоящим из... списка имён виртуальных машин

Используемый софт

  1. libvirtd (qemu + kvm) для виртуализации
  2. ssh для связи с сервером виртуализации
  3. rdiff-backup для создания резервных копий
  4. bash для создания удобной обёртки
  5. cron для автоматизации всего этого безумия

Реализация

Итак, как было указано выше, в качестве конфига - список имён виртуалок.
Учитывая то, что сервер виртуализации один, то его адрес является константой и задаётся в скрипте.
Что из себя представляет бэкап виртуальной машины?
  • Его конфиг в xml
  • Все его виртуальные диски

Как получить всю эту радость

XML описание

echo “virsh dumpxml $machine” | ssh root@$remotehost &1>$backupdir$machine.xml

Список дисков

egrep -o \/.*\”(img|qcow|qcow2)\”” $backupdir$machine.xml &1>/tmp/$machine.disk.list.$$

Скорость создания бэкапа

Поскольку горячая копия дисков является небезопасной, то предварительно виртуальные машины должны быть выключены (не с помощью destroy, а с помощью shutdown). Следовательно операционная система должна поддерживать работу с ACPI.

Если время в течении которого виртуальная машина выключена критично, то оптимальный алгоритм выглядит следующим образом


#!/bin/bash REMOTEHOST=10.80.1.120 set -x [ -n "$1" ] || exit 1 MACHINES="/etc/rdiff-backup/machine" BACKUPDIR="/storage/backup/$1/" SSH="ssh root@$REMOTEHOST" [ -f "$MACHINES" ] || exit 2 if [ ! -w "$BACKUPDIR" -o ! -d "$BACKUPDIR" ]; then mkdir "$BACKUPDIR" || exit 3 fi echo "Start time: $(date +%H:%M:%S)" while read machine; do # паузим виртуалку echo "virsh dumpxml $machine" | $SSH 1>$BACKUPDIR$machine.xml cat $BACKUPDIR$machine.xml echo "virsh shutdown $machine" | $SSH # ждём пока она вырубится while true; do echo "virsh shutdown $machine" | $SSH echo "virsh list" | $SSH | grep "$machine" [ $? = 0 ] && sleep 10 || break done # получаем список дисков list=$(egrep -o "/.*(img|qcow|qcow2)" $BACKUPDIR$machine.xml) for i in $list; do # копируем их на удаленном хосте в temp echo $i echo "cp -f $i /tmp/${i##*/}" | $SSH done # стартуем виртуалку чтобы не простаивала echo "virsh start $machine" | $SSH # забираем rdiff'ом for i in $list; do rdir="/tmp/" ldir="$BACKUPDIR$machine" [ -d "$ldir" ] || mkdir "$ldir" [ -d "$ldir" -a -w "$ldir" ] || exit 4 pattern="${i##*/}" echo -n "$REMOTEHOST:${rdir}${pattern} > $ldir"... rdiff-backup --create-full-path --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --include-regexp ".*($pattern)" \ --exclude $rdir $REMOTEHOST::$rdir $ldir echo '... Done!' rm -f $rdir$pattern done done < $MACHINES echo "End time: $(date +%H:%M:%S)"

Автоматизация

Я автоматизировал бэкапы по крону, сделав три конфига:
  • daily
  • weekly
  • monthly

Нужный кусок кронтаба выглядит следующим образом:
#TODO

четверг, 23 февраля 2012 г.

четверг, 19 января 2012 г.

Simple shell for virt-viewer

#!/bin/bash
 sudo virsh list | cut -d " " -f4 | cat -n | tee /tmp/virshlist.$$
echo -n "Подключиться к: "
read number
if [ "$number" = "0" ]; then
exit 0
else
 name="$(cat /tmp/virshlist.$$ | head -$number | tail -1 | awk '{print $2}')"
 rm -f /tmp/virshlist.$$
 sudo virt-viewer "$name" || exit 2
fi
rm -f /tmp/virshlist.$$ exit 0