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

2012-02-26

Шпора по mdadm

pc:/home/user # mdadm -C /dev/md3 -a yes --level=1 --raid-devices=1 /dev/sda5
mdadm: '1' is an unusual number of drives for an array, so it is probably
a mistake. If you really mean it you will need to specify --force before
setting the number of drives.
pc:/home/user # mdadm -C /dev/md3 -a yes --level=1 --raid-devices=2 /dev/sda5 missing
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md3 started.





Взято из: http://itday.org.ua/2011/02/22/mdadm-manage-%d0%bd%d1%83-%d0%b8%d0%bb%d0%b8-fail-event-on-devmd0/

Так сказать, что делать и куда бежать…
Делать будем следующее:

#чтобы уж наверняка понять что к чему
mdadm -D /dev/md0

#изымаем из рейда
mdadm --manage /dev/md0 --remove /dev/sdb1

#забиваем нолями (как показывает практика в итоге очень увеличивает
скорость синхронизации)
dd if=/dev/zero of=/dev/sdb1

#возвращаем обратно
mdadm --manage /dev/md0 --add /dev/sdb1

#так сказать мониторим процесc собрания сего чуда обратно
watch -n 3 cat /proc/mdstat

Вот вроде как и всё. Хотя если данная ситуация будет повторятся следует более внимательно посмотреть на Ваши винчестеры ибо быть может с ними чего-то не так.
P.S. Имена разделов RAID и томов винчестера приведены для примера, так сказать Вы предупреждены.





http://habrahabr.ru/tag/mdadm/
http://habrahabr.ru/blogs/sysadm/100952/
http://www.chla.ru/index.php/linux/148-mod363
http://ruslandh.narod.ru/howto_ru/Boot-Root-Raid-LILO/Boot-Root-Raid-LILO-4.html



из IBM http://www.ibm.com/developerworks/ru/library/l-soft-raid/index.html:



Введение

Важность надёжного хранения данных очевидна для пользователя любого уровня. Тем более сейчас, когда объёмы хранимых данных растут с угрожающей скоростью, вне зависимости от того, являются ли эти данные персональными (коллекции фотографий и видеозаписей) или корпоративными (финансовая и проектная документация, результаты научных исследований и т.п.). Одно из средств, помогающих в той или иной степени решить проблему надёжности хранения данных, основано на организации дискового RAID-массива.


Концепция RAID

RAID (англ. Redundant Array of Independent Disks - избыточный массив независимых дисков) (хотя более точной, возможно, будет "вольная интерпретация": массив независимых дисков с избыточным ресурсом) - это аппаратная или программная подсистема, в которой хранимые данные распределяются (часто с дублированием) по нескольким жёстким дискам (физическим или виртуальным). Наиболее эффективной, как с точки зрения надёжности, так и с точки зрения производительности, является аппаратная RAID-подсистема. Тем не менее, программная реализация также может принести немалую пользу, и в Linux есть все необходимые компоненты для организации программного RAID-массива.

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



Различные типы RAID-массивов

Выше было отмечено, что помимо своей главной функции - обеспечение надёжности хранения данных - RAID может способствовать повышению производительности, разделяя данные на несколько потоков для одновременной записи на несколько дисков. Реализация RAID-подсистемы в Linux несколько отличается от общепринятой, но логическое деление на несколько уровней сохранено.

На уровне RAID 0 два или более диска используются только для повышения производительности, поскольку разделяют между собой данные при чтении/записи. Здесь "избыточность" фактически отсутствует.

Массив RAID 1 является первым уровнем, обеспечивающим избыточность. Этот режим часто называют "зеркалированием" (mirroring), поскольку данные дублируются на всех дисках массива. Степень надёжности возрастает, но производительность операции записи снижается, так как запись одних и тех же данных выполняется несколько раз. Для организации RAID 1 требуется не менее двух дисков.


Особенностью массива RAID 4 является отдельный диск для записи информации о контроле чётности данных. Таким образом, узким местом этой подсистемы становятся периоды ожидания при записи именно на этот диск. По этой причине рекомендуется пользоваться RAID 5 во всех случаях, кроме тех, в которых применение RAID 4 крайне необходимо и обосновано.

В массиве RAID 5 при записи разделяются и данные, и информация о контроле чётности. Поэтому RAID 5 считался наиболее эффективным и экономичным уровнем до появления новых разработок в этой области: RAID 5EE, RAID 6, RAID 10 и комбинированных уровней RAID 1+0, RAID 5+0, RAID 1+5. Для организации массива RAID 5 требуется не менее трёх дисков.


О дальнейшем развитии концепции RAID-массивов можно узнать на указанных выше страницах Wikipedia. Особый интерес представляет сравнение "RAID 10 versus RAID 5 in Relational Databases" на англоязычной странице.

Поддержка программной реализации RAID появилась в ядре Linux, начиная с версии 2.0, хотя для практического использования первая версия вряд ли годилась: возможности её были весьма ограничены, и содержала она изрядное количество ошибок. Начиная с ядер версии 2.4 ситуация улучшилась, и современные реализации RAID в Linux вполне пригодны для практического применения.



Создание и конфигурирование RAID-массива

Первые эксперименты с созданием RAID-массивов рекомендуется проводить в среде виртуальной машины, например, VirtualBox. Это более безопасно, к тому же не у каждого пользователя найдётся компьютер с двумя-тремя физическими дисками.

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


При создании RAID-массива на нескольких физических дисках, следует обратить особое внимание на то, чтобы диски имели одинаковый размер, а в идеальном варианте лучше всего использовать диски одной модели.

Итак, для начала в VirtualBox необходимо создать собственно виртуальную машину для Linux (с ядром версий 2.6), выбрать для неё подходящий размер памяти и создать три жёстких диска с одинаковым объёмом (по 20 Гб для каждого диска будет вполне достаточно). После загрузки Linux-системы (можно использовать любой live-DVD или его ISO-образ) для работы потребуется эмулятор терминала (текстовой консоли).

Для разметки разделов на диске можно воспользоваться утилитой fdisk, но более удобной является её "наследница" cfdisk с псевдографическим интерфейсом, которую можно запустить из консоли следующей командой:

cfdisk /dev/sda



После запуска следует создать раздел свопинга (например, размером 1ГБ), а оставшееся пространство (19 ГБ) отдать корневому разделу. При этом важно установить для обоих разделов тип Linux RAID (шестнадцатеричный код fd). После этого нужно обязательно записать сделанные изменения и выйти из cfdisk.


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

sfdisk -d /dev/sda | sfdisk /dev/sdb
  sfdisk -d /dev/sda | sfdisk /dev/sdc


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

