Решение по сути было найдено не мной, а товарищем с ником zloidemon.
На основе этого я написал скрипт, который автоматизирует описанный им алгоритм:
#!/bin/bash iso_src="http://rescuedisk.kaspersky-labs.com/rescuedisk/updatable/kav_rescue_10.iso" patch_src="http://gitorious.org/zloidemon-freebsd-configs/trunk/blobs/raw/master/patches/PXE/patch-PXE_kav_rescue_2010.iso.patch" prefix=/var/tftpd/pxe/kaspersky rm ${prefix}/rescue ${prefix}/rescue.igz mkdir -p ${prefix}/.mnt mkdir -p ${prefix}/.tmp wget -nc -c $iso_src wget -nc -c $patch_src mount -o loop $(basename "${iso_src}") ${prefix}/.mnt cp -r ${prefix}/.mnt/* ${prefix}/.tmp/ mkdir -p ${prefix}/.tmp/image/cdrom cd ${prefix}/.tmp/image zcat ${prefix}/.tmp/boot/rescue.igz |cpio -id patch -p0 < ${prefix}/patch-PXE_kav_rescue_2010.iso.patch cp -R ${prefix}/.tmp/rescue/ ${prefix}/.tmp/image/cdrom/ /usr/local/bin/mksquashfs cdrom cdrom.squashfs rm -rf cdrom cp ${prefix}/.mnt/image.squashfs ${prefix}/.tmp/image/ chmod 644 image.squashfs cp ${prefix}/.tmp/boot/rescue ${prefix}/ find . -print | cpio -o -H newc > ${prefix}/rescue.igz umount ${prefix}/.mnt rmdir ${prefix}/.mnt rm -rf ${prefix}/.tmpЗдесь /var/tftpd/pxe - корень tftp-сервера.
Здесь есть важный нюанс: пакет squashfs-tools должен быть версии не ниже 4.0. В Lenny версия 3.3. Для меня достаточно было скопировать бинарник из squeeze в /usr/local/bin и все заработало.
Конфигурация PXELinux:
label Kaspersky 2010 rescue RUS kernel kaspersky/rescue append initrd=kaspersky/rescue.igz root=/dev/ram0 cdroot=1 kav_lang=ru loop=image.squashfs looptype=squashfs real_root=/На всякий случай содержимое патча:
--- init.orig 2010-05-24 21:40:35.000000000 +0800 +++ init 2010-05-25 16:07:38.000000000 +0800 @@ -399,7 +399,7 @@ fi # Determine root device good_msg 'Determining root device...' -while true +while false do while [ "${got_good_root}" != '1' ] do @@ -462,6 +462,8 @@ do fi done +REAL_ROOT=/image.squashfs +REAL_ROOT_TYPE=squashfs if [ "${CDROOT}" = 1 -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ] then @@ -521,7 +523,6 @@ then [ -z "${LOOP}" ] && find_loop [ -z "${LOOPTYPE}" ] && find_looptype - cache_cd_contents # If encrypted, find key and mount, otherwise mount as usual if [ -n "${CRYPT_ROOT}" ] @@ -557,7 +558,8 @@ then elif [ "${LOOPTYPE}" = 'squashfs' ] then good_msg 'Mounting squashfs filesystem' - mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd" + mount -t squashfs -o loop,ro /${LOOP} ${NEW_ROOT}/mnt/livecd + mount -t squashfs -o loop,rw /cdrom.squashfs ${NEW_ROOT}/mnt/cdrom test_success 'Mount filesystem' FS_LOCATION='mnt/livecd' elif [ "${LOOPTYPE}" = 'gcloop' ]Чтобы включить поддержку boottp в DNSMasq в конфигурационном файле /etc/dnsmasq.conf должны присутствовать следующие строчки:
dhcp-boot=pxelinux.0 enable-tftp tftp-root=/var/tftpd/pxe/В директории /var/tftpd/pxe/ должен располагаться файл pxelinux.0 из пакета syslinux или его же можно скачать с сайта проекта. Подробно настройку описывать не буду - материалов в сети и так уже море ^^.
Вот так выглядит интерфейс диска. |
Единственный минус - несколько долго загружается по сети. 200 мегабайт как-никак. Но зато очень удобно.
P.S. Спасибо zloidemon за оказанные консультации!
а можешь выложить готовый образ, а то для меня, юзера виндовс, это пока что довольно сложно, но очень хочется запускать каспер через PXE... у zloidemonа есть, но он уже довольно устарел, хотелось бы новый в таком же виде
ОтветитьУдалитьА кто у тебя выступает PXE-сервером?
ОтветитьУдалитьtftpd32
ОтветитьУдалитьчерез груб4дос запускается версия zloidemon с такими параметрами:
title Kaspersky RescueCD
pxe keep
find --set-root /grldr
kernel (pd)/kav/rescue root=/dev/ram0 cdroot=1 kav_lang=ru loop=image.squashfs looptype=squashfs real_root=/
initrd (pd)/kav/rescue2010.igz
Не понял при чем тут grub4dos...
ОтветитьУдалитьСоветую поставить VirtualBOX, в нем любой Linux и все сделать по инструкциям. Готовых образов у меня уже нет, а специально качать и заниматься нет ни желания ни времени.
ну а я не понял зачем спрашивать кто у тебя выступает PXE-сервером, если все равно делать не собирался
ОтветитьУдалитьдумал у тебя стоит сервер под Linux - мог разъяснить непонятные вещи.
ОтветитьУдалитьвсе таки касперский что то особенное со своим дистрибутивом сделал, т.к. при на команде
ОтветитьУдалитьzcat ${prefix}/.tmp/boot/rescue.igz |cpio -id
происходит ошибка not in gzip format
вот нашел кое что http://www.gentoo-wiki.info/HOWTO_LiveCD_on_disk#Modifying_initrd , там по другому не много делают но все равно не помогло... либо я не так делал... предлагай если есть варианты
добавь перед этим команду
ОтветитьУдалитьls -lh ${prefix}/.tmp/boot/rescue.igz
предполагаю, что ошибка у тебя раньше
А при чем тут ls? Че то ты совсем не в ту сторону думаешь))
ОтветитьУдалитьКасперский по ходу сменил формат или тип сжатия или еще че то, т.к. zcat не прокатывает...
вот польный результат работы скрипта с командой ls -lh ${prefix}/.tmp/boot/rescue.igz
[root@www tmp]# ./1.sh
Файл `kav_rescue_10.iso' уже существует; не загружается.
Файл `patch-PXE_kav_rescue_2010.iso.patch' уже существует; не загружается.
-r-xr-xr-x 1 root root 4,1M Апр 25 19:11 /var/tftpd/pxe/kaspersky/.tmp/boot/rescue.igz
zcat: /var/tftpd/pxe/kaspersky/.tmp/boot/rescue.igz: not in gzip format
cpio: преждевременный конец архива
/1.sh: line 21: /var/tftpd/pxe/kaspersky/patch-PXE_kav_rescue_2010.iso.patch: Нет такого файла или каталога
/1.sh: line 23: /usr/local/bin/mksquashfs: Нет такого файла или каталога
184705 blocks
P.s. использую Centos5 и kav_rescue_10.iso v10.0.29.2
вообщем rescue.igz открылся с помощью 7zip из под винды, 7zip пишет что метод используемый в rescue.igz - LZMA:24, дальше в этом архиве (rescue.igz) находится файл rescue, в котором ФС линукса... в общем осталось найти команду или спец атрибуты к gzip/zcat/tar/lzma
ОтветитьУдалитьчувствую что я очень близко к истине, но никак не найду ее)))
вот залил rescue.igz на народ, размер 4МБ, если интересно, можешь помочь: http://narod.ru/disk/11097558001/rescue.igz.html
ОтветитьУдалитьПопробуй 7za e -so ${prefix}/.tmp/boot/rescue.igz |cpio -id, раз говоришь 7zip его открывает.
ОтветитьУдалитьИли распакуй как можешь, потом саt и передай cpio
переделал я немного твой скрипт:
ОтветитьУдалить#!/bin/bash
iso_src="http://rescuedisk.kaspersky-labs.com/rescuedisk/updatable/kav_rescue_10.iso"
patch_src="http://gitorious.org/zloidemon-freebsd-configs/trunk/blobs/raw/master/patches/PXE/patch-PXE_kav_rescue_2010.iso.patch"
prefix=/tmp/kaspersky
rm ${prefix}/rescue ${prefix}/rescue.igz
mkdir -p ${prefix}/.mnt
mkdir -p ${prefix}/.tmp
#wget -nc -c $iso_src
#wget -nc -c $patch_src
mount -o loop $(basename "${iso_src}") ${prefix}/.mnt
cp -r ${prefix}/.mnt/* ${prefix}/.tmp/
mkdir -p ${prefix}/.tmp/image/cdrom
cd ${prefix}/.tmp/image
###################
mv ${prefix}/.tmp/boot/rescue.igz ${prefix}/.tmp/boot/rescue.lzma
rm ${prefix}/.tmp/boot/rescue
lzma -d ${prefix}/.tmp/boot/rescue.lzma
cat ${prefix}/.tmp/boot/rescue | cpio -id
#zcat ${prefix}/.tmp/boot/rescue.igz |cpio -id
cp /tmp/patch-PXE_kav_rescue_2010.iso.patch ${prefix}/
##################
patch -p0 < ${prefix}/patch-PXE_kav_rescue_2010.iso.patch
cp -R ${prefix}/.tmp/rescue/ ${prefix}/.tmp/image/cdrom/
#/usr/local/bin/mksquashfs cdrom cdrom.squashfs
rm -rf cdrom
cp ${prefix}/.mnt/image.squashfs ${prefix}/.tmp/image/
chmod 644 image.squashfs
cp ${prefix}/.tmp/boot/rescue ${prefix}/
find . -print | cpio -o -H newc > ${prefix}/rescue.igz
umount ${prefix}/.mnt
rmdir ${prefix}/.mnt
rm -rf ${prefix}/.tmp
в итоге вот что получается:
ОтветитьУдалить[root@www tmp]# ./1.sh
34252 blocks
patching file init
Hunk #1 succeeded at 386 (offset -13 lines).
Hunk #2 succeeded at 461 (offset -1 lines).
Hunk #3 succeeded at 510 with fuzz 1 (offset -13 lines).
Hunk #4 succeeded at 557 (offset -1 lines).
218989 blocks
rmdir: /tmp/kaspersky/.mnt: Устройство или ресурс занято
по сути все отлично за исключением
cp -R ${prefix}/.tmp/rescue/ ${prefix}/.tmp/image/cdrom/
/usr/local/bin/mksquashfs cdrom cdrom.squashfs
не создается cdrom.squashfs (error in line 29, т.е в этой строке)... как это работает можешь обьяснить??
>>> rmdir: /tmp/kaspersky/.mnt
ОтветитьУдалитьсмотри mount и fuser на директорию, анализируй
>>> error in line 29
я ж писал, что туда положил вручную скопированный бинарник из другого дистрибутива. Нужна была именно эта версия. Смотри какая у тебя и поправь соответствующе путь.
установил squashfs-tools создал образ, создался... загрузиться не удалось:
ОтветитьУдалитьMounting squashfs filesystem
mount: mounting /dev/loop1 on /newroot/mnt/cdrom failed: invalid argument.
!! Failed to $1; failing boot to shell
понял то что виноват этот squashfs-tools, проверил версию, а она оказалась вообще 3.0-4... установаливал через yum install squashfs-tools... ищу где взять новую для i386... гребаные зависимости)))
хотя возможно все получится в ubuntu там он 4 версии
ОтветитьУдалитьКак вариант собрать руками.
ОтветитьУдалитьИли найти пакет с нужной версией от любого дистрибутива и оттуда выдрать, как я и сделал.
Почему бы не выложить рабочую сборку Kaspersky Rescue Disk 10, кто уже переделал под PXE ? Поделитесь плиззз!
ОтветитьУдалитьДля тех у кого линукса нет под рукой, да и не сильно шарят в нем.
Это все в виртуалке можно сделать. Образа у меня уже нет, т.к. уже не занимаюсь этим вопросом. Попробуйте сделать сами, если будут трудности - спрашивайте.
ОтветитьУдалить