Deleted file recovery on unix

2008-01-06 23:31:35 PST

Tags: ,

Well, because I’m a cocky moron I was working on a new project but hadn’t “gotten around to putting it in a git repo” or backing it up at all and sure enough I accidentally deleted one of the files that was over 25% of the project. Severed me right I suppose. Well, I didn’t want to let that go. Too much work and hassle to redo, I’d already done a lot of bug tweaking on it. So I decided to investigate file recovery on Unix. Long story short, not so great, no fancy programs to go looking for your files. However, there’s always the DIU approach. So I started by grepping the harddrive (/dev/md/5) for a unique-ish string in the file and having it print out the an appropriate number of surrounding lines to get the file back.

grep -a -A 1000 -B 100 "import netpipe" /dev/md/5 > results.txt

The ‘-a’ switch makes grep treat binary files like text files, so it’ll work on devices, the ‘-A’ switch tells grep how many lines to print After the line with the text we want is found and the ‘-B’ switch tells grep how many line to print Before the line we want. I choose the numbers because the line I was looking for was clearly nearer the top of the file.

However this approach failed with grep giving me a ran out of memory error.

So a little more googleing and I found the solution, this little baby of a shell script

for ((skipamount=1 ; skipamount < 88188637184 ; ))
do
dd if=/dev/md/5 of=./testhex bs=1024 count=1024 skip=$((skipamount+=1024))
echo "Sector" $skipamount of 85899345920 echo "S" $skipamount>> ./found
echo >> ./found
grep "import netpipe" ./testhex --binary-files=text -A 1000 -B 100 >> ./found
done
date
echo "Done"

It’s not pretty and you’ll have to hand edit it to your particulars but essentially it reads over the hard drive picking out 1MB chunks piece at a time and running grep on those. The positive side of this is that it actually succeeded on running over my whole hard drive. The catches are that the found file is somewhat polluted with lines stating where it is, but this is actually handy because the other catch is that since we’re pulling discreet 1MB chunks off the hard drive it’s possible the file you are looking for will be arbitrarily split across them and you won’t get all of it in your results file. But all the extra information in the fill will tell you exactly where to look and you can just use ‘dd‘ to go in and get a more proper sized chunk with your whole file.

Anyways, a long story short, I found my file and was able to recover it. Hooray!

Also, a note! Crucial to deleted file recovery is to minimize writing to the drive the file was deleted on. Recovery works because the only information actually deleted are the pointers in the filesystem tree. The actually contents of the file are still on the drive, but now are as far as the file system is concerned, adrift in unused space and free to be allocated to be written over by the next program. So try to shut things down and stop writing to the partition with the lost files and run the recovery on a different partition or your recovery might overwrite your target!

New laptop (Umbriel)

2008-01-05 20:52:27 PST

Tags: , , , ,

So in September, my laptop Nika died of an electrical system failure. Going through a semester of university without a laptop was a hassle, but I waited and on Boxing Day I picked up a new laptop for $600 CDN ($300 off!). So what does one get for about the cheapest laptop in the store? Well, I got an Acer Extensa 5620 equipped with a Core2 Due 1.6GHz cpu, a pleasing 2 GB ram and a 250GB harddrive. It also had a Intel X3100 video card. So really, I couldn’t have asked for any more in laptop. I’m pretty pleased. I named it Umbriel.
Then I threw Ubuntu 7.10 on it.

First, a few install details. I decided to save Vista since a) I paid for it and more importantly b) I might need it for Starcraft 2. Vista did at least come with a nice partition+filesystem resize tool that shrank it right down. So that was nice. And then Ubuntu installed smoothly onto the rest of the disk and setup Grub to dual boot them flawlessly. So that was all nice.

So what are the good and bads?

The goods: All the open source Intel hardware I could want, including a surprisingly good built in web cam. The Ubuntu install went without a hitch and everything worked. Popped in media and it went out in search of codecs and installed them. Cool.

The medium: I did have to manually install DVD support. But it took like 1 minute so whatever. Same for enabling CPU scaling control from the Gnome panel applet (and I understand the rational for that).

