вторник, 24 июля 2012 г.

Установка и настройка Apache, mod_wsgi, Django, MySQL в Debian / Ubuntu



Copypast-ю себе чтобы не искать потом. реальная тема ))

Django (читается как Джанго) - это свободно распространяемый фреймворк с открытым исходным кодом для разработки веб приложений на языке Python. Django обладает следующими архитектурными отличиями:
  • использование концепции Модель-Представление-Контроллер (Model-View-Controller, MVC). В терминологии Django это будет Модель-Шаблон-Вид (Model-Template-View, MTV)
  • использование концепции приложений. Весь код рекомендуется оформлять в виде приложений и делать его подключаемым и переносимым
  • диспетчер URL на основе регулярных выражений
  • ORM для работы с БД (с поддержкой транзакций)
  • встроенный веб-сервер для разработки
  • встроенная административная панель

Установка и настройка Django

Django можно установить двумя способами: из репозитариев или скачав исходники фреймворка с сайта. Как правило, в репозитариях находится не самая свежая версия. Поэтому, обычно используется второй способ, хотя это и не Debian-way.

Установка Django из репозитория

Пакет Django находится в стандартном репозитории, поэтому ничего нового подключать не надо. Для установки необходимо выполнить следующее:
$ sudo aptitude install python-django

Установка последней стабильной версии Django

Для установки последней версии необходимо скачать исходники и распаковать их:
$ sudo mkdir ~/django
$ cd ~/django
$ wget http://www.djangoproject.com/download/1.1/tarball/
$ tar xzf Django-1.1.tar.gz
Далее, необходимо узнать, в какую директорию необходимо устанавливать пакеты, чтобы Python узнал об этом. Для этого необходимо выполнить:
$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.5/site-packages
В данном случае, видно что основной версией является Python 2.5 и все дополнительные пакеты устанавливаются в директорию "/usr/lib/python2.5/site-packages".
Следующим шагом необходимо создать символическую связь для распакованной директории Django:
$ sudo ln -s ~/django/Django-1.1/django /usr/lib/python2.5/site-packages/django
И в конце, чтобы сделать команду django-admin.py доступной из любой директории системы, необходимо добавить еще одну символическую ссылку:
$ sudo ln -s ~/django/Django-1.1/django/bin/django-admin.py /usr/local/bin

Проверка корректности установки Django

Чтобы убедиться, что Django нормально установлен, необходимо запустить интерпретатор Python и импортировать модуль django:
$ python -c "import django; print django.VERSION;"
(1, 1, 0, 'final', 0)
Все в порядке. Последняя версия Django корректно установлена.

Установка и настройка Apache, mod_wsgi

Для работы с Django необходимы http-сервер Apache и модуль к нему - mod-wsgi. Модуль mod_wsgi пришел на смену mod_python и в настоящее время рекомендуется авторами Django как наиболее подходящее решение для использования в реальных условиях.
Установка Apache и mod_wsgi тривиальна:
$ sudo aptitude install apache2 libapache2-mod-wsgi

Установка MySQL

Кроме самого сервера MySQL необходимо также установить пакет, который позволяет работать с MySQL из Python:
$ sudo aptitude install mysql-server python-mysqldb
При установке необходимо будет указать пароль для root-пользователя БД MySQL.

Создание и настройка проекта в Django

При создании проекта будем исходить из того, что код Django-проекта должен работать от имени отдельного системного пользователя.

Создание проекта Django

Далее приведен код создание Django-проекта и некоторых дополнительных директорий в нем:
# директория для django проектов
$ sudo mkdir -p /home/django-projects/debianworld_ru

# новый django-проект
$ cd /home/django-projects/debianworld_ru
$ sudo django-admin.py startproject apps

# корректируем название модуля для корректного импорта
$ sudo perl -pi -e 's/apps.urls/urls/g' apps/settings.py

# директория для настроек wsgi
$ sudo mkdir -p /home/django-projects/debianworld_ru/deploy

# директория для статики
$ sudo mkdir -p /home/django-projects/debianworld_ru/media

# директория для логов
$ sudo mkdir -p /home/django-projects/debianworld_ru/logs

Создание пользователя для проекта

Для того, чтобы изолировать код проекта от остальной системы (в целях безопасности), необходимо добавить в систему пользователя, от имени которого будет исполняться код проекта:
# создается системная группа
$ sudo addgroup --quiet --system dw

# создается системный пользователь
$ sudo adduser --quiet --system --ingroup dw --no-create-home --no-create-home dw

# новый владелец для проекта
$ sudo chown dw:www-data -R /home/django-projects/debianworld_ru

# права доступа на проект. Право на чтение для www-data необходимо
# для корректной отдачи статики
$ sudo chmod u=rwx,g=rx,o= -R /home/django-projects/debianworld_ru

Настройка виртуального хоста в Apache

