Gentoo Way Linux, Gentoo, Kubuntu, Ubuntu, Debian … компилируем всё!

14Мар/13Off

Ubuntu — Rsyslog server, nginx acces log collector

Надоело мне смотреть логи nginx на разных серверах кластера путём переключения консолей, а захотелось видеть всё в одном потоке. Такое умеет стандартный менеджер логов в поставке Ubuntu (и не только) - rsyslog, его и будем использовать.

Для начала настроим клиенты, те машины что логи будут отправлять:

nano /etc/rsyslog.d/99-nginx.conf
# Загружаем модуль для работы с файлами
$ModLoad imfile
# Указываем какой файл будем экспортировать
$InputFileName /var/log/nginx/access.log
# Назначаем тэг, который будет дописываться на сервере получателе, чтобы можно было понять с какой машины пришла запись
$InputFileTag hostX-access:
# Временный файл, в который rsyslog будет записывать текущую позицию
$InputFileStateFile access
# Источник сообщения
$InputFileFacility local0
# Уровень серьёзности сообщения
$InputFileSeverity info
# Запускаем мониторинг изменений в файле
$InputRunFileMonitor

# Отправлять накопленные данные будем каждую секунду
$InputFilePollInterval 1

# Указываем куда будем отправлять, в данном случае все сообщения local0 будут отправляться по UDP со сжатием gzip 7 на сервер 192.168.1.1
local0.*   @(z7)192.168.1.1:514

Такой конфиг нужно будет сделать на каждом сервере (hostX можно пронумеровать по каждому серверу или назначить более понятные вам теги).

Также нужно проверить что rsyslog сможет прочитать логи и сохранить файлы состояний:

chown syslog:syslog /var/spool/rsyslog && \
chmod 0750 /var/spool/rsyslog && \
chmod 0755 /var/log/nginx/ && \
chmod 0644 /var/log/nginx/access.log

Если у вас работает logrotate то нужно поправить конфиг чтобы новые файлы логов nginx создавались с правами 0644:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0644 www-data adm # поправлено
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Конфиг сервера, в /etc/rsyslog.conf добавить настройку приёма логов по UDP:

$ModLoad imudp
$UDPServerRun 514 # Порт нужно будет открыть на фаерволе
# Не забываем установить ограничения от кого можно принимать логи, IP перечисляются через запятую
$AllowedSender UDP, 192.168.1.0/24

В конфиге по-умолчанию, если логи с серверов не нужны в syslog сервера нужно добавить указание куда их собирать

nano /etc/rsyslog.d/50-default.conf
*.*;auth,authpriv.none,local0.none      -/var/log/syslog
local0.*            -/var/log/group.access.log

service rsyslog restart и можно наблюдать полную картину:

tailf /var/log/group.access.log

Отладка
Если что-то не будет работать, можно запустить rsyslog в режиме отладки, например так:

rsyslogd -c5 -dn

На сервере можно слушать порт таким образом:

tcpdump -vvv -nn -i eth0 udp port 514
Share
29Окт/12Off

Ubuntu — Cyborg R.A.T. 9

Cyborg R.A.T. 9

Подарили мне на ДР сие чудо техники. Драйвера для Windows можно скачать с сайта производителя, в Ubuntu же эта мышка из коробки не работает, а хочется, нашёл в сети рабочий конфиг для XOrg.

Для начала убедимся что нужная директория существует:

sudo mkdir /etc/X11/xorg.conf.d

И запишем правильную конфигурацию кнопок для этой мышки:

sudo nano /etc/X11/xorg.conf.d/910-rat.conf
Section "InputClass"
Identifier "Saitek PLC"
MatchUSBID "06a3:0cfa"
Driver "evdev"
MatchIsPointer "on"
MatchProduct "R.A.T.9|Saitek Cyborg R.A.T.9 Mouse"
MatchVendor "Saitek|SAITEK"
MatchDevicePath "/dev/input/event*"
Option "Protocol" "auto"
Option "Buttons" "21"
Option "ButtonMapping" "1 2 3 4 5 0 0 8 9 7 6 12 0 0 0 16 17 18 19 20 21"
Option "ZAxisMapping" "4 5 6 7"
Option "AutoReleaseButtons" "13 14 15"
EndSection

Вот и всё, все кнопки (кроме, кажется, красной) работают 🙂

Share
12Май/11Off

Linux — Video streaming и iPad 2

Получив в своё распоряжение сей девайс и чуток поигравшись с ним захотелось чего-то бо́льшего нежели просто игры - например просмотр любого видео из домашней коллекции без необходимости синхронизироваться с iTunes. Программ такого рода оказалось довольно много - на любой вкус и цвет но, они все работают только под Windows или Mac OS X, печально - мне нужно чтобы работало в Ubuntu. Поискав ещё, удалось найти варианты с заявленной поддержкой Linux, «из коробки» они конечно же не запускаются.

