2 окт. 2010 г.

Миграция с FreeBSD на Linux

Для миграции нужен внешний USB HDD достаточного размера для переноса нужной информации.

Дальше дело было так:

  1. Подключил внешний винт к USB.
  2. Запустил утилиту sysinstall (моно было бы воспользоваться командой, но лень было искать). Создал слайс типа 131 (Linux)
  3. Устанавливаем /usr/ports/sysutils/e2fsprogs
  4. Форматируем винт под ext2: mke2fs /dev/da0s1 (da0 - это как раз тот самый внешний винт)
  5. Подгружаем модуль ядра kldload ext2fs
  6. Монтируем mount -t ext2fs /dev/da0s1 /mnt
  7. Заливаем всё, что хотим в /mnt
  8. Устанавливаем ubuntu
  9. Подключаем диск любым удобным способом.
  10. Меняем права на своего юзера (во FreeBSD единственный с номером 1001, в Ubuntu 1000) - chmod -R user:user (имя папки)
  11. Ставим sudo apt-get install convmv
  12. Перекодируем имена файлов из KOI8-R в UTF-8: convmv -f KOI8-R -t UTF8 --notest -r имя_папки
  13. Копируем все файлы куда хотим.

У меня таким образом завелось куча программ и никакие настройки не потерялись. В частности Virtualbox с корпоративной вендой, в которой крутится Outlook. Ну конечно пришлось подправить имена сетевых интерфейсов.

Установка PostgreSQL на FreeBSD

Заметка написана для тех, кто первый раз встречается с PostgreSQL, но, возможно, имел дело с MySQL. Рассчитана в основном для начинающих пользователей, хотя и требует некоторого знания особенностей работы с FreeBSD.

Предисловие или особенности локализации FreeBSD

PostgreSQL 9.0 использует кодировку UTF-8 по умолчанию. Поскольку в качестве операционной системы я выбрал имеющуюся у меня FreeBSD 8.1, которая не совсем полноценно поддерживает эту кодировку, хочу описать особенности локализации. С UTF-8 не умеет работать консольный драйвер syscons, т.е. в текстовой консоли UTF-8 вы использовать не сможете. Сначала может показаться, что UTF-8 использовать будет просто невозможно, но если учесть, что управление сервером осуществляется по сети, а клиенты SSH как правило умеют работать с любой кодировкой, то исользование UTF-8 не вызовет затруднений. Если же вы используете Xorg, то можете воспользоваться любым графическим терминалом, которые в большинстве своём так же без проблем работают с UTF-8 (например, gnome-terminal).

Наиболее удобным способом локализации системы оказался метод Class Login, описанный в handbook - http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/using-localization.html (см. п. 21.3.4.1.1.). Я использовал уже имеющийся класс russian слегка модифицировав его путём замены кодировки KOI8-R на UTF-8. Метод выбран из-за того, что хотелось сохранить работоспособность пользователя root в консоли, т.е. сохранить ему LOCALE, поддерживаемую syscons. При доступе по SSH пользователь root сохраняет LOCALE пользователя, с которого произошло переключение по команде su root.

Если вы используете другой способ локализации и тем более, используете KOI8-R, то вам придётся позаботиться о том, чтобы пользователь pgsql (появится после установки postgresql из порта) имел локаль UTF-8. Так же имеется возможность заставить работать postgresql с кодировкой KOI8-R, но я считаю это нецелесообразным. Использование KOI8-R далее в тексте не рассматривается.

Установка PostgreSQL

Установку будем производить из портов, но не непосредственно, а с помощью portmaster, который можно найти в /usr/ports/ports-mgmt/portmaster.

Если ранее была установлена старая версия клиента, заменяем на новую:

portmaster -o databases/postgresql90-client postgresql-client-\*

Если клиент ранее не был установлен, то установим его следующим образом:

portmaster databases/postgresql90-client

Устанавливаем сервер PostgreSQL 9.0:

portmaster databases/portgresql90-server

После скачивания и сборки из исходного кода мы получаем готовый сервер PostgreSQL. Теперь нужно позаботиться о создании кластера базы данных. Поскольку всю черновую работу сделал за нас порт, мы можем не заботиться о создании необходимого пользователя, а сразу перейти к инициализации базы.
Во-первых, разрешим автоматический запуск сервера в /etc/rc.conf:

postgresql_enable="YES"

Все необходимые команды и параметры инициализации, которые описаны в документации, будут выполнены при запуске:

/usr/local/etc/rc.d/postgresql initdb

На этом шаге нас может поджидать проблема с кодировками. Если это всё-таки случилось, советую перечитать предисловие и перейти к использованию UTF-8.

По завершении процедуры инициализации мы получили базу по адресу /usr/local/pgsql/data/. Наш сервер готов к запуску:

service postgresql start

Сервер будет запускаться автоматически при каждом запуске сервера, т.к. мы внесли необходимую запись в rc.conf ранее.

Первоначальное конфигурирование сервера PostgreSQL

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

Есть 2 способа управлять базами данных и пользователями PosgreSQL: утилиты коммандной строки (createuser, createdb, dropuser, dropdb и др.) и интерактивный терминал.

Воспользуемся интерактивным терминалом psql для настройки прав доступа. Первую команду следует выполнять от root, т.к. в этом случае нам не потребуется пароль для пользователя pgsql:

# su pgsql
$psql -U pgsql template1

В ответ получим что-то вроде:

psql (9.0.0)
Type "help" for help.
template1=#

Здесь мы можем ознакомиться с предоставляемыми нам возможностями с помощью команд \h и \?. Для примера попробуем создать пользователя test и базу данных test к которой он будет иметь доступ.

template1=# create user test;
CREATE ROLE
template1=# \du List of roles Role name | Attributes | Member of -----------+-----------------------------------+----------- pgsql | Superuser, Create role, Create DB | {} test | | {}

Обращаю ваше внимание на то, что команда должна завершаться символом ";". Если символ отсутствует, то оболочка ожидает продолжение команды. Если вы вдруг забыли устновить ";" после команды, можете сделать это в следующей строке. После выполнения команды всегда выдаётся ответ, как в нашем примере выше "CREATE ROLE".

Как мы видим из результатов вывода команды \du у нас имеются 2 пользователя PostgreSQL: pgsql - обладающий правами на настройку сервера, создания пользователей и баз данных, и наш новый пользователь test с ограниченными правами. Мы можем изменить права доступа пользователя следующим образом:

template1=# alter user test superuser createrole createdb;
ALTER ROLE
template1=# \du
                       List of roles
Role name | Attributes | Member of -----------+-----------------------------------+----------- pgsql | Superuser, Create role, Create DB | {} test | Superuser, Create role, Create DB | {}

Советую по возможности избегать раздачи таких высоких прав доступа. Как правило, нет смысла давать такие права для обычного пользователя. Вернём нашему пользователю test изначальные права:

template1=# alter user test nosuperuser nocreaterole nocreatedb;
ALTER ROLE
template1=# \du
                       List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 pgsql     | Superuser, Create role, Create DB | {}
 test      |                                   | {}

Ограничим доступ паролями:

template1=#\password test
Enter new password: 
Enter it again:

Процедура создания пароля стандартная — вас просят дважды ввести пароль для пользователя. Аналогичным образом защитите суперпользователея (чтобы иметь возможность управлять сервером).

Теперь можем включить проверку пароля при подключении к нашему серверу. За это отвечает файл /usr/local/pgsql/data/pg_hba.conf:

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

Как видите, имеется 3 записи для локальных подключений. Все записи указывают на отсутствие проверки пароля - "trust". Заменим это значение на "md5":

# TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Перезапустим наш сервер, чтобы применить настройки:

service postgresql restart

Пробуем подключиться к интерактивной оболочке. Как видите, теперь нам предлагают ввести пароль для нашего пользователя:

$ psql -U pgsql template1
Password: 
psql (9.0.0)
Type "help" for help.
template1=#

Создадим базу для нашего пользователя test и сделаем его владельцем базы:

template1=# create database test;
CREATE DATABASE
template1=# alter database test owner to test;
ALTER DATABASE

То же самое можно сделать и с помощью одной команды:
template1=# create database test owner=test;
CREATE DATABASE

Просмотрим имеющиеся у нас базы данных:

template1=# \l
                             List of databases
   Name    | Owner | Encoding | Collation |    Ctype    | Access privileges 
-----------+-------+----------+-----------+-------------+-------------------
 postgres  | pgsql | UTF8     | C         | ru_RU.UTF-8 | 
 template0 | pgsql | UTF8     | C         | ru_RU.UTF-8 | =c/pgsql         +
           |       |          |           |             | pgsql=CTc/pgsql
 template1 | pgsql | UTF8     | C         | ru_RU.UTF-8 | =c/pgsql         +
           |       |          |           |             | pgsql=CTc/pgsql
 test      | test  | UTF8     | C         | ru_RU.UTF-8 | 
(4 rows)

Думаю, принцип понятен. В дальнейшем руководствуемся документацией, которую можно получить с помощью команд "\h" и "\?". Узнать подробности об определённом запросе можно следующим образом (для примера возьмём "drop user"):

template1=# \h drop user
Command:     DROP USER
Description: remove a database role
Syntax:
DROP USER [ IF EXISTS ] name [, ...]

Графические средства для управления PostgreSQL

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

  • phpPgAdmin - как видно из названия, написана на PHP, т.е. удобна в тех случаях, когда с базой работает веб-приложение. Для работы требуется любой веб-сервер с поддержкой PHP.
  • pgAdmin - кроссплатформенное приложение, написанное на C++. Поддерживает множество платформ: FreeBSD, Linux, Mac OS, Windows. Пользователи FreeBSD могут установить приложение из портов: /usr/ports/databases/pgadmin3/.

22 сент. 2010 г.

Настройка модема Huawei E150 в Ubuntu

К сожалению, установка модема Huawei E150 в Ubuntu у меня прошло не очень гладко. Изначально модем не определялся. Для корректной работы модема требуется установить пакет usb-modeswitch. Вот тут, к сожалению, требуется доступ к интернету. Итак, выполняем:

$ sudo apt-get install usb-modeswitch

Далее можно подключить модем и пощупать устройства. Показываю на своём примере:

fsa@fsa-laptop:~$ lsusb 
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 006: ID 12d1:1446 Huawei Technologies Co., Ltd. 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 04f2:b071 Chicony Electronics Co., Ltd 2.0M UVC Webcam / CNF7129
Bus 002 Device 002: ID 058f:6366 Alcor Micro Corp. Multi Flash Reader
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Как видим, наш модем успешно опознан, но до сих пор не работает. Объясняем системе что делать с устройством:

sudo modprobe usbserial vendor=0x12d1 product=0x1446

Значения полей vendor и продукт копируем из вывода команды lsusb.

Но и после этих действий у меня модем не опознался. Решение было простое - вытащить модем и снова его подключить. Всё! Модем готов "к труду и обороне"! Дальше в несколько кликов в network-manager выбираем наш модем и оператора, симка которого у нас установлена, и вы в сети. Кстати, на выбор имеются даже такие экзотические сотовые операторы как у нас: Мотив и Ютел. Ютел работает точно, для Мотива настройки проверял - всё верно!

29 апр. 2010 г.

Концепт персонального ICQ транспорта для Jabber

