четверг, 30 сентября 2010 г.



пробую gnom-blog

Вот решил найти какойнибудь оффлайн клиент для блога. судя по всему gnome-blog это не то что мне нужно

хочется чтоб можно было вставлять форматированный текст. идеал с подсветкой, если это java, python, bash, etc..

здсесь же совсем ничего интересного

ну ладно хоть вставка изображений через drug-n-drop работает =)



аххх шЫт фот и нфига.. вставится вставилось, но на момент upload-а выругался :)

TNS-01150: The address of the specified listener name is incorrect и все все все

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

Started with pid=5629
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
TNS-01150: The address of the specified listener name is incorrect
TNS-01153: Failed to process string: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xps)(PORT=null)))
No longer listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))


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

вот это не правильно
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xps)(PORT = null))
)
)


а вот это правильно
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = xps)(PORT = null))
)
)


В моем же случае все оказалось проще :), (PORT = null) вот это дело не давало мне покоя.. - нужно было поменять на (PORT = 1524), ибо слушанье на нулевом порту это жесть.

Так что наводите красоту и будьте бдительны :)

в догонку
если получили вот такую ошибку
Failed to auto-start Oracle Net Listener using /ade/vikrkuma_new/oracle/bin/tnslsnr

то дело в том что ORACLE_HOME_LISTNER захардкожен в скрипте запуска dbstart
поменять на это
ORACLE_HOME_LISTNER=$ORACLE_HOME

и наступит счастье :)

ну а если счастье не наступило, как у меня, и появилась вот такая ошибка
OC4J Configuration issue. /u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/OC4J_DBConsole_xps_orcl not found.

то как советует интернет, нужно проверить ORACLE_SID, но опять же не мой случай. :) у меня в папке $ORACLE_HOME/j2ee/ действительно небыло файла OC4J_DBConsole_xps_orcl. И тут на помощь пришла утилита
$ORACLE_HOME/bin/dbca

которая отконфигурит вашу датабазу и вот уж тогда и засияют помидоры.

суббота, 25 сентября 2010 г.

Install flashplayer debugger to firefox

wget http://download.macromedia.com/pub/flashplayer/updaters/10/flash_player_10_linux_dev.tar.gz
tar -xzvf flash_player_10_linux_dev.tar.gz
cd flash_player_10_linux_dev/
tar -zxvf plugin/debugger/libflashplayer.so.tar.gz
sudo mv libflashplayer.so /usr/lib/flashplugin-installer/

воскресенье, 19 сентября 2010 г.

Google images + stardict sound + anki

И так не сказать что все прошло гладко :) ОДнаждый меня забанил гугл, после того как я в 26 потоков началу него выпрашивать картинки, поэтому пришлось немного переписать скрипт.
Работает следующим образом. У меня 14 тыщ звуковых файлов. я их смотрю и отправляю запрос вида
http://www.google.com/images?....

Ну и после этого мне возвращается несколько картинок, я беру всего 3, их склеиваю в одно изображение и приписываю перевод который мне дает stardict (тоже узкое место, из за того что куча словарей и иногда получается билеберда)
и на выходе получаем следующее
например на заброс backbone получается такая вот карточка

ball

call


если все ок, то звуковой файл кладется рядышком, и переход на следующую итерацию, если вдруг гугл нас банит - то ни одно изображение до нас не доходит и программа завершается.
скрипт для запуска
#!/bin/bashls
TERM=xterm
export TERM
THREADS=3
TIMEOUT=5s

