<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>
<channel>
	<title>Comments for Scott James Remnant</title>
	<atom:link href="http://www.netsplit.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netsplit.com</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Sat, 05 Jul 2008 08:44:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>Comment on Upstart 0.5: Relationships by MichaelC</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-863</link>
		<dc:creator>MichaelC</dc:creator>
		<pubDate>Sun, 29 Jun 2008 20:18:14 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-863</guid>
		<description>I don't think you should jump through any hoops for portmap.  Your model is, if it's installed and not disabled, it runs.  Stick with that.  If nfs-client is installed and not disabled, then portmap needs to run.  If the distro doesn't want that to be the default, then it should either not install nfs-client by default or disable both nfs-client and portmap by default.  In the former case, installing nfs-client will automatically install portmap.  In the latter case, the distro is going to document how to enable nfs-client, so adding one more step to enable portmap isn't a stretch.

Two other random thoughts:

If you haven't already, I think you should consider the concept of job name aliases.  For example, needing an e-mail MTA isn't the same as tomcat needing apache.  I want to be able to say "start on started mailmta" so that my package doesn't have to be updated when a new MTA is added or the default MTA is changed.  You gave an example of doing that with an exported environment variable, but that seems kludgy to me.

You might want to consider "requires", "needs", or something similar as syntatic sugar for start on started, stop on stopping.  I know you didn't want to make it look like a dependency tree, but it's going to happen so often that something simpler may be warranted in this case.  Particularly since it's already been noted there could be confusion over starting, started, stopping, stopped.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t think you should jump through any hoops for portmap.  Your model is, if it&#8217;s installed and not disabled, it runs.  Stick with that.  If nfs-client is installed and not disabled, then portmap needs to run.  If the distro doesn&#8217;t want that to be the default, then it should either not install nfs-client by default or disable both nfs-client and portmap by default.  In the former case, installing nfs-client will automatically install portmap.  In the latter case, the distro is going to document how to enable nfs-client, so adding one more step to enable portmap isn&#8217;t a stretch.</p>
<p>Two other random thoughts:</p>
<p>If you haven&#8217;t already, I think you should consider the concept of job name aliases.  For example, needing an e-mail MTA isn&#8217;t the same as tomcat needing apache.  I want to be able to say &#8220;start on started mailmta&#8221; so that my package doesn&#8217;t have to be updated when a new MTA is added or the default MTA is changed.  You gave an example of doing that with an exported environment variable, but that seems kludgy to me.</p>
<p>You might want to consider &#8220;requires&#8221;, &#8220;needs&#8221;, or something similar as syntatic sugar for start on started, stop on stopping.  I know you didn&#8217;t want to make it look like a dependency tree, but it&#8217;s going to happen so often that something simpler may be warranted in this case.  Particularly since it&#8217;s already been noted there could be confusion over starting, started, stopping, stopped.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Events by giko</title>
		<link>http://www.netsplit.com/2008/04/27/upstart-05-events/#comment-861</link>
		<dc:creator>giko</dc:creator>
		<pubDate>Wed, 25 Jun 2008 12:43:09 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=147#comment-861</guid>
		<description>Hi,

I want to trigger a script when a device (.f.ex. usb dongle, usb bluetooth etc) i removed. I read that upstart can be triggert on these events (emitet by the kernel, hal or dbus) but i do not know the name "?" of the event to trigger on.  Could you help me out there? /giko</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>I want to trigger a script when a device (.f.ex. usb dongle, usb bluetooth etc) i removed. I read that upstart can be triggert on these events (emitet by the kernel, hal or dbus) but i do not know the name &#8220;?&#8221; of the event to trigger on.  Could you help me out there? /giko</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Job Lifecycle by James Scott jr</title>
		<link>http://www.netsplit.com/2008/04/12/upstart-05-job-lifecycle/#comment-855</link>
		<dc:creator>James Scott jr</dc:creator>
		<pubDate>Thu, 12 Jun 2008 05:37:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=144#comment-855</guid>
		<description>Question:
Where can I find documentation and examples for this new world?  Namely, I need and example or explaination of how to write a the ideal daemon for UpStart - should it fork, contact dbus or create a pid file?

