вторник, 27 декабря 2011 г.

бэкап винда из под линухи

Итак, если кому-то вдруг понадобится:

1) Создание образа NTFS-раздела (раздел не монтируем):
КОД: ВЫДЕЛИТЬ ВСЁ
ntfsclone -s -o backup.img /dev/sda1
2) Восстановление из образа на диск:
КОД: ВЫДЕЛИТЬ ВСЁ
ntfsclone -r -O /dev/sda1 backup.img
3) Создание образа со сжатием (у меня 2Гб ужало в 1.1, весьма неплохо) просто gzip'ом:
КОД: ВЫДЕЛИТЬ ВСЁ
ntfsclone -s -o - /dev/sda1 | gzip -c > backup.img.gz
4) Восстановление из сжатого образа на диск:
КОД: ВЫДЕЛИТЬ ВСЁ
gunzip -c backup.img.gz | ntfsclone -r -O /dev/sda1 -

Обратите на знаки - в двух последних примерах, они означают "брать данные со стандартного входа/вывода". Если делать не образом, то файл получается в размер диска.. а так вообще замечательно =) Если непонятно, что значат всякие -s, -r, -o, -O наберите ntfsclone --help, все сразу станет ясно, я не стал их тут расписывать. =) Надеюсь кому-нибудь тоже пригодится.

пятница, 28 октября 2011 г.

дополнения для eclipse

http://dl.google.com/eclipse/plugin/3.5


http://download.eclipse.org/releases/galileo

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

Делаем nginx как front-end к apache

Настраиваем nginx
Создаем файл конфигурации в директории: /etc/nginx/sites-available
server {
listen *:80; ## listen for ipv4
server_name ВАШ_ДОМЕН;
access_log /var/log/nginx/access.log;
# Перенаправление на back-end
location / {
proxy_pass ВАШ_ДОМЕН:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Статическиое наполнение отдает сам nginx
# back-end этим заниматься не должен
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
root ПУТЬ_ДО_КОРНЕВОГО_КАТАЛОГА_САЙТА;
}
}

установка Apache, PHP, MySQL и ngin

Установка Apache
apt-get install apache2
[+mod_rewrite]
a2enmod rewrite

Установка PHP
apt-get install php5-cli

Установка MySQL
apt-get install mysql-server
apt-get install mysql-client-core-5.1
apt-get install php5-mysql

Установить nginx
apt-get install nginx
Конфиги -> /etc/nginx

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

установка nginx ubuntu

sudo apt-get install nginx

sudo nano /etc/nginx/sites-available/default


server {
listen 80;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;

## Default location
location / {
root /var/www;
index index.php;
}

## Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 30d;
root /var/www;
}

## Parse all .php file in the /var/www directory
location ~ .php$ { Место ~. PHP $ (
fastcgi_split_path_info ^(.+.php)(.*)$;
fastcgi_pass backend;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}

## Disable viewing .htaccess & .htpassword
location ~ /.ht {
deny all;
}
}
upstream backend {
server 127.0.0.1:9000;
}





sudo apt-get install php5-cli php5-common php5-suhosin

sudo apt-get install php5-fpm php5-cgi


sudo /etc/init.d/nginx restart
sudo /etc/init.d/php5-fpm restart

добавление и удаление автозагрузки ubuntu

sudo update-rc.d apache2 disable
sudo update-rc.d apache2 enable

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

Надёжный и безопасный Linux

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

  1. Это приведёт с излишнему разрастанию статьи
  2. Маны и гугл никто не отменял
  3. Пункт 2 очень полезен для развития специалиста


Итак, как повысить безопасность и надёжность сервера (да и рабочей станции) на базе линукс?



Эту задачу я разделю на 3 части:
  1. (Про)активное обеспечение безопасности — ужесточение настроек системы и демонов. Сюда же относится настройка файрвола.
  2. Пассивное обеспечение безопасности и надёжности — мониторинг системы.
  3. Бэкапы

Ужесточение настроек системы

  1. Отключить неиспользуемые сервисы/демоны. Внимательно просмотреть список процессов (например по команде ps -ef | less ) и определить те из них, которые вам не нужны. Убедиться в том, что они не нужны самой системе. Отключить.
  2. Если это возможно, то изменить стандартные порты и интерфейсы на которых слушают оставшиеся сервисы и настроить дополнительные ограничения по безопасности средствами самих сервисов (т.е путем редактирования их конфигурационных файлов / добавления ключей к параметрам запуска).
    Проиллюстрирую на примере sshd. Здесь необходимо сделать следующее — изменить стандартный порт с 22-го на любой свободный, например на 6622. Запретить доступ под логином root. Жёстко задать список разрешённых для доступа имён пользователя. Разрешить sshd прослушивать только определённый адрес. Как вариант разрешить доступ только по ключу, но мне это не очень нравится
  3. Iptables
    Настройка файрвола очень интересная тема, которой нужно посвятить отдельную статью.
    Основные принципы таковы:
    Файрвол должен работать по принципу белого списка, т.е всё что не разрешено явно, является запрещённым.
    Это достигается установкой политики файрвола по умолчанию командами iptables -P INPUT DROP, iptables -P OUTPUT DROP и iptables -P FORWARD DROP. После выполнения этих команд весь входящий, исходящий и транзитный трафик, для которого не создано разрешающих правил будет заблокирован, поэтому выполнять их следует с осторожностью.
    Перед тем, как хоть что-то делать с iptables настоятельно рекомендую изучить отличное руководство от Oskar Andreasson
    При его прочтении обратите внимание на цель (действие) LOG, которое позволяет записывать в лог различные данные по попадающим в систему пакетам. Это очень сильно помогает при первоначальном написании файрвола. Могу посоветовать примерно такой порядок настройки файрвола:
    a) Написать все нужные правила
    б) В конец каждой цепочки добавить правило логирования (оно будет отлавливать все пакеты, которые вы не учли в предыдущих правилах и записывать информацию о них в сислог)
    в) Включить файрвол
    г) Находить неучтённые вами соединения в сислоге и добавлять правила для них в файрвол.
    Пункт (г) повторять до исчезновения записей в сислоге.
    Понятно, что не следует бездумно добавлять всё, что появляется в сислоге т.к там будут видны и результаты попыток несанкционированного доступа.
  4. SELinux
    Очень интересная и перспективная вещь. Ограничивает права процессов по доступу куда-либо. Каждое действие, которое разрешено делать процессу должно быть прописано в политике, сопоставленной с ним.
    Существует ещё одна аналогичная система — Apparmor (насколько я знаю она используется в ubuntu linux).
    Честно говоря с обеими системами я ещё не работал вплотную (поэтому рекомендаций особых дать не могу), частично использовал SELinux в одном проекте, но ввиду цейтнота по времени, в котором я тогда находился, пришлось временно эту задачу отложить. В скором времени однозначно вернусь к настройке SELinux т.к он мне весьма понравился.

Мониторинг

Взломы и аварии, как известно лучше предотвращать, чем устранять их последствия.
В этой связи очень актуальна грамотно настроенная система мониторинга, которая при первых признаках проблемы сразу подаст сигнал администратору.
  1. Nagios
    Существует несколько крупных систем мониторинга (nagios, zabbix, cacti, munin).
    Я пробовал их все и в итоге остановился на Nagios. Очень удобная и гибкая в настройке система.
    Огромное количество плагинов для мониторинга, а если подходящего плагина нет, можно написать свой на любом удобном вам языке (я например использую для этого bash и python).
    Как минимум необходимо настроить мониторинг загрузки процессора, памяти, свапа, свободного места на диске, load average. Очень желательно мониторить доступность критичных сервисов (например apache, mysql, nginx, tomcat итд).
  2. MRTG/RRD
    Динамику изменения различных показателей удобно просматривать на графиках, генерируемых с помощью MRTG.
    MRTG позволяет просмотреть в удобном виде зависимость различных системных параметров от времени.
    Например можно посмотреть то, как изменяются загрузка процессора и памяти в зависимости от времени суток. Рисовать графики можно практически для любых показателей — от температуры процессора, до количества запросов к базе данных. MRTG это инстумент, крайне полезный для анализа состояния системы.
    У MRTG есть несколько ограничений и недостатков, которые можно обойти воспользовавшись утилитой RRD от того же автора.
  3. Smartd + smartmontools
    Позволяет мониторить состояние жёстких дисков и выявлять подозрительные показания на самом раннем этапе. Можно интегрировать в Nagios.
    Например отличное от нуля значение переменной Reallocated_Sector_Ct указывает на то, что на диске появились бэд секторы, причём появились уже давно т.к smart узнаёт о наличии бэдов только после того, как переполняется заводская remap таблица (тут могу немного ошибаться, теорию по этому поводу давно не обновлял, возможно у современных жёстких дисков бэды сразу видны через smart).
    Можно и нужно настроить smartd так, чтобы все подозрительные показания сразу же высылались по электронной почте администратору.
  4. Анализаторы логов
    Ясно, что вручную мониторить логи системы на предмет ошибок занятие неблагодарное.
    Для этой цели уже давно существует много анализаторов логов.
    Советую поставить сразу несколько систем и выбрать ту, что понравится больше.
    Начать можно с logwatch.
  5. Remote syslog
    Как вы думаете, какова первая цель злоумышленника, проникшего в какую-либо систему?
    Цель — скрыть своё присутствие.
    Для этого он обязательно удалит все упоминания о своих действиях из логов системы (а также попробует подменить некоторые системные утилиты, но об этом ниже).
    Для того, чтобы защититься от негативных последствия удаления логов необходимо организовать их запись на удалённый сервер. Желательно, чтобы ssh доступ на этот сервер был невозможен (самому можно заходить через IP KVM) либо сильно затруднён, иначе ничего не помешает взломщику удалить хранящуюся там немодифицированную копию логов. На самом лог сервере удобнее всего хранить логи в какой-либо СУБД.
  6. HIDS и NIDS
    HIDS мониторит состояние системы (логи, целостность системных утилит итд) и при подозрении на нарушение безопасности информирует об этом администратора. Она поможет в случае, если злоумышленник из предыдущего пункта подменит какую либо системную утилиту с целью скрыть своё присутствие либо обеспечить себе вход в систему. Например можно подменить утилиты ps, who, w, last с тем, чтобы администратор не мог видеть кто залогинен в системе в настоящий момент. Заменить утилиты iptables и sshd с тем, чтобы они позволяли злоумышленнику свободно входить в систему. Одним из примеров HIDS является OSSEC.
    HIDS конечно не сможет помешать таким действиям, но вполне сможет уведомить о них администратора.
    NIDS Если HIDS мониторит внутреннее состояние системы, то NIDS анализирует подозрительную сетевую активность (сканирование портов, попытки подбора паролей, различные атаки против сервисов системы итд). Наиболее известной NIDS является Snort.


Бэкапы

  1. Как известно системные администраторы делятся на тех, кто не делает бэкапы, на тех, кто их уже делает и на тех, кто думает, что их делает.
    Это изречение наполнено глубоким смыслом.
    Бэкапы могут понадобиться во многих случаях, например после аппаратных проблем с системой, после её взлома, после некорректных действий администратора или разработчика.
    Можно условно разделить бэкапы на бэкапы файловой системы и бэкапы баз данных.
    Очень желательно иметь отдельный сервер для хранения бэкапов, в идеале ещё и находящийся отдельно от всего остального оборудования. Отдельно значит на расстоянии километров 5, не меньше.

    Для бэкапа написано много разнообразного ПО, но я предпочитаю использовать скрипты, написанные лично мной. Так я получаю полный контроль над процессом.
    Для бэкапа файловой системы проще использовать rsync с подходящими ключами. В большинстве случаев удобнее делать инкрементальный бэкап.
    Для бэкапов баз данных лучше всего использовать утилиты, предоставленные производителями СУБД, но в случае с mysql я немного отошел от этого правила.
    Стандартная утилита для бэкапа — mysqldump не очень хорошо ведёт себя при снятии бэкапа, а именно — она «лочит» таблицы на запись, запрещая писать в них в момент бэкапа (хотя в случае с innodb этого можно было бы вполне избежать, но mysqldump не умеет этого делать). Это очень актуально при использовании больших баз, размером хотя бы 10-20 Гб, где блокировка таблицы может длиться 10-20 минут. Кроме того восстановление больших баз из такого бэкапа занимает многие часы.
    В такой ситуации более разумно использовать систему master->slave.
    На бэкап сервере настраивается mysql slave для той базы, которую необходимо бэкапить. В дальнейшем бэкапы снимаются уже не с основной базы, а с её slave-а. В случае же аварии можно даже сразу не восстанавливать базу, а просто перенаправить все запросы на slave сервер, что позволит сильно сэкономить время. Для снятия бэкапов со slave сервера и для его первичной подготовки удобно использовать утилиту Innobackupex от компании Percona. Она например позволяет сделать бэкап, пригодный для последующего поднятия slave сервера без остановки основной базы (без блокировки её на запись).


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

понедельник, 30 мая 2011 г.

востановление mbr windows 7

Решение 2. Восстановление при помощи командной строки:
Проделайте те же действия, что и в Решении 1 до появления окна System Recovery Options, но выберите не Startup Repair, а Command Prompt. Затем, после появления сообщения системы X:windowssystem32> напишите bootsect /nt60 All, запустив процесс восстановления загрузчика. По завершению работы в ответ на сообщение системы X:windowssystem32> напишите exit → Enter. В окне System Recovery Options выберите Restart. Затем загрузите Windows 7 в штатном режиме.

понедельник, 9 мая 2011 г.

карьера системного администратора


Что подразумевают под системным администрированием?


(речь про сисадминов-универсалов, конечно)
  • Администрирование сети. В минимальном виде это «гуру конфигурации десктопного wi-fi роутера», в максимальном — человек, который спланирует сеть на 1000 человек с филиалами в пяти городах. В это входит: топология сети (какую железку в какую втыкать и зачем), планирование СКС (где и сколько розеток), конфигурация nat'ов и vpn'ов и т.д. В эту же кучу идут и всякие сервисы контроля доступа в интернет — squid, IIS, умные и тупые файрволы, IDS и т.д.
  • Администрирование рабочих станций. Сгоревшие БП, переустановка виндов, решение проблемы с очередным банк-клиентом, починка отвалившейся печати, решение проблемы «чем мне открыть этот файл», борьба с вирусами для windows и т.д. Минимальный уровень — установить офис, максимальный — разработать групповую политику для автоматического накатывания новой версии софта, которая не имеет msi (самому делать придётся). Заодно решаются проблемы с автоматическим деплоем рабочих станций, бэкапов, безопасного удаления и т.д.
  • Централизованная авторизация. Обычно в этом качестве выступает Active Directory. Одна из самых «чистых» дисциплин, она же одна из самых сложных. Минимальный уровень — добавить/удалить пользователей, вогнать рабочую станцию в домен. Максимальный — реализовать автоматическое назначение политик на пользователей заданного OU в случае доступа к компьютеру в одном из узлов соседнего дерева в лесу (мы все любим эту терминологию, да).
  • Почта. Условно делится на три мира: мелкие виндовые почтовые сервера (класса Kerio), могучий и ужасный Exchange, нормальный linux/freebsd сервер с любым вменяемым почтовым сервером (postfix, exim, sendmail и т.д.). Минимальный уровень: добавить почтовый ящик, добавить ещё один домен и добавить дополнительный емейл пользователю. Максимальный уровень: настроить почтовую тикет-систему, список рассылки, фильтрацию спама, автоматическое заведение ящиков и т.д.
  • Базы данных — чаще всего является частью другой инфраструктуры. Специализированные администраторы баз данных — совсем отдельная лига. Минимальный уровень: установить, перезапустить, подключить в приложении, добавить/удалить БД. Обычно так же умение сделать бэкап и его восстановить (что сложнее). Максимального уровня нет, т.к. если вы хорошо знаете какую-либо СУБД, SQL, способны развернуть сервер с активной асинхронной подпиской на другую БД, то это уже не совсем «универсальный системный администратор». Условным потолком можно считать способность починить побившуюсь MyISAM базу данных.
  • 1C. Не смотря на то, что 1C — это такая фирма, выпускающая игрушки и обучающие диски, под «1С» обычно подразумевают 1C: Предприятие, 1С: Бухгалтерию и прочие кошмарные порождения извращённого соития бухгалтерии и программирования. Человек, который много про «это» знает, называется «программист 1С» (не путать с нормальными программистами). Минимальный уровень: создать новую базу, завести/удалить пользователя. Максимальный уровень: поправить конфигурацию, добавить поле в отчёт, разбираться с тем, как 1С возлежит с SQL.
  • Сайты. Под этим может подразумеваться почти что угодно — от «заказать shared-хостинг» до «решить проблему производительности в django-orm при работе с postregsql». Запросто в эту область может оказаться включенным копирайтинг, поисковый спам (SEO), веб-дизайн, веб-программирование и т.д. Минимальный уровень: уметь чуть-чуть верстать в html, максимального не существует, т.к. перечислены разные профессии. Кстати, среди них есть и настоящая систадминская: администратор web-сервера — load ballancing, failover, high avablility, кластеры и т.д., что опять же выходит за категорию «универсальности».
  • Системы контроля доступа и видеонаблюдение. Чаще всего их делают специализированные организации, однако, бывает, что приходится возиться и системному администратору. Минимальный уровень: подцепить ещё одну камеру, прописать карточку доступа. Максимальный уровень: автоэкспорт видео в архив, синхронизацию всех видов контроля. Будущее с большой вероятностью не админское, насколько я знаю, эту область администраторы обычно не любят.
  • АТС. Ещё одна область, которая попадает в системное администрирование случайно. Минимальный уровень: добавить переадресацию, подключить дополнительную входящую линию. Максимальный уровень: поднять свой астериск с голосовым меню на 300 пунктов, sip-skype гейтом, маршрутизацией, способной перкидываться между IP, медью и E1 в зависимости от условий. Ещё сюда часто попадает телефонная legacy, «обстучать крон», разбираться в всяких плезиосинхронных входящих линиях, E1 и т.д. Повторю, это не админская специализация — вообще этим занимаются телефонисты.
  • Печать/сканирование. Чаще всего тривиальная задача, пока не приходится делать принтеры сетевыми и решать проблемы всяких промышленных принтеров. Минимальный уровень: подцепить принтер; Максимальный уровень — решить проблему цветовых профилей, подключить принтер этикеток в качестве сетевого, автоматически назначать принтеры при входе пользователя на компьютер.