The bad: Even though the graphics drivers for the newest Intel video card are open source and Intel backed no less, I can’t have desktop bling AND video playback. One or the other. That’s kind of lame. But will probably be fixed, and I’m really hoping by the time Ubuntu 8.04 comes out.

More annoyingly, the sound situtation. The speakers are way to quiet in some situations, like playing a DVD and only acceptably loud other times. Ditto for the headphones. The only minor saving grace is that this is also the case in Windows Vista which the laptop came with. That the computer industry as a whole is shipping laptops with crippled gimpy sound like this is a little discouraging and amazing. Does no one test the hardware and software they ship? Max sound on both headphones and speakers should be better than a whisper. Also, some weird regression in Ubuntu in that when I plug headphones in the speakers don’t turn off. Awesome. I though we had that licked like YEARS ago. It worked on my old laptop :p

Still, as a work and school machine the laptop is wonderful and more than sufficient. Additionally it can smoothly play UT2004 with all the features turned to low (which is really a a nice bonus) and I’m hopeful that with in a year it’ll handle video and audio just fine. And lets face it, $600 is pretty damn cheap :)

Apache upgrade

2007-12-18 14:46:07 PST

Tags: , ,

Upgraded from Apache 2.0.59 to 2.2.6. Configuration file rearrangement again. Not bad though. They generally seem to be doing logical things. Took a little bit to make everything work, there were some Apache Directory Allow/Deny problems with my vhost setup but I got those sorted out pretty quickly and now everything seems to be working again. Let me know if you see anything broken but it seems like a pretty smooth migration :)

Making Familiar 0.8.4 Linux useful on the IPaq hx4700

2007-11-09 13:42:42 PST

Tags: , , , , ,

These are notes and utilities and files I’ve gathered together to make my IPaq hx4700 useful to me, and setting it up decently easy. I know it took forever to type them up and finally publish them, but better late than never.

Mission

To turn basic Familiar 0.8.4 on the IPaq hx4700 into something useful. More specifically, to make IR and Bluetooth work, to make my Belkin IR Keyboard (F8U1500-E) work, and then to install a Debian chroot on an SD card (via the cross install technique) where we can then install, for example, every programming language and text editor we could want for portable programming purposes.

Getting Started

So, first things first, you need an IPaq hx4700. Or at least an IPaq, and hopefully one supported by Familiar Linux. As you can see from the list the hx4700 is supposed to have A+ support. It turns out that’s kind of a lie. But we can do surprisingly well with some work. First off, throw away the Familiar Installation guide, it doesn’t apply to the hx4700. They put together a different one on the wiki at handhelds.org/moin/moin.cgi/HpIpaqHx4700HowtoInstallLinux. Read it.

Files and Filesystems

So now’s as good a time as any to mention that I’ve collected all the files you’ll need and put them on my FTP at ftp.mindstab.net/ipaq-hx4700.

First off you need a SD card and you need to write the bootloader all over it so whip out DD and does as the instructions say. Then when that’s done toss an ext2 file system on your SD card, we’ll need it later.

Now for some work with the CF card. Since we’re flashing from it I’d suggest using the FAT filesystem. We’ll stash all our system stuff on it here’s a quick list of what you should grab from the FTP and put on it.

  • zImage-2.6.15-hh2-ipaq-pxa270: kernel
  • zImage-2.6.17-hh3: exciting new and more useful kernel, but we can’t install it until the system is up and we copy it’s modules over to the ipaq.
  • bootgpe-v0.8.4-ipaq-pxa270.jffs2: Root filesystem with GPE installed. I’d recommend GPE over OPIE.
  • reflash.ctl: Control file for the bootloader to know what it can flash. This one is updated with an option for the new kernel.
  • RADIO0d.BIN: Firmware driver
  • radio11.bin: Firmware driver
  • wlangen.bin: Firmware driver
  • 2.6.17-hh3.tar.gz: Kernel modules for a newer kernel. Untar it in place.
  • install-firmware.sh: Shell script to install the firmware. The names are case sensitive so depending on how your FAT filesystem performs this might not work :/.
  • install-modules.sh: Install the kernel modules for the 2.6.17 kernel. Assumes it’s running with the untarred file 2.6.17-hh3.tar.gz. Copies the modules to /lib/modules on the ipaq.