В результате будут получены три диска с одинаковыми разделами и установленным типом Linux RAID. Теперь можно приступать непосредственно к созданию RAID-массива.




Создание дисков RAID-массива


Для создания RAID-массива потребуется утилита mdadm из одноимённого пакета. Сама операция создания выполняется с помощью команд, приведенных в листинге 1.


Листинг 1. Создание дисков RAID-массива
mdadm --create /dev/md0 --metadata=0.90 --level=1 --raid-devices=3 \
      /dev/sda1 /dev/sdb1 /dev/sdc1
mdadm --create /dev/md1 --metadata=0.90 --level=1 --raid-devices=3 \
      /dev/sda2 /dev/sdb2 /dev/sdc2


Первый ключ команды обязательно должен определять основной режим функционирования mdadm. В данном случае используется ключ --create (краткая форма -C) - режим создания. После этого ключа указывается имя создаваемого RAID-устройства.


Ключ --metadata (краткая форма -e) определяет используемый для данного диска формат метаданных (суперблока). Значение 0.90 (а также его аналоги 0 и default) при создании RAID-массива используется по умолчанию, поэтому в приведённом примере его можно было бы и не включать в команду. Формат 0.90 допускает использование в RAID-массиве до 28 устройств-компонентов, а также определяет максимальный размер этих устройств (не более 2 ТБ).


Ключ --level=1 определяет уровень RAID-массива. Ключ --raid-devices=3 определяет количество устройств-компонентов в создаваемом RAID-массиве. Завершает командную строку список устройств, из которых будет сформирован RAID-массив.



Запуск в эксплуатацию

Дисковый массив успешно создан, но пока ещё пуст. Потребуется установить Linux-систему, чтобы проверить работу созданной RAID-подсистемы. Перед установкой следует позаботиться о том, чтобы раздел, выделенный для свопинга, корректно распознавался программой установки. Для этого используется следующая команда:

mkswap /dev/md0 setup



Установка Linux-системы выполняется в "штатном" режиме за исключением одной особенности: при выборе разделов вместо привычных /dev/sda1 и /dev/sda2 пользователю предлагаются /dev/md0 и /dev/md1 соответственно. Загрузчик, разумеется, должен быть установлен в MBR.

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

Если в установленной Linux-системе используется загрузчик grub, то в файл /boot/grub/grub.conf необходимо внести следующие изменения:


  • в строке splashimage=... имя раздела (hd0,1) заменяется на имя (md0,1)
  • в строке root (hd0,1) аналогичным образом выполняется замена на (md0,1)

Если система загружается с помощью lilo (этот загрузчик всё ещё используется в некоторых дистрибутивах), то потребуется отредактировать файл /etc/lilo.conf:

  • добавить в начальной (общей) секции строку: raid-extra-boot = mbr-only
  • заменить строку boot = /dev/sda на строку boot = /dev/md0

После сохранения и выхода из редактора обязательно нужно активизировать внесённые изменения командой lilo.

Теперь можно перезагрузить систему и проверить, как работает система на RAID-массиве.



Учёт и контроль

Текущее состояние RAID-подсистемы в структуре ядра отражает файл /proc/mdstat. Следует отметить, что для его просмотра требуются полномочия суперпользователя. Информация из этого файла особенно важна в тех случаях, когда в RAID-массив добавляется новый диск (или заменяется испорченный диск) или одно из устройств-компонентов удаляется из RAID-массива.

Команда mdadm сама по себе выполняет активизацию RAID-массива и в принципе не требует наличия файла конфигурации, но будет обращаться к нему, если в явной форме указано его имя ("стандартное" имя - /etc/mdadm.conf). Использование файла конфигурации рекомендуется по двум причинам:


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

Команда mdadm --detail --scan позволяет получить значения текущих параметров настройки RAID-массива. Но для извлечения более подробной информации следует воспользоваться следующей комбинацией команд (опять же, потребуются права root):

echo 'DEVICE /dev/sd*[0-9]' > /etc/mdadm.conf
mdadm --detail --scan >> /etc/mdadm.conf





Управление RAID-массивом

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

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

Текущее состояние RAID-массива проверяется по содержимому вышеупомянутого файла /proc/mdstat. После удаления третьего диска содержимое этого файла будет выглядеть приблизительно так, как на рисунке 1.




Рисунок 1. Фрагмент файла /proc/mdstat - один из дисков отсутствует


Рисунок 1. Фрагмент файла /proc/mdstat - один из дисков отсутствует



Из показанного фрагмента понятно, что в настоящий момент функционируют только два RAID-диска из трёх, а о том, какое именно устройство-компонент отсутствует, сообщает параметр [UU_] - первые два устройства задействованы, на месте последнего - символ подчёркивания.

Если предположить, что третий диск в конфигурации виртуальной машины вновь создан, то необходимо скопировать разделы со всеми их характеристиками с одного из работающих RAID-дисков с помощью уже описанной выше команды:

sfdisk -d /dev/sda | sfdisk /dev/sdc


После этого подготовленный "новый" диск добавляется в существующий RAID-массив:

mdadm /dev/md0 -a /dev/sdc1
mdadm /dev/md1 -a /dev/sdc2



Теперь система продолжает функционировать в нормальном режиме - все три RAID-устройства-компонента подключены и работают. В этом можно убедиться, снова просмотрев содержимое файла /proc/mdstat.



Дополнительные замечания

Имитировать отказ одного из RAID-дисков можно и с помощью специальных ключей команды mdadm, как показано ниже:

mdadm /dev/md0 --set-faulty /dev/sdc1
или
mdadm /dev/md0 --fail /dev/sdc1


После того, как диск объявлен "неработающим", его можно удалить из RAID-массива:


mdadm /dev/md0 --remove /dev/sdc1


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

Когда замена устройства-компонента проведена, можно добавить обновлённый компонент в RAID-массив с помощью упоминавшейся выше команды:

mdadm /dev/md0 --add /dev/sdc1




Заключение

Программная реализация RAID-массива в системе Linux позволяет пользователю без особых затруднений создавать дисковые массивы нескольких уровней с применением как физических дисков, так и логических разделов. Предоставляемых этой подсистемой возможностей вполне достаточно, чтобы организовать хранение данных, ориентированное и на надёжность, и на производительность.





Об авторе

Алексей Снастин - независимый разработчик ПО, консультант и переводчик с английского языка технической и учебной литературы по ИТ. Принимал участие в разработке сетевых офисных приложений типа клиент/сервер на языке С в среде Linux.






Из: http://linuxshare.ru/docs/admin/ud_sraid.html
Примеры

1. Как посмотреть состояние всех RAID-массивов, запущенных в системе:

cat /proc/mdstat

