Архивы: debian

openvz + iptables + multiport = FATAL: modules.dep: No such file or directory

Дано VPS под openvz. На впске трахаемся с iptables:

iptables -A INPUT -i $IFACE -p tcp -m multiport --port 49452:49146 -j ACCEPT

а иптаблес нам в ответ нечеловеческим голосом заявляет:

FATAL: Could not load /lib/modules/2.26.blablalba.stab00bla.1/modules.dep: No such file or directory
FATAL: Could not load /lib/modules/2.26.blablalba.stab00bla.1/modules.dep: No such file or directory

Лечится так:

mkdir /lib/modules/2.26.blablalba.stab00bla.1/
depmod -a

nginx+apache = 127.0.0.1 в логах

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

apt-get install libapache2-mod-rpaf

postgrey надоела дикая задержка

Отличная штука постгрей. Очень даже эффективно борется со спамом. Но есть у нее несколько (на первый взгляд) недостатков.
Первый и самый главный — длительный отлуп.
Оказывается его можно и настроить!

Идем править конфиги!

mcedit /etc/default/postgrey

видим там скудную строку:

POSTGREY_OPTS="--inet=127.0.0.1:60000"

Сюда, промеж кавычек можно дописать:
—delay=XX — время задержки в сером листе XX секунд
—max-age=YY — устанавливает срок YY дней — время жизни в автоматическом белом листе клиентов, которые успешно прошли проверку
—auto-whitelist-clients=ZZ — добавлять в автоматический белый список клиентов, которые ZZ раз успешно прошли проверку

А вообще, man как всегда рулит!

клонируем debian

Для того, чтобы создать список установленных в Debian (Ubuntu) пакетов можно воспользоваться следующей утилитой:

$ dpkg —get-selections > installed_programs.txt

Можно также записать в файл краткую информацию о пакетах (версия пакета и краткое описание):

$ COLUMNS=150 dpkg -l > packages.txt

Теперь все эти пакеты можно установить на другом компьютере (или на этом же, после переустановки). Для этого устанавливаем Debian (Ubuntu) по умолчанию, и после установки выполняем следующую операцию, предварительно скопировав на этот компьютер файл installed_programs.txt:

$ sudo dpkg —set-selections < installed_programs.txt

и дальше

$ sudo apt-get -u dist-upgrade

или

$ sudo apt-get dselect-upgrade

Прежде чем переносить, желательно забэкапить /etc/, а потом на новой машине восстановить.

Взято отсюда

Установка лампы в debian одной строкой

# apt-get install mysql-server mysql-client apache2 php5 php5-mysql libapache2-mod-php5 php-pear

ну и может пригодиццо:

# /usr/bin/mysqladmin -u root password ‘enter-your-good-new-password-here’

Debian и проклятый intel software raid

В процессе установки доходит до grub2-install и борода… Не ставиццо.

Решение есть.

В начале выбираем расширенную установку и нажимаем TAB

Дописываем к строке загрузки установщика dmraid=true