Думаю что я не одинок, и множество пользователей интернет-месседжеров проклинают ICQ и сидят в двух сетях — открытой и ICQ. Как бы красиво не звучали похвалы в адрес Jabber часто необходимые контакты так и не удаётся на него пересадить. Люди годами сидели на ICQ, у них множество контактов в ICQ, которых они бы не хотели потерять. А тут вы, возможно даже единственный, который твердит о Jabber. Но общаться с этим человеком нужно или просто хочется. Что же делать? Jabber даёт ответ — используйте транспорт.

Но не всё так радужно. Сама сеть ICQ очень не любит таких умников и сопротивляется. Публичные транспорты как правило ненадёжны. Не потому, что плохо написаны, а потому что ICQ начинает блокировать соединения если наберётся достаточно пользователей на одном транспорте.

Решением проблемы видится некий персональный ICQ транспорт. Конечно, вполне возможно запустить свой собственный сервер и поднять свой собственный транспорт, но это несколько неудобно:

  • Свой собственный Jabber-сервер с транспортом достаточно тяжёл.
  • В сети ICQ постоянно передаются спам-сообщения. Например, при отключеном антиспаме я получаю 1 сообщение раз в несколько минут или даже чаще. Как правило транспорты обладают слабыми антиспам системами, а клиенты Jabber просто не рассчитаны на борьбу со спамом и они вообще не знают что такое ICQ.
  • Список ICQ контактов стягивается с сервера. У меня он достаточно крупный. Все попытки его вычистить так ни к чему и не привели. В результате ростер захламляется ненужными ICQ контактами, которые может быть когда-то и понадобятся.

Что же всё-таки такое персональный ICQ транспорт? Это лёгкий сервер, который при запуске автоматически или при запросе пользователя подключается к сети ICQ и постоянно находится в сети. Другая часть представляет собой упрощенный jabber-сервер, который не имеет своих пользователей и отвечает только на запросы других jabber-серверов, а если быть точным, только от заранее разрешённых и более того, отвечают только заранее указанным в конфигурации контактам.

Сервер должен так же управлять контактами, которые будут передаваться в ростер. Каждому пользователю присваивается уровень доступа:

  • Обычные пользователи с которыми необходимо общаться. Эти пользователи передаются в ростер.
  • Пользователи с автоответчиком для тех, с кем общаешься не часто. Сообщения от них непосредственно не пердаются. Передаютс только уведомления о том, что пользователь тебе что-то сказал. В ростер не добавляются.
  • Полный автоответчик для тех, с кем общаться не собирался (новые пользователи, чёрный список и пр). Можно сделать несколько групп и каждой из них присвоить своё сообщение на автоответчике или вообще попросту сообщения убивать.

Если вы не подключены к транспорту, а сам транспорт подключен к ICQ, входящие сообщения копятся на нём. При подключении к транспорту или сбрасываются непосредственно вам или доставляется уведомление о том, что имеются новые сообщения, например, на случай если вы вышли с мобильного телефона и вам некогда разбираться с «оффлайн» сообщениями.

Можно сделать своего рода планировщик и задать, что даже если транспорт подключен, сообщения на Jabber не ретранслируются. Пример: вы оставили месседжер включенным на работе и нет смысла на него пересылать сообщения когда вас на работе нет.

Можно вести лог на сервере и при необходимости запрашивать требуемое количество сообщений или сообщения за определённый период.

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

17 апр. 2010 г.

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

Во многих средствах массовой информации мы только и слышим о пиратстве, попирающем авторское право. Пираты тут украли, тут честный гражданин недополучил прибыли. Но так ли это?

