При обычном подключении через NM интернета от билайна не дождёшься. Метод проверен на модемах usb huawei 170 b 150, 170 билайна и 150 от мтс разблокированный. Нужно изменить точку доступа в NM с internet.beeline.ru на home.beeline.ru и прописывании PIN с карты.
Данный блог не преднaзначен для читателей, просто мне надоело синхронизировать закладки в браузере:-)
среда, 21 декабря 2011 г.
понедельник, 19 декабря 2011 г.
Настройка тачпада - скролл двумя пальцами
Создаём файл со следующим содержанием:
#!/bin/bash
synclient VertTwoFingerScroll=1
synclient HorizTwoFingerScroll=1
synclient EmulateTwoFingerMinW=5
synclient EmulateTwoFingerMinZ=48
exit 0
И ставим его на автозагрузку.
#!/bin/bash
synclient VertTwoFingerScroll=1
synclient HorizTwoFingerScroll=1
synclient EmulateTwoFingerMinW=5
synclient EmulateTwoFingerMinZ=48
exit 0
И ставим его на автозагрузку.
понедельник, 3 октября 2011 г.
Оптимизация через fstab
Итак, открываем файл /etc/fstab, в котором содержатся сведения о монтируемых при загрузке разделах. Ну и добавляем опции монтирования на выбор, в зависимости от того, что нужно получить в итоге… Опции зависят от файловой системы:
- user_xattr – расширенные атрибуты файлов (используются для индексирования)
- barrier – команда очистки кэша
- noatime и nodiratime – отключение записи времени последнего доступа (для файлов/директорий)
- allocsize – размер заранее резервируемой области на диске. Высокое значение помогает избежать фрагментации
- biosize – размер I/O-блоков по умолчанию
- logbufs – количество встроенных буферов для ведения журнала
- logbsize – размер буфера
- notail - не упаковывать хвосты больших файлов – улучшает производительность – увеличивает используемое для хранения место(~5%) (для применения этой опции надо перезаписать находящиеся на ней файлы!)
tmpfs - виртуальная файловая система, или RAM-диск, находящийся в оперативной памяти машины. Конечно, создавать этот диск имеет смысл только при наличии достаточного объёма оперативной памяти (не менее 1,5 Гб). В моём конфиге в оперативную память вынесены временные файлы, на диск размером 128 Мб. Этот параметр можно изменять как угодно, рекомендуется не превышать величину 25% от объёма оперативной памяти.
Пример: tmpfs /tmp tmpfs defaults,size=128m 0 0
ReiserFS: acl,user_xattr,noatime,nodiratime,notail,barrier=flushОбозначает все это следующие функции:
Ext3/Ext4: acl,user_xattr,noatime,nodiratime,barrier=1
XFS:defaults,noatime,nodiratime,logbufs=8,logbsize=32k,biosize=16,allocsize=512m,barrier
- user_xattr – расширенные атрибуты файлов (используются для индексирования)
- barrier – команда очистки кэша
- noatime и nodiratime – отключение записи времени последнего доступа (для файлов/директорий)
- allocsize – размер заранее резервируемой области на диске. Высокое значение помогает избежать фрагментации
- biosize – размер I/O-блоков по умолчанию
- logbufs – количество встроенных буферов для ведения журнала
- logbsize – размер буфера
- notail - не упаковывать хвосты больших файлов – улучшает производительность – увеличивает используемое для хранения место(~5%) (для применения этой опции надо перезаписать находящиеся на ней файлы!)
tmpfs - виртуальная файловая система, или RAM-диск, находящийся в оперативной памяти машины. Конечно, создавать этот диск имеет смысл только при наличии достаточного объёма оперативной памяти (не менее 1,5 Гб). В моём конфиге в оперативную память вынесены временные файлы, на диск размером 128 Мб. Этот параметр можно изменять как угодно, рекомендуется не превышать величину 25% от объёма оперативной памяти.
Пример: tmpfs /tmp tmpfs defaults,size=128m 0 0
Костыль для banshee (теги в CP1251)
#!/bin/sh
grep ru_RU.CP1251 /var/lib/locales/supported.d/local >/dev/null
if [ $? -ne 0 ]; then
echo "ru_RU.CP1251 CP1251" | sudo tee -a /var/lib/locales/supported.d/local
fi
grep ru_RU.CP1251 /var/lib/locales/supported.d/ru >/dev/null
if [ $? -ne 0 ]; then
echo "ru_RU.CP1251 CP1251" | sudo tee -a /var/lib/locales/supported.d/ru
fi
sudo locale-gen
sudo mv /usr/bin/banshee /usr/bin/banshee_
echo "#!/bin/sh" | sudo tee
/usr/bin/banshee
echo "sh -c 'LC_ALL=ru_RU.CP1251 banshee_'" | sudo tee -a /usr/bin/banshee
echo "exit 0" | sudo tee -a /usr/bin/banshee
sudo chmod +x /usr/bin/banshee
rm -r ~/.config/banshee-1/
exit 0
Обратите внимание что будит удалена пользовательская библиотека
!!!
При создании новой, проблем с отображение тегов в Cp1251 не будит
.
четверг, 29 сентября 2011 г.
Перемещение и изменение размеров окна программы
Перемещение и изменение размеров окна при помощи программы wmctrl.
sudo apt-get install wmctrl
Извлечь текущие размеры запущенных приложений:
wmctrl -Gl
Пример работы на основе калькулятора SpeedCrunch:
wmctrl -i -r `wmctrl -l | grep 'SpeedCrunch' | awk '{print $1}'` -e 0,0,0,500,500
После параметра -e передаем следующие обязательные параметры:
— e <G>,<X>,<Y>,<W>,<H>
G - Gravity
X,Y - координаты окна
w,H - размеры окна
sudo apt-get install wmctrl
Извлечь текущие размеры запущенных приложений:
wmctrl -Gl
Пример работы на основе калькулятора SpeedCrunch:
wmctrl -i -r `wmctrl -l | grep 'SpeedCrunch' | awk '{print $1}'` -e 0,0,0,500,500
После параметра -e передаем следующие обязательные параметры:
— e <G>,<X>,<Y>,<W>,<H>
G - Gravity
X,Y - координаты окна
w,H - размеры окна
среда, 21 сентября 2011 г.
Автоматическое обнаружение прокси-сервера (WPAD)
Есть два способа сообщить информацию о локальном прокси-сервере: через DHCP и через DNS. По соображениям максимальной совместимости, предпочтительно использовать DNS.
Для этого необходимо занести запись, указывающую на домен "wpad" с работающим web-сервером. В корень web-сервера необходимо поместить файл с именем "wpad.dat". Этот файл представляет собой JavaScript, содержащий функцию "FindProxyForURL". Этот файл будет автоматически затребован и выполнен web-браузерами на всех компьютерах локальной сети. Содержание файла может быть примерно следующим:
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) ||
dnsDomainIs(host, "my.local.network.domain.org") ||
(host=="127.0.0.1") )
return "DIRECT";
else
return "PROXY my.proxy.server.address:8080";
}
Из примера понятно, что браузер попробует определить к какому адресу пытается подключиться, в случае локальной сети использует настройки без прокси, иначе будет задействован прокси my.proxy.server.address:8080.
Для этого необходимо занести запись, указывающую на домен "wpad" с работающим web-сервером. В корень web-сервера необходимо поместить файл с именем "wpad.dat". Этот файл представляет собой JavaScript, содержащий функцию "FindProxyForURL". Этот файл будет автоматически затребован и выполнен web-браузерами на всех компьютерах локальной сети. Содержание файла может быть примерно следующим:
function FindProxyForURL(url, host)
{
if (isPlainHostName(host) ||
dnsDomainIs(host, "my.local.network.domain.org") ||
(host=="127.0.0.1") )
return "DIRECT";
else
return "PROXY my.proxy.server.address:8080";
}
Из примера понятно, что браузер попробует определить к какому адресу пытается подключиться, в случае локальной сети использует настройки без прокси, иначе будет задействован прокси my.proxy.server.address:8080.
Удаление pulse audio и настройка OSS4
Удалим pulseaudio.
1.Запускаем терминал. Меню — Стандартные — Терминал
sudo killall pulseaudio
cp /etc/X11/Xsession.d/70pulseaudio ~/
sudo apt-get purge pulseaudio
sudo apt-get remove gstreamer0.10-pulseaudio
sudo reboot
Настройка gnome-sound-properties.
1. Идём по ссылке
http://www.4front-tech.com/forum/viewtopic.php?f=3&t=3324 и качаем архив
soundproperties.tar.gz, так же можно воспользоваться прямой ссылкой
http://www.4front-tech.com/forum/download/file.php?id=1
2.Разархивируем soundproperties.tar.gz в домашнюю директорию.
tar xzf soundproperties.tar.gz
3.Далее, в зависимости от того, какая у вас установлена Ubuntu i386 или
amd64, Переходим соответственно в папку 32-bit-x86 или 64-bit-amd64.
cd 32-bit-x86
или
cd 64-bit-amd64
4. Копируем gnome-sound-properties в /usr/bin/
sudo cp gnome-sound-properties /usr/bin/
5.Выходим в каталог выше
cd ..
6.Создаём папку glade в /usr/share/gnome-control-center/.
sudo mkdir /usr/share/gnome-control-center/glade/
7.Копируем sound-proerties.glade в /usr/share/gnome-control-center/glade/
sudo cp sound-properties.glade /usr/share/gnome-control-center/glade/
8.Визуализация достигается запуском gnome-sound-properties с Терминала,
или же Меню — Система — Параметры — Звук.
Установка Open Sound System (OSS4)
1.Помещаем в Blacklist ALSA модули.
sudo dpkg-reconfigure linux-sound-base
далее выбираем курсором OSS, жмём Tab курсор перемещается на OK и после
этого нажимаем Enter для подтверждения.
2.Удаляем ALSA.
Удаляем все пакеты имя которых начинается с alsa. Это делается так.
Копируем или пишем ручками в Терминале sudo apt-get remove alsa и 2 раза
нажимаем Tab, должен появиться список установленых пакетов которые
начинаются с «alsa», после этого вписываем через пробел, наименование
этих пакетов и нажимаем Enter. Тоже самое следует проделать с пакетами
начинающийся на pulse.
После всех манипуляций следует перегрузиться.
3. Ставим рекомендуемые пакеты.
sudo apt-get install -y libesd0 libsdl1.2debian-oss
4.Ставим OSS4.
Идём на официальный сайт http://www.opensound.com/download.cgi . Качаем
подходящий нам по архитектуре пакет. Linux 2.6 (x86) (DEB) для Ubuntu
i386 или Linux 2.6 (amd64) (DEB) для Ubuntu amd64 и сохраняем в домашней
папке. После ставим этот пакет командой:
sudo dpkg -i oss-linux*.deb.
Так же, есть возможность установить OSS4 из исходников, вот ссылка
https://help.ubuntu.com/community/OpenSound (Building from Source).
5.Настраиваем GNOME/gstreamer.
sudo apt-get install -y gstreamer0.10-plugins-bad
Перезагружаемся.
Всё oss4 установлен и готов к работе. soundproperties.tar.gz,
32-bit-x86, 64-bit-amd64, sound-properties.glade и deb пакет OSS4 из
домашней директории можно удалить. Остаётся только,
настроить приложения на oss.
1.Запускаем терминал. Меню — Стандартные — Терминал
sudo killall pulseaudio
cp /etc/X11/Xsession.d/70pulseaudio ~/
sudo apt-get purge pulseaudio
sudo apt-get remove gstreamer0.10-pulseaudio
sudo reboot
Настройка gnome-sound-properties.
1. Идём по ссылке
http://www.4front-tech.com/forum/viewtopic.php?f=3&t=3324 и качаем архив
soundproperties.tar.gz, так же можно воспользоваться прямой ссылкой
http://www.4front-tech.com/forum/download/file.php?id=1
2.Разархивируем soundproperties.tar.gz в домашнюю директорию.
tar xzf soundproperties.tar.gz
3.Далее, в зависимости от того, какая у вас установлена Ubuntu i386 или
amd64, Переходим соответственно в папку 32-bit-x86 или 64-bit-amd64.
cd 32-bit-x86
или
cd 64-bit-amd64
4. Копируем gnome-sound-properties в /usr/bin/
sudo cp gnome-sound-properties /usr/bin/
5.Выходим в каталог выше
cd ..
6.Создаём папку glade в /usr/share/gnome-control-center/.
sudo mkdir /usr/share/gnome-control-center/glade/
7.Копируем sound-proerties.glade в /usr/share/gnome-control-center/glade/
sudo cp sound-properties.glade /usr/share/gnome-control-center/glade/
8.Визуализация достигается запуском gnome-sound-properties с Терминала,
или же Меню — Система — Параметры — Звук.
Установка Open Sound System (OSS4)
1.Помещаем в Blacklist ALSA модули.
sudo dpkg-reconfigure linux-sound-base
далее выбираем курсором OSS, жмём Tab курсор перемещается на OK и после
этого нажимаем Enter для подтверждения.
2.Удаляем ALSA.
Удаляем все пакеты имя которых начинается с alsa. Это делается так.
Копируем или пишем ручками в Терминале sudo apt-get remove alsa и 2 раза
нажимаем Tab, должен появиться список установленых пакетов которые
начинаются с «alsa», после этого вписываем через пробел, наименование
этих пакетов и нажимаем Enter. Тоже самое следует проделать с пакетами
начинающийся на pulse.
После всех манипуляций следует перегрузиться.
3. Ставим рекомендуемые пакеты.
sudo apt-get install -y libesd0 libsdl1.2debian-oss
4.Ставим OSS4.
Идём на официальный сайт http://www.opensound.com/download.cgi . Качаем
подходящий нам по архитектуре пакет. Linux 2.6 (x86) (DEB) для Ubuntu
i386 или Linux 2.6 (amd64) (DEB) для Ubuntu amd64 и сохраняем в домашней
папке. После ставим этот пакет командой:
sudo dpkg -i oss-linux*.deb.
Так же, есть возможность установить OSS4 из исходников, вот ссылка
https://help.ubuntu.com/community/OpenSound (Building from Source).
5.Настраиваем GNOME/gstreamer.
sudo apt-get install -y gstreamer0.10-plugins-bad
Перезагружаемся.
Всё oss4 установлен и готов к работе. soundproperties.tar.gz,
32-bit-x86, 64-bit-amd64, sound-properties.glade и deb пакет OSS4 из
домашней директории можно удалить. Остаётся только,
настроить приложения на oss.
вторник, 20 сентября 2011 г.
Транслирование и запись WEB камеры motion
Установка Motion
sudo aptitude install motion
Конфигурационные файлы Motion:
sudo nano /etc/motion/motion.conf
# Видеоустройство для захвата, в FreeBSD по умолчанию /dev/bktr0
videodevice /dev/video0
# Используемый вход для видео, может иметь два значения;
# по умолчанию используется 8 (для USB камер), для V4L устройств ставим 1
input 8
# Устанавливаем количество захватываемых кадров в секунду;
# здесь следует ввести число в диапазоне 2 – 100 (100 – по умолчанию)
# для PAL стандартным является 25
framerate 25
# И не менее важный параметр target_dir, в нем определяем каталог,
# куда будем складывать захваченные с видеокамеры файлы;
# в качестве имени можно использовать переменные,
# все они описаны в оригинальном файле
target_dir /var/lib/motion/snapshots/
# Имя файла для снимков и видео, в примере оставляем значение по умолчанию
# %Y = год, %m = месяц, %d = день, %H = час, %M = минута, %S = секунда
snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S
timelapse_filename %Y%m%d-timelapse
Вот, собственно, и все основные настройки. Если используется карта видеозахвата или TV тюнер, при помощи параметра norm указываем стандарт. По умолчанию используется 0, то есть PAL. Возможны значения 1 – NTSC, 2 – SECAM и 3 PAL NC. Для TV тюнера также указываем частоту. По умолчанию frequency = 0.
Чтобы Motion не переходил в режим демона и выводил отладочную информацию в консоль, используем флаг ‘–n’.
sudo motion –n
Использование веб-браузера
В состав Motion включен мини http-сервер, который позволяет просматривать в реальном времени картинку с камеры в окне браузера. Открываем motion.conf и ищем в самом низу секцию “Live Webcam Server”. При инсталляции с помощью пакетов значение параметра webcam_port установлено в 0, то есть http-сервер отключен. Чтобы он заработал, достаточно указать здесь любой свободный порт (традиционно 8081). Параметр webcam_localhost по умолчанию устанавливается в on, поэтому подключиться к http-серверу можно только с локального компьютера. Если планируется заходить по сети, укажи здесь off. Качество выводимых сервером jpeg изображений выставляется при помощи webcam_quality. Значение 50, скорее всего, трогать не придется. По дефолту картинка в браузере меняется только при обнаружении движения. Активировав webcam_motion, можно указать, чтобы картинка постоянно менялась с частотой 1 кадр, а при движении – с частотой, указанной в параметре webcam_maxrate. Значение последнего параметра по умолчанию установлено в 1, не стоит указывать его выше 4-5. И еще один параметр – webcam_limit, с его помощью указывается максимальное количество изображений за соединение. По умолчанию установлено значение 0, то есть без ограничений. При соединении с localhost и работе с одной камерой, наверное, трогать его и не нужно.
Теперь, если снова запустить Motion, в командной строке должно появиться сообщение: “Started stream webcam server in port 8081″. Набираем в браузере адрес своего компьютера, например http://localhost:8081, и смотрим, что показывает нам камера.
Настраиваем изображение и видео
Итак, файлы у нас уже есть, http-сервер работает, самое время заняться подстройкой. А тюнить в Motion есть что. Например, параметр rotate. Ты не ошибешься, если подумаешь, что с его помощью можно вращать полученное изображение. Поэтому если камеру удобнее закрепить в перевернутом виде, ничего страшного. Используемое по умолчанию 0 означает сохранение без вращения, возможны варианты 90, 180 и 270. При захвате устанавливается размер кадра, выдаваемый камерой, для его изменения редактируем параметры width и height. Если камера не поддерживает автоматическую регулировку яркости, ее можно установить вручную. За это отвечает сразу несколько параметров. Так отключенный по умолчанию auto_brightness разрешает Motion регулировать яркость. Ее величина берется из значения brightness, регулируемого в пределах 0-255. Если последнее установлено в 0, тогда auto_brightness установит среднее значение 128. Аналогично за регулировку контраста и насыщенности отвечают соответственно contrast и saturation. Качество изображения регулируется с помощью quality. Чтобы изменить формат файла с jpeg на ppm, параметр ppm устанавливаем в on.
По умолчанию при обнаружении движения образуется не только видеофайл, но и последовательность изображений. Параметром output_normal можно изменить такое поведение. Так при установке в first будет сохранено только первое изображение, best – лучшее, а отключить эту функцию можно, использовав off. Активация output_motion разрешит сохранять в снимке только пиксели, показывающие движущийся объект. Правда, пока я не нашел практического применения этому параметру, разве что для съемки продолжения “Охотники за привидениями”.
При установке пакета из репозитария Ubuntu в конфигурационном файле motion.conf функция записи захваченного видео отключена. Поэтому при необходимости измени значение ffmpeg_cap_new на on. Аналогично с output_motion, есть такой же параметр и для видео – ffmpeg_cap_motion, при активации которого в результирующий видеофайл будут сохранены пиксели, показывающие движущийся объект.
За качество результирующего видео отвечают два параметра: ffmpeg_bps или ffmpeg_variable_bitrate. При настройке следует использовать лишь один из них. Качество лучше подбирать экспериментальным путем, исходя из мощности системы и возможностей камеры. Кодек задается при помощи ffmpeg_video_codec, по умолчанию используется mpeg4, но при необходимости можно использовать: mpeg1, msmpeg4, swf, flv или ffv1.
В некоторых случаях полезной будет возможность периодической записи. Параметр ffmpeg_timelapse отвечает за период, в течение которого ведется запись информации в один видеофайл, затем будет создан новый. Возможные значения: daily (за день, по умолчанию), hourly, weekly-sunday, weekly-monday, monthly и manual. Например, чтобы запись на видео велась каждую секунду, устанавливаем “ffmpeg_timelapse 1″. Если во время захвата с аналоговой камеры при перемещении объектов появляются искажения, установи ffmpeg_deinterlace в on.
В файл, кроме собственно объекта, за которым следит камера, заносится и дополнительная информация, позволяющая определить время съемки. Эти данные настраиваются в секции Snapshots. Например, установка цифры в snapshot_interval позволит делать снимки с указанным периодом вне зависимости от обнаружения движения. Активация locate выделит на снимке движущийся объект. Текст, выводимый в левом и правом углах снимка, указывается соответственно в text_left и text_right. В настройках по умолчанию выводится дата и время, когда сделан снимок (формат strftime(3)). Если камер несколько, для удобства можно активировать text_left, где прописать что-то вроде “Camera 1″.
Настройка захвата
Секция “Motion Detection Settings”, расположенная в самом конце конфигурационного файла, отвечает за тонкую настройку обнаружения движущихся объектов. Если камера стоит в комнате, и тушка входящего перекрывает объектив, проблем с обнаружением обычно нет. Вмешательство потребуется в том случае, когда камера контролирует большую территорию, где объект имеет относительно маленький размер, и срабатывание может быть вызвано колыханием веток деревьев, проезжающими машинами и прочими помехами. На дешевых девайсах запись может начинаться из-за артефактов, вызванных искажениями самой камеры или поведением драйвера.
Например, threshold позволяет указать количество пикселей, которые должны измениться для срабатывания детектора, а minimum_motion_frames – количество кадров, в котором они зафиксированы. Подобрав эти значения, можно сделать так, что Motion не будет замечать пролетающую птицу, но без проблем реагировать на человека. Фильтры для сглаживания шума подключаются при помощи despeckle. По умолчанию используется оптимальное значение EedDl. При появлении проблем следует поэкспериментировать, убирая буквы в сочетании EedDl и пробуя их в разных комбинациях (подробнее о despeckle смотри на WiKi Motion и на emit.demon.co.uk/motion).
Параметры noise_level, noise_tune, night_compensate и lightswitch отвечают за уровень порога шума и компенсацию темных и светлых участков.
Комбинация параметров pre_capture, post_capture и gap позволяет записать законченную сцену, где будет снят контролируемый объект до и после того, как было обнаружено движение. Значение gap по умолчанию установлено в оптимальные 60 (секунд), если движение не будет обнаружено, то создается новый видеофайл, а старый удаляется. Чтобы захваченный файл не был большим, его продолжительность можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.
Параметров в motion.conf очень много, обо всех рассказать не получится. Но остался еще один, о котором следует знать. Например, поставил ты камеру в общежитии на кухне, где топчется много народу, но тебя интересуют лишь те, которые лазят в холодильник. Без проблем, делаем снимок камерой, создаем маску, в которой нужная область окрашена белым, а все остальное, что нас не интересует, черным. Сохраняем его в файле формата pgm и указываем путь при помощи mask_file.
sudo aptitude install motion
Конфигурационные файлы Motion:
sudo nano /etc/motion/motion.conf
# Видеоустройство для захвата, в FreeBSD по умолчанию /dev/bktr0
videodevice /dev/video0
# Используемый вход для видео, может иметь два значения;
# по умолчанию используется 8 (для USB камер), для V4L устройств ставим 1
input 8
# Устанавливаем количество захватываемых кадров в секунду;
# здесь следует ввести число в диапазоне 2 – 100 (100 – по умолчанию)
# для PAL стандартным является 25
framerate 25
# И не менее важный параметр target_dir, в нем определяем каталог,
# куда будем складывать захваченные с видеокамеры файлы;
# в качестве имени можно использовать переменные,
# все они описаны в оригинальном файле
target_dir /var/lib/motion/snapshots/
# Имя файла для снимков и видео, в примере оставляем значение по умолчанию
# %Y = год, %m = месяц, %d = день, %H = час, %M = минута, %S = секунда
snapshot_filename %v-%Y%m%d%H%M%S-snapshot
jpeg_filename %v-%Y%m%d%H%M%S-%q
movie_filename %v-%Y%m%d%H%M%S
timelapse_filename %Y%m%d-timelapse
Вот, собственно, и все основные настройки. Если используется карта видеозахвата или TV тюнер, при помощи параметра norm указываем стандарт. По умолчанию используется 0, то есть PAL. Возможны значения 1 – NTSC, 2 – SECAM и 3 PAL NC. Для TV тюнера также указываем частоту. По умолчанию frequency = 0.
Чтобы Motion не переходил в режим демона и выводил отладочную информацию в консоль, используем флаг ‘–n’.
sudo motion –n
Использование веб-браузера
В состав Motion включен мини http-сервер, который позволяет просматривать в реальном времени картинку с камеры в окне браузера. Открываем motion.conf и ищем в самом низу секцию “Live Webcam Server”. При инсталляции с помощью пакетов значение параметра webcam_port установлено в 0, то есть http-сервер отключен. Чтобы он заработал, достаточно указать здесь любой свободный порт (традиционно 8081). Параметр webcam_localhost по умолчанию устанавливается в on, поэтому подключиться к http-серверу можно только с локального компьютера. Если планируется заходить по сети, укажи здесь off. Качество выводимых сервером jpeg изображений выставляется при помощи webcam_quality. Значение 50, скорее всего, трогать не придется. По дефолту картинка в браузере меняется только при обнаружении движения. Активировав webcam_motion, можно указать, чтобы картинка постоянно менялась с частотой 1 кадр, а при движении – с частотой, указанной в параметре webcam_maxrate. Значение последнего параметра по умолчанию установлено в 1, не стоит указывать его выше 4-5. И еще один параметр – webcam_limit, с его помощью указывается максимальное количество изображений за соединение. По умолчанию установлено значение 0, то есть без ограничений. При соединении с localhost и работе с одной камерой, наверное, трогать его и не нужно.
Теперь, если снова запустить Motion, в командной строке должно появиться сообщение: “Started stream webcam server in port 8081″. Набираем в браузере адрес своего компьютера, например http://localhost:8081, и смотрим, что показывает нам камера.
Настраиваем изображение и видео
Итак, файлы у нас уже есть, http-сервер работает, самое время заняться подстройкой. А тюнить в Motion есть что. Например, параметр rotate. Ты не ошибешься, если подумаешь, что с его помощью можно вращать полученное изображение. Поэтому если камеру удобнее закрепить в перевернутом виде, ничего страшного. Используемое по умолчанию 0 означает сохранение без вращения, возможны варианты 90, 180 и 270. При захвате устанавливается размер кадра, выдаваемый камерой, для его изменения редактируем параметры width и height. Если камера не поддерживает автоматическую регулировку яркости, ее можно установить вручную. За это отвечает сразу несколько параметров. Так отключенный по умолчанию auto_brightness разрешает Motion регулировать яркость. Ее величина берется из значения brightness, регулируемого в пределах 0-255. Если последнее установлено в 0, тогда auto_brightness установит среднее значение 128. Аналогично за регулировку контраста и насыщенности отвечают соответственно contrast и saturation. Качество изображения регулируется с помощью quality. Чтобы изменить формат файла с jpeg на ppm, параметр ppm устанавливаем в on.
По умолчанию при обнаружении движения образуется не только видеофайл, но и последовательность изображений. Параметром output_normal можно изменить такое поведение. Так при установке в first будет сохранено только первое изображение, best – лучшее, а отключить эту функцию можно, использовав off. Активация output_motion разрешит сохранять в снимке только пиксели, показывающие движущийся объект. Правда, пока я не нашел практического применения этому параметру, разве что для съемки продолжения “Охотники за привидениями”.
При установке пакета из репозитария Ubuntu в конфигурационном файле motion.conf функция записи захваченного видео отключена. Поэтому при необходимости измени значение ffmpeg_cap_new на on. Аналогично с output_motion, есть такой же параметр и для видео – ffmpeg_cap_motion, при активации которого в результирующий видеофайл будут сохранены пиксели, показывающие движущийся объект.
За качество результирующего видео отвечают два параметра: ffmpeg_bps или ffmpeg_variable_bitrate. При настройке следует использовать лишь один из них. Качество лучше подбирать экспериментальным путем, исходя из мощности системы и возможностей камеры. Кодек задается при помощи ffmpeg_video_codec, по умолчанию используется mpeg4, но при необходимости можно использовать: mpeg1, msmpeg4, swf, flv или ffv1.
В некоторых случаях полезной будет возможность периодической записи. Параметр ffmpeg_timelapse отвечает за период, в течение которого ведется запись информации в один видеофайл, затем будет создан новый. Возможные значения: daily (за день, по умолчанию), hourly, weekly-sunday, weekly-monday, monthly и manual. Например, чтобы запись на видео велась каждую секунду, устанавливаем “ffmpeg_timelapse 1″. Если во время захвата с аналоговой камеры при перемещении объектов появляются искажения, установи ffmpeg_deinterlace в on.
В файл, кроме собственно объекта, за которым следит камера, заносится и дополнительная информация, позволяющая определить время съемки. Эти данные настраиваются в секции Snapshots. Например, установка цифры в snapshot_interval позволит делать снимки с указанным периодом вне зависимости от обнаружения движения. Активация locate выделит на снимке движущийся объект. Текст, выводимый в левом и правом углах снимка, указывается соответственно в text_left и text_right. В настройках по умолчанию выводится дата и время, когда сделан снимок (формат strftime(3)). Если камер несколько, для удобства можно активировать text_left, где прописать что-то вроде “Camera 1″.
Настройка захвата
Секция “Motion Detection Settings”, расположенная в самом конце конфигурационного файла, отвечает за тонкую настройку обнаружения движущихся объектов. Если камера стоит в комнате, и тушка входящего перекрывает объектив, проблем с обнаружением обычно нет. Вмешательство потребуется в том случае, когда камера контролирует большую территорию, где объект имеет относительно маленький размер, и срабатывание может быть вызвано колыханием веток деревьев, проезжающими машинами и прочими помехами. На дешевых девайсах запись может начинаться из-за артефактов, вызванных искажениями самой камеры или поведением драйвера.
Например, threshold позволяет указать количество пикселей, которые должны измениться для срабатывания детектора, а minimum_motion_frames – количество кадров, в котором они зафиксированы. Подобрав эти значения, можно сделать так, что Motion не будет замечать пролетающую птицу, но без проблем реагировать на человека. Фильтры для сглаживания шума подключаются при помощи despeckle. По умолчанию используется оптимальное значение EedDl. При появлении проблем следует поэкспериментировать, убирая буквы в сочетании EedDl и пробуя их в разных комбинациях (подробнее о despeckle смотри на WiKi Motion и на emit.demon.co.uk/motion).
Параметры noise_level, noise_tune, night_compensate и lightswitch отвечают за уровень порога шума и компенсацию темных и светлых участков.
Комбинация параметров pre_capture, post_capture и gap позволяет записать законченную сцену, где будет снят контролируемый объект до и после того, как было обнаружено движение. Значение gap по умолчанию установлено в оптимальные 60 (секунд), если движение не будет обнаружено, то создается новый видеофайл, а старый удаляется. Чтобы захваченный файл не был большим, его продолжительность можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.
Параметров в motion.conf очень много, обо всех рассказать не получится. Но остался еще один, о котором следует знать. Например, поставил ты камеру в общежитии на кухне, где топчется много народу, но тебя интересуют лишь те, которые лазят в холодильник. Без проблем, делаем снимок камерой, создаем маску, в которой нужная область окрашена белым, а все остальное, что нас не интересует, черным. Сохраняем его в файле формата pgm и указываем путь при помощи mask_file.
Отвязка программы от консоли
Команда призвана закрыть консоль откуда была вызвана программа, но без закрытия самой программы.
nohup команда 1>/dev/null 2>&1 &
nohup команда 1>/dev/null 2>&1 &
SSH
Подготовка ключей:
ssh-keygen #генерируем ключ
ssh-copy-id -i ~/.ssh/id_rsa.pub учётка@ip_адрес #копируем ключ клиенту
Туннелирование:
Есть два вида ssh проброса туннелей:
1.) Вы открываете на удаленной машине локальный порт
ssh root@удалённый_сервер -R 2222:ip_ПК:22
где 2222 на удаленной машине, а 22 локальный порт.
2.) На локальной машине открываем удаленный порт
ssh root@уалённый_сервер -L 2222:ip_ПК:22
где 2222 локальный порт, а 22 порт на удаленной машине.
Удаленный доступ к файлам:
sudo apt-get install sshfs #ставим нужный пакет
А далее присоединить необходимую папку:
sshfs name@server:/path/to/folder /path/to/mount/point
Защита от взлома SSH :
sudo apt-get install fail2ban
Суть этого демона заключается в облегчении жизни пользователя, а именно, он в фоновом режиме сканирует логи (/var/log/pwdfail или /var/log/apache/error_log и др.) на наличие записей вида “Failed password for invalid user condor” для таких служб как sshd, apache, vsftpd и др., и после нескольких неудачных попыток производит блокировку по IP адресу.
Количество попыток авторизации, время блокировки и многие другие настройки находятся в файле:
/etc/fail2ban/jail.conf
Настраивается все очень просто, работает отлично.
Оповещение при подключении по SSH:
При установке выполняется файл /etc/ssh/sshrc. Поэтому мы создадим скрипт и поместим команду для его запуска в этот файл:
/usr/local/alert/start.sh
unset SSH_CONNECTION
И добавил в /root/.bashrc код:
unset SSH_CONNECTION
/usr/local/alert/start.sh
Скрипт будет выводить сообщение с важной информацией через notify-osd.
#!/bin/sh
export DISPLAY=:0
notify-send "Security Warning" "Occured Login as user \"$USER\" $(echo $SSH_CONNECTION $SSH_TTY | sed 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/using SSH connection at \5 from \1:\2 to \3:\4/')" -u critical -i /usr/local/alert/icon.png
Первой строкой мы устанавливаем текущий дисплей для правильной работы notify-osd, а затем выводим сообщение с иконкой и пометкой критической важности, используя системные переменные $USER (текущий пользователь) и $SSH_CONNECTION (данные о соединении, которые мы преобразуем с помощью регулярных выражений чрезвычайно удобной утилитой sed).
Сюда же можно добавить и отправку сообщения на e-mail (sendmail) или jabber (sendxmpp).
Не забудьте также доставить нужные библиотеки, для Ubuntu это делается так:
sudo apt-get install libnotify-bin sox
Если есть ~/.ssh/rc, то выполнится он, а система работать не будет. Более того, для правильного выполнения эти скрипты ничего не должны выводить в stdout (на экран).
ssh-keygen #генерируем ключ
ssh-copy-id -i ~/.ssh/id_rsa.pub учётка@ip_адрес #копируем ключ клиенту
Туннелирование:
Есть два вида ssh проброса туннелей:
1.) Вы открываете на удаленной машине локальный порт
ssh root@удалённый_сервер -R 2222:ip_ПК:22
где 2222 на удаленной машине, а 22 локальный порт.
2.) На локальной машине открываем удаленный порт
ssh root@уалённый_сервер -L 2222:ip_ПК:22
где 2222 локальный порт, а 22 порт на удаленной машине.
Удаленный доступ к файлам:
sudo apt-get install sshfs #ставим нужный пакет
А далее присоединить необходимую папку:
sshfs name@server:/path/to/folder /path/to/mount/point
Защита от взлома SSH :
sudo apt-get install fail2ban
Суть этого демона заключается в облегчении жизни пользователя, а именно, он в фоновом режиме сканирует логи (/var/log/pwdfail или /var/log/apache/error_log и др.) на наличие записей вида “Failed password for invalid user condor” для таких служб как sshd, apache, vsftpd и др., и после нескольких неудачных попыток производит блокировку по IP адресу.
Количество попыток авторизации, время блокировки и многие другие настройки находятся в файле:
/etc/fail2ban/jail.conf
Настраивается все очень просто, работает отлично.
Оповещение при подключении по SSH:
При установке выполняется файл /etc/ssh/sshrc. Поэтому мы создадим скрипт и поместим команду для его запуска в этот файл:
/usr/local/alert/start.sh
unset SSH_CONNECTION
И добавил в /root/.bashrc код:
unset SSH_CONNECTION
/usr/local/alert/start.sh
Скрипт будет выводить сообщение с важной информацией через notify-osd.
#!/bin/sh
export DISPLAY=:0
notify-send "Security Warning" "Occured Login as user \"$USER\" $(echo $SSH_CONNECTION $SSH_TTY | sed 's/\(.*\) \(.*\) \(.*\) \(.*\) \(.*\)/using SSH connection at \5 from \1:\2 to \3:\4/')" -u critical -i /usr/local/alert/icon.png
Первой строкой мы устанавливаем текущий дисплей для правильной работы notify-osd, а затем выводим сообщение с иконкой и пометкой критической важности, используя системные переменные $USER (текущий пользователь) и $SSH_CONNECTION (данные о соединении, которые мы преобразуем с помощью регулярных выражений чрезвычайно удобной утилитой sed).
Сюда же можно добавить и отправку сообщения на e-mail (sendmail) или jabber (sendxmpp).
Не забудьте также доставить нужные библиотеки, для Ubuntu это делается так:
sudo apt-get install libnotify-bin sox
Если есть ~/.ssh/rc, то выполнится он, а система работать не будет. Более того, для правильного выполнения эти скрипты ничего не должны выводить в stdout (на экран).
воскресенье, 18 сентября 2011 г.
Сканер+принтер=копир
#! /bin/bash
file_time=`date +%d.%m.%y_%H.%M.%S` ; #создаем временную метку
scan_file="/tmp/tmp_${file_time}.ppm" ; #устанавливаем название файла скан-имиджа
scan_dir="~/scan_images" ; #назначаем целевую папку для хранения сканов
if `scanimage -n` &> /dev/null ; #проверяем наличие сканера
then
if [ ! -d ${scan_dir}] ; #смотрим есть ли папка scan_images в домашней папки
then
mkdir ${scan_dir} ; #если нет то создаём
fi
scanimage -v -p --mode Gray --resolution 200 > ${scan_file} ;
#скан в /tmp c разрешением 200 dpi, оттенки серого и дописываем временную метку для истории
if [ -f ${scan_file} ] ; #проверяем наличие в /tmp сканированого файла
then
convert ${scan_file} ${scan_dir}/${file_time}.jpg ;
# конвертируем ppm в jpg и сохраняем его в папке сканов
lpr -o landscape -o fit-to-page -o media=A4 ${scan_dir}/${file_time}.jpg
#отправляем jpg-файл на принтер по умолчанию
echo "ГОТОВО !!!" ;
else
exit 0 ; #выход из скрипта
fi
else #если сканера нет или с ним работает другая программа
echo "Сканер не подключен!" ;
fi
exit 0 ;
вторник, 23 августа 2011 г.
Влом wi-fi в GUI
1.) Ставим aircrack-ng
sudo apt-get install aircrack-ng
2.) Качем и ставим пакет feedingbottle
Всё, ломаем wi-fi в GUI.
sudo apt-get install aircrack-ng
2.) Качем и ставим пакет feedingbottle
Всё, ломаем wi-fi в GUI.
среда, 17 августа 2011 г.
1С 7.7 SQL + Win
Устанавливаем библиотеку DCOM:
winetricks dcom98
Копируем из Windows библиотеку MSVCRT40.DLL в директорию /home/usr/.wine/drive_c/windows/system/
Устанавливаем MFC42.DLL
winetricks MFC42.DLL
Устанавливаем шрифты:
winetricks corefonts
winetricks tahoma
winetricks lucida
Если каких-то шрифтов не будет хватать - их можно взять из установленной где-нибудь Windows.
Устанавливаем 1С 7.7, все должно пройти гладко.
Запускаем в 1С конфигуратор баз и убираем галочку из меню "Окна - Панель
Окон -
Показать". Это нужно сделать раз для каждой базы и для каждого вида запуска - будь то конфигуратор, предприятие и т.п.
Чтобы не было проблем с кодировкой - либо заходим в БД, меню "администрирование
- кодовая страница таблиц ИБ" и меняем на "Текущая системная установка" и ждем.....
Иногда это не совсем удобно, если БД используют машины с Windows, тогда создаем либо в директории с базой, либо в каталоге BIN 1C пустой файл OrdNoChk.prm
Локальная версия должна заработать. Но это нам не интересно, нужно в базу заходить по сети.
Качаем etercifts c сайта Etersoft (http://wiki.etersoft.ru/etercifs), он свободный и не требует оплаты. Устанавливаем (инструкции по нему - на етерсофте). После его установки потребуется перезагрузка.
Открываем fstab и добавляем строки для монтирования нужных сетевых ресурсов
//server1c/BaseBuh /home/usr/BaseBuh cifs rw,user,username=WORKGROUP имяпользователя,password=пароль,iocharset=utf8,noperm,forcemand,direct 0 0
Монтируем:
sudo mount /home/usr/BaseBuh
Теперь каталог с базой у нас смонтирован, и мы можем добавить базу.
Это же вновь не то, что хотелось, ведь база у нас на SQL-сервере.
winetricks mdac25
winetricks mdac28
winecfg: sqlsrv32.dll - сторонняя.
Проверяем:
wine regedit
"HKLM\Software\ODBC\ODBCINST.INI" - Должна быть папка с названием "SQL Server",
если нет - копируем из Windows и проверяем путь: строковый параметр - Driver.
Вуаля, заработала связка 1С+SQL.
Но могут быть проблемы с нахождением сервера, в этом случае заходим в конфигуратор - "Администирование" - Параметры базы данных SQL и адрес сервера меняем с имени на его IP-адрес.
1С мы запустили если нужно ставим OpenConf.
Качаем последний OpenConf (http://openconf.1cpp.ru/).
Перед установкой OpenConf, нужно поставить MS Visual Basic 6 runtime
(нужен для регистрации c:/Program Files/1Cv77/BIN/config/system/svcsvc.dll)
winetricks vb6run
Поставить IE, нужен для регистрации wsc компонентов:
winetricks ie6
Зарегистрировать все WSC компоненты из каталога c:/Program Files/1Cv77/BIN/config/system
wine regsvr32 /i:CommonServices.wsc C:/windows/system32/scrobj.dll ... и т.д. для всех файлов
Компонент OpenConf.RegistryIniFile.wsc надо регистрировать в последнюю очередь!
Осталась одна проблема с мертвым Enter-ом. В журнале документов либо в форме списка справочников он не работает!
Предлагаю воспользоваться FormEx.dll (последняя версия есть на http://www.dorex.ru/?download или можно найти на форуме http://1clinux.org/formex_t.zip )
Далее извлекаем файл "FormEx.dll", складываем в каталог C:\Program files\BIN\
Заходим в конфигуратор и:
1. в процедуру "ПриНачалеРаботыСистемы()" добавляем:
"
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll")=0 Тогда
Предупреждение("Не удается загрузить внешнюю компоненту
1C++!",10);
КонецЕсли;
"
2. создаём в глобальном модуле новую процедуру:
"
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКл, Алт, Шифт, Контрл,
Символ, ФСО)
//Сообщить (КодКл);
Если КодКл=13 Тогда
Service = СоздатьОбъект("Сервис");
Service.SendKeys("{TAB}");
//КодКл=9;
КонецЕсли;
КонецПроцедуры
"
Заметка про FormEx основана на http://1clinux.org/index.php?topic=188.0
Вот в принципе и все :) имеем полностью рабочую 1С, запущенную в свободном Wine.
PS. Когда пытался запустить игрушки баловался с winetricks (d3dx9,
directx9 и т.д.). И после этого панель окон стала нормально отображаться. 1С перестала
вызывать ошибку и нормально работает (либо это связано с обновлением wine,
которое было произведено незадолго до этого). В настройках Wine для 1С
убрана лишь галочка - "разрешить менеджеру окон декорировать окна".
winetricks dcom98
Копируем из Windows библиотеку MSVCRT40.DLL в директорию /home/usr/.wine/drive_c/windows/system/
Устанавливаем MFC42.DLL
winetricks MFC42.DLL
Устанавливаем шрифты:
winetricks corefonts
winetricks tahoma
winetricks lucida
Если каких-то шрифтов не будет хватать - их можно взять из установленной где-нибудь Windows.
Устанавливаем 1С 7.7, все должно пройти гладко.
Запускаем в 1С конфигуратор баз и убираем галочку из меню "Окна - Панель
Окон -
Показать". Это нужно сделать раз для каждой базы и для каждого вида запуска - будь то конфигуратор, предприятие и т.п.
Чтобы не было проблем с кодировкой - либо заходим в БД, меню "администрирование
- кодовая страница таблиц ИБ" и меняем на "Текущая системная установка" и ждем.....
Иногда это не совсем удобно, если БД используют машины с Windows, тогда создаем либо в директории с базой, либо в каталоге BIN 1C пустой файл OrdNoChk.prm
Локальная версия должна заработать. Но это нам не интересно, нужно в базу заходить по сети.
Качаем etercifts c сайта Etersoft (http://wiki.etersoft.ru/etercifs), он свободный и не требует оплаты. Устанавливаем (инструкции по нему - на етерсофте). После его установки потребуется перезагрузка.
Открываем fstab и добавляем строки для монтирования нужных сетевых ресурсов
//server1c/BaseBuh /home/usr/BaseBuh cifs rw,user,username=WORKGROUP имяпользователя,password=пароль,iocharset=utf8,noperm,forcemand,direct 0 0
Монтируем:
sudo mount /home/usr/BaseBuh
Теперь каталог с базой у нас смонтирован, и мы можем добавить базу.
Это же вновь не то, что хотелось, ведь база у нас на SQL-сервере.
winetricks mdac25
winetricks mdac28
winecfg: sqlsrv32.dll - сторонняя.
Проверяем:
wine regedit
"HKLM\Software\ODBC\ODBCINST.INI" - Должна быть папка с названием "SQL Server",
если нет - копируем из Windows и проверяем путь: строковый параметр - Driver.
Вуаля, заработала связка 1С+SQL.
Но могут быть проблемы с нахождением сервера, в этом случае заходим в конфигуратор - "Администирование" - Параметры базы данных SQL и адрес сервера меняем с имени на его IP-адрес.
1С мы запустили если нужно ставим OpenConf.
Качаем последний OpenConf (http://openconf.1cpp.ru/).
Перед установкой OpenConf, нужно поставить MS Visual Basic 6 runtime
(нужен для регистрации c:/Program Files/1Cv77/BIN/config/system/svcsvc.dll)
winetricks vb6run
Поставить IE, нужен для регистрации wsc компонентов:
winetricks ie6
Зарегистрировать все WSC компоненты из каталога c:/Program Files/1Cv77/BIN/config/system
wine regsvr32 /i:CommonServices.wsc C:/windows/system32/scrobj.dll ... и т.д. для всех файлов
Компонент OpenConf.RegistryIniFile.wsc надо регистрировать в последнюю очередь!
Осталась одна проблема с мертвым Enter-ом. В журнале документов либо в форме списка справочников он не работает!
Предлагаю воспользоваться FormEx.dll (последняя версия есть на http://www.dorex.ru/?download или можно найти на форуме http://1clinux.org/formex_t.zip )
Далее извлекаем файл "FormEx.dll", складываем в каталог C:\Program files\BIN\
Заходим в конфигуратор и:
1. в процедуру "ПриНачалеРаботыСистемы()" добавляем:
"
Если ЗагрузитьВнешнююКомпоненту("FormEx.dll")=0 Тогда
Предупреждение("Не удается загрузить внешнюю компоненту
1C++!",10);
КонецЕсли;
"
2. создаём в глобальном модуле новую процедуру:
"
Процедура ПриНажатииКнопкиКлавиатуры(Конт, КодКл, Алт, Шифт, Контрл,
Символ, ФСО)
//Сообщить (КодКл);
Если КодКл=13 Тогда
Service = СоздатьОбъект("Сервис");
Service.SendKeys("{TAB}");
//КодКл=9;
КонецЕсли;
КонецПроцедуры
"
Заметка про FormEx основана на http://1clinux.org/index.php?topic=188.0
Вот в принципе и все :) имеем полностью рабочую 1С, запущенную в свободном Wine.
PS. Когда пытался запустить игрушки баловался с winetricks (d3dx9,
directx9 и т.д.). И после этого панель окон стала нормально отображаться. 1С перестала
вызывать ошибку и нормально работает (либо это связано с обновлением wine,
которое было произведено незадолго до этого). В настройках Wine для 1С
убрана лишь галочка - "разрешить менеджеру окон декорировать окна".
воскресенье, 24 июля 2011 г.
суббота, 23 июля 2011 г.
broadcom bcm4311 на kernel 3.0 ubuntu
После установки kernel 3.0 перестала работать broadcom bcm4311.
Лечится очень просто:
1.) sudo apt-get install broadcom-sta-common broadcom-sta-source
2.) Добавляем в /etc/init.d/rc.local
modprobe --all b43
modprobe --all b44
3.) Перезагружаемся.
Всё, карточка работает.
Лечится очень просто:
1.) sudo apt-get install broadcom-sta-common broadcom-sta-source
2.) Добавляем в /etc/init.d/rc.local
modprobe --all b43
modprobe --all b44
3.) Перезагружаемся.
Всё, карточка работает.
пятница, 22 июля 2011 г.
вторник, 19 июля 2011 г.
Автокоррекция названиях директорий
Включаем автокоррекцию:
$ shopt -s cdspell
Если теперь мы сделаем опечатку в команде cd:
$ cd /usk/local
то все равно попадем в
$ shopt -s cdspell
Если теперь мы сделаем опечатку в команде cd:
$ cd /usk/local
то все равно попадем в
/usr/local
воскресенье, 17 июля 2011 г.
понедельник, 11 июля 2011 г.
Установка индивидуальных deb пакетов с автоматическим удовлетворением зависимостей
Для установки deb пакета с удовлетворением всех зависимостей:
dpkg -i имя_пакета.deb || apt-get -f install
или с sudo:
sudo dpkg -i имя_пакета.deb || sudo apt-get -f install
dpkg -i имя_пакета.deb || apt-get -f install
или с sudo:
sudo dpkg -i имя_пакета.deb || sudo apt-get -f install
Отк. (авто)монтирование флешек в Linux
Способ № 1.
Для отключения:
chmod 0700 /media
Для включения:
chmod 0755 /media
Суть этого способа в том, что бы запретить пользователю читать данные с флешки, cd/dvd-диска и т.д. Большинство современных дистрибутивов с включённым автомонтирование монтируют все сменные устройства в директорию /media, поэтому запретив доступ к ней, запрещаем доступ ко всему ее содержимому.
Этот способ удобен, если нужно на одном и том же компьютере кому-то разрешить, а кому-то запретить доступ к внешним устройсвам хранения. В примере единственный пользователь, который может писать и чатать данные с флешки это root (если владелец и группа каталога /media - root).
Если сменить группу каталогу /media например на "storage" и сменить права на /media:
chmod 0750 /media
Только пользователи из группы "storage" смогут получить доступ к сменным носителям. (По поводу групп это все в теории так на практике не проверял)
P.S. Само устройство будет появляться и монтироватся, но с данными на нем работать будет нельзя.
P.S. CD/DVD диски пишутся НЕ копирование файлов в папку, поэтому запретить запись на них так не получится.
Способ № 2.
sudo -i
Для отключения:
echo 'blacklist usb_storage' > /etc/modprobe.d/blacklist-storage.conf
Для включения:
rm /etc/modprobe.d/blacklist-storage.conf
Здесь простозапрещаются к загрузки модуль ядра. В этом случае ни один пользователь за компьютером не сможет воспользоваться флешкой.
воскресенье, 10 июля 2011 г.
Q4Wine
Основные функции q4wine:
Легкое управление процессами wine
Возможность экспорта цветовой палитры qt4 в цветовые настройки wine
Возможность монтирования iso, nrg, mdf образов без привилегий супер пользователя используя fuseiso или q4wine-mount
Возможность легкой и прозрачной работы с разными версиями wine
Легкое создание и управление префиксами WINE (WINEPREFIX)
Автоматическое создание системных каталогов (system, autostart) и иконок wine-утилит
Возможность задания приоритета nice; функции renice;
Возможность экспорта иконок из файлов PE (.exe .dll)
Возможность создания резервных копий и восстановления префиксов wine (WINEPREFIX)
Создание иконок приложений с различными настройками, специфичными для WINE
И многое другое...
Установка в Ubuntu и производных дистрибутивов.
Обновление списка доступных пакетов:
Установка q4wine:
Или вы можете установить q4wine-unstable (ежедневные сборки):
Легкое управление процессами wine
Возможность экспорта цветовой палитры qt4 в цветовые настройки wine
Возможность монтирования iso, nrg, mdf образов без привилегий супер пользователя используя fuseiso или q4wine-mount
Возможность легкой и прозрачной работы с разными версиями wine
Легкое создание и управление префиксами WINE (WINEPREFIX)
Автоматическое создание системных каталогов (system, autostart) и иконок wine-утилит
Возможность задания приоритета nice; функции renice;
Возможность экспорта иконок из файлов PE (.exe .dll)
Возможность создания резервных копий и восстановления префиксов wine (WINEPREFIX)
Создание иконок приложений с различными настройками, специфичными для WINE
И многое другое...
Установка в Ubuntu и производных дистрибутивов.
sudo add-apt-repository ppa:tehnick/tehnick
Обновление списка доступных пакетов:
sudo apt-get update
Установка q4wine:
sudo apt-get install q4wine
Или вы можете установить q4wine-unstable (ежедневные сборки):
sudo apt-get install q4wine-unstable
суббота, 9 июля 2011 г.
Установка webmin
Добавляем в /etc/apt/sources.list строки:
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
И добавляем ключ:
$ sudo su
# wget http://www.webmin.com/jcameron-key.asc
# apt-key add jcameron-key.asc
После этого ставим командами:
# sudo apt-get update
# sudo apt-get install webmin
Все зависимости поставятся автоматически.
Набираем https://localhost:10000/ в любом браузере и видим приглашение на вход.
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
И добавляем ключ:
$ sudo su
# wget http://www.webmin.com/jcameron-key.asc
# apt-key add jcameron-key.asc
После этого ставим командами:
# sudo apt-get update
# sudo apt-get install webmin
Все зависимости поставятся автоматически.
Набираем https://localhost:10000/ в любом браузере и видим приглашение на вход.
О том, как расшарить сканер.
Предполагаем, что локально сканер на сервере настроен и работает (см. sane).
Теперь нужно выполнить следующие действия:
На сервере:
1) Ставим демон saned (входит в состав разных пакетов, в зависимости от дистрибутива, наример sane-utils или sane-server) и xinetd.
.
2) В /etc/sane.d/saned.conf добавляем ip клиента(ов) (см. примеры в том же файле).
3) Создаем файл /etc/xinetd.d/saned (для автоматического запуска сервера сканирования сетевым демоном xinetd) вида:
4) Выполняем команду (чтобы xinetd подхватил созданный нами файл):
$ sudo /etc/init.d/xinetd reload
На клиенте:
5) В /etc/sane.d/net.conf добавляем строку с ip сервера.
6) Пускаем xsane, сканируем, радуемся.
Теперь нужно выполнить следующие действия:
На сервере:
1) Ставим демон saned (входит в состав разных пакетов, в зависимости от дистрибутива, наример sane-utils или sane-server) и xinetd.
.
2) В /etc/sane.d/saned.conf добавляем ip клиента(ов) (см. примеры в том же файле).
3) Создаем файл /etc/xinetd.d/saned (для автоматического запуска сервера сканирования сетевым демоном xinetd) вида:
service sane-port(здесь предполагается, что в системе присутствует пользователь "scanner" с правами на доступ к сканеру. конечно можно задать пользователя, от имени которого будет запускаться демон saned, по желанию. root строго не рекомендуется)
{
disable = no
socket_type = stream
protocol = tcp
user = scanner
wait = no
server = /usr/sbin/saned
}
4) Выполняем команду (чтобы xinetd подхватил созданный нами файл):
$ sudo /etc/init.d/xinetd reload
На клиенте:
5) В /etc/sane.d/net.conf добавляем строку с ip сервера.
6) Пускаем xsane, сканируем, радуемся.
Ловушка из iptables
Iptables для работы ловушки потребуется модуль TARPIT, он открывает у вас на компьютере порт, который ведет в никуда.
Все действия проводятся на дистрибутиве Ubuntu 10.04.
Установка
Всё нужное есть в стандартных репозиториях
$ sudo aptitude install module-assistant xtables-addons-source
$ sudo module-assistant prepare
$ sudo module-assistant auto-install xtables-addons-source
$ sudo depmod -a
Установка ловушки
Установим ловушку на порт ssh(естественно в конфиг файлах ssh сервера нужно чтобы он работал на порту отличном от 22), злоумышленник будет тратить время на подставной порт который открыл TARPIT.
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j TARPIT
Все действия проводятся на дистрибутиве Ubuntu 10.04.
Установка
Всё нужное есть в стандартных репозиториях
$ sudo aptitude install module-assistant xtables-addons-source
$ sudo module-assistant prepare
$ sudo module-assistant auto-install xtables-addons-source
$ sudo depmod -a
Установка ловушки
Установим ловушку на порт ssh(естественно в конфиг файлах ssh сервера нужно чтобы он работал на порту отличном от 22), злоумышленник будет тратить время на подставной порт который открыл TARPIT.
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j TARPIT
четверг, 7 июля 2011 г.
Iptadmin web-интерфейс для iptables
Это простой веб-интерфейс для Iptables, который поддерживает пока только несколько опций. Отличительная особенность - подробные сообщения об ошибках.
Iptadmin запускается в режиме демона. Программа не хранит в системе никакие промежуточные файлы, информация берётся прямо из iptables-save. Правила редактируются с помощью вызова iptables и сохраняются командой /etc/init.d/iptables save. Для таких дистрибутивов, как debian, сохранение правил настраивается дополнительно.
Авторизация осуществляется с помощью PAM. Доступ разрешён пользователю root и любому другому пользователю из группы iptadmin.
Iptadmin не поддерживает работу по https. Чтобы исключить передачу системных паролей по сети в открытом виде, web-интерфейс работает только на локальном сетевом интерфейсе. Для удалённого доступа необходимо настроить работу по https с помощью стороннего web-сервера.
Сайт разработчика.
На сайте нет deb пакетов, можно скомпилировать из исходников или с помощью alien конвертировать rpm пакет.
Iptadmin запускается в режиме демона. Программа не хранит в системе никакие промежуточные файлы, информация берётся прямо из iptables-save. Правила редактируются с помощью вызова iptables и сохраняются командой /etc/init.d/iptables save. Для таких дистрибутивов, как debian, сохранение правил настраивается дополнительно.
Авторизация осуществляется с помощью PAM. Доступ разрешён пользователю root и любому другому пользователю из группы iptadmin.
Iptadmin не поддерживает работу по https. Чтобы исключить передачу системных паролей по сети в открытом виде, web-интерфейс работает только на локальном сетевом интерфейсе. Для удалённого доступа необходимо настроить работу по https с помощью стороннего web-сервера.
Сайт разработчика.
На сайте нет deb пакетов, можно скомпилировать из исходников или с помощью alien конвертировать rpm пакет.
Бэкап с помощью rsync
Я предлагаю вам довольно эффективный способ делать бэкапы — rsync+crontab. Главным преимуществом данного метода перед обычным копированием (cp) — скорость работы, т.к. копируются не все файлы, а только те, которые были изменены после предварительного бэкапа.
Приступим
Для начала я смонтировал второй HDD в папку /backup, но можно копировать и на этот же жиск, но тогда какой смысл от бэкапов?
Выполняем команду:
После выполнения данной команды, в каталоге /backup появится каталог /home со всем его содержимым.
А теперь подробнее:
Параметр -v: просмотр хода работы.
Параметр -a: указывает на то, что необходимо сохранить все атрибуты файлов.
Параметр -r: двигаться по каталогам рекурсивно.
Параметр --delete: файлы которые были удалены в источнике, будут удалены и в приемнике.
Параметр --stats: выводит подробную статистику по окончанию работы.
/home — каталог источник.
/backup — каталог приемник.
Теперь, для того чтобы «все делалось само» создадим скрипт примерно следующего содержания:
И занесем его в кронтаб:
Приступим
Для начала я смонтировал второй HDD в папку /backup, но можно копировать и на этот же жиск, но тогда какой смысл от бэкапов?
Выполняем команду:
sudo rsync -var --delete --stats /home /backup
После выполнения данной команды, в каталоге /backup появится каталог /home со всем его содержимым.
А теперь подробнее:
Параметр -v: просмотр хода работы.
Параметр -a: указывает на то, что необходимо сохранить все атрибуты файлов.
Параметр -r: двигаться по каталогам рекурсивно.
Параметр --delete: файлы которые были удалены в источнике, будут удалены и в приемнике.
Параметр --stats: выводит подробную статистику по окончанию работы.
/home — каталог источник.
/backup — каталог приемник.
Теперь, для того чтобы «все делалось само» создадим скрипт примерно следующего содержания:
#!/bin/bash
# /home:
rsync -ar --delete /home /backup# /var/www:
rsync -ar --delete /var/www /backup
И занесем его в кронтаб:
# m h dom mon dow command
00 05 * * * /backup/rsync.backup
Установка и настройка Samba
Samba — это эффективный способ не только организовать взаимодействие компьютеров под управлением Windows и Linux, но и в сетях, состоящих только из Linux-машин он позволяет быстро организовать общий доступ к ресурсам. Файл конфигурации Samba может достигать огромной длины и учитывать множество параметров, однако в большинстве случаев достаточно гораздо меньшего количества настроек.
I. Установка Samba
Если мы хотим и расшаривать сами и иметь доступ к файлам на других компьютерах, то необходимо установить три пакета(samba smbclient smbfs). Например для debian:
II. Настройка Samba
1. Создайте резервную копию /etc/samba/smb.conf:
Теперь откройте файл /etc/samba/smb.conf для редактирования в вашем любимом текстовом редакторе. Например так:
Все то, что там есть – нам не нужно. Можете отчистить файл полностью, и добавить, например, такую конфигурацию:
Теперь можете заменить информацию на свою:
workgroup – это имя вашей сети, должно быть одинаковым для всех компьютеров, как рабочая группа в Windows.
netbios name – имя вашего компьютера в сети, сделайте всем машинам уникальные, как имя компьютера в Windows.
server string — описание компьютера, аналог подобного значения в Windows.
security — определяет доступ к расшариваемым каталогам.
browseable — хотите ли вы сделать доступными все подкаталоги рашариваемого каталога. Этот параметр также можно использовать отдельно для каждого расшариваемого каталога.
path — путь до расшариваемой папки. В данном конкретном примере будут расшарены домашняя папка пользователя user и домашняя папка пользователя ftp.
comment — комментарий.
readonly – только для чтения. Обратите внимание, что Samba может ограничить права пользователя, но не может расширить права, заданные системой. То есть если на расшариваемом каталоге не стоят права на запись для всех в самой системе, Samba не сможет разрешить запись в него сторонним пользователям. Однако если на каталоге стоят права 777, то задав параметр readonly = Yes вы сможете ограничить доступ на запись для пользователей, подключающихся из сети.
Аналогично вы можете создать любое количество сетевых каталогов.
После завершения конфигурации выполните команду
она автоматически проверит файл конфигурации. После этого перезагрузите Samba:
Обратите внимание, что после загрузки компьютеры не сразу появляются в сети, что связанно с особенностями протокола.
I. Установка Samba
Если мы хотим и расшаривать сами и иметь доступ к файлам на других компьютерах, то необходимо установить три пакета(samba smbclient smbfs). Например для debian:
$ sudo aptitude install samba smbclient smbfs
II. Настройка Samba
1. Создайте резервную копию /etc/samba/smb.conf:
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Теперь откройте файл /etc/samba/smb.conf для редактирования в вашем любимом текстовом редакторе. Например так:
$ sudo nano /etc/samba/smb.conf
Все то, что там есть – нам не нужно. Можете отчистить файл полностью, и добавить, например, такую конфигурацию:
[global] workgroup = home netbios name = desktop server string = anonymous lan file server security = share browseable = yes[user] path = /home/user comment = mediafilesreadonly = No guest ok = Yes
dos charset = 866 unix charset = UTF-8 display charset = KOI8-R
[ftp] path = /home/ftp comment = ftpfilesreadonly = No guest ok = Yes
Теперь можете заменить информацию на свою:
workgroup – это имя вашей сети, должно быть одинаковым для всех компьютеров, как рабочая группа в Windows.
netbios name – имя вашего компьютера в сети, сделайте всем машинам уникальные, как имя компьютера в Windows.
server string — описание компьютера, аналог подобного значения в Windows.
security — определяет доступ к расшариваемым каталогам.
browseable — хотите ли вы сделать доступными все подкаталоги рашариваемого каталога. Этот параметр также можно использовать отдельно для каждого расшариваемого каталога.
path — путь до расшариваемой папки. В данном конкретном примере будут расшарены домашняя папка пользователя user и домашняя папка пользователя ftp.
comment — комментарий.
readonly – только для чтения. Обратите внимание, что Samba может ограничить права пользователя, но не может расширить права, заданные системой. То есть если на расшариваемом каталоге не стоят права на запись для всех в самой системе, Samba не сможет разрешить запись в него сторонним пользователям. Однако если на каталоге стоят права 777, то задав параметр readonly = Yes вы сможете ограничить доступ на запись для пользователей, подключающихся из сети.
Аналогично вы можете создать любое количество сетевых каталогов.
После завершения конфигурации выполните команду
$ testparm
она автоматически проверит файл конфигурации. После этого перезагрузите Samba:
$ sudo /etc/init.d/samba restart
Обратите внимание, что после загрузки компьютеры не сразу появляются в сети, что связанно с особенностями протокола.
Восстановление пароля root в MySQL
Иногда бывают ситуации, когда необходимо сменить root пароль не зная старого.
Вы можете восстановить пароль от баз данных MySQL если повторите следующие 5 шагов:
1. Останавливаем службу MySQL:
2. Запускаем службу с опцией --skip-grant-tables
3. Подключаемся с серверу MySQL при помощи клиента mysql:
4. Вводим новый пароль для root:
5. Останавливаем сервер MySQL:
6. Запускаем MySQL-сервер и логинимся с новым паролем:
Вы можете восстановить пароль от баз данных MySQL если повторите следующие 5 шагов:
1. Останавливаем службу MySQL:
$ /etc/init.d/mysql stop
2. Запускаем службу с опцией --skip-grant-tables
mysqld_safe --skip-grant-tables &
3. Подключаемся с серверу MySQL при помощи клиента mysql:
$ mysql -u root
4. Вводим новый пароль для root:
mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
mysql> flush privileges;
mysql> quit
5. Останавливаем сервер MySQL:
$ /etc/init.d/mysql stop
6. Запускаем MySQL-сервер и логинимся с новым паролем:
$ /etc/init.d/mysql start
$ mysql -u root -p
Установка абсолютно индентичного софта на несколько машин с одной
Установка абсолютно индентичного софта на несколько машин с использованием dpkg и apt-get.
Для начала нам необходимо сохранить список установленых пакетов.
Для этого на host1 выполняем:
Теперь необходимо скопировать получившийся файл на host2.
Поставим флаги на host2:
и наконец-то установим весь список софта:
В результате имеем 2 машины с абсолютно одинаковым набором установленого софта.
Для начала нам необходимо сохранить список установленых пакетов.
Для этого на host1 выполняем:
dpkg --get-selections > selections.txt
Теперь необходимо скопировать получившийся файл на host2.
Поставим флаги на host2:
dpkg --set-selections < selections.txt
и наконец-то установим весь список софта:
apt-get -u dselect-upgrade
В результате имеем 2 машины с абсолютно одинаковым набором установленого софта.
LogWatch -отчёт и анализ состояния сервера Linux по почте
Утилита LogWatch анализирует log файлы системы по различным критериям с возможность составления отчёта и отправки его по почте. Утилита построена на модульном принципе, и анализирует не все, а лишь те сервисы, которые указаны в настройках.Более того, можно и самому писать модули для анализа нужных логов. В общем – вещь, полезная.
Ставим:
Теперь переделываем конфиг себя:
Папка с логами по умолчанию
LogDir = /var/log/#
Папка для временных файлов, или указываем свою или создаем эту, так как она ни создается
TmpDir = /var/cache/logwatch
#execute
/usr/share/logwatch/scripts/logwatch.pl --mailto Электронный@адрес
если лог файл отличается от стандартного, лежит не в /var/log/, а в ином место
LogFile = apache/*access.log
LogFile = /www/site1/logs/access*.log
LogFile = /www/site2/logs/access*.log
#LogFile = apache/*access.log.1
#LogFile = apache2/*access.log.1
LogFile = apache/error_log
LogFile = /www/site1/logs/error*.log
LogFile = /www/site2/logs/error*.log
#LogFile = httpd/site1/_log
#LogFile = httpd/site2/error_log............
Ставим:
$ apt-get install logwatch
Теперь переделываем конфиг себя:
$ nano /usr/share/logwatch/default.conf/logwatch.conf
Папка с логами по умолчанию
LogDir = /var/log/#
Папка для временных файлов, или указываем свою или создаем эту, так как она ни создается
TmpDir = /var/cache/logwatch
При установке утилита прописывает себя в /etc/cron.daily/00logwatch и будет запускаться каждый день. Идем в nano /etc/cron.daily/00logwatch и закоментируем всё и добавляем одну строчку:
#execute
/usr/share/logwatch/scripts/logwatch.pl --mailto Электронный@адрес
если лог файл отличается от стандартного, лежит не в /var/log/, а в ином место
$ nano /usr/share/logwatch/default.conf/logfiles/
LogFile = apache/*access.log
LogFile = /www/site1/logs/access*.log
LogFile = /www/site2/logs/access*.log
#LogFile = apache/*access.log.1
#LogFile = apache2/*access.log.1
LogFile = apache/error_log
LogFile = /www/site1/logs/error*.log
LogFile = /www/site2/logs/error*.log
#LogFile = httpd/site1/_log
#LogFile = httpd/site2/error_log............
Резервное копирование командой dd
Так же этот метод можно еще назвать и «зеркалированием»,так как программа dd копирует данные по секторам не зависимости от того есть ли на этом участке диска данные или нет, будет создана точная копия и размер будет точно такой же.
То есть если раздел /dev/sda1 имеет объем в 25 Gb, а занято всего 5 Gb то все равно копия образа будет 25 Gb.Простыми словами данные откуда (параметр if ), куда (параметр of )
Примеры использывания:
Команда выше сделает точную копию раздела /dev/hda в разделе /dev/hdb,т.е есть мы «отзеркалировали» /dev/hda
Часто используемые параметры после conv:
- noerror — продолжать копирование не обращая внимание на bad-блоки и прочие ошибки.
- sync — поврежденные или отсутствующие данные во входном буфере на выходе будут заменены на нули.
Опция замедляет работу команды dd, но для более корректного образа стоит воспользоваться ею:
Делаем полный образ раздела /dev/sda5 в бинарный файл sda5.img.
И еще для полного спокойствия сделаем копию нашей MBR (Master Boot Record).
MBR – это первый сектор на жестком диске содержащий таблицу разделов и запись, с какого раздела загружаться.
bs — block size, размера блока который мы хотим скопировать
count — количество bs
Восстановления MBR из резервной копии:
Восстановления раздела из образа:
Но dd имеет массу недостатков, а именно:
pv /dev/sda > /dev/sdb
То есть если раздел /dev/sda1 имеет объем в 25 Gb, а занято всего 5 Gb то все равно копия образа будет 25 Gb.Простыми словами данные откуда (параметр if ), куда (параметр of )
Примеры использывания:
$ dd if=/dev/hda of=/dev/hdb conv=noerror,sync
Команда выше сделает точную копию раздела /dev/hda в разделе /dev/hdb,т.е есть мы «отзеркалировали» /dev/hda
Часто используемые параметры после conv:
- noerror — продолжать копирование не обращая внимание на bad-блоки и прочие ошибки.
- sync — поврежденные или отсутствующие данные во входном буфере на выходе будут заменены на нули.
Опция замедляет работу команды dd, но для более корректного образа стоит воспользоваться ею:
$ dd if=/dev/sda5 of=/home/backup/sda5.img
Делаем полный образ раздела /dev/sda5 в бинарный файл sda5.img.
И еще для полного спокойствия сделаем копию нашей MBR (Master Boot Record).
MBR – это первый сектор на жестком диске содержащий таблицу разделов и запись, с какого раздела загружаться.
$ dd if=/dev/sda1 of=/home/backup/mbr.dump bs=512 count=1
bs — block size, размера блока который мы хотим скопировать
count — количество bs
Восстановления MBR из резервной копии:
$ dd if=/home/backup/mbr.dump of=/dev/sda1 bs=512 count=1
Восстановления раздела из образа:
$ dd if=/home/backup/sda5.img of=/dev/sda5
Но dd имеет массу недостатков, а именно:
- не видно сколько скопировано
- не видно сколько осталось
- не видно, чем вообще сейчас dd занимается
pv /dev/sda > /dev/sdb
среда, 6 июля 2011 г.
Полное резервирование Linux-системы
Самый простой способ полностью заархивировать систему в один Tar-архив, который при необходимости можно будет развернуть обратно. Для этого надо с правами root зайти в консоли в корень системы и затарить все данные:
где «−−exclude» – это параметр, который указывает какие разделы архивировать не стоит. Тут уж сами решаем, кому чего нужно…
Бывает, что в конце выполнения команды можно получить ошибку «tar: Error exit delayed from previous errors». Однако, ее можно игнорировать.
Результатом выполнения этих нехитрых команд будет появление systembackup.tgz в корневой директории. После этого файлик можно закинуть в любое удобное место и хранить до «черного дня».
Восстановить систему из файла можно по-разному. Например, загрузиться с LiveCD и распаковать архив в корень голой системы. А можно просто распаковать на уже готовую систему, заменив все, после чего получим ту систему, из которой мы делали резервную копию.
Этим мы перезапишем все что есть на диске, восстановив систему в точке сохранения. Прежде, чем делать восстановление на работающую систему, необходимо проверить, что на диске нет важных файлов, которые могут быть затерты.
sudo su cd / tar cvpzf systembackup.tgz −−exclude=/proc −−exclude=/lost+found −−exclude=/systembackup.tgz −−exclude=/mnt −−exclude=/sys /
где «−−exclude» – это параметр, который указывает какие разделы архивировать не стоит. Тут уж сами решаем, кому чего нужно…
Бывает, что в конце выполнения команды можно получить ошибку «tar: Error exit delayed from previous errors». Однако, ее можно игнорировать.
Результатом выполнения этих нехитрых команд будет появление systembackup.tgz в корневой директории. После этого файлик можно закинуть в любое удобное место и хранить до «черного дня».
Восстановить систему из файла можно по-разному. Например, загрузиться с LiveCD и распаковать архив в корень голой системы. А можно просто распаковать на уже готовую систему, заменив все, после чего получим ту систему, из которой мы делали резервную копию.
tar xvpzf backup.tgz -C /
Этим мы перезапишем все что есть на диске, восстановив систему в точке сохранения. Прежде, чем делать восстановление на работающую систему, необходимо проверить, что на диске нет важных файлов, которые могут быть затерты.
вторник, 5 июля 2011 г.
Открытие меню по нажатию на клавишу Super
Если вы недавно пересели с Виндоус или просто хотите, чтобы меню “Приложения” открывалось по нажатию на клавишу Super (клавиша с изображением логотипа Виндоус), то это можно сделать всего одной строкой в терминале:
gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Super_L"
Закрыть меню можно нажатием на Esc.
Надо заметить, что открытие меню по Alt+F1 пропадает.
UPD: могут возникнуть проблемы с другими комбинациями, где частью является клавиша Super.
Исправить всё обратно: gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Alt+F1"
gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Super_L"
Закрыть меню можно нажатием на Esc.
Надо заметить, что открытие меню по Alt+F1 пропадает.
UPD: могут возникнуть проблемы с другими комбинациями, где частью является клавиша Super.
Исправить всё обратно: gconftool-2 --set /apps/metacity/global_keybindings/panel_main_menu --type string "Alt+F1"
Создаем свои шаблоны для меню “Создать документ”
Простейший примером может служить сценарий для Bash.Итак создаем в папке ~/Шаблоны файл Сценарий Bash.sh. Открываем его и записываем:
#!/bin/bash
Теперь на пустом месте жмем правой кнопкой, выбираем Создать документ и видим там наш новый шаблон - Сценарий Bash. Создаем его, открываем и с умилением наблюдаем в нем стоку:
#!/bin/bash
Так же можно сделать сценарий для Python только вместо #!/bin/bash прописываем #!/usr/bin/python сохраняем в "Шаблоны" в домашнем каталоге с названием к примеру Сценарий Python.py всё готова так же можно в папку Шаблоны добавить шаблоны для OpenOffice или GIMP.
#!/bin/bash
Теперь на пустом месте жмем правой кнопкой, выбираем Создать документ и видим там наш новый шаблон - Сценарий Bash. Создаем его, открываем и с умилением наблюдаем в нем стоку:
#!/bin/bash
Так же можно сделать сценарий для Python только вместо #!/bin/bash прописываем #!/usr/bin/python сохраняем в "Шаблоны" в домашнем каталоге с названием к примеру Сценарий Python.py всё готова так же можно в папку Шаблоны добавить шаблоны для OpenOffice или GIMP.
суббота, 2 июля 2011 г.
Увеличиваем отзывчивость системы при сильной нагрузки.
Метод работает на ядре 2.6.32.
1.)Выполняем скрипт через sudo:
#!/bin/bash
YELLOW="\033[1;33m"
RED="\033[0;31m"
ENDCOLOR="\033[0m"
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function PARCHEAR ()
{
FICHERO="$HOME/.bashrc"
echo ""
echo -e $YELLOW"Patching [${FICHERO}]..."$ENDCOLOR
echo ""
LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/user" | wc -l`
if [ "$LINEAS" == "0" ];
then
echo "Adding the patch..."
echo "if [ \"\$PS1\" ] ; then" | tee -a $FICHERO
echo "mkdir -p -m 0700 /dev/cgroup/cpu/user/\$\$ > /dev/null 2>&1" | tee -a $FICHERO
echo "echo \$\$ > /dev/cgroup/cpu/user/\$\$/tasks" | tee -a $FICHERO
echo "echo \"1\" > /dev/cgroup/cpu/user/\$\$/notify_on_release" | tee -a $FICHERO
echo "fi" | tee -a $FICHERO
else
echo "It seems the patch is already included in $FICHERO"
fi
FICHERO="/etc/rc.local"
echo ""
echo -e $YELLOW"Patching [${FICHERO}]..."$ENDCOLOR
echo ""
LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/release_agent" | wc -l`
if [ "$LINEAS" == "0" ];
then
echo "Adding the patch..."
POSI=`cat $FICHERO | grep -n "exit 0" | sort -nr | head -n 1 | awk -F: '{print $1}'`
#echo "Posi es [$POSI]"
echo "Making backup of $FICHERO in /etc/rc.local.backup.txt"
cp /etc/rc.local /etc/rc.local.backup.txt
sed "${POSI}imkdir -p /dev/cgroup/cpu\nmount -t cgroup cgroup /dev/cgroup/cpu -o cpu\nmkdir -m 0777 /dev/cgroup/cpu/user\necho \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" /etc/rc.local | tee /etc/rc.new.local
mv /etc/rc.new.local /etc/rc.local
#echo "#========== 200 lines kernel patch alternative ============" | tee -a $FICHERO
#echo "mkdir -p /dev/cgroup/cpu" | tee -a $FICHERO
#echo "mount -t cgroup cgroup /dev/cgroup/cpu -o cpu" | tee -a $FICHERO
#echo "mkdir -m 0777 /dev/cgroup/cpu/user" | tee -a $FICHERO
#echo "echo \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" | tee -a $FICHERO
#echo "#====================================" | tee -a $FICHERO
else
echo "It seems the patch is already included in $FICHERO"
fi
echo ""
echo -e $YELLOW"Making [${FICHERO}] executable"$ENDCOLOR
echo ""
sudo chmod +x $FICHERO
FICHERO="/usr/local/sbin/cgroup_clean"
echo ""
echo -e $YELLOW"Creating [${FICHERO}]..."$ENDCOLOR
echo ""
if [ ! -e $FICHERO ];
then
echo "#!/bin/sh" | tee $FICHERO
echo "if [ \"\$*\" != \"/user\" ]; then" | tee -a $FICHERO
echo "rmdir /dev/cgroup/cpu/\$*" | tee -a $FICHERO
echo "fi" | tee -a $FICHERO
else
echo "File $FICHERO already exists."
fi;
echo ""
echo -e $YELLOW"Making [${FICHERO}] executable"$ENDCOLOR
echo ""
sudo chmod +x $FICHERO
echo "DONE. The patch has been applied. Restart your computer..."
}
#-----------------------------------------------------------------------------
if [ $USER != root ]; then
echo -e $RED"Error: you need to run this script as root."
echo -e $YELLOW"Exiting..."$ENDCOLOR
exit 0
fi
PARCHEAR
# end
2.) Перезагружаем систему.
1.)Выполняем скрипт через sudo:
#!/bin/bash
YELLOW="\033[1;33m"
RED="\033[0;31m"
ENDCOLOR="\033[0m"
#::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
function PARCHEAR ()
{
FICHERO="$HOME/.bashrc"
echo ""
echo -e $YELLOW"Patching [${FICHERO}]..."$ENDCOLOR
echo ""
LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/user" | wc -l`
if [ "$LINEAS" == "0" ];
then
echo "Adding the patch..."
echo "if [ \"\$PS1\" ] ; then" | tee -a $FICHERO
echo "mkdir -p -m 0700 /dev/cgroup/cpu/user/\$\$ > /dev/null 2>&1" | tee -a $FICHERO
echo "echo \$\$ > /dev/cgroup/cpu/user/\$\$/tasks" | tee -a $FICHERO
echo "echo \"1\" > /dev/cgroup/cpu/user/\$\$/notify_on_release" | tee -a $FICHERO
echo "fi" | tee -a $FICHERO
else
echo "It seems the patch is already included in $FICHERO"
fi
FICHERO="/etc/rc.local"
echo ""
echo -e $YELLOW"Patching [${FICHERO}]..."$ENDCOLOR
echo ""
LINEAS=`cat $FICHERO | grep "/dev/cgroup/cpu/release_agent" | wc -l`
if [ "$LINEAS" == "0" ];
then
echo "Adding the patch..."
POSI=`cat $FICHERO | grep -n "exit 0" | sort -nr | head -n 1 | awk -F: '{print $1}'`
#echo "Posi es [$POSI]"
echo "Making backup of $FICHERO in /etc/rc.local.backup.txt"
cp /etc/rc.local /etc/rc.local.backup.txt
sed "${POSI}imkdir -p /dev/cgroup/cpu\nmount -t cgroup cgroup /dev/cgroup/cpu -o cpu\nmkdir -m 0777 /dev/cgroup/cpu/user\necho \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" /etc/rc.local | tee /etc/rc.new.local
mv /etc/rc.new.local /etc/rc.local
#echo "#========== 200 lines kernel patch alternative ============" | tee -a $FICHERO
#echo "mkdir -p /dev/cgroup/cpu" | tee -a $FICHERO
#echo "mount -t cgroup cgroup /dev/cgroup/cpu -o cpu" | tee -a $FICHERO
#echo "mkdir -m 0777 /dev/cgroup/cpu/user" | tee -a $FICHERO
#echo "echo \"/usr/local/sbin/cgroup_clean\" > /dev/cgroup/cpu/release_agent" | tee -a $FICHERO
#echo "#====================================" | tee -a $FICHERO
else
echo "It seems the patch is already included in $FICHERO"
fi
echo ""
echo -e $YELLOW"Making [${FICHERO}] executable"$ENDCOLOR
echo ""
sudo chmod +x $FICHERO
FICHERO="/usr/local/sbin/cgroup_clean"
echo ""
echo -e $YELLOW"Creating [${FICHERO}]..."$ENDCOLOR
echo ""
if [ ! -e $FICHERO ];
then
echo "#!/bin/sh" | tee $FICHERO
echo "if [ \"\$*\" != \"/user\" ]; then" | tee -a $FICHERO
echo "rmdir /dev/cgroup/cpu/\$*" | tee -a $FICHERO
echo "fi" | tee -a $FICHERO
else
echo "File $FICHERO already exists."
fi;
echo ""
echo -e $YELLOW"Making [${FICHERO}] executable"$ENDCOLOR
echo ""
sudo chmod +x $FICHERO
echo "DONE. The patch has been applied. Restart your computer..."
}
#-----------------------------------------------------------------------------
if [ $USER != root ]; then
echo -e $RED"Error: you need to run this script as root."
echo -e $YELLOW"Exiting..."$ENDCOLOR
exit 0
fi
PARCHEAR
# end
2.) Перезагружаем систему.
вторник, 28 июня 2011 г.
Как узнать версию Ubuntu и версию ядра.
Часто возникает необходимость определить версию дистрибутива Ubuntu, которая установлена у вас на компьютере и текущую версию ядра.
Параметр -r используется для того, чтобы вывести информацию о версии ядра. Также можно вывести всю информацию, предоставляемую командой uname, для этого выполните команду с параметром -a:
Определяем версию Ubuntu из командной строки
Команда lsb_release
Команда lsb_release предназначена для вывода информации о текущей версии дистрибутива Ubuntu. Чтобы получить требуемую информацию, выполните в командной строке команду lsb_release -a:$ lsb_release -a
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
Файл /etc/lsb-release Так же информация о версии Ubuntu хранится в файле /etc/lsb-release. Чтобы вывести файл, выполните в командной строке команду cat /etc/lsb-release:
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=9.10
DISTRIB_CODENAME=karmic
DISTRIB_DESCRIPTION="Ubuntu 9.10"
Файл /etc/issue
Есть еще один простой способ определить версию, это просмотреть содержимое файла /etc/issue, хотя сам файл предназначен несколько для других целей. Для этого в командной строке выполните:$ cat /etc/issue
Ubuntu 9.10 \n \l
Определяем текущую версию ядра
Для определения версии ядра можно также воспользоваться командой uname. Выполните в командной строке:$ uname -r 2.6.31-20-generic
Параметр -r используется для того, чтобы вывести информацию о версии ядра. Также можно вывести всю информацию, предоставляемую командой uname, для этого выполните команду с параметром -a:
$ uname -a Linux yuriy 2.6.31-20-generic #58-Ubuntu SMP Fri Mar 12 05:23:09 UTC 2010 i686 GNU
воскресенье, 26 июня 2011 г.
Полезныe утилиты для использования в сценариях
notify-send
При помощи утилиты notify-send вы можете показывать всплывающие уведомления путём отправки сообщений через notification daemon из командной строки. Очень удобный способ сообщать пользователям о каких-то событиях. Прежде, чем вы сможете воспользоваться этой утилитой, её необходимо установить, поскольку обычно она не установлена по умолчанию. В Ubuntu программа устанавливается так:
$ sudo apt-get install libnotify-bin
Теперь можно отправлять уведомления прямиком на рабочий стол пользователю:
$ notify-send "rsnapshot done :)"
Также notify-send принимает опции, при помощи которых можно управлять отображением. С ними можно ознакомиться на man-странице программы.
tput
При помощи утилиты tput вы можете получить дополнительные возможности при работе с терминалом, такие как:
- перемещение курсора в любую позицию экрана;
- получение информации о терминале;
- установка цвета символов и фона;
- печать жирным шрифтом;
- печать в инверсном режиме и т. п.
#!/bin/bash # clear the screen tput clear # Move cursor to screen location X,Y (top left is 0,0) tput cup 3 15 # Set a foreground colour using ANSI escape tput setaf 3 echo "XYX Corp LTD." tput sgr0 tput cup 5 17 # Set reverse video mode tput rev echo "M A I N - M E N U" tput sgr0 tput cup 7 15 echo "1. User Management" tput cup 8 15 echo "2. Service Management" tput cup 9 15 echo "3. Process Management" tput cup 10 15 echo "4. Backup" # Set bold mode tput bold tput cup 12 15 read -p "Enter your choice [1-4] " choice tput clear tput sgr0 tput rc
Вот, что получится в результате:
Если вас заинтересовали возможности tput, вы можете получить больше информации на страницах man tput и man 5 terminfo.
setleds
При помощи команды setleds вы можете включать/отключать светодиоды клавиатуры. Например, чтобы включить Num Lock:
setleds -D +num
отключить Num Lock:
setleds -D -num
И, соответственно:
- +caps — включить Caps Lock;
- -caps — отключить Caps Lock;
- +scroll — включить Scroll Lock;
- -scroll — отключить Scroll Lock.
Более подробно о возможностях setleds можно узнать из man setleds.
zenity
При помощи zenity вы можете отображать GTK-диалоги и получать обратно ответы пользователя. Ниже приведён пример использования zenity в сценарии получения whois-информации.
#!/bin/bash # Get domain name _zenity="/usr/bin/zenity" _out="/tmp/whois.output.$$" domain=$(${_zenity} --title "Enter domain" \ --entry --text "Enter the domain you would like to see whois info" ) if [ $? -eq 0 ] then # Display a progress dialog while searching whois database whois $domain | tee >(${_zenity} --width=200 --height=100 \ --title="whois" --progress \ --pulsate --text="Searching domain info..." \ --auto-kill --auto-close \ --percentage=10) >${_out} # Display back output ${_zenity} --width=800 --height=600 \ --title "Whois info for $domain" \ --text-info --filename="${_out}" else ${_zenity} --error \ --text="No input provided" fi
Так это выглядит в работе:
С полным перечнем поддерживаемых виджетов GTK+, а также справкой по работе с zenity можно ознакомиться на man-странице программы, а также при помощи команды
zenity --help
kdialog
kdialog подобен zenity, однако он использует возможности библиотеки QT, а не GTK+. Пример использования:
kdialog --dontagain myscript:nofilemsg --msgbox "File: '~/.backup/config' not found."
На странице shell scripting with KDE Dialogs можно получить больше информации о работе с kdialog.
dialog
При помощи dialog вы можете создавать пользовательский интерфейс в терминале, используя возможности библиотеки ncurses. Например:
#!/bin/bash dialog --title "Delete file" \ --backtitle "Linux Shell Script Tutorial Example" \ --yesno "Are you sure you want to permanently delete \"/tmp/foo.txt\"?" 7 60 # Get exit status # 0 means user hit [yes] button. # 1 means user hit [no] button. # 255 means user hit [Esc] key. response=$? case $response in 0) echo "File deleted.";; 1) echo "File not deleted.";; 255) echo "[ESC] key pressed.";; esac
Подробности о работе с dialog — на man-странице программы.
Помимо рассмотренных выше утилит, предоставляющих возможность построения пользовательских интерфейсов, со многими UNIX/Linux поставляются и другие. Некоторые из них:
- xmessage — умеет выводить диалоги с кнопками и сообщениями;
- gmessage — GTK+ аналог xmessage;
- whiptail — похожа на dialog;
- python-dialog — dialog-модуль для Python.
logger
Утилита logger представляет собой интерфейс к syslog. При помощи этой программы вы можете отправлять сообщения о событиях для регистрации в системном лог-файле или каком-либо другом.
$ logger "Hello World" $ tail /var/log/messages Jan 11 15:11:19 adesktop ashep: Hello World
За справкой традиционно обращайтесь к man logger.
setterm
При помощи утилиты setterm можно управлять различными параметрами терминала. В приведённом ниже примере устанавливается время гашения экрана монитора равным 15 минутам, а переключение в энергосберегающий режим — 60:
setterm -blank 15 -powersave powerdown -powerdown 60
В следующем примере текст в xterm будет выведен подчёркнутым:
setterm -underline on; echo "Add Your Important Message Here" setterm -underline off
Также, например, вы можете отключить отображение курсора на экране:
setterm -cursor off
и затем включить его:
setterm -cursor on
За подробностями по работе с программой — man setterm.
Отправка сообщений хостам MS Windows
При помощи утилиты smbclient можно отправлять текстовые сообщения пользователям хостов SMB/CIFS, если на них запущена соответствующая служба.
echo "Hello World" | smbclient -M hostname
Документация: man smbclient.
Работа с сокетами из bash
Непосредственно из bash вы можете открывать сокеты и передавать через них данные. Вам вовсе необязательно пользоваться curl или lynx, чтобы получить данные по сети от удалённого сервера. Bash особым образом интерпретирует обращения к файлам:
- /dev/tcp/host/port — если host является корректным именем хоста, а port — номером порта, то bash попытается открыть сетевое соединение к этому хосту на указанный TCP-порт;
- /dev/udp/host/port — то же самое, только речь идёт о UDP-соединениях.
(echo >/dev/tcp/localhost/25) &>/dev/null && echo "TCP port 25 open" || echo "TCP port 25 close"
Обернув вышеприведённый пример в цикл, можно проверять диапазон портов:
echo "Scanning TCP ports..." for p in {1..1023} do (echo >/dev/tcp/localhost/$p) >/dev/null 2>&1 && echo "$p open" done
А при помощи следующего примера можно сделать так, чтобы ваш сценарий работал подобно HTTP-клиенту.
#!/bin/bash exec 3 <> /dev/tcp/${1:-www.cyberciti.biz}/80 printf "GET / HTTP/1.0\r\n" >&3 printf "Accept: text/html, text/plain\r\n" >&3 printf "Accept-Language: en\r\n" >&3 printf "User-Agent: nixCraft_BashScript v.%s\r\n" "${BASH_VERSION}" >&3 printf "\r\n" >&3 while read LINE <&3 do # do something on $LINE # or send $LINE to grep or awk for grabbing data # or simply display back data with echo command echo $LINE done
Больше информации, как всегда, вы можете получить на man-странице bash.
Замечание о заданиях cron и GUI-приложениях
Если вы планируете запускать ваши сценарии, написанные с использованием Zenity или ей подобными, не забывайте прежде определять значение переменной DISPLAY в строке описания задания файла crontab. Например:
@hourly DISPLAY=:0.0 /home/vivek/scripts/monitor.stock.sh
суббота, 25 июня 2011 г.
Не много советов.
Очень простой способ передать файлы с машины на машину — tar cz. | nc -l -p 2214 (на передающей стороне) и nc адрес 2214 | tar xz (на принимающей). 2214 — номер порта, выбирается по желанию. в разных версиях nc нужно писать nc -l -p или nc -l
В локальной сети из дефолтно-настроенных убунт, можно обращаться к машинам по имени, а не по айпи: username-desktop.local отрезольвится в ip машины, которую назвали username-desktop
Avahi-browse -a быстро покажет список имен машин с в локальной сети, а ключ -r покажет сразу и их ip. требуется avahi, он есть в дефолтной убунте. сама команда — в пакете avahi-utils
Используйте set -e в скриптах. неотработавший «cd» во временный каталог может надолго испортить содержимое /home
Чтобы вернуться в предыдущий каталог, есть команда cd -. Еще есть команда dirs -v, показывающая историю переходов. Еще можно делать вот так: cd -2
Пишите в скриптах длинные --варианты параметров
Узнать сколько места занимает каждая папка: du -h -s -c /*
Не пишите в скриптах rm -rf $VAR/
Используйте visudo для редактирования sudoers
Потеряли пароль рута? при загрузке укажите ядру параметр init=/bin/bash и сбростье пароль через passwd
Пользуйтесь bash -x для отладки скриптов
Пользуйтесь strace для отладки всего остального. от лишнего выхлопа спасет параметр -e имявызова
Не путайте /bin/sh и /bin/bash, это не всегда одно и то же. особенно в дебиане, особенно в убунте
Если терминал переклинило после некорректного выхода из псевдографической программы иили вырвашегося на просторы stdout мусора, есть волшебная команда reset
exec >file в скрипте перенаправит его вывод в файл и не перезапустит скрипт
Используйте в скриптах mktemp для создания временных файлов и каталогов
Пишите переменные вот так: ${VAR}
VAR=X и export VAR=X — разные вещи
dd может показывать, сколько он уже скопировал, если пнуть его черз kill -USR1
Sudo echo > file открывает файл на запись не с правами рута. это делается так: sudo sh -c 'echo > file'
Пишите --параметры перед аргументами, иначе ls file -l в bsd вас удивит
Нормально работающие версии утилит в bsd и макоси имеют приставку g: gsed, gmake
В локальной сети из дефолтно-настроенных убунт, можно обращаться к машинам по имени, а не по айпи: username-desktop.local отрезольвится в ip машины, которую назвали username-desktop
Avahi-browse -a быстро покажет список имен машин с в локальной сети, а ключ -r покажет сразу и их ip. требуется avahi, он есть в дефолтной убунте. сама команда — в пакете avahi-utils
Используйте set -e в скриптах. неотработавший «cd» во временный каталог может надолго испортить содержимое /home
Чтобы вернуться в предыдущий каталог, есть команда cd -. Еще есть команда dirs -v, показывающая историю переходов. Еще можно делать вот так: cd -2
Пишите в скриптах длинные --варианты параметров
Узнать сколько места занимает каждая папка: du -h -s -c /*
Не пишите в скриптах rm -rf $VAR/
Используйте visudo для редактирования sudoers
Потеряли пароль рута? при загрузке укажите ядру параметр init=/bin/bash и сбростье пароль через passwd
Пользуйтесь bash -x для отладки скриптов
Пользуйтесь strace для отладки всего остального. от лишнего выхлопа спасет параметр -e имявызова
Не путайте /bin/sh и /bin/bash, это не всегда одно и то же. особенно в дебиане, особенно в убунте
Если терминал переклинило после некорректного выхода из псевдографической программы иили вырвашегося на просторы stdout мусора, есть волшебная команда reset
exec >file в скрипте перенаправит его вывод в файл и не перезапустит скрипт
Используйте в скриптах mktemp для создания временных файлов и каталогов
Пишите переменные вот так: ${VAR}
VAR=X и export VAR=X — разные вещи
dd может показывать, сколько он уже скопировал, если пнуть его черз kill -USR1
Sudo echo > file открывает файл на запись не с правами рута. это делается так: sudo sh -c 'echo > file'
Пишите --параметры перед аргументами, иначе ls file -l в bsd вас удивит
Нормально работающие версии утилит в bsd и макоси имеют приставку g: gsed, gmake
Выбираем планировщик.
Для начала проверим производительность HDD c разными планировщиками.
1.) sudo apt-get install hdparm
2.) Выполним маленький скрипт:
DISC="sda";
cat /sys/block/$DISC/queue/scheduler;
for T in noop anticipatory deadline cfq; do
echo $T > /sys/block/$DISC/queue/scheduler;
cat /sys/block/$DISC/queue/scheduler;
sync && /sbin/hdparm -tT /dev/$DISC && echo "----";
sleep 15;
done
Если диск не sda, то соответствующим образом правим кусок кода с объявлением: DISC="sda"
Рассмотрим разные планировщики.
Для реализации используются 4 очереди: 2 очереди
По реализации, CFQ подразумевает по одной FIFO-очереди на инициатора запросов и переключается между очередями по алгоритму Round-robin.
Не знаю, кому нужна такая честность, но переупорядочения запросов для минимизации перемещения считывающей головки жесткого диска в этом планировщике нет.
Планировщик Anticipatory базируется на Deadline. Подходит для десктопов, т.к. сохраняется отзывчивость подсистемы ввода вывода. Не подходит для RAID, TCQ. Плохо подходит в ситуациях, когда синхронные запросы посылаются разными процессами.
Чтобы посмотреть все доступные планировщики в системе и узнать, какой из них активен выполняем:
Здесь
Здесь
s
После внесения изменений нужно обновить конфигурацию grub:
Если у вас grub, а не grub2, то добавляем строку
1.) sudo apt-get install hdparm
2.) Выполним маленький скрипт:
DISC="sda";
cat /sys/block/$DISC/queue/scheduler;
for T in noop anticipatory deadline cfq; do
echo $T > /sys/block/$DISC/queue/scheduler;
cat /sys/block/$DISC/queue/scheduler;
sync && /sbin/hdparm -tT /dev/$DISC && echo "----";
sleep 15;
done
Если диск не sda, то соответствующим образом правим кусок кода с объявлением: DISC="sda"
Рассмотрим разные планировщики.
Noop
Простейший планировщик, работающий по принципу FIFO. Переупорядочения нет, слиянию могут подлежать только запросы, находящиеся рядом в очереди. Хорошо подходит для устройств со случайным доступом, вроде Flash памяти.Deadline
Планировщик, который ставит больший приоритет запросам на чтение, нежели запросам на запись. Запросы переупорядочиваются, но при этом время обработки запроса не должно превышать заданные пределы(по умолчанию, 0.5 с для чтения, 5 с для записи)Для реализации используются 4 очереди: 2 очереди
sorted-by-start-sector
(для чтения и для записи) и 2 очереди FIFO(тоже для чтения и для записи). Обычно, запросы берутся из сортированных очередей, но если поджимает deadline(таймаут) первого запроса из очереди FIFO, то обработка запросов продолжается по сортированным очередям с этого элемента. Лучше всего подходит для организации баз данных.CFQ — Completely Fair Queuing
Цель этого планировщика — честное распределения времени доступа к ресурсу всех инициаторов запросов. CFQ может быть настроен для уравнивания процессов, групп процессов, пользователей.По реализации, CFQ подразумевает по одной FIFO-очереди на инициатора запросов и переключается между очередями по алгоритму Round-robin.
Не знаю, кому нужна такая честность, но переупорядочения запросов для минимизации перемещения считывающей головки жесткого диска в этом планировщике нет.
Anticipatory
Ключевая идея — перед обработкой запросов можно немного подождать, отдохнуть. Зато за эти несколько миллисекунд, соберется информация наперед, которая позволит более взвешенно принимать решения, в каком порядке запросы выполнять.Планировщик Anticipatory базируется на Deadline. Подходит для десктопов, т.к. сохраняется отзывчивость подсистемы ввода вывода. Не подходит для RAID, TCQ. Плохо подходит в ситуациях, когда синхронные запросы посылаются разными процессами.
Чтобы посмотреть все доступные планировщики в системе и узнать, какой из них активен выполняем:
cat /sys/block/{DEVICE-NAME}/queue/scheduler
Здесь
{DEVICE-NAME}
— имя блочного устройства, например sda
. Смена планировщика на лету
Чтобы поменять планировщик в реальном времени без перезагрузки выполняем:sudo -i
echo {SCHEDULER-NAME} > /sys/block/{DEVICE-NAME}/queue/scheduler
Здесь
{SCHEDULER-NAME}
— один из присутствующих в системе планировщиков, у меня это: noop anticipatory deadline cfq
. Например, чтобы поставить планировщик deadline
, выполяем:sudo -i
echo deadline > /sys/block/sda/queue/scheduler
Фиксация настройки планировщика
Далее, нам нужно заставить Ubuntu использовать выбранный нами планировщик и после перезагрузки. Для этого добавляем строкуGRUB_CMDLINE_LINUX_DEFAULT="elevator={SCHEDULER-NAME}"
в конфиг GRUB 2.s
udo nano /etc/default/grub
После внесения изменений нужно обновить конфигурацию grub:
sudo update-grub
Если у вас grub, а не grub2, то добавляем строку
elevator={SCHEDULER-NAME}
в /boot/grub/grub.conf
.Своя сборка Ubuntu
Подготовка
Во время сборки часто придется выполнять команды с правами рута, поэтому сразу выполним:
| sudo -s |
Создадим папку, в которой и будем проводить все работы
| mkdir ~/MyUbuntu |
| cd ~/MyUbuntu |
Сделаем папку, в которую скопируем все файлы с образа компакт-диска убунты
| mkdir myubuntu_iso |
| mount -o loop /путь/до/ubuntu-10.04-desktop-i386.iso /mnt |
| rsync -a /mnt/ myubuntu_iso |
| umount /mnt |
А вот и пришло время распаковать уже сам squashfs-образ livecd, который из себя представляет корневую файловую систему убунты
| unsquashfs myubuntu_iso/casper/filesystem.squashfs |
| mv squashfs-root myubuntu_root |
Вход в chroot-окружение
Теперь можно приступить к изменениям. Для этого надо использовать chroot
| cp /etc/hosts myubuntu_root/etc/ |
| cp /etc/resolv.conf myubuntu_root/etc/ # Это строчка для того, чтобы в chroot-окружения работал инет |
| cp /etc/apt/sources.list myubuntu_root/etc/apt/sources.list # Это если вы планируете устанавливать ПО с помощью apt-get и т.п. |
| mount --bind /dev/ myubuntu_root/dev # Это для доступа к устройствам хостевого компа |
| chroot myubuntu_root |
Следующие команды необходимы для нормальной работы некоторых утилит в chroot-окружении, в частности — для самого apt-get, aptitude или synaptic
| mount -t proc none /proc |
| mount -t sysfs none /sys |
| mount -t devpts none /dev/pts |
| export HOME=/root |
| export LC_ALL=C |
| dbus-uuidgen > /var/lib/dbus/machine- id |
| dpkg-divert -- local --rename --add /sbin/initctl |
| ln -s /bin/ true /sbin/initctl |
Теперь есть возможность пользоваться консольными утилитами, как и в обычной убунте (nano, vi, apt-get, aptitude, gconftool-2, mv, cp и так далее)
Работа в chroot-окружении (установка пакетов, настройка и т. п.)
Если же хочется воспользоваться графическими утилитами (такими как synaptic, наприме), то в другом терминале запустите эту команду:
| Xnest -ac :1 |
И у вас появится окошко, в котором и будут работать гуишные проги. В самом-же chroot-окружении нужно указать монитор (то самое окошко xnest’а):
| export DISPLAY=localhost:1 |
И дальше уже можно спокойно запускать synaptic и т. п. Чтобы были рамки окон, тогда еще надо:
| metacity & |
Тут уже можно проделывать любые операции как в обычной убунте — будь то установка пакетов, изменение конфигов и т. п.
Небольшой пример использования gconftool-2, чтобы кнопочки в metacity были справа:
gconftool-2 --direct --config-source xml:readwrite:/etc/gconf/gconf.xml.defaults --type string --set «/apps/metacity/general/button_layout» «menu:minimize, maximize, close»
Выход из chroot-окружения
После проделанных изменений, нужно удалить временные файлы, отмонтировать фс и т. п.:
| aptitude clean |
| rm -rf /tmp/* ~/.bash_history |
| rm /etc/resolv.conf |
| rm /var/lib/dbus/machine- id |
| rm /sbin/initctl |
| rm /etc/apt/sources.list # Хотя этот файл можно оставить, если хотите, чтобы в сборке были прописаны зеркала |
| dpkg-divert --rename --remove /sbin/initctl |
| umount /proc |
| umount /sys |
| umount /dev/pts |
| exit # Выходим из самого chroot-окружения |
| umount myubuntu_root/dev |
Подготовка ISO-образа
Если мы изменили состав ПО в сборке, то надо выполнить следующие команды, которые сделают новые списки пакетов:
| chmod +w myubuntu_iso/casper/filesystem.manifest |
| chroot myubuntu_root dpkg-query -W --showformat= '${Package} ${Version}\n' > myubuntu_iso/casper/filesystem.manifest |
| cp myubuntu_iso/casper/filesystem.manifest myubuntu_iso/casper/filesystem.manifest-desktop |
| sed -i '/ubiquity/d' myubuntu_iso/casper/filesystem.manifest-desktop |
| sed -i '/casper/d' myubuntu_iso/casper/filesystem.manifest-desktop |
Собственно, файлы *.manifest — это список пакетов в системе и файл filesystem.manifest-desktop — это файл только тех пакетов, которые буду устанавливаться на комп. То есть, если вы хотите оставить пакет на livecd, но сделать так, чтобы он не ставился на компьютер во время установки, то просто удалите его упоминание в этом файле.
Если вы поменяли или обновили ядро в chroot-окружении, то это же ядро надо скопировать на сам диск, чтобы могли грузиться модули. Например:
| cp myubuntu_root/boot/vmlinuz-2.6.32-22-generic myubuntu_iso/casper/vmlinuz |
| cp myubuntu_root/boot/initrd.img-2.6.32-22-generic myubuntu_iso/casper/initrd.gz |
| gzip - dc myubuntu_iso/casper/initrd.gz | sudo lzma -7 > myubuntu_iso/casper/initrd.lz |
Теперь необходимо запаковать корневую файловую систему обратно в squashfs-образ:
| rm myubuntu_iso/casper/filesystem.squashfs |
| mksquashfs myubuntu_root myubuntu_iso/casper/filesystem.squashfs |
| rm -r myubuntu_root # Для экономии можно удалить распакованную корневую фс |
Если хотите, чтобы при загрузке livecd автоматически выбирался русский язык:
| echo "ru" > myubuntu_iso/isolinux/lang |
Так как в составе диска убунты поменяли файлы, нужно пересоздать файл md5sum.txt
| cd myubuntu_iso |
| rm md5sum.txt |
| find - type f -print0 | sudo xargs -0 md5sum | grep - v isolinux/boot. cat | sudo tee md5sum.txt |
И можно уже приступить к созданию самого iso-образа:
mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin /
-c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /
-o ../ubuntu-$VERSION-custom.iso .
Подписаться на:
Сообщения (Atom)