RBE10K/Website/Installation

From MediaWiki
Jump to: navigation, search

This section documents the installation of a functional version of Joomla 3.0.3

Contents

Installation

These are the full steps in order for a successful installation of an brand new Joomla 3.0.3 system.

  1. Download and extract the installation file in a suitable system folder for running the web app (http://joomlacode.org/gf/download/frsrelease/17965/78414/Joomla_3.0.3-Stable-Full_Package.zip)
  2. Set-up the permissions specified below
  3. Apply the patches specified below
  4. Create an Apache2 config file for this installation as per specified below, updating the directories and URLs to match. Restart the apache2 service. Note: should there be a problem during the installation, comment the #RewriteEngine On row.
  5. Run the application. On first run the application will install itself. Finish the installation and open and login into the Administrator.
  6. Apply the database patches specified below (straight into the database), and also in the Administrator apply all the database updates (should say one or maybe two).
  7. In Administrator, configure the system to use Use URL rewriting and Search Engine Friendly URLs (in Global Configuration/Site)
  8. If it had been required to comment #RewriteEngine On in the Apache2 config file, try now uncommenting it and restarting apache2

Permissions

The following permissions are required. These must be applied before running the installation script.

<syntaxhighlight lang="text" enclose="div> chmod -v 0777 administrator/components chmod -R -v 0777 administrator/language chmod -v 0777 administrator/manifests/files chmod -v 0777 administrator/manifests/libraries chmod -v 0777 administrator/manifests/packages chmod -v 0777 administrator/modules chmod -v 0777 administrator/templates chmod -v 0777 components chmod -v 0777 images chmod -v 0777 images/banners chmod -v 0777 images/sampledata chmod -R -v 0777 language chmod -v 0777 libraries chmod -R -v 0777 media chmod -R -v 0777 modules chmod -v 0777 plugins chmod -v 0777 plugins/authentication chmod -v 0777 plugins/captcha chmod -v 0777 plugins/content chmod -v 0777 plugins/editors chmod -v 0777 plugins/editors-xtd chmod -v 0777 plugins/extension chmod -v 0777 plugins/finder chmod -v 0777 plugins/quickicon chmod -v 0777 plugins/search chmod -v 0777 plugins/system chmod -v 0777 plugins/user chmod -v 0777 templates chmod -v 0777 configuration.php chmod -v 0777 cache chmod -v 0777 administrator/cache chmod -v 0777 logs chmod -v 0777 tmp chmod -v 0777 . chmod -R -v 0777 installation </syntaxhighlight>

Patches

The following patches are required. These must be implemented before running the installation script.

<syntaxhighlight lang="diff" enclose="div"> diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_admin/sql/updates/postgresql/3.0.3.sql joomla/administrator/components/com_admin/sql/updates/postgresql/3.0.3.sql --- joomla_inst/administrator/components/com_admin/sql/updates/postgresql/3.0.3.sql 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_admin/sql/updates/postgresql/3.0.3.sql 2013-03-01 12:54:30.000000000 +1100 @@ -1 +1,2 @@ -ALTER TABLE `#__associations` ALTER COLUMN id TYPE INT(11); \ No newline at end of file +ALTER TABLE "#__associations" ALTER COLUMN id TYPE integer; +ALTER TABLE "#__modules" ALTER COLUMN content SET DEFAULT ; diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_categories/helpers/html/categoriesadministrator.php joomla/administrator/components/com_categories/helpers/html/categoriesadministrator.php --- joomla_inst/administrator/components/com_categories/helpers/html/categoriesadministrator.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_categories/helpers/html/categoriesadministrator.php 2013-03-02 03:27:47.000000000 +1100 @@ -32,7 +32,7 @@

		$query = $db->getQuery(true);
		$query->select('c.*');
		$query->from('#__categories as c');

- $query->where('c.id IN ('.implode(',', array_values($associations)).')'); + $query->where('c.id ' . ($associations ? 'IN ('.implode(',', array_values($associations)).')' : '=-1'));

		$query->leftJoin('#__languages as l ON c.language=l.lang_code');
		$query->select('l.image');
		$query->select('l.title as language_title');

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_categories/models/categories.php joomla/administrator/components/com_categories/models/categories.php --- joomla_inst/administrator/components/com_categories/models/categories.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_categories/models/categories.php 2013-03-01 14:25:04.000000000 +1100 @@ -164,10 +164,14 @@

		$assoc = $this->getAssoc();
		if ($assoc)
		{

- $query->select('COUNT(asso2.id)>1 as association'); - $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_categories.item')); - $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); - $query->group('a.id'); + $q = $db->getQuery(true); + $q->select('COUNT(asso2.id)'); + $q->from('#__associations AS asso'); + $q->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); + $q->where('asso.id = a.id AND asso.context='.$db->quote('com_categories.item')); + + $query->select('(' . $q . ')>1 as association'); + unset($q);

		}

		// Filter by extension

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_contact/helpers/html/contact.php joomla/administrator/components/com_contact/helpers/html/contact.php --- joomla_inst/administrator/components/com_contact/helpers/html/contact.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_contact/helpers/html/contact.php 2013-03-02 03:29:28.000000000 +1100 @@ -37,7 +37,7 @@

		$query->from('#__contact_details as c');
		$query->select('cat.title as category_title');
		$query->leftJoin('#__categories as cat ON cat.id=c.catid');

- $query->where('c.id IN ('.implode(',', array_values($associations)).')'); + $query->where('c.id ' . ($associations ? 'IN ('.implode(',', array_values($associations)).')' : '=-1'));

		$query->leftJoin('#__languages as l ON c.language=l.lang_code');
		$query->select('l.image');
		$query->select('l.title as language_title');

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_contact/models/contacts.php joomla/administrator/components/com_contact/models/contacts.php --- joomla_inst/administrator/components/com_contact/models/contacts.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_contact/models/contacts.php 2013-03-01 14:27:10.000000000 +1100 @@ -182,10 +182,14 @@

		$assoc = isset($app->item_associations) ? $app->item_associations : 0;
		if ($assoc)
		{

- $query->select('COUNT(asso2.id)>1 as association'); - $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_contact.item')); - $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); - $query->group('a.id'); + $q = $db->getQuery(true); + $q->select('COUNT(asso2.id)'); + $q->from('#__associations AS asso'); + $q->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); + $q->where('asso.id = a.id AND asso.context='.$db->quote('com_contact.item')); + + $query->select('(' . $q . ')>1 as association'); + unset($q);

		}

		// Filter by access level.

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_content/helpers/html/contentadministrator.php joomla/administrator/components/com_content/helpers/html/contentadministrator.php --- joomla_inst/administrator/components/com_content/helpers/html/contentadministrator.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_content/helpers/html/contentadministrator.php 2013-03-02 03:30:43.000000000 +1100 @@ -37,7 +37,7 @@

		$query->from('#__content as c');
		$query->select('cat.title as category_title');
		$query->leftJoin('#__categories as cat ON cat.id=c.catid');

- $query->where('c.id IN ('.implode(',', array_values($associations)).')'); + $query->where('c.id ' . ($associations ? 'IN ('.implode(',', array_values($associations)).')' : '=-1'));

		$query->leftJoin('#__languages as l ON c.language=l.lang_code');
		$query->select('l.image');
		$query->select('l.title as language_title');

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_content/models/articles.php joomla/administrator/components/com_content/models/articles.php --- joomla_inst/administrator/components/com_content/models/articles.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_content/models/articles.php 2013-03-01 14:28:08.000000000 +1100 @@ -189,10 +189,14 @@

		$assoc = isset($app->item_associations) ? $app->item_associations : 0;
		if ($assoc)
		{

- $query->select('COUNT(asso2.id)>1 as association'); - $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_content.item')); - $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); - $query->group('a.id'); + $q = $db->getQuery(true); + $q->select('COUNT(asso2.id)'); + $q->from('#__associations AS asso'); + $q->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); + $q->where('asso.id = a.id AND asso.context='.$db->quote('com_content.item')); + + $query->select('(' . $q . ')>1 as association'); + unset($q);

		}

		// Filter by access level.

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_joomlaupdate/models/default.php joomla/administrator/components/com_joomlaupdate/models/default.php --- joomla_inst/administrator/components/com_joomlaupdate/models/default.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_joomlaupdate/models/default.php 2013-03-01 12:54:30.000000000 +1100 @@ -664,7 +664,7 @@

		// Clobber any possible pending updates
		$update = JTable::getInstance('update');
		$uid = $update->find(

- array('element' => $element, 'type' => 'file', 'client_id' => , 'folder' => ) + array('element' => $element, 'type' => 'file', 'client_id' => 0, 'folder' => )

		);

		if ($uid)

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_menus/helpers/html/menus.php joomla/administrator/components/com_menus/helpers/html/menus.php --- joomla_inst/administrator/components/com_menus/helpers/html/menus.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_menus/helpers/html/menus.php 2013-03-01 14:56:49.000000000 +1100 @@ -32,7 +32,7 @@

		$query->select('mt.title as menu_title');
		$query->from('#__menu as m');
		$query->leftJoin('#__menu_types as mt ON mt.menutype=m.menutype');

- $query->where('m.id IN ('.implode(',', array_values($associations)).')'); + $query->where('m.id ' . ($associations ? 'IN ('.implode(',', array_values($associations)).')' : ' = -1'));

		$query->leftJoin('#__languages as l ON m.language=l.lang_code');
		$query->select('l.image');
		$query->select('l.title as language_title');

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_menus/models/items.php joomla/administrator/components/com_menus/models/items.php --- joomla_inst/administrator/components/com_menus/models/items.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_menus/models/items.php 2013-03-01 14:28:54.000000000 +1100 @@ -215,10 +215,14 @@

		$assoc = isset($app->item_associations) ? $app->item_associations : 0;
		if ($assoc)
		{

- $query->select('COUNT(asso2.id)>1 as association'); - $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_menus.item')); - $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); - $query->group('a.id'); + $q = $db->getQuery(true); + $q->select('COUNT(asso2.id)'); + $q->from('#__associations AS asso'); + $q->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); + $q->where('asso.id = a.id AND asso.context='.$db->quote('com_menus.item')); + + $query->select('(' . $q . ')>1 as association'); + unset($q);

		}

		// Join over the extensions

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_newsfeeds/helpers/html/newsfeed.php joomla/administrator/components/com_newsfeeds/helpers/html/newsfeed.php --- joomla_inst/administrator/components/com_newsfeeds/helpers/html/newsfeed.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_newsfeeds/helpers/html/newsfeed.php 2013-03-02 03:31:52.000000000 +1100 @@ -82,7 +82,7 @@

		$query->from('#__newsfeeds as c');
		$query->select('cat.title as category_title');
		$query->leftJoin('#__categories as cat ON cat.id=c.catid');

- $query->where('c.id IN ('.implode(',', array_values($associations)).')'); + $query->where('c.id ' . ($associations ? 'IN ('.implode(',', array_values($associations)).')' : '=-1'));

		$query->leftJoin('#__languages as l ON c.language=l.lang_code');
		$query->select('l.image');
		$query->select('l.title as language_title');

diff -rubN -X diffignore.txt joomla_inst/administrator/components/com_newsfeeds/models/newsfeeds.php joomla/administrator/components/com_newsfeeds/models/newsfeeds.php --- joomla_inst/administrator/components/com_newsfeeds/models/newsfeeds.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/administrator/components/com_newsfeeds/models/newsfeeds.php 2013-03-01 14:29:47.000000000 +1100 @@ -174,10 +174,14 @@

		$assoc = isset($app->item_associations) ? $app->item_associations : 0;
		if ($assoc)
		{

- $query->select('COUNT(asso2.id)>1 as association'); - $query->join('LEFT', '#__associations AS asso ON asso.id = a.id AND asso.context='.$db->quote('com_newsfeeds.item')); - $query->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); - $query->group('a.id'); + $q = $db->getQuery(true); + $q->select('COUNT(asso2.id)'); + $q->from('#__associations AS asso'); + $q->join('LEFT', '#__associations AS asso2 ON asso2.key = asso.key'); + $q->where('asso.id = a.id AND asso.context='.$db->quote('com_newsfeeds.item')); + + $query->select('(' . $q . ')>1 as association'); + unset($q);

		}

		// Filter by access level.

