<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Allogro™ &#187; PuTTY</title>
	<atom:link href="http://www.allogro.com/main/tag/putty/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.allogro.com/main</link>
	<description>Business Networking Specialists</description>
	<lastBuildDate>Sun, 13 Sep 2009 08:51:30 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>An easy way to keep plugins and themes updated in multiple WordPress installations</title>
		<link>http://www.allogro.com/main/2008/03/09/51/</link>
		<comments>http://www.allogro.com/main/2008/03/09/51/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 03:16:36 +0000</pubDate>
		<dc:creator>Will Murray</dc:creator>
				<category><![CDATA[Articles - Whitepapers]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[ZenPhoto]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[file management]]></category>
		<category><![CDATA[Filezilla]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[PuTTY]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shortcut]]></category>
		<category><![CDATA[symlink]]></category>
		<category><![CDATA[theme]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[tweak]]></category>

		<guid isPermaLink="false">http://www.allogro.com/main/2008/03/09/51/</guid>
		<description><![CDATA[If you maintain multiple WordPress blogs, you have probably been frustrated by how tedious it is to update plug-ins and themes on each blog every time there is an update. By following my detailed step-by-step instructions, you can harness the power of Linux's symbolic links (symlinks) to setup one central shared repository of plug-ins and another for themes. All your WordPress installations can then be pointed to the one repository, and updates become much easier. Suggestions for how to fix common implementation problems are also included. Plug-in authors may be interested in learning more about this technique, since it can break some plug-ins that use hard coded pathnames.]]></description>
			<content:encoded><![CDATA[<!-- google_ad_section_start -->Copyright &copy; 2010 <a href="http://www.allogro.com/main">Will Murray</a>. Visit the original article at <a href="http://www.allogro.com/main/2008/03/09/51/">http://www.allogro.com/main/2008/03/09/51/</a>.<br /><p><small><a title="Start" id="Start" name="Start"></a>In this article: <a href="http://www.allogro.com/main/2008/03/09/51/#Introduction">Introduction</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Prerequisites">Prerequisites</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Structure">How my file system is structured</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Creating">Creating the repositories</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Linking">Linking to the repositories</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Recap">Recap</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Problems_and_fixes">Common problems and fixes</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Maintaining">Maintaining your repositories</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Other_systems">Using this technique with ZenPhoto and other CMS systems</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Resources">Additional resources</a>, <a href="http://www.allogro.com/main/2008/03/09/51/#Feedback">Comments and feedback</a></small></p>
<h3><a title="Introduction" id="Introduction" name="Introduction"></a>Introduction</h3>
<p><a href="http://wordpress.org/">WordPress</a> is a wonderful blogging platform and, in certain situations, a good choice for a general content management system (CMS). It is easy to end up with several parallel installations of WordPress&mdash;one for each major topic you want to discuss. Everything works great at first, but after a while, the constant barrage of updates to the main application, various plug-ins, and the themes becomes something of a management nightmare. The more blogs you operate, the more time is spent maintaining the blogging environment and the less that is available to actually blog.</p>
<p>If you host your WordPress blog on a Linux-based server (BSD or most any other Unix-like operating system should be able to do this equally well) and you have &#8220;shell access&#8221;, I might have a way to ease your pain. In a nutshell, you will create a central repository containing every WordPress plug-in that you use in all of your blogs. You create a separate repository containing each of your themes. Next, you create symbolic links (think of them as shortcuts; more about them in just a moment) from each installation of WordPress to your central repositories. From that point on, you only have to update your plug-ins and themes once, and the change will take effect instantly across all your sites. It&#8217;s a very slick trick!</p>
<p>This trick works probably works well on many other CMS systems that use plug-ins and themes; I have started using it with my <a href="http://www.zenphoto.org/">ZenPhoto</a> installations, too. In addition to helping keep things updated, it also saves disk space since you are only maintaining a single copy of the files on your server.</p>
<p>I will provide step-by-step instructions and some quirks for which you need to be aware. One quick word of caution: mistakes, bugs, and goofs can also instantly affect all your sites, so be very careful as you work, take your time, and always backup your files and databases before you start.<br />
<span id="more-51"></span></p>
<h3><a title="Prerequisites" id="Prerequisites" name="Prerequisites"></a>Prerequisites</h3>
<p>Before we get started, make sure that your system meets the following requirements:</p>
<ul>
<li>All of your WordPress installations should be hosted at the same Internet Service Provider, and they probably have to be on the same physical server (though not necessarily with some ISPs depending on how they configure things). If the server is something other than Linux or Unix-like system, they may even have to be on the same physical hard disk for this to work. Ideally, they should all be hosted under the same user account, but if not, they different accounts need to be in the same Unix security group and permissions have to be granted for the whole group, not just the owner (that&#8217;s beyond the scope of this article).</li>
<li>You must have shell access to your server. This means that you can access a command prompt (a screen that looks like a DOS window) after you login, and you can type commands that directly affect your server. These instructions assume that your server is a Linux system, though FreeBSD and other Unix-like systems should all work similarly. While Mac OS has similar features, I think the commands are somewhat different, so you will need to adapt these instructions if your server is a Mac. Windows is finally getting to the point that this type of linking may soon be available, but as of Server 2003, this method will not work on a Windows server.</li>
<li> It is also very helpful if you have some basic familiarity with your server&#8217;s shell and the structure of the file system on the server. These instructions are based on the way things are setup on my Internet Service Provider&#8217;s servers, and your ISP might do things a little differently. If you get lost or confused midway through the process, you will want to be experienced enough to figure out how to undo the things you did so far.</li>
<li>If you need a program to connect to your shell account, I recommend PuTTY. It&#8217;s a little overwhelming with all the options it has, but you can pretty much ignore them, enter the address to your server, and hit connect. Voilà! You should see a prompt to enter your username and password. If your ISP supports it, I recommend connecting using SSH, which provides an encrypted connection for better security (though it&#8217;s beyond the scope of this article to explain exactly how you do that).
	</li>
<li>I find that some things are easier to do using a good FTP program (I love Filezilla for this purpose), and other things have to be done using the shell. In particular, I like to create the central repositories by clicking and dragging files around in Filezilla rather than typing lots of commands in the shell.</li>
<li>Your server has to support symbolic links (also known as &#8220;symlinks&#8221; or &#8220;soft links&#8221;). Under most Linux/Unix-like operating systems, you use the command <code>ln -s</code> to create the symlinks. To test if you have this command, type <code>ln --help</code> from the shell; you should see the help screen for the <code>ln</code> command. If you get an error and did not make a typo, your system may not support symlinks.</li>
</ul>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Structure" id="Structure" name="Structure"></a>How my file system is structured</h3>
<p>Before I go in-depth with instructions, I&#8217;ll briefly explain how files are arranged on my ISP&#8217;s server. Your ISP hopefully arranges things for you in a similar manner.</p>
<p>When I login to my command shell and use the <code>ls</code> command (<code>ls</code> is short for &#8220;list&#8221;, which brings up a list of all the files in the current directory), I see a number of directories&mdash;one for each domain that we host (<tt>allogro.com</tt>, <tt>willmurray.name</tt>, etc.). The actual content of each website is contained within its directory (i.e., the directory &#8220;<tt>allogro.com</tt>&#8221; contains all the files for the <a href="http://www.allogro.com/">allogro.com</a> web site and the directory &#8220;<tt>willmurray.name</tt>&#8221; contains everyting for the <a href="http://willmurray.name/">willmurray.name</a> site.</p>
<p>If I print the working directory (<code>pwd</code>), I see the full path from the root of the server (the top of the file system) all the way to my account&#8217;s home. In my case, the path is: <tt>/home/acanthus</tt>. Our sites are hosted with <a href="http://www.dreamhost.com/r.cgi?53656">DreamHost</a>, a very large ISP based in Los Angeles, California (some people hate them, but we have been extremely happy with them for over 3.5 years). In this case, the first slash is the root of the file system. <tt>home/</tt> is the place that all the hosting customers&#8217; accounts are stored. <tt>acanthus</tt> is the &#8220;home directory&#8221; of our account. The <tt>allogro.com</tt> and <tt>willmurray.name</tt> directories reside underneath the <tt>acanthus</tt> directory.</p>
<p>The home directory is a special place, because it is outside of any website and not directly accessible from the web. It&#8217;s a good place to store things that should not be peeked into by curious visitors or overzealous search spiders. In fact, unless DreamHost really screwed up or I created a link into the home directory, it would be a safe place to store passwords and other fairly sensitive information. It is also an ideal place to store our shared repositories for WordPress.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Creating" id="Creating" name="Creating"></a>Creating the repositories</h3>
<h4>Repository directories</h4>
<p>You will want to start by creating your repositories someplace inaccessible to casual web visitors. If you have a home directory like I described above, that&#8217;s perfect and recommended. If not, you could create a new directory and try to protect it using <tt>.htaccess</tt> and <tt>robots.txt</tt> files along with other techniques to keep people out of it (though this is not a very secure method, and it could leave your repositories subject to attack).</p>
<p>Using Filezilla, I created a directory named <tt>shared</tt> (the full path is <tt>/home/acanthus/shared</tt>) to hold all the files that are shared between different web sites. Under that directory, I created two more directories: <tt>wp_plugins</tt> and <tt>wp_themes</tt> (that&#8217;s <tt>/home/acanthus/shared/wp_plugins</tt> and <tt>/home/acanthus/shared/wp_themes</tt>). In each case, I set the file attributes of these directories to give the owner full permissions (rwx) and the group and public permissions to read and execute (r-x, don&#8217;t want visitors to be able to make changes). (If you prefer numerical permissions, that&#8217;s 755.)</p>
<p><tt>wp_plugins</tt> will become the home to all of your WordPress plug-ins. If you use certain plug-ins in one blog, but not in others, go ahead and add the plug-in to this repository. Within WordPress you will enable only the plug-ins you want to use; any that you don&#8217;t want to use should just remain disabled. <tt>wp_themes</tt> is the same deal, except that you store your themes there (that should be self-evident, I hope).</p>
<h4>Best practices</h4>
<p>Be sure to disable write access to plug-in and theme files and directories unless they specifically require it. For directories, only the owner should have write access (755). For files, you also want to disable the execute permission (644). Check the documentation for each plug-in to see if it needs write access. If your plug-in breaks or has errors about being denied access, you probably need to loosen the restrictions a bit on a directory or some files for the plug-in to function. Very few themes seem to need write access (only one that I&#8217;ve ever encountered).</p>
<p>I highly recommend that you grab fresh copies of each plug-in and theme that you plan to use. This way you won&#8217;t copy bugs over from existing installations and you are certain to have the latest (and hopefully bug-free) version of the software available. Alternately, you can use the shell to copy (<code>cp</code>) or move (<code>mv</code>) existing directories into your new repositories (though I don&#8217;t recommend doing so, and it can leave your site broken until you complete the whole change). You could also use Filezilla to download your plug-ins and themes directories from your current WordPress installation(s) and upload them (thus creating a copy) to your new repositories. If you have heavily customized a plug-in or theme, this may be your best option.</p>
<p>When I upload plug-ins, I usually change the directory name to include the version number. So, if you are uploading version 1.2 of the <tt>myplugin</tt> plug-in, I&#8217;d rename the directory to <tt>myplugin.1.2</tt>. Some plug-in authors do this for you automatically, while others try to make it easy for people to upgrade by keeping the directory names the same. In a shared repository, though, this can actually cause you problems. One caveat is that some plug-in authors hard-code their directory names in their plug-ins (shame on them!), and renaming the directory breaks the plug-in. In that case, you will either have to hack the plug-in to use the updated directory name, leave the directory name unchanged, or <s>pester</s>, er, petition the author to not hard code the directory name in future releases.</p>
<p>Why worry about version numbers that way? Well, I like to test new versions of plug-ins on a low-traffic blog before introducing them to one of the more active blogs. Remember that when you make a change in the repository, it immediately affects ALL of your blogs. So by overwriting a plug-in with a newer version, you are essentially upgrading all your blogs simultaneously. If there&#8217;s a glitch in the new plug-in, then all your blogs will be affected instead of just one. By uploading the plug-ins to different directories, you can disable and enable plug-ins on a per-blog basis. Then, once all your blogs are using the new version, you can safely delete the old version from your server to save space.</p>
<p>Most plug-ins also require you to disable them before you install the newer files, and then re-enable them after everything is in place. With a shared repository, that means you have to go to each blog and disable the old plug-in, then upload, and then go back to each blog to re-enable it. I prefer the flexibility of making changes one blog at a time if I want.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Linking" id="Linking" name="Linking"></a>Linking to the repositories</h3>
<p>So now that you have your central repositories all setup with shiny new copies of all your plug-ins and themes, how do you use them? It&#8217;s pretty easy, even if the command you type is a little cryptic.</p>
<p>Note: I recommend starting and fully testing this on your lowest-activity blog first to get the hang of it and minimize downtime on your busiest blogs.</p>
<h4>Preparing WordPress</h4>
<p>Start by logging into WordPress and disabling all of your plug-ins (there is a link at the bottom of the page to disable all the plug-ins at once). This is important since the path to the plug-ins and even the versions might be different when we are finished than what is in use now.</p>
<h4>Locate your repositories</h4>
<p>After that is finished, login to your ISP&#8217;s shell prompt using PuTTY or your favorite program.</p>
<p>Print the working directory (<code>pwd</code> is the command to do this). If your ISP includes that information in the command prompt, so much the better! Otherwise, jot down the path to your home directory (the place you are when you first login). In my example, that will be <tt>/home/acanthus</tt>.</p>
<p>List the directory (<code>ls</code> is the basic command, though I find <code>ls -lp</code> to be a more useful view). Hopefully you will see your &#8220;<tt>shared/</tt>&#8221; directory (or whatever you named the directory that holds your repositories). Next, list your shared directory (<code>ls -lp shared</code> is the command I would use), and be sure that you can see your repositories within it.</p>
<p>Now I need to go to the <tt>wp-content</tt> directory of my WordPress installation. I would type <code>cd allogro.com</code> to change directories to the allogro.com site. I keep the blog under a directory named <tt>main</tt>, so next I would <code>cd main</code>. The <tt>wp-content</tt> is inside this directory, so I would <code>cd wp-content</code>. Note: I could have strung that all together into a single command (<code>cd allogro.com/main/wp-content</code>), but I usually prefer to go one level at a time so I don&#8217;t make mistakes.</p>
<p>Listing the directory (<code>ls -lp</code>) shows that I am, in fact, in the correct place, and there are folders named &#8220;<tt>plugins</tt>&#8221; and &#8220;<tt>themes</tt>&#8221; already here. That&#8217;s good! We need to rename those directories to get them out of the way of our new links. We do that by moving the directories to the same location with a different name (a fairly round-about way of doing it, but it works). Enter the commands <code>mv plugins plugins.disabled</code> and then <code>mv themes themes.disabled</code>. At some point in the future after everything is working, remember to come back and delete these disabled directories.</p>
<h4>Create the symlinks</h4>
<p>Now it is time to create the symlinks to your shared repositories. This is where you need to enter the full pathname to your folders, so start by verifying that you can see all your shared plug-ins: <code>ls /home/acanthus/shared/wp_plugins</code> (substitute your own path, of course). The command to create the symlink is almost identical: <code>ln -s /home/acanthus/shared/wp_plugins plugins</code> (again, substituting your own path).</p>
<p>Let me explain that carefully. <code>ln -s</code> is the command to create a symbolic link. Be sure to use lowercase letters, because uppercase will not work correctly. Also, be sure to include the &#8220;-s&#8221;, or the system will attempt to create a hard link instead of a symbolic link (which is <em>not</em> what you want), and will likely generate an error on most systems (unless you are logged in as &#8220;root&#8221; on your own server, and then you might cause yourself problems). Next, you give the full pathname to the target (the shared plug-ins repository). You technically <em>could</em> use relative paths (if you know how those work), but full paths seem to be more stable for plug-ins. The final part is the name of your new link. Since WordPress expects your plug-ins folder to be named <tt>plugins</tt>, that&#8217;s what we used.</p>
<p>If you did not get an error message, when you list the directory (<code>ls -lp</code>), you should see that the entry for <tt>plugins</tt> looks something like this: <tt>plugins -> /home/acanthus/shared/wp_plugins/</tt> (with the file attributes set to give everyone full access as indicated by &#8220;lrwxrwxrwx&#8221;, but that&#8217;s not a problem since the permissions on the repository are what matter, not the ones on the symlink). This means you have successfully created a symlink to your repository folder. List the contents of that folder (<code>ls plugins</code>) and it should exactly match the contents of the repository, since they are actually the same folder just with a new link.</p>
<p>Now it&#8217;s time to link to your themes: <code>ln -s /home/acanthus/shared/wp_themes themes</code> (once again, substituting your own path for mine).</p>
<h4>Configure and test WordPress</h4>
<p>Go back to the administration area of your WordPress blog. Under presentation, you should see a list of all the themes you uploaded to the shared themes repository. If you do not see any difference, you might need to clear your browser&#8217;s cache and refresh the page. Simply select your desired theme to activate it. Even if your desired theme came up automatically, it might be a good idea to select a different theme momentarily, and the reselect your desired theme. This sometimes fixes weird problems I&#8217;ve encountered, so doing it right now rather than later makes sense. View the blog and make sure things look right.</p>
<p>You might have to reconfigure your widgets since you changed themes. Some widgets might not work or be available until you activate a related plug-in.</p>
<p>After you are sure your theme is working, go back to the plug-in administration for your blog and enable one or two plug-ins that you can use to easily verify your plug-in repository is working. If those two look good, you can enable one or two more plug-ins and then test them. Repeat until all the desired plug-ins are verified.</p>
<p>If after enabling a plugin you see warnings that a path could not be found, and if you renamed the plug-ins&#8217; directories to include their version number, you might have to rename the plug-in directory back to its original name to get the plug-in to work again.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Recap" id="Recap" name="Recap"></a>Recap</h3>
<p>These are the steps anytime you want to have WordPress use your shared repositories instead of a stand-alone installation. If you have followed my instructions all the way so far, then you will repeat the following steps for each of your remaining blogs. Again, I recommend working in order from the blog with the least traffic to the one with the most to minimize downtime for your visitors as you become familiar with the process.</p>
<p>This recap assumes that you have already created your shared repositories and just need to link to them now.</p>
<ol>
<li>Disable all plug-ins in WordPress.</li>
<li>In the shell, navigate to the <tt>wp-content</tt> directory of your blog (<i>e.g.</i>, <code>cd willmurray.name/blog/wp-content</code>; use your own pathname).</li>
<li>Rename the current <tt>plugins</tt> and <tt>themes</tt> directories (<i>e.g.</i>, <code>mv plugins plugins.disabled</code> and <code>mv themes themes.disabled</code>).</li>
<li>Create the symlinks (<i>e.g.</i>, <code>ln -s /home/acanthus/shared/wp_plugins plugins</code> <code>ln -s /home/acanthus/shared/wp_themes themes</code>; use your own pathnames)</li>
<li>In WordPress, activate your theme (if it&#8217;s already active, change to another one, then change back to your desired theme).</li>
<li>Reconfigure Widgets if necessary.</li>
<li>Activate one or two plug-ins at a time and test as you go</li>
</ol>
<p>Note: After you have a plug-in working in one copy of your blog, it should work in all copies.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Problems_and_fixes" id="Problems_and_fixes" name="Problems_and_fixes"></a>Common problems and fixes</h3>
<h4>Redirect URLs generated by plug-ins to the correct subdirectory using .htaccess</h4>
<p>Some of my blogs are at the root of the site (www.example.com/), while others are in subdirectories (www.example.com/blog or www.example.com/main). Some plug-ins assume that your site is at the root, and they do not work correctly otherwise. I have been able to fix this in most cases by adding a redirect in the root-level <tt>.htaccess</tt> file of sites where WordPress is not at the root, and redirect requests for <tt>/wp-content</tt> to the appropriate subdirectory (<tt>/blog/wp-content</tt> or <tt>/main/wp-content</tt>).</p>
<h4>Relative paths leading outside the plugins directory cause problems</h4>
<p>Some plug-ins use relative paths to files outside of the <tt>wp-content/plugins</tt> folder (i.e., they try to access a file in the main WordPress installation directory). Without editing the plug-in, there&#8217;s really no way to fix this problem. If you are up to hacking the plug-in, you could add a new variable at the top of your theme&#8217;s <tt>index.php</tt> file that gives the full pathname to your local <tt>plugins</tt> directory (well, it&#8217;s actually the symlink to your shared repository, but WordPress doesn&#8217;t know that or care). For example, you could add the following to your <tt>index.php</tt><br />
<code lang="php"><br />
< ?php $SHARED_PLUGINS="/home/acanthus/allogro.com/main/wp-content/plugins/"; ?><br />
</code><br />
Then go though the plug-in files and add the <tt>$SHARED_PLUGINS</tt> variable in front of each reference to a relative path. Example:<br />
<code lang="php"><br />
/*	Old code:<br />
require_once('../../wp-example.php);<br />
	New code: */<br />
require_once($SHARED_PLUGINS . '../../wp-example.php);<br />
</code></p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Maintaining" id="Maintaining" name="Maintaining"></a>Maintaining your repositories</h3>
<p>The whole point of this exercise was to make it much easier to keep your plug-ins and themes updated across multiple sites. (Oh yeah! That&#8217;s why I just went through all of this.) Here&#8217;s how easy it is to update everything nearly instantly&#8230;</p>
<p>When you are in the plug-ins administration area and notice that a plug-in has an available update, go fetch it, extract it, and rename the directory to include the version number of the release. Upload the plug-in to your repository using FTP. Refresh the plug-ins administration page. You should see both the old version of the plug-in (still active) and the new version (not yet active). Disable the old version. Enable the new version. Test.</p>
<p>If something broke, it&#8217;s probably because the plug-in has its directory name hard-coded within it (not a good thing for several reasons). You will have to disable the plug-in in ALL your blogs, then replace the old version with the newer version as instructed by the author. Then you can enable the plugin in each blog. Not as elegant, but still only one upload to worry about.</p>
<p>When you are happy that everything worked, go to your other blogs whenever you want, and disable the old version and enable the new version. There&#8217;s no extra uploading to do. If you need to tweak a plug-in for any reason, you only have to do it once, and the tweak takes effect instantly on all of your blogs.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Other_systems" id="Other_systems" name="Other_systems"></a>Using this technique with ZenPhoto and other CMS systems</h3>
<p>The basic principles are the same no matter what system you use. The only challenges are (1) how self-contained plug-ins are (if they frequently look for files outside of the <tt>plugins</tt> folder, then there is a high chance it won&#8217;t work), and (2) how spread-out the files are (the more spread out, the more symlinks you have to create and maintain).</p>
<p>With ZenPhoto, I wanted to add my own CSS file to the default theme. I had to symlink directly to my new CSS file (same process, except you enter the full path and filename, not just the pathname) from within the styles directory of the theme. Again, it&#8217;s the same philosophy, but a little more work. But, when I make a change in that one style sheet, the three sites that share that sheet are all updated instantly. Very cool.</p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Resources" id="Resources" name="Resources"></a>Additional resources</h3>
<p><strong>Articles:</strong></p>
<ul>
<li>&#8220;Symbolic link.&#8221; <cite>Wikipedia, The Free Encyclopedia.</cite> 6 Mar 2008, 18:31 UTC. Wikimedia Foundation, Inc. 10 Mar 2008 &lt;<a href="http://en.wikipedia.org/w/index.php?title=Symbolic_link&#038;oldid=196335114">http://en.wikipedia.org/w/index.php?title=Symbolic_link&#038;oldid=196335114</a>&gt;.</li>
</ul>
<p><strong>Content management systems:</strong></p>
<ul>
<li><a href="http://wordpress.org/">WordPress</a> is a state-of-the-art semantic personal publishing platform with a focus on aesthetics, web standards, and usability</li>
<li><a href="http://www.zenphoto.org/">ZenPhoto</a>, a simpler web photo gallery</li>
</ul>
<p><strong>Software tools:</strong></p>
<ul>
<li><a href="http://filezilla-project.org/">FileZilla</a>, the free FTP client</li>
<li><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a>: a free telnet/ssh client</li>
</ul>
<p><strong>Service providers:</strong></p>
<ul>
<li><a href="http://www.dreamhost.com/r.cgi?53656">DreamHost</a> Internet service provider</li>
<li><a href="http://sacramentoonlineservices.com/">Sacramento Online Services</a> for sensible domain name and e-mail prices</li>
</ul>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<h3><a title="Feedback" id="" name="Feedback"></a>Comments and feedback</h3>
<p>I would appreciate any feedback that you might have. If I left any steps out, or if I could have explained something more clearly, please let me know.</p>
<p>If you use the technique, please leave me a comment. You are also welcome to link to one of your sites that use it.</p>
<p>If you are a plug-in author who has updated your plug-in to work more gracefully with this technique, please let us know!</p>
<hr />
<small><em><a href="http://willmurray.name/blog/contact_will/">Will Murray</a> is a <a href="http://willmurray.name/blog/">blogger</a> and network integration consultant with <a href="http://www.allogro.com/">Allogro&trade; Business Networking Solutions</a>. He has been an Internet trailblazer since 1991, and has a passion for technology, communication, and new media.</em></small></p>
<p style="font-size:smaller;margin:6pt 0 12pt;text-align:right;"><i><a href="http://www.allogro.com/main/2008/03/09/51/#Start">&ndash;Top&ndash;</a></i></p>
<!-- google_ad_section_end -->]]></content:encoded>
			<wfw:commentRss>http://www.allogro.com/main/2008/03/09/51/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
	</item>
	</channel>
</rss>