Далее, чтобы код проекта отзывался на какой-либо URL-адрес, необходимо настроить виртуальный хост Apache. Необходимо создать новый файл:
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/debianworld.ru
И добавить в него следующий код:
<VirtualHost 10.1.0.4>
    # Описание сервера
    ServerAdmin admin@wsgi.debianworld.ru
    ServerName wsgi.debianworld.ru

    # Логи
    ErrorLog    /home/django-projects/debianworld_ru/logs/error_log
    CustomLog   /home/django-projects/debianworld_ru/logs/access_log common

    # wsgi-обработчик (см. ниже)
    WSGIScriptAlias / /home/django-projects/debianworld_ru/deploy/django.wsgi
    # Параметры запуска wsgi
    WSGIDaemonProcess dw-site user=dw group=dw home=/home/django-projects/debianworld_ru/media/ \
                      processes=2 threads=4 maximum-requests=100 display-name=apache-dw-wsgi
    WSGIProcessGroup dw-site

    # Статические файлы django-админки
    Alias "/media_admin/" "/usr/lib/python2.5/site-packages/django/contrib/admin/media/"
    <Location "/media_admin/">
        SetHandler None
    </Location>

    # Статические файлы проекта
    Alias "/media/" "/home/django-projects/debianworld_ru/media/"
    <Location "/media/">
        SetHandler None
    </Location>
</VirtualHost>
В данном случае 10.1.0.4 - это IP-адрес машины, на которой работает Apache.

Настройка wsgi

Теперь, когда виртуальный хост создан, необходимо создать wsgi-обработчик. Для этого создается файл:
$ sudo -u dw vim /home/django-projects/debianworld_ru/deploy/django.wsgi
В файл добавляется следующий код:
#/usr/bin/python
# -*- coding: utf-8 -*-
import os, sys

# В python path добавляется директория проекта
dn = os.path.dirname
PROJECT_ROOT = os.path.abspath( dn(dn(__file__)) )
DJANGO_PROJECT_ROOT = os.path.join(PROJECT_ROOT, 'apps')
sys.path.append( DJANGO_PROJECT_ROOT )

# Установка файла настроек
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

# Запуск wsgi-обработчика
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Включение виртуального хоста Apache

На заключительном шаге необходимо дать знать о наличии нового виртуального хоста в Apache, включить его и перезагрузить сам Apache:
# Добавляет ссылку на виртуальный хост в список доступных хостов
$ sudo ln -s /home/django-projects/debianworld_ru/deploy/debianworld.ru \
             /etc/apache2/sites-available/debianworld.ru

# включаем виртуальный хост
$ sudo a2ensite debianworld.ru

# рестарт Apache
$ sudo /etc/init.d/apache2 restart

Проверка корректности установки

Чтобы проверить, что Django корректно работает через mod_wsgi необходимо попытаться открыть URL "http://wsgi.debianworld.ru/" в браузере.
Результатом должно быть приглашение:
It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what to do next:
  * If you plan to use a database, edit the DATABASE_* settings in settings/settings.py.
  * Start your first app by running python settings/manage.py startapp [appname].

Создание БД/пользователя в MySQL, настройка Django

После того, как есть уверенность, что Django установлен и работает, необходимо обеспечить возможность работы с БД. Для этого необходимо залогиниться в MySQL под root'ом:
$ mysql --user=root -p
И создать новую базу данных и нового пользователя:
mysql> CREATE DATABASE debianworld_db CHARACTER SET utf8;
Query OK, 1 row affected (0.01 sec)

mysql> CREATE USER debianworld_usr@localhost IDENTIFIED BY 'mega-secure-password';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON debianworld_db.* TO debianworld_usr@localhost;
Query OK, 0 rows affected (0.00 sec)
После того, как новые БД и пользователь готовы, необходимо прописать их в конфиг Django. Для этого необходимо открыть файл настроек:
$ sudo -u dw vim /home/django-projects/debianworld_ru/apps/settings.py
И прописать следующие значения:
# ...
DATABASE_ENGINE = 'mysql'                   # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'debianworld_db'            # Or path to database file if using sqlite3.
DATABASE_USER = 'debianworld_usr'           # Not used with sqlite3.
DATABASE_PASSWORD = 'mega-secure-password'  # Not used with sqlite3.
DATABASE_HOST = ''                          # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''                          # Set to empty string for default. Not used with sqlite3.
# ...
Кроме того, чтобы правильно "подхватились" статические файлы django-админки и основго проекта, необходимо так же прописать:
# ...
MEDIA_URL = '/media/
ADMIN_MEDIA_PREFIX = '/media_admin/'
# ...
И в заключении, необходимо дать команду Django создать в БД основные таблицы:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'dw'): admin
E-mail address: admin@wsgi.debianworld.ru
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Вот и все. Теперь Django настроено полностью. Далее можно создавать приложения слдеующей командой:
$ sudo -u dw /home/django-projects/debianworld_ru/apps/manage.py startapp firstapp
или непосредственно под тем пользователем, под которым работает весь код проекта:
$ sudo -u dw bash
$ cd /home/django-projects/debianworld_ru/apps/
$ ./manage.py startapp firstapp

вторник, 5 июня 2012 г.

Основы LVM

Запишу основные команды LVM

Активация lvm  (на случай загрузки с livecd)
vgchange -ay

