Wednesday, July 23, 2008

Ubuntu Multi Media How To

I've found a comprehensive multi media guide for Ubuntu at ubuntuforums.org

The guide works for 8.04 and prior and gets you set up with the best multi media apps, codecs, etc

Check it out:

http://ubuntuforums.org/showthread.php?t=766683

Tuesday, June 24, 2008

Trial Run of Ubuntu 8.04 Hardy Heron

Over the past few weeks I've been running Fedora 9 on my laptop, in my experience, F9 does not perform well on my system. I haven't tried it on any of my desktop hardware, so I can't pass judgment past using it on the Dell XPS m1330. Maybe there are too many brand new technologies in this release?

I was about to roll back to Fedora 8, which performed well on the hardware, when I thought, why not give Ubuntu Hardy Heron a try.

In the Linux realm, I have always chosen Red Hat or other RPM based distributions over the others. So this is slightly unfamiliar territory for me, being Debian based.

Power Savings
Since this is a laptop, I wanted to get max performance when on AC power and max battery when off of AC power. I did so by following these steps.

I also modified /etc/X11/xorg.conf from

Section "Device"
Identifier "Configured Video Device"
Driver "nvidia"
Option "NoLogo" "True"
EndSection

to

Section "Device"
Identifier "Configured Video Device"
Driver "nvidia"
Option "NoLogo" "True"
Option "OnDemandVBlankInterrupts" "True"
EndSection


And added a new script to Sessions (System -> Preferences -> Sessions) called "Nvidia Power Settings" with the following code:

#!/bin/bash
while true; do
if on_ac_power; then
nice /usr/bin/nvidia-settings -q all > /dev/null
fi
sleep 25;
done


The following are the steps I took to get Ubuntu to play an off the shelf copy of Pink Floyd the Wall DVD (which would not play with the default install of Ubuntu 8.04). The DVD is apparently of the encrypted variety.

Useful links:

sudo wget http://www.medibuntu.org/sources.list.d/hardy.list -O /etc/apt/sources.list.d/medibuntu.list

sudo apt-get update && sudo apt-get install medibuntu-keyring && sudo apt-get update

sudo apt-get install vlc libdvdcss2 ubuntu-restricted-extras w32codecs

Firewall
I ran into an issue with the default policy for the Firestarter firewall where it wouldn't allow traffic on my VPN connection. Using this page as a reference I was able to get VPN traffic to pass through the firewall. Here are the settings that I used in /etc/firestarter/user-pre:

iptables -A INPUT -j ACCEPT -s IP_OF_VPN_GATEWAY -p esp
iptables -A INPUT -j ACCEPT -s IP_OF_VPN_GATEWAY -p udp -m multiport -sports isakmp,10000
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT



This Ubuntu forum post covers the steps to configure nVidia notebook GPUs for maximum performance while on AC and max power savings while on battery.

Tuesday, June 10, 2008

DellTechCenter Web Page

I've stumbled upon a nice web site for all things Dell (enterprise in scope), Dell TechCenter wiki.

http://www.delltechcenter.com

One great feature of the site, weekly chat sessions with Dell technical reps about various enterprise topics. This week we chatted about Blade Server Management.

Check it out!

Thursday, May 29, 2008

Use Puppet to Set the Ethernet Speed

The way our network is configured, the workstations perform much better if their nic speed is set, rather than using auto negotiation.

It's easy enough to go out to each of the machines to do this, but it is much easier to let Puppet do the grunt work.

This is a class that will do just that for Red Hat based workstations (the class resides in its own file /etc/puppet/manifests/classes/nic_speed.pp):
class nic_speed {
   case $hostname {
"host01",
"host02",
"host07",
"host08",
"host10": {
# Set the nics to 100 half
append_if_no_such_line{ eth0:
file => "/etc/sysconfig/network-scripts/ifcfg-eth0",
line => 'ETHTOOL_OPTS="speed 100 duplex half autoneg off"'}
}
default: { }
}
}

The hosts listed in the case statement will have the ETHTOOL_OPTS line appended to their ifcfg-eth0 file, all others will use the default, which is to do nothing.

append_if_no_such_line is not native functionality of Puppet and is part of a custom class called cfengine.pp that adds a few commonly used features of CFengine:
# /etc/puppet/manifests/classes/cfengine.pp

define append_if_no_such_line($file, $line, $refreshonly = 'false') {
exec { "/bin/echo '$line' >> '$file'":
unless => "/bin/grep -Fxqe '$line' '$file'",
path => "/bin",
refreshonly => $refreshonly,
}
}

define delete_lines($file, $pattern) {
exec { "sed -i -r -e '/$pattern/d' $file":
path => "/bin",
onlyif => "/bin/grep -E '$pattern' '$file'",
}
}

Wednesday, May 28, 2008

nVidia Release Driver With Preliminary X.org 1.5 Support

Fedora 9 users rejoice, nVidia has released a driver for Linux that claims "preliminary support" for X.org 1.5.

Here are the release notes of interest for the Dell XPS notebook
  • Added preliminary support for X.Org server 1.5
  • Improved hotkey switching and power management support on some GeForce 8 notebooks
  • Resolved a problem resulting in X startup to fail on some GeForce 8 and 9 systems without swap space
  • Restored compatibility with recent Linux 2.6 kernels
The driver hasn't yet made it into the Livna release repo, it should make it into the livna-testing repo soon.

The driver can be installed without using the repo by downloading NVIDIA-Linux-x86-173.14.05.pkg1.run and running it from a terminal after switching to runlevel 3.

If you encounter driver related bugs, please email them to linux-bugs@nvidia.com so that nVidia can continue to improve the Linux driver.

The official nVidia driver release page can be found here.

Wednesday, May 21, 2008

VMware Roll for Rocks 5 Clusters

Rocks 5 (www.rocksclusters.org) released April 30, 2008 using Red Hat EL5 (CentOS5) as the underlying operating system and support for Xen virtual machines.

Adding virtual machines to a computing cluster is a terrific idea. Think about the possibilities from an admin stand point. Say that user jsmith needs his compute nodes configured with Red Hat 7 because his application is old and won't work in current releases. With the virtual machine approach, it's very easy to satisfy this request without having to carve out physical compute nodes for reinstallation.

Not to be out done, Takahiro Hirofuchi of AIST announced that they are working on a VMware Roll for Rocks 5 (they also have plans for a Rock 4.2 version).

I'm a VMware guy and haven't done a whole lot with Xen, so this roll is very appealing.

They list the features as:
The project page is hosted on Code Google (http://code.google.com/p/grivon/wiki/VMwareRollRocks5).

Wednesday, May 14, 2008

Initial Fedora 9 Thoughts

Update, the resolution to the sound not working through the built in speakers, launch the Volume Control application, under preferences add Surround Sound to the control and unmute it.

I've installed Fedora 9 i386 on my Dell XPS M1330 laptop a couple times now and have some thoughts to share:

  • Boo: nVidia drivers are not available due to the fact that F9 released with a pre release version of X server 1.5 (1.4.99.901 to be precise). This should be remedied soon since 1.5 is supposed to officially release soon. Then we just wait for nVidia to roll out a driver.
  • Boo: Sound does not work through my laptops built in speakers nor through headphone jack 1 (see bug report # 446689. Sound does work for devices plugged into headphone jack 2. Sound worked out of the box in Fedora 8. I haven't trouble shot this issue yet, but lspci shows the sound card as:
    00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 02)
  • Nice: Wireless and and wired networking comes up much cleaner in F9 than earlier. NetworkManager starts automatically, and eth0 doesn't sit hold up the boot process looking for an address in the absence of a network cable.
  • Nice: I am not asked to enter my keyring passphrase every time NetworkManager authenticates with a WAP, I found this to be annoying in F8, the workaround was to install gnome-keyring-pam, which appears to be installed by default on F9
  • Boo: The new software updater, PackageKit, gui doesn't reveal enough information. When updating, the gui shows progress bars and package names, but doesn't tell you what version it is updating too / from. It'd be nice if they provided a "More Info" or equiv button
  • Boo: After connecting to my WAP, I get a pop up from the power monitor app "Sleep warning: Your laptop will not sleep if you shut the lid as a running program has prevented this...", Ok that's a start, but as a user I want more information, the dialogue doesn't provide any clues to the offending application, how it's preventing sleep nor does it provide a link to research the message
  • Boo: Shutdown very quickly closes X (nice), but then you are taken to VT1 where all you see is a login prompt, meanwhile all of the shutdown action is going on on VT7. The first time I shut down, I thought maybe X had crashed, I was about to log in to the shell when the machine powered off. I like to see something that indicates progress.
  • Nice: F9 install of OpenOffice 2.4 doesn't nerf Calc's ability to do more intelligent autofills. In F8, the following would not continue the sequence: In cell A1 and A2 enter "compute-0-1" "compute-0-2", select both and drag down to include A3,A4,A5. The sequence should continue, "compute-0-3", "compute-0-4", "compute-0-5". In F8, it wouldn't do this, however removing it and installing 2.3.1 from the OO site worked.
  • Boo: The Synaptics touch pad no longer allows 'taps' to activate left mouse clicks. According to this bug report # 439386 this is not so much a bug, as an issue with the synaptics package being compiled with tapping disabled. I like tapping, just not while I'm typing

Fedora 9 (Sulphur) Is Out

Fedora 9 has officially released, I plan to post a Dell XPS M1330 install (upgrade possibly) guide shortly.

http://fedoraproject.org/

Some highlights in this release:

  • PackageKit replaces pirut as the package management frontend to yum. PackageKit's goal is to provide a standardized interface for installing and updating packages, abstracting the user from the actual (yum, apt, etc...) software used by the system
  • NetworkManager improvements (it's also configured to start by default, which wasn't the case in F8) such as Ad-Hoc networks (form a wireless network with other nearby wireless clients) and support for PolicyKit
  • Gnome 2.22, which uses the new Gnome Display Manager, rather than gdm
  • KDE Desktop 4.03 with the promise that version 4.1 will be available via the normal update repo later this year when it is release upstream
  • Firefox 3 (well, it's really Firefox 3 beta5)
  • OpenJDK6 as the default Java
  • Improved speeds for startup and shutdown of X (the project claims approx 1 second for each)
  • Drive encryption and ext4 file system support

Thursday, March 6, 2008

System Administration with Puppet

I manage quite few Linux workstations (mostly Red Hat EL4 and EL5, CentOS) and found that my home grown scripting approach to maintaining these systems was becoming increasingly difficult.

One obvious problem with using a mountain of scripts to maintain systems, what happens when I want to go on vacation and have to leave the Windows guy in charge? I needed a system that would make it easy for a temporary admin (or new team member) to take the reigns.

A couple recent issues of Linux Magazine (a great publication by the way) reviewed CFengine and Puppet for systems management. I had known that there were open source solutions out there, but had not spent the time to do the research, preferring to handle the latest challenge by writing another script.

The articles finally convinced me to do further research. I ultimately chose Puppet for several reasons, including:
  • Written in Ruby
  • Very easy to get a base system up and running
  • Helpful community
  • Active development
I really like the fact that the configuration files use Ruby syntax, so by configuring Puppet, I'm also learning something about Ruby. I'm a Perl guy, but have been interested in learning Ruby for system administration. Now I have the excuse :-)

Example Syntax
A short example of the power of Puppet.

class baseclass {
   service { "sshd":
      enable => true,
      ensure => running,
   }

   file { "/etc/shadow":
      owner => "root",
      group => "root",
      mode => 400,
   }
}

Puppet will ensure that nodes that include this class (baseclass) have the sshd service set to startup on boot and verify that it is running, starting it if necessary. Puppet will also verify the owner, group and permissions of the /etc/shadow file, if they don't match our definition Puppet will make the necessary changes.

These definitions will work regardless of the target operating system (Red Hat EL, Fedora, SuSE, Sun Solaris, BSD, whatever). That's very appealing to administrators because they don't have to script for each unique environment, Puppet handles it in the background.

Puppet uses another Ruby based utility called 'facter' that returns a whole slew of data about the node (architecture, hostname, fqdn, ipaddress, kernelrelease, ...). You can use these facter defined variables in your configurations. For example, Puppet provides for basic 'if' and 'case' statements to allow you to define conditions, for example, only include the class '64bitonly' if the architecure (returned by facter) is x86_64:

case $architecture {
   x86_64: { include 64bitonly }
   default: { }
}


Useful Puppet Links

Saturday, March 1, 2008

LaCrosse WS2308 Weather Station

I installed a LaCrosse WS2308 weather station with the idea of having my CentOS 5 Linux server uploading the data from the WS2308 to Weather Underground (www.weatherunderground.com). If you are a techie, you've gotta see the coolness of logging into Weather Underground and seeing live weather data at your house. My station's link:

http://www.wunderground.com/weatherstation/WXDailyHistory.asp?ID=KALONEON3

The WS2308 comes with Windows software, not much help on CentOS (maybe it'd work with Wine?) and connects to the PC via serial cable. LaCrosse is kind enough to offer a free high quality serial to USB adapter available upon request. Luckily, my server is old enough to have serial ports (although I did order the free USB adapter, I couldn't get it to work. dmesg showed it identified but I couldn't communicate with the device).

I tried several software packages and settled on a perl script called wu-upload.pl. This script uses the module Device::LaCrosse::WS23xx to query the WS2308. I decided to update the script to extract additional information as well as a simultaneous upload to a MySQL database.

Here's the updated wu-upload.pl script, unfortunately blogger.com wraps long lines so for the script to work you'll need to account for that):

#!/usr/bin/perl
#
# Weather Underground PWS Upload Script for Lacrosse WS23xx weather stations over serial device
#
# Contributed by Kenneth Brown 12/2007
#
# Use settings below -- must edit idline, freq (to match cron frequency), and possibly serial
#
# Example cron entry to fire off uploads (if you install this script into /usr/local/bin)
# 0,10,20,30,40,50 * * * * /usr/local/bin/wu-upload.pl >> wu-log.log
#
# usage - cron this for at least a one minute run, my serial port takes between 5-10 seconds to report the values on average.#
# perl/c + modules installed on FC7 x86 w/ standard development libraries, tested on usb-serial connection
# GPL - original code, K Brown 11/30/07
#
# Updated by FlakRat
# - Changed from collecting local time to gmtime, that's apparently what WeatherUnderground is expecting
# - Added a $debug option that will provide more verbose logging
# - Modified verbose output to mask the password
# - Added 2 settings that will output a mysql insert statement to stdout, and a second that will insert the data
# into a mysql database. This has the advantage of importing into a local db and uploading to WeatherU during
# the same command execution

### these modules are on cpan.org :

use LWP::UserAgent;
use HTTP::Request;
use Device::LaCrosse::WS23xx;
use Mysql;

### define wu sites

my $wuurl = "http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?"; ## standard update ( deprecated)
my $rturl = "http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php?"; ## real-time update

### specify these items ->
##########################################
my $idline = "ID=&PASSWORD="; ### plaintext password over http - insecure !
my $freq = 300; ### update frequency in seconds
#my $serial = "/dev/ttyUSB0"; ### serial port, in this case a keyspan serial->usb
my $serial = "/dev/ttyS0"; ### serial port, in this case a keyspan serial->serial
##########################################

my $nosend = 0; ### 1 for testing, don't upload
my $verbose = 0; ### 1 for testing cmd line, or write to stdout for sending to a log
my $debug = 0; ### 1 for debugging cmd line more than just verbose, or write to stdout for sending to a log
my $mysqlout = 0; ### 1 to output to stdout a SQL INSERT statement, this can be piped into a file for future insertion into MySQL
my $mysqlinsert = 1; ### 1 to insert the data into MySQL

### MySQL Info
my $host = "localhost";
my $database = "weather";
my $tablename = "weather_history";
my $mysqluser = "";
my $mysqlpass = "";

### get the data
my $ws = Device::LaCrosse::WS23xx->new($serial)
or die "Cannot communicate with $serial: $!\n";
#my $ws = Device::LaCrosse::WS23xx->new($serial,trace => '/tmp/wu-upload.trace')
# or die "Cannot communicate with $serial: $!\n";

die "wireless connection failure\n" unless ( $ws->get("Outdoor_Temperature","F"));

#@then = localtime($ws->get("Date/Time_last_record_datetime"));
#@then = localtime(time);
# localtime returns CST on my system, we want UTC
@then = gmtime(time);

$dateutc=sprintf("%4d-%02d-%02d %02d:%02d:%02d",$then[5]+1900,$then[4]+1,$then[3],$then[2],$then[1],$then[0]);
print "dateutc: $dateutc\n" if $debug;
$dateutc = "&dateutc=$dateutc";
$winddir = $ws->get("Wind_Direction");
print "winddir: $winddir\n" if $debug;
$windspeedmph = $ws->get("Wind_Speed","mph");
#$windspeedmph = $ws->get("Wind_Speed");
print "windspeedmph: $windspeedmph\n" if $debug;
#$windgustmph = $ws->get("Wind_Gust","mph");
#print "windgustmph: $windgustmph\n" if $debug;
$tempf = $ws->get("Outdoor_Temperature","F");
print "tempf: $tempf\n" if $debug;
$rainin = $ws->get("Rain_1hour","in");
print "rainin: $rainin\n" if $debug;
$dailyrainin = $ws->get("Rain_24hour","in");
print "dailyrainin: $dailyrainin\n" if $debug;
$baromin = $ws->get("Absolute_Pressure","inHg");
print "baromin: $baromin\n" if $debug;
$dewptf = $ws->get("Dewpoint","F");
print "dewptf: $dewptf\n" if $debug;
$humidity = $ws->get("Outdoor_Humidity");
print "humidity: $humidity\n" if $debug;

# MySQL
my $timestamp_gmt = sprintf("%4d%02d%02d%02d%02d%02d",$then[5]+1900,$then[4]+1,$then[3],$then[2],$then[1],$then[0]);
my $rec_date = sprintf("%4d-%02d-%02d",$then[5]+1900,$then[4]+1,$then[3]);
my $rec_time = sprintf("%02d:%02d:%02d",$then[2],$then[1],$then[0]);
my $temp_in = $ws->get("Indoor_Temperature","F");
my $temp_out = $ws->get("Outdoor_Temperature","F");
my $dewpoint = $ws->get("Dewpoint","F");
my $rel_hum_in = $ws->get("Indoor_Humidity");
my $rel_hum_out = $ws->get("Outdoor_Humidity");
my $windspeed = $ws->get("Wind_Speed","mph");
my $wind_angle = "";
my $wind_direction = $ws->get("Wind_Direction");
my $wind_chill = $ws->get("Windchill","F");
my $rain_1h = $ws->get("Rain_1hour","in");
my $rain_24h = $ws->get("Rain_24hour","in");
my $rain_total = $ws->get("Rain_Total","in");
my $abs_pressure = $ws->get("Absolute_Pressure","inHg");
my $rel_pressure = $ws->get("Relative_Pressure","inHg");
my $tendency = $ws->get("Tendency");
my $forecast = $ws->get("Forecast");
my $myquery =
"INSERT INTO $tablename " .
"(timestamp_gmt,rec_date,rec_time,temp_in,temp_out,dewpoint,rel_hum_in,rel_hum_out,windspeed,wind_direction,wind_chill,rain_1h,rain_24h,rain_total,abs_pressure,rel_pressure,tendency,forecast) " .
"VALUES($timestamp_gmt,\"$rec_date\",\"$rec_time\",$temp_in,$temp_out,$dewpoint,$rel_hum_in,$rel_hum_out,$windspeed,$wind_direction,$wind_chill,$rain_1h,$rain_24h,$rain_total,$abs_pressure,$rel_pressure,\"$tendency\",\"$forecast\");";
print "$myquery\n" if $mysqlout;

if ($mysqlinsert) {
# PERL MYSQL CONNECT()
$connect = Mysql->connect($host, $database, $mysqluser, $mysqlpass);

# SELECT DB
$connect->selectdb($database);

# EXECUTE THE QUERY FUNCTION
$execute = $connect->query($myquery);
}

my $url =
$idline .
"&dateutc=$dateutc" .
"&winddir=$winddir" .
"&windspeedmph=$windspeedmph" .
"&tempf=$tempf" .
"&rainin=$rainin".
"&dailyrainin=$dailyrainin".
"&baromin=$baromin" .
"&dewptf=$dewptf" .
"&humidity=$humidity" .
"&softwaretype=customPerl&action=updateraw&realtime=1&rtfreq=$freq";

##### change above realtime var if you change the url, only the new one supports it

my $now = `date`;
chomp($now);
my $urlmask = "$url";
$urlmask =~ s/PASSWORD=[a-zA-Z0-9]*&/PASSWORD=xxxxxxxxxx&/;
print "$now: send $urlmask\n" if $verbose;

unless ( $nosend ) {
$ua = LWP::UserAgent->new;
$req = HTTP::Request->new(GET => "$rturl$url");
$resp = $ua->simple_request($req);
$response = $resp->content;
}

my $now = `date`;
chomp($now);
# print "$response\n" if $verbose;
print "$now: $response\n" if $verbose;
die "$response\n" unless ( $response =~ /success/i ) ;

exit;

###### data section contains constants,units for input and output

1;

=skip

Device::LaCrosse::WS23xx
get($;$) func param 1

wind_unit
LCD_contrast
Forecast
Tendency
Indoor_Temperature C
Min_Indoor_Temperature C
Max_Indoor_Temperature C
Min_Indoor_Temperature_datetime time_t
Max_Indoor_Temperature_datetime time_t
Low_Alarm_Indoor_Temperature C
High_Alarm_Indoor_Temperature C
Outdoor_Temperature C
Min_Outdoor_Temperature C
Max_Outdoor_Temperature C
Min_Outdoor_Temperature_datetime time_t
Max_Outdoor_Temperature_datetime time_t
Low_Alarm_Outdoor_Temperature C
High_Alarm_Outdoor_Temperature C
Windchill C
Min_Windchill C
Max_Windchill C
Min_Windchill_datetime time_t
Max_Windchill_datetime time_t
Low_Alarm_Windchill C
High_Alarm_Windchill C
Dewpoint C
Min_Dewpoint C
Max_Dewpoint C
Min_Dewpoint_datetime time_t
Max_Dewpoint_datetime time_t
Low_Alarm_Dewpoint C
High_Alarm_Dewpoint C
Indoor_Humidity %
Min_Indoor_Humidity %
Max_Indoor_Humidity %
Min_Indoor_Humidity_datetime time_t
Max_Indoor_Humidity_datetime time_t
Low_Alarm_Indoor_Humidity %
High_Alarm_Indoor_Humidity %
Outdoor_Humidity %
Min_Outdoor_Humidity %
Max_Outdoor_Humidity %
Min_Outdoor_Humidity_datetime time_t
Max_Outdoor_Humidity_datetime time_t
Low_Alarm_Outdoor_Humidity %
High_Alarm_Outdoor_Humidity %
Rain_24hour mm
Max_Rain_24hour mm
Max_Rain_24hour_datetime time_t
Rain_1hour mm
Max_Rain_1hour mm
Max_Rain_1hour_datetime time_t
Rain_Total mm
Rain_Total_datetime time_t
Min__wind m/s
Max__wind m/s
Min_Date/Time_wind_datetime time_t
Max_Date/Time_wind_datetime time_t
Wind_Speed m/s
Wind_Direction degrees
Low_wind_alarm_setting m/s
High_wind_alarm_setting m/s
Connection_Type
Countdown_time_to_next_datBinary seconds
Absolute_Pressure hPa
Relative_Pressure hPa
Pressure_Correction hPa
Min_Absolute_Pressure hPa
Min_Relative_Pressure hPa
Max_Absolute_Pressure hPa
Max_Relative_Pressure hPa
Min_Pressure_datetime time_t
Max_Pressure_datetime time_t
Low_Alarm_Pressure hPa
High_Alarm_Pressure hPa
History_saving_interval minutes
Countdown_to_next_saving minutes
Date/Time_last_record_datetime time_t
Pointer_to_last_written_Record
Number_of_Records

Only a few reasonable UNIT conversions are available

get($;$) function param 2:

From To
---- --
C F
hPa inHh, mmHg
m/s kph, mph, kt
mm in


Here is the URL used in the uploading (if you go here without parameters
you will get a brief usage):
http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php
http://rtupdate.wunderground.com/weatherstation/updateweatherstation.php ## real time updates ( preferred )

Here is the usage that will be displayed with blank parameters:
usage
action [action=updateraw]
ID [ID as registered by wunderground.com]
PASSWORD [PASSWORD registered with this ID]
dateutc - [YYYY-MM-DD HH:MM:SS (mysql format)]
winddir - [0-360]
windspeedmph - [mph]
windgustmph - [windgustmph ]
humidity - [%]
tempf - [temperature F]
rainin - [rain in (hourly)] -- the accumulated rainfall in the past 60 mins
dailyrainin - [rain so far today in localtime]
baromin - [barom in]
dewptf- [dewpoint F]
weather - [text] -- metar style (+RA)
clouds - [text] -- SKC, FEW, SCT, BKN, OVC
soiltempf - [temp F]
soilmoisture - [%]
leafwetness - [%]
solarradiation - [MJ/m^2]
UV - [index]
visibility - [nm]
softwaretype - [text] ie: vws or weatherdisplay
#realtime http only
realtime=1
rtfreq - frequency in seconds for nominal update


The MySQL table is defined below. I create a new database called "weather" and create the weather_history table in the new database.

DROP TABLE IF EXISTS `weather_history`;
CREATE TABLE `weather_history` (
`timestamp_gmt` bigint(14) NOT NULL default '0',
`rec_date` date NOT NULL default '0000-00-00',
`rec_time` time NOT NULL default '00:00:00',
`temp_in` decimal(3,1) NOT NULL default '0.0',
`temp_out` decimal(3,1) NOT NULL default '0.0',
`dewpoint` decimal(3,1) NOT NULL default '0.0',
`rel_hum_in` tinyint(3) NOT NULL default '0',
`rel_hum_out` tinyint(3) NOT NULL default '0',
`windspeed` decimal(3,1) NOT NULL default '0.0',
`wind_angle` decimal(3,1) NOT NULL default '0.0',
`wind_direction` char(3) NOT NULL default '',
`wind_chill` decimal(3,1) NOT NULL default '0.0',
`rain_1h` decimal(3,1) NOT NULL default '0.0',
`rain_24h` decimal(3,1) NOT NULL default '0.0',
`rain_total` decimal(4,1) NOT NULL default '0.0',
`abs_pressure` decimal(4,1) NOT NULL default '0.0',
`rel_pressure` decimal(4,1) NOT NULL default '0.0',
`tendency` varchar(7) NOT NULL default '',
`forecast` varchar(6) NOT NULL default '',
UNIQUE KEY `timestamp_gmt` (`timestamp_gmt`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Fedora 8 on Dell XPS m1330

Fedora 8 needs some essential tweaking to get it running the way I like it on my Dell XPS m1330. My laptop has the Intel 4965 AGN wifi card and the nVidia 8400M GS video card, both of which work right out of the box. I had originally gone cheap and got the Dell wifi card (a re-branded Brodcomm) and it required a hack to make it work (ndiswrapper) which I wasn't interested in:

Yum Repositories
Install the livna and Adobe repositories, the protect_base package etc...

$ sudo rpm -i http://rpm.livna.org/livna-release-8.rpm
$ sudo rpm -ivh http://linuxdownload.adobe.com/adobe-release/adobe-release-i386-1.0-1.noarch.rpm

$ sudo yum install yum-protectbase
$ sudo perl -pi -e "s/(\[.*\])/\1\nprotect=yes/" /etc/yum.repos.d/{fedora*,livna*}

$ sudo yum install yum-presto yumex k3b


For some strange reason, when ~/.kde is created (not sure if this is done during account creation or when k3b is installed), ownership on ~/.kde/shared is root:root. This prevents the k3b cd burner program from starting:
sudo chown -R flakrat:flakrat ~/.kde/shared

Nvidia Driver
Install the nVidia driver from the livna repository:

$ sudo yum install kmod-nvidia xorg-x11-drv-nvidia-libs-32bit

And add the following section (in bold) to /etc/X11/xorg.conf

----------------------------------------------------
Section "Files"
ModulePath "/usr/lib/xorg/modules/extensions/nvidia"
ModulePath "/usr/lib/xorg/modules"
EndSection

Section "Module"
Load "glx"
Load "extmod"
EndSection

Section "ServerFlags"
Option "AIGLX" "on"
EndSection
----------------------------------------------------

Synaptics Touch Pad
The Synaptics touch pad default settings have the annoying horizontal and vertical scroll areas enabled. Firefox makes this extra painful because any time you touch that area, Firefox wants to browse forward or back in history. The touch pad also registers taps while typing.

Edit /etc/X11/xorg.conf and modify the InputeDevice section as follows (more options are described via 'man synaptics':
----------------------------------------------------
Section "InputDevice"
Identifier "Synaptics"
Driver "synaptics"
Option "Device" "/dev/input/mice"
Option "Protocol" "auto-dev"
Option "Emulate3Buttons" "yes"
Option "SHMConfig" "on"
Option "VertScrollDelta" "0"
Option "HorizScrollDelta" "0"
EndSection

----------------------------------------------------

Now disable touchpad tapping while typing. This is done by adding a startup command.
  1. Open the sessions manager: System -> Preferences -> Personal -> Sessions
  2. With the Startup Programs tab open, click Add
  3. Type in the following:
  • Name: Disable Touchpad tapping while typing
  • Command: syndaemon -t -i 1 -d
  • Comment: Disables Touchpad tapping while typing
The -t only disables tapping and scrolling while typing, not mouse movements while the '-i 1' sets the idle time to 1 second and -d runs it as a daemon.

Wireless
Fedora 8 doesn't start NetworkManager by default, so this needs to be set to automatically started. The gnome-keyring will ask for your keyring password each time you attempt to connect to a network, this can be changed by using pam_keyring.

Also, uncheck "Activate on Boot" for both eth0 and wlan0 in system-config-network to prevent eth0 and wlan0 looking for ip addresses on boot. After you login, NetworkManager will handle this (resulting in much quicker bootups).

$ sudo /sbin/chkconfig NetworkManager on
$ sudo /sbin/service NetworkManager start

Install pam_keyring

$ sudo yum install pam_keyring

And edit the pamt.d/gdm file to look like (bold lines are the 2 that were added)

$ sudo vim /etc/pam.d/gdm

----------------------------------------------------
#%PAM-1.0
auth [success=done ignore=ignore default=bad] pam_selinux_permit.so
auth required pam_env.so
auth optional pam_keyring.so try_first_pass
auth include system-auth
auth optional pam_gnome_keyring.so
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session include system-auth
session required pam_loginuid.so
session optional pam_console.so
session required pam_selinux.so open
session optional pam_keyinit.so force revoke
session required pam_namespace.so
session optional pam_gnome_keyring.so auto_start
session optional pam_keyring.so
----------------------------------------------------

You might need to delete your keyring file and have it recreated (make sure to use the same password you use to login):
rm -rf ~/.gnome2/keyrings

Firefox Essential Addons
1. Tab Mix Plus (https://addons.mozilla.org/en-US/firefox/addon/1122)
2. Forecastfox Enhanced (https://addons.mozilla.org/en-US/firefox/addon/1978)
3. Download Statusbar (https://addons.mozilla.org/en-US/firefox/addon/26)
4. Goggle Toolbar (http://toolbar.google.com)
MSN Messenger
There's a great MSN Messenger clone for Linux called AMSN:

$ sudo yum install amsn

Open Office
Fedora 8 comes with Open Office 2, however I've found that at least one important Calc (Excel) feature is missing in the Fedora packaged version; the ability to select a sequence and then drag the sequence to other cells to have it continue. For example, say I want a column with compute-a, compute-b, compute-c ---> compute-z. In Excel you can create the first two entries and then drag the selection down and Excel will continue the sequence.

With Fedora 8's Open Office, this only appears to work for simple numeric sequences. Uninstalling this version and reinstalling from the official Open Office rpms enables this feature. Some on the Open Office message boards suggest that Red Hat may purposely disable certain features over fears of software patents. I'm not sure if this is true, but the feature certainly works with the official Open Office packages.

Download the OOo_2.4.0_LinuxIntel_install_wJRE_en-US.tar.gz file from http://download.openoffice.org/index.html and extract it. Run the setup script and you'll be Open Office'n in no time.
VirtualBox
Occasionally, I run across an application that will not work with Wine or natively in Fedora. One example, the CSTV website requires Internet Explorer and other components of Windows. This calls for a virtual machine. I use VMware Virtual Server and ESX Server at work, but figured at home I'd try out VirtualBox (recently purchased by Sun): http://www.virtualbox.org/

1. Download and install the rpm
sudo rpm -i VirtualBox-1.6.0_30421_fedora8-1.i586.rpm
2. Add your userid to the vboxusers group
sudo /usr/sbin/usermod -a -G vboxusers flakrat
3. Start the app, Applications -> System Tools -> Sun xVM VirtualBox (this doesn't appear on the menu until you reboot or possibly logout login)