Debian: fglrx-8.28.08

Just thought I’d throw this up.

I just switched over to kernel 2.6.17, and in doing so I needed to rebuild my fglrx kernel module to get hardware graphics going. Well the old package (8.24) would not compile under 2.6.17, so I did a little digging around the package page at and saw that there’s a 8.28.08.

Problem is the binary was only for 64bit. While my processor is 64 bit, I’m probably not going to move over to a 64 bit install until etch (especially considering it’ll require a complete fresh install).

So I got the 8.28.08 source. It consists of an archive and a diff patch. Well I’m still very much a linux neophyte and didn’t know how to proceed. That’s where this really great tutorial came in. It gave me everything I needed to know to get the actual .debs built. Beyond that it was simply following the fglrx-kernel-src package’s readme (using the module-assistant method) and wham bam thank you ma’am.

Got to love the resources at your fingertips. Even better, Murray’s has a date stamped with it, so if someone in five years finds it they’ll know that it may not be entirely accurate.

That was a problem I ran into recently in dealing with some other kernel modules, and something I run into all the time on google: old/obsolete data. Far too many posts, tutorials, etc. are undated. I believe Google should find some way to rectify this with their massive collection of what exists on the web.

Yes, it would mean more data pulled and stored for each site, but ultimately it would be useful data. Stamp it the first time you get it, and stamp it with the most recent pull. Maybe somehow allow users to tag certain pages as time-sensitive. Ultimately it’s good to have old data around provided that you know it’s old, and you can build a chain of events/data before and after it to give it context.

I’d also just like to say that I am loving linux. There are pains to making any change in your routine, but this has been an almost painless experience with no small amount of thanks due to the coders, maintainers, everyone who has ever filed a bug report or made a newsgroup, e-mail list, or web board post, and all of those friendly people on IRC that will make fun of you, and bitch at you, but above all still help you. linux for the world.


With PHP XScreensaver displays news

One of my favorite packages that spans the linux distro universe is XScreensaver. Indeed, any OS that uses X can make use of this screensaver package. In setting it up, I found myself drawn to a few specific screensavers that do more than eyecandy. They display text from 1) Host name and time, 2) Static text, 3) Text file, 4) program text output, or 5) URL. So I threw the google news RSS feed URL in and enjoyed seeing the latest news when my screensaver came on.

This provided a problem. Most RSS (and Google’s feed was no exception) provide only brief summaries of their items. I wanted full-text. So, to accomplish this I found the easiest (though not the best) way was to create a PHP script with the help of some prefab scripts (namely Magpie for the RSS and a script [link] to grab the html from each item).

While an imperfect solution, it gives the full stories; the combination of html stripping in PHP and XScreensaver’s HTML parser make it a pretty solid combination.


Please, if you have any suggestions/changes/other similar implementations to shout out about, drop a comment or an e-mail. I’d really like to see what else is out there.

And now the (shoddy) code (Formatted for publication using code2html):

 1 //Needed for magpie:
 2 define('MAGPIE_DIR', './magpierss/');
 3 require_once(MAGPIE_DIR.'');
 4 //From the grabber script:
 5 	$config['start_tag'] = "<p>"; // where you want to start grabbing
 6 	$config['end_tag']   = "</p>"; // where you want to stop grabbing
 7 	$config['show_tags'] = 0; // do you want the tags to be shown when you show the html? 1 = yes, 0 = no
 8 //from the magpie examples:
10 	//Modified to use a single rss URL
11 	$rss = fetch_rss('');
12 	//Modified to create an explicit array and shuffle it to get a random item.
13 	$rss_array = $rss->items;
14 	shuffle( $rss_array );
15 	foreach ( $rss_array as $key => $item )
16 	{
17 		if ($key > 1) {
18 			break;
19 		}
20 		$config['url'] = $rss_array[1]['link'];
21 		//From grabber script:
22 		$grab = new grabber;
23 		$grab->grabhtml( $config['url'], $config['start_tag'], $config['end_tag'] );
24 		if (!$grab->error) {
25 			foreach( $grab->html[0] as $html )
26 			{
27 				echo htmlspecialchars( $grab->strip( $html, $config['show_tags'], $config['start_tag'], $config['end_tag'] ) ) . "<br />";
28 			}
29 		}
30 	}
32 	//From grabber script:
33 	class grabber
34 	{
35 		var $error = '';
36 		var $html  = '';
38 		function grabhtml( $url, $start, $end )
39 		{
40 			$file = file_get_contents( $url );
42 			if( $file )
43 			{
44 				if( preg_match_all( "#$start(.*?)$end#s", $file, $match ) )
45 				{				
46 					$this->html = $match;
47 				}
48 				else
49 				{
50 					$this->error = "Tags cannot be found.";
51 				}
52 			}
53 			else
54 			{
55 				$this->error = "Site cannot be found!";
56 			}
57 		}
59 		function strip( $html, $show, $start, $end )
60 		{
61 			if( !$show )
62 			{
63 				$html = str_replace( $start, "", $html );
64 				$html = str_replace( $end, "", $html );
66 				//Added the PHP function strip_tags and strip any numeric html character references:
67 				$pattern = '/^\&\#(\d+);$/u';
68 				return preg_replace( $pattern, '', strip_tags( $html ) );
69 			}
70 			else
71 			{
72 				return $html;
73 			}
74 		}
75 	}


dpkg-buildpackage subversion tutorial

This is a brief writeup of how to take a package or version of package that’s not yet in incoming debian but is on the subversion. Please note it pertains to sid/unstable, though may be applicable for other versions.

First thing you want to do is hit up the above web-subversion browser and find the location of the package you want. For example I was annoyed that they merged the gtk2 engines into one package and thus broke the industrial cursor theme. Well, there is a new package being developed to put the industrial theme back in, but it’s not in incoming yet. You can see similar packages here in the “New and Byhand” listing.

So you find the package you want on the SVN, now you need to download the source:

svn co svn:// ~/new

svn co invokes the subversion client to connect to the address that follows: Use the directory that applies. In this case the theme is a member of gnome, so pkg-gnome, then almost always packages/unstable/package-you-want. then ~/new will download that source to ~[home]/new, a directory called ‘new’ in your home directory. You should be fine running this as a regular user.

Now, you have the source in ~/new, what’s next? You want to go ahead and build the source into a dpkg so it will properly register in your installation and can be updated seamlessly. So, go ahead and jump to ~/new, and then dpkg-buildpackage

It may report needed dependencies and/or give errors regarding a makefile. In that case you need to root up and install the needed packages, try looking in ~/new/debian/rules file for any package you need. In my case I had to install gnome-pkg-tools.

So root down and build it, don’t give up if it has errors, look around, inspect, try to determine any other packages that may be needed that could cause errors. You may have to resign eventually if it’s just a broken package, but generally you should be able to get it built. Once you’ve done that, hop back to ~/ and you should find your shiny new .deb to dpkg -i. And you’re done, buy yourself a beer and toast to the debian developers all over the world.

To recap:

1. Locate the package in upstream subversion repository. ie, industrial-cursor-theme
2. Construct your svn command to check out the code. ie, svn co svn:// ~/new
3. Build the package from source using dpkg-buildpackage. Simply cd to the appropriate location and dpkg-buildpackage
4. Read the output. If there’s an error, look at it, stare it down. If it says something about no such directory or file, what file, what directory? Maybe you’re missing a dependency. If it’s more complicated, talking about some error in code (ie, “foo.c:38 expected ‘)'”) you may be out of luck unless you can do some coding and fix it.
5. Assuming you had no (4) or you resolved it, you’ll have a .deb file containing your package. Just dpkg -i file.deb and it will install.

Please feel free to comment if you have any questions, suggestions, clarifying points, et cetera.