Создание логического тома
lvcreate -L 1G -n lvm_vol1 vg1

Создание снимка
lvcreate -L592M -s -n vol1_backup /dev/test/lvm_vol1

Восстановление тома из снимка
lvconvert --merge /dev/test/vol1_backup


Удаление тома или снимка

lvremove /dev/test/vol1_backup

и еще много чего потом напишу :) ...





Java Applets аплеты в Ubuntu (Kubuntu)

Потребовались мне аплеты в Firefox а по умолчанию не работаю и вот (чтобы не забыть потом запишу для себя тут) самое простое решение этой проблемки.
Если у вас установлен OpenJDK тогда нужно установить 1 пакет
sudo apt-get install icedtea-7-plugin

Если же у вас стоит SunJDK как у меня тогда придется кинуть линк
mkdir ~/.mozilla/plugins
ln -s /opt/jdk1.7.0_02/jre/lib/amd64/libnpjp2.so ~/.mozilla/plugins
И после этого усе заработает 
 

пятница, 25 мая 2012 г.

Установка Ubuntu Desktop на LVM

По умолчанию установщик ubuntu desktop не видел lvm разделы так как не активирован lvm в live-dvd

Нужно это просто исправить
и так начнем

1. Грузимся с livedvd

2. Устанавливаем lvm

sudo apt-get install lvm2

3. Освобождаем место для LVM используя например GParted

4. Подключаем фозические диски или разделы для lmv

sudo pvcreate /dev/sda1

5. создаем группу томов

sudo vgcreate local /dev/sda1

6. И, наконец, создаем необходимые логические тома

sudo lvcreate -L 7G -n root local
sudo lvcreate -L 5G -n home local
sudo lvcreate -L 3G -n swap local
sudo lvcreate -L 10G -n data local

7. Теперь необходимо создать файловые системы на созданных логических томах

sudo mkfs.ext4 /dev/local/root
sudo mkfs.ext4 /dev/local/home
sudo mkswap -f /dev/local/swap
sudo mkfs.ext4 /dev/local/data

8. Ставим красивые метки

sudo tune2fs -L Data /dev/local/data

9. Теперь можно спокойно установиться на созданные разделы. Дождитесь завершения установки, но компьютер не перезагружайте!

10. Теперь нужно активировать lvm в установленной системе, так как она еще не знает что ей нудно при загрузке искать себя на lvm.

Для начала, смонтируйте логический том, который вы выделили под корень, в папку /mnt.

sudo mount /dev/local/root /mnt

11. Подключим важные системные ресурсы

sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys  /mnt/sys

12. Переключимся на установленную систему

sudo chroot /mnt /bin/bash

13. И установим lvm

apt-get install lvm2

Ну теперь можно выходить из терминала и перегружаться в установленную ос которая будет работать на LVM :)

четверг, 24 мая 2012 г.

Превращаем обычную веб-камеру в камеру слежения, работающую в Ubuntu Linux

И как же можно заставить линукс следить за обстановкой через веб-камеру?
А оказывается достаточно просто:

1. установим motion

sudo apt-get install motion

2. Запускаем

sudo motion

По умолчанию изображения сохраняются в директории "/tmp/motion", 
Можете сконфигурировать и изменить настройки в "/etc/motion/motion.conf".
Если вы захотите изменить директорию, где хранятся полученные  изображения, просто найдите и измените строку "target_dir /tmp/motion".

3. Делаем автоматическу отправку изображений на свой ftp сервер

sudo apt-get install wput

редактируем “motion.conf”
в конце файла добавим следующую строку:
on_picture_save wput ftp://username:password@ftpserver %f

и вуаля все снимки отправляются )))

4. Можно открыть веб-интерфейс программы Motion, набрав для этого в веб-браузере сервера адрес localhost:8000.

Если вы хотите видеть видеопоток в реальном времени, то наберите в веб-браузере на сервере адрес localhost:8001

понедельник, 21 мая 2012 г.

Программа для наблюдения, слежки, контроля за пользователем

Вот интересная и простая программа для слежения за пользователем
SWTracking (http://software-tracking.ru)
Мне понравилась простотой и дешевизной.
Большие планы на будущее.
Всем советую попробовать
 

вторник, 28 февраля 2012 г.

Разработка под Android в NetBeans 7.1 (Ubuntu Linux)

Для этого необходимо:

1. Установить NetBeans. (скачиваем, распаковываем и устанавливаем install.sh )

2. Скачиваем Android SDK
  Распаковываем и докачиваем компоненты
  android-sdk-linux$ tools/android update sdk --no-ui

3. Устанавливаем плагин поддержки Android для NetBeans (источник)
Заходим в NetBeans / Сервис / Подключаемые модули / Настройки / жмем - Добавить и указываем урл http://kenai.com/projects/nbandroid/downloads/download/updatecenter/updates.xml
После чего появляется возможность установить плагин Android и Android Test Runner, устанавливаем их.

4. Далее заходим в Сервис / Параметры / Разное / Android и указываем где у нас лежит Android SDK (куда вы его распаковали).

Теперь при создании проекта можно указать Android  :)

