Библиотека Интернет Индустрии I2R.ru |
|||
|
Установка Linux на устройство, которое не поддерживается дистрибутивомЯ уверен, что подавляющему большинству системных администраторов время от времени приходиться сталкиваться с новым серверным оборудованием, которое не поддерживается последней версией их дистрибутива Linux. Обычно это не проблема, поскольку, если вы можете установить основу системы, то все остальное можно "прикрутить" после, когда система заработает. Единственным исключением является ситуация, когда не поддерживается устройство, на котором должен быть создан корневой раздел -- здесь и начинается настоящее веселье. Ключевая проблема в том, что аппаратура не поддерживается дистрибутивом. В большинстве случаев выясняется, что самое свежее ядро поддерживает новое "железо" и, таким образом, апгрейд до нового ядра решает проблему. Но это сказка про курицу и яйцо, поскольку у вас еще нет работающей системы. В этой статье я, надеюсь, смогу уменьшить "головную боль", присущую подобным "проблемным" установкам, так что вы сможете быстрее справиться с возложенными на вас обязанностями. Дистрибутив, который я буду использовать в качестве примера -- Red Hat 7.1 (далее называемый RH7.1), а устройство, на котором предполагается создать корневой раздел -- хост-адаптер RAID-массива Adaptec 2100. Естественно, я попытаюсь так обобщить предлагаемые советы, что их будет можно приспособить практически для любого "неподдерживаемого" устройства (например, для контроллеров IDE RAID или других SCSI HBA) и других дистрибутивов. С RH7.1 поставляется ядро 2.4.2-2: оно основано на kernel-2.4.2-ac с дополнительными
"пачами" от Red Hat. Для работы на Adaptec 2100 требуется ядро 2.4.10-ac1. Я
рекомендую ядра "-ac", поскольку Алан Кокс (с целью тестирования) включает в
свои ядра множество экспериментальных драйверов и, таким образом, они поддерживают
всевозможные новые "железки" задолго до "основного" ядра от Линуса, в которое
эти обновления включаются позже. Для сборки ядер вам потребуется вспомогательная
Linux-система, на которой будет выполняться компиляция (вам, возможно, захочется
снять с мозгов накопившуюся ржавчину с помощью чтения kernel-HOWTO:) и будут
создаваться загрузочные диски. Сообщения от "ядерного кольца" в CONFIG_X86=y CONFIG_ISA=y CONFIG_UID16=y # Необходимо для включения новых драйверов CONFIG_EXPERIMENTAL=y CONFIG_MODULES=y CONFIG_MODVERSIONS=y CONFIG_KMOD=y # Выбор целевого CPU, SMP опускается, # поскольку требует слишком много места CONFIG_MPENTIUMIII=y # Даже если у вас более 1G RAM, # для установки всегда отключаем highmem CONFIG_NOHIGHMEM=y CONFIG_NET=y CONFIG_PCI=y CONFIG_PCI_GOANY=y CONFIG_PCI_BIOS=y CONFIG_PCI_DIRECT=y # Данная опция просто раздувает ядро, # при установке она не нужна # CONFIG_PCI_NAMES is not set CONFIG_SYSVIPC=y CONFIG_SYSCTL=y CONFIG_KCORE_ELF=y CONFIG_BINFMT_ELF=y CONFIG_BINFMT_MISC=y # ACPI и APM не требуются даже для нормальной работы # настольной системы и, соответственно, опускаются. # CONFIG_PM is not set # CONFIG_ACPI is not set # CONFIG_APM is not set # И параллельные порты пока тоже побоку... # CONFIG_PARPORT is not set CONFIG_BLK_DEV_FD=y # Некоторым дистрибутивам при установке # требуются loop-устройства CONFIG_BLK_DEV_LOOP=y # При установке почти всегда используются Initrd CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_BLK_DEV_INITRD=y CONFIG_PACKET=y # CONFIG_PACKET_MMAP is not set # CONFIG_NETLINK is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y CONFIG_INET=y # У вас есть устройства IDE? У меня обычно таковые имеются. # IDE cdroms CONFIG_IDE=y CONFIG_BLK_DEV_IDE=y CONFIG_BLK_DEV_IDEDISK=y # Добавим скорости, считывая по # несколько секторов за раз CONFIG_IDEDISK_MULTI_MODE=y CONFIG_BLK_DEV_IDECD=y CONFIG_BLK_DEV_IDEPCI=y CONFIG_IDEPCI_SHARE_IRQ=y CONFIG_BLK_DEV_IDEDMA_PCI=y CONFIG_BLK_DEV_ADMA=y # Это может понадобиться, # если вы ставитесь на дополнительный контроллер # CONFIG_BLK_DEV_OFFBOARD is not set # DMA хорошо "срезает" время установки # и "неспецифическую" проверку ошибок CONFIG_IDEDMA_PCI_AUTO=y CONFIG_BLK_DEV_IDEDMA=y CONFIG_IDEDMA_AUTO=y # Если у вас один из контроллеров IDE-RAID # то эти опции нужно будет включить. # CONFIG_BLK_DEV_ATARAID is not set # CONFIG_BLK_DEV_ATARAID_PDC is not set # CONFIG_BLK_DEV_ATARAID_HPT is not set CONFIG_SCSI=y CONFIG_BLK_DEV_SD=y CONFIG_SD_EXTRA_DEVS=40 CONFIG_SCSI_MULTI_LUN=y # Выбираем только те драйверы нижнего уровня, # которые требуются для установки. # Например, я не включаю мою карту aic7xxx, # поскольку к ней подключен только стример. CONFIG_SCSI_DPT_I2O=y # Не будем увеличивать размер ядра # CONFIG_SCSI_DEBUG is not set # требуется для нашего RAID-контроллера # основанного на i2o CONFIG_I2O=y CONFIG_I2O_PCI=y CONFIG_I2O_BLOCK=y CONFIG_I2O_SCSI=y # Драйверы сетевых карт нам пока ни к чему. CONFIG_NETDEVICES=y # Нам же нужно вводить куда-нибудь текст ;) CONFIG_VT=y CONFIG_VT_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 # Ограничиваемся установкой в текстовом режиме. # CONFIG_MOUSE is not set # CONFIG_PSMOUSE is not set # CONFIG_82C710_MOUSE is not set # CONFIG_PC110_PAD is not set # Это подождет ;) # CONFIG_QUOTA is not set # Дистрибутивы, ставящиеся на ext3, могут потребовать # эту опцию (относится и к Reiser), но старайтесь # ограничиться небольшим числом файловых систем # CONFIG_EXT3_FS is not set # Некоторым дистрибутивам требуется msdos fs CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y # Для доступа к CD-ROM с дистрибутивом CONFIG_ISO9660_FS=y # А это вообще-то нужно? CONFIG_JOLIET=y CONFIG_PROC_FS=y CONFIG_DEVPTS_FS=y CONFIG_EXT2_FS=y # Обычные разделы на PC CONFIG_MSDOS_PARTITION=y # Возможно, это лишнее, но лучше не рисковать CONFIG_NLS_DEFAULT="iso8859-1" # Консольные драйверы # CONFIG_VGA_CONSOLE=y # Пока без симпатяг-пингвинов :) # CONFIG_FB is not set # Если нет клавиатуры или мыши USB -- опускаем эту секцию # CONFIG_USB is not set По завершению компиляции ядра наступает время вставить новое ядро на место предыдущего, делается путем монтирования загрузочной дискеты установщика. Для этого требуется поддержка loopback устройств. # cd /tmp # cp /cdrom/boot/boot.img . # mkdir bootdisk # mount -t msdos boot.img bootdisk -o loop # cp /usr/src/linux-2.4.10-ac11/arch/i386/boot/bzImage bootdisk/vmlinuz rdev не требуется, поскольку syslinux передает нужное корневое устройство (например, initrd). # umount bootdisk # dd if=boot.img of=/dev/fd0 Сравниваем размеры ядер. Исходное установочное ядро : 652k Кастомизированное установочное ядро : 632k Кастомизированное "нормальное" ядро : 951k Понятно, что у нас не вышло бы втиснуть полнофункциональное ядро на загрузочную дискету. Теперь у нас имеется новый инсталляционный диск с поддержкой нашего root-устройства. Используем его для запуска процедуры установки. Я рекомендую проводить установку в текстовом режиме, поскольку мы удалили поддержку фреймбуфера и мыши для минимизации размера ядра. По завершении система будет установлена на корневое устройство, но она не сможет с него загрузиться. Причина -- инсталлятор установил "ядерные" пакеты из дистрибутива, а не то ядро, которое использовалось во время установки. Возвращаемся на вспомогательную машину и создаем загрузочную дискету. # rdev bzImage /dev/sda1 # dd if=bzImage of=/dev/fd0 (Вместо /dev/sda1 укажите ваше корневое устройство). По готовности загружаемся в консоль, распаковываем тарбол с новым ядром на целевой компьютер (или сервер) и конфигурируем по необходимости. Можно взять конфиг из дистрибутива и построить новое ядро на его основе: # cd /usr/src/linux-2.4.10-ac11 # cp /home/zwane/config-2.4.2-2 .config # make oldconfig Отвечайте на задаваемые вопросы, а затем пройдитесь по menuconfig для проверки конфигурации перед компиляцией: # make menuconfig # make dep bzImage modules modules_install Копируем полученный образ ядра туда, куда требуется (например, в /boot/vmlinuz) и правим конфигурацию lilo (шаг пропускается, если вы пользуетесь grub'ом ;). Вам придется выполнить последний rdev на ваше новое ядро, поскольку сборочный процесс ядра "определяет" текущее корневое устройство во время компиляции и "прописывает" его во все ядра, собираемые в данной сессии. Альтернатива: изменить Makefile верхнего уровня (например, /usr/src/linux-2.4.10-ac11/Makefile) и изменить ROOT_DEVICE в соответствии с моментом. # rdev /boot/vmlinuz /dev/sda1 Теперь должно получиться перезагрузиться и насладиться плодами своих трудов! Автор: (C) Зване Мвайкамбо [Zwane Mwaikambo] |
|
2000-2008 г. Все авторские права соблюдены. |
|