We are moving

7 May, 2008 by Lei

ICN Technologies is moving office to the beautiful side of town, Mawson Lakes. To view the late, it’s much joyful to work, and more motivation to work harder as we wondered. :)

Anyway, the moving is about to commence on the 15th of May, 2008. 

Lei

NAS File Server - HDD LAN Enclosure

28 March, 2008 by Lei

NAS (Network Attached Storage) is rated the most looking forwarded technology by The PC Authorities. ICN Technologies is pleased to introducing the very compact NAS HDD LAN Enclosure.

This unit support up to 1TB Hard Drive, and works as FTP, NFS, SAMBA server, depends on configuration, all services can run at the same time.

Here is a picture of the unit in action.
Free Image Hosting at allyoucanupload.com

Install Apache2.2 with ssl in FREEBSD

16 March, 2008 by Lei

Getting Apache installed to get a web server running!

Installing Apache2.2

Make sure you update ports and then run the following commands:

# cd /usr/ports/www/apache22
# make install clean

That will install apache2.2

Configuring apache2

Lets edit the httpd.conf file:

# vi /usr/local/etc/apache22/httpd.conf

Scroll down and change the following settings. The optional settings I will put OPTIONAL before the setting:

OPTIONAL: Listen 80 - You can change this default option if you have more than one apache server running on your network
OPTIONAL: User www - Changes what user apache runs as
OPTIONAL: Group www - Changes what group apache runs as
ServerAdmin <!– var prefix = ‘ma’ + ‘il’ + ‘to’; var path = ‘hr’ + ‘ef’ + ‘=’; var addy46099 = ‘you’ + ‘@’; addy46099 = addy46099 + ‘example’ + ‘.’ + ‘com’; document.write( ” ); document.write( addy46099 ); document.write( ” ); //–> you@example.com This email address is being protected from spam bots, you need Javascript enabled to view it - change <!– var prefix = ‘ma’ + ‘il’ + ‘to’; var path = ‘hr’ + ‘ef’ + ‘=’; var addy46099 = ‘you’ + ‘@’; addy46099 = addy46099 + ‘example’ + ‘.’ + ‘com’; document.write( ” ); document.write( addy46099 ); document.write( ” ); //–> you@example.com This email address is being protected from spam bots, you need Javascript enabled to view it to your email address.
OPTIONAL: DocumentRoot “/stuff/www” - I don’t usually use the default path. I put my www documents on a seperate drive.
OPTIONAL: Directory “/stuff/www” - Change this to the same path as DocumentRoot (See above)
OPTIONAL: DirectoryIndex index.html index.html.var - add any pages you would use. For instance, add index.php if you use php pages
OPTIONAL: #CustomLog /var/log/httpd-access.log combined - I usually leave this commented unless you want to use this to track users looking at your site
OPTIONAL: ScriptAlias /cgi-bin/ “/usr/local/www/cgi-bin/” - change this to your cgi-bin path
OPTIONAL: Directory “/usr/local/www/cgi-bin”> - change this to the same path as ScriptAlias /cgi-bin above

Now lets tell apache to start:

# apachectl start

and hit Enter on your keyboard

We now need to tell Apache to run on startup. Please run the following command:

# echo ‘apache22_enable=”YES”‘ >> /etc/rc.conf

If you get no errors, apache should be running. Look at the page by opening a browser to http://localhost or replace localhost with the IP or the actual hostname of the box. If you went with the DocumentRoot defaults, You will see an apache test page until you get your site up and going. If you are behind a router or firewall, make sure you forward the apache port (Port 80) to the FreeBSD box otherwise you won’t be able to get there from here. :-)

Configuring SSL

Let’s get SSL Configured and Installed:

(FROM http://www.bsdguides.org/guides/freebsd/webserver/apache_ssl_php_mysql.php)

# mkdir /usr/local/etc/apache22/ssl.key
# mkdir /usr/local/etc/apache22/ssl.crt
# chmod 0700 /usr/local/etc/apache22/ssl.key
# chmod 0700 /usr/local/etc/apache22/ssl.crt

Create Certificate

Now, you need to understand that one server can hold multiple certificates, but only one per listening IP address. So, if your server is listening on one IP address, you can only have one certificate for the server. Follow me so far? All of your virtual domains can share the same certificate, but clients will get warning prompts when they connect to a secure site where the certificate does not match the domain name. If your server is listening on multiple IP addresses, your virtual hosts have to be IP-based — not name-based. This is something to consider when creating your certificate. :-)

Change to your root dir by typing in the following command. We want to save this configuration there as a backup.

# cd /root
# openssl genrsa -des3 -out server.key 1024

You will now be prompted to enter in a password. Write this down as you will need it later. We need to make a Certificate Signing Request (CSR):

# openssl req -new -key server.key -out server.csr