Лично у меня проект сначала не хотел собираться, а оказалось что ant который идет в комплекте с NetBeans не находится при сборке и я не долго думая установил его из репы.
apt-get install ant и все заработало

Приятного программирования

вторник, 21 февраля 2012 г.

Ведем статистику / мониторинг сервера с помощью программы Munin в Linux Debian/Ubuntu

В жизни каждого системного администратора рано или поздно наступает момент, когда глаз и рук уже не хватает уследить за всеми серверами, то там, то там возникают какие-то проблемы, а для решения их очень хочется узнать что же было "до этого". И именно здесь на выручку приходят они - великие и ужасные системы мониторинга.
Сама система состоит из двух независимых частей: сервера (сам munin), устанавливается на одну машину, куда и будут собираться все данные, и небольшого демона munin-node, который устанавливается на машины, которые мы будем мониторить. Сам этот демон представляет собой небольшой Perl-скрипт, который слушает 4949 порт с помощью Net::Server. При своём запуске он просматривает плагины, установленные в /etc/munin/plugins и запоминает их имена. Раз в 5 минут сервер munin подключается ко всем нодам, получает информацию от всех плагинов и сохраняет себе в базы rrdtool. Таким образом, для работы Munin'а не нужен даже MySQL.

Установка:

apt-get install munin

Желательно заглянуть в конфиг и включить авторизацию :)

Ограничение скорости (Up/Down)-load конкретной программы в Linux Ubuntu (Kubuntu)

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

Устанавливается Trickle командой
sudo apt-get install trickle.

Использовать программу можно следующим образом:

trickle -d download-bandwidth -u upload-bandwidth command

Здесь download-bandwidth — скорость загрузки в Kb/s, upload-bandwidth — исходящая скорость в Kb/s, а command — имя программы, для которой устанавливаются ограничения.

Примеры использования:

trickle -d 100 wget http://cdimage.ubuntu.com/daily/current/precise-alternate-i386.iso

Установить лимит скорости в 100 Kb/s на скачивание файла из сети.

trickle -d 25 -u 15 firefox

Разрешить браузеру загружать страницы со скоростью, не превосходящей 25 Kb/s и отправлять данные в сеть не быстрее, чем на скорости15 Kb/s.

trickle -d 200 apt-get upgrade

Ограничить скорость загрузки обновлений дистрибутива 200 килобайтами в секунду.

sudo trickled -d 200 -u 100

Запустить trickle в режиме сервиса, ограничив суммарную скорость загрузки в 200 Kb/s, а на исходящую скорость ввести ограничение в 100 Kb/s. Ограничения распространяются на всех пользователей и все программы.

понедельник, 13 февраля 2012 г.

Бесплатный визуальный конструктор сайтов в webEDO.ru

Конструктор сайта

Конструктор сайта — это целая система построения полноценного сайта путем визуального конструирования. Чтобы создать профессиональный сайт нет необходимости знать языки програмирования, достаточно просто выбрать шаблон и заполнить его вашей информацией. Визуальный конструтор сайта предлагает на выбор множество пользовательских тем, которые были разработаны профессиональными дизайнерами и позволяют изменять внешний вид закладок, кнопок и подокон. Он позволяет также использовать пользовательские шаблоны для ваших товаров и списков. Создать свой сайт испульзуя CMS webEDO просто и легко. Полная интеграция конструктора сайта с порталом, контроль за заказами в интернет-магазине, возможность опубликовать товары вашего интренет магазина в едином каталоге. Единый каталог товаров публикуется на популярных сайтах сети, что позволяет в разы повысить эффективность продаж через Интернет.
Основные особенности визуального конструктора сайта:
  • Создание сайта профессионального уровня без знания HTML
  • Управление интернет-магазином, полноценная система электронной коммерции
  • Создание неограниченного количества элементов и категорий, их связь с помощью простых ниспадающих интерфейсов
  • Простое и быстрое наполнение Web-сайта. Динамическое обновление контента сайта без необходимости изменения исходного кода
  • Редактирование сайта в любое время по принципу «Drag & Drop». Изменения мгновенно отображаются на вашем сайте
  • Интуитивное применение и настройка шаблонов и цветовых схем
  • Функциональная система управления интренет магазином
  • Готовые наборы шаблонов дизайна
  • Управление временем появления и скрытия информации на сайте
  • Быстрое создание ссылок на материалы сайта
  • Контроль «мертвых ссылок»
  • Отображение статистики по контенту
  • Автоматическое создание карты сайта и оглавления разделов
  • Подключение своего шаблона дизайна страниц
  • Использование визуального конструктора сайта и управление модулем осуществляется через портал
www.webedo.ru
 

среда, 8 февраля 2012 г.

Настройка Nginx как фронтенд Apache d Ubuntu / Debian Linux

Для того чтобы снизить нагрузку на сервер, бывает полезно поставить nginx как front-end сервер который будет обрабатывать всю статику вместо Apache

то нужно.

    Сервер на ubuntu/debian/etc
    Доступ по ssh
    10 минут времени

