This post goes out to all the coders using a Windows machine for development. Might be interesting for others aswell but I can’t say much about that as I’m a Windows user myself ;)
So what is this about? Well, some time ago I ran into smaller problems when trying to move a website from my local machine (which used XAMPP) to a real server (which was running on Ubuntu or some other Linux distro) and it was hard to fix the problems because of the differences between Windows and Linux servers.
I talked about this with a friend of mine and he told me about Virtual Machines (=VM). I had never heard of them before but what I heard was intriguing. Virtual Machines allow you to run a machine inside your machine, e.g. a Linux server inside your Windows machine. So you can use this VM with Linux to test your website locally before moving it to the real server. I know that no server is like the other and you might still run into some problems due to different library versions and so on, but you gotta admit that two Linux servers have way more in common than a Linux and a Windows server ;)
So in this post I’ll tell you how to setup your own VM with all the libs you need. Even if you haven’t worked with Linux before, you should be able to follow this tutorial/example easily.
Contents
- Getting started
- First steps
- Connecting to your VM
- Adding some web to your server
- Setting up MySQL
- Accessing your files
- What else is there to do?
Beware: VMs created with this tutorial are not secure and should only be used in a local environment. Please don’t use these instructions to setup a real server.
Getting started
First you have to get some player to run the vm in, e.g. VMware Player, VMware Server or VMware Workstation. The former ones are for free, but the later one costs quite a bit and is only suitable for companies or if you want to run multiple VMs at once.
Next thing you need is the VM itself. You can either download the basic version with nothing but the OS installed from thoughtpolice (I used Ubuntu 10.10 for this tutorial) or download the ready-to-go version that’s the result of this tutorial:
Basic version from thoughtpolice: Click here
Ready-to-go version: Click here
After you’ve installed the player you should propably take a look at the network settings aka Virtual Network Editor. For me it always worked with VMnet0 set to type “Bridged” and “Automatic” selected in the Bridged to dropdown. Now you can go ahead and load the VM into the player (File -> Open) and after that’s done you should edit the Virtual Machine settings and set the Network Apapter to Bridged aswell.Now fire it up and if all goes well you should be prompted to login. For both versions you can use the following credentials to login:
Basic Version
Username: notroot
Password: thoughtpoliceReady-to-to Version
Username: root
Password: thoughtpolice
If you use the basic version you got the following options how to proceed:
- You can either prepend “sudo ” before all the commands listed below when executing them, which basically means “run the following command as root”
- Each time you login you run “sudo -s” once, which means that all commands executed in the current session will be run as root
- You proceed as in option 2 and afterwards you run “passwd” to change the password of the root user. Now you can login as root with your new password and don’t have to use sudo anymore.
To your information: If you are inside your player (e.g. clicked on the console to enter your login credentials) and can’t get back to windows, try pressing Ctrl + Alt. That one kept me trapped for a while ;)
First steps
First we want to make sure that all pre-installed libs are up-to-date. To do this we have to run two commands on the console:
apt-get update
This will make sure that all our sources (that’s what tells the server what libraries are available and so on) are up-to-date.
apt-get upgrade
And this one will update all your installed libs to the newest version that’s found in the sources.
The next step would be to change your root password, both for security and simplicity reasons. It’s way easier to enter a password that you know well than entering thoughtpolice! You can skip this step if you are using the basic version and used option 3.
passwd
And now you will be prompted to enter a new password. Easy as pie ;)
Finally you might want to change the keyboard layout. The US keyboard layout is the default and that’s not suitable for everyone. Just run this command and a setup dialog will popup and ask what layout you want to use:
dpkg-reconfigure console-setup
Connecting to your VM
As you’ve noticed you can use the player to access the VM and enter commands in the console. But as you get trapped inside the player and can’t copy/paste text from/to the console it’s rather tedious to work that way. That’s where so called SSH Clients come into play. They allow you to connect to your VM (or rather the server that’s running inside) via an external program that’s way easier to handle. One of such clients is Putty. I know that it hasn’t been updated in a while but it still works really great and doesn’t even have to be installed, it’s just a single executable that you run whenever you need to connect to a remote machine via SSH.
Now to get this working you need to install SSH on your VM. If you’ve downloaded the ready-to-go version that’s already the case and you can skip to the next paragraph, the rest must run this command in their console:
apt-get install openssh-server
This will install an SSH server on your console and enable you to connect to it from the outside.
To actually be able to connect to your VM you need one more thing: the IP address. If the network is configured correctly this command will list all interfaces and their attributes, one of them being the IP address:
ifconfig
The interface you should watch out for is eth0 and the value of “inet addr” is the IP address we are looking for. Now that we got the IP address we can start Putty enter the IP into the “Host Name” field and click “Open”. If all went well you should be prompted to login. Just use the credentials from above (with the new password you set…if you even bothered to change it).
Instead of entering your IP address each time you want to access your server either via SSH or in your browser you could go ahead an edit your hosts file and add an entry with your server’s IP address. The hosts file is usually located here: C:\Windows\System32\drivers\etc and can be used to translate an IP address into a host name. For example if your VM’s IP address was 192.168.178.152 you could add this entry and your VM would from now on be available under the host name “my_vm” (additionally to the IP address of course):
192.168.178.152 my_vm
Whenever I tell you to enter the IP address of the VM, you can enter the host name instead if you’ve setup your hosts file properly.
Adding some web to your server
Now that we are connected we can install the important stuff: Apache, PHP, MySQL…our staff of life.
Apache and PHP are simple, just run these two commands and you are done:
apt-get install apache2
apt-get install php5
If you now open your browser and go to http://ip-address-of-my-vm (or http://host-name-of-my-vm) you should see the standard “It works!” message from apache. To see if PHP was installed properly aswell we need to create a simple php file to run in the browser. First switch to your webroot by entering this command:
cd /var/www
There’s nothing in there except the index.html (which is shown when opening your VM’s IP in the browser) and now we need to create a new file. This can be done by opening the pre-installed editor and supplying a non-existand filename as a parameter:
nano info.php
Where “nano” is the pre-installed editor and info.php the (in this case non-existant) file we want to edit. Now that the editor is open you can enter plain php, e.g. this:
<?php phpinfo(); ?>
To close the editor you need to press Ctrl+X and confirm that you want to save the modified buffer. After that you can open the info.php file in your browser and should see the standard phpinfo() output.
If how ever your browser asks you to download the .php file instead of displaying it, you need to run this command to restart your apache2 server:
/etc/init.d/apache2 restart
Setting up MySQL
What else do we all need? Exactly, a database! I prefer MySQL and that’s why it’s featured in this tutorial, but you could (more or less) easily install PostgreSQL, or whatever else you prefer, instead. Anyway, installing MySQL is as simple as all the stuff before has been. Run the below commands and follow the on-screen instructions:
apt-get install mysql-server
apt-get install php5-mysql
This will install the newest MySQL server available, 5.1.49 as of this moment. To see what version was installed you can run this command and enter your root password:
mysql -u root -p
After entering the root password you choose during the installation, you’ll find yourself in the MySQL command client and should see something like this at the top:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 37
Server version: 5.1.49-1ubuntu8.1 (Ubuntu)
To get back to the console simply press Ctrl+C. If however you could not connect and get a “Connection refused” error, then you have to edit the MySQL config file and change the bind-address value:
nano /etc/mysql/my.cnf
By pressing Ctrl+W you can search for a text in the file you are editing. Search for “bind-address” and comment out the whole line by adding “#” in front.
Now that we have MySQL running we need some easy way to access the database and what easier way is there than phpMyAdmin? Let’s install it:
apt-get install phpmyadmin
During the installation you will be asked to make some configuration choices, here’s what I chose:
- apache2
- Yes
- my MySQL root password
- my MySQL root password (and confirmed it)
After the install is done you can see if it worked and go to http://ip-address-of-my-vm/phpmyadmin. If you get a 404 error don’t worry it’s easy to fix. First we have to open the apache2 configuration file
nano /etc/apache2/apache2.conf
and now we scroll to the bottom of the file and add this line and save the changes:
Include /etc/phpmyadmin/apache.conf
Now after restarting the apache2 server with the following command you should be able to open phpmyadmin in your browser:
/etc/init.d/apache2 restart
and now you can login with username ‘root’ and the password you chose.
Accessing your files
Now the last thing you propably want to do is use the console to edit your files. As a Windows user you are used to some nice GUI and propably have been working with your favorite editor for quite some time now. That’s where a handy lib called “Samba” comes in handy: It let’s you share files and folders between Linux and Windows machines. Now install is easy, configuration is where it might get tricky:
apt-get install samba smbfs
After the install is done, we open the config file and here’s what I my config looks like/yours should look like:
[global]
netbios name = Linux-PC
workgroup = WORKGROUP
server string = Linux Samba Server
load printers = no
show add printer wizard = no
disable spoolss = yes
use client driver = yes
log file = /var/log/%m.log
lock directory = /var/lock
max log size = 0
security = User
encrypt passwords = true
smb passwd file = /etc/samba/smbpasswd
socket options = IPTOS_LOWDELAY TCP_NODELAY
security mask = 0777
create mask = 0777
fstype = NTFS
max smbd processes = 10
map to guest = Bad User
csc policy = disable
hide dot files = yes
hide files = /./.*/aquota.*/
veto files = /aquota.*/
block size = 4096
guest ok = no
getwd cache = Yes
lm announce = yes
lm interval = 120
max xmit = 8192
display charset = UTF8
unix charset = UTF8
status = no
deadtime = 1
level2 oplocks = True
dns proxy = no[www]
comment = Homepage
path = /var/www
force group = www-data
force user = www-data
browseable = yes
public = yes
writable = yes
valid users = samba
read list =
create mode = 0775
directory mode = 0775
Prior to editing/overwriting the config file you should make a copy of the original file so you will have the original settings as a reference and to re-use as necessary:
cp /etc/samba/smb.conf /etc/samba/smb.conf.original
Easiest way for you to replace the existing content of the config file with the above is by opening nano, entering the new content and then overwriting the existing file:
cd /etc/samba
nano
Now copy the above list of config values and right-click into the editor, this will paste the before copied content. Now press Ctrl+X, confirm the first question and when prompted for a filename enter “smb.conf” and when asked to overwrite the existing file confirm again. The above value for “valid users” tells Samba what users may connect to the shared folder, in this case the user “samba”. By default that user does not exist so we have to add it and set a password. First we add the user to the system, then we add it to samba. Just enter the following commands and follow the instructions:
adduser samba
smbpasswd -a samba
After that’s done we restart the Samba service (not really sure that’s necessary but better save than sorry) and we should be able to connect to our server by mapping a network drive:
restart smbd
Now try mapping a network drive to \\ip-address-of-my-vm\www and when prompted for a username/password just enter your credentials for the samba account. If you can access the folder but don’t have permission to write to it, then run this command and it should be fixed:
chmod a+wrx /var/www
What else is there to do?
Plenty, but for now you are good to go. In further blog posts I’ll tell you how to setup a mail server, connect to SVN/Git and some more useful libs you propably even haven’t heard of yet ;) To end this post I’ll give you a list of the most important commands you’ll need when working (most of them already used above):
Run command X with root privileges if current user is not root:
sudo X
Become root for complete session:
sudo -s
Change to directory X:
cd X
Get contents of current directory:
dir
Open file in text editor nano:
nano filename
Copy a file:
copy oldfilename newfilename
Move/rename a file:
mv oldfilename newfilename
Create a new directory X:
mkdir X
Remove directory X:
rmdir X
Update apt-get sources:
apt-get update
Update installed packages:
apt-get upgrade
Install package X:
apt-get install X
Remove package X:
apt-get –purge remove X
Restart Apache:
/etc/init.d/apache2 restart
Beware: VMs created with this tutorial are not secure and should only be used in a local environment. Please don’t use these instructions to setup a real server.
If you run into any problems feel free to either post in the comments or have a look at the Ubuntu Community Documentation. It helped me quite a bit when I started out with Linux and wrote this article.
I’m looking forward to your comments, criticism and suggenstions on how to improve this further/what you want to see in the future.
Leave a Reply