And now is a good time to mention that I got an IR keyboard with my IPaq, specifically a Belkin F8U1500-E, which didn’t work with the IPaq for a number of reasons at first. I solved them all. If you have this key board you’ll also want the following files. If you have any IR keyboard you still might want at least the init.d file from the list.

  • install-kbdd.sh: Shell script to install the files
  • init.d.kbdd: Adds lines to the start function to remove extra IR kernel modules that prevent simply IR keyboards from working. Also kill irattach.
  • kbdd.conf: Config file that just says use a belkinir keyboard on /dev/tts/2.
  • kbdd: My patched kbdd program with proper support for my keyboard.

I also put up kbd.c which is the file I modified from the kbdd source for anyone who wanted to see what I’d done (also, I suppose, to comply with the GPL ;)). I know it’s a hideous mess and hack, but using a case statement was easier initially in order for me to figure out how to get the keyboard working. I fully intended to turn it into an array latter, but once it worked I got lazy and left it. Meh.

Getting Familiar up and Running

Ok, you now have the CF card with all the files you need. Toss it in the IPaq and follow the flashing instructions on the wiki. Flash the 2.6.15 kernel, and then the GPE root filesystem. Then you can let GPE boot. It might take a bit.

Also, the boot loader and possibly the IPaq itself are kind of finicky. If it just won’t turn on, don’t worry, you probably haven’t bricked it, its just in a funk. Let it sit for like 5 minutes. Also try pulling its battery for a bit, putting it back in and then putting it on AC power. Eventually it’ll decide that the time is right to try booting again.

So, once GPE is up, there are a few change that we need to make to make life easier and better. First, go to “Setup->Login Setup” and set “Automatic Login” to yes. This will automatically log you on as root, instead of asking you for user name and password of some non root user. Really much beter in the long run for this device. Then log out and you should automatically be logged back in as root.

Now we can proceed.

We’ll need to do some typing to get the necessary files installed, so you’ll need to bring up the on screen keyboard. It kind of sucks, but I’ve seen worse. It is usable. Also, I’ve tried to write scripts to automate a bunch of stuff to keep the typing to a minimum until a real key board can be used.

So, bring up a root console from “Others->Root Console”. “cd” onto the CF card, “/media/cf”.

First we’ll install the firmware, so run “sh install-firmware”. Ideally this will work but you should double check and fix if it doesn’t. What should happen is the 3 “.bin” files are copied into “/lib/firmware” and their names are all uppercase except the “d” in RADIO0d.BIN.

Next run “sh install-modules” which should copy the 2.6.17 kernel module directory (you untared the .tar.gz right :)) into /lib/modules. Now when we flash our new kernel it’ll find it’s kernel modules installed and actually work, as opposed to choking in boot, or booting but being generally useless.

If you have a Belkin IR Keyboard (F8U1500-E) then you’ll also want my kbdd, and if you have any IR keyboard you might want my init.d.kbdd file.

So run “sh instal-kbdd”. It should copy kbdd to /usr/sbin/kbdd (saving the old one as /usr/sbin/kbdd.old), copy kbdd.conf to /etc and copy init.d.kbdd to /etc/init.d/kbdd.

Now you should have your base system much closer to ready. Now that the firmware is installed if you were to reboot your Bluetooth should work. However the kernel that shipped with Familiar 0.8.4 had broken IR support, so we need to upgrade to the 2.6.17 kernel I compiled for the IPaq. If you have a different piece of hardware there are instructions in the handhelds.org wiki for getting and compiling kernel source. Ignore the part about them making their own configs, it didn’t work for me, instead just copy /proc/config.gz to your sd/cf card and use that.

