четверг, 18 октября 2012 г.

portupgrade и циклическая ошибка HASH: Out of overflow pages. Increase page size

Столкнулся с проблемой при обновлении портов. Выгдялит это примерно так:
# portupgrade -ai
--->  Session started at: Thu, 18 Oct 2012 12:26:03 +0400
[Updating the pkgdb in /var/db/pkg ... - 686 packages found (-1 +1) (...). done]
[database version mismatch/bump detected] [Updating the portsdb in /usr/ports ... - 24005 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000 ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb in /usr/ports ... - 24005 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000 ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb in /usr/ports ... - 24005 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000.........24000 ....HASH: Out of overflow pages.  Increase page size
 error] Remove and try again.
[Updating the portsdb in /usr/ports ... - 24005 port entries found .........1000.........2000.........3000.........4000.........5000.........6000.........7000.........8000.........9000.........10000.........11000.........12000.........13000.........14000.........15000.........16000.........17000.........18000.........19000.........20000.........21000.........22000.........23000^C

И так до бесконечности. Лечится достаточно просто:
# cd /usr/ports && make fetchindex
При следующем запуске portupgrade работает штатно
Источник

среда, 29 августа 2012 г.

FreeBSD и материнка на базе Intel Atom d2700

Столкнулся с повреждением вывода консоли на данной материнке: каждый пятый символ в строке заменяется знаком курсора. В итоге это приводит к тому, что даже просто установить систему становится практически нереально.
В списке рассылки нашлось решение:
# vidcontrol MODE_27
Это для текущего сеанса
Или в rc.conf:
allscreens_flags="MODE_27"
Чтобы изменения применялись при загрузке системы

четверг, 12 июля 2012 г.

tip: команда для архивирования ключей в ~/.ssh

Довольно стандартная задача: перенести все аккаунты с одного сервера на другой, при этом у многих настроена авторизация по ключу.
# cd /home && find . -type d -name '.ssh'  -exec tar zcfv ssh.tgz {} +
Эта команда создасть архив ssh.tgz с директориями .ssh пользователей, который остается только скопировать по сети и распаковать на целевой машине. Разумеется, уиды аккаунтов должны быть равны на обоих серверах.

понедельник, 2 июля 2012 г.

Репликация mysql и ошибка Relay log read failure

После аппаратного сбоя на одном из слейвов репликация не поднялась.
> mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 10.5.211.184
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000565
          Read_Master_Log_Pos: 156109758
               Relay_Log_File: mysqld-relay-bin.000167
                Relay_Log_Pos: 23764825
        Relay_Master_Log_File: mysql-bin.000560
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1594
                   Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 23764680
              Relay_Log_Space: 1204690864
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1594
               Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog' on the binary log), the slave's relay log is corrupted (you can check this by running 'mysqlbinlog' on the relay log), a network problem, or a bug in the master's or slave's MySQL code. If you want to check the master's binary log or slave's relay log, you will be able to know their names by issuing 'SHOW SLAVE STATUS' on this slave.
1 row in set (0.00 sec)
Собственно в сообщении об ошибке все сказано: релей лог (который слейв выгружает с мастера), поврежден.
Лечится следующим образом:
> stop slave
> SHOW SLAVE STATUS (записываем значения Relay_Master_Log_File, Exec_Master_Log_Pos)
> RESET SLAVE
> Заново устанавливаем мастер со значениями MASTER_LOG_FILE=relay_master_log_file и MASTER_LOG_POS=exec_master_log_pos со второго шага
> SLAVE START
Репликация должна завестись

среда, 16 мая 2012 г.

bind и список айпишников master/slave для зоны

В bind можно задавать access list для использования в файлах зоны, чтобы не писать в каждой зоне список адресов.
Для списка слейвов это делается примерно так:
zone "bsdmaster.com" {
        type master;
        file "/etc/namedb/master/bsdmaster.com";
        allow-transfer { my_slaves; };
};
Выше нужно определить список my_slaves:
acl "my_slaves" { 10.0.0.1; 10.10.0.1; };
Но если сделать тоже самое для вторичной зоны:
acl "my_masters" { 10.0.0.1; 10.10.0.1; };

zone "bsdmaster.com" {
        type slave;
        file "/etc/namedb/slave/bsdmaster.com";
        masters { my_masters; };
};

То при запуске получится ошибка: masters "my_masters" not found. Все потому, что для определения списка первичных серверов есть специальное ключевое слово: masters. Правильный фрагмент конфига выглядит так:
masters "my_masters" { 10.0.0.1; 10.10.0.1; };

zone "bsdmaster.com" {
        type slave;
        file "/etc/namedb/slave/bsdmaster.com";
        masters { my_masters; };
};

пятница, 4 мая 2012 г.

понедельник, 30 апреля 2012 г.

Размер таблиц в postgresql

С помощью этого запроса можно получить список самых крупных отношений (relations) в текущей базе данных: таблиц, индексов.
SELECT nspname || '.' || relname AS "relation",
    pg_size_pretty(pg_relation_size(C.oid)) AS "size"
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
  ORDER BY pg_relation_size(C.oid) DESC
  LIMIT 20;
А этот запрос показывает общий размер таблиц, включая все индексы в текущей базе данных:
SELECT nspname || '.' || relname AS "relation",
    pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size"
  FROM pg_class C
  LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
  WHERE nspname NOT IN ('pg_catalog', 'information_schema')
    AND C.relkind <> 'i'
    AND nspname !~ '^pg_toast'
  ORDER BY pg_total_relation_size(C.oid) DESC
  LIMIT 20;
 
Источник: http://wiki.postgresql.org/wiki/Disk_Usage 

вторник, 17 апреля 2012 г.

Отставание времени в виртуалках с FreeBSD9

Начиная с FreeBSD9 стали наблюдатся проблемы с отсчетом времени в гостевых машинах вне зависимости от системы виртуализации. Отставание происходит настолько быстро, что ntpd не решает проблему.
Изменение следующей переменной исправляет отсчет времени:
# sysctl kern.eventtimer.idletick=1
Чтобы настройка применялась автоматически необходимо добавить в /etc/sysctl.conf:
 kern.eventtimer.idletick=1

понедельник, 26 марта 2012 г.

mysql console tip and tricks

Несколько советов по использованию консоли mysql
1. pager это утилита для постраничного просмотра текстовых файлов. Самыми распространенными являются more и less. Чтобы использовать more нужно ввести в командной строке:
> \P more;
После этого вывод многостраничных запросов будет производится через more.
2. Вывод результатов не в режиме таблицы, а построчно. Может быть удобно в случае, если таблица содержит множество столбцов:
Пример:
> show processlist\G
*************************** 1. row ***************************
     Id: 18
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
1 row in set (0.00 sec)
3. Вывод команд в файл:
> tee filename;
Разумеется должны быть права на запись

вторник, 28 февраля 2012 г.

VirtualBox Serial Console

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

суббота, 25 февраля 2012 г.

Решение проблемы с bge драйвером NetXtreme BCM5723

Во FreeBSD9 появилась неприятная проблема с гигабитными сетевыми картами Broadcom NetXtreme BCM5723, такие часто стоят в серверах HP. Проблема проявляется записями в /var/log/messages:
bge0: watchdog timeout -- resetting
Затем следует падение и поднятие линка через несколько секунд.
Добавление следующей строки в /boot/loader.conf привело к стабильной работе:
hw.bge.allow_asf=0
Все дело, в том, что значение по умолчанию начиная с 9 ветки стало 1

среда, 22 февраля 2012 г.

Доступ в git поверх ssh для группы разработчиков

Задача довольна типичная - дать доступ в git группе разработчиков.
Для начала устанавливаем git стандартным системным способом, далее создаем аккаунты для разработчиков. При этом важно, чтобы основая группа ( в passwd) была одинаковой:
user1:*:1001:1000:User &:/home/user1:/usr/local/bin/bash
user2:*:1002:1000:User &:/home/user2:/usr/local/bin/bash 
Группа - это четвертое поле, у меня 1000, но это значение может быть любым.
Разумеется, ее перед этим нужно создать в /etc/group:
git:*:1000:
Теперь самое главное, при создании репозитория, важно включить шаринг по группе:
$ cd /home/git/ && mkdir repo
$ cd repo
git init  --bare --share=group  
Initialized empty shared Git repository in /home/git//repo/
Эти команды нужно выполнять из под аккаунта с gid равном группе разработчиков, иначе нужно будет поменять группу.
Дополнительно можно указать кастомные параметры в sshd_config для группы разработчиков
Match Group git
  AllowTcpForwarding no
  X11Forwarding no
  AllowAgentForwarding no
  PasswordAuthentication no
 Отключен форвардинг портов и парольная авторизация.

среда, 1 февраля 2012 г.

dhcp и получение hostname

По умолчанию имя хоста не запрашивается из dhcp, но в некоторых случаях это может быть неудобно, например, если речь идет о виртуальных машинах, с сетью в режиме bridge.
Чтобы изменить такое поведение достаточно на клиенте создать файл /etc/dhclient.conf со следующим содержанием:

request subnet-mask, broadcast-address, routers, domain-name, domain-name-servers, host-name;
require host-name;
Первая строка запрашивает маску, роутер, имя домена, неймсерверы, имя хоста. Вторая делает имя хоста обязательным и если сервер не передает его, то ответ будет проигнорирован.
Но это еще полдела, надо несколько изменить конфигурацию сервера. Правим dhcpd.conf и добавим

use-host-decl-names on;
Использовать имена определений, как имена хостов. И далее:
host vm6.bsd-root.com {
  hardware ethernet 08:00:27:1e:1e:05;
  fixed-address 10.4.0.21;
}
Тут я предпологаю, что остальные параметры (маска, неймсерверы, роутер, домен) были заданы ранее. hardware ethernet нужно посмотреть в параметрах интерфейса виртуальной машины.