Проблемы установки Vista SP2

Пришлось убить много часов, что бы установить себе SP2 на Vista. Обновление отказывалось запускаться выдавая ошибку ERROR_NOT_FOUND(0x80070490).

Запуск CheckSUR, sfc /scannow не помогали. В KB от MS сказано сделать Inplace Upgrade с компакта Vista (что бы его запустить пришлось найти компакт с SP1). Компьютер долго тарахтел винчестером, но так и не смог закончить upgrade, откатился назад, спасибо, хоть ничего не испортилось.

Последнее, что оставалось попробовать – правка реестра согласно вот этой статье. На удивление удаление ключей из реестра помогло, инсталляция SP2 прошла дальше, но заругалась другой ошибке. Не найдя ничего толкового, я решил повторить процедуру проделанную ранее. В файле C:\Windows\Logs\CBS\CBS.log смотрится KBXXXXXX после которого начинаются ошибки. Внутри ветки реестра HKLM\software\Microsoft\Windows\CurrentVersion\Component Based Servicing удаляются (аккуратно) все записи, где есть такая строка. Для этого придется изменить владельца ветки и разрешить пользователю запись на ветку.

После этого SP2 успешно установился.

Итого, на сколько я понял. Если ранее были проблемы с установкой некоторых обновлений, они могут мешать установке SP2 и надо убрать из реестра все упоминания об этих апдейтах.

Кстати, еще на всякий случай была удалена папка C:\Windows\SoftwareDistribution (удалять нужно остановив службу Windows Update). Может это тоже помогло.

Postfix Gmail Smarthost

Если вы пользуетесь Gmail и у вас есть свой выделенный сервер, то достаточно просто заставить postfix на этом сервере отправлять почту через ваш Gmail аккаунт. Для ubuntu все, что нужно сделать, это:

Файл /etc/postfix/main.cf:

relayhost = smtp.gmail.com:587
smtp_use_tls=yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous

Создать файл /etc/postfix/sasl_passwd с параметрами авторизации Gmail:

smtp.gmail.com:587 user@gmail.com:PASSWORD

Выполнить комманды:

postmap /etc/postfix/sasl_passwd
chmod 640 /etc/postfix/sasl_passwd*
chown postfix.postfix /etc/postfix/sasl_passwd*
/etc/init.d/postfix restart

Ну и убедиться, что почта правильно уходит.

Перенос Outlook на другой компьютер

В последнее время несколько моих знакомых сталкивалось с задачей переноса своего Outlook на другой компьютер. В общем то, сами данные, а это один или несколько .pst файлов, перенести элементарно. Но вот настройки учетных записей, RSS, Junk-Email и так далее вызывали у всех проблемы. Самые продвинутые пробовали переносить эти настройки копированием реестра, но всегда возникали определенные проблемы.

Столкнулся с такой задачей и я. Все оказалось на столько просто, что не могу об этом не написать. Кстати, это решение в поисковиках находится не сразу.

В Windows Vista есть приложение Windows Easy Transfer. Достаточно выбрать, что хочется перенести со старого компьютера, способ переноса и загрузить данные на новом.

Все интуитивно понятно. Данные могут копироваться через сетевую папку, жесткий диск, компакт или специальный USB шнур. Можно перенести и настройки и документы.

В данном случае меня интересовали только настройки Microsoft Office, остальной мусор переносить не стоило.


Не вдаваясь в детали, скажу, что перенеслось все кроме сохраненных паролей. Даже настройки связки OneNote-Word-XMLRPC-WorpressAPI. Пришлось немного напрячься, что бы вспомнить почтовые пароли, а в остальном никаких проблем не возникло вообще.

В приложении даже предусмотрена возможность создания инсталляционного пакета для Windows XP. Я не поленился и проверил – с XP на Vista работает точно.

Удивительно, как такую качественную и полезную утилиту раздают вместе с ОС на шару.

Графики Cacti для значений из командной строки

Недавно захотелось попробовать поюзать Cacti. Например, построить график для произвольного значения, взятого из командной строки (custom graphs). На Ubuntu Cacti встал сам и без лишних вопросов, даже описывать нечего. Сам сразу же начал строить графики основных параметров самого сервера, что меня вполне устроило. Попутно нашелся очень хороший шаблон для мониторинга параметров MySQL сервера.

