Yes! Вроде бы получилось.
Предистория.
chan_datacard из рук вон плохо работал на CentOS (сборки Elastix, Asterisk)
Проблема известна, описана
тут.
В одну сторону (gsm -> sip) слышно нормально, в обратную (sip -> gsm) с искажениями и шумами до полной неразборчивости.
На других системах (Ubuntu) проблема лечилась обновлением ядра до 2.6.31+ - 2.6.33+
CentOS работает на ядре 2.6.18 и обновить его вроде как проблема.
Но вроде как все-таки удалось.
Итак, приступим.
Система Elastix 2.0 с последними обновлениями.
Доставим необходимые пакеты
Код: Выделить всё
yum install -y ncurses-devel gcc make rpm-build redhat-rpm-config
Скачаем последнее ядро
Код: Выделить всё
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.tar.bz2
Распакуем его
Создадим ссылку на на стандартное расположение исходников ядра
Код: Выделить всё
ln -sf /usr/src/linux-2.6.36 /usr/src/linux
Копируем конфиг от активного ядра
Код: Выделить всё
cd linux
cp /boot/config-`uname -r` .config
Запускаем конфигуратор ядра
И вносим небольшую корректировочку без которой новое ядро не взлетит:
- в разделе "General setup --->" активируем опцию "enable deprecated sysfs features which may confuse old userspace"
Выходим из кофигуратора
Создаем папки для сохранения результирующего rpm файла:
Код: Выделить всё
mkdir -p /usr/src/redhat/SRPMS
mkdir -p /usr/src/redhat/RPMS/{i386,x86_64}
Стандартный make rpm не собирает initrd автоматически и не добавляет ядро в grub.conf, поэтому надо наложить патчик.
Редактируем файл
добавляя в его конец следующее:
Код: Выделить всё
echo "%post"
echo "/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install "$KERNELRELEASE" || exit \$?"
echo ""
echo "%preun"
echo "/sbin/new-kernel-pkg --rminitrd --rmmoddep --remove "$KERNELRELEASE" || exit \$?"
echo ""
Собираем ядро (заодно контролируем время сборки):
У меня на Intel Atom 330 (1.6 GHz) собралось примерно за полтора часа.
По окончании устанавливаем новое свежее красивое ядро.
Код: Выделить всё
rpm -ihv /usr/src/redhat/RPMS/i386/kernel-2.6.36-1.i386.rpm
Проверяем правильно ли оно прописалась в настройк grub'а
Код: Выделить всё
[root@pbx05 ~]# cat /boot/grub/menu.lst
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
# initrd /initrd-version.img
#boot=/dev/hdc
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.36)
root (hd0,0)
kernel /vmlinuz-2.6.36 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.36.img
title Elastix (2.6.18-194.3.1.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.3.1.el5 ro root=/dev/VolGroup00/LogVol00
initrd /initrd-2.6.18-194.3.1.el5.img
Глубоко вздыхаем и перегружаемся
После перезагрузки проверяем версию текущего ядра
Код: Выделить всё
[root@pbx05 ~]# uname -a
Linux pbx05 2.6.36 #1 SMP Wed Nov 24 21:13:57 EET 2010 i686 i686 i386 GNU/Linux
После этой процедуры на первый взгляд все живое.
Самый главный плюс - с нормальным качеством заработал chan_datacard.
Из замеченных минусов:
- перестал работать lm_sensors, чувствую при сборке ядра надо более пристальное внимание уделить конфигурации модулей железа
- процесс asterisk кушает постоянно до 33% CPU. Подозреваю что намекает на то, что его тоже надо пересобрать под новым ядром (хидерами)
Что еще сломалось - пока не знаю. Карт в этом астериске нет, поэтому посмотреть выжило ли DAHDI после этой операции не могу.
Если у кого-то с этим ядром эта система не взлетит - ничего не мешает откатится на предыдущее ядро.
Используемая литература
Сборка ядер с kernel.org в CentOS 5
Сборка ядра 2.6.32.x pvops