Задача: запустить "Intel 82567LM-3 Gigabit Ethernet" для работы под управлением Debian Lenny.
Перед описанием реализацией решения не могу удержаться от растекания мыслью по древу.
В то время, как на сайтах и форумах молодых и неприкаянных (до поры до времени) разработчиков, администраторов и школьников (в самом хорошем смысле этого слова) царит эдакое "писькомерство", когда использующий самый современный релиз какого либо ПО, а лучше "ночную сборку", впереди всех, в реальной работе, приносящей "валовый", так сказать, реальный доход, как правило, используется программное обеспечение двух-трёх-пяти летней давности. Вот сколько угодно можно вопить про "дебилизм" администраторов корпоративных схем, а в жизни (не жизни форума, а в той, что марает ноги при хождении по земле) "Линуксы" иногда работают на ядрах "2.4", и "Виндозы" порой "2000"-ые, и система встраиваемая далеко не самая самая из всех самых модных, а та, что зарекомендовала себя тем, что работает уже пять лет без сбоев. Ну, и так далее и тому подобное. Может быть, в этом есть какая-то "сермяжья правда"? Может, не просто так я не видел ни одного корпоративного решения на свежей "Федоре" или "Бубунте"?
А теперь - к делу. Поступило оборудование. Относительно новые любительские серверы HP со встроенными сетевыми картами "Intel 82567LM-3 Gigabit Ethernet". Работать оборудование должно под управлением Debian GNU/Linux. Стабильная версия на данный момент - Debian Lenny. Драйверов, для используемых сетевых карт, в Lenny нет. Они есть в Debian Squeeze. Как вариант, можно скачать драйверы с сайта производителя карты и скомпилировать их для применения в Debian Lenny.
Казалось бы, что за вопрос? Squeeze вот-вот перейдёт в статус "стабильного", почему бы не применить его прямо сейчас. Ага, для дома - решение самое то, что надо; заодно поможем разработчикам в отлове ошибок ценой сбоев в нашей производственной инфраструктуре. Всё бы хорошо, но у поставщика используемого программного обеспечения нет поддержки для "тестируемых" и "нестабильных" версий. Эксплуатируемое нами программное обеспечение просто не устанавливается на Squeeze. Можно наложить "патч" от энтузиастов (они как раз закончили ВУЗ и у них есть чёткое видение ситуации в целом и они готовы решить "закавыку", которую штат профессиональных разработчиков из двух тысяч человек не берётся пока решать).
В общем, в свете вышеизложенных соображений и подозрений испугался я тягот тестирования Squeeze и решил попросту установить драйвер сетевой карты. Смешно, можно было бы с этого и начинать, но графомания затянула.
И так, ищем драйвер:
Скачиваем его:
# cd /usr/src
# wget http://downloadmirror.intel.com/15817/eng/e1000e-1.2.10.tar.gz
# wget http://downloadmirror.intel.com/15817/eng/e1000e-1.2.10.tar.gz
Распаковываем архив:
# tar -xvf e1000e-1.2.10.tar.gz
# cd ./e1000e-1.2.10/src
# cd ./e1000e-1.2.10/src
Для сборки потребуется как минимум компилятор и заголовочные файлы ядра. Точное наименование пакета заголовочных файлов можно узнать с помощью следующей команды:
# echo "linux-headers-"`uname -r`
Пример вывода:
linux-headers-2.6.26-2-amd64
Инсталлируем пакеты:
# aptitude install linux-headers-2.6.26-2-amd64 build-essential psmisc
Собираем драйвер:
# make
make -C /lib/modules/2.6.26-2-amd64/build SUBDIRS=/usr/src/e1000e-1.2.10/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
CC [M] /usr/src/e1000e-1.2.10/src/netdev.o
CC [M] /usr/src/e1000e-1.2.10/src/ethtool.o
CC [M] /usr/src/e1000e-1.2.10/src/param.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_82571.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_ich8lan.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_80003es2lan.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_mac.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_nvm.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_phy.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_manage.o
CC [M] /usr/src/e1000e-1.2.10/src/kcompat.o
LD [M] /usr/src/e1000e-1.2.10/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/src/e1000e-1.2.10/src/e1000e.mod.o
LD [M] /usr/src/e1000e-1.2.10/src/e1000e.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
CC [M] /usr/src/e1000e-1.2.10/src/netdev.o
CC [M] /usr/src/e1000e-1.2.10/src/ethtool.o
CC [M] /usr/src/e1000e-1.2.10/src/param.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_82571.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_ich8lan.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_80003es2lan.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_mac.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_nvm.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_phy.o
CC [M] /usr/src/e1000e-1.2.10/src/e1000_manage.o
CC [M] /usr/src/e1000e-1.2.10/src/kcompat.o
LD [M] /usr/src/e1000e-1.2.10/src/e1000e.o
Building modules, stage 2.
MODPOST 1 modules
CC /usr/src/e1000e-1.2.10/src/e1000e.mod.o
LD [M] /usr/src/e1000e-1.2.10/src/e1000e.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
Инсталлируем его:
# make install
make -C /lib/modules/2.6.26-2-amd64/build SUBDIRS=/usr/src/e1000e-1.2.10/src modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/2.6.26-2-amd64 -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/2.6.26-2-amd64 -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/2.6.26-2-amd64/kernel/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
make[1]: Entering directory `/usr/src/linux-headers-2.6.26-2-amd64'
Building modules, stage 2.
MODPOST 1 modules
make[1]: Leaving directory `/usr/src/linux-headers-2.6.26-2-amd64'
gzip -c ../e1000e.7 > e1000e.7.gz
# remove all old versions of the driver
find /lib/modules/2.6.26-2-amd64 -name e1000e.ko -exec rm -f {} \; || true
find /lib/modules/2.6.26-2-amd64 -name e1000e.ko.gz -exec rm -f {} \; || true
install -D -m 644 e1000e.ko /lib/modules/2.6.26-2-amd64/kernel/drivers/net/e1000e/e1000e.ko
/sbin/depmod -a || true
install -D -m 644 e1000e.7.gz /usr/share/man/man7/e1000e.7.gz
Пробуем загрузить модуль:
# modprobe e1000e
Проверяем, успешно ли он загружен:
# lsmod | grep e1000e
e1000e 107176 0
Для пущей надёжности по старинке прописываем автоматическую загрузку модуля (единый способ для всех систем):
# echo "e1000e" >> /etc/modules
На этом всё.