Настройка Apache

Открываем порты Apache:
nano /etc/apache2/ports.conf

И ищем строки:
NameVirtualHost *:80
Listen 80

Меням на порт 82:
NameVirtualHost *:82
Listen 82

Так же меняем порт для корневого хоста:
nano /etc/apache2/sites-available/default
VirtualHost *:82>
        ServerAdmin webmaster@localhost
 
        DocumentRoot /var/www

Перезапускаем Apache:
/etc/init.d/apache2 restart

И проверяем на каком порте у нас apache:
netstat -tunap | grep apache2

Должны увидить, что-то вроде этого:
tcp 0 0 0.0.0.0:82 0.0.0.0:* LISTEN 5851/apache2

Если все правельно, то перейдем к IspConfig, подправим шаблоны панели для apache, но на всякий случай сохраним старые конфиги:
cd /usr/local/ispconfig/server/
cp conf/apache_ispconfig.conf.master conf-custom/
cp conf/vhost.conf.master conf-custom/

И отредактируем файлы:
nano /usr/local/ispconfig/server/conf-custom/apache_ispconfig.conf.master

В конце файла:
<tmpl_loop name="ip_adresses">
NameVirtualHost {tmpl_var name="ip_address"}:80
NameVirtualHost {tmpl_var name="ip_address"}:443
</tmpl_loop>

В строке заменяем на 82:
NameVirtualHost {tmpl_var name="ip_address"}:82

Открываем второй файл файл:
nano /usr/local/ispconfig/server/conf-custom/vhost.conf.master

Почти в самом начале файла ищем строку:
<VirtualHost <tmpl_var name='ip_address'>:80>

И меняем на:
<VirtualHost <tmpl_var name='ip_address'>:82>

Теперь установим модуль для apache — ibapache2-mod-rpaf:
apt-get install libapache2-mod-rpaf

И редактируем конфиг:
nano /etc/apache2/apache2.conf

Где-то , например, в конце добавляем:
RPAFsethostname On
RPAFproxy_ips 127.0.0.1

На этом с apache закончили и переходим к Nginx
Установка и настройка Nginx.

Устанавливаем Nginx:
apt-get install nginx

И после установки удаляем стандартный virtualhost:
rm /etc/nginx/sites-available/default

Открываем наш хост:
nano /etc/nginx/sites-available/default

Вписываем слудующие:
server {
listen 80 default;
server_name _;
server_name_in_redirect off;
default_type text/html;
#### Non WWW host goes to $sup variable ####
set $sup $host;
if ($host ~* ^(www\.)(.+)) { #if WWW?
set $sup $2; # cut WWW and write it into $sup
}
access_log /var/log/ispconfig/httpd/$host/access.log;
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|swf|flv|html|htm|mp3)$ {
root /var/www/$sup/web;
access_log off;
expires 30d;
}
location / {
root /var/www/$sup/web;
index index.html index.htm index.php;
access_log off;
#proxy_pass http://$host:82;
proxy_pass http://127.0.0.1:82;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Перезапускаем наши веб сервера:
service apache2 restart
service nginx restart

На этом настройка завершена, теперь можно наслаждаться возросшей скоростью =)

четверг, 26 января 2012 г.

Как работать с sqlite3 через shell

sqlite или sqlite3 (последняя версия) — это легковесная реляционная база (ACID-совместимая) данных работающая из файла. Не работает по сети.
Совместима с стандартом SQL-92.
Она намного быстрее (в своём классе задач) mysql & postgresql.

Я бы рекомендовал её использовать во многих случаях вместо mysql & postgresql, например на личном блоге ;)

    Сама библиотека SQLite написана на C; существует большое количество привязок к другим языкам программирования, в том числе C++, Java, C#, VB.NET, Python, Perl, PHP, Tcl (средства для работы с Tcl включены в комплект поставки SQLite), Ruby, Haskell, Scheme, Smalltalk, Lua и Parser, а также ко многим другим. Полный список существующих средств размещён на странице проекта

Обычно надо откуда-то получить данные, их записать и обработать.

*Желательно что бы запись и изменение данных не конфликтовала между собой.
*Не хочется городить километры кода для простых вещей. Например не хочется писать свои или искать чужой код для чтения и записи в файл.

Вообще — применений просто масса.
bash

Как же встроить sqlite в скрипт на bash-интерпретаторе?

#!/bin/bash
#
# test application by http://wel.org.ua
#
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
 
sqlite3=`which sqlite3`
DB_FILE=~/test.db
SQLITE_OPTIONS=" -column -header  "
 
$sqlite3 $DB_FILE  "
        create table IF NOT EXISTS  test (
                test TEXT UNIQUE,
                test2 TEXT);"
 
 
if [ "$#" -lt 2 ];then
        echo "Введите пожалуйста 2-а аргумента, для того что бы внести их в базу данных $DB_FILE"
        exit 1
else
        $sqlite3 $DB_FILE  " insert into test (test,test2) values  ('"$1"', '"$2"')"
        #echo $error
fi
 
