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

python and virtualenv

В общем поведаю я тебе о них сегодня. Причины использования virtualenv могут быть разными, но для начала. Что такое virtualenv? Если вкратце, то это набор программ и библиотек для запуска питон-проектов в виртуальное окружении. Да, конечно можно сделать chroot. Но этот вариант много проще в разработке и поддержке.
Чем этот вариант понравился мне. Вот например есть у нас какая-нибудь библиотек, причем она в активной разработке. На базе этой библиотеки строится ряд программ. В процессе разработки часто ломается обратная совместимость, а так же зависимости от внешних библиотек. А программки, которые работают на этой библиотеки делаются не в один день и используют разные её версии. И вот тут подкрадывается тихий ужас (он же маленькая белая сибирская лисичка). Для того, что бы новая программа заработала, нужна свежая версия библиотеки, но если её поставить, то скорее всего рухнут все старые программы. Причем рефакторинг старого кода может быть очень дорогой задачей и заказчик просто не захочет этой процедуры (его право).
Ну и что, поставим на новый комп. А вот беда. Сайт - это то же программа. И так просто такую процедуру не сделаешь (ну в общем это просто, но только умеючи).
В общем тут нам на помощь приходит virtualenv
Установим:
apt-get install virtualenv
Создадим новое окружение:
virtualenv ve
У нас появится каталог, его структуру можно внимательно изучить.
можем запустить python:
ve/bin/python
А можем установить вкусности:
ve/bin/easy_install pip
ve/bin/pip install django django-any django-jenkins

Причем установить мы можем вполне конкретную версию всего по.

Так же, часто в процессе тестирование возникает желание потестить код в разных версиях python.
Вот как создать окружение с определенной версией python
virtualenv -p python2.5 ve

Так же, для удобства работы, можно активировать окружение
source ve/bin/activate
тогда уже можно просто говорить pip install <чего-то там>
Что бы выйти из окружения можно сказать exit, но лучше deactivate.

Да, что самое важное, что виртуальное окружение легко переносится на другой сервер. И практически не требует ни каких манипуляций.

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

Структура файлов и каталогов.

Почему каталог, а не папка?
Подходящее определение каталога: "В общем случае, это некий список информации об объектах, составленный с целью облегчения поиска этих объектов по какому-то признаку"
А папка - картонное изделие. Определение "папка" в IT пришло от слова folder. Хотя на самом деле употребление folder - не правильно.

Ну это так - мои нервы. В общем, что нам надо запомнить, это то, что в линукс-системах всё является файлом или каталогом. В каком это смысле "всё"? Ну, в прямом. Практически любой объект в системе присутствует в виде чего-то похожего на файл и находится в каком-то каталоге.
Ну к примеру:
/home/icegreg/.bash_history # файл с историей введенных команд пользователя icegreg
/dev/mem # Дамп памяти
/proc/cpuinfo # информация о процессоре(ах)

И представлено всё это как файл. И стоит запомнить, что файл - это не только информация на жестком диске.
Структура каталогов в линукс-системах практически всегда общая и состоит из:
/ - корневой каталог
/bin - каталог с исполняемыми системным файлами (они же команды)
/boot - каталог с загрузочными конфигурациями
/dev - каталог с файлами устройств (не хранится на жестком диске)
/etc - каталог с конфигурационными файлами
/home - каталог с домашними папками пользователей
/lib - каталог с большинством библиотек (в основном системные библиотеки)
/mnt - служебный каталог для монтирования файловых устройств
/opt - каталог используется для установки программ, которые не входят в базовую поставку
/proc - каталог со служебной системной информацией (не хранится на жестком диске)
/sbin - каталог с исполняемыми файлами для администраторов.
/sys - каталог со служебной системной информацией (не хранится на жестком диске)
/srv - служебный каталог для сервисов. (но чаще информация хранится /var)
/usr - в этот каталог ставится большинство программ входящих в базовую поставку, тут же и документация и прочее.
/var - каталог для переменных данных, в общем все служебные данные как правило оказываются тут, например /var/www - каталог для веб-сайтов.
/tmp - каталог для временных файлов (не хранится на жестком диске)
Важно понять, что корень - "/". А так же, что вышеизложенная структура одна на всех. И что в общем нет тут ни диска С: ни D: и всё устройства - это блочный файл. И работать приходится всегда с файлом.
вот такая команда прочтет первый сата диск и отправит данные в никуда.
dd if=/dev/sda of=/dev/null

