apt error (bad header)

Fórumok

Udv!

Probalok

apt-get install

- lal felrakni nehany programot, aminek a letoltesi merete 6.xGB, de hibat dob nehany csomag letoltese utana a hatralevo fajlokra:


Err http://SERVER VALAMI-closed etdc-content-music-va 0.0.1-1+0m6
  Bad header line
Err http://SERVER VALAMI-etd etdc-content-office 0.0.1-1+0m6
  Bad header line
Err http://SERVER VALAMI-closed etdc-content-video 0.0.1-2+0m6
  Got a single header line over 360 chars
Err http://SERVER VALAMI-closed etdc-contents-desktopsw 0.1+0m6
  Bad header line
Err http://SERVER custeh-etdc etdc-directory-structure 0.3-2+0m6
  Got a single header line over 360 chars
Fetched 5089MB in 4min 30s (18.8MB/s)

/code]

.

Ami ilyenkor bekerul a [code]/var/cache/apt/archives

konyvtarba, annak a mennyisege ~5GB:


du -s /var/cache/apt/archives/
4974560 /var/cache/apt/archives/

Ha utana ujrainditom ugyanazt a parancsot, masodszorra mar sikerul mindent letoltenie. Feltetelezem valahol van valami limit beallitva, de ilyet nem talaltam. Nem hinnem legalabbis, hogy a header- rel lenne problema, 360- as hosszusagot sehol nem er el egyik url sem (a leghosszabb 202).

Megoldasi javaslat? :- ).

Koszi.

Hozzászólások

Egyebkent inkabb nagy csomagokrol van szo, minthogy sokrol, az egyik csomagnal all meg, aminek a merete 1085MB, ennek kb. a 98%- nal dob errort, de nem a csomagmerettel van gond, mert elotte leszed 1625MB- s csomagot is. Amikor masodszorra inditom, akkor ujra lehuzza az 1085MB- s csomagot.

apt-config dump

Akad a rendszerben, de ki van kapcsolva ehhez a szerverhez torteno hozzaferesnel:


Acquire::http::Proxy "http://172.16.42.183:8080/";
Acquire
{
        // HTTP method configuration
        http
        {
            Proxy "http://saproxy07.SERVER2:8080";
            Proxy::http.SERVER "DIRECT"; // No proxy for SERVER
        };
}

Igazabol azt sem tudom, hogy ez most szerver oldalon, vagy kliens oldalon dob hibat.

Meg igy ezt nezegetem:


APT::Cache-Limit “10000000″

, csak igazabol nem vagyok benne biztos, hogy mit csinal. Tehat, ha felveszem mondjuk 7GB- ig, mi tortenik?

Az apt csomag forrassa alapjan (methods/http.cc) a hibauzenet azt jelenti, hogy tul hosszu egy http response header. Semmi koze a csomag meretehez. A 360 byte az be van varrva az apt csomagba, nem konfigolhato ujraforditas nelkul. (e: methods/http.h)

lynx -mime_header -dump $VALID_DOWNLOAD_URL | less

melyik sor tul hosszu? A szerver oldalon kellene inkabb konfiguralni, mintsem sajat forditasu apt csomagot hasznalni.

Ha most a letoltendo url- ek hosszarol van szo, akkor egyik sem eri el meg a 256 bytet sem. Amiert azt gondoltam, hogy mas a hiba az az, hogy ha a hiba utan ujrainditom, onnantol mar meg szepen.

A forrasban ezt talaltam:


bool ServerState::HeaderLine(string Line)
{
   if (Line.empty() == true)
      return true;

   // The http server might be trying to do something evil.
   if (Line.length() >= MAXLEN)
      return _error->Error(_("Got a single header line over %u chars"),MAXLEN);

   string::size_type Pos = Line.find(' ');
   if (Pos == string::npos || Pos+1 > Line.length())
   {
      // Blah, some servers use "connection:closes", evil.
      Pos = Line.find(':');
      if (Pos == string::npos || Pos + 2 > Line.length())
     return _error->Error(_("Bad header line"));
      Pos++;
   } 

Na most ha tenyleg csak annyi lenne, hogy ezt a

MAXLEN

- t felemelem, nem szep megoldas, de felemelem, es ujraforditom.

Hogy tudok rajonni, hogy tenyleg errol van- e szo? Ok, persze, itt a hibauzenet, de hogy tudom elkapni, hogy mivel van pontosan a gondja?

szerintem arrol van szo, hogy a buggy http szerver es a buggy apt http imlementacioja egymasnak betevo hibakkal rendelkezik. Olyan erzesem van (becsuszunk a misztikaba, hallod?:-) hogy a tobb csomag letoltesenel valami oknal fogva a http kommunikacio tartalmat beolvassa fejlecsornak. Valahogy a http keepalive-ot is ki kellene kapcsolni, de nam talaltam ra mutato opciot. Amit lehet, az az egyszerre indulo http kapcsolatok szamanak minimalizalasa, azt a konfigopciot irtam.
Biztos nem megy at a proxyn? a proxiyk tobbszor hibaznak, mint a valodi http szerverek.

A http "repsponse header" nem csak az URL-t tartalmazza (nem annak a hosszarol van szo) hanem mindazt, amit a webszerver mond a kommunikaciorol, es aminek semmi haszna nincs a letoltes utan, le se taroljak a kliensek. A lynx -mime_header -rel l ehet jol megcsipni.

Okes, ez ket ut, ket hibalehetoseg (szerver ad tenyleg tul hosszu response headert, vagy az apt keveri ossze a hedaersort az adatsorral)

Igazad volt, sikerult kinyernem a headereket igy:

apt-get install -d `cat p2` --force-yes -y -o Debug::Acquire::http=true 2> /tmp/apt-fetch.log

.

A log fileban egy ideig minden rendben, de utana, ahol elkezd hibazni, teleszemeteli binarissal.

Ez a

Acquire::http::Pipeline-Depth "0"

nem sokat valtoztatott, vagyis ugyanugy hibas.

Nos, akit erdekel, a hiba azonositva. 64- bites rendszeren minden gond nelkul lefut, es ugy nez ki megvan a kod, ahol a valtozo tulcsordul... . Nem tul konnyen, de javithato. Csak tudnam miert van egy olyan rendszeren 32 bites rendszer, amiben 40GB ram van es 16 thread. Ok, nem fugg ossze, de akkor is :- ).