for FOLDER in /usr/share/stardict/sounds/Sound_En/*;
do
bash ../ganki.sh "$FOLDER" &
while [ "`jobs -p|wc -l`" -ge $THREADS ];
do
sleep $TIMEOUT
done
done



все чем он занимается это запускает основной в несколько потоков (тут можно настроить timeout с которым он опрашивает сколько потоков в текущий момент крутится и количество тредов), также обратите внимание что он запускает (это 2й основной скрипт) и по чему идет цикл (это рутовая директория аудиофайлов в которой 26 дирикторий с английскими буковками, внутри которых аудиофайлы с словами на эту букву)


#!/bin/bash
# Great thanks image download function creator http://www.krazyworks.com/wget-google-image-collector/
TMP_FILE=g.src.tmp
IMAGE_COUNT=3
SIZE="large"


FONT="/usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf"

ROOT_FOLDER=$1;
OUT_DIR=$(echo $ROOT_FOLDER|sed "s/.*\///g")

if [ ! -d "$OUT_DIR" ]
then
mkdir $OUT_DIR
fi

for SOUND_FILE in $ROOT_FOLDER/*;
do
cp $SOUND_FILE $OUT_DIR;
KEYWORD=`echo ${SOUND_FILE/*\//}|sed "s/.ogg//g"`;
echo $OUT_DIR:$KEYWORD;
CAPTION=$(sdcv -n $KEYWORD|grep -A 10 Ru|egrep '^ *[1-3]\)'|head -n 2|sed "s/^ *[0-9].//g"|tr "\n" ", ")
if [ -z "$CAPTION" ];
then
CAPTION=$(sdcv -u 'LingvoUniversal (En-Ru)' $KEYWORD|tail -n 2|tr "\n" ", ")
fi
CAPTION=$(echo $CAPTION|sed 's/[\,]* *$//g');





# download images from google
i=0
URL="http://images.google.com/images?q=${KEYWORD}&svnum=100&hl=en&lr=&safe=off&sa=G&imgsz=${SIZE}"
wget -q -U Mozilla -O "${OUT_DIR}/results_${i}.txt" "$URL" -e robots=off

cat "${OUT_DIR}/results_${i}.txt" | sed 's/href/\n/g' | grep imgurl | grep imgrefurl | sed 's/imgurl=/@/g' | sed 's/&imgrefurl/@/g' | awk -F'@' '{print $2}' > "${OUT_DIR}/image_urls.txt"
results=$(cat "${OUT_DIR}/results_${i}.txt" | sed 's/border/\n/g' | fgrep '&start=' | fgrep -v '&start=0' | uniq | fgrep '
' | wc -l | awk '{print $1}')

i=1
while [ $i -lt $results ]
do
(( START = i * 20 ))
URL="http://images.google.com/images?q=${KEYWORD}&svnum=100&hl=en&lr=&safe=off&sa=G&imgsz=${SIZE}&start=${START}"
wget -q -U Mozilla -O "${OUT_DIR}/results_${i}.txt" "$URL" -e robots=off
cat "${OUT_DIR}/results_${i}.txt" | sed 's/href/\n/g' | grep imgurl | grep imgrefurl | sed 's/imgurl=/@/g' | sed 's/&imgrefurl/@/g' | awk -F'@' '{print $2}' >> "${OUT_DIR}/image_urls.txt"
(( i = i + 1 ))
done


find "$OUT_DIR" -type f -name "results_*.txt" -exec rm {} \;
cat "${OUT_DIR}/image_urls.txt" | fgrep '.jpg' | head -n ${IMAGE_COUNT} > /tmp/google_image_collector_${KEYWORD}.tmp
mv /tmp/google_image_collector_${KEYWORD}.tmp "${OUT_DIR}/image_urls.txt"

if [ -f "${OUT_DIR}/image_urls.txt" ]
then
clear
COUNT=$(cat "${OUT_DIR}/image_urls.txt" | wc -l | awk '{print $1}')
#echo "Found $COUNT images matching $KEYWORD"
if [ $COUNT -eq 0 ];
then
echo $OUT_DIR:"gooogle probably block me"
exit 0;
fi
j=1
cat "${OUT_DIR}/image_urls.txt" | while read LINE
do
wget -q -U Mozilla -nd -t 1 -T 5 -O "${OUT_DIR}/${KEYWORD}_${j}.jpg" "$LINE" -e robots=off

convert -resize '200x200' "${OUT_DIR}/${KEYWORD}_${j}.jpg" "${OUT_DIR}/${KEYWORD}_${j}.jpg"
(( j = j + 1 ))

done
fi


convert -size 640x260 gradient: "${OUT_DIR}/grad.jpg"
for ii in `seq 1 3`;
do
composite -compose Copy -geometry +$((10*(ii)+200*(ii-1)))+10 "${OUT_DIR}/${KEYWORD}_$ii.jpg" "${OUT_DIR}/grad.jpg" "${OUT_DIR}/grad.jpg"
rm "${OUT_DIR}/${KEYWORD}_$ii.jpg"
done

convert -background none -fill white -font $FONT -pointsize 18 -size 620x80 -gravity South caption:"$CAPTION" "${OUT_DIR}/caption.gif"
composite -gravity South "${OUT_DIR}/caption.gif" "${OUT_DIR}/grad.jpg" "${OUT_DIR}/$KEYWORD.jpg"
rm "${OUT_DIR}/grad.jpg"
rm "${OUT_DIR}/caption.gif"

done

exit 0


работает это следующим образом - создаете эти 2 скрипта в одной дириктории, у меня это ganki_root.sh и ganki.sh а также дирикторию (у меня это ganki)
далее
cd ganki
chmod a+x ../ganki_root.sh
../ganki_root.sh


ну а потом, уже когда карточки будут готовы, или гугл пошлет :), можно воспользоватся вот этой инструкцией
Медиа дека для Anki и создать деку для ганки (по аналогии)
хотя наверно даже большого скрипта писать не надо и достаточно из консоли написать один for и создать нужный файл (если вдруг понадобится, то напишу как :)
Вобще наверно логичнее не писать перевод в карточку, а добавлять текстом в деку.. (это так.. для разнообразия и практики с imagemagic)


большой респект человеку написавшим сей скрипт и сэкономившему мне кучу времени с работой google.com/images

четверг, 16 сентября 2010 г.

Медиа дека для Anki

этот мануал гораздо лучше, скрипт более гибкий и лаконичный
Итак .. немного вводная.
Anki программа для запоминания, Это Обычные карточки, но которые показываются по определенному алгоритму, и те карты которые сложно запомнить показываются чаще, которые легко реже.

Создавать деки можно самому, так и брать готовые с сайта.
Тема же сегоднешнего заняти, натырить картинок с тырнета и сделать из них красивую деку(набор карточек).
итак поехали
1. выберем жертв, в моем случае стали 2 сайта http://www.my-english-dictionary.com и www.pdictionary.com скачаем их через wget
$mkdir sites && cd sites
$wget -pdrc http://www.my-english-dictionary.com
$wget -pdrc www.pdictionary.com

2. Исследуем скачаные дириктории
2.1 в случае с pdictionary все просто , картинки лежат в папке images и носят названия того что на них изображено
$ls www.pdictionary.com/images/
a  b  c  d  e  f  g  h  i  j  k  l  m  misc  n  o  p  q  r  s  t  u  v  w  x  y  z
$ls www.pdictionary.com/images/z
zebra.gif  zero.gif  zigzag.gif  zipper.gif

2.2. c my-english-dictionary все гораздо интереснее
$ ls |head
eng100.htm
eng100.jpg
eng101.htm
eng101.jpg
eng102.htm
eng102.jpg
eng103.htm

тоесть на каждую картинку по отдельной страничке и с именем eng???.htm с картинкой eng???.jpg
слазив внутрь заметим что название картинок лежит в теге img с сылкой на наше изображение а имя картинки в атрибуте alt
$cat eng100.htm |grep 100.jpg
<img src = "eng100.jpg" alt= "drawer" border = 0>

Ну так как видно что все идет строго попарядку можно в цикле пройти по всем htm страничкам и переименовать файлы в вид name.jpg и положим их в папки result и result_small (кто его знает может thumbnail-ы тоже кому пригодятся)
$mkdir result&&mkdir result_small
$for i in `seq 1 408`;do NAME=`cat eng$i.htm|grep eng$i.jpg|sed 's|.*alt= "||g;s|".*||g'`;echo $NAME;cp eng$i.jpg result/$NAME.jpg;cp s-eng$i.jpg result_small/$NAME.jpg; done

итак.. мы получили картинки, но о боже.. большие картинки с большими черными подсказками :)

что же делать... "Доктор, нужно резать!"... да.. будем резать.. и резалку мы возьмем imagemagic, и резултат трудов положим еще в одну поддирикторию result
$mkdir result
$for i in *;do convert $i -crop 400x265+0+0 result/$i;done

можно посмотреть результат наших трудов - что все ок. ну и двинем дальше.
Насколько помнится мы загрузили изображения еще со 2го сайта, и внимательный телепат наверняка разглядел что изображения то там не jpg а gif - ну не будем портить всю малину через тот же image magic сконвертим их в jpg и двинем в текующую фотку где у нас уже есть изображения(перейдем в тот сайт и из дириктории image вфполним следующее
$cp */*.gif ../../www.my-english-dictionary.com/result/result/