Помимо этого есть множество специфичных областей: терминальные серверы, различные ERP/CMS, служебный софт для обслуживания сети и т.д.

Подводя итог: невозможно быть не то, что профессионалом, но хотя бы более-менее хорошо знать всё это. Но знать надо. Именно на этом противоречии и строится карьера начинающего администратора.

Отдельно нужно сказать о тех, с кем вы столкнётесь при собеседовании. В отличие от остальных случаев, собеседовать вас будут с 99% вероятностью люди, далёкие от компьютеров. И проверять они будут не ваши знания, а вашу адекватность и «бойкость ответов». Если вы их закидаете умными словами, вас не воспримут адекватно.

Кто такой помощник системного администратора?

… aka эникейщик.
Это человек, на которого сваливают всю плохоформализуемую и нудную работу, общение с пользователями и возню с железом.

Основные вещи, которые обычно делает эникейщик:
  • helpdesk — стол вспоможения. Отвечать на телефонные звонки сотрудников, показывать как нажимать any key, помогать найти кнопку сортировки столбцов и выковыривать застрявший в приводе диск.
  • Подготовка рабочих станций — установка, подключение, укладывание проводов, установка ОС и софта и т.д.
  • Решение всякой неизлагаемой словами фигни с пользовательскими приложениями — особенно это касается софта из налоговой и банк-клиентов.
  • Исправление СКС (новые розетки, перенос существующих), диагностика проблем, коммутация, если стоят кроссы, то их расшитие.

Если в компании нет эникейщика, то его обязанности исполняет системный администратор.

Заметим, «помощник системного администратора» чаще всего практически расходный материал с высокой текучкой. В одной компании дело доходило до того, что начальник отдела не знал по именам всех помощников администраторов (3 шт), ибо хоть кто-то но раз в месяц-полтора уходил.

С точки зрения эникейщика — такая работа — это трамплин в системное администрирование, но никак не основная профессия.

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

Кто идёт в эникейщики?


Мой опыт говорит, что туда идут обычно люди без профильного образования. Чаще всего молодые, хотя я собеседовал дядю 42 лет на должность «помощник системного администратора». Не смотря на то, что описанные выше обязанности вроде бы являются почти тривиальными, для многих это самый сложный шаг. Стать администратором из помощника администратора легче, чем стать помощником сисадмина.

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

Карьера


Типичная карьера выглядит так: помощник системого администратора (или администратор в маленькой компании с 5-8 человеками), администратор, администратор (может быть ещё 2-3 раза администратор), начало настоящей специализации. Специализация может быть двух видов: повышение технического уровня (вместо поверхностных знаний обо всём, глубокие знания о немногом), и административная карьера — начальник IT-отдела, CIO (ИТ-директор) и т.д. Это два совершенно разных направления — первое связано с компьютерами, второе — с людьми, управлением персоналом, планированием, бюджетированием, совещаниями и т.д.

Переход с этапа на этап определяется несколькими факторами: 1) Теоретическими знаниями 2) Практическими навыками 3) Знанием реалий 4) Связями и отношениями с другими людьми (как внутри компании, так и за её пределами).

Среди этого не очень понятным выглядит третий пункт. Что такое «реалиии»?

понедельник, 2 мая 2011 г.

записки про bash


При запуске программы проверяются
условия:
- право на исполнение
- является ли файл бинарным
исполняемым файлом
- если это текстовый файл, есть ли
в первой строке путь к интерпретатору
При использовании bash первая строка
shell script должна быть такой:
#! /bin/bash


Пример использования переменной:
PERM=value
echo $PERM


Три способа определения массивов:
MASS[0]=value
MASS=([0]=value1 [5]=value2)
MASS=(value1 value2)
Получение значения элемента массива:
${MASS[0]}
Получение значений всех элементов массива:
${MASS[*]} или ${MASS[@]}


Для просмотра всех переменных окружения и функций можно воспользоваться командой set.
Программа env покажет только переменные, а export — только переменные помеченные как
экспортированные. Удаление переменных происходит при помощи оператора unset.


Оператор read
read [переменная ...]
если оператор read вызывать без указания переменной, он все данные, введенные
пользователем, поместит в переменную по умолчанию — REPLY


В подстановке используется то, что
программа будет выводить на
стандартный вывод.
Два варианта записи подстановки:
`program`
$(program)


В shell script используется ограниченный
набор арифметических операций:
+ - * / и круглые скобки.
Для подстановки значения
арифметических выражений
используется:
$(( выражение ))
Если значение переменной,
используемой в арифметическом
выражении, не является целым числом,
то её значение считается равным 0.


Оператор if
if условие
then
список операторов
[else
список операторов ]
[elif условие
список операторов ]
fi




test [опции] условия ...
Программа test предназначена для
проверки следующих типов условий:
- сравнение различных значений,
- проверка типов и наличия файлов,
- проверка логических условий.


Программа может проверить два типа логических условий И (AND) и ИЛИ (OR).
● Выражение1 -а Выражение2 — возвращает истину, если истинно и Выражение1 и
Выражение2.
● Выражение1 -о Выражение2 — возвращает истину, если истинно или Выражение1
или Выражение2.
● Оператор ! инвертирует значение логического выражения.
● Сравнение чисел происходит при помощи следующих операторов:
● число1 -eq число2 — истина, если числа равны.
● число1 -ne число2 — истина, если числа не равны.
● число1 -gt число2 — истина, если первое число больше второго.
● число1 -ge число2 — истина, если первое число больше или равно второму.
● число1 -lt число2 — истина, если первое число меньше второго.
● число1 -le число2 — истина, если первое число меньше или равно второму.
● Сравнение строк:
● -n строка — истина, если строка имеет не нулевую длину.
● -z строка — истина, если строка имеет нулевую длину
● строка1 = строка2 — истина, если строка1 идентична строке2.
● Проверка существования и типов файлов:
● -e /путь/к/файлу — истина, если файл существует.
● -f /путь/к/файлу — истина, если файл существует и является обыкновенным
файлом.
● -d /путь/к/файлу — истина, если файл существует и является директорией.
● -L /путь/к/файлу — истина, если файл существует и является символьной
ссылкой.
● -r /путь/к/файлу — истина, если файл существует и доступен для чтения.
● -w /путь/к/файлу — истина, если файл существует и доступен на запись.
● -x /путь/к/файлу — истина, если файл существует и доступен на выполнение.
● -s /путь/к/файлу — истина, если файл существует и имеет не нулевую длину.




&& ― логическое И.
|| ― логическое ИЛИ.



Оператор case
case строка in
шаблон)
список операторов
;;
[ шаблон)
список операторов
[;;] ]
esac


Оператор for
for переменная [ in список ]
do
список операторов
done


Получение данных из внешних файлов
for I in `cat ./sample13-data`


Оператор while
while условие
do
набор операторов
done


Оператор select
select переменная in список
do
набор операторов
done



Оператор точка и функции
Оператор точка позволяет включать код, находящийся в другом файле.
function sample
{
Тело функции.
}
sample()
{
Тело функции.
}










воскресенье, 1 мая 2011 г.

Мешок банальных советов

  • очень простой способ передать файлы с машины на машину — tar cz. | nc -l -p 2214 (на передающей стороне) и nc адрес 2214 | tar xz (на принимающей). 2214 — номер порта, выбирается по желанию. в разных версиях nc нужно писать nc -l -p или nc -l
  • в локальной сети из дефолтно-настроенных убунт, можно обращаться к машинам по имени, а не по айпи: username-desktop.local отрезольвится в ip машины, которую назвали username-desktop. это магия mdns, спасибо apple
  • avahi-browse -a быстро покажет список имен машин с в локальной сети, а ключ -r покажет сразу и их ip. как и в предыдущем хинте, требуется avahi, он есть в дефолтной убунте. сама команда — в пакете avahi-utils
  • пользуйтесь ctrl-R в консоли, чтобы не жать «вверх» по сто раз
  • history не резиновый. если что-то было забито в историю интерпретатора, рано или поздно оттуда может исчезнуть, не полагайтесь на него, как на справочник
  • используйте set -e в скриптах. неотработавший «cd» во временный каталог может надолго испортить настроение содержимое /home
  • проверяйте код возврата
  • чтобы вернуться в предыдущий каталог, есть команда cd -. в zsh еще есть команда d еще есть команда dirs -v, показывающая историю переходов. еще в zsh можно делать вот так: cd -2
  • пишите в скриптах длинные --варианты параметров
  • не пишите в скриптах rm -rf $VAR/
  • используйте visudo для редактирования sudoers
  • потеряли пароль рута? при загрузке укажите ядру параметр init=/bin/bash и сбростье пароль через passwd
  • у грепа есть полезный параметр --color
  • команда, чтобы перечитать отредактированный файл с переменными окружения: source /etc/environment .
  • пользуйтесь bash -x для отладки скриптов
  • пользуйтесь strace для отладки всего остального. от лишнего выхлопа спасет параметр -e имявызова
  • не путайте /bin/sh и /bin/bash, это не всегда одно и то же. особенно в дебиане, особенно в убунте
  • настройте алиасы
  • если на команду повешен алиас, то запустить ее «настоящую» можно, добавив в начале бэкслеш например: \ls
  • если терминал переклинило после некорректного выхода из псевдографической программы иили вырвашегося на просторы stdout мусора, есть волшебная команда reset
  • exec >file в скрипте перенаправит его вывод в файл и не перезапустит скрипт
  • уже написали вагон скриптов? забекапьте
  • не храните все в / или /home
  • lvm уже придумали
  • используйте в скриптах mktemp для создания временных файлов и каталогов
  • пишите переменные вот так: ${VAR}
  • VAR=X и export VAR=X — разные вещи
  • dd может показывать, сколько он уже скопировал, если пнуть его черз kill -USR1
  • kill может принимать аргументом номер задачи, а не только идентификатор процесса: kill %1
  • jobs, bg, fg, disown — тоже так умеют
  • если «вышли» из программы через ctrl-Z, вернуться можно командой fg
  • rsync нужен не только для сетевых операций
  • rm something и rm something/ — это разные вещи. и не только в rm, cp, ls и rsync — тоже
  • watch и repeat уже написаны, не надо велосипедить их через while true
  • at тоже уже написан, а sleep понимает время не только в секундах
  • sudo echo > file открывает файл на запись не с правами рута. это делается так: sudo sh -c 'echo > file'
  • если скрипт запускается в линуксе, это не значит, что он так же хорошо отработает в bsd или макоси
  • пишите --параметры перед аргументами, иначе ls file -l в bsd вас удивит
  • грепаете вывод ifconfig? ifconfig тоже бывает разный
  • нормально работающие версии утилит в bsd и макоси имеют приставку g: gsed, gmake

Как поднять сервер для python скриптов за 1 минуту

Сам сервер запускается одной коммандой:
python -m CGIHTTPServer
Как вы можете видеть, по умолчанию он использует 8000й порт и предоставляет доступ к текущей директории терминала. Но скрипты должны запускаться из папки «cgi-bin» текущей директории. Например так:
localhost:8000/cgi-bin/helloworld.py
Спасибо за внимание, удачного тестирования скриптов!

четверг, 14 апреля 2011 г.

Synergy управление несколькими компьютерами с одного

Представим себе ситуацию, что у вас
есть ноутбук и обычный десктоп. Вот
стоят они рядом включенные и вам
надо работать сразу на двух. Каждый раз,
когда нужно сделать что-то на ноутбуке
приходится перемещать руки на его кла-
виатуру и тачпад? No way!
Synergy – программа, дающая воз-
можность управлять двумя или более
компьютерами, используя одну мышь и
одну клавиатуру.
КАК?
Все компьютеры, которыми будем
управлять, необходимо разделить на две
группы: клиенты и сервер. Сервер – тот
компьютер, мышь и клавиатура, которого
мы будем использовать.
Для настройки можно использовать
конфигурационный файл или надстройку
с графическим интерфейсом. Но для нача-
ла надо установить саму программу (deb).
И да, Synergy подойдет для компьюте-
ра с Win, Lin и Mac.
1. КОНФИГ
Создаем файл synergy.conf (неважно
где, при запуске можно указать местопо-
ложение файла) с содержимым (пример
для двух компьютеров, компьютер2 рас-
положен слева от компьютера1)
section: screens
имя_комп1:
имя_комп2:
end
section: links
имя_комп1:
left = имя_комп2
имя_комп2:
right = имя_комп1
end
В первой секции идет настройка всех
компьютеров: двоеточие в конце строк обя-
зательно, после него можно указывать оп-
ции. Во второй секции идет настройка поло-
жения компьютеров путем указания соседа.
ualinux.com
Надо заметить, что имя_комп1 – имен-
но имя компьютера, а не его IP-адрес
(your-desktop вместо 192.168.0.103).
На компьютере-сервере выполняем
команду:
synergys -f --config synergy.
conf
Сервер заработал (или выдал сообще-
ние об ошибке, если что-то сделано не так).
На компьютерах-клиентах выполняем:
synergyc -f IP_адрес
Вот здесь необходимо уже указать
IP-адрес сервера. Пример конфиг-файла
и команд запуска для двух компьюте-
ров можно посмотреть тут (http://paste.
ubuntu.com/563332/).
Топология
Пример
конфигурационного-файла
для Synergy.
Два компьютера:
alexander-desktop (192.168.0.103) - сервер
alexander-laptop (192.168.0.104) - клиент
Desktop - правый сосед для laptop.
Laptop - левый сосед для desktop.
Текст конфиг-файла
section: screens
alexander-desktop:
alexander-laptop:
end
section: links
alexander-desktop:
left = alexander-laptop
alexander-laptop:
right = alexander-desktop
end
Команды для запуска
На сервере (desktop):
synergys -f --config synergy.
conf
На клиенте (laptop):
synergyc -f 192.168.0.103
2. НАДСТРОЙКА
Теперь, когда вам стало понятно, как
это все работает, можно перейти к более
«человечной» настройке.
Загружаем и устанавливаем QSynergy
– графическую утилиту для настройки
(deb). Открываем, видим главное окно:
На сервере ставим вторую галочку
(«Use this computer to control others...»). На
клиентах устанавливаем первую галочку и
в поле «Name of the server» пишем IP-адрес
сервера (если не знаете, то можно нажать
Help About в главном окне и узнать).
Теперь о настройке сервера: для на-
стройки можно использовать уже суще-
ствующий конфиг-файл (см. пункт 1) или
настроить все с нуля. Выбираем второе,
нажимаем «Configure Server...».
На первой вкладке настраивается
расположение и названия компьютеров.
Добавить компьютер можно путем пере-
тягивания иконки с верхнего правого угла
в нужную ячейку сетки. Для переименова-
ния надо дважды нажать на иконку нужно-
го компьютера.
Там же можно настроить «мертые
углы» – углы, переход с которых на другой
экран будет невозможен (не забывайте
указывать размер угла). Это можно ис-
пользовать, когда вы случайно переходи-
те на другой экран из-за того, что пытае-
тесь закрыть окно.
На второй вкладке можно настроить
клавиатурные комбинации. На третьей –
дополнительные настройки сервера.
Нажимаем
«ОК».
Затем
«Start»
на компьютере-сервере и «Start» на
компьютерах-клиентах.
http://unixhome.org.ua