А вот с визуализацией значения из командной строки пришлось повозиться.

Описанное далее не претендует на хорошую хаутушку по Cacti, но может пригодиться для тех, кому надо быстро решить похожую задачу и не хочется вникать во всю архитектуру Cacti. Словом, quick and dirty. В примере строится график суммарной загрузки процессора всеми процессами mongrel_rails, которую выдает ps.

Создаем скрипт, который выдает нам численное значение нужного параметра:

vim /usr/share/cacti/site/scripts/mongrel_cpu.pl

#!/usr/bin/perl

open(PROCESS, “ps aux | grep ‘/usr/bin/ruby1.8 /usr/bin/mongrel_rails’ | awk ‘{print \$3}’ | awk ‘BEGIN {sum=0} {sum=sum + \$1} END {print sum}’ |”);

$output = <PROCESS>;

close(PROCESS);

chomp($output);

print $output;

Проверяем, что скрипт работает:

perl /usr/share/cacti/site/scripts/mongrel_cpu.pl

1.6

Перевода строки не будет и он не нужен, это нормально.

Переходим в консоль Cacti.

Data Input Methods

add

name = Mongrel CPU Usage

input type = script/command

input string = perl <path_cacti>/scripts/mongrel_cpu.pl

create

В разделе output fields:

add

field = percents

friendly name = Total percents used by mongrels

update = checked

create

Переходим в Data templates.

add

data templates name = Mongrel CPU Usage

data source name = |host_description| – Mongrel CPU Usage

data input method = выбираем из списка Mongrel CPU Usage

internal data source name = percents

ds type = GAUGE

create

save

Переходим в Graph Templates.

add

name = Mongrel CPU Usage

title = |host_description| – Mongrel CPU Usage

vertical label = percents

На странице появились Graph Template items.

Нам надо добавить туда сам график и LAST, AVERAGE, MAX подписи к нему.

нажимаем в этом разделе add

data source = Mongrel CPU Usage – (percents) из списка

выбираем цвет

graph item type = AREA

consolidation function = AVERAGE

value = percents

text format = Percents

create

add

graph item type = GPRINT

consolidation function = LAST

text format = Current

add

graph item type = GPRINT

consolidation function = AVERAGE

text format = Average

add

graph item type = GPRINT

consolidation function = MAX

text format = Maximum

Нажимаем save в самом внизу страницы.

Переходим в Host Templates.

add

name = Rails Application Server

create

associated graph templates = выбираем из списка Mongrel CPU Usage

add

save

Переходим в New Graphs.

create new host

description = Web Server Rails

hostname = 127.0.0.1

host template = Rails Application Server

create

На этой же странице надо нажать Create Graphs for this Host.

выделяем все графики

create

Переходим в Devices.

ставим галочку на новом хосте и выбираем действие Place on a Tree (Default Tree)

go

выбираем корень

yes

Ждем 10 минут (по умолчанию сбор данных идет раз в 5 минут), переходим в просмотр графиков и наслаждаемся результатом.


Репликация MySQL на уже работающем сервере

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

При использовании описанного ниже подхода стоит рассчитывать на даунтайм основного сервера на время его перезапуска. В примере использовался сервер под управлением Ubuntu и MySQL 5.0 из основного репозитория с настройками по умолчанию. Я исходил из того, что реплицировать нужно все базы данных, за исключением системных.

На главном сервере.

Надо поправить файл /etc/mysql/my.cnf:

[mysqld]
# Необходимо открыть доступ к серверу по сети,
# что бы slave имел возможность подключиться
# и не забыть закрыть этот доступ, например файрволом, для тех, кому он не нужен
bind-address            = 0.0.0.0
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
expire_logs_days        = 10
max_binlog_size         = 100M
# Исключим ненужные БД
#binlog_do_db           = include_database_name
binlog_ignore_db        = information_schema
binlog_ignore_db        = mysql
binlog_ignore_db        = test
# Это рекомендуется для более стабильной работы репликации баз на InnoDB
innodb_flush_log_at_trx_commit=1
sync_binlog=1

Перезапускаем mysql:

/etc/init.d/mysql restart

Выдаем slave права на репликацию:

mysql -u root
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.2' IDENTIFIED BY 'slave_password';
FLUSH PRIVILEGES;

