<?php
	#*****************************************************************************
	#
	# en_status.inc
	#
	# Author: 		Denis Roy
	# Date:			2004-09-10
	#
	# Description: Infrastructure status UI
	#
	# HISTORY:
	#
	#****************************************************************************

	include("../html/header.php");

	$Menu = new Menu("en");

	include("../modules/menu.php");


?>
		<br />
		<td width="100%" valign="top" class="normal">
			<font class="large_title">How do I?</font><br /><br />
					
			<h2>Website</h2>
			<ul>
				<li><a href="#website.websetup">Setup my project website?</a></li>
				<li><a href="#website.phoenix">Author web pages using the Phoenix method?</a></li>
				<li><a href="#website.db.bugs">Access the Bugzilla database using PHP?</a></li>
				<li><a href="#website.db">Use a database for my website?</a></li>
				<li><a href="#website.largefiles">I need to put a large file on my website.  How should I do this?</a></li>
				<li><a href="#website.php">Use PHP on my website?</a></li>
				<li><a href="#website.php.optimize">Optimize my PHP code for large-scale use?</a></li>
			</ul>
			<h2>CVS</h2>
			<ul>
				<li><a href="#cvs.connect">Connect to Eclipse CVS?</a></li>
				<li><a href="#cvs.proxy">Connect to Eclipse CVS when PSERVER and/or EXTSSH are firewalled?</a></li>
				<li><a href="#cvs.delete">Delete files from CVS?</a></li>
				<li><a href="#cvs.groups">Manage UNIX groups for CVS access?</a></li>
			</ul>
			<h2>Bugzilla</h2>
			<ul>
				<li><a href="#bugzilla.component">Create a new Component/Version/Milestone/Target?</a></li>
			</ul>
			<h2>Downloads</h2>
			<ul>
				<li><a href="#downloads.put">Put files on the download server?</a></li>
				<li><a href="#downloads.archives">Move files to archive.eclipse.org?</a></li>
				<li><a href="#downloads.mirrors">See which mirrors are mirroring my files?</a></li>
				<li><a href="#downloads.findamirror">Use the Find a Mirror script?</a></li>
				<li><a href="#downloads.updatesite">Create an Update Site?</a></li>
				<li><a href="#downloads.stats">See download statistics?</a></li>
				<li><a href="#downloads.quotas">View my disk space quota?</a></li>
				<li><a href="#downloads.increasequotas">Increase my disk space quota?</a></li>
				<li><a href="#downloads.sign">Sign my plugins/ZIP files?</a></li>
			</ul>
			<h2>Builds</h2>
			<ul>
                <li><a href="#builds.buildserver">Access/use the Eclipse Build server?</a></li>
  			</ul>
			<h2>Mailing Lists</h2>
			<ul>
				<li><a href="#mailinglist.setup">Setup a new mailing list?</a></li>
				<li><a href="#mailinglist.viewmembers">View list members?</a></li>
			</ul>
			<h2>Eclipse Wiki</h2>
			<ul>
                <li><a href="#wiki.createpage">Create a new page in the Eclipse Wiki</a></li>
  			</ul>
            <h2>Eclipse servers</h2>
			<ul>
                <li><a href="#server.login">Login to the Eclipse servers</a></li>
  			</ul>