ssh тунель из под NAT

на сервере
ssh user@server -R port:localhost:22 -N

на компе
ssh localhost -p port

пятница, 8 апреля 2011 г.

воскресенье, 3 апреля 2011 г.

добавляем скрипт в автозагрузку от sudo

sudo nano /etc/init.d/autostart.scriptsudo
chmod +x /etc/init.d/autostart.script
sudo update-rc.d autostart.script defaults 95

четверг, 31 марта 2011 г.

Установка XAMPP в Linux

На официальной странице скачиваем XAMPP: официальная страница загрузки для Linux. Пакет более 60 Мб.
Разархивируем и помещаем XAMPP в директорию /opt.
Для управления сервером XAMPP существуют команды:
# sudo /opt/lampp/./lampp start
# Запуск всех пакетов входящих в сервер XAMPP
# sudo /opt/lampp/./lampp stop
# Остановка всех пакетов входящих в сервер XAMPP
# sudo /opt/lampp/./lampp restart
# Перезапуск всех пакетов входящих в сервер XAMPP

Вывод полного списка доступных команд XAMPP можно посмотреть набрав в консоли команду:
# sudo /opt/lampp/./lampp
Если Вы хотите, чтобы сервер XAMPP стартовал автоматически при каждой загрузке ОС, то Вам необходимо скрипт с командой запуска поместить в соответствующий Runlevel. Если автоматически запускать его не требуется, то пропустите этот пункт.
Для автоматического запуска XAMPP, при каждой загрузке ОС Ubuntu нужно:
создать файл:
# sudo nano /etc/init.d/start_xampp
и поместить в него команду запуска сервера XAMPP:
/opt/lampp/./lampp start
добавить права доступа созданному скрипту:
# chmod +x /etc/init.d/start_xampp
поместить скрипт в "автозагрузку", для этого нужно:
установить chkconfig для добавления скрипта в Runlevels (более подробнее можно прочитать тут):
# sudo apt-get install chkconfig
добавить скрипт в Runlevels 3 и 5:
# sudo chkconfig start_xampp --level 35 on
Примечание: html-страницы помещаем в директорию /opt/lampp/htdocs для этого добавляем права на эту директорию:
# sudo chmod 0777 /opt/lampp/htdocs

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

шифр плейфера

using System;

namespace ConsoleApplication1
{
    class Program
    {
        //переменки
        static string Al = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯabcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя !@\"#№$;%^:&?*()-_+={}[]\\/<>.,~`0123456789";
        static string MyText = "";        // введенный текст
        static string Key = "";        // введенный ключ
        static string R = "";        // полученная решетка
        static string ResText = "";        // полученный текст
        static char[,] Resh = new char[10, 16];        // массив букв решетки
        static string str = "";
        static int x = 0;

        static void Main(string[] args)
        {
            Console.WriteLine("Введите ключевое слово");
            Key = Console.ReadLine();//вводим ключ

            Clean_Key();//чистим ключ от повторов
            Make_Resh();//создаем решетку
            Print_Resh();//вывод решетки на экран

            Console.WriteLine("Введите текст для шифрования");
            MyText = Console.ReadLine();//вводим ключ


            //qbtp
            encrypt();
            Console.WriteLine("\nзашифрованное\n{0}", ResText);//снести
            decrypt();
            Console.WriteLine("\nрасшифрованное\n{0}", MyText);//снести

            //////////////////////////////////////////////////////////
            Console.ReadKey();
        }

        //****************************************************************************//
        //* Функция убирает повторяющиеся символы из ключевого слова                 *//
        //****************************************************************************//
        static void Clean_Key()
        {
            x = 0;
            do
            {
                if (Key[x] != (char)1)
                    Key = Key.Substring(0, x + 1) + Key.Substring(x + 1, Key.Length - x - 1).Replace(Key[x], (char)1);
                x++;
            } while (x != Key.Length);
            //убираем (char)1
            str = "";
            x = 0;
            do
            {
                if (Key[x] != (char)1)
                    str += Key[x];
                x++;
            } while (x != Key.Length);
            Key = str;
        }

        //****************************************************************************//
        //* Функция создает решетку                                                  *//
        //****************************************************************************//
        static void Make_Resh()
        {
            R = Key + Al;
            // полученная решетка
            for (int i = 0; i < Key.Length; i++)
                R = R.Substring(0, i + 1) + R.Substring(i + 1, R.Length - i - 1).Replace(R[i], (char)1);
            //убираем (char)1
            str = "";
            x = 0;
            do
            {
                if (R[x] != (char)1)
                    str += R[x];
                x++;
            } while (x != R.Length);
            // создали строку с решеткой
            R = str;
            // заполняем массив букв решетки
            int num = 0;
            // массив букв решетки
            for (int i = 0; i < 10; i++)//10
                for (int j = 0; j < 16; j++)//16
                {
                    Resh[i, j] = R[num];
                    num++;
                }
        }

        //****************************************************************************//
        //* Функция выводит решетку на экран                                         *//
        //****************************************************************************//
        static void Print_Resh()
        {
            Console.WriteLine("\nПолучившееся решетка");
            for (int i = 0; i < 10; i++)//10
            {
                for (int j = 0; j < 16; j++)//16
                    Console.Write("{0} ", Resh[i, j]);
                Console.WriteLine();
            }
            Console.WriteLine();
        }

        //****************************************************************************//
        //* Функция зашифровки                                                       *//
        //****************************************************************************//
        static void encrypt()
        {


            int i = 0;
            int j = 0;
            int[] pos1 = new int[2];
            int[] pos2 = new int[2];
            for (int k = 0; k < MyText.Length - 1; k = k + 2)
                if (MyText[k] == MyText[k + 1] /*&& MyText[k + 1] != 'й'*/)
                    MyText = MyText.Insert(k + 1, "й");

            //проверка на четность
            if (MyText.Length % 2 != 0)
                MyText += " ";

            Console.WriteLine("тест {0}", MyText);


            for (int k = 0; k < MyText.Length - 1; k = k + 2)
            {
                for (i = 0; i < 10; i++)
                {
                    for (j = 0; j < 16; j++)
                    {
                        if (Resh[i, j] == MyText[k]) { pos1[0] = i; pos1[1] = j; }
                        if (Resh[i, j] == MyText[k + 1]) { pos2[0] = i; pos2[1] = j; }
                    }
                }

                if (pos1[0] == pos2[0])
                {
                    if (pos1[1] < pos2[1])
                        ResText = ResText + Resh[pos1[0], (pos1[1] + 1) % 16] + Resh[pos2[0], (pos2[1] + 1) % 16];
                    else if (pos1[1] > pos2[1])
                        ResText = ResText + Resh[pos2[0], (pos1[1] + 1) % 16] + Resh[pos2[0], (pos2[1] + 1) % 16];
                }
                else if (pos1[1] == pos2[1])
                {
                    if (pos1[0] < pos2[0])
                        ResText = ResText + Resh[(pos1[0] + 1) % 10, pos2[1]] + Resh[(pos2[0] + 1) % 10, pos2[1]];
                    else if (pos1[0] > pos2[0])
                        ResText = ResText + Resh[(pos1[0] + 1) % 10, pos1[1]] + Resh[(pos2[0] + 1) % 10, pos1[1]];
                }
                else
                {
                    ResText = ResText + Resh[pos1[0], pos2[1]] + Resh[pos2[0], pos1[1]];
                }
            }
        }