So to flash the new kernel after the modules are installed, reboot the IPaq holding the two upper keys (as the instructions said) as well to bring up the boot flasher and this time pick the 2.6.17 kernel.

Now it should boot up and Bluetooth and IR should work and your Belkin IR keyboard should work. Like magic. I still haven’t gotten wireless to work but I’ll update this if/when I do.

Wired USB internet

Next? We need connectivity. I still haven’t gotten the wireless to work, but you can easily do ethernet-over-usb and use a desktop as a router. My instructions are Linux specific but I’m sure other OS specific instructions can easily be found by Google.

I already wrote instruction on how to get a mobile Linux device online with Linux so check out the instructions at www.mindstab.net/wordpress/archives/174#gp2x_networking.

The net.sh script for the IPaq has an extra line and looks like

#!/bin/sh

ifconfig usb0 up 10.1.0.2
route add default gw 10.1.0.1

and you can get it at ftp.mindstab.net/ipaq-hx4700/net.sh.

Native Video

So the IPaq can play video. It’s a smidgen of a hack for GPE because the version with familiar doesn’t actually have a mplayer compiled for it so I nicked the one for OPIE and flubbed one of the dependancies: instead of using the SDL 1.2.7 compiled for OPIE and depending on OPIE on used the 1.2.4 version compiled for GPE. This might be why the video is currently choppy until I can find a better solution because there might be a much faster rendering path on OPIE for SDL than there is under GPE. Still, this will work if you don’t mind choppy video (but at least the audio is 100% solid). What I think I really need to do is find a way to make XV work on GPE and get mplayer to use it.

As for getting this working, all you need are some packages I’ve collected. Just grab the following from my iipkg collection at ftp.mindstab.net/ipaq-hx4700/ipkg:

  • libmad.ipk
  • libpostproc.ipk
  • libsdl.ipk
  • mplayer.ipk

I think that’s all you need. Either way, if it asks for other dependancies they are in the folder, so just grab everything. I think you have to force one of them to install ignoring it’s dependancies with the ‘-nodeps’ flag. Anyway, once you get mplayer installed, it uses the SDL video output plugin. In order to make video and audio sync and not play laggy or slow I recomend the following flags:

mplayer -framedrop -nocache $MOVIE

As I said, it’s currently laggy, but it works, and I’m looking for a better solution.

Making an ARM Debian Chroot

Note: For anyone who has been waiting for almost a year for my promised guide on how to make a Debian chroot for the GP2X, this is it. The instructions are the same. I originally did this on my GP2X until I got netwokring working on the IPaq, and shared the chroot SD card between them.

Now the IPaq only has limited space and only a limited number of programs compiled for it. If you want access to absolutely all software, then we need another source. The answer is a Debian chroot. Debian has great arm support so about 99% (Not Java) of stuff in the Debian repository will be accessible to you. All you need is space. So grab a decently sized SD card and put a reasonable filesystem on it, like ext2. Now, in order to install Debian we need Debootstrap, their utility for installing Debian from anywhere. You could try and install it on the IPaq but it’d be a hassle. I found the best solution was to download the ARM install disks (or minimal CD) and just copy off the entire filesystem. It’s only a few MB. You can get my copy at ftp.mindstab.net/ipaq-hx4700/deboot.tar.gz Untar it on the SD card.

For this to work you’ll need a network connection on the IPaq so make sure that’s setup and working.

(For GP2X users, for each chroot (the debootstrap one, and the final one) you’ll also want to run ‘cp /lib/libiconv_plug.so lib‘ where lib is what will be the root lib directory in the chroot.)

Then on the IPaq execute the following to set up the environment to chroot into the Debian install environment.

cd deboot
cp /etc/resolve.conf etc
mount -t proc none proc
mount -o bind /dev dev
chroot .

Now you’re in the actual minimal Debian install environment that is really only capable of doing one thing: running Debootstrap. So go for it. Install it in the chroot for now, you can always move it out once done.

debootstrap --verbose --arch arm etch /mnt/etch http://gulus.usherbrooke.ca/debian

