|
 |
 |
 |
 |
Portmaster Funding Proposal
I. INTRODUCTION
Portmaster is a utility that I have written to assist users with
managing their ports. Its genesis was similar to that of mergemaster,
starting out as a fairly simple shell script to handle a few routine
tasks that I performed regularly, and then took on a life of its own
largely due to user feedback and functionality requests.
The two major drawbacks I saw in existing tools were that they either
used a language that is not in the base, required the existence of an
external database (other than the information already in /var/db/pkg),
or both. More information about what portmaster is and does can be
found at the following URLs:
http://dougbarton.us/portmaster.html
http://www.freebsd.org/cgi/cvsweb.cgi/ports/ports-mgmt/portmaster/files/
And now the new subversion respository for the work in progress:
http://svn.freebsd.org/viewvc/base/user/dougb/portmaster/
If you have subversion installed locally you can also do:
svn co svn://svn.freebsd.org/base/user/dougb/portmaster
II. FUNDING PROPOSAL
I would very much like to expand portmaster to meet the needs of the
community, however I also need to be able to support myself and my family.
Therefore I would like to give the community the opportunity to provide
funding for those areas of development that they are especially interested in.
I have outlined several different features below that are divided into
units with what I believe to be manageable milestones. I have indicated
the number of hours that I think it will take to complete each feature,
and what my hourly rate is for work of this type.
If you as an individual, or your company is interested in funding work
on portmaster you can click on the button below and use PayPal to send
the funds. If a more formal invoice is needed and/or other payment methods
are preferred feel free to contact me by e-mail:
dougb@FreeBSD.org.
Even if you cannot afford to fund an entire feature all contributions
are welcome! I will keep track of what features have received funding
and update the website accordingly. Also, if you're interested in
providing support for portmaster generally (rather than for a
specific feature) feel free to write "General" or
something similar in the box below.
Please note, the PayPal site will refer to Superset Solutions, Inc.
That is my consulting company. More information can be found at the
"My Corporate Website" link on the left, or by
clicking here.
| Feature |
Development |
Funding |
Sponsors |
A. Create a public repository for the work in progress |
Complete! |
Complete! |
JAN HORNYAK Christer Solskogen R Koole Michael Proto
|
B. Enhance the command line parser |
Committed, Ready for Testing |
In Progress |
Bard Skaflestad Paul Lambert Societe ToDoo Andrew Belashov Yoriyuki Sakai Flemming Jacobsen Julian Stecklina |
D. Support for downloading and installing packages |
In Progress |
In Progress |
Christer Solskogen Douglas Berry Beat Gatzi |
III. NEED STATEMENT
By design the current incarnation of portmaster works only with the
ports tree (i.e., users must build the ports they want to install or
update locally). While there is support for users to create backup
packages of old ports, and packages of ports they are installing,
there is no support for allowing users to install packages.
The one request that I hear most often (and now fairly
regularly) is to add support to portmaster to allow users to install
packages. The two specific options that users request most often are
to install only packages (and fail if no package exists), and to try
installing packages first and then build the port as a fallback. This
functionality already exists in other ports management tools, and
users find it very useful.
The other major feature that has been requested relatively often is to
automate support for "backing out" if something fails during the
upgrade process. Currently portmaster builds backup packages of
existing ports by default, and leaves those packages in place until
the entire update process is successful, then deletes them. This is
useful, however it would require the user to manually go back through
the list of ports that were, and were not upgraded, figure out
which packages need to be applied, etc.
IV. STATEMENT OF WORK AND MILESTONES
The following features are presented in decreasing order of
frequency of request from users.
Items A - C on this list are "behind the scenes" modifications
that would need to be done in order to facilitate the user-visible
improvements. These items would be funded first from any donations that
are not specified for another purpose.
A. Create a public repository for the work in progress.
Because this project will be funded by the community I'd like to make
the work in progress available to the community for feedback, testing,
etc.
Complete!
B. Enhance the command line parser.
Currently I am using a combination of a custom parser to handle
certain options and getopts to handle "standard" command line options
(such as -v, -d, etc.). In order to accommodate the much wider variety
of options I will have to add more extensive support for "long"
options (e.g., --option), including support for mixing these options
in on the command line instead of requiring them to be placed first as
they are now. This change is also needed to support portupgrade-style
syntax such as -P and -PP.
Committed, Ready for Testing
C. Add support for parsing the INDEX file.
Currently portmaster does not use the INDEX file for any purpose. I
have always preferred to check for relevant information regarding
current version numbers, etc. from the ports tree itself. However, one
of the requests that has been made on the lists is for a tool that can
be used with no ports tree installed at all (in other words, it can
work exclusively with packages), for which INDEX file parsing is a
requirement. This information could also be used in "up to date"
checks as evidence that a port is not up to date, and potentially
relied on (based on user preference) to show that a port is up to date.
4 hours
MILESTONE 1: 8.5 hours
D. Add support for downloading and installing packages, either in
"try packages first" or "use packages only" modes.
This support would include the default of installing from the FreeBSD
package repository, or customizing a local package repository. Users
have requested the latter option in order to support either locally
customized packages of FreeBSD ports, and/or exclusive local packages.
MILESTONE 2: 15 hours
In Progress!
E. Automated backout after upgrade failure.
When an upgrade fails, offer the user a guided experience to back out
the upgrades that were already performed.
MILESTONE 3: 20 hours
F. Add support for more detailed pre-upgrade confirmation of work,
downloading of packages, and repeatable scripting.
Users have often requested the ability to have portmaster create a
"script" to follow before commencing an upgrade in order to
review and approve all actions that will be taken before the upgrade process
begins. Portmaster currently has limited support for this feature that
is entirely dependent on building from the ports.
1. Support for a "this is what will be done if you push the big red
button" confirmation dialog.
5 hours
2. Support for downloading all packages before the upgrade process
continues, and prompting the user for building from the local ports
tree if one or more packages are not available. This includes
downloading in parallel and/or "scripting" the ftp session to
take advantage of a persistent connection.
10 hours
3. Support for creating a pre-update "script" that portmaster
could follow to handle interrupted updates on the same machine, or to pass
to multiple machines that all need to be upgraded the same way.
10 hours
4. Support for having portmaster create all the backup packages first
before starting upgrades.
5 hours
MILESTONE 4: 30 hours
G. Other ideas that users have suggested.
1. Add support for shutdown and startup of services.
Users have requested the ability to configure portmaster to
automatically shut down a service before deinstalling the relevant
port, and/or start up the service once the new version is installed.
5 hours
2. Add support to specify alternate dependencies.
Users have requested the ability to specify that a different port is
sufficient to satisfy a dependency requirement than the one that would
normally be installed. This is fairly common for example with database
versions, using a -devel version of a port instead of the base port,
etc. Portmaster has limited support for this now via the CONFLICTS
settings in the ports' makefiles, but users would like to be able to
have greater control over this feature. This could include adding
support for using the _DEPENDS variables directly.
4 hours
3. Support for more general scripting hooks such as BEFOREDEINSTALL
and AFTERINSTALL in portupgrade.
6 hours
4. Save the log files from the -H option in a persistent fashion.
5 hours
5. Add an option to enable the port in rc.conf.local when an rc.d
script is installed.
4 hours
6. Divide portmaster into more than one script to avoid problems with
out of control command line options.
Rather than having one monolithic tool with dozens of command line
options users have requested that portmaster's functionality be split
across multiple scripts that are more specialized. This is consistent
with how other ports management tools work. This would entail creating
"libraries" of shell functions that are common to the various scripts,
dividing the features along logical boundaries, writing new man pages,
updating the port, etc.
15 hours
V. COSTING
I currently do consulting work on a contract basis and am entirely
self-employed. I am suggesting an hourly rate of $100 based on
my experience, comparable rates for other custom projects that I have
worked on, comparison of market rates for similar work, and the fact
that this figure includes overhead that I incur because I am self
employed. I have tried to be realistic in my time estimates, and have
included what I think are reasonable amounts of time for both the
development and QA/Regression testing so I am comfortable saying that
if you agree to fund a feature for the number of hours I have listed
that I'll get it done!
|
 |
|
 |
 |
 |
|