среда, 29 октября 2014 г.

Serial console для сервера

В моем домашнем сервере нет видеокарты (и ставить ее туда не планирую). Для управления сервером используется SSH, а на случай проблем с сетью решил добавить поддержку serial console.

Доступен только один последовательный порт, но если вы хотите узнать сколько последовательных портов поддерживается и какие у них названия, нужно выполнить команду:

$ grep ttyS /var/log/dmesg
[    1.107765] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.296739] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

Настраивать буду поддержку serial console в загрузчике, ядре и init.

Настройка Grub2

В файл /etc/default/grub нужно добавить поддержку serial

GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,9600"
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=9600 --unit=0 --word=8 --parity=no --stop=1"

и обновить конфигурацию grub

$ sudo update-grub

Настройка init

В файл /etc/inittab нужно добавить строку

S0:2345:respawn:/sbin/getty -L ttyS0 9600 vt100

и перезагрузить init

$ sudo telinit q

Для тестирования нужно подключиться через последовательный порт к серверу и перезагрузить его. Если на терминале установлены правильные настройки (9600 8n1), то мы должны увидеть лог загрузки.

Особенности конфигурации

Если последней опцией ядра указано "console=ttyS0,9600", то лог загрузки системы (вывод от init) будет только на ttyS0. В это время на первом терминале ничего выводиться не будет. Это может создать впечатление, что сервер завис, особенно если запустится проверка дисков.

Bacula: Как восстановить одну директорию из бэкапа используя bconsole

Раньше если нужно восстановить данные из бэкапа, то для работы с Bacula пользовался графическим интерфейсом bat. Сегодня потребовалось восстановить только одну директорию из бэкапа сервера, содержащего большое количество файлов. Попытка подготовить задание восстановления через bat намертво его повесила. Пришлось прибить bat, снять запросы к БД и идти осваивать консольный вариант - bconsole.

$ sudo bconsole
*restore client=srv11.example.com-fd
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13):

Поскольку нужно восстановить последний бэкап, выбираю "5: Select the most recent backup for a client"

Select item:  (1-13): 5
Automatically selected FileSet: Standard Set
+-------+-------+-----------+-----------------+---------------------+--------------+
| JobId | Level | JobFiles  | JobBytes        | StartTime           | VolumeName   |
+-------+-------+-----------+-----------------+---------------------+--------------+
| 1,119 | F     | 5,022,824 | 168,370,798,105 | 2014-10-12 23:37:33 | Archive-0078 |
| 1,119 | F     | 5,022,824 | 168,370,798,105 | 2014-10-12 23:37:33 | Archive-0079 |
| 1,119 | F     | 5,022,824 | 168,370,798,105 | 2014-10-12 23:37:33 | Archive-0081 |
| 1,119 | F     | 5,022,824 | 168,370,798,105 | 2014-10-12 23:37:33 | Archive-0082 |
| 1,277 | D     |   430,784 |  18,791,703,231 | 2014-10-27 06:26:52 | Archive-0080 |
| 1,294 | I     |    90,159 |   3,764,072,742 | 2014-10-28 00:28:47 | Archive-0013 |
| 1,294 | I     |    90,159 |   3,764,072,742 | 2014-10-28 00:28:47 | Archive-0080 |
| 1,310 | I     |    75,993 |   4,224,432,445 | 2014-10-28 23:08:27 | Archive-0013 |
+-------+-------+-----------+-----------------+---------------------+--------------+
You have selected the following JobIds: 1119,1277,1294,1310

Building directory tree for JobId(s) 1119,1277,1294,1310 ...  ++++++++++++++++++++++++++++++++++++++++++
4,260,904 files inserted into the tree.

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$

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

$ cd /var/www/vhosts/
cwd is: /var/www/vhosts/

$ add shop.example.com
23,405 files marked.

$ exit

После команды "exit" bacula выдаст информацию по созданному заданию восстановления и запросит подтверждение.

Bootstrap records written to /var/lib/bacula/bacula-dir.restore.4.bsr

The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    Archive-0082              File                      FileStorage              
    Archive-0013              File                      FileStorage              

Volumes marked with "*" are online.


23,408 files selected to be restored.

Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/lib/bacula/bacula-dir.restore.4.bsr
Where:           /bacula/restore
Replace:         always
FileSet:         Standard Set
Backup Client:   srv11.example.com-fd
Restore Client:  srv11.example.com-fd
Storage:         File
When:            2014-10-29 11:56:46
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no):

Если все верно, то выбираем "yes" и ждем пока данные восстановятся.

четверг, 23 октября 2014 г.

Консольное кунг-фу

Задача: сделать локальную копию всех файлов "*.png" с абстрактного сервера с сохранением структуры каталогов.

Как сделать это в Windows я понятия не имею, но в Linux это делается в одну строку

$ ssh user@host "cd /path/to/src && find -name '*.png' -print0 | tar -cf- --null -T-" | tar -xf- -C /path/to/dst

В отличии от варианта с rsync не требует наличия rsync на удаленной машине.

среда, 22 октября 2014 г.

Squeeze-LTS: The following packages cannot be authenticated!

Если вы пользуетесь Squeeze-LTS и также столкнулись с ошибкой

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  apt apt-utils rsyslog tzdata
4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 3375 kB of archives.
After this operation, 344 kB disk space will be freed.
Do you want to continue [Y/n]? 
WARNING: The following packages cannot be authenticated!
  apt tzdata apt-utils rsyslog
Install these packages without verification [y/N]? 
E: Some packages could not be authenticated

то вам может помочь следующий рецепт:
  • закомментируйте строку, касающуюся squeeze-lts в /etc/apt/sources.list
  • выполните apt-get update
  • раскомментируйте строку, касающуюся squeeze-lts в /etc/apt/sources.list
  • выполните apt-get update
  • выполните обновление системы
Спасибо Christophe Moille за подсказку.

четверг, 16 октября 2014 г.

Три новые уязвимости в OpenSSL

Опубликовали репорт на три новые уязвимости в OpenSSL (CVE-2014-3566, CVE-2014-3567, CVE-2014-3068). В качестве решения предлагается обновить OpenSSL до следующих версий:
OpenSSL 1.0.1 users should upgrade to 1.0.1j
OpenSSL 1.0.0 users should upgrade to 1.0.0o
OpenSSL 0.9.8 users should upgrade to 0.9.8zc
В репозитариях Debian и CentOS обновление пока не замечено. Для защиты от CVE-2014-3566 отключил поддержку SSLv3 на серверах.

понедельник, 13 октября 2014 г.

PHP Fatal error: Call to undefined function hash_equals()

Довелось разбираться почему не работает плагин Mailchimp для WordPress. Анализ лога показал, что плагин использует функцию hash_equals(), которая появилась только в php 5.6.0. Обновлять PHP до последней версии - не вариант. Немного поиска и нашлась аналогичная реализация hash_equals() на PHP.

Можно либо вставить код функции в нужный файл, либо подключить через require_once().

четверг, 2 октября 2014 г.

Извечная борьба - костыль vs говнокод

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

Запуск Apache jMeter на удаленном сервере через SSH туннель

В который раз ловлю себя на мысли, что нужно описать в Wiki способ запуска Apache jMeter на другом сервере через SSH туннель. Такой вид тестирования позволяет исключить влияние скорости передачи данных на результат теста и максимально исключить разброс значений при многократных повторениях теста.

Чтобы не плодить сущности просто дам ссылку на отличный мануал, описывающий сабж.