Ура!Ура!
[info]corpix
Вот появилось время...и я полностью переписал зачатки своего блогерского движка) ( http://corpix.ru/ )
Сейчас конечно знаний больше по Yii...чем раньше...
Очень помогло изучение исходного кода Юпи! Андрея Опейкина
http://andrey.opeykin.ru/yupe-001-wait/

п.с. конечно это нафиг никому не нужно...но я пишу для себя =)
Да....и вообще..интересная штука этот Yii...очень интересная)


Надоело
[info]corpix
В посленднее время всё происходящее вокруг как-то очень сильно грузит голову...нет времени дописать свой движ для блога...вообще ни на что времени нет...мой день начинается с того, что я просыпаюсь, умываюсь и даже не поев сажусь за компьютер....и принимаюсь за заказы...монотонно...уже "немножко" надоело.

Ежегодный слёт сисадминов.
[info]corpix
Очень хочу поехать.
Кто со мной?)
http://sletadminov.ru/

Регаемся =) И едем 31июля...вообще не плохо машину найти было бы. Палатку может быть я подмучу...или если есть у кого, берите, не жадничайте :P

У меня в блоге: http://corpix.ru/blog/editpost/29


mozilla-thunderbird-3.0_beta2-r1 gentoo
[info]corpix
Поставил себе thunderbird2, но там не работают хоткеи при включенной русской раскладке.
Задумался о thunderbird3, но не нашёл её в портежах, чтож...ставим из оверлея =)
Тут ебилды.
Как создать оверлэй?
Создаём папку...
/usr/local/portage
Прописываем её в самый конец make.conf:
PORTDIR_OVERLAY="/usr/local/portage"
Готово...при сборке ПО portage будет использовать овелей, если там найдётся тот пакет, который вы хотите поставить и версия его будет выше или равна той, что лежит в портежах.

Создаём папки
/usr/local/portage/mail-client
Переходим в /usr/local/portage/mail-client
Делаем
svn co http://gentoo-overlays.zugaina.org/mozilla/portage/mail-client/mozilla-thunderbird/
echo "=mail-client/mozilla-thunderbird-3.0_beta2-r1 ~x86" >> /etc/portage/package.keywords
Ещё нам понадобится nspr-4.8
Создаём папки
/usr/local/portage/dev-libs
cd /usr/local/portage/dev-libs
svn co http://gentoo-overlays.zugaina.org/sabayon/portage/dev-libs/nspr/