это мы так скопировали, а теперь их переделаем в jpg (вернемся в ..../result/result и выполним вот это колдовство
$for i in *.gif;do convert $i ${i/gif/jpg};done

ну и избавимся от наших гифок

$rm *.gif

3. Самое интересное.. файлы у нас есть все называются как надо - осталось их загнать в деку анки. ну и конечно руками мы это делать не будем. что нам в конце концов - делать чтоль нечего
топаем на страничку http://ichi2.net/anki/wiki/FileImport которая нам рассказывает как можно создать файл вида
caption [tab] x-ray <img src="x-ray.jpg">[sound:x-ray.ogg]

левая часть это одна сторона карточки, а правая "Сюрприз!!!!" не только изображение но еще и произношение.
Я вспомнил про когда то скачаные словари для stardict с произношением, и подумал что вот он!, тот шанс :)... но на этом не остановился когда узнал что слов многих нету и на помощь пришел сайт http://www.answers.com который любезно согласился предоставить отсутствующие звуки.
упуская подробности (одной строкой выполнять все эти операции было тяжело) и я наваял небольшой скрптик, правда не отладил но главное работает
#!/bin/bash

DIRECTORY=/home/nikolay/sites/www.my-english-dictionary.com/result/result
EXTENSION=jpg
SOUND_EXTENSION="ogg mp3 wma wav"
SOUND_DIRS="(stardict|$DIRECTORY)"
SITE='http://www.answers.com'
OUT_MEDIA_DIR=$DIRECTORY/media
OUT_FILE=import