echo "Уже было внесено:"
$sqlite3 $SQLITE_OPTIONS $DB_FILE <<EOF
        SELECT * FROM test;
EOF
 
exit 0


Выполнения кода:

Как видно скрипт не заработал с 1-м аргументом

    # /test.sh 1
    Введите пожалуйста 2-а аргумента, для того что бы внести их в базу данных /root/test.db

Скрипт заработал

    #/test.sh 1 2
    Уже было внесено:
    1|2

SQLite сообщил, что Мы внесли нейникальное значение для индекса

    # /test.sh 1 2
    Error: column test is not unique
    Уже было внесено:
    1|2

Всё отлично )))

    # /test.sh 2 3
    Уже было внесено:
    1|2
    2|3

А теперь небольшое пособие по работе в SQLite


КомандаКраткое описание
.databasesВывод списка имен всех подключенных в текущем сеансе баз данных и соответствующих им файлов.
.dump ?TABLES?:Дамп всех SQL инструкций использованных в создании БД или отдельной таблицы в текстовом формате
.echo ON|OFFВКЛ | ВЫКЛ эхо введенных команд
.exitВыход из программы
.explain ON|OFFУправляет режимом вывода виртуальных машинных команд. Используется при выполнении SQL запроса EXPLAIN.
.header(s) ON|OFFВКЛ | ВЫКЛ показ заголовков столбцов
.import FILE TABLEИмпорт данных из файла FILE в таблицу TABLE
.indices TABLEПоказывает имена всех индексов таблицы
.mode MODEУстановка режима вывода: line(s), column(s), insert, list, html и других
.nullvalue STRINGНапечатает строку STRING вместо NULL данных при выводе SQL запроса SELECT
.output FILENAMEПослать весь вывод в файл FILENAME
.output stdoutПослать весь вывод на экран
.promt MAIN COTINUEИзменить стандартную строку подсказки
.quit Выход их программы
.read FILENAMEВыполнение SQL инструкций из файла FILENAME
.schema ?TABLE?Покажет текст SQL инструкции CREATE для всех таблиц или указанной таблицы
.separator STRINGИзменить строку разделитель колонок, используется при выводе SQL запроса SELECT и команды .import
.showПоказать значения установленных переменных
.tables ?PATTERN?Вывод списка имен таблиц БД (возможно по шаблону)
.timeout MSБлокирование открытия таблиц на число миллисекунд MS
.width NUM NUM :Установка ширины столбцов при выводе в режиме column




Подробно рассмотрим некоторые из этих команд. Предварительно создадим базу данных, на которой мы и рассмотрим специальные команды. Из командной строки запустите консольную программу "sqlite3.exe" введя следующее:
sqlite3 exam.db
SQLite version 3.1.3
Enter ".help" for instructions
Где exam.db имя создаваемой базы данных.
Создадим таблицу tbl1, с помощью SQL инструкции CREATE TABLE.
sqlite> CREATE TABLE tbl1 (one INTEGER PRIMARY KEY AUTOINCREMENT,
two VARCHAR(50), three REAL);
Вставим несколько записей в данную таблицу. Отмечу, что в инструкции создания таблицы для каждого поля мы задали тип данных для его значений, этот тип данных игнорируется программой "SQLite". Система управления базой данных "SQLite" довольно свободно относится к определению типов данных, что не характерно для стандарта языка SQL. Типизация данных в "SQLite" основывается на так называемом принципе "typeless", означающий игнорирование информации о типе данных в определении столбцов таблицы при ее создании с помощью инструкции CREATE TABLE. И все же лучше включать имена типов столбцов при объявлении таблиц, это повысит переносимость вашей базы данных. Имеется одно исключение из принципа "typeless" - это столбец типа INTEGER PRYMARY KEY (INTEGER не INT; INT PRIMARY KEY - удовлетворяет принципу "typeless"). Столбец с типом INTEGER PRIMARY KEY должен содержать 32-х битное целое число, попытка записать данные любого другого типа в столбец этого типа приведет к ошибке. Этот тип обычно используется перед спецификатором столбца AUTOINCREMENT, столбец с типом INTEGER PRIMARY KEY AUTOINCREMENT является ключевым столбцом таблицы, его значения генерируются автоматически.
sqlite> INSERT INTO tbl1 VALUES(NULL, 'hello', 3.10);
sqlite> INSERT INTO tbl1 VALUES(NULL, 'is', 5.34);
sqlite> INSERT INTO tbl1 VALUES(NULL, 'from', NULL);
Создадим, пока пустую таблицу tbl2 и индекс по ее первому полю "ikey".
sqlite> CREATE TABLE tbl2 (ikey INTEGER PRIMARY KEY, nm VARCHAR(50));
sqlite> CREATE UNIQUE INDEX itbl2 ON tbl2(ikey);
sqlite>
Команда .dump
Позволит вам получить полный дамп (листинг) всех SQL инструкций использованных при создании базы данных или некоторой конкретной таблицы.
Синтаксис:
.dump ?TABLE?  
где TABLE - необязательное имя таблицы, для которой вы хотите получить дамп SQL инструкций.
Пример:
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE tbl1 (one integer primary key autoincrement, two varchar(50),
three real);
INSERT INTO "tbl1" VALUES(1, 'hello', 3.1);
INSERT INTO "tbl1" VALUES(2, 'is', 5.34);
INSERT INTO "tbl1" VALUES(3, 'from', NULL);
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence" VALUES('tbl1', 3);
CREATE TABLE tbl2 (ikey integer integer primary key, nm VARCHAR(20));
CREATE UNIQUE INDEX itbl2 on tbl2(ikey);
COMMIT; 
sqlite>
Эту команду можно использовать для экспорта базы данных созданную в SQLite в другую программу работы с базами данных. Для этого необходимо сохранить полный дамп SQL инструкций в файле.
sqlite> .output exam.sql --перенаправить вывод в файл
sqlite> .dump
Команда .header(s)
Включает / выключает вывод названий заголовков столбцов.
Синтаксис:
.header(s) ON | OFF
где,
  • ON - включить вывод имен заголовков столбцов
  • OFF - отключить вывод имен заголовков столбцов
