Virtualmin error while installing on Ubuntu 10.4

While I am very comfortable using Linux via a command line shell, I think all of us can admit that occasionally we need to look up a command or two due to non-regular use. Because time is short, and can be expensive when we have tons to do, I usually install Virtualmin (which also installs Webmin) on most of my servers. It is simply easier to login and get things done quickly.

Well, as I was setting up a new server at my hosting provider today and installing Virtualmin I ran into a little problem. The server was a fresh install, and Virtualmin would not install on my fresh load of Ubuntu 10.4 (which is a supported OS by Virtualmin). Instead I received the error:

... No apport report written because the error message indicates its a followup error from a previous failure
 
pkg: dependency problems prevent configuration of virtualmin-base:
virtualmin-base depends on dovecot-common; however:
Package dovecot-common is not configured yet.
virtualmin-base depends on dovecot-imapd; however:
Package dovecot-imapd is not configured yet.
virtualmin-base depends on dovecot-pop3d; however:
Package dovecot-pop3d is not configured yet.
dpkg: error processing virtualmin-base (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
dovecot-common
dovecot-imapd
dovecot-pop3d
virtualmin-base
 
FATAL - 2011-09-01 00:07:13 - Fatal Error Occurred: Something went wrong during installation: 0
FATAL - 2011-09-01 00:07:13 - Cannot continue installation.
FATAL - 2011-09-01 00:07:14 - Attempting to remove virtualmin repository configuration, so the installation can be
FATAL - 2011-09-01 00:07:14 - re-attempted after any problems have been resolved.
FATAL - 2011-09-01 00:07:14 - Removing temporary directory and files.
FATAL - 2011-09-01 00:07:14 - If you are unsure of what went wrong, you may wish to review the log
FATAL - 2011-09-01 00:07:14 - in /root/virtualmin-install.log

Well, after some Google searching I determined that the problem may be related to a bad hostname set on the server. This was a little confusing because the install also detected this at the beginning and asked me what I would like the hostname set to. However, it appears that providing the hostname did not make a difference because Virtualmin was not able to set it.

I first tested the hostname to see if this was the problem by doing:

$ hostname -f

Sure enough, it warned that the hostname was a problem. So here is how I fixed things:

First, I had to set the hostname on the server (I use sudo, but you could be logged in as root or change to superuser with su.):

# sudo vi /etc/hostname

In vi you would edit the hostname to be a fully qualified domain name (FDQN) and saving. (click “i” to enter insert mode, then “esc” to stop, and hit “ZZ” to save and close. Note: these are capital “ZZ”.)

Second, this requires a restart of the hostname service to apply the change. (Note: you can use ‘restart’ instead of stop and start.)

# sudo /etc/init.d/hostname stop
# sudo /etc/init.d/hostname start

Third, I had to then update my hosts file to also reflect the change. (click “i” to enter insert mode, then “esc” to stop, and hit “ZZ” to save and close. Note: these are capital “ZZ”.)

# sudo vi /etc/hosts

IMPORTANT: If you do not include the “shortname” after the hostname applications will still not consider this a FDQN.

Example of what should be in the hosts file when you are done:

127.0.0.1     myhome.domain.com myhome

After doing these three steps I was able to successfully install Virtualmin with no issues.

Tether Android to Ubuntu for free Internet

A couple of weeks ago I was without Internet (thanks to AT&T), and was forced to go to Starbucks to check email and commit work I had done. While I like going to Starbucks, it was not the best working situation for someone who works from home.

Since I have an Android (HTC Evo) I thought about USB tethering the device to my laptop and Internet sharing, but Sprint hits you with a $29.95/month fee to use that option.  Since I am completely able to work locally without a connection to the Internet, I decided to tough it out and wait until AT&T figured out their mess and got me turned back on.

Fast forward a couple of weeks later… (yes, I am back on the net)

I found some neat applications for my phone that enable someone to bypass the tethering options that Sprint charges for.  One popular application is PdaNet, but it is limited to Windows and Mac. (For those who are still limited by those two platforms, give PdaNet a try.)  Another application I stumbled across called EasyTether has Linux support, so I gave it a try. (I am actually writting this blog post while using it)

The application for the Droid was available on the Droid Market Place, and their website has the Ubuntu file available for the PC connection. http://mobile-stream.com/easytether/drivers.html

I installed the “Lite” version from the Droid Market Place (FREE!!! but limits you to non-SSL pages, unless you pay the $9.99 for the full version) The application walks you through the couple of simple steps needed to use it, and even gives you the address above to get your Windows/Mac/Ubuntu/Fedora up and running.

Once I installed the DEB file on my laptop, after downloading it, all I had to do was connect my phone to USB and open the connection via command line.

The command to link up is:

easytether connect

Now the next time I am without Internet I am ready. 🙂

SSH port forwarding/tunneling for MySQL connection

Create an account on the remote MySQL database server.

useradd -s /bin/false remote_user
mkdir /home/remote_user/.ssh
touch /home/remote_user/.ssh/authorized_keys
chown -R remote_user:remote_user /home/remote_user/.ssh
chmod 755 /home/remote_user/.ssh
chmod 600 /home/remote_user/.ssh/authorized_keys

Add MySQL permissions in the remote MySQL database to allow user connections from localhost.

USE mysql;
GRANT ALL ON db.* TO [email protected].0.0.1 IDENTIFIED BY 'database_pass';
FLUSH PRIVILEGES;

Now, on the local server (as root) create an RSA key pair to avoide the need for passwords for remote_user. (Simply hit enter for each question encountered.)

ssh-keygen -t rsa

Now transfer the public key file to the remote server from your local server.

scp /var/root/.ssh/id_rsa.pub root@remote_server.com:/tmp/local_server.local_rsa.pub
ssh remote_server.com
cat /tmp/local_server.local_rsa.pub >> /home/remote_user/.ssh/authorized_keys

On the local server, create an SSH tunnel to the remote MySQL database server using the following command.

ssh -fNg -L 3306:127.0.0.1:3306 remote_user@remote_server.com sleep 9999

To use this from PHP you would simply do this:

$remote_server_mysql = mysql_connect( "127.0.0.1", "database_user", "database_pass" );
mysql_select_db( "database", $remote_server_mysql );

Apache redirecting to home directory using userdir module

Development is made easier by running a full development environment on your workstation. I personally run a full LAMP (Linux, Apache, MySQL, PHP) environment that allows me to test what I am developing on my workstation. In this case I am on my new Dell Inspiron E1505n running Ubuntu 7.04 Feisty Fawn.

One of the problems with doing this is the need to play with permissions on ever site in the server root. So instead I am using ‘userdir’ to keep the sites for easy development and testing. In other words I use apache to pull the site from my home directory for display in my browser. Here is how I did it.

Continue reading Apache redirecting to home directory using userdir module