Keeping in mind to change the Debian release name to what you want and to change the mirror to something appropriate to you. For a full list of Debian mirrors look at www.debian.org/mirror/list.

When it’s done, you’ll have your very own Debian chroot in /mnt/etch under the chroot or /media/card/deboot/mnt/etch in the IPaq filesystem.

You’ll probably want to move the chroot to either the root of the SD card or just a subdirectory, so exit the chroot and then

mv /media/card/deboot/mnt/etch /media/card/etch

Now you have your very own Debian chroot. A few last things need to be set up before using it. Again, it will need internet too if you want to be able to install software, so run

cp /etc/resolve.conf /media/card/etch/etc

Next you need to add a few things so the environment will be have as Debian expects, and not inherit the slightly different IPaq environment, so grab profile and profile.ipaq and put them in the /etc directory of your chroot. Mostly it just sets your home directory to /root instead of /home/root and a few other minor things but important things.

Finally, get the chrootme.sh script and put it in the root of your chroot.

Now all you should need to do to use your chroot is

cd /media/card/etch
./chrootme.sh
source /etc/profile

Now you are in your live Debian chroot! Congrats! So why did we go to all this effort to just get another Linux environment when IPaq already has one? Well, this one can now install any software that Debian supports, which is pretty much all software :). But first, at least in my case, we have to do a few things for apt so it will be happy. Run

touch /root/.gnupg/trustedkeys.gpg

gpg  --keyserver subkeys.pgp.net --no-default-keyring --primary-keyring /etc/apt/trusted.gpg --recv 359AAB34 

wget http://ftp-master.debian.org/ziyi_key_2006.asc
gpg --no-default-keyring --primary-keyring /etc/apt/trusted.gpg --import ziyi_key_2006.asc

This install the required gpg trust info so that you can securely talk to the Debian package server.
You can also select a mirror by editing ‘/etc/apt/sources.list‘. Now just

apt-get update

and then you can ‘apt-get install ‘ any piece of software you want. I’d recommend starting off with a text editor like vim and/or emacs, and the some programming languages like Python, Ruby, Lisp, or C. Now you have a mobile coding environment that fits in your pocket!

Conclusion

Well, now you have an ultra portable computer that can run any piece of Linux software. I turned mine into a portable development machine. I’ve been using it at University in my CS classes, but you can do what ever you want with yours.

As for the future, the only real things this tutorial still need are ways to get the WiFi working and usable, and a way to squeeze better framerate out of MPlayer. If anyone has any ideas, please get in touch and let me know :)

I hope this set of notes/tutorial/howto is useful to anyone.

I have finally beaten Belkin’s F8U1500-E insane and buggy IR protocol

2007-09-03 14:37:34 PST

Tags: , , ,

I finally think I did it! I finally made my Belkin F8U1500-E IR keyboard talk properly with X on Familiar Linux on my IPaq hx4700. Yes yes, I’ll get to the whole buying an IPaq and putting Linux on it in a bit. But this has been a huge hassle and a lot of work thats had the side effect of me learning to speak the apparently overly complex language the keyboard talks (press a button, send one event not 3 or 4, no?). Wicked. This is super cool. More details later. I am champion.

Gentoo Hardened for the win

2007-08-09 11:24:56 PST

Tags: ,

Preliminary googling seems to indicate that there aren’t any main stream distos compiling all their binaries with even basic SSP enabled, let alone easy to use Grsecurity/PaX enabled kernels. The best I can find are instructions on how to enable some of these features in a system and then recompile the system or critical service binaries.

So really, Gentoo Hardened is ahead of the game. I was looking for a binary distro for a small system to be a firewall, but if I want to go the ultra secure route, it looks like no matter what I’ll be (re)compiling binaries from source so I might as well use hardened Gentoo which makes it easiest by far to integrate with Grsecurity, PaX, and SSP.

If you’re wondering at my other criteria, I’ve ruled out the obvious choice of OpenBSD because it only has a 6 month 1 year support cycle, and that’s limited to patches that you apply and the use a old school build system to rebuild the binaries. Kludgy, still involves compiling, and short support cycle. So I looked for a Linux distro that had a longer and binary support cycle, but none seem to have SSP and Grsecurity.

On the other hand, Hardened Gentoo gives me native out of the box support for Grsecurity, PaX, SSP, and other fun things, and an infinite support cycle. The only cost is compiling everything, which only sucks a bit on small embedded-ish systems, but if compiling is the only way to go any ways, might as well do it right with Gentoo as no one else has nearly as good system tools for compiling software.

Also, although I wasn’t looking for it, Gentoo Hardened has support for SELinux as well.

Planet fixed

2007-07-29 10:08:43 PST

Tags: ,

Just noticed that planet.mindstab.net (my online rss aggregator) wasn’t updating. Stopped around the time of the of the mass software update. Anyways, after trying a few planet versions and all of them erroring out I got the bright idea to clear the cache, and now it works fine. Huh.

XFX Geforce 6200 rocks my socks

2007-07-26 14:32:41 PST

Tags: , ,

Better late then never, i should mention that on Tuesday Rob dropped by with a late but fantastically practical birthday gift, an NVidia Geforce 6200 video card. Aw, he knows just what I like. But truthfully, it’s just what I needed. Yes with the 8*** line out its 3 generations old, and bargain bin for its generation, but compared to the ATi Rage 128 I’d been forced to use for the last 3 weeks since my Nvidia 5900 burned out, it’s amazing. Also, even though it’s old and bargain bin, Rob managed to find one with two video out ports so I’m back to dual screen. It’s perfect. Also, it actually has twice as much RAM as then 5900 did, fancy that. And with its next gen technology from my old 5900 card, it seem to run Doom 3 about just as well as the 5900 did. So I’m actually at about 100% video recovery. I’m thrilled.

Conectivity the old school way: Toshiba laptop modem (intel) and dialup

2007-07-26 13:56:53 PST

Tags: , , ,

So you might be noticing a theme emerge between this and my last post. Yes, after watching terrible movies and reading some books, some of which are sub optimal, and then generally immersing myself in the internet, I decided I needed to be more connected. So I have several projects on the go to fix that. The earlier post of getting GPRS internet on my laptop from my cell via bluetooth was one such project. But it’s also financially impractical. However, my Telus ADSL package comes with 40 hours a month of dialup included. So I thought it was time to turn my attention to that. I’d ignored the old technology of modems forever, not thinking that they can still come in handy in pinch until the city is covered in municipal WiFi. Phone lines are often more prevalent then unsecured wifi in the city, especially in buildings or houses.

So, first, I hopped over to the Telus website and found that the Vancouver dial in number is 604-280-9000. Next, I had to determine the modem that my Toshiba Satellite m40x has. As it turns out there are tools for that: scanModem, a little shell script that does the trick. Downloaded it, unzipped it and ran it. It told me I had an Intel/Alsa modem. So I loaded up the snd-intel8x0m kernel module. Then I installed the sl-modem-daemon package that uses the module and provides the rest of the softmodem. It neede to be setup:

 # dpkg-reconfigure sl-modem-daemon -plow

And it just asked the county I was in, and the set things up. The modem was then controllable from ‘/etc/init.d/sl-modem-daemon‘ and could be started and stoped accordingly. The device that was created was /dev/ttySL0 but /dev/modem was also turned into a symlink that pointed to it so either was usable. With the modem setup and on, I then needed a dialer to connect me to my ISP.

First, a simple but verbose and command line dialer: wvdial. To set it up I ran

# wvdialconf /etc/wvdial.conf

It worked and the config file was created. But it needed editing. So I loaded it up in a text editor and uncommented the phone number (one number, no dashes or spaces), username, and password fields and filled them out accordingly. Lastly, for this modem, I needed to add the ‘Carrier Check = no‘ line at the end of the file for it to connect properly. Then everything was in order and connecting was as simple as

# wvdial

Success. I had dailup internet. Ctrl-C in the terminal to disconnect.

The softmodem is flaky though and its often a good idea to restart it between dials

# invoke-rc.d sl-modem-daemon restart

Still, command line isn’t as sexy as GUI, or at least not as convenient. So I then installed gnome-ppp and found it in the Applications->Internet menu. I put in the pertinent information again (phone number, username, password) and then tweaked a few options in it’s setup window like device in the Modem section, and turning on ‘Dock in notification area‘, and turning off ‘Check carrier line‘ in the Options section. Then I hit the connect button and it connected and minimized to the notification area. Beautiful slow internet was mine!

Reference

Getting my Ubuntu laptop and Sony Ericsson k510a cell phone to talk to each other with Bluetooth: file sharing and internet over GPRS and ppp

2007-07-26 08:23:38 PST

Tags: , , , ,

Well, I taught my laptop a new trick.

I went out and bought a DLink DBT-122 Bluetooth adapter (USB). Cheapest one they had, plugged it into my laptop (Ubuntu Feisty) and it was recognized right away. Installed bluez and bluetooth related packages and started to play.

First thing I did was enable the bluetooth applet that runs in the notification area. It can also be accessed from System->Preferences->Bluetooth Preferences. Once that was on and my cell phone’s (Sony Ericsson k510a) bluetooth was on I was able to use nautilus’ sendto to send files via bluetooth to my cell phone. Then after turning on Applications->Accessories->Bluetooth File Sharing, which starts an applet in the notification area, I was able to send files to my laptop from my cell phone via bluetooth. So that was all cool, but it was also just warm up.

Next I wanted to get internet on my laptop through my cell phone. While impractical in the areas on cost and speed, it does have far greater coverage than random unsecured wifi access points around the city (especially as of late as people are finally starting to use WEP and WPA) and it’s coverage out of city is of course no contest either.

So I installed a few more tools, ppp (Point to Point Protocol) related, like ppp and pppconfig.

The first tool I used was ‘hcitool‘ which is used for establishing bluetooth connections and other bluetooth related issues.

# hcitool scan
Scanning ...
         00:17:B9:DA:E4:F2       phone.mindstab.net

This will scan for all bluetooth devices in range and return their name and MAC address. Next I had to connect to the phone and laptop or ‘pair’ the devices. For my phone, the Sony Ericsson k510a, I had to do this on the phone’s side. I went to Settings->Connectivity->Bluetooth->My Devices. Then I selected New Device and after it scanned, I selected my laptop. It then bid me enter a ‘password’ so I choose a few numbers, and then the bluetooth manager on my laptop notified me a device was trying to ‘pair’ and asked me to enter the number there. That done my cell phone accepted my laptop. I selected my laptop/device on my cell phone and told it to always accept connections from that device. Also, to be safe, I put the password/number in ‘/etc/bluetooth/pin‘ although I’m not really certain if that was necessary.

Now the devices were set to connect to each other on a regular basis so back to hcitool to handle that. The ‘cc‘ argument establishes or breaks a connection and the ‘auth‘ argument authenticates the connection.

# hcitool cc 00:17:B9:DA:E4:F2
# hcitool auth 00:17:B9:DA:E4:F2

Now a bluetooth connection with the phone was established. Next up it was time to configure the ppp connection that would run from my laptop, over bluetooth to the cell, and from there over GPRS (or possibly EDGE?) to the internet.

First, I needed to further setup Bluez (Bluetooth handler on Linux) to facilitate this by creating a /dev/ entry for the connection. And I needed a bit more info. The command ‘sdptool‘ delivered this to me. It can be used to list all the supported features of a device and their details. I was specifically interested in the ‘Dial-up Networking’ section.

# sdptool browse 00:17:B9:DA:E4:F2
...
Service Name: Dial-up Networking
Service RecHandle: 0x10002
Service Class ID List:
  "Dialup Networking" (0x1103)
  "Generic Networking" (0x1201)
Protocol Descriptor List:
  "L2CAP" (0x0100)
  "RFCOMM" (0x0003)
    Channel: 2
Profile Descriptor List:
  "Dialup Networking" (0x1103)
    Version: 0x0100
...

In there I found the ‘Channel’ that the protocol was operating on, in this case ‘2‘. Now I opened up ‘/etc/bluetooth/rfcomm.conf‘ and setup the device.

/etc/bluetooth/rfcomm.conf

rfcomm0 {
        bind yes;
        device 00:17:B9:DA:E4:F2;
        channel 2;
        comment "Bluetooth PPP Connection";
}

Then I restart bluetooth. On newer Ubuntu versions the service is just called ‘bluetooth’ but on older versions it’s apparently called ‘bluez’.

# invoke-rd.d bluetooth restart

Now I had setup a connection to my cell phone and created ‘/dev/rfcomm0‘ for it. I was now ready to setup a ppp connection over bluetooth.

pppconfig thankfully does most of the hard work here. It configures the ppp/peer files and the even more convoluted chatscript (some kind of text file that contains the initial connection protocol text that is used to establish the connection).

# pppconfig

pppconfig gives you a menu. I chose ‘Create Connection’. Called it whatever, I chose ‘gprs’. Next I selected ‘Dynamic’ (for DNS). Then I selected ‘Chat’ for the Authentication Method. I entered no password or login, and then deleted the text when it asked for a User name and another password. The default speed of ’115200′ baud was fine. ‘Tone’ is the choice for the ‘Pulse or Tone’ section. The number to dial was a bit tricky. It’s in the form of something like ‘*99***slot-of-internet-on-cell#’ so for me ‘*99***2#‘ was what I entered but others might try ‘*99***1#‘ or possibly ‘*99#‘. I entered the port to use manually and entered ‘/dev/rfcomm0‘. Then it gave me a chance to review and then write the file. I did so.

The two main files it creates are ‘/etc/ppp/peers/gprs‘ and ‘/etc/chatscripts/gprs‘. If you are lucky you should just be able to connect now, but I had problems, so I had to tweak the files a bit. In ‘/etc/ppp/peers/gprs‘ I had to comment out the ‘remotename‘ and ‘ipparam‘ lines with hashs [#].

/etc/ppp/peers/gprs

...
user ""
#remotename gprs2
#ipparam gprs2

and in ‘/etc/chatscripts/gprs‘ I had to comment out the ‘ogin:‘ and ‘ssword:‘ lines again with hashes.

/etc/chatscripts/gprs

...
# ispname
#ogin: ""
# isppassword
#ssword: ""
# postlogin

Now all the ppp config files were properly configured to work with my phone, so it was time to try the connection out. Before that though, I turned other networking off, which is easy enough with NetworkManager, I just right clicked on it and unchecked ‘Networking‘. Then to turn on the connection over bluetooth, ppp, and gprs, I just used the ‘pon‘ command.

# pon gprs

and gave it a few seconds. My cell lit up and told me it was connecting and then it connected. Then I was good to go. Sadly gprs internet rates are expensive here at $0.05 / kB. Also, it’s a bit firewalled so the standard ping google.com test to see if the connection is working fails. I just loaded a small web page in my browser. It worked! Then tried to ‘ssh’ to my server, and that also worked! When I was done, I just

# poff gprs

to turn the connection off.

And that’s it. Now I can get files to and from my cell phone and get internet from it for my laptop as well.

When I was having trouble, I looked in ‘/var/log/syslog‘ to see where the trouble was coming from.

Also, for some reason, the next day, ‘sdptool‘ was reporting that the ‘Dailup Networking’ service had moved to channel 2 so I had to change ‘/etc/bluetooth/rfcomm.conf‘ file to represent that and restart bluetooth with ‘invoke-rc.d bluetooth restart‘, so keep an eye out for that if your connection starts failing later for no reason.

References

Valid XHTML 1.0!
Valid CSS!
Mindstab.net is proudly powered by WordPress
Entries (RSS) and Comments (RSS).
18 queries. 0.546 seconds.