Configuring a Sugar Chat Room so other clients can see it

By default, the chat rooms that XOs create with Sugar are not searchable.  Meaning that when you list available chat rooms in a regular client, you won’t see them and thus can’t join them.

You can use Psi or Pidgin to configure the XO Chat room so everyone can see it and join it.

Psi

In the Psi buddy list window, go to General -> Service Discovery

Expand the Chatrooms list.  If there’s a Sugar chat, you’ll see it listed as a bunch of letters and numbers.  Right click on it and select Join.  You’ll be placed in the chat with the XOs.

We still need to configure the room so everyone can see it.  In the upper right of the chatroom, you’ll see a button that looks like a couple of down arrows.  Click that and select “Configure Room.”

Under the General tab, click the tick box next to “Make room public searchable.”  Click Apply, then Close.

Now the XO chat room is visible so everyone can select it from the chat room list like a “regular” chatroom and join it.

Pidgin

Go to Tools -> Plugins

Click the tick box next to XMPP Service Discovery.

Now you can go to Tools -> XMPP Service Discovery -> XMPP Service Discovery

Make sure the account and server you want is listed in the Account box.  Click Browse and Find Services.

Expand the Chatrooms item.  It should start with the word “conference.”  You’ll see the Sugar chat listed by a bunch of letters and numbers.  Right click on it and Add to Buddy List.  Click Add.  Close the Service Discovery window.

In your Buddy List, right click on the Sugar chat you just added and select Join.  The chat room window will open and place you in the chat with the other XOs.

In the message window, type /configure and hit enter.  A box very similar to the Psi chat room configuration box will pop up.  Click the tick box next to “Make room public searchable.”  Click OK.  Now everyone can see the room in the chat room list.

One thing I have noticed is that this doesn’t seem to “stick.”  You might have to set this option again.  However, once a user is in the chatroom, regardless of whether it’s still searchable or not, they’ll stay there until they close it.

Apache for Secret Agents

“This file will be destroyed in 15 minutes.  Or whatever it was I set the cron job for.”

I have a user who’s rather obsessive about her security and privacy.  Which is fine, but as a server admin, I have to figure out how best to fill her requirements.  And it’s a fun challenge, too, I’ll admit.

I’m on an XS 0.6 which by default lets you define stuff in /etc/httpd/conf.d/<file>.conf instead of having to throw it into the regular httpd.conf file.  Here’s the definition in the regular httpd.conf file (actually httpd-xs.conf on the XS).

# Load config files from the config directory “/etc/httpd/conf.d”.
#
Include conf.d/*.conf

Let’s call this user Jane Bond.  Jane often needs to access files she keeps on my server, but sometimes she’s blocked because I run ssh on a non-standard port.  What to do?  Let’s put Jane in control of her own private, password protected directory in Apache so she can change her password at will.  She can even use a cron job to copy the directory to be served by Apache during the hours she needs it and then another cron job to delete everything when she knows she’ll be done.

As the admin, all I need to know is where she wants to keep it and the user name she wants to use to access it.  She controls everything else.  So, as root, I define Jane’s private Apache directory access parameters in /etc/httpd/conf.d

[root@schoolserver conf.d]# cat jane.conf
<Directory /var/www/html/jane/private>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride AuthConfig
  AuthName “These are Jane’s Secret Files!”
  AuthType Basic
  AuthUserFile /var/www/html/jane/private/.htpasswd
  Require user hello
</Directory>

I restart httpd and it’s all set up for her.

Jane takes it from here. 

She ssh’s into my server and creates /home/jane/private, bearing in mind that everything she puts in that directory will eventually be rsync’ed to her password protected Apache directory.

She creates the password for the user that I defined in her configuration file.

htpasswd -c /home/jane/private/.htpasswd hello

It automatically prompts for the password.

New password:
Re-type new password:
Adding password for user hello

When she’s ready, Jane can simply:

rsync -avh /home/jane/private /var/www/html/jane/
sending incremental file list
private/
private/.htpasswd
private/notes.txt

sent 225 bytes  received 54 bytes  558.00 bytes/sec
total size is 40  speedup is 0.14

Now she can go to http://mysite/jane and verify the private directory is not listed in the Directory listing.  She’ll have to manually enter http://mysite/jane/private into the browser, enter the username and password to gain access, and now when she goes back to http://mysite/jane it will appear.

At any point, Jane can create a new password by simply

htpasswd -c /home/jane/private/.htpasswd hello

And then rsync to her Apache directory to change the password.

“This site does not support Microsoft”

Have you ever wanted Windows and/or Internet Explorer users to feel your irritation when a site tells you it doesn’t support Linux?  Well, a few lines of php in your index page will spread the pain.


Now, my server, such as it is, is in my house and I do not get much if any traffic from Windows users.  Actually, I don’t even want the hits, as I really try to stay off the radar.  So what would block about 90% of the internet off my server unless they’re in the Linux club (or Mac, but they don’t have scads of market share either).

In my index.html, I stick this at the top:

<?php
if (eregi(“Windows”,getenv(“HTTP_USER_AGENT”)) ||
eregi (“MSIE”,getenv(“HTTP_USER_AGENT”)) ||
eregi(“Internet Explorer”,getenv(“HTTP_USER_AGENT”))) {
Header(“Location: windows.txt”);
exit;
}
?>

I rename the file from index.html to index.php.  I also create a terse message in /var/www/html named windows.txt:


This site does not support Microsoft.

And now only Linux (or Mac) users can go to my server’s index page!  That’ll show you, people who never go to my server anyway.

Now, you might be thinking, “What if you have to borrow your Mom’s laptop to access a file?”  Duh, it’s only the home page in the Apache root that redirects.  I can still go to http://mysite/anna or other subdirectories of /var/www/html just fine.

Going Crazy over Cron!

We all know that cron doesn’t use most of your variables, but it was driving me crazy trying to figure out how to get a text file output with a certain column width.

I used at to help me figure out what was going on.


The XS 0.6 doesn’t have at installed by default, so first off:

yum install at

Start the service

service atd start

The script I was trying to run from cron used fbcmd to output my Facebook wall to a text file so my Facebook phobic friends can read it from my Apache server so they don’t feel left out.  Running it manually worked just fine, but the text output from cron was messed up.  Specifically, lines weren’t wrapping properly.

The myfacebook script is just this:

#!/bin/bash
DATE=`date +%Y-%m-%d`
TIME=`date +%H:%M`
/bin/echo “Last Updated” $DATE $TIME > /var/www/html/private/anna/facebook.txt
/bin/echo “———————————————————-” >> /var/www/html/private/anna/facebook.txt
/usr/local/bin/fbcmd fstream =me 20 -satt -sd >> /var/www/html/private/anna/facebook.txt

I have a password protected web directory on my server, so that’s where I output it.  This would be really nice to have in a cron job so my users don’t have to nag me to manually update it.

After some Googling, I used at to generate a script with all my environment variables to run from cron.

Here’s what I typed in:

at now + 1 hour < ENTER >
/home/anna/bin/myfacebook < ENTER >
< CTRL+D >

And here’s what that looks like:

[anna@schoolserver ~]$ at now + 1 hour
at> /home/anna/bin/myfacebook
at> < EOT >
job 9 at 2010-12-17 00:31

As root, I meander over to where at keeps the spooled jobs.

[root@schoolserver ~]# cd /var/spool/at
[root@schoolserver at]# ls
a000090148b787  spool

The a000090148b787 file is the script that anna just generated with at.  I move it over to /home/anna/bin as facebookcron and chown anna:anna /home/anna/bin/facebookcron

Well, it didn’t make any difference at first.  The lines still weren’t wrapping.  So I look in my mailbox and at sent me a message!

tput: No value for $TERM and no -T specified

Well, that might explain it.  In the facebookcron script, I added these two variables amongst the slew that at had already defined for me.

TERM=linux; export TERM
COLUMNS=130; export COLUMNS

And wouldn’t you know the fbcmd text output wrapped quite nicely when I ran facebookcron with cron!

I stopped the at service until I need it again.

service atd stop

I want to run it every two hours at a quarter after, so here’s the crontab entry.

15 */2 * * * /home/anna/bin/facebookcron >/dev/null 2>&1

SSH keypair setup on the XS

SSH into the XS with a keypair

Here’s how I did it for my Ubuntu desktop client and the XS 0.6.

First, on the XS, uncomment these lines in /etc/ssh/sshd_config and sshd_config.in

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

Restart the ssh service

service sshd restart

Now generate keys on your client machine.

ssh-keygen

You might have to add -t rsa to that.

Sometimes you’ll have to do this as well, but not on the XO:

ssh-add

On the client machine, set the appropriate permissions in your home directory:

.ssh = 700
.ssh/id_rsa = 600

Copy .ssh/id_rsa.pub on the client over to .ssh/authorized_keys on the XS.  Make sure it’s all in one line.  From the client, this should work, if .ssh/authorized keys already exists on the remote machine.

cat ~/.ssh/id_rsa.pub | ssh -p <port> user@server ‘tee -a .ssh/authorized_keys’

On the XS, set the appropriate permissions in your home directory:

.ssh = 700
.ssh/authorized_keys = 644

Now you should be able to ssh into the XS without having to supply a password.

To make things even easier, especially if you’re using a nonstandard port and/or your username on the server is different from your username on the client machine, you can put an entry in ~.ssh/config

Here’s an example of my /home/anna/.ssh/config

Host schoolserver
    Hostname schoolserver.org    
    User anna
    Port 1985
    ServerAliveInterval 30
    ServerAliveCountMax 120

If you get an error about bad permissions when you use an ssh config file, simply

chmod 600 ~/.ssh/config

So now to ssh, all I have to do is:

ssh schoolserver

To scp, all I have to do is:

scp file.txt schoolserver:/home/anna

In ~.ssh/config, Host can be anything and Hostname can point to an IP.  It doesn’t have to be a domain name.

Compiling the XO 1.5 Kernel on an F14 Desktop

Oh, goodness.  Whenever I think I have stuff down, the olpc devs go and stir things up.  Seems now when I try to compile the XO 1.5 kernel on an F11 desktop, I get a lot of errors about dracut-modules-olpc being too old.  Well, fine, but where do I get the newest version?  That dracut-modules-olpc has some mysterious and inscrutable git source code with no INSTALL instructions, so I couldn’t manage to compile nor install it from source.  It’s in the F14 repos, though, so gimme a sec while I torrent F14 beta and burn a DVD…


…So I set up Fedora 14 beta on another machine and managed to compile the XO 1.5 kernel with some funky yum fiddling.

First off, we all know we need to yum groupinstall “Development Tools” for compiling goodness.

This might all be out of order, so I apologize if you run into issues with the order of these steps.  But I have just about had it with this stuff tonight, so here’s pretty much what I did:

Downgrade these packages:

yum downgrade glibc-2.12.90-15.i686 glibc-2.12.90-15.i686 glibc-common-2.12.90-15.i686 libxcb-1.5-3.fc14.i686

Install Development Tools (you might need to downgrade some packages listed above after you do this):

yum groupinstall “Development Tools”

And install some other stuff:

yum install unifdef dracut dracut-modules-olpc

Optional for a gui for creating the .config:

yum install qt3-devel qt-devel

Go here to see the latest kernel sources:

http://dev.laptop.org/git/olpc-2.6/

Make sure you’re a regular user.  Go into the folder you want the kernel source to live, then:

git clone git://dev.laptop.org/olpc-2.6
cd olpc-2.6
git checkout origin/olpc-2.6.35

make xo_1.5_defconfig

make xconfig

make xo_1_5-kernel-rpm

To install the kernel rpms on the XO 1.5, the previous instructions I wrote up on this post still work:

http://birminghamxo.blogspot.com/2010/09/compiling-xo-15-kernel-on-f11-desktop.html

Yeah, I managed to successfully compile, install, and boot up into my kernel on the XO 1.5 under this new F14 beta stuff.  I live for the challenge!

Teamspeak 3 Client and Server

Teamspeak is a standalone client/server voice chat application you can run over your LAN, no internet required as long as the clients and server are connected to the LAN.  It makes a nifty little intercom and you can even share files.


The Teamspeak 3 client requires SSE support.  To see if the CPU is supported,

cat /proc/cpuinfo

and look for SSE in the flags.  The XO-1 doesn’t have SSE support, but the XO 1.5 does.

Teamspeak 2 works quite well on the XO-1, as does the Teamspeak 3 server.  However, Teamspeak 2 and 3 are completely incompatible – you can’t connect to a Teamspeak 3 server with the Teamspeak 2 client and vice versa.

To install the Teamspeak 3 client on the XO 1.5:

Get the x86 Linux client from the download link on the Teamspeak site:

http://www.teamspeak.com/

The file name should look something like TeamSpeak3-Client-linux_x86-3.0.0-beta31.run

chmod +x TeamSpeak3-Client-linux_x86-3.0.0-beta31.run
./TeamSpeak3-Client-linux_x86-3.0.0-beta31.run

Agree to the license (this is not FOSS) and it’ll extract a folder.  Get into it.

cd TeamSpeak3-Client-linux_x86

Copy over the libraries it wants to see:

sudo cp lib* /usr/lib

Now this should run Teamspeak 3:

./ts3client_linux_x86

The setup wizard is really easy.  I like to use the left side “hand” key for push to talk, and the right side “hand” key for mute.

To add Teamspeak to the GNOME menu, install this so you can edit the menu in a nice GUI:

yum install alacarte

Go to System -> Preferences -> Main Menu and add TeamSpeak3-Client-linux_x86/ts3client_runscript.sh as a menu item.

We’ve got our client set up, but it’s no good without a server!  You can run the client and server on a single XO 1.5 and other Teamspeak 3 clients will be able to connect over the LAN.

Get the x86 Linux Server package from the downloads page on teamspeak.com

Unpack the tarball

tar xzvf teamspeak3-server_linux-x86-3.0.0-beta29.tar.gz

Get into the directory

cd teamspeak3-server_linux-x86

Start it up for the first time:

./ts3server_startscript.sh start

You’ll see output like this.  Copy and paste it into a text file.

——————————————————————

                      I M P O R T A N T                          

——————————————————————

              Server Query Admin Acccount created                

         loginname= “serveradmin”, password= “3ZMR+NMi”

——————————————————————

——————————————————————

                      I M P O R T A N T                          

——————————————————————

      ServerAdmin privilege key created, please use it to gain

      serveradmin rights for your virtualserver. please

      also check the doc/token_guide.txt for details.



       token=mP1oVeoCN+Hv8x4+V46LZPSxDxH33wUNHRdWo5pH

——————————————————————

Hit ctrl+c to get the prompt back.  Get your IP on the LAN

ifconfig eth0

Open your client and go to Connections -> Connect  In the address tab, enter in your IP and connect.  Go to Permissions -> Use Priviledge Key.  Paste everything after token= into the dialog box.  Now you’ll be the server admin.

To stop the server:

./ts3server_startscript.sh stop

To restart the server:

./ts3server_startscript.sh restart

Enable File Transfers

This is the most incredible new feature in Teamspeak 3.

Right click on “Default Channel” and select “Channel Permissions.”  Scroll down to “File Transfer,” right click, and “Add Permission Group.”  Now you can right click on “Default Channel” and bring up the File Browser.  Click on the “Upload Files” icon and select a file to upload.  Now any client can right click on “Default Channel,” select the File Browser, and right click on files to download them.  Any client can upload as well.

I haven’t gotten into security issues, as we’re just running this on the LAN for now.  If you open the ports up to the wild, woolly Internetz, then you’ll probably want to secure things a bit better.

Note on sound volume:

If you can barely hear the audio on the XO 1.5, as it tends to be very low, turn it up to max with alsamixer.

alsamixer

Watching TV on the XO 1.5 with a USB TV Tuner

A while ago, I got a crazy cheap ATI TV Wonder HD 600 USB TV Tuner from Woot for $20.  They’re still on Amazon for almost $50.  The original XO doesn’t even come close to having the horsepower to use it, but the XO 1.5 does.

Now why in the world would you want to watch TV on the XO?  Say the power goes out as a hurricane blows through, so your internet is down.  And you can’t find the batteries for your radio!  Well, get out your XO and watch your local weatherman freak out.  Or if a thunderstorm knocks out the power in the middle of the big football game, you’re not completely SOL.


Of course, you have to compile modules into the kernel.  I tried with 2.6.31 and it didn’t work, but a bit of research later I found out that it should work with later kernels.  Luckily you can get 2.6.35 from the git repository now.

git clone git://dev.laptop.org/olpc-2.6
cd olpc-2.6
git checkout origin/olpc-2.6.35

When I did up the config, I enabled the following modules.  How did I know which modules?  Well, I plugged the USB TV Tuner into my desktop and did lsmod to see what it was using.  Once I figured that out, I used xconfig, as it’s very easy to search and browse around.

Search for “dvb”
Enable “DVB For Linux” and “Support for various USB DVB devices”

Search for “em28xx” and enable:
Empia EM28xx USB video capture support
Empia EM29xx ALSA audio module
DVB/ATSC Support for em28xx based TV cards
Search for “2028” and enable “XCeive xc2028/xc3028 tuners”
Search for “5150” and enable “Texas Instruments TVP5150 video decoder”
Make sure “Video for Linux” is enabled as a module

Compile and install the kernel like usual.  You’ll also need the firmware linked from this page:

http://linuxtv.org/wiki/index.php/ATI/AMD_TV_Wonder_HD_600_USB

cd /lib/firmware
wget http://steventoth.net/linux/hvr1400/xc3028L-v36.fw

I’m using the mplayer I compiled for the XO 1.5 beforehand.  The only other dependency is:

yum install dvb-apps

So you’ve got all that and have booted into your custom 2.6.35 kernel.  If the XO 1.5 stalls booting, power it off, then power it back on while holding down the checkmark button.

Here’s what lsmod should give you when you plug in the TV tuner:

[olpc@192 ~]$ lsmod
Module                  Size  Used by
em28xx_dvb              4980  0
tda10023                5551  1 em28xx_dvb
zl10353                 5769  1 em28xx_dvb
lgdt330x                6534  1 em28xx_dvb
dvb_core               73123  2 em28xx_dvb,lgdt330x
em28xx_alsa             5487  0
tuner                  14221  1
tuner_xc2028           15854  2 em28xx_dvb,tuner
tvp5150                13279  1
em28xx                 72432  2 em28xx_dvb,em28xx_alsa
videobuf_vmalloc        3448  1 em28xx
tveeprom                9825  1 em28xx
fuse                   55004  2
xt_tcpudp               1903  3
iptable_filter          1040  1
ip_tables               7748  1 iptable_filter
x_tables               11658  3 xt_tcpudp,iptable_filter,ip_tables
uinput                  5920  1
via_camera             12914  0
v4l2_common            11909  4 tuner,tvp5150,em28xx,via_camera
videodev               34750  5 tuner,tvp5150,em28xx,via_camera,v4l2_common
v4l1_compat            12454  1 videodev
videobuf_dma_sg         6811  1 via_camera
videobuf_core          11770  4 em28xx,videobuf_vmalloc,via_camera,videobuf_dma_sg
mousedev                8370  0
psmouse                21485  0
serio_raw               3788  0
libertas_sdio           7341  0
libertas               70143  1 libertas_sdio
cfg80211              116798  1 libertas

And here are the device nodes it creates:

[olpc@192 ~]$ ls /dev/dvb/adapter0/
demux0  dvr0  frontend0  net0

Before you can watch TV, you’ll need to create your channel list.  This is for US broadcast stations.  Make sure to do this as the olpc user.

scandvb /usr/share/dvb-apps/atsc/us-NTSC-center-frequencies-8VSB > /home/olpc/channels.conf

You’ll get a bunch of “tuning failed!!” messages as it goes through all the frequencies.  This will also take several minutes.  Hopefully you’ll be able to pick up some channels.

[olpc@192 ~]$ cat channels.conf
WVTMDT:213000000:8VSB:49:52:3
WVTMRTV:213000000:8VSB:65:68:4
WTTO-CW:557000000:8VSB:49:52:3
WIAT-HD:569000000:8VSB:49:52:1
WIAT-DT:569000000:8VSB:65:68:2
WIAT WX:569000000:8VSB:81:84:3
WABM-HD:605000000:8VSB:49:52:3
WBRC:689000000:8VSB:49:52:3

Not too bad!  But I live at the base of Red Mountain where most of the area’s transmitters are located.  I took this picture from my backyard.

tv_transmitters

I’ve already set up my /home/olpc/.mplayer/config

[olpc@192 ~]$ cat /home/olpc/.mplayer/config
[default]
vo=sdl
ao=alsa
framedrop=1
lavdopts=skiploopfilter=all:fast=1 #DVD playback crashes with this

I copy channels.conf into /home/olpc/.mplayer so mplayer can see it.  I’m ready to watch TV!

mplayer -cache 8192 dvb://WBRC

Oh, look, here’s our crazy local weatherman wearing a ridiculous bow tie.

xotv
Since WBRC is the local Fox affiliate, I can change its line in channels.conf to

FOX:689000000:8VSB:49:52:3

…so I don’t have to remember the station call letters:

mplayer -cache 8192 dvb://FOX

This will use almost all of the XO 1.5’s CPU, so don’t plan on doing anything else while you’re watching TV.  And while playback is decent enough, it’s still going to be kinda jerky at times.

A couple of the HD channels here don’t want to play at the correct aspect ratio.  I started them up like this:

mplayer -cache 8192 -monitoraspect 3:4 dvb://CBS

Then maximized and restored the mplayer window to make the stream look pretty much OK.  You might have to drag the window down a bit as well.

If you want to take screenshots of the TV broadcast, add this to the mplayer command and you can hit “s” to take a screenshot to the current working directory.

-vf screenshot

Here’s a screenshot of our local Labor Day weekend forecast.  Apparently we’re supposed to “eat outside” on Saturday.  I’ll see if I can’t have lunch out on the porch, then.

eat_outside
Noted Issues:

Audio level is very low.  Run alsamixer as root (!?!) to max it up.

The camera doesn’t work, as the TV tuner takes over /dev/video0  Not sure if it’s due to the 2.6.35 kernel or compiling the TV tuner support.

Switching between Sugar and Gnome gives the message:
/bin/sh:  /sys/devices/platform/dcon/freeze: no such file or directory
… And there’s no dcon directory
Hit enter to get to a console, then “halt -p” and boot back up into Sugar or Gnome with the power and checkmark buttons.

A ZyDAS Wifi Adapter, an XO 1.5, and Kismet

Really, the main reason you’d want to use an external wifi adapter on the XO is so you can use the XO as a portable kismet machine.  The XO’s native wifi doesn’t support monitor mode.  I’ve got a cheapo ZyDAS wifi adaptor I got from Overstock.com a couple of years ago and luckily it works under Linux.  And on the XO with a bit of kernel mucking.


When you’re doing up your kernel config, enable these modules in this order:

cfg80211
mac80211
zd1211rw

Get the firmware from here:  http://sourceforge.net/projects/zd1211/files/

Extract the tarball and copy everything that starts with zd1211 into /lib/firmware/zd1211

Go into /etc/kismet/kismet.conf and edit the source to

source=zd1211,wlan0,ZyDAS USB

Change the log file directory in /etc/kismet/kismet.conf to /home/olpc/kismet cause otherwise it fusses about permissions for some reason.  Creating /var/log/kismet didn’t work for me.

mkdir /home/olpc/kismet
chmod 777 /home/olpc/kismet

Now root can

kismet

Here’s your proof!
kismet-xo

Compiling the XO 1.5 Kernel on an F11 Desktop

I tried, but couldn’t get this to work on the XO 1.5 itself.  But that gave me the impetus to finally get my dual boot Ubuntu Lucid / F11 machine sorted out.

As we all know, compiling a kernel takes a lot of dependencies and getting all those is usually the most time consuming part at first.  Once you get that covered, see what I did to compile and install a kernel on the XO 1.5 after the jump.


Make sure you do this as a normal user so you don’t accidentally hose something on your host machine.

Get the kernel source:

git clone git://dev.laptop.org/olpc-2.6
cd olpc-2.6
git checkout origin/olpc-2.6.31

Create your new config.  I like xconfig, but you can always use menuconfig instead.

make clean distclean
make xo_1.5_defconfig
make xconfig

I don’t know if all this is necessary, but I did this anyway cause I didn’t want to waste a bunch of compilation time just in case:

mv arch/x86/configs/xo_1.5_defconfig arch/x86/configs/xo_1.5_defconfig.original
cp .config arch/x86/configs/xo_1.5_defconfig
make clean distclean
make xo_1.5_defconfig

And finally:

make xo_1_5-kernel-rpm

This takes awhile, of course.  When it’s done, you’ll find the rpms in olpc/RPMS/i586.  Take these two over to the XO 1.5 and install them:

rpm -ivh kernel-firmware…rpm
rpm -ivh kernel…i586.rpm

Some stuff to do to get it to boot:

Go into /boot and make sure the initrd.img and vmlinuz symlinks were created correctly.

cd /boot
ls -lh

If you don’t do this, the XO 1.5 won’t boot into the new kernel

rsync –delete-before -av /boot/ /bootpart/boot/

While still in /boot, copy the new initrd and vmlinuz to /versions/pristine/NN/boot.  Replace the elipses with your kernel version and NN with your build version.

cp initrd…DIRTY.img vmlinuz…DIRTY.img /versions/pristine/NN/boot

Make your symlinks:

cd /versions/pristine/NN/boot
rm initrd.img vmlinuz
ln -sf initrd…DIRTY.img initrd.img
ln -sf vmlinuz…DIRTY.img vmlinuz

Reboot and you should see that lovely DIRTY kernel when you do uname -a