Enter your password when it asks for it. Make sure you enter your FQDN for the “Common Name” portion.

Self-signing your Certificate

You could always pay money to Verisign or Thawte for this but it costs $$$. Here is the way to do it:

# openssl x509 -req -days 365 -in /root/server.csr -signkey /root/server.key -out /root/server.crt

Now your cert is good for 365 days. If you want to make it longer, go right ahead and do so :-)

If you would like more information about SSL Certs, go to http://httpd.apache.org/docs-2.0/ssl/ssl_faq.html#aboutcerts

Now we need to copy the certs to the right place:

# cp /root/server.key /usr/local/etc/apache22/ssl.key/
# cp /root/server.crt /usr/local/etc/apache22/ssl.crt/

Now to give them the right permissions as well:

# chmod 0400 /usr/local/etc/apache22/ssl.key/server.key
# chmod 0400 /usr/local/etc/apache22/ssl.crt/server.crt

We will now want to copy the default httpd-ssl.conf from the extras folder to the Includes folder:

# cd /usr/local/etc/apache22/extra
# vi httpd-ssl.conf

Now modify the following:

DocumentRoot “/usr/local/www/data” - Change the path to your httpd.conf document root.
ServerName www.example.com:443 - Change www.example.com to your domain name.
ServerAdmin <!– var prefix = ‘ma’ + ‘il’ + ‘to’; var path = ‘hr’ + ‘ef’ + ‘=’; var addy46099 = ‘you’ + ‘@’; addy46099 = addy46099 + ‘example’ + ‘.’ + ‘com’; document.write( ” ); document.write( addy46099 ); document.write( ” ); //–> you@example.com This email address is being protected from spam bots, you need Javascript enabled to view it Change this to your email address
ErrorLog /var/log/httpd-error.log - You can leave this or comment it out.
TransferLog /var/log/httpd-access.log - You can leave this or comment it out.

Now run the following:

# apachectl stop
# apachectl start

The start means it will start in ssl mode to serve both http:// and https:// addresses. This used to be apachectl sslstart but that command has been depreciated.

The URL below includes instructions on how to remove the pass phrase prompt when apache starts

http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#removepassphrase

Configuring php for Apache

This section is pretty easy. Just run the following:

# cd /usr/ports/lang/php5
# make config

Make sure the box is checked that says Apache. If it isisn’t, put the cursor over it and then hit the Space Bar. Hit Tab and then hit Enter.

Then run the following to upgrade php5 to support Apache2.2

# make install clean
Next, we want to configure apache to use php5.

# vi /usr/local/etc/apache22/httpd.conf

and look for the first AddType section and add this to next line below the AddType section

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Next go to DirectoryIndex and make sure index.php is part of it like so:

DirectoryIndex index.php index.html

With Apache2.2 it now wants to load an Accept Filter. If you don’t load the following module on startup, You will get an error everytime you start apache. Run the following command:

# echo ‘accf_http_load=”YES”‘ >> /boot/loader.conf
Now rather than rebooting the box, we can load the module manually by running:

# kldload accf_http
and then if you start Apache, You won’t get that error.

Now run the following command to start apache.

# apachectl stop
# apachectl start

You will now have apache with SSL and PHP support!

Special thanks to Bill from FreeBSDRocks

Partnership with The Data Vault Pty Ltd

3 March, 2008 by Lei

It’s glad to announce ICN Technologies has formed formal partnership with The Data Vault Pty Ltd.

We have now, our own Data Vault storage in The Data Vault Data Centre, to provide Data Backup services for our clients.

ICN Technologies News Reader is online

29 February, 2008 by Lei

It’s all about Database.

It’s all about PHP Ajax.

It’s all about ICN Technologies.

The ICN Technologies News Reader is online. From the home page, click on the News you like to read, and then News Reader page is displayed, that’s it.

From the Database connection, PHP variable definition, Article Sections, to the actual page loaded, many operations on the server side, but it works like charm.

Product page is online, PHP implemented AJAX menu, reduce the time for loading new pages, and also reduce the bandwidth usage by many percent.

Formed partnership with The DataVault Pty Ltd in Melbourne. We are now, offering Data Off-site Backup in varies ways, from Online data backup, archiving, DVD replication, Server Data mirroring, to off-line HDD data mirroring, tape service, et al.

Custom made business machines, from clerk work, to heavily graphical 3D design, workgroup server, etc. We build them all.

AJAX Coding example

22 February, 2008 by Lei

This coding goes to your <head></head> tags

====================================

<script type=”text/javascript”>
var request;
var dest;

function processStateChange(){
if (request.readyState == 4){
contentDiv = document.getElementById(dest);
if (request.status == 200){
response = request.responseText;
contentDiv.innerHTML = response;
} else {
contentDiv.innerHTML = “Error: Status “+request.status;
}
}
}

function loadHTML(URL, destination){
dest = destination;
if (window.XMLHttpRequest){
request = new XMLHttpRequest();
request.onreadystatechange = processStateChange;
request.open(”GET”, URL, true);
request.send(null);
} else if (window.ActiveXObject) {
request = new ActiveXObject(”Microsoft.XMLHTTP”);
if (request) {
request.onreadystatechange = processStateChange;
request.open(”GET”, URL, true);
request.send();
}
}
}

=============================

Using links to call javasripts functions

<div id=”menu”>
<table width=”240px”>
<tr><th> &nbsp;Product &amp; Services</th></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=0′,’display’)”>IT/IS Consultation Service</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=1′,’display’)”>Network Analysis and Assessment</span></td></ctr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=2′,’display’)”>Business Desktop Support</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=3′,’display’)”>Business Data Backup</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=4′,’display’)”>Business Dedicate Server</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=5′,’display’)”>Database Outsourcing</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=6′,’display’)”>Software Engineering and Outsourcing</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=7′,’display’)”>Computer Hardware Outsourcing</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=8′,’display’)”>Business IT/IS Total Outsourcing</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=9′,’display’)”>Emergency IT/IS Service</span></td></tr>
<tr class=”rowA”><td>&nbsp;<span onclick=”loadHTML(’../products/product_ajax.php?product_id=10′,’display’)”>Temporary Link</span></td></tr>
</table>
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
</div>

==========================

And then all of them come to the AJAX  server-side function

<?php

switch($_GET['product_id']){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
require(’product-’.$_GET['product_id'].’.php’);

break;
default:
print(”No such category<br>”);
}

?>

===================

This is only the most basic functionality of a PHP AJAX MENU, use it at your own risk.

Job of the week Cont. Building menu system in Ajax using PHP

22 February, 2008 by Lei

Job of the week continue:

After a week of hard coding ICN Technologies CMS in php, it’s working so far so as expected. While the last two days being integration it to icnpro.com website. Now it’s online and good to go. There are still bugs to be fixed for example user login session not including time.

Since it’s our custom CMS system for icnpro.com, I’ve added some ajax coding. Utilizing AJAX to build a menu system. It is very efficient. As a result of the successful AJAX menu in CMS system, I’ve also added the AJAX system into the Product and Services page of the website. Try it out, I also included some AJAX PHP coding examples in the Research and Development Team website module, check it out and use it on your own risk.

ICNPro.com CMS has still more works to be done throughout it’s development life cycle. The system currently is only a prototype, more functionalities to be added in, such as adding encrypted articles, better structured coding, modification of existing articles.

User registration is not supported because of potential security risks. All users must be added by administrator (myself) into mysql database manual. User passwords are encrypted by MD5 algorithm, and no plain text is store in database. Happily we haven’t got too many users like IBM or EDS.

Regards.

Job of the week [at] ICN Technologies. Website CMS (Content Management System)

18 February, 2008 by Lei

It was really exciting to have company website online couple of weeks ago. Now, it’s time to build our own CMS as the website background management console for.

  • Programming language we use are PHP.
  • Database most likely MySQL.
  •  Website technology AJAX integrated into PHP pages.

It will have the basically functionalities first off, and it will be deployed with the week. I can also provide some demo usernames in here and our company website icnpro.com, so that people can experience a little bit of our work. And this system will go on as a software development life cycle, which is suppose to be an 5 iteration process. The version beta prototype will be available during the week.

Functionalities to be included:

  • Add new articles
  • modify and delete existing articles
  • Category management
  • User management and control
  • Levels of privileges for users
  • Database connect
  • Database manipulation

A custom made CMS has always been a advantage of any company, since it is more efficient, better defined function, by comparing to the ready made CMSes on the market. The ready made CMSes suite reasonably good for general purposes, and since they are good and took hundreds of man-hours to develop.  But a custom made CMS has many advantages over the ready made ones.  IT staffs have better understanding of the system within the company, and it takes less time to fix problems. And since it has only functionalities that is essential to the business, it has less possibility of fail compare to ready made ones.

Current work process is being working on the core system. And researching on new website technologies, such as AJAX. Ajax really the best option for all modem website, it is so resource efficient.

This top will continue updating.

Cheers.

Google Apps using external webhosting server DNS CNAME ‘A Record’ configuration

15 February, 2008 by Lei

Since last week, we have been doing configuration of my domain’s (icnpro.com) DNS, which was solely hosted by GoDaddy and all services provided by Google Apps. Before the needed configuration, there’s only Google Apps as the domain service provider, including such as email, calendar, docs, pages, et al. But then, we purchased ourselves a web hosting package, so that we need to configure the DNS CNAME and A Record to point the www request and ftp request of the domain (icnpro.com) to the webhosting servers.

This may help a few forks going down the same path, as I was, very hard to find answers on the net, even in Google App’s Google group, they could answer all of my questions. And then as for support, GoDaddy gave me a very useful advice, which is use webhosting dns server and delete GoDaddy DNS server, by doing this, all the configuration was going to be on the other server’s DNS configuration panel, which is NONE OF THEIR BUSINESS ANYMORE. :( Worst of worst is, once I changed all DNSes to Webhosting servers, I can’t login to my business email account anymore, how well the support is that? If I can’t login to my account, I can’t send them emails anymore, because all the configuration and email accounts are store in the business emails.

Therefore, bring up my own technical mind, and did this:

Google Apps originally gives you three (3) A Record host IP address, which were suppose to be their server addresses, turns out NOT, they have a “@” sign in the “A Host” name, which means all request of a domain (icnpro.com) goes to this IP address. and they why no matter how we changed the CNAME, www and ftp all goes to Google server. We we have done is delete all three A Record IP address, and then add two new ones.

First line, First field, “@”, second field “whatever your webhosting server IP address”.
Second line, First field, “www”, second field “whatever your webhosting server IP address is”.

After that, add CNAME record:
“www”, points to: “icnpro.com”
“ftp”, points to: “ftp.yourftpserverdomain.com”
“mysql”, points to: “mysql-1.yourmysqlserverdomain.com”
et al.

Explanation:
The first “A Record” points all your requests to (icnpro.com) from Internet to your webhosting server.

But then in CNAME, you have subdomains such as www, ftp, mysql, email, calendar which go to different servers. Keep Google Services unchanged, and use whatever your web hosting provide you to enter into CNAME.

Wait for more than 5 hours in some cases, DNS updates need take up to 48 hours.

RAID: Redundant Arrays of Inexpensive Disks

14 February, 2008 by Lei

By definition:_
RAID is a technology that supports the integrated use of two or more hard-drives in various configurations for the purposes of achieving greater performance, reliability through redundancy, and larger disk volume sizes through aggregation. RAID is also sometimes referred to as “Redundant Arrays of Inexpensive Drives” or “Redundant Arrays of Independent Disks/Drives”. RAID is an umbrella term for computer data storage schemes that divide and replicate data among multiple hard disk drives. RAID’s various designs balance or accentuate two key design goals: increased data reliability and increased I/O (input/output) performance.

There are many level of RAID configurations, the most common ones are RAID 0, RAID 1, RAID 3, RAID 4, RAID 5, RAID 6.

RAID 0:_

Striped set without parity. Provides improved performance and additional storage but no fault tolerance. Any disk failure destroys the array, which becomes more likely with more disks in the array. A single disk failure destroys the entire array because when data is written to a RAID 0 drive, the data is broken into fragments. The number of fragments is dictated by the number of disks in the drive. The fragments are written to their respective disks simultaneously on the same sector. This allows smaller sections of the entire chunk of data to be read off the drive in parallel, giving this type of arrangement huge bandwidth. When one sector on one of the disks fails, however, the corresponding sector on every other disk is rendered useless because part of the data is now corrupted. RAID 0 does not implement error checking so any error is unrecoverable. More disks in the array means higher bandwidth, but greater risk of data loss.

RAID 1:_

It also named as DATA Mirroring. Mirrored set without parity. Provides fault tolerance from disk errors and single disk failure. Increased read performance occurs when using a multi-threaded operating system that supports split seeks, very small performance reduction when writing. Array continues to operate so long as at least one drive is functioning.

RAID 3:_

Striped set with dedicated parity. This mechanism provides an improved performance and fault tolerance similar to RAID 5, but with a dedicated parity disk rather than rotated parity stripes. The single parity disk is a bottle-neck for writing since every write requires updating the parity data. One minor benefit is the dedicated parity disk allows the parity drive to fail and operation will continue without parity or performance penalty.

RAID 4:_

Identical to RAID 3 but does block-level striping instead of byte-level striping.

RAID 5:_

Striped set with distributed parity. Distributed parity requires all but one drive to be present to operate; drive failure requires replacement, but the array is not destroyed by a single drive failure. Upon drive failure, any subsequent reads can be calculated from the distributed parity such that the drive failure is masked from the end user. The array will have data loss in the event of a second drive failure and is vulnerable until the data that was on the failed drive is rebuilt onto a replacement drive.

RAID 6:_

Striped set with dual parity. Provides fault tolerance from two drive failures; array continues to operate with up to two failed drives. This makes larger RAID groups more practical, especially for high availability systems. This becomes increasingly important because large-capacity drives lengthen the time needed to recover from the failure of a single drive. Single parity RAID levels are vulnerable to data loss until the failed drive is rebuilt: the larger the drive, the longer the rebuild will take. With dual parity, it gives time to rebuild the array without the data being volatile while the failed drive is being recovered.