Portál AbcLinuxu, 4. května 2025 00:29

Víc bajtů za stejný peníze (a vice versa)

1.6.2005 23:52 | Přečteno: 1249× | Linux | poslední úprava: 1.6.2005 23:56

V Mandrivě 2006 už má prý fungovat deltarpm ze SUSE - tj. stahovat se budou moct diffy balíčků, takže úspory objemu stažených dat budou aspoň 50 %. Ale šetřit se dá už teď.

Na desktopu mi běží Cooker, který se mi aktualizuje pomocí rsync v cronu (mám na disku mirror). Když jsem začal používat rsync, všiml jsem si, že některé soubory se stahují jakoby rychleji, např takový hdlist.cz kolikrát i megabajty za sekundu, přestože moje připojení je řádově jinde. Je to tím, že rsync umožňuje v rámci možností přenášet změny mezi souborem lokálním a souborem na serveru (pokud to server podporuje).

Normálně toho při stahování balíčků nevyužijete, protože se názvy souborů liší jiným číslem verze. Proto jsem si napsal skriptík, který zjistí, které balíčky byly updatovány. Tyto balíčky (ty staré) přejmenuje, dá jim název aktuální verze balíčku. A potom teprve se spustí mirrorování.

Dneska jsem provedl srovnávací pokus. Nejprve jsem vyrobil kopii adresáře, ve kterém je mirror Cookeru. Potom jsem nad originálem spustil klasický úplný mirroring (vynechal jsem soubory končící na .cz, u nich se rozdíly stahují i tak) a poté nad kopií svůj přejmenovávací skript:

klasika:
sent 21 997 bytes received 173 203 233 bytes 37 401.54 bytes/sec

s přejmenováním:
sent 364 139 bytes received 127 506 709 bytes 37 882.05 bytes/sec

1/3 úspora zdarma!


Toto je onen testovací skript, je v něm samozřejmě ještě pár nadbytečnejch věcí, ale jako proof of concept to snad stačí.
#!/bin/bash
root_path="/mnt/mdk/Mandrakelinux-devel/cooker2"
/usr/bin/rsync -avvn --delete-after mandrake.contactel.cz::Mandrakelinux-devel/cooker/i586/ $root_path | grep -v "is uptodate" | grep .rpm$ > seznamrpm

for deleted in $(grep deleting seznamrpm)
do
  if [ "$deleted" != "deleting" ]
  then
  stary_soubor=$root_path/$deleted
  deleted_base=`/bin/basename "$deleted"`
  deleted_dir=`/usr/bin/dirname "$deleted"`
  package_name=`echo $deleted_base | awk 'BEGIN { FS = "-[^-]+-[^-]+rpm$" } ; { print $1 }'`
  novy_soubor=$root_path/`grep -v deleting seznamrpm | grep "$deleted_dir/$package_name-[^-]\+-[^-]\+rpm$"`
  echo $stary_soubor
  echo $novy_soubor
  mv -f $stary_soubor $novy_soubor
  fi
done
/usr/bin/rsync -avv --delete-after --progress --partial --exclude='*.cz' mandrake.contactel.cz::Mandrakelinux-devel/cooker/i586/ $root_path > log

a pro úplnost klasický rsync, který jsem používal doteď:
/usr/bin/rsync -avv --progress --delete-after --partial --exclude='*.cz' mandrake.contactel.cz::Mandrakelinux-devel/cooker/i586/ /mnt/mdk/Mandrakelinux-devel/cooker >> log
       

Hodnocení: -

zatím nehodnoceno
        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

2.6.2005 08:49 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše deltarpm
Odpovědět | Sbalit | Link | Blokovat | Admin
To by měl zajímalo, jak si to borci v Novellu a v Mandrivě s deltarpm představují. Část kódu deltarpm je totiž pod BSD Protection License, což je jednak víc uražený BSDčkařský pamflet na GPL než licence, a druhak neumožňuje legální šíření v Linuxové distribuci. Šíření odvozených děl řeší body 3 a 4 (předpokládejme, že nemají platit současně, ale že jsou to alternativy, ačkoli to z textu licence neplyne):
3. Modification and redistribution under closed license.
   You may modify your copy or copies of the Program, and distribute
   the resulting derivative works, provided that you meet the
   following conditions:
   a) The copyright notice and disclaimer on the Program must be reproduced
      and included in the source code, documentation, and/or other materials
      provided in a manner in which such notices are normally distributed.
   b) The derivative work must be clearly identified as such, in order that
      it may not be confused with the original work.
   c) The license under which the derivative work is distributed must
      expressly prohibit the distribution of further derivative works.
Tuto možnost evidentně nesplňují, protože zdrojáky deltarpm nejsou uzavřené a jejich licence nevylučuje další odvozená díla.
4. Modification and redistribution under open license.
   You may modify your copy or copies of the Program, and distribute
   the resulting derivative works, provided that you meet the
   following conditions:
   a) The copyright notice and disclaimer on the Program must be reproduced
      and included in the source code, documentation, and/or other materials
      provided in a manner in which such notices are normally distributed.
   b) You must clearly indicate the nature and date of any changes made
      to the Program.  The full details need not necessarily be included1 in
      the individual modified files, provided that each modified file is
      clearly marked as such and instructions are included on where the
      full details of the modifications may be found.
   c) You must cause any work that you distribute or publish, that in whole
      or in part contains or is derived from the Program or any part
      thereof, to be licensed as a whole at no charge to all third
      parties under the terms of this License.
Ani tuto možnost nesplňují, protože SUSE Linux ani Mandriva nejsou jako celek šířeny pod touto licencí. Bod (c) se totiž nevztahuje jen na odvozená díla, ale na cokoli, co má části, které jsou odvozeny z BSDPL kódu, což SUSE Linux nepochybně je (pokud by někdo chtěl tvdrit, že SUSE Linux není vůbec dílo, ale jen sbírka samostatných programů, tak Novell si to zjevně nemyslí, když publikuje licenci na distro jako celek).

A než někdo začne křičet, že GPL obsahuje podobnou klausuli, tak GPL vzápětí explicitně povoluje agregaci:
If identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.
a
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
kdežto BSDPL ne.

Novellu jsem se to snažil nahlásit jako bug, ale nenašel jsem místo, kam to vlastně nahlásit, takže jsem to posléze vzdal.
hajma avatar 2.6.2005 09:21 hajma | skóre: 27 | blog: hajma | Říčany
Rozbalit Rozbalit vše Re: deltarpm
popravdě řečeno jsem to moc nezkoumal, ale třeba bdiff má GNU GPL http://freshmeat.net/projects/bdiff/

možná je použit ten. nebo je tam jiná klička
21 promarněných znaků
2.6.2005 09:38 unchallenger | skóre: 69 | blog: unchallenger
Rozbalit Rozbalit vše Re: deltarpm
Žeby změnili implementaci? Když jsem se naposledy díval na deltarpm (verze 2.2), tak obsahoval delta.c pod BSDPL, zbytek pod normální BSD licencí.
hajma avatar 2.6.2005 12:48 hajma | skóre: 27 | blog: hajma | Říčany
Rozbalit Rozbalit vše Re: deltarpm
jak koukám, tak rozhodně nezměnili. Nenapadlo mě předtím do toho koukat.
Ale v případě, že by nastal problém, tak se dá použít GNU implementace.

Teď mě napadlo, že by to mohli dát jenom klubistům, ti maj věci s GNU incompatible licencema
21 promarněných znaků
Mikos avatar 24.6.2005 17:21 Mikos | skóre: 34 | blog: Jaderný blog | Praha
Rozbalit Rozbalit vše Re: deltarpm
No fuj, to je ale zrudna licence...
CETERUM CENSEO DRM ESSE DELENDAM Ostatně soudím, že DRM musí být zničeno!

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.