diff -rubN -X diffignore.txt joomla_inst/libraries/cms/schema/changeitem/postgresql.php joomla/libraries/cms/schema/changeitem/postgresql.php --- joomla_inst/libraries/cms/schema/changeitem/postgresql.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/cms/schema/changeitem/postgresql.php 2013-03-01 12:54:30.000000000 +1100 @@ -155,7 +155,8 @@

			$this->checkQueryExpected = 0;
			$this->msgElements = array($this->fixQuote($idx));
		}

- elseif ($alterCommand == 'CREATE INDEX' || (strtoupper($alterCommand . $wordArray[2]) == 'CREATE UNIQUE INDEX')) + //elseif ($alterCommand == 'CREATE INDEX' || (strtoupper($alterCommand . $wordArray[2]) == 'CREATE UNIQUE INDEX')) + elseif ($command == 'CREATE INDEX' || (strtoupper($command . $wordArray[2]) == 'CREATE UNIQUE INDEX'))

		{
			if ($wordArray[1] === 'UNIQUE')
			{

diff -rubN -X diffignore.txt joomla_inst/libraries/cms.php joomla/libraries/cms.php --- joomla_inst/libraries/cms.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/cms.php 2013-03-01 12:54:30.000000000 +1100 @@ -31,6 +31,8 @@

// Define the Joomla version if not already defined.
if (!defined('JVERSION'))
{

+ if(!defined('_JEXEC')) { define('_JEXEC'); } + include_once __DIR__ . '/cms/version/version.php';

	$jversion = new JVersion;
	define('JVERSION', $jversion->getShortVersion());
}

diff -rubN -X diffignore.txt joomla_inst/libraries/joomla/installer/adapters/file.php joomla/libraries/joomla/installer/adapters/file.php --- joomla_inst/libraries/joomla/installer/adapters/file.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/joomla/installer/adapters/file.php 2013-03-01 12:54:30.000000000 +1100 @@ -378,7 +378,7 @@

		// Clobber any possible pending updates
		$update = JTable::getInstance('update');
		$uid = $update->find(

- array('element' => $this->get('element'), 'type' => 'file', 'client_id' => , 'folder' => ) + array('element' => $this->get('element'), 'type' => 'file', 'client_id' => 0, 'folder' => )

		);

		if ($uid)

diff -rubN -X diffignore.txt joomla_inst/libraries/joomla/installer/adapters/language.php joomla/libraries/joomla/installer/adapters/language.php --- joomla_inst/libraries/joomla/installer/adapters/language.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/joomla/installer/adapters/language.php 2013-03-01 12:54:30.000000000 +1100 @@ -250,7 +250,7 @@

		// Clobber any possible pending updates
		$update = JTable::getInstance('update');

- $uid = $update->find(array('element' => $this->get('tag'), 'type' => 'language', 'client_id' => , 'folder' => )); + $uid = $update->find(array('element' => $this->get('tag'), 'type' => 'language', 'client_id' => 0, 'folder' => ));

		if ($uid)
		{
			$update->delete($uid);

@@ -352,7 +352,7 @@

		// Clobber any possible pending updates
		$update = JTable::getInstance('update');

- $uid = $update->find(array('element' => $this->get('tag'), 'type' => 'language', 'client_id' => $clientId)); + $uid = $update->find(array('element' => $this->get('tag'), 'type' => 'language', 'client_id' => (int)$clientId));

		if ($uid)
		{
			$update->delete($uid);

@@ -360,7 +360,7 @@

		// Update an entry to the extension table
		$row = JTable::getInstance('extension');

- $eid = $row->find(array('element' => strtolower($this->get('tag')), 'type' => 'language', 'client_id' => $clientId)); + $eid = $row->find(array('element' => strtolower($this->get('tag')), 'type' => 'language', 'client_id' => (int)$clientId));

		if ($eid)
		{
			$row->load($eid);

@@ -374,7 +374,7 @@

			$row->set('enabled', 1);
			$row->set('protected', 0);
			$row->set('access', 0);

- $row->set('client_id', $clientId); + $row->set('client_id', (int)$clientId);

			$row->set('params', $this->parent->getParams());
		}
		$row->set('name', $this->get('name'));

diff -rubN -X diffignore.txt joomla_inst/libraries/legacy/table/menu.php joomla/libraries/legacy/table/menu.php --- joomla_inst/libraries/legacy/table/menu.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/legacy/table/menu.php 2013-03-01 12:54:30.000000000 +1100 @@ -144,7 +144,7 @@

		// Verify that the alias is unique
		$table = JTable::getInstance('Menu', 'JTable', array('dbo' => $this->getDbo()));

- if ($table->load(array('alias' => $this->alias, 'parent_id' => $this->parent_id, 'client_id' => $this->client_id, 'language' => $this->language)) + if ($table->load(array('alias' => $this->alias, 'parent_id' => $this->parent_id, 'client_id' => (int)$this->client_id, 'language' => $this->language))

			&& ($table->id != $this->id || $this->id == 0))
		{
			if ($this->menutype == $table->menutype)

diff -rubN -X diffignore.txt joomla_inst/libraries/loader.php joomla/libraries/loader.php --- joomla_inst/libraries/loader.php 2013-02-04 11:05:45.000000000 +1100 +++ joomla/libraries/loader.php 2013-03-01 12:54:30.000000000 +1100 @@ -330,7 +330,7 @@

			// Load the file if it exists.
			if (file_exists($path))
			{

- return include $path; + return include_once $path;

			}
		}
	}

</syntaxhighlight>

Apache Virtual Host config

<syntaxhighlight lang="apache" enclose="div"> <IfDefine DEFAULT_VHOST>

 <VirtualHost *:80>
    ServerName 10k.rbem.org
    ServerAlias www.rbem.org
    DocumentRoot "/var/www/org.rbem.10k/htdocs/joomla"
    <Directory "/var/www/org.rbem.10k/htdocs/joomla">
       Options FollowSymLinks
       AllowOverride All
       Require all granted
       RewriteEngine On
       # Block out any script trying to base64_encode data within the URL.
       RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
       # Block out any script that includes a <script> tag in URL.
       RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
       # Block out any script trying to set a PHP GLOBALS variable via URL.
       RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
       # Block out any script trying to modify a _REQUEST variable via URL.
       RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
       # Return 403 Forbidden header and show the content of the root homepage
       RewriteRule .* index.php [F]
       RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
       RewriteCond %{REQUEST_URI} !^/index\.php
       RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
       RewriteCond %{REQUEST_FILENAME} !-f
       RewriteCond %{REQUEST_FILENAME} !-d
       RewriteRule .* index.php [L]
    </Directory>
    ErrorLog /var/log/apache2/10k.rbemwiki.org-error.log
    CustomLog /var/log/apache2/10k.rbemwiki.org-access.log common
 </VirtualHost>

</IfDefine> </syntaxhighlight >

Database patches

These database patches must be applied directly on the database. They can be applied through psql command-line tool, or a graphical front-end like pgAdmin3.

<source lang="sql"> select setval(pg_get_serial_sequence('j_template_styles', 'id'), 9, false); select setval(pg_get_serial_sequence('j_assets', 'id'), 35, false); </source>

Packages

K2

K2 doesn't at the time of this writing natively support PostgreSQL. We've developed our own adapted package, available from here.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox