Oily Rag 1: CD Part 1
Oily Rag 1: Introduction | CD Part 1 | CD Part 2 | CD Part 3 | CD Part 4 | CD Part 4 Scripts | CD Part 5 | CD Part 6 | Downloads |
Oily Rag: Be prepared to get your hands dirty. |
Uniform Server 3.5-Apollo running from a CD
Uniform Server’s architecture allows it to be run without making any changes from any location on any read/write media. CD's although writable are write once only components, you cannot write to the same location more that once hence are not true read/writable. It is possible to run Uniform Server from a CD however some fundamental changes are required.
Basic idea separate out any elements that require read/write functionality and direct them to an appropriate device, For this tutorial I will be using C drive (I had considered a RAM drive however XP requires special drivers installable by a user in addition possible conflicts with virtual memory switching ruled this out). I do not propose to provide a definitive solution but to give you building blocks you can tailor to your own requirements.
Specification
I see this as a self-contained development server. With a web site completed click a button to convert the servers to run from a CD (CD Mode). Burn your project to a CD once completed click another button to revert back to normal mode of operation. Restrict functionality for CD mode (apanel wants to write and update too many files). Not a complex specification but now we know there are two components or modes of operation. It also suggests some form of file switching will be required. This tutorial covers this awitching technique I start by isolating components, create some glue elements and finally assemble them to give you an idea how it all fits together.
Isolate
First thing to look at are components that require read/write access and to ascertain any complexity involved to convert these. Before starting lets hammer a peg in the ground and define a location where writable elements will be re-directed. I will use a folder on C drive, c:/us35temp I hope the folder name is unique enough to avoid any conflicts, this name will be hard coded into our solution (an alternative to hard coding is to use search and replace scripts however that's just added complexity keep it simple is my motto).
Files naming convention
I mentioned file switching, for this we need a copy of the original and a new version. I am going to use the following naming convention old_filename and new_filename respectively these will be saved to a folder named uscd for later when components are assembled.
Top For example: old_httpd.conf this will be used to revert back to a standard copy of Uniform Server while new_httpd.conf will be used for the CD version of Uniform Server.
Preparation
It is possible to apply the following mods to an existing installation of Uniform Server make sure you work on a copy alternatively extract a fresh copy of Uniform Server.
Update the servers by downloading the Combined bug fix file. After running the fix check the servers function correctly.
Shutdown the servers, create a new folder in folder Uniform Server named uscd this will store our two file (new_ and old_) versions.
Apache Server
Apache is reasonable to convert however it likes writing to log files well lets say its dogmatic. If it cannot create and write to these files will flatly refuse to start. Also tracks its own process hence writes to a PID file. For a CD version we do not need any custom logs, Apache is happy with this commented out.
Make the following changes to httpd.conf located in *\udrive\usr\local\apache2\conf first save the original to folder (Uniform Server/uscd) and name it old_httpd.conf.
Line | Action | Comment |
---|---|---|
83 |
Change from: |
PidFile logs/httpd.pid |
457 |
Change from: |
ErrorLog logs/error.log |
483 |
Change from: |
CustomLog logs/access.log combined |
After making the changes copy httpd.conf to folder (Uniform Server/uscd) and name it new_httpd.conf
Note 1: If you are using virtual host with separate logging change the appropriate lines accordingly.
Note 2: If the files do not exist Apache will create them, hence no need to specifically create these files you only need to specify a destination folder.
MySQL Server
The MySQL server by its very nature writes vast amounts of data making it the most unlikely component to run from a CD. However by changing a single line in its configuration file that data can be located just about anywhere you like. For intermediate processing a temporary file is used and that also needs redirecting.
For CD operations you need to first dump the data (databases) to c:/us35temp/mysql/data and then start the MySQL server. This data are picked up from the new location, further the MySQL server will be fully functional. You can save the new database created and install to your working server if needed.
Make the following changes to my-small.cnf located in *\udrive\usr\local\mysql\bin first save the original to folder (Uniform Server/uscd) and name it old_my-small.cnf.
Note: The chances are you will not see the file extension .cnf, don’t worry about it, for some reason Windows likes to hide this.
Line | Action | Comment |
---|---|---|
35 |
Change from: |
datadir = "/usr/local/mysql/data/" |
36 |
Change from: |
tmpdir = "/tmp" |
After making the changes copy my-small.cnf to folder (Uniform Server/uscd) and name it new_my-small.cnf
PHP
PHP requires three locations to be changed.
Make the following changes to php.ini located in *\udrive\usr\local\php first save the original to folder (Uniform Server/uscd) and name it old_php.ini.
Line | Action | Comment |
---|---|---|
348 |
Change from: |
error_log = logs/logs.log |
499 |
Change from: |
upload_tmp_dir = /tmp |
884 |
Change from: |
session.save_path = "/tmp" |
After making the changes copy php.ini to folder (Uniform Server/uscd) and name it new_php.ini
phpMyAdmin
phpMyAdmin requires three locations to be changed.
Make the following changes to config.inc.php located in *\udrive\home\admin\www\phpMyAdmin first save the original to folder (Uniform Server/uscd) and name it old_config.inc.php .
Line | Action | Comment |
---|---|---|
449 |
Change from: |
$cfg['UploadDir'] = '/etc/phpmyadmin'; |
452 |
Change from: |
$cfg['SaveDir'] = '/etc/phpmyadmin'; |
458 |
Change from: |
$cfg['TempDir'] = '/tmp'; |
After making the changes copy php.ini to folder (Uniform Server/uscd) and name it new_config.inc.php
BATch files
With the core components in place we need to start and stop the servers, the original files with minor modifications are suitable for CD operation.
Server_Start.bat
Obviously no changes are required for standard operation however some modification are needed to run from a CD. When run; our new Server_Start.bat needs to perform some additional tasks:
- Create folder c:\us35temp and any sub-folders
- (This caters for both MySQL and Apache, Apache needs nothing else it will happily create the necessary files here)
- Create folder c:\us35temp and any sub-folders
- Copy the entire data (database) from MySQL
- (The only thing of importance files copied from a CD will have their read attribute set to avoid this potential problem use xcopy.)
- Copy the entire data (database) from MySQL
Before making any changes save the old file to folder Uniform Server/uscd as old_Server_Start.bat
Use this link to view the new batch file (its a text file) save as new_Server_Start.bat
Below I have provided a detailed description of the new commands added to Server_Start.bat. These are placed towards the top of the file.
set ustemp=c:\us35temp | Using the set command a variable ustemp is created its value is the complete path c:\us35temp to our temporary file on the c drive. To use this variable in a batch file it is contained between two % symbols. |
IF NOT EXIST %ustemp% md %ustemp% | When the batch file is run it checks to see if' the folder already exists on the c drive if not it makes a drive (folder) defined by our variable %ustemp% |
IF NOT EXIST %ustemp% goto :ABORT | Because this folder is so important we check to see if it was created. If it does not exist we jump to the line named :ABORT and start running code from there. If it exists continue to execute next line of code. |
Several sub-folders are now created. | For sub-folders the process is similar, create and check. |
XCOPY "%CD%\udrive\usr\local\mysql\data" %ustemp%\data\ /s /q Note: Any path that contains a space MUST be enclosed in quotes. |
XCOPY is a powerful command its general syntax is XCOPY source destination switches Source: We want to copy everything in the MySQL data folder, including sub-folders hence the switch /s Windows likes to have a complete path (relative paths are a problem). This batch file can be placed anywhere, to find anywhere we use the variable %CD% current directory (folder) this is created automatically when this batch file is run. It's the complete path up to and including the folder name. Destination: Complete path to the folder where the database is to be copied, %ustemp%\data\ gives c:\us35temp\data\ without the ending back slash Windows can not decide if its a folder or file hence that back slash is needed. Switches: I have covered /s which forces all sub-folders and their content to be copied. Unless you like to see rows upon rows of commands flashing by make sure you add a /q switch this stands for quite mode and stops all this unwanted information. |
goto :CONTINUE | Jump pass the next few lines and resume at the line named :CONTINUE |
:ABORT | A line or location where you can jump to using the go to command in this case our abort section, we found an error so give up. |
echo Sorry the folder %ustemp% or one of its sub-folders could not be created. echo Can not continue hence aborting pause EXIT |
A few lines that we echo back to a user informing why we are given up. To give that person a chance to read the message pause halts the program and waits for a key to be pressed. At that point the EXIT command is executed and the batch file terminates. |
:CONTINUE | A line or location where you can jump to using the go to command in this case our new lines of code are complete and appear to be working hence continue to run Uniserver batch file |
new_Server_Start.bat
rem File Name: new_Server_Start.bat rem Location: Uniform Server rem Created By: The Uniform Server Development Team rem Edited By: Olajide Olaolorun (empirex) rem Comment: After start, go to apanel directly. rem To Developers: Implemented %www%, and %apanel% :) rem Edited Last By: Mike Gleaves (Ric) rem Comment: Proposed mods MPG (Ric) 14-4-2008 rem Proposed enhancement MPG 3-7-08 rem Added new section for CD ROM 29-06-08 rem Tutorial Oily Rag 1: CD Part 1 @echo off rem working directory current folder pushd %~dp0 rem Command line parameters: rem Server_Start.bat %1 %2 %3 rem %1 = Drive letter to use rem %2 = mysql (run MySql server) or nomysql (do not run MySql server) rem %3 = console (Open a command prompt at folder MySQL Bin) rem Note: If using %2 you must set a value for %1 rem Note: If using %3 you must set values for %1 and %2 rem Note: Default, uses drive W, runs the MySQL server and does not a command prompt. rem === MPG new code added for CD ROM ================================================ set ustemp=c:\us35temp :Create main folder on C IF NOT EXIST %ustemp% md %ustemp% IF NOT EXIST %ustemp% goto :ABORT IF NOT EXIST %ustemp%\tmp md %ustemp%\tmp IF NOT EXIST %ustemp%\tmp goto :ABORT :Apache IF NOT EXIST %ustemp%\apache\logs md %ustemp%\apache\logs IF NOT EXIST %ustemp%\apache\logs goto :ABORT :MySQL IF NOT EXIST %ustemp%\mysql\data md %ustemp%\mysql\data IF NOT EXIST %ustemp%\mysql\data goto :ABORT IF NOT EXIST %ustemp%\mysql\tmp md %ustemp%\mysql\tmp IF NOT EXIST %ustemp%\mysql\tmp goto :ABORT :php ini IF NOT EXIST %ustemp%\php\logs md %ustemp%\php\logs IF NOT EXIST %ustemp%\php\logs goto :ABORT IF NOT EXIST %ustemp%\php\tmp md %ustemp%\php\tmp IF NOT EXIST %ustemp%\php\tmp goto :ABORT :phpMyAdmin config.ini.php IF NOT EXIST %ustemp%\phpmyadmin\etc\phpmyadmin md %ustemp%\phpmyadmin\etc\phpmyadmin IF NOT EXIST %ustemp%\phpmyadmin\etc\phpmyadmin goto :ABORT IF NOT EXIST %ustemp%\phpmyadmin\tmp md %ustemp%\phpmyadmin\tmp IF NOT EXIST %ustemp%\phpmyadmin\tmp goto :ABORT :Copy complete database XCOPY "%CD%\udrive\usr\local\mysql\data" %ustemp%\mysql\data\ /s /q goto :CONTINUE :ABORT echo Sorry the folder %ustemp% or one of its sub-folders could not be created. echo Can not continue hence aborting pause EXIT :CONTINUE rem === END CD ROM ============================================================ rem ### Is Apache running if it is jump to STARTED rem ### First check for system error jump to Pause allows error message to be displayed. udrive\home\admin\program\pskill.exe Apache.exe if errorlevel 2 goto :PAUSE if not errorlevel 1 goto :STARTED rem ### Apache not running. Check for drive letter if not set (%1) use default. set Disk=%1 if "%Disk%"=="" set Disk=w rem ### Create the virtual disk, if it fails go to Hint subst %Disk%: "udrive" if errorlevel 1 goto :HINT rem ### Drive was created. Create variables for paths and programs set apachepath=\usr\local\apache2\ set apacheit=%Disk%:%apachepath%bin\Apache.exe -f %apachepath%conf\httpd.conf -d %apachepath%. set programit=%Disk%:\home\admin\program\ set closeit=%programit%close.bat %Disk% rem ### Change path to PHP - Required for running scripts %Disk%: cd \usr\local\php rem ### Provide feedback to user CLS echo The server is working on the disk %Disk%:\ [http/127.0.0.1/apanel/] rem ### Start Apache server start %programit%uniserv.exe "%apacheit%" "%closeit%" rem ### Start Apanel start \home\admin\www\redirect.html rem ### Start MySQL server - skip if requested not to start (%2) if "%2"=="nomysql" goto :NOMYSQL start \usr\local\mysql\bin\mysqld-opt.exe --defaults-file=/usr/local/mysql/bin/my-small.cnf :NOMYSQL rem ### Does user want to run a command prompt, if not END if "%3"=="console" goto :CONSOLE goto :END :CONSOLE rem ### User wants to run a command prompt. Opens in MySQL bin rem ### Allows command clients to be used (musql.exe and mysqladmin.exe ) %Disk%: cd \usr\local\mysql\bin start cmd.exe goto :END :HINT CLS echo The disk %Disk% is busy. Use start.bat [disk letter] goto :PAUSE :STARTED CLS echo ERROR!!! echo One of the instances of Apache server is started. Use stop.bat :PAUSE echo . pause :END rem restore original working directory popd
Stop.bat
UniServer boast that it leaves no dust behind in keeping with this philosophy the last thing our new Stop.bat file does is to delete the temporary folder and all its content.
Before making any changes save the old file to folder Uniform Server/uscd as old_Stop.bat
Use this link to view the new batch file (its a text file) save as new_Stop.bat
Below I have provided a detailed description of the new commands added to Stop.bat. These are placed at the end of the file.
ping -n 20 localhost > nul | This line serves no other purpose than to introduce a delay. Our temporary folder cannot be deleted until process using it terminate. I have found no way of detecting when a process ends from a batch file and then continue to the next command. Hence this little kludge delays for a certain time in the hope the processes have terminated before attempting to delete the folder. A last resort is to run stop.bat again, not elegant but works. Results returned from ping are dumped to the black hole file named nul.
-n count Number of echo requests to send |
RMDIR /s /q c:\us35tempset | RMDIR Remove directory (deletes a named folder) we provide the full path to that folder. Switches: There are two switches without /s you are requested to confirm each sub-folder deletion. Quite mode is enable by /q this prevents the display of every deletion. |
new_Stop.bat
rem File Name: new_Sop.bat rem Location: Uniform Server rem Created By: The Uniform Server Development Team rem Edited By: Olajide Olaolorun (empirex) rem Comment: Tara's new syetm of shutting down the server rem To Developers: Implemented a new system of server shutdown rem Edited Last By: Mike Gleaves (Ric) rem Comment: Proposed mods MPG (Ric) 14-4-2008 rem Proposed enhancement MPG 3-7-08 rem Added new section for CD ROM 29-06-08 rem Tutorial Oily Rag 1: CD Part 1 @echo off rem working directory current folder pushd %~dp0 rem Stop Apache indirectly stops MySQL udrive\home\admin\program\pskill.exe Apache.exe c rem ### Check for system error jump to Pause allows error message to be displayed. if errorlevel 2 goto :PAUSE goto :END :PAUSE echo . pause :END rem === MPG new code added for CD ROM ============================ rem This intruduces a delay allowing processes to end rem otherwise RMDIR fails and the bat must be re-run echo Please Wait removing files ping -n 15 localhost > nul :clean up remove dir RMDIR /s /q c:\us35temp rem ===END CD ROM ================================================ rem restore original working directory popd
Download
If you have problems consider downloading this overlay file CD Part 1 copy the file to folder Uniform Server before running the file make sure you are using a copy of your servers otherwise you will need to manually reverse the above changes to return to your original servers.
Testing
Start the servers using new_Server_Start.bat check they function correctly. Stop the servers using new_Stop.bat make sure the folder c:/us35temp is deleted.
That completes testing all that remains is to burn folder Uniform Server (and all its content) to a CD.
To run Uniform Server from a CD navigate to folder Uniform Server and use new_Server_Start.bat remember to run new_Stop.bat
Summary
Take one clean copy of Uniform Server, add your site including database; make the above changes, burn to a CD and enjoy. I have tested the above using a copy of Uniform Server running MediaWiki with no problems.
The CD mode has a few limitations notably certain elements in apanel and phpMyBackupPro will not work; however the three core components Apache, MySQL and phpMyAdmin do.
Well what happened to this mode switching thing? Remember that folder you diligently filled with old and new files seems a pointless exercise however on the next page I put these to good use where I cover mode switching.
Ric |