<br /><br />

			<table>
				<tr>
					<td colspan="2"><h2>Website</h2></td>
				</tr>
				<tr>
					<td width="50" />
					<td>
						<a name="website.websetup"></a><h3>How do I setup my project website?</h3>
						Project websites are hosted in a CVS repository separate from the actual project code. The repository path is dev.eclipse.org:/cvsroot/org.eclipse, in the www component.
						Once the webmaster
						adds a space for your project, files you commit to the website CVS are automatically checked out to www.eclipse.org/xyz, where 
						xyz is your project's short name.<br /><br />
						You are free to use HTML and PHP on your website.<br /><br />
						Requesting a project website is normally done when the project proposal has been approved.<br /><br >
						If you suspect your files are not being checked out to the www.eclipse.org website, simply commit a small change to one file. This is usually
						enough to trigger a website refresh.

						<a name="website.phoenix"></a><h3>How do I author web pages using the Phoenix method?</h3>
						Please see <a href="phoenix.php">this document</a> for information on using Phoenix.
						You can also check out: <a href="http://wiki.eclipse.org/Using_Phoenix">Using Phoenix</a> and <a href="http://www.eclipse.org/phoenix/docs/sample_pages.php">Sample Pages</a>
												
						<a name="website.db.bugs"></a><h3>Access the Bugzilla database using PHP?</h3>
						Please see <a href="../committertools/dbo_index.php">this page</a>.
						
						<a name="website.db"></a><h3>Use a database for my website?</h3>
						We currently do not offer projects with database support.

						<a name="website.largefiles"></a><h3>I need to put a large file on my website.  How should I do this?</h3>
						Large (1 MB+) ZIP and JAR files must be put in the downloads area, using the Find A Mirror script to link to them.
						However, small files (less than 1 MB) can be put on the www.eclipse.org/yourproject website directly without causing too much harm.<br /><br />
						
						The Find A Mirror script supports transparent mirror use, so large screencasts and PDFs can be put in the downloads area as well without imposing the added step of selecting
						a mirror site for the file.  Simply add &amp;r=1 to the URL.  For instance, http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.1-200506271435/eclipse-SDK-3.1-linux-gtk.tar.gz&amp;r=1 will fetch you the 
						Eclipse SDK 3.1 for Linux from a random mirror site without asking you which one.<br /><br />
						
						Remember to allow our mirrors at least 24 hours to sync up before using a transparent mirror redirect. 

						<a name="website.php"></a><h3>Use PHP on my website?</h3>
						PHP support is available on www.eclipse.org only. Simply commit files with the .php file extention to your website's CVS repository.
						Although some projects host PHP files on download.eclipse.org, we do not encourage or recommend it.<br /><br />
						
						Eclipse.org is a high-traffic website. Please make sure your PHP code is optimized to run in this type of environment.  See the next item. 
						
						<a name="website.php.optimize"></a><h3>Optimize my PHP code for large-scale use?</h3>
						Eclipse.org is a high-traffic website. To improve PHP's functionality, we have set very liberal limits on how many resources
						PHP can consume. However. if if your project is very popular, bad PHP code can slow the entire site down.<br /><br />
						
						Of course, we could harden PHP to protect our website, but that would cut some functionality. Some tips for you:
						<ul>
							<li><b>Never call the web service to include/open files</b> - include("http://www.eclipse.org/somefile.html") and fopen("http://localhost/somefile.xml") 
							are very costly to run, because they call the web service, and can lead to eclipse.org Denial-Of-Servicing itself under heavy load.</li>
							
							<li><b>Never include/open remote files</b> - include("http://www.someothersite.org/somefile.html") is forbidden, as someone could launch a Denial-Of-Service attack
							against a remote site.  We don't allow you to establish remote connections from eclipse.org servers other than the build server.</li>
							
							<li><b>Sanitize your incoming parameters</b> - include($parameter) is particularly dangerous if $parameter is not sanitized. Someone could freely surf the web
							anonymously, hiding behind eclipse.org servers, or they could use your page to access local files, or launch Denial-Of-Service attacks against remote servers.</li>
							
							<li><b>Cache aggregated, processor-intensive data</b> - SQL aggregations, file system scans, Bugzilla lists can (and should) be cached to avoid redundant processor- and disk-intensive operations. For instance, 
							scanning through download.eclipse.org directories to display the size of a build could be useful, but doesn't need to happen for each website visitor.  Cache the results of this operation to
							a file, and update the file if the file is older than 12 hours.</li>
					</ul>
					
					There are many, many other security and PHP best-practices.  These are just the basics.
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>
			
			<tr>
				<td colspan="2"><h2>CVS</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="cvs.connect"></a><h3>Connect to Eclipse CVS?</h3>
					Please see <a href="http://dev.eclipse.org/cvshowto.html">this page</a>.

					<a name="cvs.proxy"></a><h3>Connect to Eclipse CVS when PSERVER and/or EXTSSH are firewalled?</h3>
					Please see the Proxy configuration on <a href="http://wiki.eclipse.org/index.php/CVS_Howto">this page</a>.
					
					<a name="cvs.delete"></a><h3>Delete files from CVS?</h3>
					Although you can use SSH and a terminal to delete files in your CVS repository, we recommend you open a Bugzilla bug, in Community CVS, 
					requesting the files that need to be deleted.
					
					<a name="cvs.groups"></a><h3>Manage UNIX groups for CVS access?</h3>
					The unix groups are essentially webmaster tools used to manage commit rights to CVS 
					repositories and to the downloads area.<br /><br />

					For each project (Eclipse-Foundation-sanctioned project, such as Eclipse Platform, DSDP-DD, Mylar, 
					CDT, etc) we typically create three groups:
					<ul>
					<li><b>project-dev:</b> the group of accounts that can commit to the project's code repository</li>
					<li><b>project-home:</b> the group of accounts that can commit to the project'ss website</li>
					<li><b>projectadmin:</b> those who can store files in the downloads area.</li>
					</ul>

					For some projects, having all committers in one group with commit rights across the entire 
					project is not adequate when some committers must be limited to a specific set of modules.  
					In these cases, we create project-module groups that allow specific committers to only 
					commit to that portion of CVS.   
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>

			<tr>
				<td colspan="2"><h2>Bugzilla</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="bugzilla.component"></a><h3>Create a new Component/Version/Milestone/Target?</h3>
					 <a href="http://wiki.eclipse.org/index.php/Webmaster_FAQ#I_need_to_add.2Fremove.change_a_version.2Fmilestone.2Fcomponent_in_Bugzilla._How_do_I_do_this.3F">Please see the documentation here</a>
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>



			<tr>
				<td colspan="2"><h2>Downloads</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="downloads.put"></a><h3>Put files on the download server?</h3>
					Downloadable files must be placed on the download.eclipse.org server so they can be mirrored to our mirror sites worldwide. Please refer to the <a href="paths.php">File Paths</a> document to see where your files should go.<br /><br />
					
					<b>Please ensure only pertinent, current files are in the downloads area</b>, as we cannot store an eternity of nightly, integration and stable builds. Production releases can be kept forever; however, we ask that you move archived releases to archive.eclipse.org (see below).<br /><br />
					
					To transfer your files, use an SCP(committers,release engineers) or SFTP(build engineers only) client and connect to download1.eclipse.org using your committer account. Transfer files to your project's directory in the downloads area (Typically ~/downloads/toplevel/yourproject). Your project's
					downloads directory is typically communicated to the Project Lead upon project provisionning.<br /><br />
					
					Large projects with frequent builds can request an RSYNC configuration to push files into the download server. Please contact the WebMaster for this.<br /><br /> 
					
					Once your files are on the download.eclipse.org server, it will take anywhere from 5 minutes to 2 hours (30 minutes typical) for them to be available to the general public. You may also get Access Forbidden errors during this time.
					This is due to cluster replication delay times, so we ask that you allow for 2 hours before linking to the download files. Also, it typically takes a day or two for all the mirror
					sites to synchronize with us and get new files.<br /><br />
					
					To make your downloads available to the general public, please do not link directly to download.eclipse.org. Instead, use the Find a Mirror script. Using this script allows you to view download statistics and allows users to pick a nearby mirror
					site for their download.<br /><br />
					
					Please note that although we tolerate PHP, HTML and JPG/GIF files on download.eclipse.org, we encourage you to put such files
					on www.eclipse.org. Those files are not mirrored to public mirror servers.<br /><br />
					
					To save disk space on our mirror servers, and to reclaim some quota space, we recommend you move old release builds to archive.eclipse.org.
					
					
					
					<a name="downloads.archives"></a><h3>Move files to archive.eclipse.org?</h3>
					
					Because our mirror sites don't have as much disk space for Eclipse file as we do, we have created an http://archive.eclipse.org site for you to
					store older release builds.<br /><br />
					
					The archive.eclipse.org structure is similar to that of download.eclipse.org.  To move your files, we recommend using the SSH prompt as below.  If you are 
					not comfortable with the SSH prompt, you can ask WebMaster to move the files for you.<pre>
					
					ssh yourcommitterid@dev.eclipse.org
					
					mv ~/downloads/your/project/oldrelease/ /home/data/httpd/archive.eclipse.org/your/project/oldrelease/
					</pre>
					

					<a name="downloads.mirrors"></a><h3>See which mirror sites are mirroring my files?</h3>
					You can use the Find a Mirror script to see which mirror sites have your files.  The Find a Mirror script is here: http://www.eclipse.org/downloads/download.php<br /><br />
<b>Parameters:</b><br />
					<b>file</b> (Required): specify the filename, relative to the downloads home, starting with a "/". This file or directory must exist in the downloads area.<br />
					<b>format</b> (Optional): specify html (default) or xml.  Useful for building the mirrors.xml for Update sites.<br />
					<b>protocol</b> (Optional): ftp or http: list only ftp or http mirrors only (both are the default)<br />
					<b>r</b> (Optional): specify 1 to automatically redirect to a random mirror without asking the user to choose.<br />
					<b>nf</b> (Optional): specify 1 to get an actual 404 Not Found error if the file doesn't exist (instead of a lovely page saying so).<br /><br />					

					Examples:<br />
					All mirrors of the Lepido project, in XML format: http://www.eclipse.org/downloads/download.php?file=/technology/lepido/M1/&amp;format=xml<br />
					Get a file from a random mirror, without prompting: http://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.1-200506271435/eclipse-SDK-3.1-win32.zip&amp;r=1<br /><br />
					<b>PLEASE NOTE:</b> We have a list of excluded file patterns -- files that are *not* sent to our mirrors. 
					Nightly and Integration builds are typically very large and don't get many downloads, 
					therefore it's typically more costly (in terms of bandwidth) to mirror them than to support the few client downloads they generate.
					At time of writing, our exclusion list is: drops/I* drops/N* drops/M* webtools/committers/ *.jpg *.gif callisto/staging/ callisto/testUpdates/ eclipse/testUpdates/ eclipse/updates/3.2milestones dev/TPTP*
					
					

					<a name="downloads.findamirror"></a><h3>Use the Find a Mirror script?</h3>
					Mirror sites are polled every hour to determine the freshness of the mirror site. The Find a Mirror site will determine which mirrors have the file a user requested and will display the list. To use it, simply 
					link to the following URL:<br /><br />
					
					http://www.eclipse.org/downloads/download.php?file=/toplevel/yourproject/yourfile.zip<br /><br />
					
					<b>Parameters:</b><br />
					<b>file</b> (Required): specify the filename, relative to the downloads home, starting with a "/". This file or directory must exist in the downloads area.<br />
					<b>format</b> (Optional): specify html (default) or xml.  Useful for building the mirrors.xml for Update sites.<br />
					<b>protocol</b> (Optional): ftp or http: list only ftp or http mirrors only (both are the default)<br />
					<b>r</b> (Optional): specify 1 to automatically redirect to a random mirror without asking the user to choose.<br />
					<b>nf</b> (Optional): specify 1 to get an actual 404 Not Found error if the file doesn't exist (instead of a lovely page saying so).<br /><br />
					
					
					For instance:<br />
					A file in the BIRT project:<br />
					http://www.eclipse.org/downloads/download.php?file=/birt/1.0/chart/someFile.zip<br /><br />
					
					A file in the Technology project, http mirrors only, don't prompt the user for a mirror:<br />
					http://www.eclipse.org/downloads/download.php?r=1&protocol=http&file=/technology/cme/R-1.2.4-200105211245/someFile.zip<br /><br />
					
					A file in the Tools project:<br />
					http://www.eclipse.org/downloads/download.php?file=/tools/cdt/R-1.2.4-200105211245/someFile.zip<br /><br />
					
					<a name="downloads.updatesite"></a><h3>Create an Update Site?</h3>
					Project update sites are currently not integrated to the Platform update site, and therefore you must provide Update instructions on your website.<br /><br />
					<ol>
						<li>In your downloads directory, create a directory called update-site</li>
						<li>in update-site/, put your features in a features/ subdirectory, your plugins in a plugins/ subdirectory, and your site.xml file in the update-site/ directory.</li>
						<li>Use the mirrorsURL tag with the Find A Mirror script to prompt the users for a mirror site. See a sample site.xml file below.</li>
						<li>Provide instructions on your download pages that tell the user to add a remote Update site, and indicate the url to your update-site/ directory</li>
					</ol>
					
					Sample site.xml file (from Lepido project):
					<pre>
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;site mirrorsURL="http://www.eclipse.org/downloads/download.php?file=/technology/lepido/update-site/site.xml&amp;amp;format=xml"&gt;
   &lt;description url="http://download.eclipse.org/technology/lepido/update-site/"&gt;
      Lepido, Tools for Apache Cocoon
   &lt;/description&gt;
   &lt;feature url="features/org.eclipse.lepido_0.1.0.jar" id="org.eclipse.lepido" version="0.1.0"&gt;
      &lt;category name="lepido"/&gt;
   &lt;/feature&gt;
   &lt;category-def name="lepido" label="Lepido, Tools for Apache Cocoon"/&gt;
