From what I know of spacewalk (which, I'll admit, isn't a lot) and yum
(slightly more) I don't think this is going to be very practical. You
might be able to hack it together by putting your software into its own
yum repo and disabling the repo for normal updates, thus preventing a
regular update from upgrading it while the program is running. Then you
could rewrite your program to invoke a yum update and force the use of
that repo every time it closes. I suppose that could also be done with a
wrapper program that invokes the real java program if need be. Of course
at that point it would likely be easier to just roll your program up
into a JAR and write an upgrader into the program to check for newer
versions before closing. And that might be better for cross-platform
situations anyway.
Jem
Adrián Márques wrote:
Thank you Michael for all of your valuable feedback.
Yes, ooffice is not the best example. I just wanted to illustrate that
operators will be working against a GUI, which can't just restart
apparently out of its own volition whenever there's an update.
For starters, RPM is a package format, yum is the updater.
Deciding when you want to do updates is a good thing to be thinking
about. Configuring spacewalk to /not/ pull down updates
automatically is I presume doable (spacewalk folks?), in which case
you can just push them out when you want (Spacewalk also have a
facility to do this as well and can probably explain better).
Maybe I wasn't clear with my previous mail. I do understand the
difference between RPM and YUM. I know that from the spacewalk POV I
could push the updates at specific times, but to the best of my
knowledge this gives me no guarantee the updates will be applied to
the clients at a specific time. Furthermore, I'm thinking of
administering as much as well over a thousand hosts this way, in an
environment were mantainance windows could be quite impractical to
enforce. Thus I though of having the yum-rhn plugin download all rpms
in the backgound, while the app might be running, and have them
installed when I know I can restart the app without inconveniences.
I'd also have to ensure that the app can't be started while an update
is taking place.
I hope with this I took care of any preceding ambiguities in my
intentions.
So I restate my questions: Do you consider this a terrible solution?
Am I trying to defeat RPM/YUM/Spacewalk design with this? Is there a
better alternative?
Thank you all.
Adrián.
Michael DeHaan escribió:
Adrián Márques wrote:
Thanks a lot Michael.
I'd never heard of condrestart before and your other suggestions
also seem to be more than worth checking out.
If I understood you correctly though, the advice you are giving me
is geared towards updating services and in the process
starting/stopping/restarting them based on conditions (I'll be
looking into the links you provided to verify whether this is
right). The conundrum I'm facing is that this is a desktop app,
picture ooffice as an example, and I can't restart it while the
users are logged in it.
office doesn't have a backend service, so that may not be the best
example.
In either case, you'd want to deploy your new software in a window
where it made since to do it.
The hosts were this app will be running will be dedicated, so I'm
leaning towards the idea of hacking the spacewalk client as I
mentioned before (so it won't install the updates until told to) and
periodically install downloaded rpms either at boot time or whenever
I can ensure that no users are logged into this app. Do you consider
this a terrible solution? Am I trying to defeat RPM with this? Is
there a better alternative?
For starters, RPM is a package format, yum is the updater.
Deciding when you want to do updates is a good thing to be thinking
about. Configuring spacewalk to /not/ pull down updates
automatically is I presume doable (spacewalk folks?), in which case
you can just push them out when you want (Spacewalk also have a
facility to do this as well and can probably explain better).
Thanks.
Adrián.
Michael DeHaan escribió:
[EMAIL PROTECTED] wrote:
Hi Adrián,
The question is probably more suitable on a rpm list.
We don't distribute our jar's with rpm but I appreciate your dillema.
I don't personnally think that for such complex applications, rpm
is the right way to upgrade with. I see rpm has a way to
distribute "core" stuff, and not suitable for distributing weird
and wonderfull applications that requires restarts and database
upgrades etc. There is application servers and frameworks that is
better suited for this type of thing and that sits on a logically
higher level. JBoss, Wesphere and I think even tomcat has some
basic stuff build in.
Regards
This is generally true only for applications that are packaged
/poorly/. Properly packaged RPMs can be configured to do
"condrestart" as needed.
If you need something more advanced, this is typically where you
would want to look at something like puppet/cfengine/bcfg2 where
you can describe the state you want your services to be (and
remain) in.
Also you may be interested in a simple tool such as Func
(http://fedorahosted.org/func) for restarting services remotely.
It is in many ways easier to deploy than SSH and also provides you
a way of defining arbitrary groups of systems to send commands to.
--Michael
-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Adrián
Márques
Sent: 06 October 2008 18:45
To: [email protected]
Subject: [Spacewalk-list] How to update running applications?
Dear all,
I'm having a difficult time in finding the correct forum to pose
this question since I guess it's part spacewalk, part RPM, part
basic aplication design.
Being an RPM end-user for years I had always assumed that
updating running apps was a piece of cake with RPM. After all, I
always did it and the most I got were occasional messages such as
"Firefox restart required", never encountering other side-effects.
However, after reading through the RPM guide, getting my hands
dirty trying to package an app, scouring the internet for info
and asking around in the RPM mailing list, I'm still not sure how
to write my RPM so updating won't be an issue.
The scenario is the following: I'd like to use spacewalk to
distribute a custom desktop app. Hence, it's unavoidable that
some users will be working at the time of an update. So far I've
identified two problems with this, 1) If I have to modify the
app's database schema as part of the update, the running app
might break down if it's not aware of the change 2) This happens
to be a java app, so in case a jar gets updated a class might get
loaded that is not compatible with those already loaded by the
running app.
I understand that what I've explained so far might be outside of
the scope of the subjects treated in this mailing list, if so,
please just treat it as a detailed background problem description.
What I would like to know from you guys is whether you've had any
problems when updating apps through Satellite/Spacewalk due to
them being running at the time or what precautions (if any) you
take when doing so.
Finally, I suppose that as a last resort I could hack the
spacewalk client to only download updates and not install them
until it is told to do so from the command line. Is this already
possible? If not, where's the place to start with hacking this?
I thank you all for your time and attention. It'd be amazing if
you had any comments regarding my background issue, but I'll be
more than satisfied and grateful if you could just provide any
feedback on those questions strictly spacewalk-related.
Thanks.
Adrián.
_______________________________________________
Spacewalk-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/spacewalk-list
_______________________________________________
Spacewalk-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/spacewalk-list