EZInstaller v. 0.1.2
Written by Tim Niiler
Copyright 2004 Tim Niiler
License: GPL - If you or your company choose not to "believe" in the GPL
	then you have no rights to use this package or to redistribute it.
Last Edit: 2004-03-29

FAQ
1) How do I install?
	If you are on Vector Linux, just use vecpkg or type in installpkg 
ezinstaller-0.1.2-i386.tgz.  If you must compile the souce code, use the 
doCompile script:

	doCompile ezinstaller.c

The source code is included with the package.

2) What is ezinstaller?
	It is an installer for Vector Linux and Slackware type systems.  
Unlike most Linux installers, EZInstaller is oriented towards new users who 
have no idea what a dependency is nor how to resolve it.  Several assumptions 
are made:
	a) That new users are more likely to be able to find a package if it is 
	classified by type: (Office, Internet, etc...)
	b) That a minimum base system can be assumed so that low level OS 
		packages are already installed.  (and need not be checked for)
	c) That users have an internet connection. (Required for easy installing)
	d) That advanced users may still want to browse their computer for 
		packages or simply look up packages without searching by category.

Although designed for Slackware based systems, EZInstaller has been designed 
in a way that it is extensible.  By very slight modifications of the shell scripts 
that actually do the installations, one could very easily port the program to 
systems using rpm.  Currently this is not on the list of priorities. However, 
should anyone want to do this, I will include their work in a future release.

Primarily, EZInstaller is designed to help users of Slackware based systems 
overcome dependency hell by putting major dependencies in a central file called 
package_manifest.txt.  More about the format of this file later.

3) What are the prerequisites of this package?
	GTK+-2 is the widget set with which it is designed. Other than that, 
you need a standard Linux type system.  

4) How do I use it?
	After installation, type in ezinstaller.sh or create an icon linking to 

	/usr/local/bin/ezinstaller.sh

This itself is a bash script that starts 

	/opt/ezinstaller-0.1/ezinstaller

Because of the fact that relative paths are used and that executable code looks
for these paths in the current working directory, creating a symbolic link will not
work.  At some point in the future I will probably put in absolute paths, but at
this point, I have not the time.

Using the program is relatively straightforward, but I will outline its 
layout below.

	EZInstaller
	|_Install New Package
	(After clicking on one of the headings below, the user will be able to
		select a package such as OpenOffice, or Firefox for install.
		A checklist of required packages will appear.  If the user knows
		what he/she needs, the user can deselect the unneeded packages.
		Otherwise, the program will attempt to download and install
		all of them after checking to see if a version exists on the system.
		If a version of that product already exists, then the user will
		be prompted to either Replace, Install alongside or Cancel. A
		root login is required to install. ONLY PACKAGES THAT ARE NOT ALREADY
		INSTALLED WILL BE LISTED HERE.
		|_Office and Productivity
		|_Financial Software
		|_Music and Multimedia
		|_Internet and Connectivity
		|_Graphics
		|_Games
		|_Science
		|_Window Managers
		|_System Administration
		|_Other Applications
		|_Package List (lists packages in pkglist.txt as with vecpkg)	
		|_Browse Computer (allows user to browse computer for a package)
	|_Upgrade or Repair a Package
	(lists same options as above the difference being that ALL AVAILABLE 
		PACKAGES ARE LISTED whether installed or not.)
	|_Uninstall a Package 
	(lists installed packages on computer, allows user to click to uninstall -
		prompts for confirm, and requires root login)
	|_Configure Easy Installer
		|_Set Package Manifest Server
		(Allows user to specify a different internet source for updates of 
			the files package_manifest.txt and pkglist.txt )
		|_Get Package Manifest from Server
		(Gets most recent copies of package_manifest.txt and pkglist.txt
			from server along with any new required icon files)
		|_Choose Local Manifest
		(Allows user to choose which local copy of package_manifest.txt
			to use.  This option is included in case of a corrupted
			package_manifest file or in case a listed package does
			not work and needs to be replaced by an earlier one.)
		|_Choose Local Package List
		(Allows user to choose which local copy of pkglist.txt
			to use.  This option is included in case of a corrupted
			pkglist file or in case a listed package does
			not work and needs to be replaced by an earlier one.)
		|_Other Preferences
		(Allows user to choose default package location (Internet or CDROM),
			whether debugging messages are shown, and whether or not to
			try to install icons to the desktop when appropriate.)

5) Are there any problems?

	Short anser: No.  In its CURRENT state I have not been able to crash it, and 
it seems to work beautifully...

	Long answer: Yes. I am not a C coder by trade so I have been encountering lots 
of memory related problems due to my lack of expertise with the malloc() function.  
The short term hack has been to just allocate the memory up front and hope that it's 
enough.  Eventually it won't be, but for those of you who get segmentation faults on 
startup, you know where to start looking.  Search for comments 

	/* Add memory here */ 

