!!! VECTOR LINUX PACKAGE AND DEPENDENCY ======================================== Many users enjoy the easy install ala Debian apt-get (aka : install this and the gang for me since my brain is dead). The key for that feature is called dependency system. Can Vector Linux have one too ? I was told that dependency system has two approaches: * Layered oriented * Network oriented Without aware of that theory, the new packages structure had been designed with the layered approach. For example: x11 --+--> gtk +--> gtk2 --> gnome +--> qt --> kde This means, to build gnome applications, we must firstly install the x11/BASE and gtk2/BASE, then gnome/BASE. On top of then, any gnome applications can be build. The qt and gtk are not needed at all for gnome. The layered approach is easier to be understood, because it presents the big picture. However, it lacks the detail. Users may install more BASE packages than what is needed. The opposite is also possible. Users install an application, but miss the required libraries. So, the network approach come to play. In this approach, a dependency information between packages is maintained. When users get a new application, the installer uses the dependency information to also install the required packages. There are two approaches on how the dependency information is stored. It can be centralized or decentralized. Most systems like Debian apt-get, Gentoo emerge, or Slackware swaret use centralized approach. They put the information in a separated file, and make it online. As the opposite, Redhat rpm is the decentralized approach. Each package contains its own dependency information. As we have seen, many users get frustated by the annoying dependency problem on rpm. On the other hand, centralized approach seems to be more successfull. They can even upgrade the system to MAJOR version (for example, upgrade Slackware 9.x to Slackware 10.x). Hey ... don't get too exited. Centralized system can fail too, and make a really big mess on the system ! So ... which one is better for Vector Linux ? The major concern here is that Vector linux has been using bulk install method (the bz2 files) for so long. This method has been proved as quick and reliable to deliver the integrated system out of the box to the users. Who want to replace this method ? No one, I knew it. With that concern, then: * Vector Linux should keep bulk install as the main method. The drawback, upgrading to other major version will always mean a reinstall. Can't do bulk install on the fly mate ! * Individual package install is only a sparing method. In this case, the package dependency should be limited in a major version only. If the system was installed with the bulk method for VL 5.0, then you can add only the packages for VL 5.0. This limitation may make you feel inferior compare to full online upgrade system. Well, remember. Bringing packages from other major version has been proved to be disasterous. Online upgrade systems, infact, replace all packages if upgrading to new major version. This is where the mesh sneaking. How could we safely replace the kernel, glibc, x11, and other libraries on the fly. Why do we have to take that risk if bulk install method is not less easier too much, but gives superior reliability ? I would prefer to shutdown my desktop for 15 minutes reinstall than to keep working with possible many crashes later. So my proposal is to combine the layered approach with decentralized networked approach. We need: - The dependency information associeted with each package. This information must be downloadable, without the actual package. - An installer that can collect that information, then hunts the packages, and actually download it. The problem is, maintaining dependency information is a hard work. I dont think Vector Linux has enough volunteer to do that. So how about a toolkit that automatically generates it like this: * The package must be built on a host with the equivalent major version. For example, you build packages for Vector Linux SOHO 5.0 on Slackware 10 or Vector Linux standard 5.0. * During compilation, the tookit detects the required shared object libraries (e.g glibc-3.3.so) of the new compiled package. * It traces back which package is actually contains the shared object. For example, the glibc-3.3.so is belong to glibc-3.3-i486-1.tgz * So that how the toolkit got the depencency information. Next question is, where to insert that information ? In respect of not breaking the uncle Slack tradition, also for faster downloading, the toolkit creates the classic package-1.0-i586-vl5.tgz, and a modified package-1.0-i586-vl5.txt. The dependency information is in the txt file. Traditionally, the txt is only a fancy thing for people to read it directly, also pkgtool use it to get package description. Inserting the dependency information in there will not hurt anyone, but allows the new installer to help brain dead people. For the people that still want to use their brain, nothing is changed about the tgz. And now the good news. The toolkit has been rooled out for testing !!! It is in the Vector Linux 5.0 cli/CORE group, called the checkinstall (patched) and vecteloper package. So please try it, and give some feedback about its accuracy. Given that the dependency information is working, the next thing is to build a smart installer. It should extends vecpkg this way: - Get the PKGLIST.TXT for list of available packages. - After users choose the package to install, downloads the txt. Not the tgz yet. - Get the dependency information from the txt file. - Recursivelly solve the dependency to get all required packages. - Confirm again. - Download the actual tgz and install it. I can foreseen this system works for Vector Linux 6.0, but we need an apperentice :-)