2. Как посмотреть процент выполнения (состояние выполнения) процесса сборки/синхронизации/проверки программного RAID-массива:

cat /proc/mdstat

3. Как выполнить проверку целостности программного RAID-массива md0:

echo 'check' >/sys/block/md0/md/sync_action

4. Как выполнить пересинхронизацию программного RAID-массива md0:

echo 'repair' >/sys/block/md0/md/sync_action

5. Как снизить скорость синхронизации программного RAID-массива md0 в процессе восстановления (система и так слишком нагружена):

echo скорость >/sys/block/md0/md/sync_speed_max

где скорость задаётся в кбайт/сек

6. Как посмотреть нашлись ли какие-то ошибки в процессе проверки программного RAID-массива по команде check или repair:

cat /sys/block/md0/md/mismatch_cnt

2011-06-17

Моя шпаргалка по бэкапу

Копируем


SSH в консоле

scp -r user@10.1.1.1:/opt/path/ /home/user_hdd/BackUp/domino-2_10-07-01_DAOS/
scp -r user@10.1.1.1:/opt/path/?BR_2012-12-31.*.rar /TEMP

SSH в файловом менеджере (в моем случае Krusader)

fish://10.0.1.1/opt/path

SMB в файловом менеджере

smb://HOST.NAME.DOMAIN/RESOURCE"
smb://username@host.name.domain/resource
smb://username:password@DOMAIN/10.0.1.1/path

Архивируем (rar)


Архивируем легким и быстрым сжатием, с паролем и сохранение атрибутов файлов, что важно

(если кто-то знает архиватор сохраняющий атрибуты файлов, и не rar, спасибо за ссылку)
rar a -m1 -ol -ow -r -p -v100000000b -- l1_100320_aftFP1 lotus
rar a -m1 -ol -ow -r -p -v100000000b -- backup/d2_100527_aftFP2_mail data/mail
rar a -m1 -ol -ow -r -p -v100000000b -- backup/d2_100527_aftFP2_roaming data/roaming

rar a -m1 -ol -ow -r -p -v100000000b -x@excludes -- backup/d2_100527_aftFP2 data
где excludes - файл с исключениями, содержание например:
/opt/path/data/IBM_TECHNICAL_SUPPORT/*
/opt/path/data/lost+found
/opt/path/data/logdir/*
/opt/path/data/DAOS/*
/opt/path/data/roaming/*
/opt/path/data/mail/*
/opt/path/data/help/*
/opt/path/data/domino/html/*

Некоторые ключи RARа

- Stop switches scanning
m{0..5} Set compression level (0-store...3-default...5-maximal)
ol Save symbolic links as the link instead of the file
ow Save owner
p[password] Set password
p- Do not query password
r Recurse subdirectories
r0 Recurse subdirectories for wildcard names only
ts{m,c,a}[N] Save or restore file time (modification, creation, access)
v{size}[k,b] Create volumes with size=*1000 [*1024, *1]
x{file} Exclude specified file
x@{list} Exclude files in specified list file

Запаковываем каждый файл в отдельный архив

md ../archive; for i in *; do rar a -m1 -ol -ow -v100000000b ../archive/$i.rar $i; done

Действие пользователя в Krusader для распаковки архива

rar x -v '%aCurrent("", "No")%' ''%aPath("No")%

_

2011-04-27

Настраиваем работу ejabberd сервер (который jabber он-же XMPP) на авторазицию клиентов в IBM Lotus Domino (его LDAP)

В качестве клиента используется PSI.
ejabberd VS IBM Lotus SameTime:

1) Бесплатный клиент и сервер
2) Требует мало ресурсов (клиент и сервер)
3) win32 + linux
3) Работает пересылка файлой неограниченного размера
4) Клиент устанавливается за 2 клика, не требует административных прав



Итак:

1) Дополнительная настройка domino:
(Думаю имеет смысл предположить что домино у вас уже установлен и настроен)
небходимо настроить Directory Assistance что-бы получилось что-то вроде:





С домино сервером идет замечательная документация по настройки Directory Assistance, используйте ее.

Так-же необходимо настроить и включить службу domino сервера - LDAP, так-же процесс настройки описан в документации, я просто включил ее не делая никаких специфических настроек. Единственное, возможно вам придется создать Configuration Document, если вы этого еще не сделали, в любом случае его наличие очень рекомендуется.
(Не забываем открывать нужные порты в настройках брандмауэра)

Не обязательно, но очень рекомендую создать пользователя для управления ejabberd сервером, например im-admin, укажите у него email адрес: im-admin@company.ru



2) Установка jabberd:
Возможна установка на домино сервер, и вам НЕ потребуется дополнительное оборудование.
в моем случае (openSUSE 11.3) установка проста, установить пакет ejabberd из репозитария:
http://download.opensuse.org/repositories/server:/messaging/openSUSE_11.3/
Информацию по установке пакет легко можно найти используя поиск.
Если мне не изменяет память, ejabberd может работать под windows.


3) Настройка сервера ejabberd (самое интересное):
(если у вас используется кластер серверов domino, jabberd может использовать это)
версия сервера ejabberd - 2.1.0

все настройки ejabberd сервера находятся в 3-х файлах в /etc/ejabberd:
ejabberd.cfg, ejabberdctl.cfg и inetrc

вот действующие конфиги: (реальные значения изменены)
company.ru - условный домен компании
COMPANY - Notes домен компании
im-admin - имя пользователя в справочнике domino для управления ejabberd'ом
im-admin@company.ru - email пользователя в справочнике domino для управления ejabberd'ом
domino-1.company.ru - сервер domino с работающим сервисом LDAP


ejabberd.cfg:
%%%
%%%               ejabberd configuration file
%%%
%%%'

%%% The parameters used in this configuration file are explained in more detail
%%% in the ejabberd Installation and Operation Guide.
%%% Please consult the Guide in case of doubts, it is included in
%%% your copy of ejabberd, and is also available online at
%%% http://www.process-one.net/en/ejabberd/docs/

%%% This configuration file contains Erlang terms.
%%% In case you want to understand the syntax, here are the concepts:
%%%
%%%  - The character to comment a line is %
%%%
%%%  - Each term ends in a dot, for example:
%%%      override_global.
%%%
%%%  - A tuple has a fixed definition, its elements are
%%%    enclosed in {}, and separated with commas:
%%%      {loglevel, 4}.
%%%
%%%  - A list can have as many elements as you want,
%%%    and is enclosed in [], for example:
%%%      [http_poll, web_admin, tls]
%%%
%%%  - A keyword of ejabberd is a word in lowercase.
%%%    The strings are enclosed in "" and can have spaces, dots...
%%%      {language, "en"}.
%%%      {ldap_rootdn, "dc=example,dc=com"}.
%%%
%%%  - This term includes a tuple, a keyword, a list and two strings:
%%%      {hosts, ["jabber.example.net", "im.example.com"]}.
%%%


%%%.   =======================
%%%'   OVERRIDE STORED OPTIONS

%%
%% Override the old values stored in the database.
%%

%%
%% Override global options (shared by all ejabberd nodes in a cluster).
%%
%%override_global.

%%
%% Override local options (specific for this particular ejabberd node).
%%
%%override_local.

%%
%% Remove the Access Control Lists before new ones are added.
%%
%%override_acls.


%%%.   =========
%%%'   DEBUGGING

%%
%% loglevel: Verbosity of log files generated by ejabberd.
%% 0: No ejabberd log at all (not recommended)
%% 1: Critical
%% 2: Error
%% 3: Warning
%% 4: Info
%% 5: Debug
%%
{loglevel, 4}.

%%
%% watchdog_admins: Only useful for developers: if an ejabberd process
%% consumes a lot of memory, send live notifications to these XMPP 
%% accounts.
%%
%%{watchdog_admins, ["bob@example.com"]}.


%%%.   ================
%%%'   SERVED HOSTNAMES

%%
%% hosts: Domains served by ejabberd.
%% You can define one or several, for example:
%% {hosts, ["example.net", "example.com", "example.org"]}.
%%
{hosts, ["company.ru"]}.

%%
%% route_subdomains: Delegate subdomains to other XMPP server.
%% For example, if this ejabberd serves example.org and you want
%% to allow communication with a XMPP server called im.example.org.
%%
%%{route_subdomains, s2s}.


%%%.   ===============
%%%'   LISTENING PORTS

%%
%% listen: Which ports will ejabberd listen, which service handles it
%% and what options to start it with.
%%
{listen,
 [

  {5222, ejabberd_c2s, [

   %%
   %% If TLS is compiled and you installed a SSL
   %% certificate, put the correct path to the
   %% file and uncomment this line:
   %%
   %%{certfile, "/path/to/ssl.pem"}, starttls,

   {access, c2s},
   %% {shaper, c2s_shaper},
   {max_stanza_size, 65536}
         ]},

  %%
  %% To enable the old SSL connection method in port 5223:
  %%
  %%{5223, ejabberd_c2s, [
  %%   {access, c2s},
  %%   {shaper, c2s_shaper},
  %%   {certfile, "/path/to/ssl.pem"}, tls,
  %%   {max_stanza_size, 65536}
  %%         ]},

  {5269, ejabberd_s2s_in, [
      %% {shaper, s2s_shaper},
      {max_stanza_size, 131072}
     ]},

  %%
  %% ejabberd_service: Interact with external components (transports...)
  %%
  %%{8888, ejabberd_service, [
  %%       {access, all},
  %%       {shaper_rule, fast},
  %%       {ip, {127, 0, 0, 1}},
  %%       {hosts, ["icq.example.org", "sms.example.org"],
  %%        [{password, "secret"}]
  %%       }
  %%      ]},

  %%
  %% ejabberd_stun: Handles STUN Binding requests
  %%
  %%{{3478, udp}, ejabberd_stun, []},

  {5280, ejabberd_http, [
    %%{request_handlers,
    %% [
    %%  {["pub", "archive"], mod_http_fileserver}
    %% ]},
    captcha,
    http_bind,
    http_poll,
    web_admin
   ]}

 ]}.

%%
%% s2s_use_starttls: Enable STARTTLS + Dialback for S2S connections.
%% Allowed values are: true or false.
%% You must specify a certificate file.
%%
%%{s2s_use_starttls, true}.

%%
%% s2s_certfile: Specify a certificate file.
%%
%%{s2s_certfile, "/path/to/ssl.pem"}.

%%
%% domain_certfile: Specify a different certificate for each served hostname.
%%
%%{domain_certfile, "example.org", "/path/to/example_org.pem"}.
%%{domain_certfile, "example.com", "/path/to/example_com.pem"}.

%%
%% S2S whitelist or blacklist
%%
%% Default s2s policy for undefined hosts.
%%
%%{s2s_default_policy, allow}.

%%
%% Allow or deny communication with specific servers.
%%
%%{{s2s_host, "goodhost.org"}, allow}.
%%{{s2s_host, "badhost.org"}, deny}.

%%
%% Outgoing S2S options
%%
%% Preferred address families (which to try first) and connect timeout
%% in milliseconds.
%%
%%{outgoing_s2s_options, [ipv4, ipv6], 10000}.


%%%.   ==============
%%%'   AUTHENTICATION

%%
%% auth_method: Method used to authenticate the users.
%% The default method is the internal.
%% If you want to use a different method,
%% comment this line and enable the correct ones.
%%
%% {auth_method, internal}.
%%%%% ZZZZZZZZZZZZZZZZZZZZZZZZZZzz

%%
%% Authentication using external script
%% Make sure the script is executable by ejabberd.
%%
%%{auth_method, external}.
%%{extauth_program, "/path/to/authentication/script"}.

%%
%% Authentication using ODBC
%% Remember to setup a database in the next section.
%%
%%{auth_method, odbc}.

%%
%% Authentication using PAM
%%
%%{auth_method, pam}.
%%{pam_service, "pamservicename"}.

%%
%% Authentication using LDAP
%%
{auth_method, ldap}.
%%
%% List of LDAP servers:   
{ldap_servers, ["domino-1.company.ru"]}.
%%
%% Encryption of connection to LDAP servers:
{ldap_encrypt, none}.
%%{ldap_encrypt, tls}.
%%
%% Port connect to LDAP servers:
{ldap_port, 389}.
%%{ldap_port, 636}.
%%
%% LDAP manager:
%%{ldap_rootdn, "dc=example,dc=com"}.
{ldap_rootdn, "CN=im-admin,O=COMPANY"}.

%%
%% Password to LDAP manager:
{ldap_password, ""}.
%%
%% Search base of LDAP directory:
{ldap_base, "O=COMPANY"}.


%% LDAP attribute that holds user ID:                   uid - username
%%{ldap_uids, [{"mail", "%u@company.ru"}]}.
%% {ldap_uids, [{"uid", "%u"}]}.
%% {ldap_uids, [{"mail", "%u@company.ru"},{"uid", "%u@company.ru"}]}.
{ldap_uids, [{"mail", "%u@company.ru"},{"uid"}]}.


%%
%% LDAP filter:
{ldap_filter, "(objectClass=dominoPerson)"}.

%%
%% Anonymous login support:
%%   auth_method: anonymous
%%   anonymous_protocol: sasl_anon | login_anon | both
%%   allow_multiple_connections: true | false
%%
%%{host_config, "public.example.org", [{auth_method, anonymous},
%%                                     {allow_multiple_connections, false},
%%                                     {anonymous_protocol, sasl_anon}]}.
%%
%% To use both anonymous and internal authentication:
%%
%%{host_config, "public.example.org", [{auth_method, [internal, anonymous]}]}.


%%%.   ==============
%%%'   DATABASE SETUP

%% ejabberd uses by default the internal Mnesia database,
%% so you can avoid this section.
%% This section provides configuration examples in case
%% you want to use other database backends.
%% Please consult the ejabberd Guide for details about database creation.

%%
%% MySQL server:
%%
%%{odbc_server, {mysql, "server", "database", "username", "password"}}.
%%
%% If you want to specify the port:
%%{odbc_server, {mysql, "server", 1234, "database", "username", "password"}}.

%%
%% PostgreSQL server:
%%
%%{odbc_server, {pgsql, "server", "database", "username", "password"}}.
%%
%% If you want to specify the port:
%%{odbc_server, {pgsql, "server", 1234, "database", "username", "password"}}.
%%
%% If you use PostgreSQL, have a large database, and need a
%% faster but inexact replacement for "select count(*) from users"
%%
%%{pgsql_users_number_estimate, true}.

%%
%% ODBC compatible or MSSQL server:
%%
%%{odbc_server, "DSN=ejabberd;UID=ejabberd;PWD=ejabberd"}.

%%
%% Number of connections to open to the database for each virtual host
%%
%%{odbc_pool_size, 10}.

%%
%% Interval to make a dummy SQL request to keep alive the connections
%% to the database. Specify in seconds: for example 28800 means 8 hours
%%
%%{odbc_keepalive_interval, undefined}.


%%%.   ===============
%%%'   TRAFFIC SHAPERS

%%
%% The "normal" shaper limits traffic speed to 1.000 B/s
%%
{shaper, normal, {maxrate, 1000000}}.

%%
%% The "fast" shaper limits traffic speed to 50.000 B/s
%%
{shaper, fast, {maxrate, 5000000}}.


%%%.   ====================
%%%'   ACCESS CONTROL LISTS

%%
%% The 'admin' ACL grants administrative privileges to XMPP accounts.
%% You can put as many accounts as you want.
%%
%%{acl, admin, {user, "aleksey", "localhost"}}.
{acl, admin, {user, "im-admin", "company.ru"}}.

%%
%% Blocked users
%%
%%{acl, blocked, {user, "baduser", "example.org"}}.
%%{acl, blocked, {user, "test"}}.

%%
%% Local users: don't modify this line.
%%
{acl, local, {user_regexp, ""}}.

%%
%% More examples of ACLs
%%
%%{acl, jabberorg, {server, "jabber.org"}}.
%%{acl, aleksey, {user, "aleksey", "jabber.ru"}}.
%%{acl, test, {user_regexp, "^test"}}.
%%{acl, test, {user_glob, "test*"}}.

%%
%% Define specific ACLs in a virtual host.
%%
%%{host_config, "localhost",
%% [
%%  {acl, admin, {user, "bob-local", "localhost"}}
%% ]
%%}.


%%%.   ============
%%%'   ACCESS RULES

%% Maximum number of simultaneous sessions allowed for a single user:
{access, max_user_sessions, [{10, all}]}.

%% Maximum number of offline messages that users can have:
{access, max_user_offline_messages, [{5000, admin}, {100, all}]}. 

%% This rule allows access only for local users:
{access, local, [{allow, local}]}.

%% Only non-blocked users can use c2s connections:
{access, c2s, [{deny, blocked},
        {allow, all}]}.

%% For C2S connections, all users except admins use "normal" shaper
{access, c2s_shaper, [{none, admin},
        {normal, all}]}.

%% All S2S connections use "fast" shaper
{access, s2s_shaper, [{fast, all}]}.

%% Only admins can send announcement messages:
{access, announce, [{allow, admin}]}.

%% Only admins can use configuration interface:
{access, configure, [{allow, admin}]}.

%% Admins of this server are also admins of MUC service:
{access, muc_admin, [{allow, admin}]}.

%% Only accounts of the local ejabberd server can create rooms:
{access, muc_create, [{allow, local}]}.

%% All users are allowed to use MUC service:
{access, muc, [{allow, all}]}.

%% Only accounts in the local ejabberd server can create Pubsub nodes:
{access, pubsub_createnode, [{allow, local}]}.

%% In-band registration allows registration of any possible username.
%% To disable in-band registration, replace 'allow' with 'deny'.
{access, register, [{allow, all}]}.

%% By default frequency of account registrations from the same IP
%% is limited to 1 account every 10 minutes. To disable put: infinity
%%{registration_timeout, 600}.

%%
%% Define specific Access rules in a virtual host.
%%
%%{host_config, "localhost",
%% [
%%  {access, c2s, [{allow, admin}, {deny, all}]},
%%  {access, register, [{deny, all}]}
%% ]
%%}.


%%%.   ================
%%%'   DEFAULT LANGUAGE

%%
%% language: Default language used for server messages.
%%
{language, "ru"}.

%%
%% Set a different default language in a virtual host.
%%
%%{host_config, "localhost",
%% [{language, "ru"}]
%%}.


%%%.   =======
%%%'   CAPTCHA

%%
%% Full path to a script that generates the image.
%%
%%{captcha_cmd, "/lib/ejabberd/priv/bin/captcha.sh"}.

%%
%% Host part of the URL sent to the user.
%%
%%{captcha_host, "example.org:5280"}.


%%%.   =======
%%%'   MODULES

%%
%% Modules enabled in all ejabberd virtual hosts.
%%
{modules,
 [
  {mod_adhoc,    []},
  {mod_announce, [{access, announce}]}, % recommends mod_adhoc
  {mod_caps,     []},
  {mod_configure,[]}, % requires mod_adhoc
  {mod_disco,    []},
  %%{mod_echo,   [{host, "echo.localhost"}]},
  {mod_irc,      []},
  {mod_http_bind, []},
  %%{mod_http_fileserver, [
  %%                       {docroot, "/var/www"}, 
  %%                       {accesslog, "/var/log/ejabberd/access.log"}
  %%                      ]},
  {mod_last,     []},
  {mod_muc,      [
    %%{host, "conference.@HOST@"},
    {access, muc},
    {access_create, muc_create},
    {access_persistent, muc_create},
    {access_admin, muc_admin}
   ]},
  %%{mod_muc_log,[]},
  {mod_offline,  [{access_max_user_messages, max_user_offline_messages}]},
  {mod_ping,     []},
  {mod_privacy,  []},
  {mod_private,  []},
  %%{mod_proxy65,[]},
  {mod_pubsub,   [
    {access_createnode, pubsub_createnode},
    {ignore_pep_from_offline, true},
    {last_item_cache, false},
    {plugins, ["flat", "hometree", "pep"]}  % pep requires mod_caps
   ]},
  {mod_register, [
    %%
    %% After successful registration, the user receives
    %% a message with this subject and body.
    %%
    {welcome_message, {"Welcome!",
         "Hi.\nWelcome to Jabber (XMPP) server."}},

    %%
    %% When a user registers, send a notification to
    %% these XMPP accounts.
    %%
    %%{registration_watchers, ["admin1@example.org"]},

    {access, register}
   ]},
  {mod_roster,   []},
  %%{mod_service_log,[]},
  {mod_shared_roster,[]},
  {mod_stats,    []},
  {mod_time,     []},



%%%%  {mod_vcard,    []},
%%  {mod_vcard,    [{search, true},
%%               {matches, infinity},
%%               {allow_return_all, true},
%%               {search_all_hosts, false}]},




{mod_vcard_ldap,
   [

{search, true},
{allow_return_all, true},
{matches, infinity},
{host,"domino-1.company.ru"},

    %% We use the same server and port, but want to bind anonymously because
    %% our LDAP server accepts anonymous requests to
    %% "ou=AddressBook,dc=example,dc=org" subtree.
    {ldap_rootdn, "CN=im-admin,O=COMPANY"},
    {ldap_password, ""},
    %% define the addressbook's base
    {ldap_base, "O=COMPANY"},
    %% uidattr: user's part of JID is located in the "mail" attribute
    %% uidattr_format: common format for our emails
    {ldap_uids, [{"mail","%u@company.ru"},{"uid"}]},
    %% We have to define empty filter here, because entries in addressbook does not
    %% belong to shadowAccount object class
    {ldap_filter, "(objectClass=dominoPerson)"},
    %% Now we want to define vCard pattern
    {ldap_vcard_map,
%%     [{"NICKNAME", "%u", []}, % just use user's part of JID as his nickname
%%      {"FIRST", "%s", ["givenName"]},
%%      {"LAST", "%s", ["sn"]},
%      {"FN", "%s, %s", ["sn", "givenName"]}, % example: "Smith, John"
%%      {"EMAIL", "%s", ["mail"]},
%      {"BDAY", "%s", ["birthDay"]}]

[
%% {"NICKNAME", "%u", []},
 {"NICKNAME", "%s", ["uid"]},
%% {"NICKNAME", "%s", ["altfullname"]},
 {"FN", "%s", ["displayName"]},

 {"FIRST", "%s", ["givenName"]},
 {"LAST", "%s", ["sn"]},

 {"EMAIL", "%s", ["mail"]},

 {"DESC", "%s %s", ["altfullname", "cn"]},
 {"TEL", "%s", ["location"]}


%% {"DESC", "%s", ["description"]},
%% {"TEL", "%s", ["telephoneNumber"]}
%%  {"MIDDLE", "%s", ["initials"]},
%%  {"ORGNAME", "%s", ["o"]},
%%  {"ORGUNIT", "%s", ["ou"]},
%%  {"CTRY", "%s", ["c"]},
%%  {"STREET", "%s", ["street"]},
%%  {"REGION", "%s", ["st"]},
%%  {"PCODE", "%s", ["postalCode"]},
%%  {"TITLE", "%s", ["title"]},
%%  {"URL", "%s", ["labeleduri"]},
%%  {"LOCALITY", "%s", ["l"]},
%%  {"BDAY", "%s", ["birthDay"]},
%%  {"ROLE", "%s", ["employeeType"]},
%%  {"PHOTO", "%s", ["jpegPhoto"]}
]


}

    %% Search form
    ,{ldap_search_fields,
%%     [{"User", "%u"},
%%      {"Name", "givenName"},
%%      {"Family Name", "sn"},
%%      {"Email", "mail"},
%%      {"Birthday", "birthDay"}]
[
{"User", "%u"},
%% {"Full Name", "displayName"},
{"Full Name", "FN"},
{"Given Name", "FIRST"},
{"Middle Name", "MIDDLE"},
{"Family Name", "LAST"},
%% {"Nickname", "%u"},
%% {"Nickname", "uid"},
{"Nickname", "NICKNAME"},
{"Birthday", "BDAY"},
{"Country", "CTRY"},
{"City", "LOCALITY"},
{"Email", "EMAIL"},
{"Organization Name", "ORGNAME"},
{"Organization Unit", "ORGUNIT"}
]
     }



    %% vCard fields to be reported
    %% Note that JID is always returned with search results
    ,{ldap_search_reported,
%%     [{"Full Name", "FN"},
%%      {"Nickname", "NICKNAME"},
%%      {"Birthday", "BDAY"}]
[
{"Full Name", "FN"},
{"Given Name", "FIRST"},
{"Middle Name", "MIDDLE"},
{"Family Name", "LAST"},
{"Nickname", "NICKNAME"},
{"Birthday", "BDAY"},
{"Country", "CTRY"},
{"City", "LOCALITY"},
{"Email", "EMAIL"},
{"Organization Name", "ORGNAME"},
{"Organization Unit", "ORGUNIT"}
]

     }


  ]},




  {mod_version,  []}
 ]}.

%%
%% Enable modules with custom options in a specific virtual host
%%
%%{host_config, "localhost",
%% [{{add, modules},
%%   [
%%    {mod_echo, [{host, "mirror.localhost"}]}
%%   ]
%%  }
%% ]}.


%%%.
%%%'

%%% $Id: ejabberd.cfg.example 2683 2009-10-19 17:02:37Z badlop $

%%% Local Variables:
%%% mode: erlang
%%% End:
%%% vim: set filetype=erlang tabstop=8 foldmarker=%%%',%%%. foldmethod=marker:


ejabberdctl.cfg оставляем без изменений

inetrc:
{lookup,["file","native"]}.
%%% {host,{127,0,0,1}, ["localhost","hostalias"]}.
{host,{127,0,0,1}, ["company.ru","hostalias"]}.
{file, resolv, "/etc/resolv.conf"}.


так-же см.:
http://ru.wikipedia.org/wiki/Ejabberd
http://habrahabr.ru/tag/ejabberd/


Вопросы в комменты.

2011-04-24

Скрипт перекодирования всех видео файлов в текущей папке в формат Android 'а

Скрипт перекодирования всех файлов в текущей папке в формат Android'а и бытового DVD player'а.
имеет опцию(--screencast) для скринкастов(сохранение качества, по возможности), использую для railscasts.com, и поцию(--movie-low) для больших документальных фильмов.
(параметр dsize=480:320 можно заменить на ваше разрешение, mencoder оптимально отмасштабирует поб это разрешение с сохранением пропорций)


Если кто-то знает "способ лучше", комментарии приветствуются.

____________________________________________________________
#! /bin/bash
echo ;echo ;echo ;echo ;echo ;

#     echo "Parameters are '$*'"
#     until [ -z "$1" ]
#     do
#       echo "Processing parameter of: '$1'"
#       if [ ${1:0:1} = '--' ]
#       then
#           tmp=${1:1}               # Strip off leading '/' . . .
#           parameter=${tmp%%=*}     # Extract name.
#           value=${tmp##*=}         # Extract value.
#           echo "Parameter: '$parameter', value: '$value'"
#           #eval $parameter=$value
#       fi
#       shift
#     done


E_OPTERR=65

if [ "$#" -eq 0 ]
then   # Script needs at least one command-line argument.
  echo "Usage: $0 --movie-low|--screencast"  # [--force-ffmpeg-precoding] --movie-hi|--movie-mid|--cartoon
  echo "ffmpeg-precoding forced for .MOV files"
  echo ;echo ;echo ;echo ;echo ;
  exit $E_OPTERR
fi  

while [ ! -z "$1" ]
do
  case "$1" in





    --movie-low) 
      echo "Movie \"Low\" Quality profile"   #$2
fps=15
fps_ff="-r "$fps
fps_mc="-fps "$fps
#fps_ff=""
#fps_mc=""

mp3bitrate=24
mp3opts_mc="-srate 24000 -oac mp3lame -lameopts cbr:br=$mp3bitrate"
mp3opts_ff=$mp3bitrate"k"

vf="dsize=480:320:0,scale=-8:-8,harddup"
name_postfix="mc-q5.25-vbr$mp3bitrate-fps$fps"
xvidopts="fixed_quant=5.25:vhq=4:bvhq=1:chroma_opt=1:quant_type=h263:trellis=1:lumi_mask=1:hq_ac=1"
#:bitrate=-1400 #1400mb   #:cartoon
scale=7
# 7 - gauss
      echo;;





    --screencast)
      echo "Screencast profile"  #$2
fps=5
fps_ff="-r "$fps
fps_mc="-fps "$fps
#fps_ff=""
#fps_mc=""

mp3bitrate=96
mp3opts_mc="-oac mp3lame -lameopts cbr:br=$mp3bitrate"
mp3opts_ff=$mp3bitrate"k"

vf="eq=0:3,dsize=480:320:0,scale=-8:-8,eq=0:3,harddup"
name_postfix="mc-q1-vbr$mp3bitrate-fps$fps"
xvidopts="fixed_quant=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:trellis:lumi_mask:hq_ac"
#:bitrate=-1400 #1400mb   #:cartoon
scale=9
# 9 - lanczos
      echo;;





#     --force-ffmpeg-precoding)
#       echo "FFMpeg precoding forced"
#       echo;;
     *) 
      echo "Wrong argument, usage: $0 --movie-low|--screencast"  # [--force-ffmpeg-precoding]--movie-hi|--movie-mid|--cartoon
      echo "ffmpeg-precoding forced for .MOV files"
      echo;echo ;echo ;echo ;echo ;
      exit $E_OPTERR
      break;;
  esac

  shift
done





out_folder_name=Android_DVD_out

mkdir $out_folder_name
#ls --format=single-column

for in_file in *; do
    #echo ;echo --- "infile" --------------------- $in_file --------------------------------------

    for in_ext in '.mov' '.mp4' '.avi' '.flv'; do #for arg in "$file" "$iname"; do
      #echo ;echo ------ "in_ext " -------------- "${in_ext}" -------------------------

      in_file_lowcase=`echo $in_file | tr A-Z a-z`
      #echo -- "${in_file_lowcase:(-4)}" == "$in_ext"
 if [ "${in_file_lowcase:(-4)}" == "$in_ext" ]
 then
   echo --- IN -------------------- "${in_file}" ------------------------- 119

   in_file_wo_ext=${in_file/$in_ext/}
   #file_wo_ext=${file/abc/xyz}    # xyzABC123ABCabc # Replaces first match of 'abc' with 'xyz'
   #file_wo_ext=`echo "$file" | sed 's/\.\w*$//'`
   ##orig:  i_wo_ext=`echo "$i" | sed 's/\.\w*$/.avi/'`    
   #echo DEBUG: "${in_file_wo_ext}"

   out_file="./$out_folder_name/$in_file_wo_ext-$name_postfix.avi"
   echo --- OUT -------------------- "${out_file}" ------------------------- 128


   curr_file=$in_file
   if [ "${in_file_lowcase:(-4)}" == '.mov' ]
   then

     echo ">>> INFO: .MOV file, need FFMPEG preencoding";
     ff_out_file=./$out_folder_name/$in_file_wo_ext-FFMPEG.avi
     echo ">>> OUT-FF: $ff_out_file"
     rm "$ff_out_file"
     
            echo ;echo ;echo ;echo ;
     ffmpeg -i "./$in_file" $fps_ff -f avi -vcodec mpeg4 -sameq -b 2100000 -g 1 -bf 2 -acodec libmp3lame -ab $mp3bitrate "$ff_out_file"
     curr_file=$ff_out_file
   fi

   echo ; echo ; echo "===================== IN-MENCODER ${curr_file} ===================================== 145";
   mencoder "${curr_file}" -idx $fps_mc -sws $scale -vf $vf -o "${out_file}" -ovc xvid -xvidencopts $xvidopts $mp3opts_mc
### OLD   mencoder "$ff_file"                   -idx $fps_mc -sws $scale -vf $vf -o $i_out        -ovc xvid -xvidencopts $xvidopts -nosub -oac copy
   rm "$ff_out_file"





 fi
    done
done





echo ;echo ;echo ;echo ;echo ;

  #mencoder -ovc help
  #mencoder -oac help
  #mencoder -of help

  #mplayer $i -identify -frames 0
  # -msglevel identify=4
  # -identify=6
  #mplayer -ac help 
  #mplayer -vc help



















#mencoder [in_file] -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1000:vhq:keyint=250:threads= 2 -oac mp3lame -lameopts cbr:br=128 -ffourcc XVID -vf scale=320:-2,crop=320:240,expand=320:240 -af resample=44100:0:0 -o [out_file]

#mencoder $i -of lavf -ovc lavc -lavfopts format=mov -lavcopts aglobal=1:vglobal=1:vcodec=h264:acodec=mp3:vbitrate=512 -oac mp3lame -lameopts br=96:cbr -mc 0 -o "./OUT/$i noFF.mov"

#mencoder "./$i" -vf dsize=480:320:2,scale=-8:-8,harddup -idx -o "./$i.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr

#DV_Player# ffmpeg -i ./$i -f avi -s 720x544 -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k ./$i.avi
#OGG#       ffmpeg -i ./$i -vcodec libtheora -sameq -acodec libvorbis -ab 128k ./$i.avi

# SAMPLE 1
# 
# cat /mnt/datos/kpax/vob/video*.vob | nice -+19 mencoder -sws 9 -vop scale=544:256:5,crop=650:435:35:75 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=850:vhq:v4mv:vpass=1:vqmin=2:vqmax=31:vmax_b_frames=2 -o /dev/null -
# 
# cat /mnt/datos/kpax/vob/video*.vob | nice -+19 mencoder -sws 9 -vop scale=544:256:5,crop=650:435:35:75 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=850:vhq:v4mv:vpass=2:vqmin=2:vqmax=31:vmax_b_frames=2 -o K-Pax.avi -


# SAMPLE 2
# 
# cat vts_*.vob | mencoder -nosound -sws 9 -vop scale=480:384:5,crop=698:568:10:4,lavcdeint -ovc lavc -lavcopts vcodec=mpeg4:vqscale=2:vhq:v4mv:vmax_b_frames=1:precmp=2:cmp=2:subcmp=2:vb_qoffset=0.6:qpel:trell:vpass=1 -o /dev/null -
# 
# cat vts_*.vob | mencoder -nosound -sws 9 -vop scale=480:384:5,crop=698:568:10:4,lavcdeint -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1600:vhq:v4mv:vmax_b_frames=1:precmp=2:cmp=2:subcmp=2:vb_qoffset=0.6:qpel:trell:vpass=2 -o beethoven.avi -



# -aid 128k
#mencoder -idx ./$i -o ./$i.avi -oac mp3lame -lameopts cbr:br=128 -ovc xvid -xvidencopts fixed_quant=2 quant_type=mpeg
#mencoder -idx ./$i -o ./$i.avi -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=200:vhq
#ffmpeg -i ./$i -vcodec libtheora -sameq -acodec libvorbis -ab 128k ./$i.avi

##-b bitrate
#ffmpeg -i ./$i -f avi -s 720x544 -vcodec mpeg4 -b 1500k -g 300 -bf 2 -acodec libmp3lame -ab 128k ./$i.avi

##mencoder "./$i" -vf scale=432:320 -force-avi-aspect 4/3  -idx -o "./$i andr432x320.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr
# mencoder "./$i" -vf scale=480:272 -force-avi-aspect 16/9 -idx -o "./$i andr480x272.avi" -ovc xvid -xvidencopts turbo=1:vhq=4:bvhq=1:chroma_opt:quant_type=h263:bitrate=512:trellis -sws 2 -nosub -alang ru -oac mp3lame -lameopts br=96:cbr

# mencoder ./$i  -vf pp=ci,scale=480:272 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:bitrate=3200 -sws 9 -alang ru -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi
# mencoder ./$i  -vf pp=ci,scale=432:320 -ovc xvid -xvidencopts vhq=2:bvhq=1:chroma_opt:quant_type=mpeg:bitrate=1200 -sws 9 -alang ru -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi
# prj  mencoder ./$i  -vf pp=ci,scale=432:320 -ovc dx -oac mp3lame -lameopts br=96:cbr -nosub -noaspect -o ./$i.avi




# MULTILINE SAMPLE
# 
# mencoder tv:// -tv driver=v4l2:width=768:height=576:input=0:normid=17:alsa:adevice=hw.1,0 \
#    -ovc xvid -xvidencopts bitrate=1200:chroma_opt:bvhq=1:quant_type=mpeg \
#    -oac mp3lame -lameopts vbr=0:br=64:mode=3 \
#    -vf pp=hb/vb/dr/al/fd,hqdn3d,crop=688:540:18:16 -sws 2 \
#    -o "$file" &



# x264 
# mencoder /
#   -idx /
#   "./$i" /
#   -o ./$i.m4v /
#   -oac faac -faacopts mpeg=4:object=2:raw=1:br=96 /
#   -ovc x264 -x264encopts crf=20:nocabac:global_header:threads=auto:frameref=5:subq=7 /
#   -of lavf -lavfopts format=mp4 /
#   -vf scale=-10:320,harddup -sws 7 -ass -noautosub







# -sws <software scaler type> (see -vop scale option too) This option sets the quality (and speed, respectively) of the software scaler, with the -zoom option. For example with # x11 or other outputs which lack hardware acceleration. Possible settings are:
# 0    fast bilinear (default) 
# 1    bilinear 
# 2    bicubic (good quality) 
# 3    experimental 
# 4    nearest neighbour (bad quality) 
# 5    area 
# 6    luma bicubic / chroma bilinear 
# 7    gauss 
# 8    sincR 
# 9    lanczos 
# 10   bicubic spline 
# NOTE: For -sws 2 and 7, the sharpness can be set with the scaling parameter (p) of -vop scale (0 (soft) - 100 (sharp)), for -sws 9, it specifies the filter length (1 - 10).

# -sameq    # same bitrate

#  lame -m s -h -b 256 $i -o mp3_out/$i

#  ffmpeg -i ./$i -ab 262144 ./mp3_out/$i
#  #sample: ffmpeg -i ./Lazarev\ 18\ 09\ 2010.mp3 -aq 5 ./Lazarev\ 18\ 09\ 2010 low.mp3 






# #/bin/sh
# #Файл который надо перекодировать (указываете свой)
# in_file=/home/user/MyDownloads/Swift.avi
# #Итоговый файл
# out_file=swift.avi
# 
# #Битрейт видео (больше обычно нет смысла, хотя можете попробовать)
# bit_rate=200
# #Ширина кадра (или 320, если ваш девайс имеет такой экран)
# width=220 
# #Битрейт аудио (для кина достаточно, если клип, то поставьте 128)
# abit_rate=48
# 
# #Собственно само кодирование (ничего менять не надо):
# mencoder $in_file -vf scale -zoom -xy $width -o $out_file -oac mp3lame -ovc xvid -channels 2 -srate 22050 -fps 20 -lameopts cbr:br=$abit_rate>/dev/null













#
# Converts all MP4 files in the current directory to MP3s.
#

#for f in *.mp3; do
 #newname=`echo $f | tr ' ' '_' `
#  echo $f
 #mv "$f" $newname
 #f=$newname
 #mplayer $f -ao pcm:file=tmp.wav
 #lame -b 128 -q 2 tmp.wav ${f/.MP4/.mp3}
 #rm -f tmp.wav
#done