apt списки в /var/lib/apt/lists, перезаписанные html-страницей для условий Starbucks wifi

Сегодня днем ​​я сел в Starbucks, чтобы поработать (Ubuntu 12.04 Desktop x64), и получил значок ошибки в виде красного кружка с белой линией в systray, уведомляющий об ошибке пакета. Кроме того, apt, aptitude, update-manager и synaptic не смогли даже запуститься из-за этого.

Присмотрелся, и ошибка была:

> sudo aptitude install mmv
[sudo] password for kurtosis: 
[ ERR] Reading package lists
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/linux.dropbox.com_ubuntu_dists_precise_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.
[ ERR] Reading package lists
E: Encountered a section with no Package: header
E: Problem with MergeList /var/lib/apt/lists/linux.dropbox.com_ubuntu_dists_precise_main_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

Так раскрыли виновника, /var/lib/apt/lists/linux.dropbox.com_ubuntu_dists_precise_main_binary-i386_Packagesи, о чудо, весь файл был перезаписан источником html для страницы условий и положений Wi-Fi Starbuck ATT, с которой вы должны согласиться, установив флажок при первом входе в их бесплатный Wi-Fi (первые несколько строк ниже),

Это очень странно и немного сбивает с толку, так как какой-то случайный интернет-сайт сумел перезаписать файл, который должен быть изменен только пользователем root. Есть идеи, что случилось?

Решено удалением /var/lib/apt/lists и восстанавливать с помощью этой команды:

$ sudo -i
# apt-get clean
# cd /var/lib/apt
# mv lists lists.old
# mkdir -p lists/partial
# apt-get clean
# apt-get update

Источник домашней страницы Wi-Fi Starbucks ATT:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
 <head>
  <title>AT&T Wi-Fi Service @ Starbucks</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <link rel="shortcut icon" type="image/ico" href="/favicon.ico" />
  <script type="text/javascript" language="javascript" src="/dhtml/master.js"></script>
  <script type="text/javascript" language="javascript" src="/dhtml/x_core.js"></script>
  <script type="text/javascript" language="javascript" src="/dhtml/x_event.js"></script>
  <script type="text/javascript" language="javascript" src="/dhtml/x_xhr.js"></script>
  <script type="text/javascript" src="/dhtml/aws/dhtml.js"></script>
  <script type="text/javascript" src="/dhtml/jquery/jquery-1.3.2.js"></script>
  <script type="text/javascript" language="javascript" src="/dhtml/jquery/aws_jclock_2.2.0.js"></script>
  <script type="text/javascript" language="javascript">
$(function($) {
        var options = {
                format: '%i:%M<span class="clock_ampm">%P</span>'
        }
        $('.jclock').jclock(options);
});
  </script> 

  <link rel="stylesheet" type="text/css" href="/css/att/themes/sbux/laptop_free_v3.css"/>
  <link rel="stylesheet" type="text/css" href="/css/att/themes/sbux/sbux_auto_addl_v2.css"/>

 </head>
 <body>
  <div id="free_wrap">
   <div id="topblock">
  <div id="topmid">
         <div id="free_sbux_mainform">
          <div id="iframe_free">
          <iframe id="sbux_iframe" src="http://www.starbucks.com/coffeehouse/wi-fi-landing" scrolling="no">
                                </iframe>
          </div id="iframe_free">
          <div id="free_sbux_logo"><a href="http://www.starbucks.com"></a></div id="free_sbux_logo">
         <div id="free_sbux_location"><div id="location_city">PALO ALTO, CA</div id="id="location_city"></div id="free_sbux_location">
          <div id="inline_free_form">
          <div id="free_text_line">Starbucks is pleased to offer complimentary Wi-Fi <b>including the premium content of the Starbucks Digital Network</b> to customers who are enjoying our food and beverages.</div>
...

1 ответ

Решение

Вот что случилось.

  • sudo apt-get update либо был выполнен вручную, либо был запущен автоматически (Помните автоматические обновления из диспетчера обновлений?) и попытался обновить списки.
  • Вы оказались подключены к Wi-Fi, но еще не приняли лицензию или что-то еще.
  • Wi-Fi был достаточно плох, чтобы отправить, вероятно, статус HTTP 301/302 (перенаправление) вместо чего-то более подходящего, и послушно последовал за ним, сбросив страницу ответа в файле списков.
  • Это выглядит совершенно нормально, и из-за неправильной настройки Wi-Fi. В идеале, когда вам еще не разрешен доступ, должен быть возвращен код ошибки, чтобы подобные вещи не происходили. Просто для анологии, если у вас был сценарий или альтернативная установка для возобновления загрузки при каждом подключении к Интернету, и он начинает работать, когда вы подключаетесь к этому Wi-Fi, и вы еще не приняли соглашение, инструмент покорно сбросит ту же страницу и объявите, что файл был загружен, потенциально перезаписывая любую предыдущую часть исходного файла.

Если вы подключены к Интернету, должно быть совершенно безопасно удалить всю папку /var/lib/apt/lists и сделать обновление. Это исправит это. Чтобы быть в безопасности, вы можете сделать резервную копию вместо удаления.

sudo mv /var/lib/apt/lists ~;sudo apt-get update

должен сделать трюк, и если это не так, вернитесь обратно с sudo mv ~/lists /var/lib/apt

Другие вопросы по тегам