Posts filed under ‘CentOS’
CentOS 5.3 has recently been released and the update appears to automatically upgrades my machine to 5.2 to 5.3. the problem is that the update ends with the following error:
kernel - 2.6.18-128.1.6.el5.i686: failure: RPMS/ kernel-2.6.18-128.1.6.el5.i686.rpm from updates: [Errno 256] No more mirrors to try.
This error usualy indicate that there is a problem with the yum cache. I took a look at the release notes and it indicated that we may need to update glibc first. Here’s what I did.
- In CentOS, start a terminal window.
- su to root.
- Run the following commands:
yum clean all
yum update glibc
The first command clears the cache and all of the stale packages. I am not sure why you need to install glibc first, but it’s in the release notes.
In this article, I will describe how I created a CentOS virtual machine under Virtualbox. The CentOS virtual machine will deviate from a default virtual machine create in the following way:
- The CentOS virtual machine will use SATA instead of IDE drives. This will increase flexibility and performance.
- We will use separate virtual disks instead of partitioning a single virtual disk. The separate disks will simplify maintenance and upgrades.
- The virtual disk will be allocated as a very large dynamic disk. A partition will be created within the virtual disk that uses only a small part of the virtual disk. The virtual disk for example may be created to be a 200 Gb dynamic disk and then we allocate only 5 Gb as a partition, leaving the rest free. Because it is a dynamic disk, there is actually no wasted space. The free space can be used later to expand the partition.
The article is meant as a tutorial. Generally, here are the following steps.
- Create the Virtual disks.
- Creating the Virtual Machine.
- Installing CentOS.
- Installing the guest addition.
- Correcting the Video Resolution
- Expanding the Partition Size
Create the Virtual Disks
We’ll do things a bit differently than the default by creating the virtual disk first. We will create 3 virtual disks: root, home, and swap. The reason we have separate disk is to give us flexibility than having all 3 partitions on the same drive. If you run of out space on home for example, you can swap in a larger virtual disk without disturbing the other two volumes.
In addition, we will create a much larger drive than we need. Once created, you cannot extend a virtual disk volume. You have to create a new volume and copy the content over to the new volume. We will solve this problem by creating a really large volume like 200 Gb. Because we will be using dynamic size disk, the initial disk will be quite small.
- Launch the Virtualbox application.
- Select File->Virtual Disk Manager.
- Click New. This brings up the wizard. Press Next. Select dynamic disk and press Next. Enter the name of the your VM and append ” root” at the end. So if you name your machine “CentOS”, this disk would be called “CentOS root.vdi”. Set the disk size to a really large number like 200 Gb and press Next. Press Finish to complete.
- Click New. This brings up the wizard. Press Next. Select dynamic disk and press Next. Enter the name of the your VM and append ” home” at the end. So if you name your machine “CentOS”, this disk would be called “CentOS home.vdi”. Set the disk size to a really large number like 200 Gb and press Next. Press Finish to complete.
- Click New. This brings up the wizard. Press Next. Select fixed size disk and press Next. Enter the name of the your VM and append ” swap” at the end. So if you name your machine “CentOS”, this disk would be called “CentOS swap.vdi”. Set the disk size to 2x your intended virtual machine RAM (so if you intended to us 1 Gb RAM in your VM, use a disk size of 2x) and press Next. Press Finish to complete. Unlike home and root, you want swap to be a fixed disk size so that you won’t have an extend disk operation when you need virtual memory.
After these steps, you should have 3 different disk: root, home, and swap.
Creating the Virtual Machine
The follow step will create the virtual machine. We will also attached the disks we created earlier to the virtual machine.
- Launch Virtualbox.
- Select the menu Machine->New to create a new virtual machine. This will bring up a wizard.
- Click next to go to the next screen.
- You will be prompted for VM name and type. Enter the name like “CentOS”, and select the OS Type of RedHat (since CentOS is a derivative of RedHat). Press Next.
- You will be prompted to set the memory. I set mines to 512 Mb. Press Next.
- Now we are at the virtual disk screen. Click Next, you will be warned that you didn’t attach a hard disk. Press Continue. You will attach the disk later.
- Press finish.
- Select the machine and press on the settings button.
- Select Hard disks to bring up the hard disk settings.
- Check the “enable SATA controller”. The virtual SATA controller has greater flexibility and faster performance than the virtual IDE.
- Click Add disk button. Select the SATA Port 0 from the Slot’s drop down field. Assign the root disk you created.
- Click Add disk button again. Select the SATA Port 1 from the Slot’s drop down field. Assign the home disk you created.
- Click Add disk button again. Select the SATA Port 2 from the Slot’s drop down field. Assign the swap disk you created.
- Press OK to close the hard disk settings.
- Click on the audio setting. Check enable audio settings and select the appropriate audio driver.
Install the CentOS
Now we have a virtual machine but no operation system. Our next step is to install CentOS and configure it.
- Download CentOS. For this tutorial, I used CentOS 5.2.
- Launch Virtualbox.
- Select the new virtual machine you created and click on settings.
- Click on CD-ROM and mount the CentOS 3.2 image.
- Start the virtual machine.
- Once the CentOS title screen appears. Press Enter.
- Click on the Skip test button. Although it’s better to check your media, the test often result in the CD-ROM being ejected. After the CD is ejected, there seemed to be no easy way to get it to reappear.
- On the CentOS splash screen, press Next.
- Select the appropriate language and press Next.
- Select the appropriate keyboard and press Next.
- You will be warned that sda is unreadable and ask if it can format and erase all of the data. Press Yes (since your new virtual disk has no data).
- You will be warned that sdb is unreadable and ask if it can format and erase all of the data. Press Yes.
- You will be warned that sdc is unreadlable and ask if it can format and erase all of the data. Press Yes.
- On the partition screen, select custom layout and press Next.
- Click on the New button. Set the mount point to “/”. Uncheck all volume except sda. Set the size to what you think you will need. Press OK. We are meant to use a small percentage of the virtual disk for the partition. The idea is if we need to a larger disk, we can use a partition program to extended it.
- Click on the New button. Set the mount point to “/home”. Uncheck all volume except sdb. Set the size to what you think you will need for the home directory. Press OK.
- Click on the New button. Set the File System type to swap. Uncheck all volume except sdc. Set the size to fill to maximum size since we want to use all of it for swap. Press OK.
- Press the Next button.
- You will be prompted to ask if you want to install Grub. Press Next to select the default option of installing Grub on /dev/sda
- Press Next to use the active device of eth0 and DHCP.
- Select the appropriate country and press Next. WARNING: If you plan to run a mix of Linux and Windows machine, make sure you uncheck “System Clock uses UTC”. Press Next.
- Enter the root password and press Next. Make sure you record this somewhere.
- You will be prompted to select the software. The system will default to Gnome Desktop. Select the option “Customize Later” and press Next.
- The installer will check for dependencies and then display a screen telling you to press Next to continue the installation. Press Next.
- Installation will continue for half an hour and then you are presented with an option to reboot. Click on the reboot button and boot from the hard drive instead of the CD.
- After reboot, your configuration will continue on a welcome screen. Press Forward.
- Press Forward to accept the default firewall configuration.
- Press Forward to accept the default for SELinux.
- Press Forward to accept the date (note: do not turn on NTP).
- Enter the info for a user other than root. Press Forward.
- Press Forward to accept the sound config.
- Press Finish to complete configuration.
- Login as the user you just created.
- Wait until you get a notice that there are updates.
- Click on the notification and view update. Enter the root password when prompted.
- Click on the package updater’s apply updates. You may be prompted about dependencies. Press Continue if that is the case.
- Now wait for a while. The update may take several hours for the updates to complete.
- Open up a command line window and su to root by typing su and then entering the root password.
- Type the following commands to install the compiler and kernel source.yum install gcc -y
yum install kernel-devel -y
- Select the menu Devices->Install Guest Additions from the virtual machine menus.
- In the command line, cd to the /media. There should be a Vbox folder within media. Change directory into that folder. There should be a .run file for your machine. For example, on my guest, I did the following:cd /media/VBOXADDITIONS_2.0.0_36011
sh ./VBoxLinuxAdditions-x86.runYour actual command will vary according to your version of virtualbox.
- Reboot your virtual machine.
Correcting the Video Resolution
On my laptop with a 1280×800 screen, the resolution was not correctly detected. Even when I went in and manually set my Monitor type to 1280×800 in Administrator->Display Settings. I had to manually set the xorg.conf file. Backup your config file and add or modify a subsection in the section screen.
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x800" EndSubSection EndSection
The important line to add is ‘Modes “1280×800″‘. The addition of this line causes CentOS to go into 1280×800.
Virtualbox supports a dynamic video display where the size of the desktop is automatically adjusted with the size of the window. However, this is supported only on Xorg server version 1.3 or later. CentOS is using version 1.1, so it does not support dynamic display.
Expanding the Partition Size
Suppose you run out of space later on. If you use the default way of creating virtual disk, you will have to create a new disk, copy the content from one virtual disk to another. This is not trival to do.
If you have followed my instructions, we have created a really large virtual disk, but we really only use a small percentage of the disk. Now if we want to expand, we can boot your virtual machine into a live CD that has a partition editor like gparted. You wan to boot into your live CD because you can’t modify a partition when it is in use. You can use the gparted utility to expand your partition.
The following are tidbits I have learn while running Virtualbox on various systems.
Host Related Issues
Running Virtualbox on an Ubuntu Host
There are two issues:
- When you click attempt to open the settings on a virtual machine, you get the following error:
Could not load the Host USB Proxy Service (VERR_FILE_NOT_FOUND). The service might be not installed on the host computer.
The cause of this problem is that usbfs is not turned on in Ubuntu. To fix this, you need to edit the file /etc/init.d/mountdevsubfs.sh (remember to use sudo). Search and uncomment out all of the code lines:
# Magic to make /proc/bus/usb work
#mkdir -p /dev/bus/usb/.usbfs
#domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
#ln -s .usbfs/devices /dev/bus/usb/devices
#mount --rbind /dev/bus/usb /proc/bus/usb
- Unfortunately, this does not solve the problem entirely. When I attempt to access the USB from the guest, I get the following error message.
Failed to attach the USB device
Even though you enabled usbfs, the user do not have permission to use USB. You can set up a rule to give each user access. Because everyone who use Virtualbox has to be in the group vboxusers. The easiest way to give every Virtualbox user access would be to give vboxusers access. Sudo edit the file /etc/udev/rules.d/40-permissions.rules, locate the following line:
# USB devices (usbfs replacement)
Change the line to:
# USB devices (usbfs replacement)
SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"
Running Virtualbox on a Mandriva Host
When you install Virtualbox on Mandriva (I am using Virtualbox 1.6.2 on Mandriva 2008.1), it throws an exception when I run the VM:
Virtualbox kernel driver not installed.
This error is encountered if I install the Virtualbox OSE from the Mandriva repository or the Virtualbox rpm from Virtualbox.org (note: the version I am using is for Mandriva 2008.0, a 2008.1 was not available). The problem is that Mandriva needs a kernel package to compile the Virtualbox kernel driver. First, you need to determine what kernel module you are using. On a desktop, you are likely to be using kernel-desktop-devel-latest and on a laptop you are likely to be using kernel-laptop-devel-latest. When you boot up your machine, you can see which one you have in the boot menu. You should install Virtualbox in the following order.
- Install the kernel-desktop-devel-latest or kernel-laptop-devel-latest (depending on whether you have a laptop or desktop). This must be install first because Virtualbox need it to compile a new kernel module.
- Download and install the Mandriva Virtualbox rpm from Virtualbox.org
- Add the users that will use Virtualbox to the group vboxusers.
Guest Related Issues
Installing guest additions on CentOS / RedHat
The following have been tested on CentOS 5.2 and 5.4, which is a clone of RedHat enterprise Linux 5.2. You’ll need to install the gcc and kernel source by running the following command as root:
yum install gcc -y yum install kernel-devel -y
When you run the Linux addition, you’ll get an error indicating that the Linux module cannot be built. Before you compile, you need to set the KERN_DIR variable. To figure out where the directory is, go to /usr/src/kernels. Inside should be the kernel version directories.
type the following command:
The command will return the kernel version and the type of processor. For example, mines return the following:
In the /usr/src/kernels is the directory 2.6.18-164.11.1.el5-i686, so we will set the directory using the command:
Now you can run the Linux Additions.
After the installation, you may notice that the OS was unable to detect the correct resolution, so you have to manually add the the appropriate modes line to your display section. The following is an example from my laptop:
Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1280x800" EndSubSection EndSection
Note that seamless and automatic guest display will not work because it requires xorg server 1.3 or later. CentOS / RHEL 5.2 only has version 1.1.
Installing guest Additions on Linux Mint
Install build-essentials. This will install the kernel header, source, and compiler so you can run the guest additions.
Installing guest Additions on Suse 10.3
When you try to run the guest addition, you’ll get an error message that you have to install header, source, and gnu c. You need to use YAST to do the following
- Use YAST and add OSS source to the repository list.
- Install the packages gcc, kernel-source, linux-kernel-headers.
After the header, source and compiler is installed, the guest additions seems to work only some of the time. Suse runs the init scripts in parallel and sometimes the vboxadd script end up running after the Xorg.
There are two way to fix this:
- Set RUN_PARALLEL=no in /etc/sysconfig/boot. This may cause a slight delay in runtime.
- You can add a dependency to /etc/init.d/.depend.start so that vboxadd is executed after xorg. To do this, find the line for xdm: and add vboxadd to the end of the line. If you reinstall the guest addition, you may have to do this again.
Shared Folder on a Linux Guest
Virtualbox allow you to pass data between host and guest through a shared folder. The instructions in the manual is not necessary very clear. The manual states that you are suppose to run the following command in a Linux host to mount the shared folder:
mount -t vboxsf [-o OPTIONS] sharename mountpoint
The trouble is that users may not understand what the sharename and mountpoint is and that shared folder under Linux is quirky and weird.
Here’s how it works, in the settings for each machine, you can add a shared folder. The process is fairly intuitive, you click on the add button and select a directory where the share directory will be a sharename is automatically created. This is the share name you will use in the mount command. The mount point is simply a directory that you will mount the share folder to. You will have to do this as root or use sudo. For example:
mount -t vboxsf vshare /home/paulsiu/vshare
The problem is when you tried this, you get the following error:
/sbin/mount.vboxsf: mounting failed with the error: Protocol error
If you look at syslog, you’ll see the following error:
Nov 8 19:28:09 wxbuilder kernel: vboxvfs: sf_glob_alloc: vboxCallMapFolder failed rc=-102
Nov 8 19:28:09 wxbuilder kernel: sf_read_super_aux err=-71
Apparently, you’ll only get this error if you use the default sharename. When you create a new shared folder, Virtualbox will ask where your shared directory is on the host. When you select the shared directory, the sharename will default to that directory. If I create a shared folder at “/home/paulsiu/vshare”, virtualbox will generate a sharename of “vshare”. Unfortunately, if you use this default sharename, you will get a protocol error, so you should rename the sharename to something other than default, such as “vboxshare” for example. I have no idea why, but that appears to be what’s happening.
With the new shared name, you can now mount the shared directory. Unfortunately, the directory is mounted as root with the group of root and read writable only by root. Since it is a bad idea to login as root, your shared directory is readonly.
The user manual suggests using the mount options and set the uid, gid, and mode. But the manual lies, you cannot set the mode. The permission on the shared directory is locked to writable by user only. This mean you cannot create a single persistent directory for all users on the system.
One way around this is to create a vshare directory in each of the user’s home directory and have the login script mount the shared directory to this home directory as the user.
mount -t vboxsf -o uid=<user> <sharename> /home/<user>/vshare
Seamless Mode or Auto-resize Guest Display is grey out on a Linux Guest
According to the user manual, you must have Xorg Server 1.3 or later. To check what version you have type the following command at the command line:
If the Xorg X server is lower than 1.3, Seamless and Auto-resizing will probably be disabled. Ironically, enterprise Linux like RedHat, CentOS, and SLED are likely to be using an older Xorg Server, so corporate users will most likely to be hit by this limitation.
Windows guest startup with a inaccessible boot device message
When I boot up windows 2000, I got the message “INACCESSIBLE_BOOT_DEVICE”. The problem was traced to the IDE controller type. I had set the IDE controller to PIIX4 when it was previously set to PIIX3. Setting it back to PIIX3 corrected the problem.
64-bit Guest Issue
You can only install 64-bit OS on a 64-bit host. In addition, you will need hardware virtualization support like Intel VT-x or AMD-V for your cpu. In the case of Intel, be real careful of what cpu you buy because Intel has multiple virtualization technologies. The Intel P7350 (used in popular machines like HP-DV5) is listed on the Intel web site of supporting hardware virtualization, but it appears that it has VT-d and not VT-x. Virtualbox needs Intel VT-x, so if you have a Intel processor and don’t have VT-x, you cannot use a 64-bit guest.
On the Linux box, you generally uninstall the old version and install the new version. On windows, running the installer generally upgrade the old version. There are things to watch out for such as snapshot incompatibility. Follow the following instructions for best results.
Close down all of the virtual machines.
Go through each of the virtual machine and make sure that you get rid of snapshots. The reason is that snapshots are not necessary compatible from version to version. If you don’t do this, you may find that you cannot start your machine any more. To recover, you will have to reinstall the old version and then get rid of the snapshots.
Virtualbox stores the the settings and virtual machine files in .VirtualBox in the user’s home directory on Linux. I am not sure where it is stored in windows. In any case, backup this directory in case somethings goes terribly wrong.
Uninstall Virtualbox. If you are using Windows Host or a Linux with package management, all you need to do is to run the uninstall. If you installed Virtualbox from source, I have no idea how you would uninstall (the manual doesn’t list a way to do it). I assume you just halt Virtualbox and then install over the previous version.
Install the new version of Virtualbox. With luck, all of your virtual machine should come up. When upgrading, I got the following error message:
RTR3Init failed with rc=-1912 (rc=-1912)
The VirtualBox kernel modules do not match this version of VirtualBox. The installation of VirtualBox was apparently not successful. Executing
may correct this. Make sure that you do not mix the OSE version and the PUEL version of VirtualBox.
To fix this, do exactly as the mesage tell you to do:
sudo /etc/init.d/vboxdrv setup
Note that this only works if you have the compiler installed.
You may find that your guest additions no longer work and will have reinstall the guest additions.
Virtual Disk setup
You can create virtual disk, but one problem is that they will run out of space and there is no easy way to extend them. The following are my recommendations:
- Create a really large dynamic virtual disk (ex: 200 Gb), and then create a much smaller partition on it (ex: 5 Gb). Because the disk is dynamic, the actual VDI file is small initially no matter how “large” the drive is. Now, we create a small actual partition on it because we want to limit the actual size of the file. For example, if we run a disk defrag utility, it may cause the drive to take its full size. By keeping the actual partition small, you can avoid the disk from growing to the maximum size of the disk. When we start nearing the end of the partition, we can extend it by using an utility like gparted. By doing this, you can have tons of VDI file all at 200 GB, but actually taking up a fraction of actual disk space.
- On a Linux guest, do not use UUID references in your /etc/fstab. A lot of distro these days try to be helpful and use UUID references. By using UUID reference, you can move the drive from hda to hdb and it would still reference the partition. While this is very helpful with hardware, this is not so useful on a VM since there’s really no disk to swap around. In addition, when you clone a drive, it will generate a new UUID. If you attempt to swap the new cloned drive with the old one and you use UUID, the OS will not be able to find the drive and crash.
- Keep it simple by using one partition per virtual disk. With the new SATA configuration, you can have as many drives as you like,
- For a lot of Linux virtual machines, I generally use a 3 disk configuration: root, home, and swap. This way, I will be able to reinstall without wiping out home. If home or root runs out of space, I can swap in a larger disk.
Bugs and workarounds
Disk Cloning corruption in Virtualbox 2.10
In release 2.1, the command to clone virtual disk change from clonevdi to clonehd. Normally, you can clone a virtual disk by running the command:
vboxmanage clonehd olddisk newdisk
However, this did not work in version 2.10 for some reason. The disk image is corrupted. To get around this problem do the following instead:
- Use your host’s copy command to make a copy of the virtual disk.
- The copy of the virtual disk has the same UUID as the old disk, so you will need to reassign a new UUID by using the following command:
VBoxManage internalcommands sethduuid <newVirtualDiskFile>
Keyboard corrupted by Linux Guest Addition in Virtualbox 2.1.0
Recently, I installed Linux Mint as a guest on Virtualbox 2.1.0. Whenever I type a space, Gnome Do would pop up. This happens when I type a space in any field. Normally, Gnome Do is triggered by <super>space, where <super> is the windows key. Virtualbox 2.1.0 addition apparently corrupted the keyboard so that the <super> key doesn’t exists any more. So far, it may only affect US keyboards. See http://www.virtualbox.org/ticket/2793
One work around is to install an earlier virtualbox 2.0.6 guest addition, which works with 2.1.0 and do not have this problem. The guest addition can be download here and you can mount it as a CD.