На дворе уже 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, распаковываем архив:
Далее нужно расширить файловую систему, чтобы туда поместилась папка sysrescue:
Монтируем:
Копируем в корень iso папку sysrescue, после чего патчим файл linuxrc:
Размонтируем файловую систему, запоминаем размер (пригодится в дальнейшем для указания ramdisk_size) и запаковываем initrd с максимальной компрессией:
На выходе получаем архив initrd.gz, который нужно поместить на PXE сервер куда-нибудь в недра tftproot, туда же помещаем файл vmlinuz. Дальше нужно поправить меню pxelinux, а именно файл pxelinux.cfg/default. Добавим строку:
Создадим собственно esetnod32.cfg следующего содержания:
Файлы можно скачать тут.
Можете воспользоваться скриптом repair.sh, который проделает большинство операций за вас ( положите исходные файлы initrd.gz, linuxrc.patch, repair.sh и папку sysrescue в одну директорию и запустите скрипт.)
Если вы очень ленивы, то готовый initrd.gz можно скачать по этой ссылке.
Требования к клиентской и серверной частям
Операционная система 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 можно скачать по этой ссылке.