Роман Теличко

Заметки веб-разработчика/админа

Категория Администрирование

Партицирование (partitioning) больших таблиц PostgreSQL

// Февраль 17, 2013 | 15219 просмотров | 4 комментария

Сегодня я хочу вам рассказать о партиционировании больших таблиц в моей любимой PostgreSQL.

Итак, начнём с определения:
Партиционирование (partitioning) — это разбиение больших таблиц на логические части по выбранным критериям. Партиционированные или секционированные таблицы призваны улучшить производительность и управляемость базами данных.

Вроде понятно. Теперь идём дальше. Как же разбить таблицу на партиции или секции?
В PostgreSQL эта процедура потребует небольших усилий, но результатом вы будете довольны 🙂
Читать далее…

Ubuntu. LibreOffice 4.0 в Ubuntu 12.10

// Февраль 8, 2013 | 1114 просмотров | комментариев (0)

Выпущен LibreOffice 4.0 с большим списком изменений.
Всё это можно посмотреть уже в Ubuntu 12.10, не дожидаясь следующей версии.
Для этого всего-лишь необходимо:

sudo apt-get purge libreoffice-core
sudo add-apt-repository ppa:libreoffice/libreoffice-prereleases
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install libreoffice

Но обращаю ваше внимание, что в итоге вы получите только версию 4.0.0-alpha1.

За финальной версией пока нужно идти на сайт LibreOffice за deb-пакетом для x86 или для x86_64/amd64.

Внимание! Перед продолжением, удалите LibreOffice, если он у вас уже установлен.

sudo apt-get remove libreoffice

Скачиваете tar.gz-архив, содержащий deb-пакет.
Распаковываете его

tar -xzvf LibreOffice_4.0*

Переходите в папку DEBS:

cd LibreOffice_4.0*/DEBS/

И устанавливаете