/dev/sda - первый сата(а может и сказя) диска
/dev/sda1 - первый раздел на первом сата диске
/dev/null - файл пустоты. Что туда не заверни, назад уже не вернешь.

Если в верхней команде переставить /dev/sda и /dev/null местами, то будет беда. Т.ч. осторожнее.

Как правило файлам стараются давать осмысленные имена.
Например:
/var/log/apache2/error.log
/var/www/index.html

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

суббота, 5 марта 2011 г.

Пользователи и права.

На кой мне другие пользователи? Мне и пользователя admin достаточно. И прав у него до фига.

Такая вот грешная мысль порождает много проблем.
Проблема №1 - права администратора дают неограниченные возможности тому, кто под ними работает. А работать за нас может троян или спам-бот. Или какая-нибудь зараза.
Проблема №2 - права администратора не требуются для частого использования.
Истина №1 - права администратора нужны для тяжелых системных действий. К примеру форматнуть диск или поставить сервер БД.
Истина №2 - каждый пользователь должен работать под своей учётной записью. Я же не думаю, что тебе хочется делиться своей информацией с кем-то ещё. Всякое бывает. "Ой, я тут случайно затер твой курсач".
Истина №3 - должен быть четкий, очерченный круг задач, для которых необходимы права администратора.

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

А кто админ в линухах? Да, тут есть такой пользователь root
Вот он круче всех. От его имени запускаются все базовые системные процессы. Именно этот пользователь способен одним махом похоронить систему. Причем реально отправить систему в аут. Но не все процессы в твоей системе будут идти от имени супер-пользователя. Если процессу не нужен доступ к каким-то специальным файлам или же он не открывает порты с 1 по 1024, то процесс скорее всего будет запускать под своим пользователем. И более того, если какой-то программе требуется только в определенных местах права супер-пользователя, то именно эти места можно наделить полномочиями супер-пользователя.
Т.е. получается, что права наделяют порционом и очень дозировано. Отсюда глобальное правило. Работать под рутом надо только тогда, когда это действительно требуется.
Правило №2 - старайся не давать доступ к пользователю root.
Правило №3 - если кто-то лишний узнал твой пароль от рута, то это очень большие проблемы. Т.к. этот человек способен в очень короткие сроки сделать из системы всё что угодно.

Т.ч. лучше создать себе пользователя и работать под ним. А делать это надо как-то так
useradd -m <имя пользователя> # создадим пользователя и каталог для него /home/<имя пользователя>
passwd <имя пользователя> # зададим пароль пользователю
passwd # поменяет пароль твоему текущему пользователю.
Кстати, при смене пароля просят старый пароль. Но супер-пользователь способен сменить все пароли  без вопросов.

Т.к. пользователи обычно объединяются в какие-либо группы, то и тут есть группы.
Обычно у каждого файла есть два параметра имя пользователя и пароль. И критерии что может делать с файлом пользователь(создатель), а что может с этим фалом делать конкретная группа, а так же что могут делать все остальные.
Так же пароль можно задать и группе, а так же можно сделать администраторов для группы. И вот об этом мало кто помнит.
Есть такая команда gpasswd. Например:
gpasswd -a <имя пользователя> <имя группы>  # добавить пользователя в группу

gpasswd -d <имя пользователя> <имя группы>  # удалит пользователя из группы
man gpasswd # много полезной информации


А где хранится вся информация, если что?
Хранится она в следующих файлах
/etc/passwd
/etc/shadow # может смотреть только root
/etc/group
/etc/gshadow # может смотреть только root

А как, спросишь ты, мне зайти под другим пользователем.
su
su root  # войдешь под супер-пользователем
если установлена утилита sudo и твой пользователь имеет соответствующий доступ, то
sudo -i # войдешь под супер-пользователем использую свой пароль.
sudo apt-get install mc # получишь права супер-пользователя для установки mc

Утилита sudo позволяет извращаться очень хитрыми способами. Например дать права пользователю или группе пользователей на исполнения без пароля определенного файла (это может быть и команда).

Дальше я расскажу тебе про структура файлов и каталогов в системе.