| Мнение Общественности |
Какую файловую систему на флешке вы предпочитаете?
Всего ответов: 4982
|
|
|
Dr.Web Live USB и GRUB
| |
| Sphinx114 | Дата: Суббота, 11.02.2012, 01:24 | Сообщение # 166 |
|
Экспериментатор
Группа: Пользователи
Сообщений: 128
Статус: Отсутствует
| У меня базы нормально обновляются и сохраняются (снапшотом пользуюсь).
А как сделать чтобы по умолчанию в докторе загружался русский язык? Что означает CONSOLE=/dev/tty1? Где можно найти список допустимых параметров ядра для доктора (для каспера тоже желательно) и их сакральный смысл?
|
| |
|
|
| Sh1td0wn | Дата: Суббота, 11.02.2012, 17:27 | Сообщение # 167 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| > Что означает CONSOLE=/dev/tty1? Какой-то из сервисов, из которых состоит DrWeb, читает этот параметр и общается с консолью на первом виртуальном терминале.
> Где можно найти список допустимых параметров ядра для доктора Либо в официальной документации, либо в документации используемого для сборки дистрибутива (Gentoo), либо в документации ядра (для специфичных для ядра параметров), либо самостоятельно по результату прочтения загрузочных скриптов.
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| ShadowNev | Дата: Вторник, 21.02.2012, 09:12 | Сообщение # 168 |
|
Неизвестный
Группа: Пользователи
Сообщений: 1
Статус: Отсутствует
| userforspam На этой странице господин hunter64 описал 100% рабочий метод, я сам, независимо от него поднял таким же способом Dr.WEB на своей мульти-флешке.
|
| |
|
|
| Orestik | Дата: Вторник, 21.02.2012, 12:19 | Сообщение # 169 |
|
Экспериментатор
Группа: Пользователи
Сообщений: 41
Статус: Отсутствует
| подтверждаю выше написанное, все грузится и работает.... Вот мой код для наглядности:
title Dr.Web LiveCD kernel /boot/0600/vmlinuz root=/dev/ram0 vga=791 ID=AJBt0xHNGqJPlroG init=/linuxrc init_opts=4 splash=silent,theme:drweb CONSOLE=/dev/tty1 initrd /boot/0600/initrd
|
| |
|
|
| Sh1td0wn | Дата: Вторник, 21.02.2012, 21:59 | Сообщение # 170 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| Просто у человека неподдерживаемая видеокарта. Нужно обратиться в техподдержку DrWeb'а, там пришлют исправленный xorg.conf и инструкции, как его протестировать.
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| yoda832 | Дата: Четверг, 12.04.2012, 22:00 | Сообщение # 171 |
 Неизвестный
Группа: Проверенные
Сообщений: 15
Статус: Отсутствует
| Люди если у вас есть установщик дрв лайв юсб то ошибка cannot find идёт изза того что установщик изменяет исходный код initrd.gz можно попытаться запустить прогу заново шанса избежать ошибки 85%
|
| |
|
|
| b0s | Дата: Четверг, 19.04.2012, 01:00 | Сообщение # 172 |
|
Ищущий
Группа: Пользователи
Сообщений: 22
Статус: Отсутствует
| Sh1td0wn Здравствуйте! Честно говоря, как и наверное многие участники данного и многих других форумов, я замучился. Я вот просто не могу понять, что за "хрень" с этим поиском загрузочного устройства. Я уже вторую неделю мучаюсь совершая разные попытки компоновки и загрузки с флешки KRD и DrWeb. Я ну вот просто не понимаю, ну как так может быть, что один и тот же сценарий, в initrd на одной и той же машине, то работает то не работает, если он вообще не меняется... Ну кааак?
Я сделал диск с которого загружался и KRD и Cure IT, решил обновить базы Kaspersky, и всё перестало работать.
Вот уже который час, сижу как дурак и учусь разбирать загрузочный сценарий init и find_root. В частности у меня просьба-вопрос. Объясните мне пожалуйста, как вот полному идиоту, как работает данный сценарий, и вообще зачем его придумали?
Code delay() { DELAY=${1} DEV=${2} while [ "x$(ls -x /dev/[hs]d[a-z]* /dev/[hs][rg][0-9]* /dev/cd* 2>/dev/null)" = "x${DEV}" ] do if [ ${DELAY} -eq 0 ] then return 0 fi sleep 1 DELAY=$(expr ${DELAY} - 1) done return 1 }
if ! delay ${SDELAY} then unset MODULES eval $(/sbin/find_root) while [ "x${MODULES}" = "x" ] do if delay ${SDELAY} "$(ls -x /dev/[hs]d[a-z]* /dev/[hs][rg][0-9]* /dev/cd* 2>/dev/null)" then break fi eval $(/sbin/find_root) done fi
К сожалению не могу найти описания данного языка, так как к сожалению, Google не выдал мне полезной информации по вариациям ключевых слов тегам включая BusyBox Eval if fi ls. Что здесь за язык используется? Вообще не могу понять как данный сценарий работает? И зачем она. Конечно разработчики умные люди, они наверняка не просто так этот сценарий написали, но я вот установил SDELAY=600, DEBUG=1, смотрю экран компьютера и ну вот хоть убейте не могу понять как работает.
Есть один большущий плюс от SDELAY = 600, за это время можно пару тройку раз вытащить и вставить флешку, и загрузка продолжается, то есть сценарий почему то её обнаруживает. Это к сожалению всё что мне удалось разобрать.. Как работает в данном случае команда ls с параметром -x и опять же зачем тут программа которая всего лишь отображает текст который указывается в её пораметрах?
Простите Sh1td0wn, если мои вопросы являются нарочитыми или массивными. Я бы очень хотел разобраться. Также хотел бы вас попросить дать ссылку на ядро которое вы перекомпилировали.
|
| |
|
|
| Sh1td0wn | Дата: Четверг, 19.04.2012, 01:54 | Сообщение # 173 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| > как работает данный сценарий Сложно. Хочется сказать "криво". Может быть, это и не так, но логика здесь явно инопланетная.
> вообще зачем его придумали? Не знаю. Если логику find_root ещё можно как-то объяснить, то причины написания этого уже мало понятны.
> К сожалению не могу найти описания данного языка Там первой строкой должно идти "#!/bin/sh". Это отличное ключевое слово для Google. Эта программа написана на языке POSIX shell (ключевые слова: sh ash posix shell).
Логика функции delay примерно такова: 1) Ждать по 1-й секунде, не появилось ли новых устройств (сравнивает новые данные со старыми, переданными аргументом). 2) Если новых нет, завершиться с кодом 0. 3) Если появилось новое устройство, завершиться с кодом 1.
Флаг -x ("Выдавать список файлов в многоколоночном режиме, с сортировкой по горизонтали", взято из man ls) заставляет писать полный список файлов в одну строку (а не в один столбец, как ls это делает обычно, когда stdout не подсоиденён к терминалу).
Цикл, проверяющий вывод delay, запускает find_root в случае, если delay нашёл новое устройство, и смотрит, нашёл ли тот модули.
И я не перекомпилировал никакого ядра.
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| b0s | Дата: Четверг, 19.04.2012, 02:13 | Сообщение # 174 |
|
Ищущий
Группа: Пользователи
Сообщений: 22
Статус: Отсутствует
| Sh1td0wn, спасибо за ваш быстрый ответ! Я примерно представляю, чем является POSIX Shell, но предполагал, что сценарий написан на языке Python.
Возникает вопрос. Который наверное и у вас возникал? Не знайте ли вы или не удалось ли вам приблизится к осознанию причины того, почему или из-за чего, или за что в конце концов, на одной и той же машине срабатывает лишь одна загрузка из какого-то случайного кол-ва загрузок? Моя ситуация в общем такая же как и у Apal0n. Я проделал все действия что вы советовали ему, и точно также обнаружил, что во время загрузки по неизвестной мистической для меня причине, сценарий, даже при существовании и обнаружении флешки, не признаёт её как источник на котором есть папка Modules, но если же сразу после появления BusyBox ввести exec ash -x /init или даже просто exec /init у меня загрузка происходит и вполне успешно.
Простите, если я неверно выразился. Кажется в какой-то момент, на данном форуме вы предлагали свою версию initrd, я назвал это ядром, хотя наверное это не ядро. Не могли бы вы дать на него ссылку? Если конечно я ничего не путаю. А также хотелось бы узнать, можно ли как-то, этот странный сценарий заменить на более эффективный? И есть ли вообще вариант более эффективного сценария? Ну ведь наверное нет таких "исправных" устройств, которым, надо было бы больше минуты на инициализацию? Можно было бы написать сценарий который ждал бы минуту, и затем проводил загрузку, произведя один единственный поиск по всем устройствам. Не пойму... зачем сравнения изменённого списка устройств? Зачем все эти секунды, минуты, когда устройство есть в списке и оно а значит к нему можно обратиться, например через минуту, на ряду с другими устройствами?
Сообщение отредактировал b0s - Четверг, 19.04.2012, 02:17 |
| |
|
|
| Sh1td0wn | Дата: Четверг, 19.04.2012, 02:28 | Сообщение # 175 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| > в какой-то момент, на данном форуме вы предлагали свою версию initrd Да, со своим костылём для запуска из ISO-образа/с NTFS. Сам им не пользуюсь. Кроме того, в один момент костыль почему-то поломал загрузку DrWeb'а, а спустя 1 переписывание и несколько версий DrWeb'а всё починилось обратно, хотя Snapshot'ы всё равно не работают.
> можно ли как-то, этот странный сценарий заменить на более эффективный? Можно, если убедиться, что всё остальное не зависит от этого сценария. Опыт написания костыля показывает, что не всё так просто.
> Можно было бы написать сценарий который ждал бы минуту, и затем проводил загрузку, произведя один единственный поиск по всем устройствам. И всё это время пользователь должен будет смотреть на скучный кислотно-зелёный экран (или чёрный с мелкими непонятными буковками, кому как больше нравится), несмотря на то, что флешка уже давно проснулась и готова к бою?
> зачем сравнения изменённого списка устройств? Появилось новое устройство => нужно подмонтировать его и поискать на нём модули (см. find_root). Не появилось => ждём.
> Зачем все эти секунды, минуты, когда устройство есть в списке и оно а значит к нему можно обратиться, например через минуту, на ряду с другими устройствами? Чтобы не ждать минуту, когда можно не ждать минуту.
> устройство есть в списке и оно а значит к нему можно обратиться Когда новый ls -x показал отличия от старого, файл-дырка в /dev уже существует, что значит, что устройство уже должно быть готово к монтированию и работе.
Почему-то на всех машинах, на которых мне нужно было запустить DrWeb, он запускался, так что этот вопрос для меня нов.
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| b0s | Дата: Четверг, 19.04.2012, 02:38 | Сообщение # 176 |
|
Ищущий
Группа: Пользователи
Сообщений: 22
Статус: Отсутствует
| Sh1td0wn, Завидую вам, по доброму, что у вас на новых машинах работает. Понимайте в чём дело? Согласно отладке, устройство готово и есть в списке, начиная со второго вызова функции Delay, то есть после сравнения, find_root похоже вызывается, ноу устройство не считывает или не монтирует. Но вот если самому запускать, тогда заработает. Я выполняю команду exec ash -x /init и вуаля /dev/sdb1 есть в списке после первого вызова функции delay(), и думаю /sdb1 там и должено быть, ещё при первом вызове иначе, последующие вызовы почему то не срабатывают, или срабатывают но с какой-то вероятностью... Я поставил SDELAY = 600. Там даже до 400 дошло, но не сработало. Уверен, что даже до нуля бы дошло и не сработало.
Сообщение отредактировал b0s - Четверг, 19.04.2012, 02:40 |
| |
|
|
| Sh1td0wn | Дата: Четверг, 19.04.2012, 02:47 | Сообщение # 177 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| > find_root похоже вызывается, ноу устройство не считывает или не монтирует Вывод: отлаживать нужно find_root. Попробуйте добавить в разных его местах echo "что-нибудь ${переменная}" 1>&2 (1>&2 = необходимо перенаправить stdout в stderr, чтобы не смутить /init, который читает stdout в поисках переменных).
Возможно, дело не в find_root (он не вызывается), а в race condition в этом скрипте, когда устройство появляется ровно между проверками на его наличие (вообще это весьма маловероятно). Для избавления от него достаточно дописать ещё один, запасной вызов find_root после всех delay (сразу после приведённого куска скрипта).
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| b0s | Дата: Четверг, 19.04.2012, 02:58 | Сообщение # 178 |
|
Ищущий
Группа: Пользователи
Сообщений: 22
Статус: Отсутствует
| Quote (Sh1td0wn) > find_root похоже вызывается, ноу устройство не считывает или не монтирует Вывод: отлаживать нужно find_root. Попробуйте добавить в разных его местах echo "что-нибудь ${переменная}" 1>&2 (1>&2 = необходимо перенаправить stdout в stderr, чтобы не смутить /init, который читает stdout в поисках переменных).
Возможно, дело не в find_root (он не вызывается), а в race condition в этом скрипте, когда устройство появляется ровно между проверками на его наличие (вообще это весьма маловероятно). Для избавления от него достаточно дописать ещё один, запасной вызов find_root после всех delay (сразу после приведённого куска скрипта).
Вы читайте мои мысли, я клянусь что сейчас об этом и писал. Если быть конкретным:
Ммм я кажется разобрался как же это происходит! Почему на втором этапе не начинается загрузка. Флешка на втором этапе уже найдена, она есть в списке, по этому её извлечение и вставка ведёт к изменению списка и дальнейшей загрузке, на второй фазе. Если бы флешки не было бы в списке и в первом и во втором случае, загрузка бы обязательно началась, но по скольку во втором списке она уже есть, загрузка не начинается. И я теперь понял, почему так происходило, что иногда загрузка начиналась. Просто в веду каких то причин связанных например с электропитанием, или чем ещё другим, на доли секунды инициализация запаздывала, потому наверное успевала второй раз активировать функция delay() ещё до того как устройство будет добавлено ядром в папку /devДобавлено (19.04.2012, 02:56) --------------------------------------------- Дописать ещё один, или вообще, что либо дописать, это ведь невероятно сложная ситуация для меня, так как я не обладаю инструментарием для распаковки initrd, даже если бы я распаковал это в в Windows, у файлов и папок не сохраняться права, как вы писали, а как именно это сделать в Linux я не знаю Добавлено (19.04.2012, 02:58) --------------------------------------------- Вообще чисто теоретически. Если добавить после загрузки драйверов, наипростешую паузу, судя по всему я так полагаю это команда sleep, например в 10 секунд или даже в 5, разве этого бы не было бы достаточно? Если дело именно в "миллисекундах", это ведь такой ареал потребностей пользователей удовлетворил, у которых как раз не находится устройство из-за этих самых долей секунды?
Сообщение отредактировал b0s - Четверг, 19.04.2012, 02:53 |
| |
|
|
| Sh1td0wn | Дата: Четверг, 19.04.2012, 02:59 | Сообщение # 179 |
|
Программист
Группа: Модераторы
Сообщений: 3827
Статус: Отсутствует
| > а как именно это сделать в Linux я не знаю Где-то я это писал.
sudo unsquashfs initrd sudo $favourite-text-editor squashfs-root/sbin/find_root sudo mksquashfs squashfs-root initrd.new
А ещё есть сообщения о том, что правильный подбор параметров к mksquashfs.exe позволит создать initrd, загрузка из которого возможна (например, права 755 для всех файлов).
> Если дело именно в "миллисекундах", это ведь такой ареал потребностей пользователей удовлетворил, у которых как раз не находится устройство из-за этих самых долей секунды? Возможно. Но это лечение симптомов. Правильнее было бы переписать скрипт без этих race condition. Например, люди из Kaspersky Labs раньше использовали обычную вполне надёжную (и не самописную) систему запуска Gentoo Live CD, а теперь и вовсе перешли на унифицированный dracut. Хотя и там, и там, они внесли много своих изменений.
А может быть, дело вовсе не в race condition и не в баге find_root, и имеет место какая-то третья ошибка.
НАЖМИ МЕНЯ, прежде чем что-либо написать
|
| |
|
|
| b0s | Дата: Четверг, 19.04.2012, 03:04 | Сообщение # 180 |
|
Ищущий
Группа: Пользователи
Сообщений: 22
Статус: Отсутствует
| sudo unsquashfs initrd -> Простите за глупые вопросы, а куда распакует? sudo $favourite-text-editor squashfs-root/sbin/find_root -> в папку squashfs-root ? sudo mksquashfs squashfs-root initrd.new -> ну а это компиляция обратно я так пологаю?
Не буду исключать такой вариант, про третий баг. Так как я вообще не программист компании Доктор Веб, и вообще не программист в том понимании в котором требуется. Просто так захотелось разрешить данный вопрос, столько сил и времени я на это потратил, и было бы здорово если бы это не только мне помогло но и людям вокруг. Было бы здорово.
Сообщение отредактировал b0s - Четверг, 19.04.2012, 03:07 |
| |
|
|
|
|