rm $OUT_FILE
if [ -d "$OUT_MEDIA_DIR" ];
then
rm -Rf "$OUT_MEDIA_DIR"
fi

mkdir "$OUT_MEDIA_DIR"


cd $DIRECTORY
for i in *$EXTENSION;
do
FULL_NAME=$i;
NAME="${i/.jpg/}";

SOUND_FILE_NAME=$(ls $NAME.*|egrep '(ogg|mp3|wma|wav)')
if [ -z "$SOUND_FILE_NAME" ];
then
for i in $SOUND_EXTENSION;
do
SOUND_FILE_PATH=$(locate "/$NAME.$i"|egrep "$SOUND_DIRS")

if [ -n "$SOUND_FILE_PATH" ];
then
SOUND_FILE_NAME=$NAME.$i
cp "$SOUND_FILE_PATH" "$SOUND_FILE_NAME"

break
fi
done
if [ -z "$SOUND_FILE_NAME" ];
then
#truing download from answer.com                            loca
wget -q $SITE/$NAME --output-document $NAME.tmp
SERVER_FILE_PATH=$(cat $NAME.tmp |grep playIt|grep wav|sed "s/.*playIt('//g;s/'.*//g"|sed q)
if [ -n "$SERVER_FILE_PATH" ];
then
wget -q $SERVER_FILE_PATH --output-document $NAME.wav
SOUND_FILE_NAME="$NAME.wav"
fi
rm $NAME.tmp
fi
fi
STRING="$NAME$(echo -e '\t')<img src=\"$FULL_NAME\">"
cp "$FULL_NAME" "$OUT_MEDIA_DIR/"
if [ -n "$SOUND_FILE_NAME" ];
then
STRING="$STRING[sound:$SOUND_FILE_NAME]"
cp "$SOUND_FILE_NAME" "$OUT_MEDIA_DIR"
fi
echo $STRING>>$OUT_FILE    
done;


эхх шит фокус с echo -e "\t" не удался.. придется подправить .. заменить все пробелы на таб
$ sed -i 's| |\t|' import


смысл в том что нужно поменять значение переменной DIRECTORY на то куда вы выложили файлы, SOUND_DIRS - это то где скрипт ищет произношение (не бязательно полный путь, так как идет все через grep)
ну и результат получаем файл import и папку media

