среда, 9 июля 2014 г.

Разделить многостаричный pdf файл с помощью imagemagick

Чаще возникает задача объеденить несколько картинок в многостраничный pdf, но на этот раз возникла обратная задача: сделать из pdf png по одному файлу на станицу:
 convert -density 300  docs.pdf image_%02d.png

понедельник, 30 июня 2014 г.

Создание зеркала репозитория subversion



Процедура создания зеркала репозитория достаточно проста и состоит из нескольких шагов (на примере freebsd ports).

1. Создание пустого репозитория:

mkdir -p /home/svn
cd /home/svn
svnadmin create ports

2. Разрешение изменения свойств ревизий (revprops)

 По умолчанию svn запрещает модификацию свойств и их нужно разрешить явно, для этого в директории hooks (/home/svn/ports/hooks) нужно создать файл pre-revprop-change со следующим содержимым:
!#/bin/sh
exit 0

И дать права на выполнение:

chmod 755 ports/hooks/pre-revprop-change

3. Инициализировать репозиторий как зеркало:

svnsync init file:///home/svn/ports svn://svn.freebsd.org/ports

Если на этом шаге возникла ошибка:

svnsync: E165006: Repository has not been enabled to accept revision propchanges;
ask the administrator to create a pre-revprop-change hook

значит, следует вернутся к шагу 2


4. Обновление зеркала:

svnsync file:///home/svn/ports

Первоначальная синхронизация может занять длительное время. В случае с freebsd ports - несколько часов 


Перевод http://svnbook.red-bean.com/en/1.7/svn.ref.svnsync.html

среда, 25 декабря 2013 г.

VNC в VirtualBox 4.2 и позднее

В VirtualBox ниже 4.2 VNC включался ключем -n при запуске, но начиная с 4.2.0 этот ключ более не принимается. В более новых версиях необходимо сделать следующее:
VBoxManage modifyvm vmname --vrdeproperty VNCPassword=somepass --vrdeauthlibrary null --vrdeport 5903
Вместо vmname нужно подставить имя виртуальной машины, somepass - пароль, а 5903 - порт для VNC

вторник, 8 октября 2013 г.

Сборка портов и docbookx.dtd

При сборке некоторых портов, например databases/pgbouncer, devel/zmq порой приходится сталкиваться со следующей ошибкой:
I/O error : Attempt to load network entity http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd
Полный текст и решение под катом

пятница, 15 марта 2013 г.

Установка FreePBX на FreeBSD

FreePBX - это полноценный веб-интерфейс для управления IP АТС Asterisk.

Разработчики FreePBX предлагают скачать установочный образ на базе CentOS. Очевидно, что для этого требуется новый отдельный сервер. В качестве альтернативы предлагается использовать инсталлятор, который предназначен для других дистрибутивов Linux. Поддержка FreeBSD не заявлена.

Тем не менее установку можно произвести вручную.

четверг, 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