Как стать автором
Обновить

Загрузка ESET NOD32 по сети

На дворе уже 21 век, а производители антивирусного программного обеспечения все ещё предлагают лечить ПК при помощи LiveCD или LiveUSB. В этой статье будет рассказано, как же сделать LiveCD ESET NOD32 загружаемым по сети. Статья будет полезна тем, кому часто приходится лечить зараженные ПК.

Требования к клиентской и серверной частям

Операционная система Ubuntu (я использовал 11.10 Desktop x86).
Настроен PXE сервер. О том, как быстро это сделать, можно прочитать тут.
На клиентской машине 512Mb RAM и сетевой адаптер с поддержкой загрузки по сети

Приступаем к работе

Для начала нам потребуется дистрибутив LiveCD ESET NOD32, который можно скачать по этой ссылке.
Нам понадобятся файлы vmlinuz и initrd.gz, находящиеся в папке boot, и папка sysrescue целиком. Далее нам потребуется машина, работающая под управлением ОС Ubuntu. Все действия выполняются из-под учетной записи администратора.

Создаем рабочую директорию, копируем туда initrd.gz, распаковываем архив:
mkdir –m 777 nod
cd ./nod
gzip –d initrd.gz


Далее нужно расширить файловую систему, чтобы туда поместилась папка sysrescue:
dd if=/dev/zero bs=1M count=300 >> initrd
e2fsck -fp initrd
resize2fs initrd


Монтируем:
mkdir  iso
mount –o loop initrd iso
chmod 777 –R iso


Копируем в корень iso папку sysrescue, после чего патчим файл linuxrc:
patch –p0 –i linuxrc.patch


Листинг linuxrc.patch

--- ./iso/linuxrc.bak	2009-08-04 16:24:06.000000000 -0700
+++ ./iso/linuxrc	2013-05-23 05:27:20.000000000 -0700
@@ -51,6 +51,19 @@
 # First, try from= boot argument, if given
 DATAFROM=$(cmdline_value from)
 
+# Check if livecd data is included in initrd
+ if [ "$SGN" = "livecd.sgn" ]; then
+ if [ "$DATAFROM"="" ]; then
+ if [ "$(find_modules /$LIVECDNAME)" != "" ]; then
+ DATA=/$LIVECDNAME
+ else
+ echolog "livecd data not found in initrd at /$LIVECDNAME"
+ fi
+ else
+ echolog "livecd set to initrd but from= is empty!"
+ fi
+ fi
+
 # If ip= parameter is present, assume we're booted over PXE
 # In that case, we have to initialize network very soon (now)
 # ip=<client-ip>:<boot-server-ip>:<gw-ip>:<netmask>
@@ -60,7 +73,7 @@
    DATAFROM="http://"$(echo $IP | cut -d : -f 2)
 fi
 
-if [ "$DATAFROM" ]; then
+ if [ "$DATAFROM" -a "$SGN" != "livecd.sgn" ]; then
    if [ "$(echo $DATAFROM | cut -b 1-7 | tr "[:upper:]" "[:lower:]")" = "http://" ]; then
       init_dhcp $(modprobe_network_modules)
       mount_httpfs $DATAFROM $MOUNTDIR/httpfs


Размонтируем файловую систему, запоминаем размер (пригодится в дальнейшем для указания ramdisk_size) и запаковываем initrd с максимальной компрессией:
umount iso
ls –lk initrd
gzip -9 initrd


На выходе получаем архив initrd.gz, который нужно поместить на PXE сервер куда-нибудь в недра tftproot, туда же помещаем файл vmlinuz. Дальше нужно поправить меню pxelinux, а именно файл pxelinux.cfg/default. Добавим строку:
include /<относительный путь до>/esetnod32.cfg


Создадим собственно esetnod32.cfg следующего содержания:
LABEL ESET NOD32
  MENU LABEL LIVE ESET NOD32
  kernel <относительный путь до>/vmlinuz
  append initrd=/<относительный путь до>/initrd.gz ramdisk_size=350000 sgnfile=livecd.sgn changes=/slax/ root=/dev/ram0 rw autoexec=startx;telinit~4


P.S.

Файлы можно скачать тут.
Можете воспользоваться скриптом repair.sh, который проделает большинство операций за вас ( положите исходные файлы initrd.gz, linuxrc.patch, repair.sh и папку sysrescue в одну директорию и запустите скрипт.)
Если вы очень ленивы, то готовый initrd.gz можно скачать по этой ссылке.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.