Пример:
sqlite> .header ON
sqlite> SELECT * FROM tbl1;
one|two|three
1|hello|3.1
2|is|5.34
3|from|
sqlite> .header OFF
sqlite> SELECT * FROM tbl1;
1|hello|3.1
2|is|5.34
3|from|
sqlite>
Команда .import
С помощью данной команды имеется возможность импортировать данные из текстового файла. Данные в текстовом файле должны быть разделены строкой-разделителем, эта строка разделитель определяется командой .separator. По умолчанию символом-разделителем является символ вертикальной черты "|". Данная команда введена в версии 3.
Синтаксис:
.import FILE TABLE
где,
  • FILE - имя входного тестового файла с данными
  • TABLE - имя таблицы куда вставляются данные
Пример:
Подготовим следующие данные в файле exam.txt
1;Roy 
2;Ted
3;Sam
4;Bob
Вставим эти данные в таблицу tbl2, для этого выполним следующие команды:
sqlite> .separator ';'  -- установим символ-разделитель в точку с запятой  
sqlite> .import exam.txt tbl2  -- импорт данных 
sqlite> SELECT * FROM tbl2;   
1; Roy
2; Ted
3; Sam
4; Bob
Команда .mode
Данная команда изменяет формат вывода таблицы SQL запросом SELECT. "SQLite" может вывести результат запроса в следующих форматах: csv, column, html, insert, line, list, tabs, tcl. Для версии 2.8 поддерживается только следующие форматы: line(s), column(s), insert, list, html. Рассмотрим их по порядку.
- Режим csv. В данном формате столбцы записи таблицы разделяются запятыми.
Пример:
sqlite> .mode csv
sqlite> SELECT * FROM tbl1;
1,"hello",3.1
2,"is",5.34
3,"from",
sqlite>  
Режим удобен для экспорта таблицы в сторонние программы, например данный формат, понимает Excel.
Режим column. В этом режиме вывод выровнен по левой границе столбцов записей таблицы.
Пример:
sqlite> .mode columns
sqlite> SELECT * FROM tbl1;
1           hello       3.1
2           is          5.34
3           from
sqlite> 
Смотрите также команду .width для задания ширины столбцов.
Режим html. Вывод в этом режиме выполнен в стиле определения таблицы языка html. Удобен для включения таблицы в страничку сайта.
Пример:
sqlite> .mode html
sqlite> SELECT * FROM tbl2;

<TR><TD>1</TD>
</TD>Roy
</TR>
<TR><TD>2</TD>
</TD>Ted
</TR>
<TR><TD>3</TD>
</TD>Sam
</TR>
<TR><TD>4</TD>
</TD>Bob
</TR>
sqlite>
Режим insert. В данном режиме генерируются SQL запросы INSERT для таблицы, имя которой указано третьим параметром в команде.
Синтаксис:
.mode insert TABLE
где TABLE - имя таблицы, для которой генерируются инструкции INSERT
Пример:
sqlite> .mode insert tbl3
sqlite> SELECT * FROM tbl1;
INSERT INTO tbl3 VALUES(1,'hello',3.1);
INSERT INTO tbl3 VALUES(2,'is',5.34);
INSERT INTO tbl3 VALUES(3,'from',NULL);
sqlite>
Режим line. Здесь каждый столбец выводится в отдельной строке в формате имя_столбца = значение. Записи разделяются пустой строкой.
Пример:
sqlite> .mode line
sqlite> SELECT * FROM tbl1;
  one = 1
  two = hello
three = 3.1

  one = 2
  two = is
three = 5.34

  one = 3
  two = from
