Инструменты пользователя

Инструменты сайта


blog:2013:0204_update_bios_over_pxe

Обновление BIOS по сети

Задача: обновить BIOS ROM на всех компьютерах в сети. Материнские платы одинаковые. Программа flashrom их не поддерживает. Выходит, остаётся единственный вариант перепрошивать из DOS ручками? Как бы не так! Наш девиз: «Автоматизация или смерть!» Приступим…

Конечно же, перепрошивка BIOS из операционной системы FreeDOS - это частный случай использования сетевой загрузки по PXE. Но цельного мануала именно по такой задаче в Интернетах найдено не было, поэтому и появилась на свет эта статья. Помимо перепрошивки BIOS ROM на некоторых современных материнских платах можно массово записывать NVRAM (CMOS settings, BIOS settings). Например, такую функцию поддерживают платы Asus имеющие функцию O.C. Profile. То есть можно не только массово обновлять BIOS ROM, но и менять настройки BIOS на компьютерах. Мечта любого админа, не правда ли?

Подготовка загрузочного образа

Воспользуемся готовым образом дискеты FreeDOS от проекта nfsroot. Склонируем исходники к себе в каталог и скопируем загрузочный образ FreeDOS:

git clone https://code.google.com/p/nfsroot
cp ./nfsroot/freedos/freedos.img ./itmodos.img

Скачаем архив с программами reboot.com и poweroff.exe отсюда1). Они нам понадобится чтобы выключать или перезагружать компьютер после перепрошивки, а в FreeDOS этих программ нет в комплекте. Распакуем программы и переместим в каталог tools.

Скопируем в текущий каталог необходимые для работы файлы: прошивки, программы-прошивальщики, файлы с настройками BIOS и т.д.

Далее по инструкции с wiki проекта добавим все нужные нам файлы в образ дискеты:

export MTOOLSRC=mtoolsrc
echo 'drive y: file="myfreedos.img"' >mtoolsrc
mcopy -s 151_UNI.CMO 151.bat autoexec.bat bios/ tools/ y:

Autoexec.bat

Следующий шаг - изменить файл autoexec.bat так, чтобы он автоматически запускал скрипт прошивки, если мы попросим. Для этого сначала вытащим файл из образа дискеты:

mcopy y:\autoexec.bat ./

Изменим его. В моем случае если передать параметр model=xxx, то во время загрузки автоматически запустится скрипт xxx.bat (который предварительно нужно положить в образ дискеты) и компьютер выключится. Для выключения будет использована программа poweroff.exe, которую мы скачали и положили в каталог tools:

autoexec.bat
@echo off
rem Borrowed from the top of freedos\fdauto.bat
rem kasatkin.org
set DEBUG=N
set NLSPATH=A:\FREEDOS
set DIRCMD=/P /OGN /4
set LANG=EN
set PATH=A:\FREEDOS;A:\DRIVER;A:\TOOLS

rem Get boot arguments
getargs >temp.bat
call temp.bat
del temp.bat

rem Serial console redirect
if "%sercons%"=="" goto end1
echo Redirecting console to %sercons%
if not "%baudhard%"=="" mode %sercons% baudhard=%baudhard%
if not "%baud%"=="" mode %sercons% baud=%baud%
ctty %sercons%
:end1

rem Flash BIOS
if "%model%"=="" goto end2
echo Flashing BIOS for motherboard model %model%
call %model%.bat
poweroff
:end2

Положим файл autoexec.bat обратно. На запрос системы о перезаписи файла ответим o (Overwrite):

mcopy -s autoexec.bat y:
Long file name "autoexec.bat" already exists.
a)utorename A)utorename-all r)ename R)ename-all o)verwrite O)verwrite-all
s)kip S)kip-all q)uit (aArRoOsSq): o

Скрипт перепрошивки

Здесь всё как обычно и особо останавливаться на этом пункте я не буду. Конкретный алгоритм перепрошивки зависит от производителя микропрограммы BIOS и материнской платы, но в общем случае скрипт будет выглядеть так:

model.bat
@echo off
flasher.exe -output backup.rom -input update.rom

Более интересен скрипт для перезаписи NVRAM. Для этого будем использовать замечательную программу uniflash. Скачиваем и добавляем её в наш загрузочный образ. Загружаем эталонный компьютер, настраиваем BIOS и сохраняем. Перезагружаемся во FreeDOS и делаем дамп всех настроек BIOS в файл с помощью uniflash:

bios\uniflash.exe -cmoss xxx_uni.cmo

Обычно настройки хранятся в той же микросхеме, что и BIOS ROM, но в специальной перезаписываемой области памяти называемой NVRAM2). Сохранив эту область памяти в файл, можно её использовать для записи в NVRAM другой материнской платы такой же модели. Таким образом на другой компьютер можно перенести все настройки, включая пароль на BIOS, порядок загрузки и так далее.

Пишем скрипт для восстановления настроек с использованием программы uniflash:

151.bat
@echo off
bios\unifl2b5.exe -cmosr 151_UNI.CMO

Копируем скрипт в образ дискеты:

mcopy -s 151.bat y:

Не забываем тщательно всё протестировать на подопытном компьютере.

Сетевая загрузка

Теперь осталось переместить наш образ дискеты FreeDOS на сервер сетевой загрузки и добавить пункт меню. Здесь предполагается, что у вас уже есть настроенный сервер сетевой загрузки. Для загрузки с помощью iPXE и автоматического запуска скрипта 151.bat (параметр model=151) я использую следующее меню:

#!ipxe
#
kernel http://dolly/memdisk nopassany=1 stack=2048 raw=1 model=151
initrd http://dolly/itmodos.img
boot
exit 0

Делаем тестовый запуск на одном компьютере, и если всё прошло успешно обновляем настройки на всех остальных компьютерах. Победа!

Использованные ресурсы

blog/2013/0204_update_bios_over_pxe.txt · Последнее изменение: 2022-02-19 18:16 — 127.0.0.1