in the source code and you will be able to recompile and it will probably work. 
As the size of the file package_manifest.txt grows, there WILL be problems without 
a significant rewriting of this part of the code...and this gets us to our next 
topic...

6) I'm a developer.  How do I add something to the package manifest?
	1st: Make an 32x32 xpm icon.  Otherwise, I will be forced to make one for 
you and you might not like it.

	2nd: Make sure your package is working and can be posted either on the Vector 
Linux or Slackware download site.  I will only put packages from these sites into the 
official package manifest because these are trusted sources.  Also, I haven't yet
added the MD5 checking. In other words, check with Vec or Tigger to be sure your
package is kosher if it's on the VL site.

	3rd: Prepare a line of code in a text editor.  Recently, I have started to edit
this file using Gnumeric since it imports tab delimited text easily.  It should be saved
as a tab delimited text for easy import into spreadsheets.  Note, after saving from Gnumeric
it is necessary to delete all the additional tabs following the version number on the first
line, or you will not be able to start the program.  I'll fix this shortly, but I thought
I'd put this in just so you know.  

Additional delimiters are semi-colons (;) for the program.  The fields should follow this 
order:

		Category	InstallMethod	ExecLoc	MD5	Image	Text	URL
	
		Category is one of the following: (pay attention to case)
		office,finance,internet,media,games,graphics,science,windows,system,other
			Size Limit: 50 characters

		InstallMethod is currently just installpkg, but will eventually include 
		these options
			listpkg - use wget to get an entire directory to save on the URL coding
			rpm - when and if anyone want to use this with an rpm based distro
			listrpm - use wget to get an entire directory of RPMs
			Size Limit: 50 characters

		ExecLoc is where the executable lives once installed.  This should only be 
		specified when it may be desirable to place an icon on the desktop.  As such
		command line programs should NOT have a location specified.  The word "none"
		with no quotes should be used if either the executable location is unknown
		or it is not desirable to place an icon on the desktop. Currently only one
		executable program may be listed here so applications with multiple GUI 
		subapps (like KOffice) will only be able to list a single program like kword.
		The full path of the executable should be specified. EXAMPLE:
			/opt/kde/bin/kword
			Size Limit: 50 characters

		MD5 is the checksum in the following format: MD5-1,MD5-2,MD5-3,etc... 
		where each checksum corresponds in order to the entries in URL.  This is 
		not currently implemented in version 0.1.2.
			Size Limit: 500 characters 

		Image is the name of the pixmap image to be displayed in the installer
			Size Limit: 50 characters

		URL is a comma (,) separated list of full URLs from ftp:// onwards.  This 
		is so that if packages come from different servers or directories, they 
		can still be obtained.  In the future, packages that are served from all 
		one directory will use the listpkg or listrpm flag under InstallMethod 
		and have the full URL of the directory name listed here.  (Note: only 
		packages relevant to the specific install need be included in this 
		directory - unless I come up with something clever).
			Size Limit: 3500 characters

		Look at the package_manifest.txt file for an example

		By the way, currently I've allocated space for 100 major packages and their 
		dependencies. If the package_manifest.txt file is longer than 101 lines, there
		will probably be a seg fault.

	4th: Post a copy of your xpm and your one-line file in my manifests directory:

ftp://ftp.ibiblio.org/pub/linux/distributions/vectorlinux/veclinux-soho-4.0/stable/niiler/installer/manifests/

	CALL THIS ONE LINE FILE "packagename-manifest.txt" and post it in my manifests 
	directory.  CALL YOUR xpm EXACTLY what it's called in your packagename-manifest.txt 
	file.

7) I want to install from CDROM, but something seems to be wrong.  What gives?
	At the current time, you need a CDROM I've prepared.  I downloaded all the major Vector
	Linux packages and put them in the root directory of the CDROM along with the files
	package_manifest.txt and pkglist.txt.  This WILL change in the VERY NEAR future when the 
	addon CD for the Vector Linux SOHO edition comes out.  Check back for more info.

8) How can I help out?
	A) Test this out and let me know how it works.
	B) Check out the source code and give me some C and or GTK advice.
	C) Work on some one-liners with dependencies and all so that I can add to the 
		package_manifest.txt file.

9) What's next?
	Currently the program saves all the downloaded packages.  I need to add an option 
	to delete these packages so that there is no harddisk creep.  Other than that, 
	I want to implement the listpkg command, the md5 checking and show icons for 
	uninstalls based on whether the package seems to match something in the package 
	manifest.

10) Who are you?
	Some call me Tim...:-P
	thebin AT niiler DOT com

11) What are my guarantees?
	Absolutely NONE.  This code works for me and I'd like to share it.  If you have problems,
	I'd be happy to try and help to the best of my abilities.  If something screws up - don't
	hate me, hate the code.  It's still a bit sloppy and needs a lot of cleaning up. But this
	is the first release so...go figure.