<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: A Few Corrections To &#8220;On Packaging&#8221;</title>
	<atom:link href="http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/</link>
	<description></description>
	<pubDate>Mon, 15 Mar 2010 12:02:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Merwok</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-78537</link>
		<dc:creator>Merwok</dc:creator>
		<pubDate>Mon, 09 Feb 2009 06:31:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-78537</guid>
		<description>Quick thoughts:

1. Debian Python packaging toolchains reuse Distutils. As a Python developper, I want to write a setup.py; Debian wants a makefile. Well, the debian/rules makefile uses the setup.py script with appropriate command-line options. (Dependencies in the Python system would be a must though, for now they are in a Debian-specific file.) See, no conflict between the two systems.

2. Integrating PyPI and APT isn’t just a technical issue: Debian packages are DFSG-free. (Of course, Debian means “main”-only.) I am totally in favor of decentralisation for VCS for instance, but I like the centralized control of the freeness of software allowed by using Debian archives.

3. APT can work with local repositories (i.e. lines starting with “deb file:///” in the sources.list file). A local repository (or an HTTP one, for that matter) is really a bunch of deb packages and a few meta-files. Automation can be done with the help of mini-dinstall, pbuilder, dnotify, *-buildpackage. (After all, pip is “just” automation of such things ;)

Well, I know my points only work if you’re already happily using a deb-based system. I don’t know whether and how Python developpers should compensate Windows flaws. And if you like setup.py develop, I don’t know how much coding would be required to automate these steps using a local APT repository, but that would be worth trying.

Cheers, Merwok</description>
		<content:encoded><![CDATA[<p>Quick thoughts:</p>

<ol>
<li><p>Debian Python packaging toolchains reuse Distutils. As a Python developper, I want to write a setup.py; Debian wants a makefile. Well, the debian/rules makefile uses the setup.py script with appropriate command-line options. (Dependencies in the Python system would be a must though, for now they are in a Debian-specific file.) See, no conflict between the two systems.</p></li>
<li><p>Integrating PyPI and APT isn’t just a technical issue: Debian packages are DFSG-free. (Of course, Debian means “main”-only.) I am totally in favor of decentralisation for VCS for instance, but I like the centralized control of the freeness of software allowed by using Debian archives.</p></li>
<li><p>APT can work with local repositories (i.e. lines starting with “deb file:///” in the sources.list file). A local repository (or an HTTP one, for that matter) is really a bunch of deb packages and a few meta-files. Automation can be done with the help of mini-dinstall, pbuilder, dnotify, *-buildpackage. (After all, pip is “just” automation of such things ;)</p></li>
</ol>

<p>Well, I know my points only work if you’re already happily using a deb-based system. I don’t know whether and how Python developpers should compensate Windows flaws. And if you like setup.py develop, I don’t know how much coding would be required to automate these steps using a local APT repository, but that would be worth trying.</p>

<p>Cheers, Merwok</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Guy Kloss</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-72798</link>
		<dc:creator>Guy Kloss</dc:creator>
		<pubDate>Tue, 20 Jan 2009 01:07:14 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-72798</guid>
		<description>I've got the feeling that one thing has totally been neglected. One of the origins that makes the clash between the two types of administrators (and their needs) so severe:

Python is a general purpose language. But here everybody just seems to be talking about web development!

In web development you've got to distinguish the users from the consumers. The consumers do not do any administration, that's only the users who are often/mostly also the administrators of that server/host/machine. There one can much more easily get away with pulling up an alternative management system in parallel to the distribution's own system without doing any major harm.

But with most other applications of Python it's a bit different. Whenever you use Python for system administrative tools (Ubuntu has got quite a few already), for libraries/bindings to libraries, or for application level (excluding web applications) it's all a different ball game. In all these cases the system's package management becomes *much* more important than Python's own attempts to cater for the developer and/or web admin needs.

Boiling down to this: I can fully understand both sides. Unfortunately there's quite some clash between them as described. The challenges ahead would be now to find a Good Solution (TM) that is well suitable to bridge the gap and cater for the non-web needs. Maybe even some sort of a PyPI mirror that offers eggs as pre-rolled .deb/.rpm packages for different distributions.</description>
		<content:encoded><![CDATA[<p>I&#8217;ve got the feeling that one thing has totally been neglected. One of the origins that makes the clash between the two types of administrators (and their needs) so severe:</p>

<p>Python is a general purpose language. But here everybody just seems to be talking about web development!</p>

<p>In web development you&#8217;ve got to distinguish the users from the consumers. The consumers do not do any administration, that&#8217;s only the users who are often/mostly also the administrators of that server/host/machine. There one can much more easily get away with pulling up an alternative management system in parallel to the distribution&#8217;s own system without doing any major harm.</p>

<p>But with most other applications of Python it&#8217;s a bit different. Whenever you use Python for system administrative tools (Ubuntu has got quite a few already), for libraries/bindings to libraries, or for application level (excluding web applications) it&#8217;s all a different ball game. In all these cases the system&#8217;s package management becomes <em>much</em> more important than Python&#8217;s own attempts to cater for the developer and/or web admin needs.</p>

<p>Boiling down to this: I can fully understand both sides. Unfortunately there&#8217;s quite some clash between them as described. The challenges ahead would be now to find a Good Solution (TM) that is well suitable to bridge the gap and cater for the non-web needs. Maybe even some sort of a PyPI mirror that offers eggs as pre-rolled .deb/.rpm packages for different distributions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Vargas</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-72164</link>
		<dc:creator>Jorge Vargas</dc:creator>
		<pubDate>Fri, 16 Jan 2009 11:11:56 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-72164</guid>
		<description>sorry for the long overdue response. 

jorge: Distributions handle the CherryPy2/3 issue with various means. last I checked in Debian they have an explicit Conflict so that CherryPy3 and Turbogears-1 apps cannot be installed together on the same box.

    so either kill off all the TG1 community of the CP3 community, that isn't really nice. How do you handle zope2/zope3? now let's go to the small details. 
    MY app needs version 2.3.1 of library X, your app needs 2.3.2 yet for some unknown issue they are incompatible. WHy do I have to choose which system to use?

In Fedora we’ve made use of the multiple version functionality of setuptools (and run up against limitations in its design) so that you can have both versions of CherryPy installed at the same time.

    That's great but keep in mind a package needs to be fairly popular for this to work (GTK,python,etc) what about something less known by the public 
    like pylons0.9.6/0.9.7 (and yes apps in .6 wont run out of the box on .7).

Note that for a distribution POV, we’d love to have a versioning scheme that works flawlessly. Debian, where the idea of doing compatible python modules was rejected, versions each of their C library packages so you can have separate versions. Fedora, which doesn’t like to do them for maintainability reasons (what do we do when a security issue arises in CherryPy2 and the devs say, “CP2 is no longer supported, we’re only releasing a security fix for CherryPy3″?), will do compat packages like the CherryPy2 package when the value for keeping the apps outweighs the maintainance costs. ATM, only strategies like psycopg use (changing the module name from psycopg to psycopg2 on a major, API changing update) work 100%. The setuptools method has promise, though… if only it would mature a bit more.

    Well that is a risk some people have to take, and is why not all applications are packaged, because I totally agree that the maintainer of a package 
    should be it's developer. Not several people over several OS's monkeypatching it to work on their OS, because it's important yet the original author is 
    gone. Now this particular problem is not related to packager it's related to developers, if TG1 refuses to die. Even after CP people say no more fixes for 
    CP2, then it's their responsibility to maintain CP2.</description>
		<content:encoded><![CDATA[<p>sorry for the long overdue response. </p>

<p>jorge: Distributions handle the CherryPy2/3 issue with various means. last I checked in Debian they have an explicit Conflict so that CherryPy3 and Turbogears-1 apps cannot be installed together on the same box.</p>

<pre><code>so either kill off all the TG1 community of the CP3 community, that isn't really nice. How do you handle zope2/zope3? now let's go to the small details. 
MY app needs version 2.3.1 of library X, your app needs 2.3.2 yet for some unknown issue they are incompatible. WHy do I have to choose which system to use?
</code></pre>

<p>In Fedora we’ve made use of the multiple version functionality of setuptools (and run up against limitations in its design) so that you can have both versions of CherryPy installed at the same time.</p>

<pre><code>That's great but keep in mind a package needs to be fairly popular for this to work (GTK,python,etc) what about something less known by the public 
like pylons0.9.6/0.9.7 (and yes apps in .6 wont run out of the box on .7).
</code></pre>

<p>Note that for a distribution POV, we’d love to have a versioning scheme that works flawlessly. Debian, where the idea of doing compatible python modules was rejected, versions each of their C library packages so you can have separate versions. Fedora, which doesn’t like to do them for maintainability reasons (what do we do when a security issue arises in CherryPy2 and the devs say, “CP2 is no longer supported, we’re only releasing a security fix for CherryPy3″?), will do compat packages like the CherryPy2 package when the value for keeping the apps outweighs the maintainance costs. ATM, only strategies like psycopg use (changing the module name from psycopg to psycopg2 on a major, API changing update) work 100%. The setuptools method has promise, though… if only it would mature a bit more.</p>

<pre><code>Well that is a risk some people have to take, and is why not all applications are packaged, because I totally agree that the maintainer of a package 
should be it's developer. Not several people over several OS's monkeypatching it to work on their OS, because it's important yet the original author is 
gone. Now this particular problem is not related to packager it's related to developers, if TG1 refuses to die. Even after CP people say no more fixes for 
CP2, then it's their responsibility to maintain CP2.
</code></pre>
]]></content:encoded>
	</item>
	<item>
		<title>By: Web Developer</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-67690</link>
		<dc:creator>Web Developer</dc:creator>
		<pubDate>Mon, 29 Dec 2008 19:07:13 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-67690</guid>
		<description>I think there is a problem with coding in your blog. I'm not able to see a part of the text from its left side.</description>
		<content:encoded><![CDATA[<p>I think there is a problem with coding in your blog. I&#8217;m not able to see a part of the text from its left side.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yap Sok Ann</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-64446</link>
		<dc:creator>Yap Sok Ann</dc:creator>
		<pubDate>Fri, 19 Dec 2008 01:11:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-64446</guid>
		<description>This is why Gentoo portage comes with a deployment tool called webapp-config.

Let's say you install trac using portage with `emerge =trac-0.11.2`, the files will just be placed into `/usr/share/webapps/trac/0.11.2/`. You will then use webapp-config to deploy it to the desired web server(s) or vhost(s).

It is far from perfect (e.g. doesn't support virtualenv, doesn't support nginx), but at least it partially solves the problem where more than one copy and/or more than one version of a webapp are required to be running on the same machine.

Btw, it is also "backward-compatible" with other less capable packaging tools, such that you can configure it to auto-deploy to your localhost whenever you emerge a webapp package, if you only need just one copy and one version of that webapp.

Anyway, to get anything done at work, we just use a combination of virtualenv, custom distcmds, and a local eggbasket. A *great language and platform independent package manager that can work throughout the development and deployment lifecycle* would certainly be very welcome :)</description>
		<content:encoded><![CDATA[<p>This is why Gentoo portage comes with a deployment tool called webapp-config.</p>

<p>Let&#8217;s say you install trac using portage with <code>emerge =trac-0.11.2</code>, the files will just be placed into <code>/usr/share/webapps/trac/0.11.2/</code>. You will then use webapp-config to deploy it to the desired web server(s) or vhost(s).</p>

<p>It is far from perfect (e.g. doesn&#8217;t support virtualenv, doesn&#8217;t support nginx), but at least it partially solves the problem where more than one copy and/or more than one version of a webapp are required to be running on the same machine.</p>

<p>Btw, it is also &#8220;backward-compatible&#8221; with other less capable packaging tools, such that you can configure it to auto-deploy to your localhost whenever you emerge a webapp package, if you only need just one copy and one version of that webapp.</p>

<p>Anyway, to get anything done at work, we just use a combination of virtualenv, custom distcmds, and a local eggbasket. A <em>great language and platform independent package manager that can work throughout the development and deployment lifecycle</em> would certainly be very welcome :)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos Ribeiro</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-64380</link>
		<dc:creator>Carlos Ribeiro</dc:creator>
		<pubDate>Thu, 18 Dec 2008 10:06:44 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-64380</guid>
		<description>The worldviews are very different indeed. It's a complex problem that has many roots.

1) Distributions are an attempt to freeze the world in a one entirely self consistent image. Packager's priorities are completeness (no broken dependencies), self consistency, and stability. That's why they prefer to package the latest stable version. But many times, the stable version of one particular program depends on the unstable version of a library (that's only the first problem).

2) Packagers are also concerned about space, due to disk and bandwidth concerns. That means eliminating redundancy. Most packagers hate the idea of having multiple versions of a single library "just because" one app needs it. 

3) Last but not least, packagers are concerned about security. Again, having multiple versions of a library tends to make their work harder due to the potential combinations and security threats.

That's not a problem for conventional applications, because most applications evolve slowly, and even when that's not the case, most users do not need the latest upgrades - unless there's a security issue, which are addressed by minimal patches that only fix the problem and do not add any functionality (so dependencies keep relatively unchanged).

Development is about bringing new functionality at the fastest pace possible. It means that:

- Developers are comfortable about using the latest libraries, even if they are not considered stable (and that leads to problem #1 mentioned above).

- Developers need a completely different environment to work than the one recommended  to run the final application.

To make things more confusing, the world is not black and white. There's a middle ground between the two. Trac, for instance - most of the times I can work with a older version, so I don't mind installing the packaged one. And it will work out of the box for most users. But for other packages, it's much harder to come up with a sensible installation  out of a generic package.

One of my particular gripes is with documentation. Take some package (for example, Twiki or Plone). Install it and try to customize it, following the instructions on the original website. Most of the times*, there are no instructions on how to install the "packaged version", and some of the instructions that apply to the "tgz version" do not make sense or are not applicable to the packaged one. Locations differ, some of the parameters are already customized, and that just makes life more difficult for the users.

(*) In some cases the instructions are there but are incomplete or out of date.</description>
		<content:encoded><![CDATA[<p>The worldviews are very different indeed. It&#8217;s a complex problem that has many roots.</p>

<p>1) Distributions are an attempt to freeze the world in a one entirely self consistent image. Packager&#8217;s priorities are completeness (no broken dependencies), self consistency, and stability. That&#8217;s why they prefer to package the latest stable version. But many times, the stable version of one particular program depends on the unstable version of a library (that&#8217;s only the first problem).</p>

<p>2) Packagers are also concerned about space, due to disk and bandwidth concerns. That means eliminating redundancy. Most packagers hate the idea of having multiple versions of a single library &#8220;just because&#8221; one app needs it. </p>

<p>3) Last but not least, packagers are concerned about security. Again, having multiple versions of a library tends to make their work harder due to the potential combinations and security threats.</p>

<p>That&#8217;s not a problem for conventional applications, because most applications evolve slowly, and even when that&#8217;s not the case, most users do not need the latest upgrades - unless there&#8217;s a security issue, which are addressed by minimal patches that only fix the problem and do not add any functionality (so dependencies keep relatively unchanged).</p>

<p>Development is about bringing new functionality at the fastest pace possible. It means that:</p>

<ul>
<li><p>Developers are comfortable about using the latest libraries, even if they are not considered stable (and that leads to problem #1 mentioned above).</p></li>
<li><p>Developers need a completely different environment to work than the one recommended  to run the final application.</p></li>
</ul>

<p>To make things more confusing, the world is not black and white. There&#8217;s a middle ground between the two. Trac, for instance - most of the times I can work with a older version, so I don&#8217;t mind installing the packaged one. And it will work out of the box for most users. But for other packages, it&#8217;s much harder to come up with a sensible installation  out of a generic package.</p>

<p>One of my particular gripes is with documentation. Take some package (for example, Twiki or Plone). Install it and try to customize it, following the instructions on the original website. Most of the times*, there are no instructions on how to install the &#8220;packaged version&#8221;, and some of the instructions that apply to the &#8220;tgz version&#8221; do not make sense or are not applicable to the packaged one. Locations differ, some of the parameters are already customized, and that just makes life more difficult for the users.</p>

<p>(*) In some cases the instructions are there but are incomplete or out of date.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Beck</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-64008</link>
		<dc:creator>Brian Beck</dc:creator>
		<pubDate>Wed, 17 Dec 2008 04:17:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-64008</guid>
		<description>* Marius said: "It’s also seductively convenient for deployment, although it places a rather large burden on the sysadmin to manually keep watch for security issues in hundreds of little libraries scattered in several isolated environments, and to backport the fix to all the different versions that are being used."

* Rudd-O said: "Marius: CORRECT!"

This as an admission that the packaging tools are NOT adequate for developer needs.  Why does having isolated environments preclude simple administration?  If the package management tools were in charge of managing environments, then they would know where to check for installed package versions, even if I had hundreds scattered about my home directory.</description>
		<content:encoded><![CDATA[<ul>
<li><p>Marius said: &#8220;It’s also seductively convenient for deployment, although it places a rather large burden on the sysadmin to manually keep watch for security issues in hundreds of little libraries scattered in several isolated environments, and to backport the fix to all the different versions that are being used.&#8221;</p></li>
<li><p>Rudd-O said: &#8220;Marius: CORRECT!&#8221;</p></li>
</ul>

<p>This as an admission that the packaging tools are NOT adequate for developer needs.  Why does having isolated environments preclude simple administration?  If the package management tools were in charge of managing environments, then they would know where to check for installed package versions, even if I had hundreds scattered about my home directory.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian Bicking</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-63814</link>
		<dc:creator>Ian Bicking</dc:creator>
		<pubDate>Tue, 16 Dec 2008 18:46:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-63814</guid>
		<description>I should say that I think packaging Trac (ideally with a package that includes nearly all its dependencies) seems quite reasonable.  That is an "application" in a way that makes sense.  Though even then it is difficult, as shown by Plone -- but because Plone involves lots of plugins/products (and while Plone moves along at a reasonably slow place, the plugins do not), packaging just doesn't keep up, and people end up reverting to methods better supported by upstream developers.  It *could* work, but I think it doesn't work because there's intermediaries.  Only if Plone itself had the infrastructure set up to create and distribute its own RPM or deb packages (and packages for any plugin anyone wants to make available) would it be a working system.  And though Trac is more interesting in its base state than Plone, it will suffer the same problems.

There's no reason Trac or any other application needs to depend on separately packaged Python libraries, and I do think that's specifically problematic.  But if `yum install mysite` doesn't involve any dependencies (except for very conservative packages) then that could work pretty well.  I'd still be pretty worried about migrations, though... but arguably developers should work harder at making data migration work with less interaction.  Having specific support for data migration (mostly meaning clear policies for how backup and migration and reverts should work) would also be an improvement for people creating packages.

Of course it's also common for web developers to have two versions of the exact same application simultaneously deployed on a single box.  I find the way Linux package managers deal with versions to simply be... dumb.  As in not-technically-advanced-in-a-way-that-actively-hurts.  There's also problems about the development build process being very different from the deployment process, which leads to bugs in one or the other.  These bugs cause a lot of social problems, as they aggravate the already difficult relationship between sysadmin and developer (a relationship that can be difficult even when they are the same person ;).

What we need is a great language *and* platform independent package manager that can work throughout the development and deployment lifecycle.  I know of no such thing at the moment.  (I thought [rpath](http://www.rpath.com/corp/) might be like that, but from what I can tell it is not.)</description>
		<content:encoded><![CDATA[<p>I should say that I think packaging Trac (ideally with a package that includes nearly all its dependencies) seems quite reasonable.  That is an &#8220;application&#8221; in a way that makes sense.  Though even then it is difficult, as shown by Plone &#8212; but because Plone involves lots of plugins/products (and while Plone moves along at a reasonably slow place, the plugins do not), packaging just doesn&#8217;t keep up, and people end up reverting to methods better supported by upstream developers.  It <em>could</em> work, but I think it doesn&#8217;t work because there&#8217;s intermediaries.  Only if Plone itself had the infrastructure set up to create and distribute its own RPM or deb packages (and packages for any plugin anyone wants to make available) would it be a working system.  And though Trac is more interesting in its base state than Plone, it will suffer the same problems.</p>

<p>There&#8217;s no reason Trac or any other application needs to depend on separately packaged Python libraries, and I do think that&#8217;s specifically problematic.  But if <code>yum install mysite</code> doesn&#8217;t involve any dependencies (except for very conservative packages) then that could work pretty well.  I&#8217;d still be pretty worried about migrations, though&#8230; but arguably developers should work harder at making data migration work with less interaction.  Having specific support for data migration (mostly meaning clear policies for how backup and migration and reverts should work) would also be an improvement for people creating packages.</p>

<p>Of course it&#8217;s also common for web developers to have two versions of the exact same application simultaneously deployed on a single box.  I find the way Linux package managers deal with versions to simply be&#8230; dumb.  As in not-technically-advanced-in-a-way-that-actively-hurts.  There&#8217;s also problems about the development build process being very different from the deployment process, which leads to bugs in one or the other.  These bugs cause a lot of social problems, as they aggravate the already difficult relationship between sysadmin and developer (a relationship that can be difficult even when they are the same person ;).</p>

<p>What we need is a great language <em>and</em> platform independent package manager that can work throughout the development and deployment lifecycle.  I know of no such thing at the moment.  (I thought <a href="http://www.rpath.com/corp/">rpath</a> might be like that, but from what I can tell it is not.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toshio Kuratomi</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-63810</link>
		<dc:creator>Toshio Kuratomi</dc:creator>
		<pubDate>Tue, 16 Dec 2008 18:32:43 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-63810</guid>
		<description>jorge: Distributions handle the CherryPy2/3 issue with various means.  last I checked in Debian they have an explicit Conflict so that CherryPy3 and Turbogears-1 apps cannot be installed together on the same box.

In Fedora we've made use of the multiple version functionality of setuptools (and run up against limitations in its design) so that you can have both versions of CherryPy installed at the same time.

Note that for a distribution POV, we'd love to have a versioning scheme that works flawlessly.  Debian, where the idea of doing compatible python modules was rejected, versions each of their C library packages so you can have separate versions.  Fedora, which doesn't like to do them for maintainability reasons (what do we do when a security issue arises in CherryPy2 and the devs say, "CP2 is no longer supported, we're only releasing a security fix for CherryPy3"?), will do compat packages like the CherryPy2 package when the value for keeping the apps outweighs the maintainance costs.  ATM, only strategies like psycopg use (changing the module name from psycopg to psycopg2 on a major, API changing update) work 100%.  The setuptools method has promise, though... if only it would mature a bit more.</description>
		<content:encoded><![CDATA[<p>jorge: Distributions handle the CherryPy2/3 issue with various means.  last I checked in Debian they have an explicit Conflict so that CherryPy3 and Turbogears-1 apps cannot be installed together on the same box.</p>

<p>In Fedora we&#8217;ve made use of the multiple version functionality of setuptools (and run up against limitations in its design) so that you can have both versions of CherryPy installed at the same time.</p>

<p>Note that for a distribution POV, we&#8217;d love to have a versioning scheme that works flawlessly.  Debian, where the idea of doing compatible python modules was rejected, versions each of their C library packages so you can have separate versions.  Fedora, which doesn&#8217;t like to do them for maintainability reasons (what do we do when a security issue arises in CherryPy2 and the devs say, &#8220;CP2 is no longer supported, we&#8217;re only releasing a security fix for CherryPy3&#8243;?), will do compat packages like the CherryPy2 package when the value for keeping the apps outweighs the maintainance costs.  ATM, only strategies like psycopg use (changing the module name from psycopg to psycopg2 on a major, API changing update) work 100%.  The setuptools method has promise, though&#8230; if only it would mature a bit more.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Toshio Kuratomi</title>
		<link>http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/comment-page-1/#comment-63805</link>
		<dc:creator>Toshio Kuratomi</dc:creator>
		<pubDate>Tue, 16 Dec 2008 18:19:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/2008/12/14/a-few-corrections-to-on-packaging/#comment-63805</guid>
		<description>ian:  I'm very happy to see you've hit the nail on the head with this:

    There’s also a lot of conflicts between Setuptools and package
    maintainers. This is kind of a proxy war between developers and sysadmins,
    who have very different motivations.[1]_

If everyone would keep in mind that there's more than one audience for different stages in an app's lifetime, then I think even Rudd-O and you could at least see how your views interlock.

.. _[1]: Note that instead of seeing this as a war by proxy, I look at it as a contract negotiation with a mediator.  The two parties involved are system administrators and developers.  The poor packagers are the mediator that has to carry requirements and messages from one side to the other.

## The Developer

    $ virtualenv mysite
    $ cd mysite
    $ svn co http//mycompany.com/svn/configs/mysite etc/
    $ pip -E . install -r etc/requirements.txt
    $ ./bin/paster serve etc/development.ini

There's many many ways to make this work using packaging tools.  However, the appropriate methods for the different audiences are not the same.  If the audience is the developer who has just installed a new workstation and needs to start working on the next generation of the website using virtualenv is the correct thing to do.  However, what it's doing is creating a customized environment for running a particular environment.  This is anathema to making a system administrators job easy.

## The Deployment Engineer

    $ yum install --disable-repo='*' --enable-repo='rhel-6*' --installroot=/srv/testbed/ mysite-0.1-0.noarch.rpm
    $ cd /srv/testbed/
    $ rm -rf mysite
    $ svn co http//mycompany.com/svn/applications/mysite
    $ PYTHONPATH=/srv/testbed/usr/lib/python2.5:/srv/testbed/usr/lib/python2.5/site-packages:"$PYTHONPATH"

After the developer has gotten the application to a certain level of functionality some engineer has to start making sure it runs the platforms the company cares to support (either internally or externally).  They can create a local install in a directory using the platform's package repositories and checkin changes to the application code to support that platform.  In open source, the Developer and Packager often share the Deployment Engineer role.

## The Packager

    $ wget http//mycompany.com/releases/mysite-1.0.tar.gz
    $ vim mysite.spec
    $ rpmbuild mysite.spec

The packager may be part of mycompany or a Linux distribution but they are building the software specifically for a distribution and therefore care about the conventions that a distribution uses to make their users' (system administrators) lives easier.

## The System Administrator

    # yum install mysite

The ideal for the system administrator is to run a single command that downloads and installs the application and all its dependencies.  By having the application inside a distro package they also have the ability to do these things:

    Check what hotfixes were applied:
    # rpm -V mysite mydependency
    Check the version:
    # rpm -q mysite mydependency
    Get security updates for mysite, dependencies, and the whole server:
    # yum update
    Install the same setup onto a new server
    # yum install mysite

## Notes

Not all applications have all audiences explicitly.  There's many web applications that are not meant to be distributed, for instance.  However, even in a one-company-only application, it's important to remember that the system administrator audience exists even if it is the same person as the developer.  If your web site
becomes popular, you may need to start load balancing it.  Your current server may go belly up.  The operating system you're using may reach its end of life and you have to port to a new version.  You may leave the company or your company may grow and hire a system admin.

[ed note: URLs mangled to keep WordPress from mangling them more]</description>
		<content:encoded><![CDATA[<p>ian:  I&#8217;m very happy to see you&#8217;ve hit the nail on the head with this:</p>

<pre><code>There’s also a lot of conflicts between Setuptools and package
maintainers. This is kind of a proxy war between developers and sysadmins,
who have very different motivations.[1]_
</code></pre>

<p>If everyone would keep in mind that there&#8217;s more than one audience for different stages in an app&#8217;s lifetime, then I think even Rudd-O and you could at least see how your views interlock.</p>

<p>.. _[1]: Note that instead of seeing this as a war by proxy, I look at it as a contract negotiation with a mediator.  The two parties involved are system administrators and developers.  The poor packagers are the mediator that has to carry requirements and messages from one side to the other.</p>

<h2>The Developer</h2>

<pre><code>$ virtualenv mysite
$ cd mysite
$ svn co http//mycompany.com/svn/configs/mysite etc/
$ pip -E . install -r etc/requirements.txt
$ ./bin/paster serve etc/development.ini
</code></pre>

<p>There&#8217;s many many ways to make this work using packaging tools.  However, the appropriate methods for the different audiences are not the same.  If the audience is the developer who has just installed a new workstation and needs to start working on the next generation of the website using virtualenv is the correct thing to do.  However, what it&#8217;s doing is creating a customized environment for running a particular environment.  This is anathema to making a system administrators job easy.</p>

<h2>The Deployment Engineer</h2>

<pre><code>$ yum install --disable-repo='*' --enable-repo='rhel-6*' --installroot=/srv/testbed/ mysite-0.1-0.noarch.rpm
$ cd /srv/testbed/
$ rm -rf mysite
$ svn co http//mycompany.com/svn/applications/mysite
$ PYTHONPATH=/srv/testbed/usr/lib/python2.5:/srv/testbed/usr/lib/python2.5/site-packages:"$PYTHONPATH"
</code></pre>

<p>After the developer has gotten the application to a certain level of functionality some engineer has to start making sure it runs the platforms the company cares to support (either internally or externally).  They can create a local install in a directory using the platform&#8217;s package repositories and checkin changes to the application code to support that platform.  In open source, the Developer and Packager often share the Deployment Engineer role.</p>

<h2>The Packager</h2>

<pre><code>$ wget http//mycompany.com/releases/mysite-1.0.tar.gz
$ vim mysite.spec
$ rpmbuild mysite.spec
</code></pre>

<p>The packager may be part of mycompany or a Linux distribution but they are building the software specifically for a distribution and therefore care about the conventions that a distribution uses to make their users&#8217; (system administrators) lives easier.</p>

<h2>The System Administrator</h2>

<pre><code># yum install mysite
</code></pre>

<p>The ideal for the system administrator is to run a single command that downloads and installs the application and all its dependencies.  By having the application inside a distro package they also have the ability to do these things:</p>

<pre><code>Check what hotfixes were applied:
# rpm -V mysite mydependency
Check the version:
# rpm -q mysite mydependency
Get security updates for mysite, dependencies, and the whole server:
# yum update
Install the same setup onto a new server
# yum install mysite
</code></pre>

<h2>Notes</h2>

<p>Not all applications have all audiences explicitly.  There&#8217;s many web applications that are not meant to be distributed, for instance.  However, even in a one-company-only application, it&#8217;s important to remember that the system administrator audience exists even if it is the same person as the developer.  If your web site
becomes popular, you may need to start load balancing it.  Your current server may go belly up.  The operating system you&#8217;re using may reach its end of life and you have to port to a new version.  You may leave the company or your company may grow and hire a system admin.</p>

<p>[ed note: URLs mangled to keep WordPress from mangling them more]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.807 seconds -->
