среда, 21 декабря 2011 г.

Проблемы с модемами от Билайн в linux

При обычном подключении через NM интернета от билайна не дождёшься. Метод проверен на модемах usb huawei 170 b 150, 170 билайна и 150 от мтс разблокированный. Нужно изменить точку доступа в NM с internet.beeline.ru на home.beeline.ru  и прописывании PIN с карты.

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

Настройка тачпада - скролл двумя пальцами

Создаём файл со следующим содержанием:


#!/bin/bash
synclient VertTwoFingerScroll=1
synclient HorizTwoFingerScroll=1
synclient EmulateTwoFingerMinW=5
synclient EmulateTwoFingerMinZ=48

exit 0

И ставим его на автозагрузку.

понедельник, 3 октября 2011 г.

Оптимизация через fstab

Итак, открываем файл /etc/fstab, в котором содержатся сведения о монтируемых при загрузке разделах. Ну и добавляем опции монтирования на выбор, в зависимости от того, что нужно получить в итоге… Опции зависят от файловой системы:
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 -
размеры окна

среда, 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.

Удаление 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.

вторник, 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.

Отвязка программы от консоли

Команда призвана закрыть консоль откуда была вызвана программа, но без закрытия самой программы.
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 (на экран).

 

воскресенье, 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 г.

среда, 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С
убрана лишь галочка - "разрешить менеджеру окон декорировать окна".

суббота, 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.) Перезагружаемся.
Всё, карточка работает.

вторник, 19 июля 2011 г.

Автокоррекция названиях директорий

Включаем автокоррекцию:
$ shopt -s cdspell

Если теперь мы сделаем опечатку в команде cd:
$ cd /usk/local
то все равно попадем в /usr/local

воскресенье, 17 июля 2011 г.

GUI Hamachi в ubuntu

1.) Качаем и ставим пакет hamachi.

2.) Качаем и ставим пакет для GUI.

sudo add-apt-repository ppa:webupd8team/haguichi
sudo apt-get update
sudo apt-get install haguichi


Ну и всё.

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

Установка индивидуальных deb пакетов с автоматическим удовлетворением зависимостей

Для установки deb пакета с удовлетворением всех зависимостей:

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 и производных дистрибутивов.
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/ в любом браузере и видим приглашение на вход.

О том, как расшарить сканер.

Предполагаем, что локально сканер на сервере настроен и работает (см. sane).
Теперь нужно выполнить следующие действия:

На сервере:
1) Ставим демон saned (входит в состав разных пакетов, в зависимости от дистрибутива, наример sane-utils или sane-server) и xinetd.
.
2) В /etc/sane.d/saned.conf добавляем ip клиента(ов) (см. примеры в том же файле).
3) Создаем файл /etc/xinetd.d/saned (для автоматического запуска сервера сканирования сетевым демоном xinetd) вида:
service sane-port
{
disable = no
socket_type = stream
protocol = tcp
user = scanner
wait = no
server = /usr/sbin/saned
}
(здесь предполагается, что в системе присутствует пользователь "scanner" с правами на доступ к сканеру. конечно можно задать пользователя, от имени которого будет запускаться демон saned, по желанию. root строго не рекомендуется)
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

четверг, 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 пакет.

Бэкап с помощью rsync

Я предлагаю вам довольно эффективный способ делать бэкапы — rsync+crontab. Главным преимуществом данного метода перед обычным копированием (cp) — скорость работы, т.к. копируются не все файлы, а только те, которые были изменены после предварительного бэкапа.
Приступим
Для начала я смонтировал второй 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:

$ 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:

$ /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 выполняем:

dpkg --get-selections > selections.txt

Теперь необходимо скопировать получившийся файл на host2.
Поставим флаги на host2:
dpkg --set-selections < selections.txt 

и наконец-то установим весь список софта:
apt-get -u dselect-upgrade 

В результате имеем 2 машины с абсолютно одинаковым набором установленого софта.

LogWatch -отчёт и анализ состояния сервера Linux по почте

Утилита LogWatch анализирует 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 )
Примеры использывания:
$ 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 занимается
Нашлась достаточно альтернатив dd - pv:

pv /dev/sda > /dev/sdb

среда, 6 июля 2011 г.

Полное резервирование Linux-системы

Самый простой способ полностью заархивировать систему в один Tar-архив, который при необходимости можно будет развернуть обратно. Для этого надо с правами root зайти в консоли в корень системы и затарить все данные:

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"

Wine захламляет диалог “Открывать в приложении”

rm ~/.local/share/applications/wine-*.desktop

Создаем свои шаблоны для меню “Создать документ”

Простейший примером может служить сценарий для Bash.Итак создаем в папке ~/Шаблоны файл Сценарий Bash.sh. Открываем его и записываем:

#!/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.) Перезагружаем систему.

вторник, 28 июня 2011 г.

Как узнать версию Ubuntu и версию ядра.

Часто возникает необходимость определить версию дистрибутива Ubuntu, которая установлена у вас на компьютере и текущую версию ядра.

Определяем версию 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 вы можете получить дополнительные возможности при работе с терминалом, такие как:
  • перемещение курсора в любую позицию экрана;
  • получение информации о терминале;
  • установка цвета символов и фона;
  • печать жирным шрифтом;
  • печать в инверсном режиме и т. п.
Пример кода с использованием 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

Выбираем планировщик.

Для начала проверим производительность 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"


Рассмотрим разные планировщики.

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.
sudo 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 .