&lt;/site&gt;
</pre>

					<a name="downloads.stats"></a><h3>See download statistics?</h3>
					The Find a Mirror script tracks download requests once the user has picked a mirror site (or the main Eclipse download site).  To view these statistics,
					use the Live Download Statistics tool in the Committer Tools.

					<a name="downloads.quotas"></a><h3>View my disk space quota?</h3>
					Because the downloads content is mirrored worldwide, Eclipse.org imposes disk space quotas to not overburden our mirror sites. There are no quotas on mail, CVS or www.eclipse.org website content. New projects are configured with
					2GB of disk quotas. If this is insufficient, we can increase the quota to suit your needs. However, before increasing a quota, we will make sure that your downloads area doesn't contain old or stale files.<br /><br /> We appreciate
					your keeping the downloads areas as lean and clean as possible. 
					
					You can view your project's download.eclipse.org disk usage and quota <a href="../committertools/diskspace.php">here</a>.
					
					<a name="downloads.increasequotas"></a><h3>Increase my disk space quota?</h3>
					Before requesting your quota be increased, please delete any old files that are no longer required, and move older release builds
					to archive.eclipse.org (instructions above).  If you are confident that your download.eclipse.org footprint is as small as it can be
					and that you're still running out of space, simply send an e-mail to the WebMaster with your request, stating which project you're on.
					
					<a name="#downloads.sign"></a><h3>Sign my plugins/ZIP files?</h3>
					The Eclipse Foundation will allow one or two committers on each project to sign JAR and ZIP files on its behalf. Signing is done on the build.eclipse.org server, using your
					CVS userid and an SSH command line.  To sign, simply get your PMC or Project Lead to contact the webmaster@eclipse.org to indicate the committers (max. 2) that should have
					signing privilege.  Typically, the release engineers, build teams or whoever puts the files on download.eclipse.org should be the signers.
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>			
			<tr>
				<td colspan="2"><h2>Builds</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="builds.buildserver"></a><h3>Access/use the Eclipse Build Server?</h3>
					Committers can use the build.eclipse.org server to run builds and tests for their project. 
					Unlike the other eclipse.org servers, committers are permitted to run software on this server, 
					and to maintain running software in the background. If you need to run cron jobs, please contact 
					the webmaster, stating the time and frequency at which these jobs are to run, and for how long 
					they typically run.<br /><br />

					<b>Server details:</b><br />

					host: build.eclipse.org<br />
					username: use your committer account<br />
					server: IBM P5 550 quad-cpu, 16G of RAM<br />
					architecture: PPC64<br />
					<br /><br />

					You can use an SSH client to connect to the server.  Here are some
					directories that are of interest:<br /><br />

					/cvsroot  -> the CVS repositories, connected to eclipse.org via a
					Gigabit connection.  Your Build account cannot write to these files directly
					<br /><br />
					/home/data/httpd/download.eclipse.org -> the download.eclipse.org root,
					connected to eclipse.org via Gigabit connection.
					<br /><br />
					/shared -> a shared disk to store your build files and
					applications. Please note, however, that we do not maintain backups of
					this directory. This path is structured like the downloads area, and is accessible via http://build.eclipse.org/
					<br /><br />
					/shared/common -> a common location to store applications. Ant and JDK
					5.0 are located there.
					<br /><br />
					If you have any questions, please contact the webmaster. 
				</td>
			</tr>	
			<tr>
				<td colspan="2"><h2>Mailing Lists</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="mailinglist.setup"></a><h3>Setup a new mailing list?</h3>
					Because Mailing Lists are subject to SPAM and can adversely affect eclipse.org performance (imaging sending 200 e-mails to a list that contains 3000 members), proper care
					is taken in configuring each list. New mailing lists are set up by the WebMaster for this reason. Also, the webmaster creates an HTML view (called mailing list archives) of mailing list postings for
					archive and search purposes.

					<a name="mailinglist.viewmembers"></a><h3>View list members?</h3>
					Because mailing lists contain private information, such as a member's e-mail address, name and surname, we cannot publicly display this information. However,
					the PMC or Project Lead can become the list administrator, which would allow you to view the membership information for
					your lists.  The PMC/Project lead can inquire about list administration to the WebMaster, stating which lists they would like to manage.<br /><br />
			</td>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>			
			<tr>
				<td colspan="2"><h2>Eclipse Wiki</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>
					<a name="wiki.createpage"></a><h3>Create a new page in the Eclipse Wiki</h3>
					To create a new page, simply type the page name at the end of "index.php/" in the URL. The name can contain spaces. For instance,
                    http://wiki.eclipse.org/index.php/Some Page will allow you to create and edit this new page. 
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>
			
			<tr>
				<td colspan="2"><h2>Eclipse Servers</h2>
			</tr>
			<tr>
				<td width="50" />
				<td>		
					<a name="server.login">Login to the Eclipse servers</a><h3></h3>
					When you become committer, your default shell allows only CVS and SVN commands.  
					If you need a 'real' shell for dealing with distribution files or working with automated builds, you'll need to have your project lead or the project PMC file a bug requesting the upgrade.
				</td>
			</tr>
			<tr>
				<td colspan="2">&#160;</td>
			</tr>

	
<?php
	include("../html/footer.php");
?>
