Posted: April 19th, 2009
When I set up Qemu and ran Windows XP inside, I had XP updated to Service Pack 2 from a cdrom. How to mount a cdrom in Qemu is available here, but I wanted to upgrade to Service Pack 3 and didn’t want to download the SP3 file inside the virtual Windows since it is considerably slower. So I went to the Microsoft web-site and downloaded the necessary file, assuming I could just put it inside the “windows.img” file.
Well, I can, and I have to mount the file as a drive. But how do you do that? I didn’t know, but now I do:
The essential command is this:
sudo mount -o loop,offset=32256 -t ntfs /folder/windows.img /media/windows
You will probably need to make the /media/windows directory first:
sudo mkdir /media/windows
Okay, here is the explanation of the directory making:
sudo : You can’t be a normal user to do this, you have to be an administrator
mkdir : This is the command to make the directory
/media/windows : This is the folder you are making. You could also make it /mnt/windows
And here is the explanation of the mounting command:
sudo : See above
mount : This “connects” the fake drive to the computer
-o loop,offset=32256 : These are special commands, set using -o , like you can make the fake drive read-only, or other tricks. The loop flag is used for fake drives, aka, img files. Any other command is seperated with a comma, an example would be -o loop,rw,auto,noexec . I will explain the offset just below.
-t ntfs : This is the type of hard-drive that is faked. In this case, it is Windows, which typically uses the NTFS file structure. Other common ones are fat16 and fat32 .
/folder/windows.img : This is the folder where the fake disk, windows.img , is located.
/media : This is the folder to mount the fake drive. It is the one you made earlier.
Okay, so here is where the real trick is: The offset=32256 flag is what tells the “mount” program where to look in the file. See, the “windows.img” fake drive file has some other information at the start which confuses the “mount” program, so it needs to know where in the file to start reading the fake drive. If you made your fake drive like I made mine, or if you only have Windows on it, the value of “32256″ should be fine, otherwise try the following.
You will need to find the numerical value of the offset. Run the “fdisk” command, just be careful because if you mistype it you can easily destroy EVERYTHING! Run it like this:
fdisk -l /folder/windows.img
fdisk : The fdisk command is the swiss army knife to poke at drives
-l : This lists the drive information
/folder/windows.img : This is the fake drive
It will probably print something like this:
You must set cylinders.
You can do this from the extra functions menu.
Disk /folder/windows.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x1ff71ff7
Device Boot Start End Blocks Id System
/folder/windows.img 1 * 1 1273 10225341 7 HPFS/NTFS
Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1272, 254, 63)
The two things to notice are the number which falls under the “Start”. In mine, that is just 1. Note also the “63 sectors/track”. The number to offset is: 1*63*512=32256
Now, once I mounted the “windows.img” I was able to poke around in the folders. I took the Windows Service Pack 3 file and copied it to my Desktop. Now I can install SP3 without having to download it in virtual Windows XP, this saves a lot of time!
For my next trick, I will pull a rabbit out of my hat:
Try mounting the Fake drive, and booting XP in Qemu together! (Mount first, then run Qemu) Rock on!
P.s. You may have trouble unmounting that fake drive? Type in df and see which thing on the left corresponds to the fake drive on the right. In my case it was /dev/loop0 . Now, you may have a trouble unmounting it still? In this case, you will need to exit any programs accessing the drive, I even had to exit the terminal I was in. Now go back and try again.
Posted: April 17th, 2009
And now, for something completely different:

I am using Qemu to boot Ubuntu, from a different partition, inside of Ubuntu. Is this wise? Some suggest it is not, but I like to live on the wild side!
So the relevant code is pretty simple. Recall the last post on initializing Qemu, and take that, flip it around a bit, and here we go:
JUST REMEMBER YOU MAY BE DESTROYING YOUR DRIVE!!!!!
Sorry for that, here we go:
sudo qemu -m 768 -boot c -hda /dev/sda
The sudo bit is used here because apparently it’s dangerous to mount the drive you are running. Pfff! The rest is:
qemu: The virtualizing program you are running
-m 768: You can tell Qemu how much memory to set aside. This is megabytes…
-boot c: It will boot from the virtual primary drive, instead of the cd-rom see?
-hda /dev/sda: The primary drive is /dev/sda, which is the drive I am running now
Note:
The command to restart the windows manager in Linux is control+alt+backspace. When you boot Qemu to another Linux and want to kill the windows manager, you can’t use that because you will kill the main system you are using… Woops.
Now let me try to restart my extra Ubuntu, it took over five minutes last time…
Meanwhile, let me bore you with a story: I installed a second version of Ubuntu on an extra partition a while back. Thought maybe I could mess around with it and trim it down to nothing. Well, it worked but now I don’t have any kind of anything on it. Good thing it was a spare. Okay it’s back.
I mean, I messed it up bad. All it has is this:

Anyway, I won’t bore you with the rest of the details, I was just noting that you could indeed boot Linux inside of Linux. I think I could even install Qemu on this virtual drive, boot the hard drive, and start Windows… Hold on…
I had to install a window manager, and I didn’t want Gnome, so I picked FluxBox. It’s the same window manager used in my favorite light-weight-heavy-hitter, DSL. Here I am, installing Qemu on my pretend computer on my pretend drive:

Alright, it just finished. Now to try booting another computer inside it. Instead of trying to kill it with another Ubuntu running, I will boot to my DSL file. Heh heh. Here we go:

The “inner world” Qemu is not handling the graphics very well, I can’t even read the text on the screen:

Well, that didn’t work very well at all. I don’t think I have enough memory to really make this work. DSL finally booted after maybe 15 minutes, but it couldn’t hardly load the window manager: It started and stalled, after 5 minutes I shut it down…
Well, anyway, that was fun.
Posted: April 17th, 2009

After I completely torched my previous Windows install with a virus infected software, I decided to try another way and install Windows in a virtual computer on Ubuntu!
Here is what I did, although some more differenter instructions can be found here:
Go to the famous “Add/Remove…” and install “Qemulator”. I don’t know how well suited this will be for my purposes, but this is a test anyway, so no big deal.
Now we need a fake hard drive. Now, go to the beautiful terminal (I made a keyboard shortcut: ctrl+alt+t) and travel to somewhere convenient and make a drive with Qemu:
qemu-img create windows.img 10000M
qemu-image: The Qemu program which makes the fake drive
create: I wonder if there is a detroy function?
windows.img: This is the file, which is a hard drive image
10000M: This is 10 Gigs, I am going to install a large program on here, so…
Now lets boot the fake machine up!
qemu -boot d -cdrom /dev/scd0 -hda windows.img
qemu: The program virtualizing an entire computer!
-boot d: This tells qemu what drive to pretend to boot from, in this case the cd
-cdrom /dev/scd0: The cdrom is this device, make sure it’s your actual cd*
-hda windows.img: This is the earlier created hard drive image
Now Qemu will boot up to whatever cd you previously mounted on your computer. What? You didn’t mount the disk yet? Well, do that, type the above command, and come back here.
Okay, now Qemu should boot up into whatever the cd was, in my case it was the Windows XP installation guide. The setup was all plain-text, fine with me, and took maybe 8 minutes. Then Windows wants to restart. It will restart Qemu, but exit the program first.
What you need to do is start Qemu back up, this time with only slightly different commands:
qemu -boot c -cdrom /dev/scd0 -hda windows.img
These are the same as last time, except for this one:
-boot c: This tells Qemu to boot to what Windows wants to call the C:/ drive, which is your “windows.img” fake hard drive file.
Now Windows should boot into it’s familiar black screen with that awesome graphic window-esque thing, and then it will want to install all the drivers, files, etc., just like a normal Windows installation.
It seems that, to get the internets to work inside Qemu, you have to tell it to pass network capabilities through. It virtualizes everything else, network and usb support as well. To do that, add -net nic to the end of the command, so it looks like:
qemu -boot c -cdrom /dev/scd0 -hda windows.img -net nic
Other instructions said use -net user, I don’t know the difference very well, but -net nic was the only one that worked for me.
Once you are comfortable with your Qemu configurations, you probably want to make a shortcut of some kind so you don’t have to remember this command all the time. I don’t have any cool tricks up my sleeve on this one, just copy and paste the command into a hand-made shortcut.
One more thing: I installed Qemu by using the “Add/Remove…” in Ubuntu, but I found the GUI was not useful, and had enough interface glitches that running through the command line is much easier. If I can figure out the command line way to install I will let you know, it’s probably really simple.
*To double check your cd drive, go to the terminal (after you put in your cd and can open it’s folders) and type:
df
This will list all the mounted things, drives and memory are both “mounted” in Linux, look for one that says “/dev/scd0” or perhaps “/dev/cdrom“, but on the right it will have the title of the cd, like “/media/X1APFPP_EN” or something similarly unintelligible.
Posted: February 14th, 2009
I know this doesn’t flow in the vein of “command line” that I am aiming for, but I thought this was a useful tidbit for those of us using Ubuntu.
I recently purchased a reasonably up-to-date laptop (refurbished, from ebay!) and changed the partitions so I could have XP and Ubuntu, and a 45GB media drive. It’s awesome! If I can figure out a few programs I will remove my dependence on XP, but I am not hurting for hard-drive space yet, so no hurry.
Anyway, Ubuntu does not ship with mp3 support built in, since it is a proprietary codec and Ubuntu is released solely under the GPL. You can add the mp3 support along with some other proprietary support (Java, DVD’s, etc) from the “Add/Remove…” in the Applications Start bar. The package is labeled “Ubuntu restricted extras”, but is a very large download.
If you only want mp3 support, you can install the specific packages (the “Restricted extras” installs all restriced media drivers at once) by installing the packages:
gstreamer0.10-plugins-ugly
libmpeg2-4
This will download a few other required files, but overall it is much smaller than the entire “restricted extras”package.
One other neat trick that Nautilus, the included file manager in Ubuntu, can do to music files is play them when you hover over them with your mouse. This trick is “cool”, although it may not have much practical value. To get this neat feature, install the packages:
mpg321
vorbis-tools
While you can install these packages through “System / Administration / Synaptic Package Manager” or you can always install it my favorite way: The command line!
For the flashy play-back in Nautilus:
sudo apt-get install mpg321 vorbis-tools
For mp3 support:
sudo apt-get install gstreamer0.10-plugins-ugly libmpeg2-4
Posted: December 24th, 2008
wget is a command-line, non-interactive html grabber. I have used it in the past in some scripts to download an html file, check it for certain data, and run a different script based on what the first html said. Here I will teach you some tricks to using it:
In it’s most basic form, you type: wget http://www.the_web_site.com/the_file.html
The output is like this:
user@user-desktop:~$ wget http://tobiasdavis.110mb.com/index.php
--00:43:08-- http://tobiasdavis.110mb.com/index.php
=> `index.php'
Resolving tobiasdavis.110mb.com... 195.242.99.215
Connecting to tobiasdavis.110mb.com|195.242.99.215|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4,566 (4.5K) [text/html]
100%[=====================================================================================================================================>] 4,566 24.72K/s
00:43:09 (24.67 KB/s) - `index.php' saved [4566/4566]
user@user-desktop:~$
This grabbed the file index.php from the website and saves it in the current directory as index.php
You probably noticed that I didn’t need to use an html file in wget. Thankfully, wget has a lot of tricks you can use, and you don’t need to use html. You can use wget to grab zip, pdf, mp3, or pretty much any file. Most of the options I will show you are put in this way: wget [the options] [the file]
The first one that I wanted to know was how to stop printing all that extra stuff. You can easily make wget run “quietly” by using the -q (for quiet) option: wget -q http://tobiasdavis.110mb.com/index.php This does the same thing as the first one, but doesn’t tell you what it’s doing.
Another handy thing, especially if you are scripting things, is to download a file and name it something else. This is also pretty easy: Use the -O file.html option to save it as file.html
Like this: wget -q -O index.html http://tobiasdavis.110mb.com/index.php
This quietly downloads the same file as before, and saves it as index.html
By now you may have noticed that there are multiple files in the folder you have been running these commands. By now I had three named index.php index.php.1 index.php.2 but what does it mean? This is a handy feature of wget: If you download a file with the same name, it won’t automatically overwrite the old one. But what if you want to?
You can always tell wget what file name to use, as above using the -O file option. When you do this, wget will overwrite the old version. In normal use, use the -N option to overwrite the old file. Like this: wget -q -N http://tobiasdavis.110mb.com/index.php This downloads the same file, but overwrites the old one you might still have.
Some other things that are useful are using ftp instead of http. It is the exact same thing, except you probably have a user name and password. The wget command is wget ftp://username:password@host/path
I used it like this: wget ftp://user:password@tobiasdavis.110mb.com/index.php The user name and password are mine. This downloads the actual underlying php script, which is quite different from what you see when browsing or downloading from http.
One note of security: If you use the above system, any other users on the system can read your log-in information, which is especially bad on a multi-user computer! Instead, type it in like this: wget -i - Then, type in the ftp command as above, like: ftp://user:password@host/path Now press Enter and then hit the Control and D button. This lets you type in things and they won’t be visible to other users. In practicality, wget is usually used in scripts, where you can do things differently.
You can look here for the official manual, some examples here, or try looking online for “wget examples”. Next time I will show you something about curl which is a more powerful version.
Posted: December 17th, 2008
What with this being my ninth blog, and something like my fifteenth web-site altogether, perhaps it deserves an explanation:
I like the power of Linux, and I especially like the use of command prompts to make things happen. When I type, I use pico. When I run commands, I open a terminal. Especially since I learned perl scripting, a simple type of programming things to happen from the command-line, I have really gotten into using the command line.
On the one side, I really like the terminal. On the other side, there are so many commands to remember that I decided to create this blog as a reference, so that I could just go back here if I forget something.. This could, I hope, be beneficial to you as well: You can peruse and search what I have done and see if it is useful for your situation as well. I will try to make it simple enough to follow, let me know if it needs simplification.
Two things:
1) I don't do Windows. I can't stand Windows at all. If I could never use Windows again I would be so very happy, and in fact this is my plan. NONE of these commands are for Windows! Don't use them there! Alternately, in my painful use of Windows, I have learned many things which I might share if I can recall them when appropriate.
2) I am a full-time student in an Engineering degree (e.g., I don't have much time) and this shows up in my other under-developed blogs. You can feel free to ask me questions, and I might be able to answer them, but don't be surprised if your question gets ignored for a long time: I am probably busy.
Hope this is as useful for you as it is for me!