открываем anki
жмем на create (name=mediadeck)
file->import выбираем наш файл "import"
saveas (mediadeck)
теперь нужно зайти в :~/.anki/decks
и создать там дирикторию mediadeck.media
$mkdir ~/.anki/decks/mediadeck.media

и копируем
$cp media/* /home/nikolay/.anki/decks/mediadeck.media/

после этого в анки нужно выполнить Tools>Advanced>Check Media DB (tag cards)

ну вот вобщем то и все.
Я понимаю что инструкция тяпляп. :) - поэтому если это действительно кому то еще понадобится - пишите письма :). постораюсь ответить (главная тут проблема что я не указывал из какой дириктории что делал, так что кофейная гущя вам в помощ)
а вот скриншот того что получилось (картинка и значек проигрывателя который произносит слово)


ну а это готовая дека, которая получилась, распаковать зип и импортировать shared.anki

воскресенье, 23 мая 2010 г.

Херотень с mdadm

Блин - ubuntu опять захавала мой неокрепший мозг.
как зодать soft raid можно лего найти - да и делать там особо нечего через cfdisk создать разделы. после этого
sudo mdadm --create /dev/md4 --chunk=64 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
ну и потом создать файловую систему
mkfs.ext4 /dev/md4

но вот засада что после ребута получаем красивую картину типа такой

init: ureadahead-other main process (1515) terminated with status 4
init: ureadahead-other main process (1538) terminated with status 4

ну и решение находится вот тут http://en.wikipedia.org/wiki/Mdadm
после создания нового архива, нужно добавить инфу в cat /etc/mdadm/mdadm.conf хотя в ней так красиво и написано

# This file was auto-generated on Tue, 18 May 2010 13:04:23 +0400
# by mkconf $Id$

короче для перманентных настроек сами херачим (простите за мою лирику, как глаза станут не такими красными, подправлю)

mdadm -Es | grep md4 >>/etc/mdadm/mdadm.conf

щас ребутнусь и посмотрю.

четверг, 20 мая 2010 г.

KVM ошибка сети

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

C:\Documents and Settings\Owner>ping -t 192.168.11.1

Pinging 192.168.11.1 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from 192.168.11.1: bytes=32 time=738ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64
Reply from 192.168.11.1: bytes=32 time<1ms TTL=64

Ping statistics for 192.168.11.1:
Packets: Sent = 98, Received = 33, Lost = 65 (66% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 738ms, Average = 22ms
Control-C


тоесть ответы появляются - но когда то потом и не стабильно, с линуксом еще хуже

user@host:~> ping 192.168.11.1
PING 192.168.11.1 (192.168.11.1) 56(84) bytes of data.
From 192.168.11.172: icmp_seq=2 Destination Host Unreachable
From 192.168.11.172 icmp_seq=2 Destination Host Unreachable
From 192.168.11.172 icmp_seq=3 Destination Host Unreachable
From 192.168.11.172 icmp_seq=4 Destination Host Unreachable
From 192.168.11.172 icmp_seq=6 Destination Host Unreachable
From 192.168.11.172 icmp_seq=7 Destination Host Unreachable
From 192.168.11.172 icmp_seq=8 Destination Host Unreachable
^C
--- 192.168.11.1 ping statistics ---
8 packets transmitted, 0 received, +7 errors, 100% packet loss, time 7000ms
, pipe 3
user@host:~> sudo route -n
root's password:
sudo: route: command not found
user@host:~> sudo su
host:/home/user # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.11.1 0.0.0.0 UG 0 0 0 eth0


как видно в таблице роутинга вроде все ок.

даже в ifconfig никакого криминала.
дело оказалось в дефолтном драйвере сети которы rtl8139 по умолчанию. И какого было мое удивление когда все залетало, после того как я поменял драйвер на pcnet

все по стандарту
sudo virsh

далее
edit machine_name

и правим секцию interface
    <interface type='bridge'>
      <mac address='52:54:00:54:f4:ba'/>
      <source bridge='br0'/>
      <target dev='vnet1'/>
      <model type='pcnet'/>
    </interface>