Видеонаблюдение через интернет в веб-браузере

Русификация syslog в Debian.

В современных Debian/Ubuntu по умолчанию в качестве замены syslogd используется rsyslog, который позволяет вывод сообщений в UTF-8. Так что статью можно считать устаревшей и не читать.

История болезни: при выводе в Syslog русских строк в кодировке UTF-8 появляются нечитаемые символы, а проще говоря, абракадабра.

Вопрос: Почему демон syslogd в отлично локализованном Debian не работает с такими строками?

Ответ: Он не должен этого делать в соответствии с своим стандартом RFC 3164 - The BSD Syslog Protocol (см. раздел 4.1 syslog Message Parts).

Решение: Так как нет никакой надежды на то, что сборщики консервативного Debian пойдут на нарушение стандарта в таком важном системном пакете, выход у нас только один: самостоятельное наложить патч и пересобрать пакет sysklogd.

Для нетерпеливых: Вы можете скачать уже пропатченный sysklogd для Debian Etch i386 c нашего репозитория и сразу перейти к разделу «Установка пакета».

Пересборка пакета

Для пересборки пакета использовалось руководство «Сборка пакетов Debian» и UTF-8 патч

Получаем пакет с исходными кодами sysklogd и устанавливаем дополнительные пакеты для сборки:

user@host:~ sudo apt-get source sysklogd
user@host:~ sudo apt-get build-dep sysklogd

Переходим в полученный каталог sysklogd_1.4.1 и правим файл syslogd.c функция printline():

--- syslogd.c.orig      2007-08-05 12:06:17.000000000 +0400
+++ syslogd.c   2007-08-04 14:58:35.000000000 +0400
@@ -1468,7 +1468,7 @@
                else if (c < 040) {
                        *q++ = '^';
                        *q++ = c ^ 0100;
-               } else if (c == 0177 || (c & 0177) < 040) {
+               } else if (c == 0177 /* this comment allow Russian messages in UTF-8:  || (c & 0177) < 040 */) {
                        *q++ = '\\';
                        *q++ = '0' + ((c & 0300) >> 6);
                        *q++ = '0' + ((c & 0070) >> 3);

Изменяем changelog и собираем пакет:

user@host:~ dch -i
user@host:~ debuild

Установка пакета

Вручную, с помощью dpkg.

Скачиваем пакет с репозитория (адрес см. в начале страницы) и обновляем:

user@host:~ sudo dpkg -i sysklogd_1.4.1.UTF8-18_i386.deb

Из нашего репозитория, c помощью APT.

Проверяем установленную версию и кандидата - новую доступную версию согласно apt_preferences:

user@host:~$ apt-cache policy sysklogd
sysklogd:
  Установлен: 1.4.1-18
  Кандидат: 1.4.1-18
  Таблица версий:
 *** 1.4.1-18 0
        500 cdrom://[Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40] etch/main Packages
        100 /var/lib/dpkg/status

Прописываем адрес репозитория в /etc/apt/sources.list

...
deb http://avreg.net/debian/ etch contrib non-free main
...

Обновляем список, доступных пакетов:

user@host:~ sudo aptitude update

Снова проверяем версию кандидата:

user@host:~$ apt-cache policy sysklogd
sysklogd:
  Установлен: 1.4.1-18
  Кандидат: 1.4.1.UTF8-18
  Таблица версий:
     1.4.1.UTF8-18 0
        500 http://192.168.0.241 etch/main Packages
 *** 1.4.1-18 0
        500 cdrom://[Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40] etch/main Packages
        100 /var/lib/dpkg/status

Обновляем пакет sysklogd без изменения конфигурационных файлов.

user@host:~ sudo aptitude install sysklogd

Проверка

Проверяем версию установленного пакета и откуда он был получен.

user@host:~$ apt-cache policy sysklogd
sysklogd:
  Установлен: 1.4.1.UTF8-18
  Кандидат: 1.4.1.UTF8-18
  Таблица версий:
 *** 1.4.1.UTF8-18 0
        500 http://avreg.net etch/main Packages
        100 /var/lib/dpkg/status
     1.4.1-18 0
        500 cdrom://[Debian GNU/Linux 4.0 r0 _Etch_ - Official i386 DVD Binary-1 20070407-11:40] etch/main Packages
user@host:~$ logger 'Теперь демоны могут писать в сислог на русском языке в кодировке UTF-8'
user@host:~$ tail /var/log/messages
Jul 31 10:36:01 debian -- MARK --
Jul 31 10:54:59 host: user: Теперь демоны могут писать в сислог на русском языке в кодировке UTF-8
howto/debian-syslog-utf8.txt · Последние изменения: 2011-01-25