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.