echo ">=dev-libs/nspr-4.8 ~x86" >> /etc/portage/package.keywords
echo ">=dev-libs/nss-3.12.3 ~x86" >> /etc/portage/package.keywords
cd /usr/local/portage/dev-libs/nspr
mkdir files && cd files
cp /usr/portage/dev-libs/nspr/files/* ./
ebuild /usr/local/portage/dev-libs/nspr/nspr-4.8.ebuild digest

Готово, собираем thunderbird-3.

Безопасность
[info]corpix
Парочка заметок.

Входы.

В /var/log/ есть 2 файла... lastlog и faillog...
Им необходимо выставлять chmod 600, чтобы другие пользователи не смогли их читать.
И всякие "бяки" будут получать такое сообщение, при попытке получить информацию о входах, например:
$ lastlog
/var/log/lastlog: Permission denied


Заметка по поводу nginx.

/etc/logrotate.d/nginx
Содержимое такое:
/var/log/nginx/*.log {
daily
missingok
rotate 90
notifempty
postrotate
kill -USR1 `cat /var/run/nginx.pid`
chown root:root /var/log/nginx/*.log-*
chmod 600 /var/log/nginx/*.l*
endscript
}


На мой взгляд наиболее безопасное хранение логов...
А вообще...лучше syslog-ng ничего нету ;) Потом опишу процедуру перехода(если это реально...то в скором времени накопаю).

mke2fs
[info]corpix
Собираю RAID1 из 2х дисков по терабайту...
Наткнулся на интересность в mke2fs...
При выполнении:
#  mke2fs -j /dev/sdb1
Получаю:
mke2fs 1.41.3 (12-Oct-2008)

Warning!  Your mke2fs.conf file does not define the ext3 filesystem type.
You probably need to install an updated mke2fs.conf file.


2х секундное ожидание...и фска начинает создаваться...
Погуглил...как итог ничего вразумительного :D
Всё верно...ругается, но работает...как в народе говорится "ну и хуй с ним!"


Включаем iptables в ядре gentoo-sources
[info]corpix
В будущем дополню ещё мануалом...а пока тока пикча)
(Click to enlarge)


Tags:

Gentoo-sources
[info]corpix
Сегодня мне понадобилось кое чего подсмотреть в конфе ядра на сервере...
Я по привычке сделал
cd /usr/src/linux && genkernel --manuconfig all

Но...получил ошибку:
Could not find source tarball /var/cache/genkernel/src/e2fsprogs-1.39.tar.gz. Please refetch.

Решается так:
ls -la /var/cache/genkernel/src/ | grep e2
Смотрим версию файла...
Далее
nano /etc/genkernel.conf
В самом конце ставим правильную версию.
Например так:
E2FSPROGS_VER="1.40.9"
E2FSPROGS_DIR="e2fsprogs-${E2FSPROGS_VER}"


Также у меня возникла проблема не соответствия симлинка /usr/src/linux моему текущему ядру...
Решается тоже проще простого:
uname -a
Вспомнили ...а какаяже у нас версия? (вообще её наизусть надо знать =) )
eselect kernel list
Посмотрели номерок текущего ядра =)
eselect kernel set 3
Ну например...3 ядро в списке =)
Всё, теперь всё ок!

Tags: ,

Postgres пароли пользователей Gentoo
[info]corpix
Решаю проблему с паролями.
Каждый пользователь может просто набрать команду psql и успешно подключиться к бд.
Чтож...запретим это..вот так
# nano /var/lib/postgresql/data/pg_hba.conf
В самый конец пишем ->
localallall md5
hostallall127.0.0.1/32md5
hostallall::1/128md5





Процедуру по идее нужно проводить до создания каких-либо пользователей.


Vnstat gentoo
[info]corpix
Поставил vnstat.
Очень удобная штучка..особенно с php фронтэндом =)
Итак, чтоб поставить делаем просто:

emerge vnstat


Далее определяемся с тем, какие интерфейсы нам надо мониторить...
Мне, например нужен только eth0...
Для каждого из них выполняем команду:

vnstat -u -i ИНТЕРФЕЙС

Например:

vnstat -u -i eth0

Собственно vnstat, запущенный с этими параметрами пытается обновить данные об интерфейсе, но так как у нас их просто нет, то он создаёт новую базу(не мускул ил постгрес...а свою XD).
По идее вместе с vnstat в gentoo идёт ещё скрипт для cron.
Он располагается в /etc/cron.hourly, его можно удалить, предварительно скопировав его содержимое...
Мы будем обновлять статистику каждую минуту, чтобы выиграть на актуальности.
Делаем:

nano /etc/cron.d/vnstat

И заполняем его таким содержимым:
* * * * * root if [ -x /usr/bin/vnstat ] && [ `ls /var/lib/vnstat/ | wc -l` -ge 1 ]; then /usr/bin/vnstat -u; vnstat --dumpdb -i eth0 > /www/stat.dream-web.ru/vnstat_dumps/vnstat_dump_eth0; fi

Я создал дополнительный поддомен для мониторинга состояния своего сервера...
Это удобно =)

vnstat_dumps - Это папка с дампами, будем указывать её в конфиге фронтэнда.
vnstat_dump_ - Преффикс для всех файлов дампа, будьте внимательны я долго не мог понять, почему скрипт не видит дамп :D

Далее нам нужно слить сам фронтэнд с офсайта http://www.sqweek.com/sqweek/index.php?p=1
Привожу кусочки своего config.php:
$iface_list = array('eth0');
$iface_title['eth0'] = 'eth0';
$vnstat_bin = '';
$data_dir = dirname(__FILE__).'/../../vnstat_dumps';
$graph_format='png';

Теперь мы готовы к пуску =) ...предварительно перезапустив крон:
/etc/init.d/vixie-cron restart
Нажмите чтобы увеличить
Tags: ,

SQL Injection? А что это?
[info]corpix
Yii предоставляет прекрасные возможности работы с БД =)
Использование плейсхолдеров(маркеров) просто шикарный путь к избавлению от гемора при скул инъекциях =)

Отличненько =)
[info]corpix
Я нашёл достойную(в моём понимании) альтернативу Zend Framework!
Быстрее в несколько раз, с хорошей и главное ПОНЯТНОЙ документацией.
Итак...это Yii http://www.yiiframework.com/doc/guide/ru/
Он обладает всеми необходимыми для меня наборами средств.
И выполняется у меня на сервере в среднем за 0.01145 или 0.02976(при нагрузке)
Я счастлив =)

Tags:

Заебали
[info]corpix
Чё за придурки добавляются...
Мусора блин, шлюхи какие-то домохозяйки...огалтелые нацики...по пауку бля :D
Это наверное модно сейчас читать журнал программиста, где обывателю ничего не понятно...
Мда...

Zend Framework сюрпризы в дом приносит.
[info]corpix
Стало мне интересно, а как организован выход в ЗФ после отправки хедера с редиректом браузеру пользователя...вернее мне стало интересно а реализован ли он вообще?
Чтоб мне не делать каждый раз die() после редиректа.
Посмотрел...вот он редирект:
  protected function _redirect($url)
    {
        if ($this->getUseAbsoluteUri() && !preg_match('#^(https?|ftp)://#', $url)) {
            $host  = (isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:'');
            $proto = (isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']!=="off") ? 'https' : 'http';
            $port  = (isset($_SERVER['SERVER_PORT'])?$_SERVER['SERVER_PORT']:80);
            $uri   = $proto . '://' . $host;
            if ((('http' == $proto) && (80 != $port)) || (('https' == $proto) && (443 != $port))) {
                $uri .= ':' . $port;
            }
            $url = $uri . '/' . ltrim($url, '/');
        }
        $this->_redirectUrl = $url;
        $this->getResponse()->setRedirect($url, $this->getCode());
    }


Я не заглядывал дальше, мне страшно стало. В ближайшем времени хотелось бы написать патчи, которые убирают(частично) защиту от дурака.
Простите, но уж слижком код громоздкий(((
Tags:

Postgres timestamp Unix time
[info]corpix
2 функции для преобразования таймштампов


CREATE OR REPLACE FUNCTION ts2int(timestamp without time zone) RETURNS int AS
$$
select extract('epoch' from $1)::integer;
$$ LANGUAGE SQL STRICT STABLE;

CREATE OR REPLACE FUNCTION int2ts(integer) RETURNS timestamp AS
$$
SELECT ( TIMESTAMP WITH TIME ZONE 'epoch' + $1 * INTERVAL '1second')::timestamp without time zone;
$$ LANGUAGE SQL STRICT STABLE;


Тестил в psql...вывод:
database=# select int2ts('1240060782');
       int2ts       
---------------------
 2009-04-18 17:19:42
(1 row)

database=# select ts2int('2009-04-18 17:19:42');
   ts2int  
------------
 1240060782
(1 row)
Tags:

Ура!
[info]corpix
Закончен перевод портала на СУБД PostgresQL.
Теперь предстоит стадия недельного тестирования и отладки всех функций(с базой работаю не на абстрактном уровне).
Скорость работы с базой данных выросла примерно в 2 раза!
Я уверен, она возрастёт, когда я переключу сайт в режим использования unix сокетов для работы с СУБД. Но...это потом.

Распределение прав на уровне строк. Postgres
[info]corpix
Оригинал тут: http://www.opennet.ru/tips/info/1420.shtml
Некоторые базы данных, такие как MSSQL и MySQL5, имеют специальные механизмы для разграничения доступа 
пользователей к различным ресурсам БД вплоть до ячеек таблиц. PostgreSQL не нуждается в таких излишествах. 
На практике обычно требуется разграничить доступ на уровне строк. Для того, что бы сделать это, есть простой способ, 
основанный на использовании представлений, правил и функции current_user() или эквивалентного ей 
ключевого слова user.

Создадим любую таблицу от имени 'postgres', в которой обязательно должно присутствовать поле 
для хранения логина:

   CREATE TABLE table1
(
fio text NOT NULL,
name text,
something integer,
login text,
CONSTRAINT table1_pkey PRIMARY KEY (fio)
)
WITHOUT OIDS;
ALTER TABLE table1 OWNER TO postgres;
Ни один пользователь не имеет никаких привилегий на эту таблицу. Создадим представление, и дадим необходимым пользователям некоторые привилегии: CREATE OR REPLACE VIEW table1v AS
SELECT table1.fio, table1.name, table1.something
FROM table1
WHERE table1.login = user;
ALTER TABLE table1v OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE ON TABLE table1v TO math_user;
Создадим три правила - для вставки, обновления и удаления строк из представления: CREATE OR REPLACE RULE add AS
ON INSERT TO table1v DO INSTEAD INSERT INTO table1 (fio, name, something, login)
VALUES (new.fio, new.name, new.something, user);
CREATE OR REPLACE RULE upd AS
ON UPDATE TO table1v DO INSTEAD UPDATE table1 SET fio = new.fio, name = new.name, something = new.something, login = user
WHERE table1.login = user;
CREATE OR REPLACE RULE del AS
ON DELETE TO table1v DO INSTEAD DELETE FROM table1 where login=user;
Готово! Теперь пользователь math_user может просматривать или удалять только свои записи и вставлять или изменять записи только под своим именем.

Tags:

Создание поля auto_increment в PostgresQL
[info]corpix
Я перешёл на postgres с mysql...и в целом доволен)
Но...в процессе "перехода" у меня возникало множество вопросов...вот один из них...
Auto_increment в postgres? Конечно есть)
Только здесь это называется "Последовательность"
Пример создания таблицы:

CREATE SEQUENCE city_id_seq;
CREATE TABLE city (
id integer NOT NULL DEFAULT NEXTVAL('city_id_seq'),
parent integer NOT NULL,
name varchar(256) NOT NULL,
priority integer NOT NULL,
CONSTRAINT city_pkey PRIMARY KEY (id)
);

Не сложно заметить, что первой я создал последовательность а потом уже таблицу..где одному из полей присвоил соответствующий атрибут)))

Syslog-ng facility`s кратко о нужном ;)
[info]corpix
/* facility codes */
#define LOG_KERN        (0<<3)  /* kernel messages */
#define LOG_USER        (1<<3)  /* random user-level messages */
#define LOG_MAIL        (2<<3)  /* mail system */
#define LOG_DAEMON      (3<<3)  /* system daemons */
#define LOG_AUTH        (4<<3)  /* security/authorization messages */
#define LOG_SYSLOG      (5<<3)  /* messages generated internally by syslogd */
#define LOG_LPR         (6<<3)  /* line printer subsystem */
#define LOG_NEWS        (7<<3)  /* network news subsystem */
#define LOG_UUCP        (8<<3)  /* UUCP subsystem */
#define LOG_CRON        (9<<3)  /* clock daemon */
#define LOG_AUTHPRIV    (10<<3) /* security/authorization messages (private) */
#define LOG_FTP         (11<<3) /* ftp daemon */

        /* other codes through 15 reserved for system use */