        //****************************************************************************//
        //* Функция расшифровки                                                      *//
        //****************************************************************************//
        static void decrypt()
        {
            MyText = "";
            int i = 0;
            int j = 0;
            int[] pos1 = new int[2];
            int[] pos2 = new int[2];

            for (int k = 0; k < ResText.Length - 1; k += 2)
            {
                for (i = 0; i < 10; i++)
                {
                    for (j = 0; j < 16; j++)
                    {
                        if (Resh[i, j] == ResText[k]) { pos1[0] = i; pos1[1] = j; }
                        if (Resh[i, j] == ResText[k + 1]) { pos2[0] = i; pos2[1] = j; }
                    }
                }
                if (pos1[0] == pos2[0])
                {
                    if (pos1[1] < pos2[1])
                        MyText = MyText + Resh[pos1[0], (pos1[1] + 15) % 16] + Resh[pos2[0], (pos2[1] + 15) % 16];
                    else if (pos1[1] > pos2[1])
                        MyText = MyText + Resh[pos2[0], (pos1[1] + 15) % 16] + Resh[pos2[0], (pos2[1] + 15) % 16];
                }
                else if (pos1[1] == pos2[1])
                {
                    if (pos1[0] < pos2[0])
                        MyText = MyText + Resh[(pos1[0] + 9) % 10, pos2[1]] + Resh[(pos2[0] + 9) % 10, pos2[1]];
                    else if (pos1[0] > pos2[0])
                        MyText = MyText + Resh[(pos1[0] + 9) % 10, pos1[1]] + Resh[(pos2[0] + 9) % 10, pos1[1]];
                }
                else
                    MyText = MyText + Resh[pos1[0], pos2[1]] + Resh[pos2[0], pos1[1]];
            }
            for (int k = 1; k < MyText.Length - 1;k++ )
                if (MyText[k - 1] == MyText[k + 1] && MyText[k]=='й')
                    MyText = MyText.Remove(k,1);
            
                if (MyText[MyText.Length - 1] == ' ')
                    MyText = MyText.Substring(0, MyText.Length - 1);
        }
        /////////////////////////
    }
}

понедельник, 28 марта 2011 г.

автоматическое удаление старых ядер из Ubuntu

dpkg -l linux-{image,headers}-* | grep ii | grep -v generic | grep -v `uname -r` | awk '{ print $2 }' | xargs apt-get -y purge

воскресенье, 27 марта 2011 г.

среда, 23 марта 2011 г.

На сайте, где я совершаю платеж, необходимо дополнительно ввести название банка, выпустившего карту и номер телефона банка

Необходимо указать:
На русском языке: АКБ «1-й процессинговый» (ЗАО)
На английском языке: Commercial Bank “1-st Processing Bank” (JSC)
Номер телефона службы клиентской поддержки: 8-800-333-0059

На сайте, где я совершаю платеж, необходимо дополнительно ввести код авторизации. (authorization code, reference number) Где его взять?

Код авторизации можно увидеть в главном меню «QIWI Visa Card» - «Отчеты», столбец «Код карточной авторизации».

Как проводить платеж QVC

Оплата картой QVC на интернет-сайте не отличается от оплаты обычной пластиковой картой.
На разных сайтах последовательность действий может отличаться, но общий порядок такой:
1. После выбора на сайте нужных вам товаров или услуг необходимо перейти к пункту "Купить" или "Оплата"
Необходимо убедиться , что на веб-странице оплаты присутствует вариант оплаты картой Visa. Это значит, что карты Visa, в том числе виртуальные, принимаются к оплате на этом сайте.
2. Ввести в поля экранной формы реквизиты карты QVC, полученные по СМС:
Номер карты - 16 знаков
Трехзначный код – на странице оплаты он, как правило, называется CVV (Security code)
Срок действия карты – месяц и год
Обычно есть поле ввода "Имя держателя карты" (Cardholder name). Необходимо ввести свою имя и фамилию большими латинскими буквами.
Может потребоваться заполнение дополнительных полей, например, почтового адреса. Эти поля не имеют отношения к оплате. Например, адрес, скорее всего, нужен для доставки товара. Пользователь вводит в данные поля ту информацию, которую считает нужной.
Выполняется платеж и необходимая сумма списывается с QIWI Кошелька.
Одной из причин отказа в выполнении платежа может быть отсутствие денег на балансе QIWI Кошелька.
Если денег недостаточно, пользователю необходимо сначала пополнить QIWI Кошелек, а затем повторить платеж.

Skype не годится,чем заменить?

На передачу -
Код:
dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp
или
Код:
arecord -f dat | ssh -C user@host aplay -f dat

На прием -
Код:
ssh USER@REMOTESYSTEM arecord - | aplay -
Суровые Челябинские линуксойды...

воскресенье, 20 февраля 2011 г.

подмена mac-адреса в linux

#!/bin/bash
sudo ifconfig wlan0 down
sudo ifconfig wlan0 hw ether XX:XX:XX:XX:XX:XX
sudo ifconfig wlan0 up
sudo dhclient wlan0
exit

суббота, 12 февраля 2011 г.

Связь Open Source и ITIL. Применение СПО в организациях.


Связь Open Source и ITIL
Как не платить за программы, если есть голова на плечах

ITIL велит экономить, управлять и контролировать то, чем мы пользуемся. Значит, Open Source нам идеально подходит

Эта статья основывается исключительно на моем личном мнении и опыте. Раскроем, что есть ITIL.

ITIL – IT Infrastructure Library (библиотека инфраструктуры информационных технологий), т.е. некое средство/технология, помогающая производить максимально качественно услуги ИТ-подразделений. Услуги могут быть самые разнообразные, от автоматизированного обслуживания настольных систем (например, Ubuntu Desktop) до сборки ядра на сервере с необходимыми пакетами (например, Debian, FreeBSD, CentOS, Ubuntu Server).

Многочисленные отечественные и зарубежные компании во всем мире пытаются сравнивать по «обложке» (сила маркетинговой политики) платное и программное обеспечение, основанное на открытом коде. Конечно если так рассматривать, то, увы, Open Source проигрывает, в основном из-за отсутствия рекламы, и тем самым создает «пустое» мнение о непонятном продукте в целом.

Сравнение коммерческого ПО и Open Source

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

Open Source же дает нам свободу. Свободу от выбора платформы и ОС. Open Source-приложения имеют открытый код и распространяются в основном бесплатно. Клиент или обычный пользователь вправе самостоятельно выбирать приложения под свои нужды и самостоятельно устанавливать, не боясь нарушения ст. 146 УК РФ.

Составляющие ITIL

Все сервисы должны предоставляться в виде процессов. Процесс в данном случае – это некие последовательности шагов, который в итоге дают достижение поставленной цели, также должен быть владелец процесса. Управлять можно только тем, что подлежит измерению, поэтому присутствует некий набор свойств (метрик) каждого из процесса. Согласно рекомендациям ITIL управление ИТ должно осуществляться следующими процессами.

Предоставление сервисов (Service Delivery)

> Управление уровнем сервисов (Service Level Management). Цель процесса – обеспечить эффективный сервис, то есть определить качественные и количественные характеристики. Главное тут – соблюдать баланс между реальными возможностями ИТ и требованиями бизнеса. На этом этапе выполняются такие процессы, как переговоры с клиентом, оценка требований клиента, анализ и обзор производительности сервисов и прочее. В итоге мы получим определенные цифры конфигурации сервисов и расчет затрат. Возможные использования метрик расчетов: расчет стоимости закупки серверов под определенные производственные мощности, расчет времени на внедрение и поддержки сервисов, учет времени возможного обучения персонала и т.д.

> Управление возможностями (Capacity Management). Цель процесса – поддержка оптимального и эффективного по стоимости обеспечения ИТ-сервисов путем оказания помощи организации в использовании ИТ-ресурсов. Будем осуществлять деятельность по управлению над производительностью, рабочими нагрузками, ресурсами, отслеживание стоимостей, планирование емкостей и прочее. В итоге мы получаем: данные о стоимостях, проектную документацию и планы, анализ использования емкостей и т.д.

> IT Service Continuity Management. Цель – гарантированная доступность сервисов ИТ. На этом процессе определяем риски, выявляем слабые места и угрозы. В итоге получаем план работы в непредвиденных случаях и имеем гарантию над доступностью сервисов.

> Управление стоимостями и оплатами (Cost & Charging Management). Цель – предоставить клиентам действительную информацию о стоимости сервисов и обеспечить возврат затрат.

Поддержка сервисов (Service Support)

> Управление инцидентами (Incident Management). Цель – восстановить сервис в наименьшие сроки. В деятельность входят: прием запросов, регистрация инцидентов, категоризация инцидентов, уведомление клиентов и прочее. Примеры расчета метрик: количество запросов, время реакции на запросы, оценка сложности и тенденции запросов по сервисам.

> Управление проблемами (Problem Management). Целью являются минимизация плохого влияния инцидента на бизнес и уменьшение количества инцидентов за счет предотвращений возможных причин инцидентов. Проходит деятельность по анализу тенденций инцидентов, регистрация проблем, решение проблем.

> Управление конфигурациями (Configuration Management). Целью является помощь в управлении экономическими значениями ИТ-сервисов. Реализация средств мониторинга, идентификации, контроллинга и пр. Достаточно сложный этап при внедрении, возможны проблемы, такие как трудности верификации, распределение ответственностей внутри организации. В итоге мы получаем полный отчет согласно полученным данным.

> Software Control & Distribution. Этап выбора прикладного программного обеспечения, то есть выбор возможной реализации того или иного программного обеспечения для реализации сервисов.

> Управление изменениями (Change Management). Целью процесса является введение одобренных изменений. Тут важно понять, что процессы невозможно реализовать с ходу, поэтому приходится постепенно внедрять реализацию одного процесса. Таким образом, нельзя выполнять новые требования клиента, так как он может быть не осведомлен о степени влияния на бизнес в целом.

Оценка Open Source согласно требованиям ITIL

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

Из всего выходит, что ITIL велит экономить, управлять и контролировать то, чем мы пользуемся, – значит, Open Source нам идеально подходит, потому что он бесплатный (экономия денег), имеет открытый код (контролируем) и масштабируем (легко управляем в разных средах). Чудесно, не правда ли? На основе открытого кода мы можем создавать свои сервисы под нужды ИТ-системы. Мы всегда знаем, что имеется в коде листинга и что посылается с отчетом об ошибке приложения.

Рассмотрим, в каких моментах можно заменить коммерческие приложения в целях достижения условий ITIL.

Мониторинг сервисов

Для управления различными инцидентами нам необходимо получать информацию об авариях, недоступности оборудования и статуса служб в целом. Эта задача легко решается с помощью такого приложения, как Nagios. Nagios основано на открытом коде и служит для мониторинга компьютерных систем и служб. Программа будет следить за всеми узлами и службами. В случае проблемы или недоступности какой-либо службы система оповестит администратора. Работает со всеми современными ОС. Данный сервис я использовал, когда работал младшим админом в «Мастерхост». Через Nagios велся контроль за Apache, БД, свободным местом на сервере, доступностью узлов связи, нагрузкой сервера (Load Average) и т.д. В настройках мониторинга можно управлять временем появления инцидентов.

Система обработки входящих запросов (тикеты)

Во многих организациях используется система тикетов. Обычные пользователи оставляют там свои заявки на решения их инцидента. Такое приложение должно решать проблемы хранения этих заявок и распределение ответственных. Предлагаю обратить внимание на OTRS. Эта система управления позволяет обрабатывать заявки через электронную почту, дает возможность контролировать поток звонков и писем от пользователей. Она способна помочь отделам поддержки, продаж, биллинга, внутренней поддержки и другим, получающим много писем, на которые необходимо отвечать многочисленным сотрудникам. Так же, как Nagios в «Мастерхосте», здесь используется OTRS. В нем обрабатывались заявки, полученные от клиентов, и внутренние распоряжения. В системе есть возможность привязки ответственных. У каждого отдела имеется собственная очередь тикетов.

Телефония

В настоящее время многочисленные компании избавляются от обычной аналоговой линии, внедряя VoIP, основанную на Open Source, т.е. для телефонии достаточно будет обычного офисного системного блока или стоечного сервера. Это объясняется стоимостью оборудования, сложностью его разворачивания и ограниченностью функционала, что связано с особенностью оборудования. Альтернативной заменой этому является VoIP (IP-телефония), реализуемая с помощью программного обеспечения. Использование ее дает возможность быстро предоставлять на любом рабочем месте доступ к телефонии. Стоимость разворачивания «равна нулю», главное, чтобы был подведен Интернет к рабочему месту. Мировые бренды телекоммуникационного оборудования, такие как Avaya, Tandber, Nortel, достаточно дороги, поэтому рассмотрим решения на базе Open Source, которое по функциональности не уступает им.

Телефония, основанная на Asterisk с веб-интерфейсом FreePBX

Asterisk обладает всеми требованиями ITIL, легко ставится, бесплатен и имеет открытый код. Важная особенность для новичков – возможность конфигурировать как с консоли, так и с веб-интерфейса FreePBX. Работает с аналоговыми линиями передачи FXO, FXS, с протоколами SIP, AIX2 и другими. Дистрибутив имеется в репозиториях семейства *nix-подобных систем.

Готовая сборка Asterisk c FreeBPX разворачивается за 30 минут человеком, не имеющим опыта работы с ним: www.asterisk.org.

Я имел опыт внедрения, когда работал сисадмином в администрации Псковской области. Для экономии связи между отделами (комитетами) поднимали связь через SIP- и AIX2-протокол, иногда с помощью дополнительного сервера телефонии – в случае проблемной раздачи прямого SIP-подключения. Система поднималась за сутки, включая тестирование. Asterisk прекрасно понимает платы с FXS- и FXO-портами.

Имея опыт внедрения телефонии, основанной на Asterisk, могу с уверенностью заявить, что Open Source работает не хуже коммерческих приложений, на порядок функциональнее и проще. В коммерческих приложениях телефонии нужно покупать модули для всего, например, IVR, а в Asterisk достаточно подумать и написать конструкцию голосового меню на простом языке конфигурации или поставить «галочку» в необходимой функции в FreePBX.

Почта

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

Замечательное решение – проект Zimbra, в котором мы сами будем контролировать рассылки, внутреннюю почту и защиту от спама. Это приложение поможет нам обеспечить единой почтой весь офис через удобный веб-интерфейс. Продукт обладает поддержкой русского языка, легко разворачивается, имеет штатные средства резервного копирования: www.zimbra.com.

Я устанавливал приложение клиентам и знаю, что в сравнении с остальными версиями почты с веб-интерфейсом Zimbra явно выигрывает. Действительно, им удобно пользоваться в любой точке мира, где есть доступ к Интернету.

Комплексные решения

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

> SugarCRM. CRM с открытым кодом (на языке PHP). Для установки SugarCRM достаточно установить OC Linux, веб-сервер Apache, СУБД MySQL. Это позволяет использовать систему в компаниях любой отрасли и адаптировать ее под изменяющиеся требования. Обладает богатым функционалом и достаточно простой системой управления через веб-интерфейс: www.sugarcrm.com.

