[Rubygems-developers] Post-install scripts etc
Chad Fowler
chad at chadfowler.com
Sat Oct 2 08:11:05 EDT 2004
Eivind,
I think this is a very interesting/do-able idea, but I'm frankly too
tired to give it enough thought yet. Hopefully we can spend some time
discussing it here at RubyConf and potentially work up a POC.
Thanks for the input.
Chad
On Fri, 1 Oct 2004, Eivind Eklund wrote:
# Problem:
# There are things developers want to do to finish setup that
# RubyGems do not support, A number of these things vary from
# system to system, and they can be implemented correctly and
# incorrectly on other levels.
#
#
# "Perfect" solution:
# Provide all the helpers the developers need to do the tasks,
# available as "extra specification" for the package (so any form
# of common task is implemented once and done right). And this
# should be trivial to learn for the developer.
#
#
# More details:
# We need to somehow provide support for these helpers. The
# problem is there is a bunch of people around the world that will
# develop the applications, and that we have too little experience
# to really know what helpers they'll need. And lacking
# coordination and tracking of the helpers, we'd get a ton of
# broken helpers (not working on various systems etc).
#
# I'm already seeing people forcing gems to work as binary
# distributions, leading to cross-platform brokenness, and people
# doing post-install scripts that are Unix-specific, so the cross
# platform issues already rear their head.
#
#
# How to move from here to there:
# What we IMO want to do is allow post-install-hooks for a while
# (to gather what people need done), but refactor all of them to
# use generic helpers. Then maybe let the post-install-script
# functionality "loose" when we've gotten more experience with it
# in this context, or maybe decide that the helpers are
# sufficient and that we don't need to let the functionality out.
#
# "But implementing that is not possible - RubyGems is
# distributed", I hear you scream.
#
# Here's a design (first the interface, then the implementation):
#
# Interface:
#
# A packager can add post-install-hooks, but these only work with
# versions of RubyGems AT OR BELOW the point in time where the Gem
# is released.
#
# If the gem is used with a later version of RubyGems, the
# post-install-hook is only mentioned as being available (adding a
# separate command to run it, and mentioning that it is outdated),
# unless it has been registered with RubyGems for changing, in
# which case RubyGems run the INTERNAL version of the
# post-install-hook (which may be refactored to use the new
# helpers) instead of the version in the package.
#
# Implementation:
#
# Each post-install-hook is labelled with a nonce (number used
# only once; basically a large random number) identifying the
# hook. When a hook is submitted to the RubyGems team, this nonce
# is entered as an internal identifier for the hook. Let's call
# this the pih-nonce.
#
# Each RubyGems release include a nonce. Call this the rg-nonce.
#
# Each post-install-hook list what rg-nonces it work with. It
# cannot list rg-nonces that are not yet published, because the
# author does not know about them, so invalidation for future
# releases happens automatically.
#
# An optimization (that is harder to implement) is to use
# public/private keys and publish a version number signed with a
# private key for each release of RubyGems, and have RubyGems
# include a public key it use to verify this.
#
# A possibly slight improvement for the multiple-rg-nonce variant
# is to have each nonce be a prime number, and just multiply them
# together for the new nonces. Then each RubyGems variant can
# just check if it divides into that number. (The only real
# advantage here is having a single number for the person
# releasing a package to include, instead of a list.)
#
# There is a less complicated variant than the above with many of the same
# advantages - force submission of post-install-hooks if they are to run
# automatically, and either sign them or disallow automatic running until
# they're included in the next RubyGems release. However, if you want
# decentralized construction of packages with post-install-hooks and
# collection + refactoring of said hooks, one of the above schemes are
# necessary.
#
# Or one could make the collection entirely voluntary, but I suspect
# problems with getting that to work in practice - in my experience, it's
# hard to get people to submit stuff unless you're actively talking to
# them at the moment.
#
# Eivind.
# _______________________________________________
# Rubygems-developers mailing list
# Rubygems-developers at rubyforge.org
# http://rubyforge.org/mailman/listinfo/rubygems-developers
#
More information about the Rubygems-developers
mailing list