three =
sqlite> 
Режим list. Является режимом, установленным по умолчанию. Каждая запись таблицы выводится в отдельной строке с разделением столбцов символом-разделителем. Символ-разделитель определяется командой .separator, и по умолчанию равен прямой черте '|'.
Пример:
sqlite> .mode list
sqlite> SELECT * FROM tbl1;
1|hello|3.1
2|is|5.34
3|from|
sqlite>  
Режим tabs. В данном режиме столбцы записей таблицы отделяются друг от друга символом табуляции.
Пример:
sqlite> .mode tabs
sqlite> SELECT * FROM tbl1;
1       hello   3.1
2       is      5.34
3       from
sqlite> 
Режим tcl. Вывод выполнен в формате элементов списка языка TCL.
Пример:
sqlite> .mode tcl
sqlite> SELECT * FROM tbl2;
"1"     " Roy \r"
"2"     " Ted\r"
"3"     " Sam\r"
"4"     " Bob\r"
sqlite>
Команда .output
Данная команда перенаправляет вывод в файл или обратно на экран.
Синтаксис:
.output FILENAME
 .output stdout
где,
  • FILENAME - имя файла, куда направлен вывод
  • stdout - направит вывод на экран
Команда .read
Читает и выполняет SQL инструкции из файла.
Синтаксис:
.read FILENAME
где FILENAME - имя файла содержащего SQL инструкции
Пример:
Создайте текстовый файл, содержащий следующие SQL запросы:
BEGIN TRANSACTION;
CREATE TABLE tbl3 (name VARCHAR(30), lastname VARCHAR(50), num INT);
INSERT INTO tbl3 VALUES ('Jim', 'Green', 1653);    
INSERT INTO tbl3 VALUES ('Ann', 'Folkin', 1891);    
INSERT INTO tbl3 VALUES ('Fredy', 'Donovan', 2345);    
COMMIT;
Назовем созданный файл exam.sql, и выполним следующие команды:
sqlite> .read exam.sql
sqlite> SELECT * FROM tbl3;
Jim|Green|1653
Ann|Folkin|1891
Fredy|Donovan|2345
sqlite>
Команда .schema
Данная команда выдаст все SQL инструкции CREATE TABLE и CREATE INDEX использованные для создания таблиц и индексов текущей базы данных. Возможно указание имени конкретной таблицы, для которой необходимо вывести SQL инструкцию ее создания.
Синтаксис:
.schema ?TABLE?
где, ?TABLE ? - необязательное имя таблицы
Пример:
sqlite> .schema
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE tbl1 (one integer primary key autoincrement, two varchar(50), three real);
CREATE TABLE tbl2 (ikey integer integer primary key, nm VARCHAR(20));
CREATE TABLE tbl3 (name VARCHAR(30), lastname VARCHAR(50), num INT);
CREATE UNIQUE INDEX itbl2 on tbl2(ikey);
sqlite> 
Команда .tables
Команда выдаст список названий таблиц созданных в текущей базе данных. Возможно, использовать определение шаблона, для выдачи имен таблиц удовлетворяющему шаблону. Синтаксис шаблона аналогичен определению шаблона в предложении LIKE.
Синтаксис:
.tables ?PATTERN?
где ?PATERN? - необязательное определение шаблона поиска
Пример:
sqlite> .tables
sqlite_sequence  tbl1             tbl2             tbl3
sqlite> .tables %tb% 'с шаблоном
tbl1  tbl2  tbl3
sqlite>
Команда .width
Используется для установки ширины столбцов, при формате вывода установленном в column.
Синтаксис:
.width NUM NUM :
где NUM - ширина соответствующего столбца в символах.
Пример:
sqlite> .mode column
sqlite> .width 3 10 7
sqlite> SELECT * FROM tbl1;
1    hello       3.1
2    is          5.34
3    from
sqlite>

Монтирование FTP SFTP в Linux Ubuntu

Для монтирования будем использовать FUSE модули curlftpfs (http://curlftpfs.sourceforge.net/)
и sshfs (http://fuse.sourceforge.net/sshfs.html).
curlftpfs хорош тем, что поддерживает шифрование (SSLv3/TLSv1), может работать поверх HTTP-прокси
и автоматически обрабатывает ситуации разрыва соединения. Sshfs интересен
возможностью кэширования содержимого директорий.

Для работы с FUSE от имени локального пользователя нужно добавить его в группу fuse:

   sudo addgroup логин fuse

Настраиваем права доступа к директории в которую будем производить монтирование:

   chgrp fuse /home/user/mnt
   chmod g+w /home/user/mnt

Ставим curlftpfs и sshfs:

   aptitude install fuse-utils curlftpfs sshfs

монтирование FTP директории производится командой:

   curlftpfs ftp://ftp.test.ru /home/user/mnt
или если используется пароль:
   curlftpfs ftp://логин:пароль@ftp.test.ru /home/user/mnt

Кодировку можно задать через

   curlftpfs -o codepage=koi8-r,iocharset=utf8 ftp://ftp.test.ru /home/user/mnt

где koi8-r кодировка на ftp-сервере, utf8 - кодировка локальной системы.
Выход через http-прокси можно организовать через опцию "-o proxy=host:port"

Автоматизировать ввод пароля можно через стандартный ~/.netrc файл (man netrc):

    machine ftp.test.ru
    login логин 
    password пароль


Для монтирования SSH

   sshfs test@test.ru:/home/test /home/user/mnt

Отмонтирование:

   fusermount -u /home/user/mnt