Did i just made the fastest dependency checker in the world? (198 packages in 1.5 seconds)

Mark markg85 at gmail.com
Mon Apr 9 20:46:51 UTC 2007


Hey.

is a dependency checking time of 1.5 seconds for 189 packages fast? ^_^
and it can be ALOT faster aswell.

Page Parsed in: 1.5912721157074 seconds. (mostly php)
MySQL Parsed in: 0.0009613037109375 seconds. (MySQL only)

php is doing the recursive functions and a in_array thing (in a few arrays
with a few 100 entry`s)
so the php part can be improved for speed improvements, but the best thing
would be to write this thing in c/c++.
the mysql parsetime of all the dependency`s recursively in php is JUST
0.001(rounded up) so the total time for all this stuff could very well
be under
one second.

I did the dependency check on KDEBASE, but the test isn`t really 100% fair.
like i don`t have the currently installed packages striped out against the
ones that my dependency checker says are needed for KDEBASE. but this is
because i have very limited access to the rpm database with php. so if i
would have done this based on my current system (with the installed
packages) it would probably be a little higher parsetime for mysql because
it would need to check every package if it`s already installed on my system
and if it is it will also need to check the version and release numbers.. so
a fair estimate of the parsetime in that case would probably be 0.003 MAX
(still extremely fast)

Now why did i open up this thread? and why in the fedora-devel-list?
well i think this stuff concerns fedora and it`s (my dep checker) in
development so that`s why i posted it here.
i`m actually making this with the idea of removing yum completely (also pup,
pirut and puplet but those are still idea`s.. for that i need to learn alot
more c/c++ (no i don`t want to write those gui apps in python or even in
php)

The reason i posted it here is because i`m hoping to attract the attention
of a programmer who is willing to help me out in making this app a c/c++ app
so that it really CAN be used in fedora. or if someone could enhance the
php_rpm extension so that i can also check it against the currently
installed rpm`s instead of only playing with rpm files. or a way of reading
out the rpmdb. (i need to know the installed: Names, Version and Releases).

And why did i make it?
quite simple. i simply don`t believe that installing a package really has to
take SO MUCH time (with checking the dependency`s) so i started making my
own dependency checker. this stuff is the result of a one day php work. 2
php classes and done. the total thing is probably about 22 kilobytes!! (with
lots of useless stuff in it aswell). Originally i had the idea to make a
online dependency checker so that rpm maintainers could upload there rpm
file in the dependency checker which would check if there aren`t and
conflicting things in the header to install it.. soon after that i realized
that the original idea was fine but that so much more could be done with
this.. so adding a few nore lines changed the way the scrpt was working to
be a dependency checker only.

My initial version did the kdebase dependency`s in about 30 seconds. that
was on tables without any indexes, this one does it in 0.001 secounds and
than the tables still aren`t 100% optimal. there are still alot of doubles
in it and it isn`t splitted alphabetically (so all the A deps in a deps_a
table and so on for: 0-9 a-z.

and at this moment all the rpm files that come with fedora core 7 test 3 are
indexed.

my way of checking dependency`s has a few advantages and disadvantages.
(alot more advantages.. but i name just 3 of both)

Advantages:
- Alot faster than any rpm installation tool
- Way smaller "repodata" files (under 1MB)
- Alot less waiting on the dependency`s

Disadvantages
- A new "createrepo" program will need to be written
- Existing repository`s won`t work (perhaps will with a yet to make repo
converter which converts the sqlite or xml data to the style + format i
want)
- could devide the rpm based distributions (into distributions that use yum
and distributions that use my program)

but serious.. is this a world record? (i even think it`s faster than ubuntu
and all other systems that are currently existing)

i hope to see some reply`s on this post.
Any suggestions or critics are welcome.

here is the full output of my dependency checker:

Packages needed for: kdebase

cdparanoia-libs - required for: kdebase
glibc - required for: cdparanoia-libs
glibc-common - required for: glibc
tzdata - required for: glibc-common
-- basesystem - required for: glibc
-- setup - required for: basesystem
---- filesystem - required for: basesystem
---- libgcc - required for: glibc
-- desktop-backgrounds-basic - required for: kdebase
---- desktop-file-utils - required for: kdebase
---- glib2 - required for: desktop-file-utils
------ eject - required for: kdebase
-------- coreutils - required for: kdebase
-------- grep - required for: coreutils
-------- pcre - required for: grep
-------- libstdc++ - required for: pcre
---------- pam - required for: coreutils
---------- audit-libs - required for: pam
------------ cracklib - required for: pam
-------------- cracklib-dicts - required for: pam
---------------- libselinux - required for: pam
---------------- libsepol - required for: libselinux
------------------ mcstrans - required for: libselinux
------------------ libcap - required for: mcstrans
------------------ mktemp - required for: pam
-------------------- sed - required for: pam
---------- htdig - required for: kdebase
---------- openssl - required for: htdig
---------- e2fsprogs-libs - required for: openssl
---------- device-mapper-libs - required for: e2fsprogs-libs
------------ krb5-libs - required for: openssl
-------------- zlib - required for: openssl
------------ kdelibs - required for: kdebase
------------ arts - required for: kdelibs
------------ libX11 - required for: arts
------------ libXau - required for: libX11
-------------- libXdmcp - required for: libX11
---------------- xorg-x11-filesystem - required for: libX11
-------------- alsa-lib - required for: arts
---------------- audiofile - required for: arts
------------------ esound-libs - required for: arts
-------------------- libogg - required for: arts
---------------------- qt - required for: arts
---------------------- fontconfig - required for: qt
---------------------- freetype - required for: fontconfig
------------------------ expat - required for: fontconfig
------------------------ libICE - required for: qt
-------------------------- libSM - required for: qt
---------------------------- libXcursor - required for: qt
---------------------------- libXfixes - required for: libXcursor
------------------------------ libXrender - required for: libXcursor
------------------------------ libXext - required for: qt
-------------------------------- libXft - required for: qt
---------------------------------- libXinerama - required for: qt
------------------------------------ libXrandr - required for: qt
-------------------------------------- libjpeg - required for: qt
---------------------------------------- libmng - required for: qt
---------------------------------------- lcms - required for: libmng
---------------------------------------- libtiff - required for: lcms
------------------------------------------ libpng - required for: qt
------------------------ libvorbis - required for: arts
-------------- cups-libs - required for: kdelibs
-------------- gnutls - required for: cups-libs
-------------- libgcrypt - required for: gnutls
-------------- libgpg-error - required for: libgcrypt
---------------- hicolor-icon-theme - required for: kdelibs
------------------ xorg-x11-server-utils - required for: kdelibs
------------------ cpp - required for: xorg-x11-server-utils
-------------------- libXTrap - required for: xorg-x11-server-utils
-------------------- libXt - required for: libXTrap
---------------------- libXaw - required for: xorg-x11-server-utils
---------------------- libXmu - required for: libXaw
------------------------ libXpm - required for: libXaw
------------------------ libXfontcache - required for: xorg-x11-server-utils
-------------------------- libXi - required for: xorg-x11-server-utils
---------------------------- libXxf86misc - required for:
xorg-x11-server-utils
------------------------------ libXxf86vm - required for:
xorg-x11-server-utils
-------------------- libacl - required for: kdelibs
-------------------- libattr - required for: libacl
---------------------- libart_lgpl - required for: kdelibs
------------------------ aspell - required for: kdelibs
------------------------ aspell-en - required for: aspell
-------------------------- ncurses - required for: aspell
-------------------------- bzip2-libs - required for: kdelibs
---------------------------- libidn - required for: kdelibs
------------------------------ kdnssd-avahi - required for: kdelibs
------------------------------ avahi - required for: kdnssd-avahi
------------------------------ chkconfig - required for: avahi
-------------------------------- dbus - required for: avahi
-------------------------------- libxml2-python - required for: dbus
-------------------------------- libxml2 - required for: libxml2-python
---------------------------------- python - required for: libxml2-python
---------------------------------- db4 - required for: python
------------------------------------ gdbm - required for: python
-------------------------------------- python-libs - required for: python
---------------------------------------- readline - required for: python
------------------------------------------ sqlite - required for: python
---------------------------------- dbus-python - required for: avahi
---------------------------------- dbus-glib - required for: dbus-python
------------------------------------ initscripts - required for: avahi
------------------------------------ SysVinit - required for: initscripts
-------------------------------------- bash - required for: initscripts
---------------------------------------- udev - required for: initscripts
---------------------------------------- MAKEDEV - required for: udev
------------------------------------------ libvolume_id - required for: udev
------------------------------------------ e2fsprogs - required for:
initscripts
------------------------------------------ device-mapper - required for:
e2fsprogs
-------------------------------------------- ethtool - required for:
initscripts
---------------------------------------------- mingetty - required for:
initscripts
------------------------------------------------ module-init-tools -
required for: initscripts
-------------------------------------------------- util-linux - required
for: initscripts
-------------------------------------------------- ConsoleKit-libs -
required for: util-linux
---------------------------------------------------- popt - required for:
util-linux
---------------------------------------------------- net-tools - required
for: initscripts
------------------------------------------------------ syslog-ng - required
for: initscripts
------------------------------------------------------ eventlog - required
for: syslog-ng
-------------------------------------------------------- tcp_wrappers-libs -
required for: syslog-ng
---------------------------------------------------------- logrotate -
required for: syslog-ng
-------------------------------------------------------- sysklogd - required
for: initscripts
-------------------------------------- libdaemon - required for: avahi
-------------------------------- avahi-qt3 - required for: kdnssd-avahi
-------------------------------- libutempter - required for: kdelibs
-------------------------------- shadow-utils - required for: libutempter
---------------------------------- libxslt - required for: kdelibs
------------------------------------ perl - required for: kdelibs
------------------------------------ mod_perl-devel - required for: perl
------------------------------------ httpd-devel - required for:
mod_perl-devel
------------------------------------ apr-devel - required for: httpd-devel
------------------------------------ apr - required for: apr-devel
-------------------------------------- pkgconfig - required for: apr-devel
-------------------------------------- apr-util-devel - required for:
httpd-devel
-------------------------------------- apr-util - required for:
apr-util-devel
-------------------------------------- openldap - required for: apr-util
-------------------------------------- cyrus-sasl-lib - required for:
openldap
---------------------------------------- db4-devel - required for:
apr-util-devel
------------------------------------------ expat-devel - required for:
apr-util-devel
-------------------------------------------- openldap-devel - required for:
apr-util-devel
-------------------------------------------- cyrus-sasl-devel - required
for: openldap-devel
---------------------------------------- httpd - required for: httpd-devel
---------------------------------------- gawk - required for: httpd
-------------------------------------- mod_perl - required for:
mod_perl-devel
-------------------------------------- perl-BSD-Resource - required for:
mod_perl
---------------------------------------- perl-devel - required for: mod_perl
-------------------------------------- redhat-artwork - required for:
kdelibs
-------------------------------------- gtk2-engines - required for:
redhat-artwork
-------------------------------------- gtk2 - required for: gtk2-engines
-------------------------------------- atk - required for: gtk2
---------------------------------------- cairo - required for: gtk2
------------------------------------------ pango - required for: gtk2
------------------------------------------ libthai - required for: pango
---------------------------------------- fedora-logos - required for:
redhat-artwork
---------------------------------------- redhat-menus - required for:
kdelibs
-------------- Glide3-libGL - required for: kdebase
-------------- mesa-libGL - required for: Glide3-libGL
-------------- libdrm - required for: mesa-libGL
---------------- Glide3 - required for: Glide3-libGL
---------------- policycoreutils - required for: Glide3
---------------- audit-libs-python - required for: policycoreutils
---------------- kernel-headers - required for: audit-libs-python
------------------ libselinux-python - required for: policycoreutils
-------------------- libsemanage - required for: policycoreutils
---------------- mesa-libGLU - required for: kdebase
------------------ libXcomposite - required for: kdebase
-------------------- libXdamage - required for: kdebase
---------------------- libXScrnSaver - required for: kdebase
------------------------ libXtst - required for: kdebase
-------------------------- libfontenc - required for: kdebase
---------------------------- hal - required for: kdebase
---------------------------- ConsoleKit - required for: hal
------------------------------ acl - required for: hal
-------------------------------- cryptsetup-luks - required for: hal
---------------------------------- dmidecode - required for: hal
------------------------------------ libusb - required for: hal
-------------------------------------- pm-utils - required for: hal
-------------------------------------- kbd - required for: pm-utils
-------------------------------------- usermode - required for: kbd
-------------------------------------- libuser - required for: usermode
---------------------------------------- passwd - required for: usermode
---------------------------------------- pciutils - required for: pm-utils
---------------------------------------- hwdata - required for: pciutils
------------------------------ libraw1394 - required for: kdebase
-------------------------------- lm_sensors - required for: kdebase
-------------------------------- libsysfs - required for: lm_sensors
---------------------------------- libsmbclient - required for: kdebase
------------------------------------ libxkbfile - required for: kdebase
-------------------------------------- psmisc - required for: kdebase

Total RPMS to install: 186

Dependency Conflicts: 0



Page Parsed in: 1.5912721157074 seconds.

MySQL Parsed in: 0.0009613037109375 seconds.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/fedora-devel-list/attachments/20070409/67a153b3/attachment.htm>


More information about the fedora-devel-list mailing list