App-Fetchware
view release on metacpan or search on metacpan
Fetchware is a command line program written in Perl with help from CPAN that
brings package management to source code distributions. It is able to do this,
because most source code distributions use GNU autoconf, and thereby use the
exact same commands to build and install. Furthermore, everyone uses md5sums,
shasums, and/or gpg sigs, and ftp/http mirrors. Because everyone follows the
a similar format for their FOSS means a fairly simple but flexible command line
program should be able provide package management for source code distributions.
Fetchware is a command line perl program that supports install, uninstall (via
make uninstall), upgrade (for just one package), upgrade-all (for all installed
packages), and the best part a new command that is a console wizard question and
answer interface that easily builds brand new Fetchwarefiles and packages based
on fairly obvious information (mirrors, name, configure options, make options,
and so on.). If you have the need for fetchware (You already know how to install
source code distributions yourself.), then you should be able to figure out how
to answer the questions easily.
WHY DID YOU CREATE FETCHWARE?
I wanted an automated way of installing apache's constant security fixes, which
was necessary, because I compiled apache from source instead of using my Linux
distribution's default build. Most sysadmins these days just use their Linux
distribution's default packages, but Unix and Linux have a long history of
compiling yourself the software that you install. Fetchware follows in this
tradition, and makes managing compiled from source software easier.
WHAT IS A FETCHWAREFILE?
A Fetchwarefile is Fetchware's configuration file. Because Fetchware can be a
package manger for any source-code distribution, it requires a file to tell it
everything it needs to know in order to install, upgrade, and uninstall your
source-code distribution, and that is what a Fetchwarefile does.
AND A FETCHWARE PACKAGE?
A Fetchware package is simply the original source-code distribution unarchived
with your Fetchwarefile added to it. Then it is tared and gziped, but named with
a .fpkg file extension instead of a .tar.gz file extension. This simple format
is modeled after Slackware Linux's package format, which is also very simple.
WHAT'S THE DIFFERENCE?
There really isn't any other than file size and name. They both contain a
Fetchwarefile, which is really what is needed to install, upgrade, and uninstall
fetchware packages.
WHY SHOULD I USE FETCHWARE INSTEAD OF MY OWN PLATFORM'S PACKAGE MANAGER?
Fetchware should be used if you want to build those same software packages from
source code, and be able to specify your own configuration options to
configure that software as you want instead of how that package's maintainer
wants it to be configured. Furthermore, Fetchware leaves you in control of
creating the actual Fetchware package, because you just need the Fetchwarefile,
and that is enough to build and install a Fetchware package. This means that
instead of using something like Fedora/RHEL's EPEL, where you're a slave to each
individual package maintainer's schedule and ability to release updated versions
every time yet another security hole comes out, you can upgrade to latest,
secure version whenever it is released.
However, Fetchware needs a full build environment on your server, and wherever
you install the resulting Fetchware package. This may be a limitation in some
enterprise/data center environments. However, if you set up your Fetchwarefile
properly, you can build the Fetchware package on a testing or build server, and
then only do the "make install" step on each of the production servers.
CAN FETCHWARE UNINSTALL FETCHWARE PACKAGES?
It can, but only if the underlying source-code distribution's build system
supports some sort of "make uninstall" target. For example, Apache does not have
a "make uninstall" make target, while ctags does; therfore, Fetchware can not
uninstall Apache, but it can uninstall ctags.
Other similar programs can uninstall compiled-from-source programs using some
sort of LD_PRELOAD trick or perhaps gdb debugging hooks, but Fetchware currently
does not support any of these methods.
WHERE CAN I FIND A FETCHWARE PACKAGE REPOSITORY?
Currently there is no official or unofficial repository of Fetchware packages.
But perhaps I or someone else will create one in the future.
Also, creating your own Fetchwarefile's to use to create your own Fetchware
packages is quite simple and flexible. See perldoc App::Fetchware for all of the
details after installing Fetchware.
INSTALLATION INSTRUCTIONS
(Note: currently Windows is not supported, but it may be supported in the
future. But everything Linux or Unix is supported.)
Just use your platform's cpan command to install Fetchware and Fetchware's
dependencies.
cpan App::Fetchware
That should cause the CPAN client to install the App::Fetchware distribution
from Perl's CPAN. This will also take care of installing any of Fetchware's
dependencies, or any other external CPAN modules that don't come with Perl and
might not be installed on your computer. This method is recommended, and the
manual method shown below should be avoided, so you don't have to worry about
installing Fetchware's external CPAN dependencies.
Fetchware's dependencies are:
Test::More version 0.98 or higher for proper subtest support.
Path::Class
Perl::OSType
URI
Getopt::Long
Archive::Tar
Archive::Zip
Term::UI
File::HomeDir
( run in 0.633 second using v1.01-cache-2.11-cpan-39bf76dae61 )