Показаны сообщения с ярлыком tips and tricks. Показать все сообщения
Показаны сообщения с ярлыком tips and tricks. Показать все сообщения

понедельник, 4 мая 2009 г.

qemu - работа с сетью

/*
материалов на данную тему в сети - море. эта заметка не претендует на оригинальность. пригодится - хорошо, а нет - так ещё лучше. по сути рассматривается частный случай создания виртуальных сетей с использованием qemu, где все "клиенты" друг друга видят, умеют общаться, делиться ресурсами и т.п.

терминология:
"гостевая" система - система, загруженная с использованием qemu/(под управлением qemu) (GUEST)
"домашняя" система - localhost (HOST)

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

./configure --prefix=/usr --enable-system --enable-linux-user \
--audio-drv-list="oss alsa sdl esd" \
--audio-card-list="ac97 sb16 es1370" \
--enable-mixemu
make
sudo checkinstall


checkinstall генерит корректный пакет (спасибо всем, кто написал хороший Makefile).
ссылки на документацию о работе qemu с сетью:
официальное руководство. читать.
подробная инструкция от товарища "радиста" - может рассматриваться как некая общая "вводная".

осилив материал, можно узнать пару интересных вещей: slirp и vde (Virtual Distributed Ethernet). в теории vde должен упростить процедуру, изложенную ниже, путём соединения гостевой системы с сокетом, автосозданием "tap" интерфейса и установкой корректного FORWARD между всеми гостевыми системами. к сожалению готовых "рецептов" с использованием vde выдать пока не могу, ибо... если у кого работает эта схема - отпишитесь в комментариях или киньте ссылку на более подробные инструкции. использование же slirp не представляется целесообразным.

задача:
поднять несколько виртуальных машин с qemu и обеспечить не только их взаимодействие по "виртуальной сети" между собой, но и открыть им доступ к локальным сетевым ресурсам (интернет в том числе).

для её решения подойдёт практически любой дистрибутив Linux с установленными пакетами: iptables, qemu, kqemu, tunctl и bridge-utils. если вы долго и упорно настраивали iptables - то идея построения "моста" вам явно не понравится.

грузим необходимые модули ядра:

sudo modprobe -v tun
sudo modprobe -v kqemu
sudo chmod 666 /dev/net/tun
sudo chown `whoami` /dev/kqemu


последние две строки дают нам возможность не использовать рута для старта самого qemu, что кажется более логичным, чем "Запускать нужно от root'а, потому что иначе могут возникнуть проблемы с доступом к устройству /dev/net/tun ." угу, всё бросили и запустили от рута, хотя кому-то может так и легче.

запуск виртуальных машин довольно прост. стоит только запомнить, что каждой машине нужен отдельный "tap" интерфейс, соответственно имеет смысл помещать их в разные "подсети". например ("интерфейс tap" -> "локальный eth0, что мы потом поднимем в qemu"):
192.168.4.1 -> 192.168.4.100
192.168.5.1 -> 192.168.5.100
192.168.6.1 -> 192.168.6.100

использовать "глобальные" скрипты (/etc/qemu*) - не рекомендую, но это imho. каждый волен сам решать. если у вас не происходит присваивание уникальных MAC адресов "на лету" - то можете задать их вручную или поменять позже. простейший скриптец старта qemu:

#!/bin/sh
iface="tap0"
iface_addr="192.168.4.1"
user="`whoami`"
sudo modprobe tun
sudo modprobe kqemu
sleep 2
sudo chown $user /dev/kqemu
sudo tunctl -u $user -t $iface
sudo ifconfig $iface $iface_addr up
##sudo ifconfig $iface $iface_addr promisc up ## только для использования в "мостике" !!!
qemu -cdrom ./image.iso -boot d -hda ./disk.img -m 256 -kernel-kqemu -net nic,vlan=0 -net tap,vlan=0,ifname=$iface,script=no
sudo ifconfig $iface down
#EOF


приказ отдохнуть пару секунд после загрузки модуля kqemu (если он ещё не загружен) для вас может быть излишним. маска сети 255.255.255.0 пойдёт автоматом. в "гостевой" системе необходимо и достаточно поднять сетевой интерфейс с номером в пределах заданного сегмента и проставить дефолтный шлюз, равный $iface_addr. для примера с "tap0" некие шаблонные действа в "гостевой" системе:

ifconfig eth0 down
ifconfig eth0 192.168.4.100 up
route add default gw 192.168.4.1
echo 'nameserver 192.168.4.1' >> /etc/resolv.conf
echo 'nameserver ВАШ_ЛОКАЛЬНЫЙ_ДНС' >> /etc/resolv.conf
echo 'nameserver BACKUP_ДНС' >> /etc/resolv.conf


для того, чтобы открыть гостевым машинам доступ в локальную сеть можно воспользоваться "маскарадом". допустим, что ваш локальный сетевой интерфейс - eth0. если интернет идёт по интерфейсам типа dsl0, ppp0 - то "маскарадить" надо и их (если хочется выйти в сеть из qemu плюс ко всему придётся подправить правила для FORWARD). имеем три интерфейса для qemu - tap0, tap1 и tap2. шаблон ниже не предполагает использование "brctl" - "мостиков". мы культурно разрешаем обмен пакетами (FORWARD) между всеми участниками праздничного шоу (используем 2 цепочки - forward_int и forward_ext).

su -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t filter -I INPUT 1 -i tap0 -j input_int
sudo iptables -t filter -I INPUT 1 -i tap1 -j input_int
sudo iptables -t filter -I INPUT 1 -i tap2 -j input_int
sudo iptables -t filter -A input_int -j ACCEPT
sudo iptables -t filter -I FORWARD 2 -i eth0 -j forward_ext
sudo iptables -t filter -I FORWARD 2 -i tap0 -j forward_int
sudo iptables -t filter -I FORWARD 2 -i tap1 -j forward_int
sudo iptables -t filter -I FORWARD 2 -i tap2 -j forward_int
sudo iptables -t filter -A forward_int -i tap0 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap1 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap2 -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap0 -o tap1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap0 -o tap2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap1 -o tap0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap1 -o tap2 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap2 -o tap1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_int -i tap2 -o tap0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_ext -i eth0 -o tap0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_ext -i eth0 -o tap1 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -t filter -A forward_ext -i eth0 -o tap2 -m state --state RELATED,ESTABLISHED -j ACCEPT


почему мы создаём FORWARD с номера 2? - потому, что первым правилом абсолютно корректно выставлять автоподстройку величины пакетов:

sudo iptables -t filter -I FORWARD 1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

теперь, когда у нас всё работает, все друг друга видят и пользуют ресурсы друг друга, настало время поиграть с "мостиками". идея крайне проста - "собирайтесь девки в кучу, я вам чучу отчебучу...". шаблонные действия примерно таковы: раскомментируем строку "sudo ifconfig $iface $iface_addr promisc up" (в скрипте вызова qemu) и закомментируем то, что было ранее. выгрузим все правила iptables, ибо основным интерфейсом становится бридж, и оне (енти правила) автоматом идуть далёко...

sudo ifconfig eth0 down
sudo ifconfig eth0 0.0.0.0 promisc up
sudo brctl addbr br0
sudo brctl addif br0 eth0 tap0 tap1 tap2
sudo brctl show
sudo dhclient br0 ## (или ручками настраиваем br0 как раньше был настроен eth0)


тихо матерясь переписываем правила всяких забавных софтинок типа "netams" для работы с "br0" и рихтуем iptables.

зачем нам это надо? чтобы где-то в два раза поднять пропускную способность сети для qemu. скорость аплоада в vsftpd доходила до 2.5 Mb/sec - это неплохо (у вас могут быть совершенно другие цифры!). да и возни в итоге поменьше, плюс получаем новую "игрушку" - brctl. а уж если vconfig ещё валяется рядом - то "гуляйте, Маша, воля ваша".

частный случай - объединить "мостиком" только "tap*" интерфейсы - в этом случае присваиваем руками адрес для "br0" и используем его вместо "tap*" для рихтовки таблиц маршрутизации.

P.S. не забываем о "командном" режиме работы (Ctl+Alt+2). могут пригодиться "host_net_add", "host_net_remove", "system_reset", "q"/"system_powerdown" и т.п.
*/

понедельник, 15 декабря 2008 г.

tips and tricks - this song will last forever...

/*

в общем тема реально вечная. чем больше "приколов" ты узнаёшь - тем больше понимаешь, какой баран ты есть на самом деле. так что в этой заметке буду время от времени добрасывать ссылки на всякие прикольные "феньки" с использованием командной строки с кратенькими комментариями (коли в оных будет нужда).

поехали...

советы французского товарища Эрика на все случаи жизни

узнать все доступные методы DBUS-а:

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.DBus.Introspectable.Introspect

получить список DBUS интерфейсов, с которыми потом можно "пообщаться" при помощи dbus-send --dest=INTERFACE:

dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/Hal/devices/computer org.freedesktop.DBus.ListNames

to be continued...
*/

воскресенье, 30 марта 2008 г.

О чём стоит помнить при использовании Enlightenment-DR17 (и не только)

/*
1. Настройка меню.

Всё идёт в соответствии со спецификациями freedesktop.org. Но одно дело - рыть доки, а другое - быстренько наколбасить себе что-то стоящее. Ставим xdg-utils и смотрим, что оно должно в идеале выкинуть "на гора":


> set | grep -i xdg

XDG_CACHE_HOME=/home/sda/.cache
XDG_CONFIG_DIRS=/etc/xdg
XDG_CONFIG_HOME=/home/sda/.config
XDG_DATA_DIRS=/usr/share:/usr/local/share
XDG_DATA_HOME=/home/sda/.local/share


Каждый дистрибутив устанавливает (может установить) свой "скелет", положив файлы в $XDG_CONFIG_DIRS/menu. То бишь в нашем случае - в /etc/xdg/menu. Но это - не путь лентяев. Есть способ и попроще. Если мы хотим на скорую руку "добросить" приложения KDE - то достаточно прописать в $XDG_DATA_DIRS или в $XDG_DATA_HOME путь к каталогу, содержащему applications/ и desktop-directories/. И (опционально) можно "подтянуть" структуру KDE (файлы *.menu). Например $XDG_DATA_HOME указывает на /home/sda/.local/share. Смотрим:


> ls -la /home/sda/.local/share

total 3
drwxr-xr-x 9 sda users 248 2007-11-30 01:43 .
drwxr-xr-x 3 sda users 72 2007-07-18 10:28 ..
drwx------ 3 sda users 80 2007-09-04 19:25 amyedit
drwxr-xr-x 3 sda users 2920 2008-03-27 04:17 applications
drwxr-xr-x 4 sda users 96 2007-07-18 10:28 audacious
drwxr-xr-x 2 sda users 456 2008-03-24 10:48 desktop-directories
drwxr-xr-x 2 sda users 640 2008-02-23 02:26 icons
drwxr-xr-x 3 sda users 136 2008-03-30 18:50 tracker
drwx------ 4 sda users 96 2007-09-02 14:08 Trash


Следовательно, если KDE стоит в /opt/kde, то "добить" стоит /opt/kde/share, убедиться, есть ли что-нибудь полезное в /opt/kde/etc/xdg/menus и выправить пару переменных:


export XDG_DATA_DIRS="/opt/kde/share:$XDG_DATA_DIRS"
export XDG_CONFIG_DIRS="/opt/kde/etc/xdg:$XDG_CONFIG_DIRS"

или

export XDG_DATA_HOME="/opt/kde/share:$XDG_DATA_HOME"
export XDG_CONFIG_HOME="/opt/kde/etc/xdg:$XDG_CONFIG_HOME"


Делаем простейшее вложенное меню для E17-го:

> cat ~/.local/share/desktop-directories/X_Apps.directory

[Desktop Entry]
Encoding=UTF-8
Type=Directory
Icon=/home/sda/.icons/Dark-Glass/128x128/apps/x.png
Icon[en_US]=/home/sda/.icons/Dark-Glass/128x128/apps/x.png


> cat ~/.e/e/applications/menu/favorite.menu


<menu>
<name>Other</name>
<menu>
<name>X_Apps</name>
<defaultappdirs>
<defaultdirectorydirs>
<directory>X_Apps.directory</directory>
<include>
<filename>xfontsel.desktop</filename>
<filename>xdvi.desktop</filename>
<filename>xman.desktop</filename>
<filename>xcalc.desktop</filename>
<filename>xedit.desktop</filename>
<filename>xmag.desktop</filename>
<filename>xclipboard.desktop</filename>
</include>
</defaultdirectorydirs></defaultappdirs>
</menu>
</menu>



Все *.desktop файлы создаём в ~/.local/share/applications. Остальное уже описывал. Правда иконку на вложенное меню в тот раз не осилил (в .directory файле одной линии не хватило для победы). И скриншотик с результатами на закусь:



Теперь о том, как сделать каскадное вложенное меню и включить его в структуру xdg:

> cat ~/.local/share/desktop-directories/wine-wine.directory

[Desktop Entry]
Type=Directory
Name=Wine
Icon=wine

> cat ~/.local/share/desktop-directories/wine-Programs-EmuZWin.directory

[Desktop Entry]
Type=Directory
Name=EmuZWin
Icon=folder

> cat ~/.local/share/desktop-directories/wine-Programs.directory

[Desktop Entry]
Type=Directory
Name=Programs
Icon=folder

> cat ~/.config/menus/applications-merged/wine-Programs-EmuZWin.menu # именно так и появляется структура xdg меню #

<menu>
<name>Applications</name>
<menu>
<name>wine-wine</name>
<directory>wine-wine.directory</directory>
<menu>
<name>wine-Programs</name>
<directory>wine-Programs.directory</directory>
<menu>
<name>wine-Programs-EmuZWin</name>
<directory>wine-Programs-EmuZWin.directory</directory>
<include>
<filename>wine-Programs-EmuZWin-Help and Catalog.desktop</filename>
<filename>wine-Programs-EmuZWin-EmuZWin.desktop</filename>
<filename>wine-Programs-EmuZWin-Uninstall EmuZWin.desktop</filename>
</include>
</menu>
</menu>
</menu>
</menu>


> cat ~/.local/share/applications/wine/Programs/EmuZWin/EmuZWin.desktop

[Desktop Entry]
Name=EmuZWin
Exec=env WINEPREFIX="/home/sda/.wine" wine "C:\\Program Files\\EmuZWin\\EmuZWin.exe"
Type=Application
Path=/home/sda/.wine/dosdevices/c:/Program Files/EmuZWin
Icon=23b5_emuzwin.0

Аналогичные desktop файлы для полноты картины ('Help and Catalog.desktop' и 'Uninstall EmuZWin.desktop') находятся в ~/.local/share/applications/wine/Programs/EmuZWin/

Примерчик конечно ещё тот, но и результат соответствует:



Надеюсь этого хватит с избытком.


2. Ребята, давайте жить дружно...
/Кот Леопольд/

Все попытки в E17-ом использовать прозрачность/(псевдо прозрачность) терминалов ни к чему не приведут. Ибо формат пользовательского интерфейса - edje, а не png/xpm/jpg... Либо терминал скомпилен с поддержкой "картинок" (pixmaps) и картинка грузится из ~/.Xdefaults (профайла, вбивается в Exec строку .desctop файла и т.п.), либо требуется запустить некий сервис, который обеспечит наличие "фона" для "вьюпортов"/виртуальных столов. Легче всего это проделать, нарисовав в ~/.profile что-то наподобие:


if [ "`ps aux | grep enlightenment | grep -v grep`" != "" ] ; then
feh --bg-seamless /home/sda/source/install/wallpapers/emotion.jpg \
--bg-scale /home/sda/source/install/wallpapers/emotion.jpg && \
gnome-settings-daemon &
fi


Да, временное решение для одного вьюпорта/(виртуального рабочего стола). Ежели просто стартануть gnome-settings-daemon (без feh), то фоном станет картинка gnome. Что делать при нескольких столиках - не знаю. Пробежавшись по gconf-editor-у так и не понял, может ли гном держать где-то данные о соответствии картинок виртуальным столам. По идее - обязан. Дополнения приветствуются. Запуск gnome-settings-daemon и настройка внешнего вида уберут лишние элементы из gtk приложений:



Затея сия оправданна. Слева - Firefox, справа - LinuxDC++. Что и как с qt - извините, помню, что kde может при настройке из kcontrol привязать картинки к вьюпортам, но что именно нужно запустить сервисом для этого - страшно даже подумать. Может не прав, но... Надо конечно смелости набраться и поставить kde ещё раз... Если же в kde и gnome сопоставление вьюпортов с картинками завязано на kwin/metacity - то боюсь, что разрулить ситуацию малой кровью не получится. Тут есть ещё нюанс: сопоставить вьюпорты (Workspaces) E17-го и gnome/kde. Тянуть древние технологии в "космос" - занятие требующее творческого подхода...

3. Немного об оптимизации.

В качестве "точки отсчёта" примем следующую (процессор - P-III-866, ОЗУ - 1.5Gb, тема E17-го - 23Oz_0_16_999_042_1):

> top | grep enlightenment

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5266 sda 20 0 52688 34m 13m R 23.3 2.3 40:03.39 enlightenment

> enlightenment_remote -module-list | wc
58 230 1741

56 загруженных модулей: от управления громкостью до чтения RSS. Прежде чем экспериментировать, двигаем в 'Configuration Panel -> Advanced -> Profiles' и создаём новый профайл, копируя текущие настройки. После любых издевательств с системой откат/восстановление пройдёт одним щелчком при выборе бэкапа профайла. Приступим, выгрузив для начала все модули. оставил только управление почтой. При этом все наши настройки сохранены и работают. Доступны все хоткеи, меню, управление мышью, все рабочие столы - то есть при выгруженных модулях нет ни малейшей потери базового функционала.

> enlightenment_remote -module-list

REPLY <- BEGIN REPLY: "mail" ENABLED 1 REPLY <- END Закрываем все окна, кроме: entrance_login───enlightenment─┬─bash───gnome-settings-─┬─xrdb │ └─{gnome-settings-} │ └─urxvt───bash───screen > top | grep enlightenment

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14232 sda 20 0 26480 10m 6384 S 0.3 0.7 0:01.57 enlightenment


Причём эта строка в top-е появляется не часто. Ставим дефолтную тему оформления 17-го:


> top | grep enlightenment

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14232 sda 20 0 22208 11m 6832 S 0.3 0.8 1:39.59 enlightenment


Необхдимо примечание, что количество потребляемого ОЗУ прямо пропорционально загруженным текстурам. Возвращаемся в '23Oz.'. Ставим для всех вьюпортов градиентную заливку вместо картинок и edje файлов, ставим прозрачный фон для нашей "полки", на которой всё это время работает модуль 'mail' и:

> top | grep enlightenment

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14232 sda 20 0 24904 8988 6172 S 0.3 0.6 2:38.11 enlightenment

В иксах крутились два urxvt, в одном - screen c 5-ю терминалами, mutt, тот же gnome-settings-daemon. То есть последнее значение ни коим образом пределом не является. Если же задаться целью и для слабых машин сделать тему оформления сугубо на color_classes (привлекая текстуры по-минимому) или вообще без единого включения графических файлов, отдав всю отрисовку движку E (а он сам рисовать умеет будь здоров, в rgba) - думаю, потребление ресурсов можно снизить ещё. В разы. Все тесты специально проводил на 23Oz. - это одна из самых "тяжёлых" тем в плане графических наворотов на сегодня.

Желаете полный сравнительный анализ? Не вопрос. Сообщение от "Sunday, 29 May 2005". Исходники для тестов - там же, методика описана вкратце.


4. E16

А что же у нас со "старшим братом"? E-16.8.13-0.02, тема оформления 23Oz.:

> top | grep e16

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25180 sda 20 0 14460 5752 3500 S 0.3 0.4 0:01.37 e16


E-16.8.13-0.02, тема оформления DarkOne:

> top | grep e16

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25180 sda 20 0 13156 4616 2976 S 0.3 0.3 0:02.06 e16


С версии E-16.6 разработка - за Kim Woelders. Постоянная оптимизация кода, добавление новых опций, великолепные возможности по созданию/модификации интерфейса - Старая Школа во всей красе. Таким образом для многих машин 16-ый подойдёт как нельзя лучше. Но, если создать облегчённый вариант оформления 17-му, то... Нельзя забывать, что 17-ый уже не просто WM. Он принёс EFL (Enlightenment Foundation Libraries) и , как E16-ый до него, шагнул в Terra Incognita.

воскресенье, 9 сентября 2007 г.

tips and tricks - show must go on

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

NVIDIA, Xorg


Подгружаем Composite Extension в Xorg:

sudo nvidia-xconfig –-composite

sudo nvidia-xconfig –-allow-glx-with-composite


Смотрим, что ещё можно наколбасить:

nvidia-xconfig -A


Смотрим на свой Х-сервер:

xdpyinfo

xvinfo

glxinfo

xrestop #(особенно ежели утечки имеют место...)


RPM

Чего у нас тут (поиск – давим “/” и пишем чего трэба):

rpm -qa | sort | less


А шо тут понасовали ?:

rpm -ql имя_пакета


А это откуда ??? :

rpm -qf Путь_к_файлу/файл

rpm -qf `which файл`


Фунтик вроде бы и есть... но ушёл... далеко ушёл:

sudo rm -rf `rpm -ql имя_пакета`


Собираем из spec-а:

rpmbuild -bb Путь_к_spec_файлу/file.spec


Устанавливаем несколько версий пакетов (особенно для kernel полезно):

rpm -i пакет.rpm


Апгрейдим установленные пакеты (в живых должен остаться только один...):

rpm -Uhv пакет.rpm


Прочая... прочая... прочая...

Ежели файлов туча, а надоть их того...:

for i in `ls /каталог/`; do

mv $i /другой_каталог

done

или

(cd каталог; ls|xargs -i mv {} другой_каталог)


Удаляем хлам, старше 2-х недель:

find /Путь_к_файлам/файлы* -mtime +13 -exec rm {} \;


Удаляем файлы из списка:

cat list.txt | tr '\n' '\000'| xargs -0 rm -f


Обнулить файл:

>file

echo > file


И что у нас внутри ??? :

sudo dmidecode
hwinfo

lspci

lsdev

cat /proc/cpuinfo

cat /proc/interrupts

procinfo


А чтой-то винтик не шуршит ???:

smartctl -a /dev/ВИНТИК

hdparm -i /dev/ВИНТИК

fdisk -l


О чём Вы мне, Мадам, орали, когда я Вас грузил ???:

dmesg


Сколько секунд Юникс живе среди нас:

echo "GMT = `date +%s` seconds since 1970"


Хто здесь?! ACHTUNG!!!:

last

who

w


Что-то с памятью моей стало...:

free

vmstat


Сколько осталось на хардах под порнуху ???:

df -h


А сколько отъел этот каталог ? :

du -sh /каталог


Размер всех директорий в данном каталоге :

find . -maxdepth 1 -type d -exec du -sk {} \; | sort -rn


Файло – на чтение-запись!!!

find ./ -type f -exec chmod 644 {} \;


Каталоги – открывайте врата!

find ./ -type d -exec chmod 755 {} \;


Поиск файлов принадлежащих специфическому юзеру и перевод их нa другого:

find ./ -uid 0 -exec chown 500 {} \;


Перевод имен файлов и директорий в определенном каталоге в нижний регистр:

for x in *; do mv "$x" "`echo $x | tr [A-Z] [a-z]`"; done


Удаление пропусков в именах файлов и директорий и подстановка нижней черты “_” в определенном каталоге:

for x in *; do mv "$x" `echo $x | sed -e 's/ /_/g'`; done

или

for x in *; do mv "$x" ${x// /_}; done


Что вообще происходит ??? :

top

ps aux

pstree


Re: Как удалить символы из строки средствами bash?

a="1 2 3 4" ; b=${a// /} ; echo $b

1234


Меняем время на часах:

допустим, что сейчас 31 июля 23:30:04 года 2007-го:

sudo date “073123302007.04”


теперь сбросим это время на часы компа:

sudo /sbin/hwclock --systohc


Монтируем ftp в файловую систему (для curlftpfs версии 0.9.1 и выше)
выполняем скрипт таким образом (опция codepage - не сочтите за рекламу):
$
~/bin/mount_ftp kernel.org
для размонтирования достаточно выполнить mount_ftp без аргументов. монтирование пользователем без параметра allow_root крайне нежелательно (с точки зрения администратора по крайней мере).

$ cat ~/bin/mount_ftp

#!/bin/sh
mount_folder="/mnt/ftp"

if [ "`mount | grep $mount_folder`" == "" ] ; then
sudo curlftpfs ftp://$1 $mount_folder -o \

codepage=cp1251,uid=1000,gid=100,allow_other
else sudo fusermount -u $mount_folder && \
sudo curlftpfs ftp://$1 $mount_folder -o \

codepage=cp1251,uid=1000,gid=100,allow_other \
|| { echo "error occured or you just unmount your ftp" && exit ; }
fi
# EOF


несколько полезных программ для поддержания хорошего настроения:

snort
aide
rkhunter
chkrootkit



AUDIO/VIDEO

Переводим видео из avi в gif :

mplayer -vo png video.avi

convert -dispose previous -delay 10 -page +0+0 *.png animation.gif


Делаем “сдвиги” в видеофайлах:

ffmpeg -i 1.avi -padcolor 00FF00 -padleft 100 -s 630x480 2.avi

Слушаем радио:

mplayer http://адрес:порт/точка_монтирования

N.B. По http://адрес:порт/точка_монтирования.m3u или http://адрес:порт/точка_монтирования.pls нам “выдадут” плейлист, но нам он не нужен. Можно сохранить плейлист, открыть и посмотреть, куда именно обращаться.


Смотрим мультикаст видео:

mplayer udp://@адрес:порт

Смотрим, что у нас с видео и аудио кодеками:

mplayer -vc help

mplayer -ac help

mencoder -ovc help

mencoder -oac help

ffmpeg -formats


Смотрим наши “демуксеры”:

mplayer -audio-demuxer help


Перебиваем индексы в битом видео для работы “перемотки”

mplayer -forceidx file.avi


Делаем видео из jpg файлов:

mencoder "mf://*.jpg" -mf fps=25 -ovc copy -o file_jpg.avi
Прикручиваем к этому видео звуковую дорожку:
mencoder file_jpg.avi -o file_jpg_snd1.avi -oac copy -ovc copy -audiofile audio.mp3
Прикручиваем к этому видео вторую звуковую дорожку:

ffmpeg -i file_jpg_snd1.avi -i audio2.mp3 -vcodec copy \

-acodec copy file_jpg_snd2.avi -newaudio


Потрошим DVD:

ffmpeg -i /media/dvd/VIDEO_TS/VTS_01_1.VOB \

-acodec copy -map 0:2 audio.ac3


FFmpeg version SVN-r9451, Copyright (c) 2000-2007 Fabrice Bellard, et al.

configuration: --prefix=/usr/local --mandir=/usr/share/man --enable-libmp3lame --enable-libogg --enable-libvorbis --enable-libfaad --enable-libfaac --enable-libxvid --enable-liba52 --enable-pp --enable-swscaler --enable-gpl --enable-gprof --enable-libx264 --enable-libamr-nb --enable-libamr-wb --enable-pthreads --enable-x11grab --enable-libtheora --cc=/home/sda/bin/gcc

libavutil version: 49.4.1

libavcodec version: 51.40.4

libavformat version: 51.12.1

built on Jun 29 2007 21:03:07, gcc: 4.2.0
Input #0, mpeg, from '/media/dvd/VIDEO_TS/VTS_01_1.VOB':
Duration: 00:25:11.8, start: 0.287267, bitrate: 5680 kb/s
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 7500 kb/s, 25.00 fps(r)
Stream #0.1[0x80]: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5:1, 384 kb/s
Stream #0.3[0x82]: Audio: ac3, 48000 Hz, stereo, 96 kb/s
File 'audio.ac3' already exists. Overwrite ? [y/N] y
Output #0, ac3, to 'audio.ac3':
Stream #0.0: Audio: ac3, 48000 Hz, 5:1, 384 kb/s
Stream mapping:
Stream #0.2 -> #0.0
Press q to stop encoding
size= 37988kB time=810.4 bitrate= 384.0kbits/s
video:0kB audio:37988kB global headers:0kB muxing overhead 0.000000%
Received signal 2: terminating.

*******************************************************************************************************


разбираем "на пальцах". выше - dvd с тремя аудио дорожками и одной видео:
Stream #0.0[0x1e0]: Video: mpeg2video, yuv420p, 720x576, 7500 kb/s, 25.00 fps(r)
Stream #0.1[0x80]: Audio: ac3, 48000 Hz, 5:1, 448 kb/s
Stream #0.2[0x81]: Audio: ac3, 48000 Hz, 5:1, 384 kb/s
Stream #0.3[0x82]: Audio: ac3, 48000 Hz, stereo, 96 kb/s


а команда в самом верху делает копию второй аудиодорожки в audio.ac3 (без потерь),
соответственно можно скопировать все 3 аудиодорожки а потом - запихать их в пережатую (надеюсь, что x264-м кодеком) авишку, огг или что-там-душа-просит... (“потрошить” можно практически всё, равно как и “собирать”)


Тупенько рипаем DVD (параметры x264encopts лучше сразу положить в ~/.mplayer/mencoder.conf):

mencoder dvd://1 -oac copy -ovc x264 -o dvdrip.avi

или

mencoder dvd://1 -oac mp3lame -ovc x264 -o dvdrip.avi


Собираем несколько видеофайлов в один (можно с -nosound если вдруг чего):

mencoder file.avi file1.avi file2.avi ... -o result.avi


Делаем мувик для мобилки с экраном 128x96:

ffmpeg -i file.avi -s sqcif -ar 8000 -ac 1 -ab 12.2K file.3gp

или

ffmpeg -i file.avi -s 128x96 -ar 8000 -ac 1 -ab 12.2K file.3gp


Кодируем mencoder-ом на лету видео с ТВ-тюнера в файл tv.avi:

mencoder -tv driver=v4l2:width=768:height=576:device=/dev/video0:norm=SECAM:buffersize=128:f ps=25:audiorate=22050:forceaudio -oac mp3lame tv:// -o tv.avi -ovc lavc -lavcopts vcodec=mpeg4:autoaspect=1:vbitrate=1200:vme=4:vqscale=3:vb_strategy=1:keyint=30


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

Вот ещё несколько ссылок по кодированию видео с помощью mplayer/ffmpeg:

http://strannick.blogspot.com/2007/04/x264.html

http://www.linuxjournal.com/article/9005

http://www.opennet.ru/base/sys/mencoding_pop.txt.html

Проект ffmpeg развивается очень динамично, поэтому информация по использованию опций кодеков (особенно x264) “устаревает” довольно быстро. Если что-то не получается – не паникуйте. Кодирование видео – не простая дисциплина, старайтесь больше экспериментировать и читайте документацию к каждому используемому кодеку.