Меня однажды посетила мысль. Так ведь это весь OpenSource с их GPL, BSD и многими другими свободными лицензиями пострадавшие! Это они недополучили прибыль. А те, кто на каждом углу кричит о недополучении прибыли лукавят.Приведу несколько примеров. Начнём со «всеми любимой» корпорации Microsoft. Сколько раз эта бедная фирма недополучала прибыли от воровства её продуктов. Хотя стоп! Почему система так широко распространена? Почему её программное обеспечение доминирующее на рынке? Ответ прост. Изначально всё распространялось пиратами. И им никто даже палки в колёса не ставил, не говоря уже о попытках защитить своё авторское право и посадить кого-то за распространение контрафакта. Маховик раскрутился. Windows 3.11, потом 95, потом 98, потом 2000, потом XP беспрепятственно проникала на компьютеры пользоваетелей. Даже супермощная защита XP неожиданно «сломалась» усилиями самой Microsoft, т.к. была выпущена «корпоративная версия» с соответствующими патчами от активации, а также в сеть какой-то очень нехороший хакер выложен кейген! Я просто уверен, что кейген имеет корни в самой корпорации. Windows XP стала доминировать на рынке. Ещё бы. Её мог поставить каждый желающий. А линукс? Да нафиг этот линукс нужен, когда тут человекоориентированная система есть, да ещё и на халяву. И нет никаких «консолей». Ещё в подтвердлении моих слов, что крупные фирмы не особо борятся за защиту своих авторских прав. Ну например, все до сих пор ещё помнят дело простого директора школы из Пермского края. Дело было громкое. Однако с первых заявлений стало понятно, что Microsoft не имеет никаких претензий к директору. Тут я понимаю политику Microsoft. Пусть даже в школе стоят пиратские Windows, они все идут на будущие сверхприбыли корпорации!!! К чёрту авторские права, пользуйтесь и детей подсаживайте! А вы бы будь на месте Microsoft не так бы поступили?

Возьмём другие области ПО. Графика. Тут полная власть Adobe с её Photoshop. Уже даже любая обработка фотографий для основной массы людей — это «фотошоп». Никто не говорит Gimp. Кстати, с Gimp отдельный вопрос. Его разработчики очень пострадали от пиратов. В то время, как бесплатный фотошоп раздавался направо и налево их продукт не был должным образом востребован. Она развивался небольшой (по отношению к количеству пользователей фотошоп) группой энтузиастов фактически для себя. Я сильно сомневаюсь, что Gimp пользуется спросом в организациях, особенно крупных. А без их поддержки проект не может интенсивно развиваться, как развивался в своё время Photoshop благодаря всей массе пользователей приатской версии. Имеено этих клиентов отбил «бесплатный» фотошоп. Как бы не хотелось сейчас этим организациям перейти на Gimp, но благодаря политике государства, пришлось фотошоп купить. А что делать, привыкли. Это же «стандарт».

Можно привети и другие примеры, такие как AutoCAD, который благополучно загнал в могилу домен torrents.ru и MathCAD. Благодаря своей «бесплатности» все потребительские запросы были направлены именно на эти продукты, а не на альтернативные OpenSource, которые имеют абсолютно другие механизмы заработка денег. А нет пользователей, нет и прибыли, нет развития.

Я думаю, на лицо лукавство оганизаций, воюющих за авторские права. Зачастую мы имеем обратную картину, отнюдь это не недополучение прибыли — это сверхприбыль за счёт пиратства, которая принимает ещё большие масштабы из-за судебных решений. А пользователи «бесплатных» Windows, Photoshop, AutoCAD, MathCAD? Задумайтесь!!! Именно вы помогаете корпорациям развивать из дорогостоящие продукты и потом подавать вам в качестве судебных решений необходимость их оплаты. Подумайте, так ли необходимы ли вам эти дорогостоящие продукты? Я не призываю вас сменить вашу точку зрения. Продукты конечно хороши, но готовы ли вы за них платить из своего собственного кармана? Почему должны платить именно вы, а не ваши работодатели, которые тоже платят тем же самым корпорациям что и вы, а не поддерживают финансово OpenSource проекты, преследующие те же цели, что и платные продукты?

10 мар. 2010 г.

Установка FreeBSD на домашний компьютер

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

http://www.tavda.net/FreeBSD/desktop/