sudo dpkg -i *.deb desktop-integration/*.deb

В итоге вы получите финальную версию LibreOffice 4.0.
Минус установки не через репозиторий в том, что вам самим придётся следить за обновлением пакетов, скачивать и переустанавливать его.

Ubuntu. Как удалить репозиторий, добавленный через add-apt-repository

// Февраль 5, 2013 | 6261 просмотров | комментариев (0)

Если вы добавили репозиторий через команду add-apt-repository и захотите его удалить, то вас ждёт разочарование, поскольку команды remove-apt-repository не существует.
Зато есть ключ --remove для команды add-apt-repository.
Т.е. мы можем удалить ненужный нам репозиторий так

add-apt-repository --remove ppa:repository-for-delete

или так

add-apt-repository -r ppa:repository-for-delete

Удачи.

Тюнинг Windows 7/8 на SSD (Solid-State Drive)

// Январь 31, 2013 | 3502 просмотров | комментариев (0)

SSD-диски с каждым годом становяться всё доступнее и всё больше в объёмах. Так и я стал владельцем SSD-диска Kingston SSDNow V+200 60GB 2.5″ SATAIII, «распилив» его пополам, я установил на него любимый Linux Xubuntu 12.10 и новенькую Windows 8 Pro.
О тюнинге последней я расскажу ниже.
А вот о тюнинге Linux Xubuntu на SSD довольно неплохо рассказано вот здесь. Читать далее…

PostgreSQL. Список всех таблиц

// Январь 31, 2013 | 2218 просмотров | комментариев (1)

Вывести список всех таблиц при помощи SQL довольно просто:

SELECT
        n.nspname               AS "schema",
        c.relname               AS "table"
FROM
        pg_catalog.pg_class AS c 
LEFT JOIN 
        pg_catalog.pg_namespace AS n 
        ON n.oid = c.relnamespace
WHERE
        n.nspname NOT IN ('pg_catalog', 'pg_toast')
        AND
        c.reltablespace > 0
        AND
        c.relkind = 'r'
ORDER BY
        c.relname ASC

В результате получим набор схема-таблица.

Бэкапим Linux-сервер в Dropbox

// Январь 18, 2013 | 3976 просмотров | комментариев (0)

Если ваши серверные бэкапы могут вместиться в размер виртуального диска Dropbox’a, то думаю что разумным будет бэкапить файлы, помимо другого веника, ещё и в облако.
Начнём.
Читать далее…

Как сохранять POST-значения в access-логи nginx’a

// Январь 17, 2013 | 4801 просмотров | комментариев (0)

Если есть необходимость сохранения в лог обращений к веб-серверу nginx значения, переданные через POST, то это делается довольно просто.

Добавляем в конфиг nginx’a дополнительный log_format с именем, к примеру main_post (сама переменная называется $request_body):

log_format      main_post       '$remote_addr - [$time_local] '
                                '$host "$request" $status $bytes_sent [$request_body] '
                                '"$http_referer" "$http_user_agent" '
                                '"$gzip_ratio" $upstream_response_time';

И теперь осталось только указать этот формат вторым параметром access_log:

access_log      /var/log/nginx/access.log      main_post;

Сразу скажу о двух важных моментах:

  1. Если к логам сервера имеет доступ ещё кто-то, то все POST-данные из лога ему станут известны
  2. Лог может ОЧЕНЬ быстро разбухать в размерах

А в остальном — пользуйтесь!

Создаём загрузочную флешку с Windows 7 в Debian/Ubuntu

// Ноябрь 20, 2012 | 28591 просмотров | комментариев (0)

Итак, у нас есть

  • ISO образ с Windows 7
  • USB-флешка (/dev/sdb1)
  • Linux Ubuntu/Debian

Форматируем флешку в файловой системе NTFS:

sudo mkntfs -f /dev/sdb1

При условии что она уже была подготовлена и правильно размечена ранее.
Если же это не так, тогда ставим Gparted

sudo apt-get install gparted

И через интерфейс форматируем флешку в NTFS, не забыв установить флажёк «boot»

Следующий этап, монтируем ISO-образ в какую-то папку (/mnt/iso), монтируем флешку в какую-то папку (/mnt/flash) и копируем содержимое папки с ISO-образом в папку с флешкой.
У меня получилось так:

sudo mount -o loop ~/soft/windows/windows7.iso /mnt/iso/
sudo mount /dev/sdb1 /mnt/flash/
sudo cp -r /mnt/iso/* /mnt/flash/

Теперь самое сложное, необходимо установить программу ms-sys, которой нет в репозитории.
Программа нужна для записи правильного загрузочного сектора на флешку.
Качаем исходники с последней версией.

Распаковываем и устанавливаем:

tar -xzvf ms-sys-2.3.0.tar.gz
cd ms-sys-2.3.0/
sudo make
sudo checkinstall
sudo dpkg -i ms-sys_2.3.0-1_amd64.deb

Удалить потом можно будет с помощью комманды

sudo dpkg -r ms-sys

Записываем Windows 7 загрузчик на флешку (опция -7 отвечает за Windows 7, есть и другие версии Windows):

sudo ms-sys -7 /dev/sdb

Это всё.
Пользуемся.

Ускоряем логин через SSH в Ubuntu

// Ноябрь 14, 2012 | 668 просмотров | комментариев (0)

По-умолчанию в Ubuntu включены компоненты платного мониторинга системы Landscape, они в основном и тормозят загрузку (до 2-3 секунд).
Это дело лежит в motd. Если он вам вообще не нужен — берём напильник и выпиливаем:

  • В файлах /etc/pam.d/login и /etc/pam.d/sshd убиваем/комментируем строчки session optional pam_motd.so
  • Удаляем компоненты платного мониторинга, установленные по-умолначанию:
    aptitude remove landscape-client landscape-common
  • В /etc/ssh/sshd_config ставим PrintMotd no

Перезапускаем sshd и готово! Теперь логин в систему у нас мгновенный!

Ещё стоит упомянуть о DNSе. При использовании тормознутых DNSов логин в систему может занимать до 30 секунд.
Поэтому в файле /etc/ssh/sshd_config ещё стоит установить UseDNS no.

Если хотите, чтобы вообще ничего не выводилось при логине, то можно ещё отключить строчку с датой и IP последнего входа в систему (сообщение «Last Login»).
Для этого необходимо в файле /etc/ssh/sshd_config установить значение PrintLastLog no, но я бы не рекомендовал.

Amazon. Как пакетно добавить набор IP-адресов в Amazon Security Groups?

// Октябрь 24, 2012 | 159 просмотров | комментариев (0)

Под любимым Линуксом это делается довольно просто с помощью их API.

Прежде всего устанавливаем пакет ec2-api-tools:

sudo apt-get install ec2-api-tools

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

sudo apt-add-repository ppa:awstools-dev/awstools
sudo apt-get update
sudo apt-get install ec2-api-tools

После чего выполняем относительно простые инструкции по установке и настройке EC2 API Tools для Ubuntu.

После этого всего мы готовы к работе с API Amazon’a.

Создаём Security Group (если ещё её не было):

ec2-create-group ips.port80 -d "IP List @ port 80"
GROUP	sg-XXXXXXXX	ips.port80	IP List @ port 80

И добавляем в неё список IP (при условии что он лежит в файле ~/ips.list, в каждой строке есть отдельный IP или диапазон IP):

for i in `cat ~/ips.list`; do ec2-authorize ips.port80 -P tcp -p 80 -s $i; done
GROUP			ips.port80		
PERMISSION		ips.port80	ALLOWS	tcp	80	80	FROM	CIDR	XXX.XXX.0.0/16	ingress
...

Вот и всё.