В итоге получился интересный мануальчик (для (K)Ubuntu) по установке серверной части для программ Air Video и VLC Streamer.
Свой выбор я остановил на платной версии Air Video (есть и бесплатная но показывает в списке к просмотру не все файлы на компьютере) т.к. у неё более дружественный интерфейс и имеется одна немаловажная особенность - перемотка видео на любую точку (как ролики на YouTube), в VLC же видео можно смотреть и перематывать только в пределах обработанного участка. Собственно вот небольшая табличка сравнения:

Air VideoVLC Streamer
Цена$2.99$1.99
Ограничения бесплатной версииЕсть - отображает не все файлы на ПКНет, поддерживается за счёт рекламы iAd
Кодирование на летуЕсть, вывод сразу в потокЕсть, вывод в файл + передача в поток
ПеремоткаЕстьЕсть, только в пределах перекодированного фрагмента
Очередь перекодированияЕсть, вывод в отдельный файл m4v (можно скопировать или перенести в iTunes)Есть, только подготовка для дальнейшего просмотра.
Предпросмотр кодируемого видеоЕстьНет
Изменение масштаба, усиление звукаЕстьНет
Управление субтитрамиЕстьВкл/Выкл
Выбор звуковой дорожкиЕстьНет
GUIНетЕсть

Air Video

Air Video


VLC Streamer

VLC Streamer

Share
10Мар/11Off

Linux — Debmirror и несколько зеркал

gentoo icon

Debmirror это perl скрипт который применяется для организации зекала репозитория Debian или Ubuntu.

Однако сам по себе он делает только то, для чего предназначен и не каплей больше (но настроек у него от этого не меньше и сделать зеркало он может по-различным протоколам и с различными условиями). Что же делать если нужно организовать несколько зеркал?

Share
6Ноя/10Off

Cacti — XBT Tracker statistics

И снова cacti. На этот раз выкладываю свой вариант шаблона для мониторинга XBTT т.к. тот, что выложен на официальном сайте, уже устарел да и вообще, говорят что он не работает, а у меня как раз есть рабочий 🙂

Архив с шаблоном и скриптом.
MD5:

7cdc55725a7ef580df5b5f91bca8884c  cacti-xbtt.tar.gz

Версия 0.2 для обновлённого вывода статистики в XBTT (добавились проценты у seeders и т.п.)
MD5:

15bc335147f35721ece4117f5eb9ec2d  cacti-xbtt-0.2.tar.gz

Для работы нужны следующие программы:

  • bash
  • lynx
  • awk

Установка:
1) Распаковать
2) Скопировать xbtt_stat.sh в /scripts/ (проверьте чтобы lynx и awk лежали там же где и в скрипте)
3) Импортировать шаблон

Share
Метки записи: , , 16 Комментарии
4Окт/10Off

Cacti — MegaFon balance

Т.к. в cacti смотрю каждый день то решил что было бы неплохо выводить туда и остаток средств на счету в МегаФон-е.
Скрипт адаптирован для Московского региона но при желании легко переделывается под другой регион и даже под другого оператора (если оператор предоставляет такие данные для автоматического сбора и не ставит на них капчу).

Не забудьте убедиться что в Сервис-Гиде в разделе Настройка Сервис-Гид -> Автоматический доступ выбрано "Доступ в «Сервис-Гид» открыт пользователям и автоматизированным системам".

Cacti - MegaFon balance

Архив с шаблоном и скриптом.
MD5:

0565784eaf166e60c1c2f0ed5b0e2910  cacti-megafon.tar.gz

Установка:
1) Распаковать
2) Скопировать megafon.pl в /scripts/
3) Импортировать шаблон

Share
Метки записи: , , , 4 Комментарии
25Сен/10Off

ATI — 10.9 FGLRX не собирается в DKMS

ATI Radeon

Очередное обновление, очередное «исправление», новые ошибки...одним словом - ATI.

Симптомы - fglrx не проходит фазу компиляции в DKMS, build log показывает что-то такое:

DKMS make.log for fglrx-8.771 for kernel 2.6.32-25-generic (x86_64)
Сбт Сен 25 16:09:51 MSD 2010
AMD kernel module generator version 2.1
doing Makefile based build for kernel 2.6.x and higher
/var/lib/dkms/fglrx/8.771/build/2.6.x
rm -rf *.c *.h *.o *.ko *.GCC* .??* *.symvers
make -C /lib/modules/2.6.32-25-generic/build SUBDIRS=/var/lib/dkms/fglrx/8.771/build/2.6.x modules
make[1]: Вход в каталог `/usr/src/linux-headers-2.6.32-25-generic'
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/firegl_public.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_acpi.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_agp.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_debug.o
  CC [M]  /var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c: In function ‘KCL_IOCTL_AllocUserSpace32’:
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: error: implicit declaration of function ‘compat_alloc_user_space’
/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.c:196: warning: return makes pointer from integer without a cast
make[2]: *** [/var/lib/dkms/fglrx/8.771/build/2.6.x/kcl_ioctl.o] Ошибка 1
make[1]: *** [_module_/var/lib/dkms/fglrx/8.771/build/2.6.x] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-25-generic'

make: *** [kmod_build] Ошибка 2
build failed with return value 2

Чтобы обойти ошибку можно подождать пару недель, вроде обещали исправить в октябре - но это же слишком долго.

Решение

Сделать нужно следующее - от root открыть файл /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h (или что у Вас сейчас используется), действие действительно и для x86 и для x86_64 архитектур (у меня например x86_64):

sudo nano /usr/src/linux-headers-2.6.32-25-generic/arch/x86/include/asm/compat.h

Мотаем вниз файла и видим строчку:

#endif /* _ASM_X86_COMPAT_H */

Между этой строчкой и последней фигурной скобкой ( } ) копируем и вставляем код:

static inline void __user *compat_alloc_user_space(unsigned long len)
{
    struct pt_regs *regs = task_pt_regs(current);
    return (void __user *)regs->sp - len;
}

(на самом деле не обязательно вставлять код именно в это место - просто на всякий случай, чтобы не вставить его в какую-нибудь другую функцию)

Сохраняем файл и пробуем переустановить fglrx. Теперь всё должно получиться 🙂

Не думаю что этот код что-то может сломать но после установки его можно удалить, если есть желание.

Share
Метки записи: , , , , Читать полностью
10Май/10Off

Kubuntu 10.04 — Эффекты и проприетарные драйвера для ATI

ATI Radeon

После обновления (а точнее после чистой установки) Kubuntu 10.04 установил проприетарные драйвера для своей ATI Radeon HD 4800 Series и как обычно что-то сломалось...на этот раз сломались эффекты рабочего стола (Через XRender работали но уж очень медленно). Что впрочем не удивительно т.к. дрова свежие и ещё толком не обкатанные. К тому же это ведь ATI...

Для справки - драйвера можно установить через jockey-kde или же:

sudo apt-get update
sudo apt-get install linux-headers-`uname -r` fglrx fglrx-amdcccle fglrx-dev fglrx-modaliases
sudo aticonfig --initial
sudo reboot

Покопавшись в настройках обнаружил что эффекты будут работать если выставить флаг «Отключить внутреннюю проверку» в разделе Параметры системы - Рабочий стол - Эффекты рабочего стола - Дополнительно

Но нужно же что бы они работали и в обычном режиме 🙂

Для этого нужно проверить чтобы в соответствующих разделах xorg.conf были эти значения:

Section "Device"
    Option      "AllowGLXWithComposite" "true"
EndSection

Section "Extensions"
    Option      "Composite" "Enable"
    Option      "DAMAGE" "Enable"
    Option      "RENDER" "Enable"
EndSection

После применения настроек эффекты работают и при отключении «Отключить внутреннюю проверку».

Share
Метки записи: , , , Нет комментариев
11Фев/10Off

KDE 4.4.0 — Поломался Skype — Kubuntu 9.10

Skype

С горем пополам обновился на KDE 4.4.0.

Всё красиво но сломался Smooth Tasks и Skype.
По Smooth Tasks отписал автору (не у меня одного такая проблема), а вот Skype пришлось реанимировать своими силами.

Запуск из консоли выдавал вот такой листинг и Skype намертво зависал 🙁

# skype
bt_audio_service_open: connect() failed: В соединении отказано (111)
bt_audio_service_open: connect() failed: В соединении отказано (111)
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: Нет такого файла или каталога

(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function

(process:7282): GLib-CRITICAL **: g_once_init_leave: assertion `initialization_value != 0' failed

(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function

(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function

(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function

(process:7282): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)'
failed

(process:7282): GLib-GObject-CRITICAL **: /build/buildd/glib2.0-2.22.3/gobject/gtype.c:2458: initialization assertion failed, use IA__g_type_init() prior to this function

(process:7282): GLib-GObject-CRITICAL **: g_type_add_interface_static: assertion `G_TYPE_IS_INSTANTIATABLE (instance_type)' failed

(process:7282): Gtk-CRITICAL **: gtk_widget_style_get: assertion `GTK_IS_WIDGET (widget)'
failed

Ничего лучше в голову не пришло как переустановить GKT темы.

apt-get install gtk2-engines gtk2-engines-qtcurve

Как оказалось gtk2-engines у меня установлено не было (а может оно и не нужно).

После чего зашёл в настройки внешнего вида и заново выбрал тему для GTK+ - оказалось этого достаточно т.к. Skype заработал 🙂

Версия Skype 2.1.0.81 (ИМХО предыдущая была лучше, эта иногда виснет).

Share
Метки записи: , , 2 Комментарии
19Ноя/09Off

Nginx — Как убрать вопрос «?» в строке адреса

nginx

Бывает необходимо сделать из адреса /index.php? просто /index.php (без ненужного вопроса). Для чего? Ну например для SAPE т.к. в индекс попадает страничка без вопроса в конце.

Помню что где-то видел решение, но где забыл, а заодно и забыл как это было сделано 🙁
Пришлось сделать своё, метод далеко не нов, но лучше я его запишу:

server {
 ...
        set $rr 0;
        if ($request_uri ~ ^/index.php\?$) {
            set $rr 1;
        }
        if ($request_method = POST) {
            set $rr 0;
        }
        if ($rr) {
                rewrite .* /index.php permanent;
        }
...
}

Очень просто.

Share
Метки записи: , , , Нет комментариев