> eGroupWare. Продукт, предназначенный для улучшения групповой работы на предприятиях с количеством сотрудников от нескольких человек до нескольких тысяч. Внедрение eGroupWare поможет реализовать на предприятии единую информационную систему и решать каждому сотруднику текущие задачи. В нее входят такие сервисы совместной работы, как календарь, управление ресурсами предприятия, управление проектами, адресная книга, база знаний и т.д. EGW я активно использовал как систему тикетов в администрации Псковской области. Система неприхотливая, обладает разграничением прав и общей базой знаний наподобие Wiki. Мы активно использовали базу знаний, даже была обязанность вносить туда полезную рабочую информацию. Руководители тянули себе статистику по заявкам из EGW ежемесячно. В небольшой компании с 500-700 машинами система справлялась с работой отлично.

> eBox. Хочу особое внимание уделить проекту eBox Platform, который работает на платформе дистрибутива Ubuntu LTS. Поможет любому системному администратору быстро настроить сервер с сервисами: роутер/шлюз, контроллер домена, общие файлы, почта, межсетевой экран, eGroupware и остальное, что нужно сисадмину. Отличная система, которая работает по принципу «все из одной коробки». Тестировали с коллегами на работе – для новичка особенно подходящая вещь, все заявленное действительно работает великолепно. Проекту есть куда развиваться, будем следить за его релизами: www.ebox-platform.com.

Услуги по требованию ITIL. HelpDesk

Требования ITIL обязывают предоставлять качественные услуги, при этом экономить и контролировать все процессы. Продукты из семейства Open Source полностью подходят под его критерии: контролировать ИТ-системы, планировать эффективные ИТ-стратегии, экономить на программном обеспечении и предоставлять качественные оперативные услуги.

Приложения из семейства Open Source предоставляют нам свободу выбора от ОС, исключают зависимость от разработчика приложения, что дает нам возможность мыслить творчески, самостоятельно подходить к любой проблеме и вносить свои изменения в код программы. Зачем платить за чужие непонятные программы, когда есть своя голова на плечах?

Пример открытого сообщества добровольных помощников по поддержке системы Ubuntu: www.forum.ubuntu.ru. Форум всегда поможет и начинающему, и опытному специалисту.

Ресурсы по поддержке UNIX-подобных систем в целом: www.linux.org.ru, www.opennet.ru и прочие замечательные форумы добровольной поддержки. Глупых вопросов не бывает, глупо не спрашивать.

***

Используя ITIL на предприятии или дома совместно с Open Source, мы достигаем максимально возможной выгоды от ИТ-систем. Выгода – это деньги, контроль над процессами, свобода выбора. Мы вправе выбирать, как нам вести свои бизнес-задачи, и можем не слушать менеджеров по продаже «очень крутых» ИТ-систем, основанных на приложениях с закрытым кодом. Мы не рабы. Linux – светлое будущее любой ИТ-инфраструктуры.

ссылка: http://www.samag.ru/cgi-bin/go.pl?q=articles&n=10.2010&a=09&rid=1 автор: не я

пятница, 11 февраля 2011 г.

программно узнать свой внешний ip


для линукс 


 


#!/bin/sh
wget -O - -q icanhazip.com > ip.txt

пятница, 4 февраля 2011 г.

Лечим шрифты в опере

Код:
sudo apt-get install ubuntu-restricted-extras -y

пятница, 28 января 2011 г.

APTITUDE vs. APT-GET

При работе с операционными системами, базирующимися на Debian и использующими apt (например, Ubuntu), вы познакомитесь с некоторыми инструментами управления:

apt-get: устанавливает и удаляет пакеты из системы, а также может обновлять список пакетов и установленное программное обеспечение.
apt-cache: поиск необходимого пакета по списку пакетов apt, находящегося на локальной машине.
dpkg - используется для различных административных задач, например, для переконфигурирования Xorg.

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

apt-listbugs: ищет ошибки в пакете программы ещё до установки самой программы.
apt-listchanges: то же самое, что и apt-listbugs, но для безошибочных изменений.
apt-rdepends: для показа дерева зависимости пакета.
deborphan - ищет обособленные зависимости в системе, оставленные после удаления родительских пакетов.
debfoster - помогает deborphan идентифицировать, в каких зависимостях пакета система больше не нуждается.
dselect - интерфейс для просмотра, выбора и поиска пакетов в вашей системе.

Ещё: apt-cdrom, apt-config, apt-extracttemplates, apt-ftparchive, apt-key, apt-mark and apt-sortpkgs.

Как вы заметили, это 16 различных инструментов, с которыми вы познакомитесь, когда приступите к изучению вашего дистрибутива.

Дальше - больше, apt-get имеет большую проблему с удалением пакетов. Сначала он  определяет зависимости, которые должны быть установлены для выбранного пакета, но не определяет их, когда вы удаляете этот пакет. Если зависимости удовлетворены, ‘apt-get remove’ удалит выбранные пакеты, но оставит обособленные зависимости. Альтернатива? Aptitude.

Перед тем, как продолжить, хотелось бы сказать, что ‘apt-get autoremove’ уже в состоянии обращаться к обособленным зависимостям. Это, конечно, шаг в правильном направлении. Однако, apt-get удобен, если вам захочется изучить 16 дополнительных инструментов к нему. Aptitude, как будет показано, заменит их всех.

Aptitude — это превосходный способ для установки, удаления, обновления, иначе говоря, для управления вашей системой совместно с apt. Во-первых, aptitude может решить проблемы обособленных зависимостей. Во-вторых, у него блокирующий ошибки dselect интерфейс. Последнее, и самое важное, здесь используется один инструмент для выполнения многих функций. Давайте посмотрим:
aptitude: при запуске без аргументов появляется графический интерфейс (правда, в консоли, прям как mc) для поиска, установки, обновления и других административных действий над пакетами.

aptitude install: установка программного обеспечения, а также построение необходимых зависимостей.
aptitude remove: удаление пакетов, а также обособленных зависимостей.
aptitude purge: удаление пакетов и обособленных зависимостей, а также ненужных конфигурационных файлов.
aptitude search: поиск пакетов по локальному списку apt.
aptitude update: обновление локального списка пакетов.
aptitude upgrade: обновление уже установленных пакетов по обновленному списку пакетов.
aptitude clean: удаление установочных файлов.
aptitude dist-upgrade: обновление пакетов, даже если некоторые из них не будут использованы для установки.
aptitude show: подробная информация о пакете.
aptitude autoclean: удаление устаревших пакетов, но сохранение текущих.
aptitude hold: исправление ошибок в пакете текущей версии, но не его обновление.

Сразу видно, что используется одна команда с разными удобночитаемыми вариантами (нет флагов). И это только верхушка айсберга. Например, используем aptitude при поиске пакета, результат — сортировка найденного в алфавитном порядке и краткое описание каждого пакета. Эта команда даже скажет вам, какие пакеты уже установлены в системе, в отличии от apt-cache, который выводит список пакетов в случайном и неудобно читаемом порядке.

Aptitude превосходит apt-get: лучшая обработка зависимостей, удобный интерфейс, ОДИН инструмент и др.

среда, 26 января 2011 г.

Системная информация
arch отобразить архитектуру компьютера
uname -m
uname -r отобразить используемую версию ядра
dmidecode -q показать аппаратные системные компоненты - (SMBIOS / DMI)
hdparm -i /dev/hda вывести характеристики жесткого диска
hdparm -tT /dev/sda протестировать производительность чтения данных с жесткого диска
cat /proc/cpuinfo отобразить информацию о процессоре
cat /proc/interrupts показать прерывания
cat /proc/meminfo проверить использование памяти
cat /proc/swaps показать файл(ы) подкачки
cat /proc/version вывести версию ядра
cat /proc/net/dev показать сетевые интерфейсы и статистику по ним
cat /proc/mounts отобразить смонтированные файловые системы
lspci -tv показать в виде дерева PCI устройства
lsusb -tv показать в виде дерева USB устройства
date вывести системную дату
cal 2007 вывести таблицу-календарь 2007-го года
date 041217002007.00 установить системные дату и время ММДДЧЧммГГГГ.СС (МесяцДеньЧасМинутыГод.Секунды)
clock -w
сохранить системное время в BIOS