Ставимся, бьем рейд на разделы, доходим до граба2… обламываемся(

Выбираем пункт «продолжить без установки загрузчика».

Доставляем все необходимое.

Перезагружаемся, но грузимся опять с диска!

Выбираем Rescue mode, опять TAB, добавляем dmraid=true

Проходим все стадии рескуе-мода, выбираем раздел который мы заюзали в качестве корня в процессе установки.

Попадаем в консоль режима восстановления.

Делаем:

#ls /dev/ |grep dm

Получаем /dev/dm или /dev/dm0  или /dev/dm-0

Смотрим его

#fdisk /dev/dm

Если показывает разделы на которы мы били рейд при установке — значит этот девайс-то нам и нужен.

Делаем

#grub-install /dev/dm

Если «0 errors reported», то добиваем гада:

#grub-mkconfig > /boot/grub/grub.cfg

Ребутим комп и наслаждаемся.

Рецепт взят отсюда: debian wiki

Какие порты у нас открыты?

Как посмотреть, какие порты используются debian, ubuntu

показать прослушиваемые порты в системе (и кто их слушает):
netstat -lp —inet
показать активные соединения:
netstat -p —inet
также можно пользоваться утилитой lsof
прослушиваемые порты
lsof -i | grep LIST
активные соединения
lsof -i | grep ESTAB
для того, чтобы увидеть, какие программы слушают на каких портах,
необходимо иметь root-привилегии. ещё вариант
netstat -pan | grep LIST

взято отсюда

debian и дефолтный редактор

Как же меня бесит joe! Это нечто. Есть же mcedit удобный, отличный консольный редактор. Ну, vim хотя бы! Но не это угребище.
Так почему же в дебиане отныне дефолтным стал этот неуловимый джо науке неизвестно.

Решение этой проблемы таково:


update-alternatives --config editor

Есть 9 альтернатив, которые предоставляют `editor'.

  Выбор        Альтернатива
-----------------------------------------------
          1    /bin/ed
          2    /bin/nano
          3    /usr/bin/vim.tiny
          4    /usr/bin/mcedit-debian
*+        5    /usr/bin/joe
          6    /usr/bin/jmacs
          7    /usr/bin/jstar
          8    /usr/bin/jpico
          9    /usr/bin/rjoe

Нажмите enter, чтобы сохранить значение по умолчанию[*], или введите 
выбранное число: 4
Используется `/usr/bin/mcedit-debian' для предоставления `editor'.

Взято отсюда

бакула и удобства

Кто видел конфиг бакула-директора, тот фильмов ужасов не боится.
А если у вас дофига бекапируемых серваков, баз и прочего, то это вообще ад.

Чтоб упростить себе жизнь было сделано следующее:
отредактирован bacula-dir.conf. В нем я оставил все что касается самого директора,

Director {   …  }

хранилищ

Storage { …  }

Storage { …  }

бакуловской базы, мессаг и настроек консоли (паролей )

Catalog { … }
Messages { … }
Console { … }

Так же в этом конфиге я оставил настроки для job’ы по рестору (она у меня часто правиться не будет, пусть тут полежит)

Самое интересное в конце файла:

###############clients confs
@|»sh -c ‘for f in /etc/bacula/clients/*.conf ; do echo @${f} ; done'»

###############data confs
@|»sh -c ‘for f in /etc/bacula/backups/*.conf ; do echo @${f} ; done'»

Этими замысловатыми строками мы присоединяем к конфигу содержимое всех файлов *.conf из подпапок clients и backups, причем налету!

Соответственно в папке clients лежит куча мелких конфигов с настройками клиентов (bacula-fd), типа mynewserver.conf, каждый с одной лишь секцией

Client { … }

А в папке backups тоже куча, но уже файлов настроек конкретных пулов, т.е. отдельных единиц бекапируемов информации. У меня 1 пул = 1 логичской единице бекапируемой информации. Например в пул 1c_main входят файлсеты
1c_main_sql и 1c_main_files.

Примеры файликов:
less /etc/bacula/clients/mycoolserver.conf

##################################
# mycoolserver.vashdomen.ru
##################################
Client {
Name = mycoolserver-fd
Address = mycoolserver.vashdomen.ru
FDPort = 9102
Catalog = MyCatalog
Password = «mycoolpassword»          # password for FileDaemon
File Retention = 35 days            # Сколько сохранять метаданные о сохраненных файлах
Job Retention = 35 days            # Сколько сохранять метаданные касательно заданий
AutoPrune = yes                     # Prune expired Jobs/Files
}

less /etc/bacula/backups/1c_main.conf

################################################
# 1c_main   — очень важная база нах. Хранить тыщу лет (бухи не простят!)
################################################
# описание пула
Pool {
Name = 1c_main   #заменяем на свое название по сути бекапа (ЧТО БЕКАПИМ)
Pool Type = Backup
Maximum Volume Bytes = 4650000000   # размер dvd диска
Recycle = yes                       # Bacula can automatically recycle Volumes
AutoPrune = yes                     # Prune expired volumes
Volume Retention = 1000 years         # Как долго бакула должна бояться удалить том   :))))
Maximum Volume Jobs = 1             # Сколько заданий хранить в каждом из томов
Label Format = 1c_main_       # обзываем в соответсвие с Name
}

#1c_main_sql       mssql база
Job {
Name = «Backup_1c_main_sql»          #имя правим в соответствие с label format
Type = Backup
Level = Full
FileSet = «1c_main_sql»                      #здесь файл-сет который описывается ниже, имена должны совпадать
Schedule = «1c_main_sql_shed»        #расписание для этой таски
Client = mycoolserver-fd                               #ИМЯБЕКАПИРУЕМОГОСЕРВЕРА-fd

RunBeforeJob =»/etc/bacula/scripts/mssql mycoolserver mssqluser  password d backup 1cmainbase»  #бекапить mssql
RunBeforeJob = «/etc/bacula/scripts/mssql mycoolserver mssqluser  password d backup 1cmainbase»  #что после бекапа удалить
Storage = sda1    #где хранить бекап на сервере бекапов
Pool = 1c_main    #пул. он был задан выше
Messages = Standard
Write Bootstrap = «/home/bacula/bacula.bootstrap/%n.bsr»
}

#1c_main files            файлы с винды
Job {
Name = «Backup_1c_main_files»
Type = Backup
Level = Incremental
FileSet = «1c_main_files»
Schedule = «1c_main_files_shed»
Client = mycoolserver-fd
Storage = sda1
Pool = 1c_main    #пул. он был задан выше
Messages = Standart
Write Bootstrap = «/home/bacula/bacula.bootstrap/%n.bsr»
}

########################################
#ТУТ собственно какие файлы бакула будет утягивать к себе
FileSet {
Name = «1c_main_sql»     #имя файлсета см выше
Include {
Options {
signature = MD5
compression = GZIP8     #уровень сжатия чем выше число (до 9) тем круче жмет
}
File = d:/backup/1cmainbase #эта папка результат работы команды
#runbeforejob она его выгружает из mssql
#мы ее утягиваем. потом работает таска RunAfterJob
#и она удаляется
}
}

#1c_main files
FileSet {
Name = «1c_main_files»
Include {
Options {
signature = MD5
compression = GZIP8
}
#filelist
File = «D:/bases/1c_main»  #тут просто папка которую бекапим
}
}

#расписание бекапов
Schedule {
Name = «1c_main_sql_shed»  #было задано выше
Run = Full mon-sun at 22:00
}

Schedule {
Name = «1c_main_files_shed» #было задано выше
Run = Incremental tue-sun at 22:40
Run = Full mon at 22:40
}

В итоге получаем систему, которую можно легко (ну легче чем 1 гигансткий файл — факт)) править и конфигурять.

bacula, бэкап mssql баз и грабли (а также питоны, самбаклиенты и все-все-все)

Недавненько отстроил бакулу на бекапирование всего самого ценного (нажитого родной конторой непосильным трудом).
И вдруг, ВНЕЗАПНО, выяснилось что одиночные файлов (ну собственно blablabla.sql) бакула бекапит как-то странно. Т.е. то-ли вообще не бекапит, то-ли хрен пойми что делает. По крайней мере в bat в version browser’е их не видать. Из консоли они также  не разворачивались (No full backup говорит). Бида :(

Решение пришло поэтапно:
Первый.
Для начала порыскав по просторам интернетов выудил следующее решение как организовать бекап mssql запросами с линухов.
Найденная статья.
В реальности не все так радостно. Бекапить таким способом нельзя. Ибо BACKUP DATABASE в транзакции не идет. Пичалька :(

Скрипт был яростно поправлен (полный листинг будет ниже) и бекапирование было вынесено за транзакцию.

Второй этап.
Собственно суть проблемы была в том, что одиночные файлы не бекапяццо. Значит будем бекапить папки. Но MSSQL сам папки создавать не умеет (хранимые процедуры не наш вариант). Нам на помощь спешит smbclient и питоновский import sys!

В итоге получили следующее:
Бекапим mssql бакулой. HowTo.

ставим питон и его компонент для мсскуля:
apt-get install python-pymssql

ставим самбаклиента:
apt-get install smbclient

создаем наш мега-скриптик
touch /etc/bacula/scripts/mssql

Ну естественно даем на него нужные права, он же у нас выполняемый должен быть.
cmhod +x /etc/bacula/scripts/mssql

mcedit /etc/bacula/scripts/mssql

пишем в него следующее:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# Импортируем библиотеку для работы с MSSQL
import pymssql
import sys
# Импортируем библиотеку для работы с шеллом
import os
#параметры командной строки получаем
ahost = sys.argv[1] + «.vashdomen.ru»   #сервер где живет mssql
auser = sys.argv[2]                                       #mssql юзер
apassword = sys.argv[3]                               #пароль mssql юзера
awheredisk = sys.argv[4]                              #диск на который будем выгружать
awhere = sys.argv[5]                                     # папка в которую будем выгружать
adatabase = sys.argv[6]                                #наша база

# Соединение с БД.
con = pymssql.connect(host=ahost, user=auser, password=apassword, database=adatabase)

# Создаем курсор для работы с соединением
cur = con.cursor()

###создаем папку с именем базы
#главное тут не напутать с количеством слешей и бекслешей
#данные заменяем на свои (их конечно тоже можно вынести в командную строку, но я не стал, мне удобнее так.
#мегюзер должен иметь соответствующие права на файлы на mssql серваках
os.system(«smbclient -U=vashdomen.ru\\\\megauser%megapassword //»+ahost+»/»+awheredisk+»$ -c ‘cd «+awhere+»; md «+adatabase+»‘»)

#формируем запрос
query=»BACKUP DATABASE » + adatabase + » TO DISK = ‘» + awheredisk + «:\\» + awhere + «\\» + adatabase +»\\» + adatabase +».sql’ WITH INIT»
#сначала завершим транзакцию (она по умолчанию открылась сама, а нам этого не надо, иначае бекап не пройдет)
cur.execute(«commit tran»)
#выполняем запрос
cur.execute(query)
#ну и восстановим транзакцию на всякий (может оно и не нужно)
cur.execute(«begin tran»)

# соединение закрываем
con.close()

Создаем еще один файлик. Он будет прибирать каку после бекапа:
touch /etc/bacula/scripts/mssqldel
cmhod +x /etc/bacula/scripts/mssqldel
mcedit /etc/bacula/scripts/mssqldel
Пишем в него следующее:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import os
ahost = sys.argv[1] + «.vashdomen.ru»
auser = sys.argv[2]                 #   эти два ключа нам по сути не нужны,
apassword = sys.argv[3]         #  но я их не убирал. так. на будущее
awheredisk = sys.argv[4]
awhere = sys.argv[5]
adatabase = sys.argv[6]

### удаляем папку с бекапом с именем базы
#конектимся. идем в нужную папку. удаляем файл. идем на уровень выше, удаляем папку.
os.system(«smbclient -U=vashdomen.ru\\\\megauser%megapassword //»+ahost+»/»+awheredisk+»$ -c ‘cd «+awhere+»; cd «+adatabase+»; rm «+adatabase+».sql; cd ..; rmdir «+adatabase+» ‘»)

В конфиге бакулы (у меня они кстати разбиты на много мелких, как это сделать — напишу в следующем посте) правим нашу job’у:
#mssql backup

Job {
….
RunBeforeJob =»/etc/bacula/scripts/mssql your-server mssqluser passsword d backup yourdatabase»
RunAfterJob =»/etc/bacula/scripts/mssqldel your-server mssqluser passsword d backup yourdatabase»

}

d — диск на который бекапится, backup — папка которую должна на этом диске быть и на которую у megauser‘а из листинга выше должны быть права.

Соответственно в файлсете (в бакуловском конфиге) описываем что бакула будет забирать:

FileSet {

Include {


File = D:/BACKUP/yourdatabase
#слеши именно в эту сторону, все правильно
}
}

Как это все работает.
Бакула запускает job, тот сначала дергает RunBeforeJob, т.е. запускает наш скрипт mssql, тот в свою очередь дергает самбаклиента и создает нужную ему папочку, затем в питоном дергается mssql-сервер. mssql-сервер вываливает в эту папочку скульный файл.
Бакула продолжает джобу и забирает файлсет.
После дергает RunAfterJob. mssqldel прибивает скульный файлик, прибивает папочку. Все счастливы, все довольны.

Продолжение статьи тут