|
Posted by hendedav on July 21, 2007, 3:04 pm
Please log in for more thread options
> hende...@gmail.com coughed up some electrons that declared:
>
>
>
> >> hende...@gmail.com wrote:
> >> > Gang,
>
> >> > I am working on a project and would like to incorporate an (auto)
> >> > update feature.
>
> >> Could you elaborate more please on what you are updating.
>
> >> Cheers
>
> >> Tim
>
> > Thanks for the reply Tim. I am building my own application and am
> > trying to incorporate an update feature for it. Thats why I was
> > wondering if anyone has built a generic "update framework". If nobody
> > has, then I will need to build my own, in which case I was going to
> > see if anyone here knew of a perl module that would be able to send
> > and receive http requests (combined with wget could make an update
> > framework). Hope this clears it up.
>
> > Dave
>
> Not come across one - but that does not mean there isn't.
>
> So I guess you want to query a website for:
>
> a) Some data indicating current version of your app and urls of the various
> bits needed to transition between two versions (deltas) - or url of the new
> complete version.
>
> b) Fetch various binary blobs (zip or tar files maybe), then install them
> locally to update either data or the app itself.
>
> It wouldn't be daft to drive wget via system or IPC::Run(3). Certainly
> simple.
>
> Also the data in a) needn't be HTML - it could be any parseable text at your
> convenience. If XML, then the XML::Simple module is really easy to use.
>
> If you want to talk to web servers directly, this is a reasonable and mature
> module:
>
> http://search.cpan.org/~gaas/libwww-perl-5.806/lib/LWP.pm
>
> and there's this one too:
>
> http://search.cpan.org/~gaas/libwww-perl-5.806/lib/Net/HTTP.pm
>
> Sorry - I can't give any help with how to do the update as I don't know what
> your app looks like. File::Copy may be of use.
>
> But I would say - if you are updating core app binaries or critical data,
> try to have a way where you can install an updated version in parallel to
> the running version. Then if anything goes wrong, the user has a fall back
> to a version that still works. This is particularly true of updates that
> have so many parameters outside of you control (your webserver might crash,
> the internet falls over betwixt you and your user, their machine crashes
> (or gets turned off!) mid update.
>
> Cheers
>
> Tim
Tim you have provided some good information and I will take a look
into the modules you spoke of. Regarding the updating in parrallel,
what about doing the following:
1) download the entire update archive in /tmp dir (in tar.gz format)
- this would eliminate any problems from failed webserver or
update not completely downloading
2) untar contents and run tar.sh/tar.pl script to tar all the matching
files that will be installed over
- this would preserve the users original files and give him/her
the ability to roll back if neccessary
3) run install.sh/install.pl to perform the acutal installation of the
update
Do these steps seem reasonable and seem to eliminate most of the
problems associated with updating an app?
Thanks,
Dave
|