#define LOG_LOCAL0      (16<<3) /* reserved for local use */
#define LOG_LOCAL1      (17<<3) /* reserved for local use */
#define LOG_LOCAL2      (18<<3) /* reserved for local use */
#define LOG_LOCAL3      (19<<3) /* reserved for local use */
#define LOG_LOCAL4      (20<<3) /* reserved for local use */
#define LOG_LOCAL5      (21<<3) /* reserved for local use */
#define LOG_LOCAL6      (22<<3) /* reserved for local use */
#define LOG_LOCAL7      (23<<3) /* reserved for local use */

PostgresQL типы данных.
[info]corpix
Порой привычные вещи шокируют. Я не знал, что постгрес может хранить такие типы данных...очень интересно...как например реализовано хранение типа line(бесконечная линия на плоскости)

ИмяПсевдонимыОписание
bigintint8знаковое восьмибайтное целое число
bigserialserial8восьмибайтное целое число с автоинкрементом
bit [ (n) ] битовая строка с фиксированной длиной
bit varying [ (n) ]varbitбитовая строка с переменной длиной
booleanboolлогическое значение (истина/ложь)
box четырёхугольник на плоскости
bytea двоичные данные ("массив байт")
character varying [ (n) ]varchar [ (n) ]строка с переменной длиной
character [ (n) ]char [ (n) ]строка с фиксированной длиной
cidr адрес сети IPv4 или IPv6
circle круг на плоскости
date календарная дата (год, месяц, день)
double precisionfloat8число с плавающей точкой двойной точности
inet адрес узла IPv4 или IPv6
integerint, int4знаковое четырёхбайтовое целое
interval [ (p) ] промежуток времени
line бесконечная линия на плоскости
lseg сегмент линии на плоскости
macaddr MAC адрес
money денежное значение (в валюте)
numeric [ (p, s) ]decimal [ (p, s) ]точное числовое значение с выбраной точностью
path геометрический путь на плоскости (ломаная)
point геометрическая точка на плоскости
polygon закрытый геометрический путь на плоскости (полигон)
realfloat4число с плавающей точкой одинарной точности
smallintint2знаковое двухбайтное целое число
serialserial4четырёхбайтное целое число с автоинкрементом
text строка символов перменной длины
time [ (p) ] [ without time zone ] время дня
time [ (p) ] with time zonetimetzвремя дня, включа временную зону
timestamp [ (p) ] [ without time zone ] дата и время
timestamp [ (p) ] with time zonetimestamptzдата и время, включая временную зону


Tags:

Home