Посмотреть статус можно командой:

SHOW MASTER STATUS;
+------------------+----------+--------------+-------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+------------------+----------+--------------+-------------------------------+
| mysql-bin.000015 |       98 |              | information_schema,mysql,test |
+------------------+----------+--------------+-------------------------------+
1 row in set (0.00 sec)

Далее делаем дамп существующих баз данных. Ключи –single-transaction –master-data –flush-logs должны глобально заблокировать на время дампа базу данных на запись и вписать в дамп номер и позицию лога, с которых надо начать репликацию на slave. Это обеспечит точность совпадения данных на главном и slave серверах, даже если с главным сервером в этот момент идет работа и записываются данные.

mysqldump -u root --single-transaction --master-data --flush-logs --databases db1 db2 db3 > ALL_DB.sql

Если посмотреть внутрь ALL_DB.sql, то там должна присутствовать строка:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;

Далее копируем дамп на slave:

scp ALL_DB.sql 10.0.0.2:

Продолжаем на втором сервере.

Убеждаемся что там нет остатков настроек репликации, в принципе, если на сервере нет нужных данных, не помешает переустановить mysql с очисткой папок БД.

Так как начиная с версии MySQL 5.2 параметры доступа для репликации убираются из my.cnf сразу перейдем на использование такой схемы.

Правим файл /etc/mysql/my.cnf:

[mysqld]
# ID slave должен отличаться от главного сервера
server-id               = 2
replicate-ignore-db     = information_schema
replicate-ignore-db     = mysql
replicate-ignore-db     = test
relay-log               = /var/log/mysql/mysqld-relay-bin.log

Перезапускаем сервер:

/etc/init.d/mysql restart

Поправим файл ALL_DB.sql:

Дописываем к строке

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98;

параметры доступа:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000015', MASTER_LOG_POS=98, MASTER_HOST='10.0.0.1', MASTER_USER='replication',
MASTER_PASSWORD='slave_password', MASTER_CONNECT_RETRY=60;

Загружаем данные:

mysql -u root < ALL_DB.sql

Проверяем состояние репликации, она НЕ должна быть запущена (Slave_IO_Running, Slave_SQL_Running: no, no):

mysql -u root
show slave status;

Запускаем репликацию (теперь должно быть Slave_IO_Running, Slave_SQL_Running: yes, yes):

START SLAVE;
show slave status;

Для проверки можно попробовать перезапустить mysql и проверить состояние репликации еще раз:

/etc/init.d/mysql restart
mysql -u root
show slave status;

Остается по желанию проверить репликацию, создав, например, тестовую таблицу или добавив данные в существующую и убедиться, что изменения отразились на slave.

Кстати, базы, которые будут созданы после запуска репликации тоже должны среплицироваться. То есть, в идеале, данное решение не требует подстройки, если у вас меняются, добавляются или удаляются базы данных.

DNS-323 – продолжение

После небольшой оплошности с коммандой find -exec chmod 😉 сегодня пришлось перенастраивать заново коробочку.

Прошивка обновилась до версии 1.06. Обновление прошло без сюрпризов и потери данных.

Transmission обновился до 1.51 версии и я открыл для себя клиента под Windows Transmission Remote. Теперь можно удобно выставлять приоритеты файлов, и, главное, выбирать файлы для закачки внутри одного торрента.

Домашнюю папку пользователю root я изменил на /mnt/HD_a2/root – стало гораздо удобнее.

Cleanboot, lighttpd не ставил за ненадобностью.

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

Включаем syslogd (без логов понимать, что творится с почтой проблематично) и переместим логи на жесткий диск:

mkdir /ffp/var/log
cp -r /var/log/samba /ffp/var/log
cp -r /var/log/cores /ffp/var/log
cp /var/log/lastlog /ffp/var/log
cp /var/log/wtmp /ffp/var/log
cp /var/log/btmp /ffp/var/log
vim /ffp/start/syslogd.sh
syslogd_start()
{
    rm -r /var/log
    ln -s /ffp/var/log /var/log
    proc_start /ffp/sbin/syslogd /ffp/sbin/klogd
}
chmod +x /ffp/start/syslogd.sh
/ffp/start/syslogd.sh start

Устанавливаем postfix:

ipkg install postfix
vim /opt/etc/postfix/main.cf
mail_owner = admin
setgid_group = maildrop
myhostname = nas.domain.com
mynetworks_style = subnet

В интерфейсе управления коробочкой нужно создать группу maildrop.

Далее удаляем все строки, содержащие manpage_directory, sample_directory, readme_directory, html_directory из файла /opt/etc/postfix/postfix-files.

Поправляем привилегии на файлах, запускаемся, отправляем тест и смотрим лог:

postfix set-permissions
/opt/etc/init.d/S69postfix start
tail -f /ffp/var/log/messages
sendmail user@domain.com
TEST

DNS-313 проверка файловой системы

В процессе эксплуатации моего второго, резервного NAS DNS-313, появилась проблема: в одной из директорий появился файл, который невозможно удалить. О его существовании подсказывает ls:

root@backup:/mnt/HD_a2/server/backups# ls -la
ls: ./.mysql_08_12_30.gz.qexFWx: No such file or directory

Директорию, в которой он находится, тоже не получалось удалить рекурсивно. Вывод один – надо лечить файловую систему. Только вот сразу обнаружилось, что файловая система для основного раздела – некая UFSD. В реальности же оказалась NFTS.

root@backup:/mnt/HD_a2# mount
/dev/sda2 on /mnt/HD_a2 type ufsd (rw,umask=0000)

На ходу файловая система отмонтировалась без проблем:

umount /dev/sda2

Комманда ntfsfix не нашла ничего плохого:

root@backup:/# ntfsfix /dev/sda2
Mounting volume... OK
Processing of $MFT and $MFTMirr completed successfully.
NTFS volume version is 3.1.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
NTFS partition /dev/sda2 was processed successfully.

Вторая команда, похожая на нужную, не запускалась:

root@backup:/# chkntfs
chkntfs: error while loading shared libraries: libgcc_s.so.1: cannot open shared object file: No such file or directory

Данная проблема лечится коммандой:

ln -s /mnt/sda3/lib/libgcc_s.so.1 /lib

После чего утилита запустилась и вылечила файловую систему, файл исчез:

root@backup:/# chkntfs -f --verbose /dev/sda2
GetMount: "/dev/sda2"
GetMount: Device is not mounted
Checking Volume...
Verifying files...
Files verification completed.
Verifying meta files...
Meta files verification completed.
Veryfing $AttrDef.
Veryfing $Boot.
Verifying $UpCase.
$UpCase file is formatted for use in Windows NT/2K/XP
Verifying $LogFile.
Verifying $Volume.
Verifying folders...
Correcting error in index 0x30 ($I30) for file 0xfe.
Deleting entry ".mysql_08_12_30.gz.qexFWx" from index 0xfe "backups"

Примонтировать файловую систему обратно можно коммандой:

mount /dev/sda2 /mnt/HD_a2

Apache 2.2.11 на RHEL 5

Мне не понятно, почему, вроде бы, такая серьезная контора как RedHat, в своём дистрибутиве RedHat Enterprise Linux официально поддерживает только apache-2.2.3, которому уже почти 3 года и явно не хватает нужного функционала.

Поиск в интернете не дал красивых ответов на вопрос установки свежей apache RPM пакетом.

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

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

1. Скачать вот этот SRPM и установить его (rpm -i httpd-2.2.11-custom.1.src.rpm) – эта команда раскроет в папку /usr/src/redhat исходники, патчи и файл спецификаций

2. Собрать бинарный RPM командой rpmbuild -bb /usr/src/redhat/SPECS/httpd.spec, предварительно установив нужные зависимости о которых оно сообщит

3. В папке /usr/src/redhat/RPMS должны появиться готовые пакеты

Максимальный размер файла на DVD

Если кто-то будет искать максимальный размер файла для записи на DVD (например что бы разбить большой архив на болванки), то вот он: 4 294 967 295. Если записывать диск в формате UDF, то, вроде бы, можно больше. В общем бить архив по 4,2 Гб – самое оно.

Бууу-уу-га-га

Сделан очередной шаг в сторону образа безумного гика. Поставил себе временно свободный тазик с монитором рядом со вторым монитором и опенсурсную прогу Synergy. Теперь моя мышка ползает вдоль трех экранов. Нужно еще отгородиться коробками и злобно бугагакать оттуда каждые 3 минуты.