Next how do I write a Upstart init.d file to replace a SYSV formatted file I used under Fedora, or a Debian based init.d for Ubuntu?  Again, an example would be nice. I can supply an autotools package with debian&#124;redhat.initd templates, and two versions of the same C template daemon; libc &#38; glib based with only --userid username --version --force (pid create) --help, if that would help. Its on my sourceforge page with gapcmon.  gdaemons-0.1.1.tar.bz2 https://sourceforge.net/project/showfiles.php?group_id=157888&#38;package_id=280067&#38;release_id=606274

I ask because I am interested in what your doing and there is a benefit for me; one init.d script for all linux platforms (WooHoo).  Thus, I want to understand how the two or three daemons I have released will be advantaged by upstart.  I have no problem adding dbus, although I already create a pid file.  Also I always fork once, but that two can be changed.  I'm looking for the book or some best practces that I can code to.  Most of what i have googled on UpStart has been difficult to piece together and code to.</description>
		<content:encoded><![CDATA[<p>Question:<br />
Where can I find documentation and examples for this new world?  Namely, I need and example or explaination of how to write a the ideal daemon for UpStart - should it fork, contact dbus or create a pid file?</p>
<p>Next how do I write a Upstart init.d file to replace a SYSV formatted file I used under Fedora, or a Debian based init.d for Ubuntu?  Again, an example would be nice. I can supply an autotools package with debian|redhat.initd templates, and two versions of the same C template daemon; libc &amp; glib based with only &#8211;userid username &#8211;version &#8211;force (pid create) &#8211;help, if that would help. Its on my sourceforge page with gapcmon.  gdaemons-0.1.1.tar.bz2 <a href="https://sourceforge.net/project/showfiles.php?group_id=157888&amp;package_id=280067&amp;release_id=606274" rel="nofollow">https://sourceforge.net/project/showfiles.php?group_id=157888&amp;package_id=280067&amp;release_id=606274</a></p>
<p>I ask because I am interested in what your doing and there is a benefit for me; one init.d script for all linux platforms (WooHoo).  Thus, I want to understand how the two or three daemons I have released will be advantaged by upstart.  I have no problem adding dbus, although I already create a pid file.  Also I always fork once, but that two can be changed.  I&#8217;m looking for the book or some best practces that I can code to.  Most of what i have googled on UpStart has been difficult to piece together and code to.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on UI Design Mistakes by Jon</title>
		<link>http://www.netsplit.com/2007/10/07/ui-design-mistakes/#comment-853</link>
		<dc:creator>Jon</dc:creator>
		<pubDate>Mon, 02 Jun 2008 14:11:34 +0000</pubDate>
		<guid isPermaLink="false">#comment-853</guid>
		<description>on first reading I thought this was insane. Then, I thought, what if Scott meant take the text input, hash it assuming caps is off, hash it assuming caps is on, try both.</description>
		<content:encoded><![CDATA[<p>on first reading I thought this was insane. Then, I thought, what if Scott meant take the text input, hash it assuming caps is off, hash it assuming caps is on, try both.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Relationships by JamesB</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-851</link>
		<dc:creator>JamesB</dc:creator>
		<pubDate>Sun, 18 May 2008 18:33:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-851</guid>
		<description>Hmm, no, I'll have to say that is *not* an elegant way to get portmap running.
Why? It means that install/uninstall of a daemon will mean altering other daemons.
That means clutter, and a disk that eventually looks like the Windows registry, with HKEY_CLASSES_ROOT full of garbage that can never go away.

No, the proper thing to do is keep all the information about what a daemon needs *with that daemon*.
It's not about "oh, it's so beautifully symmetric", it's about "it's maintainable, and I don't have things strewn across the disk that I will never find".
You should have 'start portmap on starting' for that case.

As to whether it's starting, I would suggest: shared library that parses and handles adding and removing these dependencies and queries them, and a tool that uses that library for command line users (or a graphical tool, either way, both would use the library). The former would be used by installers and the latter by end users. That way you can change the format, not worry about parsing, etc. Hmm, actually, if it was all done by a library the symmetry could probably be maintained if you wanted while being able to do proper uninstalls.

Biggest problem on *nix is users/scripts directly altering what should be private data structures. Should be via a library supplied with the tool that needs the data every time IMO...</description>
		<content:encoded><![CDATA[<p>Hmm, no, I&#8217;ll have to say that is *not* an elegant way to get portmap running.<br />
Why? It means that install/uninstall of a daemon will mean altering other daemons.<br />
That means clutter, and a disk that eventually looks like the Windows registry, with HKEY_CLASSES_ROOT full of garbage that can never go away.</p>
<p>No, the proper thing to do is keep all the information about what a daemon needs *with that daemon*.<br />
It&#8217;s not about &#8220;oh, it&#8217;s so beautifully symmetric&#8221;, it&#8217;s about &#8220;it&#8217;s maintainable, and I don&#8217;t have things strewn across the disk that I will never find&#8221;.<br />
You should have &#8217;start portmap on starting&#8217; for that case.</p>
<p>As to whether it&#8217;s starting, I would suggest: shared library that parses and handles adding and removing these dependencies and queries them, and a tool that uses that library for command line users (or a graphical tool, either way, both would use the library). The former would be used by installers and the latter by end users. That way you can change the format, not worry about parsing, etc. Hmm, actually, if it was all done by a library the symmetry could probably be maintained if you wanted while being able to do proper uninstalls.</p>
<p>Biggest problem on *nix is users/scripts directly altering what should be private data structures. Should be via a library supplied with the tool that needs the data every time IMO&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.3 by Timothy</title>
		<link>http://www.netsplit.com/2006/12/14/upstart-0-3/#comment-850</link>
		<dc:creator>Timothy</dc:creator>
		<pubDate>Thu, 15 May 2008 14:18:51 +0000</pubDate>
		<guid isPermaLink="false">#comment-850</guid>
		<description>Hey,

on started mysql does not work for me?
Any ideas?</description>
		<content:encoded><![CDATA[<p>Hey,</p>
<p>on started mysql does not work for me?<br />
Any ideas?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Relationships by Scott James Remnant</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-838</link>
		<dc:creator>Scott James Remnant</dc:creator>
		<pubDate>Thu, 01 May 2008 12:14:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-838</guid>
		<description>@Frej: such relationships are entirely supported and unproblematic with Upstart.  If you were to "start A", then B would be started first.  If you were to "start B", then A would be started first.

There's no cyclic issues or graph resolution because there's no cycle or graph.  A is started, which emits the starting A event, which starts B.  B starting emits the starting B event, but that has no effect on A since it's already started.  B finishes starting, unblocking A, and allowing it to finish starting.

This is one of the elegancies of the event-based model.

Of course, there is one way to loop it, job A would have:
&lt;pre&gt;&lt;code&gt;
start on stopping B
stop on starting B
&lt;/code&gt;&lt;/pre&gt;

and job B would have:
&lt;pre&gt;&lt;code&gt;
start on stopping A
stop on starting A
&lt;/code&gt;&lt;/pre&gt;

Such a definition would create two jobs that flip-flopped between each other, but that's a perfectly valid service model -- one of "failover"</description>
		<content:encoded><![CDATA[<p>@Frej: such relationships are entirely supported and unproblematic with Upstart.  If you were to &#8220;start A&#8221;, then B would be started first.  If you were to &#8220;start B&#8221;, then A would be started first.</p>
<p>There&#8217;s no cyclic issues or graph resolution because there&#8217;s no cycle or graph.  A is started, which emits the starting A event, which starts B.  B starting emits the starting B event, but that has no effect on A since it&#8217;s already started.  B finishes starting, unblocking A, and allowing it to finish starting.</p>
<p>This is one of the elegancies of the event-based model.</p>
<p>Of course, there is one way to loop it, job A would have:</p>
<pre><code>
start on stopping B
stop on starting B
</code></pre>
<p>and job B would have:</p>
<pre><code>
start on stopping A
stop on starting A
</code></pre>
<p>Such a definition would create two jobs that flip-flopped between each other, but that&#8217;s a perfectly valid service model &#8212; one of &#8220;failover&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Relationships by Scott James Remnant</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-837</link>
		<dc:creator>Scott James Remnant</dc:creator>
		<pubDate>Thu, 01 May 2008 12:10:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-837</guid>
		<description>Right, you'd need to keep the portmap job definition up to date for everything that started it.  In the tomcat case, that's actually just fine since you'd need to update the tomcat package for each web server it works with anyway -- but the portmap case it's a little pessimal.

Fortunately Upstart can do ordinary provision/requirement relationships, I just didn't want to document them in the blog because you should try to never use this kind of thing.

Remember that the job name is just one parameter to the "starting" event, there are others and you can add any additional ones you want with the "export" variable.

So our nfs-server job could add a parameter to its starting event:
&lt;pre&gt;&lt;code&gt;
env REQUIRE_PORTMAP=1
export REQUIRE_PORTMAP
&lt;/code&gt;&lt;/pre&gt;

That the portmap job could pick up and match:
&lt;pre&gt;&lt;code&gt;
start on starting REQUIRE_PORTMAP=1
&lt;/code&gt;&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>Right, you&#8217;d need to keep the portmap job definition up to date for everything that started it.  In the tomcat case, that&#8217;s actually just fine since you&#8217;d need to update the tomcat package for each web server it works with anyway &#8212; but the portmap case it&#8217;s a little pessimal.</p>
<p>Fortunately Upstart can do ordinary provision/requirement relationships, I just didn&#8217;t want to document them in the blog because you should try to never use this kind of thing.</p>
<p>Remember that the job name is just one parameter to the &#8220;starting&#8221; event, there are others and you can add any additional ones you want with the &#8220;export&#8221; variable.</p>
<p>So our nfs-server job could add a parameter to its starting event:</p>
<pre><code>
env REQUIRE_PORTMAP=1
export REQUIRE_PORTMAP
</code></pre>
<p>That the portmap job could pick up and match:</p>
<pre><code>
start on starting REQUIRE_PORTMAP=1
</code></pre>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Relationships by Frej Soya</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-836</link>
		<dc:creator>Frej Soya</dc:creator>
		<pubDate>Thu, 01 May 2008 10:18:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-836</guid>
		<description>Nice style of blog posts. 
I'm probably wrong but, doesn't this conflict? (seems obvious though, so i'm probably missing something...)
service A has:
start on starting B (A before B)
service B has
start on starting A (B before A)
Does upstart help with this? I'm not saying it should. It should be easy though, just keep the graph of services as a DAG. 

Minor nitpick - Semantic difference on start[ed&#124;ing] is a bit hard read. I know it is the current signal/event names. But explicitly denoting the difference of starting as "before", and started as "after"? Or maybe something else :)

start after dbus vs. start on starting dbus.
start before nfs-server vs. start on started nfs-server.
There might be other problems with this though, like not matching event names.

Make it easy to write/select the correct configuration - it would be nice. Very un*nix, but still nice ;)</description>
		<content:encoded><![CDATA[<p>Nice style of blog posts.<br />
I&#8217;m probably wrong but, doesn&#8217;t this conflict? (seems obvious though, so i&#8217;m probably missing something&#8230;)<br />
service A has:<br />
start on starting B (A before B)<br />
service B has<br />
start on starting A (B before A)<br />
Does upstart help with this? I&#8217;m not saying it should. It should be easy though, just keep the graph of services as a DAG. </p>
<p>Minor nitpick - Semantic difference on start[ed|ing] is a bit hard read. I know it is the current signal/event names. But explicitly denoting the difference of starting as &#8220;before&#8221;, and started as &#8220;after&#8221;? Or maybe something else <img src='http://www.netsplit.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>start after dbus vs. start on starting dbus.<br />
start before nfs-server vs. start on started nfs-server.<br />
There might be other problems with this though, like not matching event names.</p>
<p>Make it easy to write/select the correct configuration - it would be nice. Very un*nix, but still nice <img src='http://www.netsplit.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Upstart 0.5: Relationships by Rudd-O</title>
		<link>http://www.netsplit.com/2008/05/01/upstart-05-relationships/#comment-835</link>
		<dc:creator>Rudd-O</dc:creator>
		<pubDate>Thu, 01 May 2008 07:02:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.netsplit.com/?p=148#comment-835</guid>
		<description>James, you stole the words from my mouth.  It seems this problem requires a dependency injection pattern.</description>
		<content:encoded><![CDATA[<p>James, you stole the words from my mouth.  It seems this problem requires a dependency injection pattern.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
