Spkg jsem předevčírem dostal do stavu, kdy jsou všchny důležité vlasntosti naimplementované a už chybělo jen testování na spoustě balíčků. No a už nechybí. :)

Upgrade a instalace potřebovaly znovu otestovat a tak jsem nainstaloval z DVD Slackware-10.1 všechny balíčky z kategorií a, ap, d, l a n. To dává po instalaci 295 balíků zhruba 1GB dat (70 tisíc souborů). Instaloval jsem pomocí installpkg a spkg -i a následně porovnal výstup příkazu tree -psufiga a find . -type f | xargs md5sum. Na první pohled to nevypadalo moc nadějně. Instalace pomocí spkg vytvořila mnoho symlinků navíc oproti installpkg, ale to bylo způsobeno tím že v installpkg je chyba, protože ldconfig se nespouští pro adresář do kterého se instaluje (/root), ale vždy pro kořenový adresář. Což není moc platné. Po spuštění ldconfig -r /root a opětovném porovnání výstupu psufigy, už bylo vše pozitivnější.

Defakto se pouze lišily velikosti adresářů, protože spkg při instalaci či upgrade, pokud již instalovaný soubor existuje, nejprve vytvoří dočasný soubor a až po dokončení zpracování tgz balíku všechny cílové soubory nahradí. Vytvářením dočasných souborů nám o něco nakynou adresáře ve kterých se tyto soubory vytvářejí. Pokud pak dojde k přerušení instalace/upgrade uživatelem, nebo nesplněním nějaké podmínky pak se prostě odstraní všechny soubory které byly do té doby vytvořeny a vše je jako před instalací. Čili je možně bezpečně přerušit dlouho trvající upgrade mnoha balíků bez obav o konzistenci zrovna upgradovaného balíku a prostě pokračovat později. Cílem vývoje samozřejmě nebylo aby si člověk mohl po zahájení upgrade v 8 hodin ho mohl ve 12 přerušit a pokračovat ráno, ale upgrade balíků výrazně zrychlit. :-)

Upgrade test probíhal tak, že jsem provedl upgrade zmíněných kategorií z slackware-10.1 na slackware-10.2 přímo z DVD. V řeči příkazů, tedy:

ROOT=/root1 upgradepkg {a,ap,d,l,n}/*.tgz a pomocí spkg spkg -u -v -r /root2 {a,ap,d,l,n}/*.tgz

Poté jsem opět porovnal výstupy psufigy a md5sumu pro /root1 a /root2. Výstup těchto příkazů byl. bez neočekávaných rozdílů, kromě jednoho souboru, který je vytvářen instalačním skriptem bindu (/etc/rndc.key) a má být pro každou instalaci jiný.

Nakonec jsem udělal remove test, abych ověřil že spkg -d funguje stejně jako removepkg. Opět s porovnáním stavu adresářů /root1 a /root2. Test spočíval v odstranění všech balíků ze skupiny d.

Co nebylo stejné byly časy potřebné pro provedení potřebných operací. Tady jsou čísla:

PříkazREALUSERSYS
ROOT=/root1 installpkg {a,ap,d,l,n}/*.tgz16m4s7m42s3m11s
spkg -i -v -r /root2 {a,ap,d,l,n}/*.tgz3m41s54s38s
ROOT=/root1 upgradepkg {a,ap,d,l,n}/*.tgz33m50s18m30s6m45s
spkg -u -v -r /root2 {a,ap,d,l,n}/*.tgz4m39s0m50s0m40s
ROOT=/root1 removepkg `cat pkglist`6m6s3m43s1m3s
spkg -d -v -r /root2 `cat pkglist`11.8s0.67s1.18s

Rozdíl oproti testům v mém předchozím příspěvku je v tom, že jsem tentokrát spouštěl instalaci z DVD, kde jsou přítomné soubory s popisem balíku, takže skripty installpkg a upgradepkg měly nyní o něco snažší práci než v předchozím případě, kdy jsem je spouštěl z mého mirroru slackware-current na disku, kde ony soubory nemám. A spkg měl o něco komplikovanější práci, protože jsem nepoužil parametr --no-ldconfig, takže ldconfig se spouštěl po každém nainstalovaném balíku. Spustit ldconfig trvá zhruba 100ms, takže to dává 30s zbytečně navíc pro jak installpkg tak spkg. Ovšem je rozdíl jestli je to 30s z 16m, nebo 30s z 3m40s. Při použití spkg DVD-ROM mechanika seekovala jak o život, takže by se někde v jejím okolí dalo hledat úzké herdlo. ;-)

Malá poznámka na závěr pro ty co stále chtějí používat pkgtools. Spkg trpí stejným problémem jako pkgtools a to tím, že databáze balíčků čítá např. na mém systému 600 malých souborů. A z těchto 600 souborů je potřeba před zahájením upgrade načíst seznam souborů, které jsou v systému nainstalovány. To na mém systému, který už zažil upgrade zhruba 1400 balíčků trvá zhruba 12s, když ty soubory ještě nejsou v cache. Tento čas lze poměrně dobře srazit (u mě na 3s - z toho 800ms je dáno čistě zpracováním obsahu souborů - tj. omezeno výkonem procesoru, čili zrychlení se pohybuje někde v řádu 5x) pomocí drobné "defragmentace" adresářů /var/log/packages a /var/log/scripts. Zde je program defrag.sh:

#!/bin/sh -e
rm -rf /var/log/packages~ /var/log/scripts~
cp -a /var/log/packages /var/log/packages~
cp -a /var/log/scripts /var/log/scripts~
rm -rf /var/log/packages /var/log/scripts
mv /var/log/packages~ /var/log/packages
mv /var/log/scripts~ /var/log/scripts

Nechce k tomu někdo dopsat grafické rozhraní s kostičkama a progressbarem?

Tímto se spkg velmi přiblížil k verzi 1.0. Ještě to budu nějaký čas používat kde budu moct, a mám v plánu vytvoření testsuite složené z mnoha speciálně vytvořených balíčků, které otestují co nejvíc cest v kódu. Dále je potřeba přidat pár drobných volitelných vlastností, jako je v pkgtools např. upgradepkg --install-new nebo --reinstall. A nakonec bude třeba zaktualizovat dokumentaci.

Nemá někdo nápad na užitečnou vlastnost, která v pkgtools chybí? Napadá mě příkaz --check, který by zkontroloval dané blaíčky a zobrazil soubory, které byly změněny či odstraněny po instalaci balíčku.

Homepage projektu je: http://spkg.megous.com.