PreflightConcept

Bare minimum kernel for install

Created by: Stephan Borg, Last modification: 13 Nov 2008 (18:27 UTC) by xing
{{Exterminate|
|date=13-November-2008
|note=Perhaps it's worth combing through this page and trying to rescue some of this information.
}}

This is a fluid document still in draft - please feel free to discuss on IRC should you have any suggestions.

Background

The Preflight CVS branch is based on an email sent to the dev list in 17 June, 2004. Here is an excerpt:
...
1 - Preflight check of configuration, database connection, valid admin user account, valid tiki tables (eg tiki_preferences) and other checks that without TP wouldn't run properly. At the moment, you are whisked away to install/install.php where the admin account passwd is ignored and the install is a little rough, overwriting existing admin info and allowing complete initialisation of the database.

2 - Considering you still need a templating and formatting framework, I began wondering if the base class should actually not be TikiDB.php but something else (TikiSystem maybe?). TP classes are all inherited from TikiDB - meaning it needs to be working with a valid DB connection before you get anywhere. As much as it would prove useless, I believe that if our base class should do basic formatting, themeing, templating, etc - and DB connections should be secondary to this. This would allow the install to be better integrated into the kernel and in theory be more stable.
...


Preflight will not be a release, seperate installer or anything like that. Preflight is basically a method to reduce our kernel to the lowest common denominator or functions and classes, to enable basic bitweaver functionality. This should, in theory, provide a more stable and streamlined kernel to be merged back into ReleaseOne.

Introduction

So, here's what I've got in my head...

The preflight core would consist of kernel/, lang/, themes/ and util/.

The initial objective is to present an empty page with no database connection, no users but a selection of languages and themes via the modules.

The reason for this - the first page of the install could be used to select a language (and maybe a theme), without necessarily having a db connection, preferences or users for that matter.

If we can build the kernel to support these functions, without a database or users, it would be perfect for the installer and provide and even more stable kernel for bitweaver. If we can present smarty templates, in different languages, different themes, default preferences, no database, no users - we will have a rock solid foundation to build ReleaseOne upon.

I have suggested we move AdoDB and Smarty to utils/, as they are 3rd party code and libraries and should be kept seperately for updating seperately.

The Future

This is the future of bitweaver (as I see it anyway). If you have ideas for fundamental changes, this is the place to raise them, and submit if majority agrees.

Visit the forum and have your say.

Preflight Sequence of Initialisation

Packages should be able to register check required for them to work for any of the items below. Registered checks for package version dependencies, etc should be utilised.

System Requirements Check

Preflight library functions

Writable temp and storage directories

PHP.INI settings

The code here should ini_get settings and compare with recommended values. If they do not meet recommended values, either (to be decided) set dynamically or advise to change in the PHP.INI file.

PHP Libraries

Check to see if suitable libraries and versions are available, such as GD, ImageMagick, LDAP, MySQL, PgSQL - possible even AdoDB and Smarty (I've noticed FC2 now comes with an AdoDB rpm).

Compatibility Functions

The PHPCompat library could be used for older versions of PHP to allow functionality with checks for function existence.

AdoDB, Smarty and other required 3rd party libraries

Rather than hardcode includes, we should use the library path to find these libraries. This will allow system wide references to a single library install.

Install checks

Check for essential packages such as kernel, users, themes, langs and util. Possibly include package version checking.
Check for suitable libraries (under /util/) and versioning.
Check for temp folder r/w access (templates_c, cache).

Administrator User

Is an admin set? Do we need to use admin password to continue installation.

Database Connection

Using TikiDB, check for valid database settings/URI and connection.
The installer and preflight will probably have to do different types of checks - at least during the first install. Perhaps the checks on revisiting the installer can be the same, i.e. if the file config_inc.php is already present.

Database Tables

Check if core database tables exists, such as users_users (for admin account), tiki_preferences (for preferences), etc.

Initialisation settings

Check if important things are set, such as storage path.

Package selection

What packages are installed / are they working? can we check that? is it worth checking?