Накопитель WD80000 (нужна помощь)

Ethernet card, Wi-Fi, Bluetooth, IrDA, ADSL-модемы, модемы

Модераторы: broom, Модераторы разделов

Аватара пользователя
LoWo
Сообщения: 21
ОС: маздайка

Re: Накопитель WD80000

Сообщение LoWo » 17.12.2015 15:13

Bizdelnick писал(а):
17.12.2015 15:02
Значит надо смотреть wixHooks.class.


да-да. я пытался его сюда запостить, но сайт ругается, что он слишком длинный. попробую в три приема, потому как в два не получается.


..................не. даже в 4 приема не выходит. разве что архивом?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Накопитель WD80000

Сообщение Bizdelnick » 17.12.2015 15:22

pastebin же. Или заархивируйте, только не в rar. Но лучше на pastebin, так читать удобнее.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
LoWo
Сообщения: 21
ОС: маздайка

Re: Накопитель WD80000

Сообщение LoWo » 17.12.2015 15:47

Bizdelnick писал(а):
17.12.2015 15:22
pastebin же. Или заархивируйте, только не в rar. Но лучше на pastebin, так читать удобнее.


О! Прошу прощения, ламер, не знал о таком.
Дык вот значит: http://pastebin.ru/arjfTat0
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Накопитель WD80000

Сообщение Bizdelnick » 17.12.2015 17:13

Вот наиболее интересная часть:

Код: Выделить всё

    /*******************************
     * Decode Firmware after v0.2.0
     *******************************/
    $tmp_img1 = "$fw_dir/img.tmp.1";
    $tmp_img2 = "$fw_dir/img.tmp.2";

    @system("/bin/dd skip=0 count=1 bs=5120 if=$fw_dir/{$fw_img} of=$tmp_img1");
    @system("/bin/dd skip=15 count=1 bs=5120 if=$fw_dir/{$fw_img} of=$tmp_img2");

    @copy("$fw_dir/{$fw_img}", "$fw_dir/{$fw_img}.orig");
    @system("/bin/dd seek=0 count=1 bs=5120 if=$tmp_img2 of=$fw_dir/{$fw_img}");
    @system("/bin/dd skip=1 seek=1 bs=5120 if=$fw_dir/{$fw_img}.orig of=$fw_dir/{$fw_img}");

    @copy("$fw_dir/{$fw_img}", "$fw_dir/{$fw_img}.orig");
    @system("/bin/dd seek=15 count=1 bs=5120 if=$tmp_img1 of=$fw_dir/{$fw_img}");
    @system("/bin/dd skip=16 seek=16 bs=5120 if=$fw_dir/{$fw_img}.orig of=$fw_dir/{$fw_img}");

    @unlink($tmp_img1);
    @unlink($tmp_img2);
    @unlink("$fw_dir/{$fw_img}.orig");


    /**********************
     * Uncompress Firmware
     **********************/
    @system("/bin/tar zxf $fw_dir/$fw_img -C $fw_dir >/dev/null 2>&1", $retval);
    if (!is_numeric($retval) || $retval != 0) {
      $this->__debug("failed to untar $fw_img");
      $this->clear_upload_dir();
      @unlink($file_fw_is_updating);
      return FALSE;
    }

    $this->reset_message();
    $this->message[] = $this->lang['hooks']['errmsg'][47];
    /*****************************************************
     * Compare between new firmware model and current
     * system model in the system
     *****************************************************/
    $forAllVersion = '0';
    if($isServicePack) {
      $forAllVersion = trim(file_get_contents("$fw_dir/forallver"));
    }

    if($forAllVersion == '0') {
      if(!$isMionet) {
        $current_model = trim(file_get_contents("/etc/model"));
        $new_model     = trim(file_get_contents("$fw_dir/model"));
        if($current_model != $new_model){
          $this->__debug('model name was not matched');
          $this->clear_upload_dir();
          @unlink($file_fw_is_updating);
          return FALSE;
        } else {
          @unlink("$fw_dir/model");
        }


        $this->reset_message();
        $this->message[] = $this->lang['hooks']['errmsg'][48];
        /*****************************************************
        * Compare between new firmware's version and current
        * firmware's version in the system
        *****************************************************/
        $current_ver = trim(@file_get_contents('/etc/version'));
        $new_ver     = trim(@file_get_contents("$fw_dir/fw.ver"));
        if ($current_ver > $new_ver) {
          $this->__debug('new firmware version is too old');
          $this->clear_upload_dir();
          @unlink($file_fw_is_updating);
          return FALSE;
        } else {
          @unlink("$fw_dir/fw.ver");
        }
      } else {
        if(is_file('/etc/.mionet_installed')) {
          $current_ver = trim(@file_get_contents('/etc/.mionet_installed'));
          $new_ver = trim(@file_get_contents("$fw_dir/mionet.ver"));
          if($current_ver > $new_ver) {
            $this->__debug('new mionet version is too old');
            $this->clear_upload_dir();
            @unlink($file_fw_is_updating);
            return FALSE;
          } else {
            @unlink("$fw_dir/mionet.ver");
          }
        }
      }

      if($isServicePack) {
        $current_sp = trim(@file_get_contents('/etc/sp'));
        $new_sp     = trim(@file_get_contents("$fw_dir/sp"));
        if ($current_sp > $new_sp) {
          $this->__debug('new service pack version is too old');
          $this->clear_upload_dir();
          @unlink($file_fw_is_updating);
          return FALSE;
        }
      }
    }

    $this->reset_message();
    $this->message[] = $this->lang['hooks']['errmsg'][47];
    /****************************
     * Checksum for new firmware
     ****************************/
    $PWD = getcwd();
    @chdir($fw_dir);
    if($isServicePack) {
      @system("/usr/bin/md5sum -c $servicePack.md5 >/dev/null 2>&1", $retval_sp);
      if(!is_numeric($retval_sp) || $retval_sp != 0) {
        $this->__debug("failed to checksum $fw_img");
        $this->clear_upload_dir();
        @unlink($file_fw_is_updating);
        return FALSE;
      }

      @system("$fw_dir/pre_setup.sh >/dev/null 2>&1");

      @chdir('/');
      @system("/bin/tar zxvf $fw_dir/$servicePack >/dev/null 2>&1", $retval);
      if($retval != 0) {
        $this->__debug("failed to update $fw_img");
        $this->clear_upload_dir();
        @unlink($file_fw_is_updating);
        return FALSE;
      } else {
        @chdir($fw_dir);
        @system('/bin/cp sp /etc/sp >/dev/null 2>&1');
        @unlink("$fw_dir/sp");
        @system("$fw_dir/post_setup.sh >/dev/null 2>&1");
        @header('Location: system_firmware_sp.php');
        $this->Reboot();
      }
    } else if($isMionet) {
      @system("/usr/bin/md5sum -c $mionetPack.md5 >/dev/null 2>&1", $retval_mionet);
      if(!is_numeric($retval_mionet) || $retval_mionet != 0) {
        $this->__debug("failed to checksum $fw_img");
        $this->clear_upload_dir();
        @unlink($file_fw_is_updating);
        return FALSE;
      }

      @chdir('/usr');
      @system('/usr/mionet/mionetd stop >/dev/null 2>&1');
      @system("/bin/tar xvf $fw_dir/$mionetPack >/dev/null 2>&1", $retval);
      if($retval != 0) {
        $this->__debug("failed to update $fw_img");
        $this->clear_upload_dir();
        @unlink($file_fw_is_updating);
        return FALSE;
      } else {
        @chdir($fw_dir);
        @system('/bin/cp mionet.ver /etc/.mionet_installed >/dev/null 2>&1');
        @system('/bin/touch /etc/.mionet_on_startup');
        @unlink("$fw_dir/mionet.ver");
        @system('/usr/mionet/mionetd start >/dev/null 2>&1');
        @chdir('/');
        $this->clear_upload_dir();
        return 2;
      }
    } else {
      @system("/usr/bin/md5sum -c $kernel.md5 >/dev/null 2>&1", $retval_kernel);
      @system("/usr/bin/md5sum -c $rootfs.md5 >/dev/null 2>&1", $retval_rootfs);
      if (!is_numeric($retval_kernel) || $retval_kernel != 0 ||
          !is_numeric($retval_rootfs) || $retval_rootfs != 0) {
        $this->__debug("failed to checksum $fw_img");
        $this->clear_upload_dir();
        @unlink($file_fw_is_updating);
        return FALSE;
      }

      @chdir($PWD);

      @system('/usr/bin/fw_update.sh >/dev/null 2>&1 &');

      @header('Location: system_firmware_status.php?lang='.$GLOBALS['__GET']["lang"]);
    }
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
LoWo
Сообщения: 21
ОС: маздайка

Re: Накопитель WD80000

Сообщение LoWo » 17.12.2015 17:27

хм.... даже я, со своей непросветной тупостью кое-что улавливаю. я так понимаю на основании этого можно написать некий скрипт? или он уже присутствует где-то в GPL?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Накопитель WD80000

Сообщение Bizdelnick » 17.12.2015 18:04

Надо писать. На первый взгляд тот шелл-скрипт, который Вы выкладывали выше, делает примерно то же самое, но могут быть отличия в деталях — я не особо вчитывался. Времени, увы, совершенно нет.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
LoWo
Сообщения: 21
ОС: маздайка

Re: Накопитель WD80000

Сообщение LoWo » 17.12.2015 18:55

Bizdelnick писал(а):
17.12.2015 18:04
Надо писать. На первый взгляд тот шелл-скрипт, который Вы выкладывали выше, делает примерно то же самое, но могут быть отличия в деталях — я не особо вчитывался. Времени, увы, совершенно нет.


Именно так. Я на свой риск попробовал запустить прошиву с тем скриптом. Не подходит. ошибку выдает. Говорит, что типа не тот файл получается при распаковке.
Спасибо сказали:

Аватара пользователя
LoWo
Сообщения: 21
ОС: маздайка

Re: Накопитель WD80000

Сообщение LoWo » 22.12.2015 02:36

А вот еще одна интересная вещь:
нашел U-BOOT-1.1.1
вычитал, что это универсальный загрузчик.
http://westerndigital.nas-central.org/wiki...gory:ShareSpace
и вот тут расписан, как я понял, процесс загрузки. (в котором я ни черта не понял)
Спасибо сказали: