Recently, I have been searching for a ultimate solution to remedy those situations whereas TCP traffic doesn't come through at the client side. The symptom could be occasional blank page on the browser.
It points me back to study the root cause of broken router or mis-configured firewall settings. For security reasons, some network administrator would make prudent settings to block ICMP traffic from the WAN whereas ICMP (type 3, code 4) packet is one key element in traditional Path MTU Discovery (PMTU-D) process initiated by the server.
Normally, MTU size is default to 1500 bytes at perfect network environment, especially the LAN. It's not the case in a real world situation where MTU size may vary. PMTU-D helps solve this problem in most cases. However, firewall administrator may simply block ICMP packet for security purposes. ICMP packet is useful for getting feedback from the destination for adjusting a possible MTU size to let the traffic come through without defragmentation, i.e., no further DF flag is required during the communication.
Hopefully, IETF Working Group has worked out another way to detect MTU without the need of ICMP packet. Packetization Layer Path MTU Discovery (PLPMTUD, RFC 4821) can work over the network layer above IP, i.e., TCP or UDP. This makes PLPMTUD can work independent of ICMP messages. It starts probing from a small packet size set as inital MSS, then increase progressively to a larger size until a packet loss happens. The optimum size will be used as MTU for that particular connection.
On Linux, there are several network parameters for tweaking:
/proc/sys/net/ipv4/tcp_mtu_probing
/proc/sys/net/ipv4/tcp_base_mss
/proc/sys/net/ipv4/ip_no_pmtu_disc
Possible values of tcp_mtu_probing are:
0: Don't perform PLPMTUD
1: Perform PLPMTUD only after detecting a "blackhole" in old-style PMTUD
2: Always perform PLPMTUD, and use the value of tcp_base_mss as the initial MSS.
Setting tcp_mtu_probing to 1 makes sure that PLPMTUD will start only when black hole router is detected along the way to the destination IP.
Default value of tcp_base_mss is 512 and is supposed to remain the same.
ip_no_pmtu_disc is default to 0 whereas traditional PMTUD can be used at all time. Setting this to 1 seems to make it totally skip the old fashioned way to detect MTU size by using ICMP message.
Ref:
http://kb.pert.geant.net/PERTKB/PathMTU
http://www.znep.com/~marcs/mtu/
http://kerneltrap.org/mailarchive/linux-net/2008/5/24/1928074/thread
Monday, November 7, 2011
Wednesday, November 2, 2011
Back to the old school days of TCP/IP
Just imagine that you are hosting your favorite web site which loads smoothly at your side, even at home, on the bus or in the coffee shop. Til one day, you received a complaint from your old school friend who challenged that you might have really poor web authoring skills. Sometime, what he had seen was a blank page while he was visiting your web site. Blank, in that way, white color with no extra icon, text or even error message, purely blank. Pressing [Refresh] button and things appear again. It sounds like you have been hosting a broken web server. Anyway, it was fine to visit any other web sites from your friend's computer except this one.
"Is the web site crippling enough for me to visit?!!", you might ask. No worry, there is nothing wrong with the web server. Bad client settings of web browser? Maybe.
However, you might not work out how the web browser actually works to display a blank page like this. This, in my opinion, indicates that the web traffic doesn't actually come through. Internet is a huge network coordinated by different routing equipment. They can be linked up with fiber optics, copper wires or even wireless signal in the air. Along the years, the speed of Internet is growing faster than ever before. People change their gears from a wired 56K modem to nowadays USB/built-in Wi-Fi adapter up to 300mbps in transmission. They might forget those days while scientists were excited about the data packets being sent through a co-axial cable successfully.
There are some articles reviewing one of the common TCP/IP features called TPC extensions for high performance network, a.k.a., RFC1323. You may have interest to have a look at the request for comment like this in bare text format which was dated back to 1992.
http://www.ietf.org/rfc/rfc1323.txt
Among those, TCP Window Scaling Option contributes faster packet transfer by controlling receiving window dynamically inside the network adapter. This boosts the rate of data transfer to next level. A single server can significantly increased its network capability by turning this feature on.
Somehow, this has been seen as industry standard for years. People argued that it still has not been implemented well on some routers and causes all sort of problems in basic TCP/IP communication.
A blogger pointed out that some router would reset a vital parameter during TCP communication and lead to misunderstanding by the computers at both ends.
http://inodes.org/2006/09/06/tcp-window-scaling-and-kernel-2617/
In this case, people would normally not aware of the problem until they realized that they couldn't access some web sites and think the sites might be down for service.
There might be some broken routers or switches along the pathway to the target computer whereas they might been poorly managed and finally the doomsday comes. It might also be a long time ago since the network administrator updated the firmware on their routers. So, what about your side? Can you do something to ease that problem even you know that their router won't last long? For the best interests of the end users, we still need to find a way to sort this out.
Okay. In order to get TCP Window Scaling working, TCP Window Scaling Option must be turned ON from both ends. Either one of them has turned it OFF, TCP Window Scaling would not happen. Nowadays, this basic TCP feature might possibly turned on at the client side. Therefore, to sacrifice a bit of your server performance, you need to turn off TCP Window Scale Option on your server. What I say a bit could means huge difference of the user experience at far side. Depending on the actual server performance, it might take longer time to transmit the same set of data packets with TCP Window Scale Option OFF.
If all these don't work for you, then check your browser settings or hardware like network adapter. You may find a reason for this.
Reference materials can be found in the following links:
http://prowiki.isc.upenn.edu/wiki/TCP_tuning_for_broken_firewalls
http://wiki.squid-cache.org/KnowledgeBase/BrokenWindowSize
http://packetlife.net/blog/2010/aug/4/tcp-windows-and-window-scaling/
"Is the web site crippling enough for me to visit?!!", you might ask. No worry, there is nothing wrong with the web server. Bad client settings of web browser? Maybe.
However, you might not work out how the web browser actually works to display a blank page like this. This, in my opinion, indicates that the web traffic doesn't actually come through. Internet is a huge network coordinated by different routing equipment. They can be linked up with fiber optics, copper wires or even wireless signal in the air. Along the years, the speed of Internet is growing faster than ever before. People change their gears from a wired 56K modem to nowadays USB/built-in Wi-Fi adapter up to 300mbps in transmission. They might forget those days while scientists were excited about the data packets being sent through a co-axial cable successfully.
There are some articles reviewing one of the common TCP/IP features called TPC extensions for high performance network, a.k.a., RFC1323. You may have interest to have a look at the request for comment like this in bare text format which was dated back to 1992.
http://www.ietf.org/rfc/rfc1323.txt
Among those, TCP Window Scaling Option contributes faster packet transfer by controlling receiving window dynamically inside the network adapter. This boosts the rate of data transfer to next level. A single server can significantly increased its network capability by turning this feature on.
Somehow, this has been seen as industry standard for years. People argued that it still has not been implemented well on some routers and causes all sort of problems in basic TCP/IP communication.
A blogger pointed out that some router would reset a vital parameter during TCP communication and lead to misunderstanding by the computers at both ends.
http://inodes.org/2006/09/06/tcp-window-scaling-and-kernel-2617/
In this case, people would normally not aware of the problem until they realized that they couldn't access some web sites and think the sites might be down for service.
There might be some broken routers or switches along the pathway to the target computer whereas they might been poorly managed and finally the doomsday comes. It might also be a long time ago since the network administrator updated the firmware on their routers. So, what about your side? Can you do something to ease that problem even you know that their router won't last long? For the best interests of the end users, we still need to find a way to sort this out.
Okay. In order to get TCP Window Scaling working, TCP Window Scaling Option must be turned ON from both ends. Either one of them has turned it OFF, TCP Window Scaling would not happen. Nowadays, this basic TCP feature might possibly turned on at the client side. Therefore, to sacrifice a bit of your server performance, you need to turn off TCP Window Scale Option on your server. What I say a bit could means huge difference of the user experience at far side. Depending on the actual server performance, it might take longer time to transmit the same set of data packets with TCP Window Scale Option OFF.
If all these don't work for you, then check your browser settings or hardware like network adapter. You may find a reason for this.
Reference materials can be found in the following links:
http://prowiki.isc.upenn.edu/wiki/TCP_tuning_for_broken_firewalls
http://wiki.squid-cache.org/KnowledgeBase/BrokenWindowSize
http://packetlife.net/blog/2010/aug/4/tcp-windows-and-window-scaling/
Monday, September 19, 2011
KeepAlive or not?
People have been discussing about turning an Apache feature on/off while I have been scratching my head wondering why the clients at the far side are suffering slow HTTPS connection behind NAT router and firewall.
HTTP v 1.1 protocol provide nice feature KeepAlive for Apache server to keep active connection opening to serve ongoing requests from the same client. In case of a prefork MPM Apache instance, it means a lock on the work process to this particular client and will no longer release until the client is completely fulfilled and let go.
For dynamic web application written by PERL, PHP or any other scripting language, a prefork process might be occupied by these resources intensive requests which cause a heavy loading at the server side. KeepAlive would create prolonged period of time for the process to work for one client only while others are waiting for the service. The process may actually work for many other clients at the same period of time. To free this, a temporary solution would be turning KeepAlive feature off in the configuration file like "httpd-default.conf".
A blogger Steve has found a programming way to sort this out but it may not good enough for ultimate setting embedded in Apache server itself. Anyway, it is still a workable solution.
For a better understanding, please read this.
HTTP v 1.1 protocol provide nice feature KeepAlive for Apache server to keep active connection opening to serve ongoing requests from the same client. In case of a prefork MPM Apache instance, it means a lock on the work process to this particular client and will no longer release until the client is completely fulfilled and let go.
For dynamic web application written by PERL, PHP or any other scripting language, a prefork process might be occupied by these resources intensive requests which cause a heavy loading at the server side. KeepAlive would create prolonged period of time for the process to work for one client only while others are waiting for the service. The process may actually work for many other clients at the same period of time. To free this, a temporary solution would be turning KeepAlive feature off in the configuration file like "httpd-default.conf".
A blogger Steve has found a programming way to sort this out but it may not good enough for ultimate setting embedded in Apache server itself. Anyway, it is still a workable solution.
For a better understanding, please read this.
Linux VM TCP UDP Tunning
Network optimization among server VMs is a hot topic as read in recent discussion. Back to the old-school optimization strategies, I find them useful in the VM world.
The followings are Linux network settings for high throughput interface card:
http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php
http://fasterdata.es.net/fasterdata/host-tuning/linux/
The followings are Linux network settings for high throughput interface card:
# # # Add these lines to /etc/sysctl.conf as appropriate # vm.swappiness = 10 net.core.wmem_max = 8388608 net.core.rmem_max = 8388608 net.core.rmem_default = 65535 net.core.wmem_default = 65535 net.ipv4.tcp_rmem = 4096 87380 8388608 net.ipv4.tcp_wmem = 4096 65536 8388608 net.ipv4.tcp_mem = 8388608 8388608 8388608 net.ipv4.route.flush = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_timestamps = 1 net.ipv4.tcp_sack = 1Thanks for the tips:
http://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php
http://fasterdata.es.net/fasterdata/host-tuning/linux/
Thursday, September 8, 2011
[RESOLVED] Slow Windows 7 Guest VM after upgrade to SP1
VMware has pointed out that VMware Workstation prior to version 7.1.4 is known to have problem with Windows 7 Host upgraded to Service Pack 1 (SP1).
So, what about Windows 7 Guest VM equipped with SP1? I have my PC installed VMware 7.1.3 which only allows the administrator to perform any upgrade on it. Thanks to the company policy.
After the upgrade of Guest VM to SP1, Guest VM nearly caused the system to hang for minutes to do simple tasks and a high CPU usage at all time. People blamed on VMware's memory optimization feature which is enabled by default to optimize Guest VM memory consumption.
Temporary solution would be adding the following line into config.ini file located at C:\ProgramData\VMware\VMware Workstation:
vmmon.disableHostParameters = TRUE
This turns off VM memory optimization feature and some other possible host configurable features. After saving the change onto config.ini file, a clean reboot on hosting system is recommended.
Now, your favourite Win7 SP1 Guest VM should be back on track with presumably high performance.
Reference:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1036185
So, what about Windows 7 Guest VM equipped with SP1? I have my PC installed VMware 7.1.3 which only allows the administrator to perform any upgrade on it. Thanks to the company policy.
After the upgrade of Guest VM to SP1, Guest VM nearly caused the system to hang for minutes to do simple tasks and a high CPU usage at all time. People blamed on VMware's memory optimization feature which is enabled by default to optimize Guest VM memory consumption.
Temporary solution would be adding the following line into config.ini file located at C:\ProgramData\VMware\VMware Workstation:
vmmon.disableHostParameters = TRUE
This turns off VM memory optimization feature and some other possible host configurable features. After saving the change onto config.ini file, a clean reboot on hosting system is recommended.
Now, your favourite Win7 SP1 Guest VM should be back on track with presumably high performance.
Reference:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1036185
Friday, August 5, 2011
Fedora yum update slow symptom
I have my netbook installed with Fedora 14 which has been fine-tuned to have better wide-screen display driver, faster start-up and so on. Finally, it takes me more than an hour to do the first "yum update" process which should be finished in 10 minutes in Ubuntu Netbook edition.
People suggest using a yum plugin called fastestmirror:
After the installation, it does not really help to boost up the download speed. It is suspected that it takes slow mirror sites for downloading.
Digging into the details of /etc/yum/pluginconf.d/fastestmirror.conf, I found one useful option called "include_only". And then I uncomment one line and change it to:
AARNET supposed to be fastest mirror in Australia, so you might want to add your fastest mirror in your own country.
Before executing yum update, it is better to remove the cache file timedhosts.txt which was used for time checking from previous actions:
Now, run:
You should be able to pull things from the repository mirror at top speed.
People suggest using a yum plugin called fastestmirror:
$ $su -c 'yum install yum-plugin-fastestmirror'
After the installation, it does not really help to boost up the download speed. It is suspected that it takes slow mirror sites for downloading.
Digging into the details of /etc/yum/pluginconf.d/fastestmirror.conf, I found one useful option called "include_only". And then I uncomment one line and change it to:
# include_only=mirror.aarnet.edu.au
AARNET supposed to be fastest mirror in Australia, so you might want to add your fastest mirror in your own country.
Before executing yum update, it is better to remove the cache file timedhosts.txt which was used for time checking from previous actions:
$ $su -c 'rm /var/cache/yum/i386/14/timedhosts.txt'
Now, run:
$ $su -c 'yum update'
You should be able to pull things from the repository mirror at top speed.
RBAC, pitfall or challenge?
A funny meeting has been held a few days ago while a topic has raised clinical researcher's interest in making good clinical software by using proper role based access control model. It seems to me that RBAC model has been a traditional topic among university students in CS Faculty. It could be a never-ending story when people are trying to find a way to create a generic model for general clinical applications.
When talking about managing tons of various e-health projects, people are always excited in finding an ultimate way to replicate existing model and turn it into a new one. This seems to be a revolution. They might imagine there should be plug-in available for all those web projects they have been working on. A gadget like this might cause those developers to scratch the hairs out of their heads. People might call it generic authentication module or generic adapter for user authentication.
On typical Active Directory based authentication model, local users are authenticated against a central AD server within the domain. How can we apply similar concept of this to make it working among various clinical applications?
We may see those applications as middle clients who need to authenticate the down-stream users for giving out access right and assigning user privilege. The central authentication module can be simply a database instance which stores all those user privileges and functional access rights while the popular webapps hosting on Apache server can make use of the database for central authentication. Different webapps will need different set of data tables to uniquely identify a user particularly for them. The good thing is that we can manage the authentication module at a central location while all other webapps will need to contact this module to collect necessary information for authentication and assigning proper access right to all kinds of features and functions provided locally in the webapps.
I can only tell this is not a new concept but people will realize the convenience of constructing new web projects with an easy way to incorporate user authentication from a third-party database server. Furthermore, we can construct API to bridge those applications developed on Java, C# or Python. This makes me aware of the term called "User Master Index". Similar to managing those patient records, it is more likely for the developers to construct something like "Patient Master Index". They serve the same purpose for a central management of user/patient identity which would be sharing among the applications. Also, the process of constructing the webapps becomes much more efficient.
When talking about managing tons of various e-health projects, people are always excited in finding an ultimate way to replicate existing model and turn it into a new one. This seems to be a revolution. They might imagine there should be plug-in available for all those web projects they have been working on. A gadget like this might cause those developers to scratch the hairs out of their heads. People might call it generic authentication module or generic adapter for user authentication.
On typical Active Directory based authentication model, local users are authenticated against a central AD server within the domain. How can we apply similar concept of this to make it working among various clinical applications?
We may see those applications as middle clients who need to authenticate the down-stream users for giving out access right and assigning user privilege. The central authentication module can be simply a database instance which stores all those user privileges and functional access rights while the popular webapps hosting on Apache server can make use of the database for central authentication. Different webapps will need different set of data tables to uniquely identify a user particularly for them. The good thing is that we can manage the authentication module at a central location while all other webapps will need to contact this module to collect necessary information for authentication and assigning proper access right to all kinds of features and functions provided locally in the webapps.
I can only tell this is not a new concept but people will realize the convenience of constructing new web projects with an easy way to incorporate user authentication from a third-party database server. Furthermore, we can construct API to bridge those applications developed on Java, C# or Python. This makes me aware of the term called "User Master Index". Similar to managing those patient records, it is more likely for the developers to construct something like "Patient Master Index". They serve the same purpose for a central management of user/patient identity which would be sharing among the applications. Also, the process of constructing the webapps becomes much more efficient.
Friday, July 22, 2011
Solution to CIFS mount failure
Once the OS is upgraded to Ubuntu 9.10, the network drive mounted in CIFS type is no longer working again.
Trying to tackle the issue by the following command:
In a Google search, one post has been found useful.
Re-installing smbfs package again solves this problem:
Trying to tackle the issue by the following command:
.. CIFS VFS: cifs_mount failed w/return code = -22
In a Google search, one post has been found useful.
Re-installing smbfs package again solves this problem:
.. $ sudo apt-fast install smbfs
Friday, July 15, 2011
Ubuntu Jaunty 9.04 old package repository
Ubuntu release Jaunty 9.04 has been deprecated while the repository is completely taken off from the mirror server and Ubuntu server as well. Since missing on the repository servers, this repository is being hunted by the users who stick to this particular release for a long time. For people who might have forgotten to upgrade the OS on their own, this could be a bad news. That means no more package available could be installed, via regular way.
To port the old release repository for maintenance and last minute update, a post on the forum points to an interesting location:
http://old-releases.ubuntu.com/
which stores all those obsolete releases of Ubuntu repositories including Jaunty 9.04. However, this requires some changes in sources.list file for proper redirection.
Open /etc/apt/sources.list and edit as follows:
Save and exit.
After that, you may try the following to check if you can checkout the updates correctly:
You may now install those missing packages previously supported in Ubuntu release 9.04 before you decide to upgrade to a newer but still obsolete release 9.10.
To port the old release repository for maintenance and last minute update, a post on the forum points to an interesting location:
http://old-releases.ubuntu.com/
which stores all those obsolete releases of Ubuntu repositories including Jaunty 9.04. However, this requires some changes in sources.list file for proper redirection.
Open /etc/apt/sources.list and edit as follows:
# # deb cdrom:[Ubuntu-Server 9.04 _Jaunty Jackalope_ - Release i386 (20090421.1)]/ jaunty main restricted # deb cdrom:[Ubuntu-Server 9.04 _Jaunty Jackalope_ - Release i386 (20090421.1)]/ jaunty main restricted # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. #deb http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty main restricted #deb-src http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty main restricted deb http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty main restricted ## Major bug fix updates produced after the final release of the ## distribution. ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team. Also, please note that software in universe WILL NOT receive any ## review or updates from the Ubuntu security team. #deb http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty universe #deb-src http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty universe deb http://old-releases.ubuntu.com/ubuntu/ jaunty universe deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty universe ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu ## team, and may not be under a free licence. Please satisfy yourself as to ## your rights to use the software. Also, please note that software in ## multiverse WILL NOT receive any review or updates from the Ubuntu ## security team. #deb http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty multiverse #deb-src http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty multiverse deb http://old-releases.ubuntu.com/ubuntu/ jaunty multiverse deb-src http://old-releases.ubuntu.com/ubuntu/ jaunty multiverse ## Uncomment the following two lines to add software from the 'backports' ## repository. ## N.B. software from this repository may not have been tested as ## extensively as that contained in the main release, although it includes ## newer versions of some applications which may provide useful features. ## Also, please note that software in backports WILL NOT receive any review ## or updates from the Ubuntu security team. # deb http://us.archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse # deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-backports main restricted universe multiverse ## Uncomment the following two lines to add software from Canonical's ## 'partner' repository. ## This software is not part of Ubuntu, but is offered by Canonical and the ## respective vendors as a service to Ubuntu users. # deb http://archive.canonical.com/ubuntu jaunty partner # deb-src http://archive.canonical.com/ubuntu jaunty partner #deb http://security.ubuntu.com/ubuntu/ jaunty-security restricted main multiverse universe #deb http://mirror.aarnet.edu.au/pub/ubuntu/archive/ jaunty-updates restricted main multiverse universe deb http://old-releases.ubuntu.com/ubuntu/ jaunty-security restricted main multiverse universe deb http://old-releases.ubuntu.com/ubuntu/ jaunty-updates restricted main multiverse universe
Save and exit.
After that, you may try the following to check if you can checkout the updates correctly:
$ $ sudo apt-get update
You may now install those missing packages previously supported in Ubuntu release 9.04 before you decide to upgrade to a newer but still obsolete release 9.10.
Saturday, July 9, 2011
Ubuntu Upgrade from 9.04 to 10.04 - a CD/DVD way
Something interested is found from the post about the way to upgrade Ubuntu 9.04 subsequently to 9.10 and then to 10.04. The method involves performing Ubuntu upgrade by using an ISO image of Ubuntu 9.10 downloaded from the repository server.
Upgrading Using the Alternate CD/DVD
Download the alternate installation CD via:
Burn the ISO to a CD and insert it into the CD-ROM drive of the computer to be upgraded.
If the ISO file is on the computer to be upgraded, you could avoid wasting a CD by mounting the ISO as a drive with a command like:
A dialog will be displayed offering you the opportunity to upgrade using that CD.
Follow the on-screen instructions.
If the upgrade dialog is not displayed for any reason, you may also run the following command using Alt+F2:
After an upgrade to Ubuntu 9.10 is successfully completed, another wave of upgrade to 10.04 can be done through GUI update manager.
Ref: https://help.ubuntu.com/community/KarmicUpgrades
Upgrading Using the Alternate CD/DVD
Download the alternate installation CD via:
$ $ sudo wget http://mirror.aarnet.edu.au/pub/ubuntu/releases/9.10/ubuntu-9.10-alternate-i386.iso
Burn the ISO to a CD and insert it into the CD-ROM drive of the computer to be upgraded.
If the ISO file is on the computer to be upgraded, you could avoid wasting a CD by mounting the ISO as a drive with a command like:
$ $ sudo mount -o loop ~/Desktop/ubuntu-9.10-alternate-i386.iso /media/cdrom0
A dialog will be displayed offering you the opportunity to upgrade using that CD.
Follow the on-screen instructions.
If the upgrade dialog is not displayed for any reason, you may also run the following command using Alt+F2:
$ $ gksu "sh /media/cdrom0/cdromupgrade"
After an upgrade to Ubuntu 9.10 is successfully completed, another wave of upgrade to 10.04 can be done through GUI update manager.
Ref: https://help.ubuntu.com/community/KarmicUpgrades
Subscribe to:
Posts (Atom)