Thursday, June 23, 2005

Víc bajtů za stejný peníze 2

K původnímu skriptu (optimalizace stahování updatů MDV Cooker pomocí rsync) jsem si připsal pár řádků, který mi řeknou, kolik se přeneslo, jaká je celková velikost stažených souborů a kolik mi tedy ten skript ušetřil.

Asi by se to dalo napsat líp, ale aspoň to funguje:



...
#toto je soucet velikosti vsech nove stazenych souboru
soucet=0
for i in `cat log | tr [:cntrl:] \\\n | grep "% of" | awk 'BEGIN { FS = "100%" } ; { print $1 }'`;
do
soucet=$(($soucet+$i))
done
stazeno=`grep received log | grep sent | awk 'BEGIN { FS = " " } ; { print $2+$5 }'`
echo "Celková velikost stažených souborů:" $soucet "("`echo "scale=2; $soucet/1024/1024" | bc -l` "MB)"
echo "Skutečně přenesená data:" $stazeno "("`echo "scale=2; $stazeno/1024/1024" | bc -l` "MB)"
echo "celková úspora:" `echo "scale=2; 100*($soucet-$stazeno)/$soucet" | bc -l` "%"

A výsledky? Třeba dneska - aktualizace Cookeru po 1 dni:

Celková velikost stažených souborů: 246449423 (235.03 MB)

Skutečně přenesená data: 129177273 (123.19 MB)

celková úspora: 47.58 %


Pokud přibylo jen pár balíčků, je to ještě výraznější, protože soubory hdlist* se rsyncují daleko lépe:

Celková velikost stažených souborů: 153375846 (146.27 MB)

Skutečně přenesená data: 21332579 (20.34 MB)
celková úspora: 86.09 %

Thursday, June 16, 2005

Stopařův průvodce po ubohosti Douglase Adamse

Tak jsme dneska zašli na Stopaře... Pokud uvažujete o shlédnutí tohoto titulu a máte to štěstí, že jste ho ještě neviděli, zajděte raději na COKOLIV JINÉHO, zvlášť jestli jste četli knihu. A ten chlap se ani nestyděl podepsat pod scénář ...

Monday, June 13, 2005

Fivefox

Mně doposud neznámý www browser Mozilla Fivefox se znaží zapůsobit sponzoringem Pandy červené, známé pod jménem hunho (firefox). Pět lišek je halt víc jak jedna.

P.S.: Jak často chodíte do ZOO?



fivefox

Wednesday, June 1, 2005

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

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