July 6th, 2012, 11:05 pm
I needed to obtain the firmware for my KWorld ATSC 115 which uses the nxt2004 demodulator. The kernel module saa7134 requires the nxt2004 firmware to operate correctly. In the past the process to obtain the firmware was easy, but now that avermedia-usa now longer makes available the driver, it was much harder to track down the need firmware file.
The problem:
m2n:~ $ /tmp/get_dvb_firmware nxt2004
--2012-07-06 22:51:22-- http://www.avermedia-usa.com/support/Drivers/AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip
Resolving www.avermedia-usa.com... 66.85.153.58
Connecting to www.avermedia-usa.com|66.85.153.58|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2012-07-06 22:51:22 ERROR 404: Not Found.
wget failed - unable to download firmware at /tmp/get_dvb_firmware line 662.
I figured I could just search for AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip or dvb-fe-nxt2004.fw and be in business. Unfortunately, it was not that easy as it took me over an hour to find the file.
I came across linux-firmware-nonfree_1.11_all.deb which contained nxt2004.fw
Since it was so hard to find the firmware file I decided to mirror it along with the original deb package that I got it from.
Files:
To Install:
wget http://pyther.net/files/firmware/nxt2004/dvb-fe-nxt2004.fw
cp dvb-fe-nxt2004.fw /lib/firmware
- reload appropriate module or reboot
- check out dmesg to confirm firmware was loaded
Hope this has helped someone…
March 26th, 2012, 1:14 am
Best practice states that passwords should contain letters (mixed case), numbers, and symbols, should be at least 8 characters in length, and should never be used twice. However, this isn’t very practical! How are you suppose to remember a different password for each site you have an account for?
I have been using 4 different password for my various accounts. This method has been working moderately well, but from a security standpoint, it’s suicide. I wanted to use a random password for each of my accounts. But, how would I ever remember all my passwords? A password manager, of course!
What I needed:
- Passwords stored in an encrypted file
- Master password to unlock the encrypted file
- View passwords from the cli/ssh
- Include additional information such as Security Questions and Answers
- Integrated support for Firefox
What I used…
Vim Outliner
Vim Outliner is an outline processor. A screenshot is worth a thousand words.

Encryption
By default when you save the file it will be a simple tab delimited text file. Vim, however, supports encryption. First, you need to set the encryption method by typing :setlocal cm=blowfish. If you want Blowfish to be the default encryption method for vim add the setlocal command to ~/.vimrc. Next, to encrypt the file, type :X. You will be prompted to set a password. Finally, save the file. When you open the file, you will be prompted for the password. If you fail to enter the right password you will see garbage characters.
Firefox Integration (Mozilla-gnome-keyring)
Mozilla-gnome-keyring allows Firefox to store passwords and form logins in gnome-keyring. Gnome-keyring is much more secure than the default password manager in Firefox. The mozilla keyring must be unlocked to add / retrieve passwords. You can define how long the keyring should remain unlocked for (never, 15 minutes, 60 minutes, etc…). On my desktop I unlock the keyring for 60 minutes, but on my laptop I only unlock it for 10. When logging into a site, Firefox still prompts to “Remember the Password”. If you let Firefox remember the password, the password automatically gets recorded in the keyring.
Conclusion
I have been using this solution for about a month and it has fit my needs perfectly. I updated most of my accounts so they each have an unique password such as Dmqngi8ZoPyO or XGVoBOmd7Gar. Passwords are being stored twice: in the password file and in gnome-keyring. Since mozilla-gnome-keyring takes care of adding the passwords into gnome-keyring when I login to a site, I only have to record/update my passwords in the encrypted text file. In the rare case that I’m not at my computer, and I need a password, I simply ssh into my server and open the password file in vim.
Although the password file and keyring is encrypted it is still subject to a brute force attack. Make sure to use a strong master password, the longer the better. I would suggest at least 20 characters. In 2009, it would take a super computer 1.5hrs to crack an 8 character (alpha only; lower-case) password, but it would take 631 Billion years to crack a 20 character (alpha only; lower-case) password. Remember, as computers advance these times will decrease. And of course, a key logger could compromise the master password nearly instantly.
http://www.lockdown.co.uk/?pg=combi&s=articles
January 16th, 2012, 3:40 pm

WM: Openbox
GTK: MurrinaGilouche
Not much has changed. Just Wallpaper and Terminal Colors
September 11th, 2011, 10:50 am
So for whatever reason you need to install Windows 7 from a flash drive that’s not a problem!
In Linux:
- Format flash drive:
mkfs.vfat -F 32 /dev/sdx
- Set Label:
mlabel -i /dev/sdd1 ::WIN7x64 (optional)
- Download Grub4Dos – http://download.gna.org/grub4dos/
unzip grub4dos-0.4.4.zip
- Run
./bootlace.com /dev/sdx
- Copy grldr and menu.lst to the root of the flash drive
- Add to menu.lst
title Install Windows 7
root (hd0,0)
chainloader (hd0,0)/bootmgr
- Copy Win 7 Install files to root of USB flash drive.
- Boot Flash Drive – Select Install Windows 7
TIP: To install any version of Windows 7 (Home Premium, Professional, Ultimate) remove ei.cfg from the sources directory. However, you still need a product key for the appropriate version.
In Windows:
- Format Drive as Fat32
- Copy Files from Install DVD to Flash drive
That’s it, boot from the flash drive you are all good.
Note: The windows disk formater writes code to the MBR and VBR. This obvisouly doesn’t happen in Linux therefore we need to use grub4dos as our bootloader.
December 19th, 2010, 12:00 pm
Why would I want to use Conditional Forwarding?
In my case, my local dns server has entries for local hostnames such as m2n.ion.lan, mongo.ion.lan, and tux.ion.lan. If I am using the vpn dns, then these address lookups would fail. By using Conditional Forwarding I can do all lookups locally, except for ones that match the remote top level domain (example.local). Anything that matches example.local would be forwarded to the remote dns server.
Problem:
- Connect to remote vpn server and use local DNS server
- Ping server.remote.local (remote FQDN) – fail
- Ping server.ion.lan (local FQDN) – success
Of course the remote ping fails because the local DNS server knows nothing about the remote domain. If I was to configure my machine to use the remote DNS server the opposite would happen. I would be able to ping server.remote.local, but a ping to server.ion.lan would fail.
Solution: Use dnsmasq with conditional forwarding to forward *.work.local requests to the remote dns server.
1. Install dnsmasq using your local package manager
2. Edit /etc/dnsmasq.conf
# Tells dnsmasq to forward anything with the domain of remote.local to dns server 10.25.11.2
server=/remote.local/10.25.11.2
# Listen to requests only coming from the local machine
listen-address=127.0.0.1
# Do not cache anything
# A decent dns server will already cache for your local network
cache-size=0
3. Edit /etc/resolv.conf
# Local LAN Domain
domain ion.lan
# local dnsmasq server
nameserver 127.0.0.1
# Your main dns server (dnsmasq will forward all requests to this server)
nameserver 10.20.1.1
4. Start dnsmasq
5. Test – ping a local server and remote server using the FQDN
All dns requests will be forwarded to 10.20.1.1 except any matching *.remote.local. server.remote.local will be forwarded to 10.25.11.2
December 13th, 2010, 11:16 pm
The OpenVPN server can pass DNS servers and a domain name to the client. This gives the benefit of using the remote dns servers for local hostname lookups.
Finding a good script that worked to do this provide difficult…
In server.conf add:
push "dhcp-option DOMAIN ion.lan"
push "dhcp-option DNS 10.25.11.2"
Then save this script on the client in same location as the client config
#!/bin/bash
case "$1" in
up)
mv /etc/resolv.conf /etc/resolv.conf.bak
echo "# Generated by OpenVPN Client UP Script" > /etc/resolv.conf
for opt in ${!foreign_option_*};
do
echo ${!opt} | sed -e 's/dhcp-option DOMAIN/domain/g' -e 's/dhcp-option DNS/nameserver/g' >> /etc/resolv.conf
done
;;
down)
mv /etc/resolv.conf.bak /etc/resolv.conf
;;
*)
echo "Pass either UP or DOWN"
;;
esac
In the client.conf add
script-security 2
up "./vpn_dns_update.sh up"
down "./vpn_dns_update.sh down"
Now connect and check /etc/resolv.conf to see if the VPN nameserver and domain is listed.
November 27th, 2010, 10:16 pm
Syslinux is a simple bootloader for fat, ext2/3/4, and brtfs.
Syslinux works in the following way (in a nutshell):
- MBR looks for the active partition (the one tagged as bootable)
- The MBR loads the code found on the partition’s boot sector and executes it
- This code then loads the rest of the boot loader code from /boot partition (file: ldlinux.sys)
- COM32 modules are loaded to provide extra functionality such as a graphical menu or chain loading
For a more detailed explanation: https://wiki.archlinux.org/index.php/Syslinux#Syslinux_Boot_Process
Sample configuration:
UI vesamenu.c32
DEFAULT arch
PROMPT 0
MENU TITLE Boot Menu
MENU BACKGROUND splash.png
TIMEOUT 100
MENU WIDTH 78
MENU MARGIN 4
MENU ROWS 5
MENU VSHIFT 10
MENU TIMEOUTROW 13
MENU TABMSGROW 11
MENU CMDLINEROW 11
MENU HELPMSGROW 16
MENU HELPMSGENDROW 29
# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu
MENU COLOR border 30;44 #40ffffff #a0000000 std
MENU COLOR title 1;36;44 #9033ccff #a0000000 std
MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
MENU COLOR unsel 37;44 #50ffffff #a0000000 std
MENU COLOR help 37;40 #c0ffffff #a0000000 std
MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
MENU COLOR msg07 37;40 #90ffffff #a0000000 std
MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
LABEL arch
MENU LABEL Arch Linux
LINUX /vmlinuz26
APPEND root=/dev/sda2 ro nomodeset
INITRD /kernel26.img
LABEL archfallback
MENU LABEL Arch Linux Fallback
LINUX /vmlinuz26
APPEND root=/dev/sda2 ro nomodeset
INITRD /kernel26-fallback.img
As you can see, the majority of the config contains MENU statements declaring colors and positing for the menu. If you removed all the MENU statements, the config would be less than 20 lines.
Screenshot:

I was lazy and took a screenshot of the Arch Linux installer menu. The configuration above generates the same menu, except there are only two boot choices, Arch Linux and Arch Linux Fallback.
The arch wiki has a whole lot of good information on configuring Syslinux. https://wiki.archlinux.org/index.php/Syslinux
August 31st, 2010, 7:30 pm
Well after some experimentation and playing around I have found some new information out regarding listening to iheartradio from the command line in Linux.
Newer versions of mplayer have support to play the rtmp:// protocol eliminating the need for rtmpdump.
Quick Recap on how to grab the rtmp:// url from an iheartradio stream
- Go to
http://p2.STATION_ID.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live; where station id is the call letters (ex: wtfx-fm)
- The attribute primary_location in <stream> contains the rtmp url
NOTE: The RTMP URL changes every 5-10 minutes! You must fetch the new url everytime.
To play the stream with mplayer:
mplayer "rtmp://cp21366.live.edgefcs.net/live/Lou_KY_WTFX-FM_OR..." -novideo
The -novideo option is very improtant otherwise mplayer will take 5+ minutes trying to find video for the stream (there is none).
This is all great, but this is a lot of work everytime you want to listen to a iheartradio stream. Therefore I have coded up a script.
The Script:
- Asks you for the station id (ex: wtfx-fm)
- Asks how long the stream should play for
- Check for song information every 10 seconds
- Not Perfect (Alpha Quality)
#!/usr/bin/env python
import subprocess
import time
import urllib2
import xml.etree.ElementTree as ET
import os
import datetime
#Location of Stream to be SAVED
DefaultStation="wtfx-fm"
def getXML():
data=urllib2.urlopen('http://p2.'+station+'.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live').read()
xml=ET.fromstring(data)
return xml
def getSongInfo():
xml=getXML()
artist=xml.find('ListenLiveInitialize/JustPlayed/song/artist').attrib['name']
title=xml.find('ListenLiveInitialize/JustPlayed/song/track').attrib['track_title']
return artist,title
while True:
station=raw_input("Enter Station ID [" + DefaultStation + "]: ")
if not station:
station=DefaultStation
try:
xml=getXML()
except urllib2.URLError:
print "Error - Invalid Station ID or Web Server Problem - Try Again"
else:
break
while True:
try:
TIME=int(raw_input("Time Stream will Play (in minutes): "))
except ValueError:
print "Error - Invalid Time - Try Again"
else:
break
rtmpurl=xml.find("ListenLiveInitialize/StreamInfo/stream").attrib['primary_location']
mp=subprocess.Popen(['/usr/bin/mplayer', rtmpurl, '-novideo', '-ao', 'alsa', '-quiet'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
mpPID=mp.pid
endTime = datetime.datetime.now() + datetime.timedelta(minutes=TIME)
OldSongInfo=[]
while datetime.datetime.now() < endTime:
SongInfo=getSongInfo()
if not SongInfo == OldSongInfo:
OldSongInfo = SongInfo
print SongInfo[0] + " - " + SongInfo[1]
time.sleep(5)
print("Stopping MPlayer...")
os.kill(mpPID, 2)
print "Done"
N900
I got this script working on the N900 by downloading the Maemo 5 SDK and compiling the mplayer binary from a recent svn snapshot. Luckily, I didn't run into any problems. Although mplayer works with the N900, without any patches, it is not flawless. For example, video gets jittery and skips when the backlight switches off. I would recommend leaving mplayer form extra installed and storing the mplayer you compiled in /opt. With audio playback I do not have any issues, especially with the iheartradio rtmp stream!
August 24th, 2010, 8:49 am
UPDATE: http://pyther.net/blog/index.php/2010/08/iheartradio-command-line-mplayer/
If you have ever listened to any Clear Channel FM radio station then I am sure you have heard the ads to listen to the station online through iheartradio. The only problem is that iheartradio is a bulky and slow flash application. On a powerful desktop that isn’t a huge issue, but with my N900 (600mhz cpu, 256MB Ram) it takes over 5 minutes to start streaming the radio station. Of course, iheartradio has an application for the iPod and Blackberry, but no app for the N900.
I went on a quest to figure out how to listen to iheartradio without the bulky flash application and this is what I found.
Step 1:
The url of the a stations stream is can be found in a XML file, at URL “http://p2.STATION_NAME.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live”
If I want to listen to The Fox (call letters: WTFX-FM), the URL of the XML would be “http://p2.wtfx-fm.ccomrcdn.com/player/player_dispatcher.html?section=radio&action=listen_live”
Open up the url in a web browser and grab the rtmp url which is between the <stream> tags. rtmp://cp21366.live.edgefcs.net/live/Lou_KY_WTFX-FM_OR@s7696?auth=daEcEbgdNb4a3bdcKdYcrcgcGara0c1c3cZ-bmC7wi-4q-LM3Y9_7nqEDps4CCulBtyp&aifp=1234&CHANNELID=981&CPROG=_&MARKET=LOUISVILLE-KY&REQUESTOR=WTFX-FM&SERVER_NAME=p2.wtfx-fm.ccomrcdn.com&SITE_ID=2038&STATION_ID=WTFX-FM&MNM=2&TYPEOFPLAY=0
Step 2:
Download and Install rtmpdump and mplayer
- Use your distro’s repositories
- rtmpdump is in AUR (archlinux)
Step 3:
Lastly open up the terminal and enter the following command: rtmpdump -r $RTMPURL -v | mplayer -
-r tells rtmpdump the url of the stream
-v tells rtmpdump that the stream is a live stream
The | (pipe) directs stdin to mplayer and the – after mplayer tells mplayer to read data from stdin
Example: rtmpdump -r "rtmp://cp21366.live.edgefcs.net/live/Lou_KY_WTFX-FM_OR@s7696?auth=daEcEbgdNb4a3bdcKdYcrcgcGara0c1c3cZ-bmC7wi-4q-LM3Y9_7nqEDps4CCulBtyp&aifp=1234&CHANNELID=981&CPROG=_&MARKET=LOUISVILLE-KY&REQUESTOR=WTFX-FM&SERVER_NAME=p2.wtfx-fm.ccomrcdn.com&SITE_ID=2038&STATION_ID=WTFX-FM&MNM=2&TYPEOFPLAY=0" -v | mplayer -
Things to watch out for:
- The RTMP url may change/expire. I have not been able to confirm this yet, but if the RTMP url changes you will simply need to open the url of the xml file (step 1) and copy the new rtmp url
Sources:
Maybe when I get some more time and become more ambitious I will write a small python wrapper that will extract the url from the xml file and start the stream.
May 4th, 2010, 9:47 am
Clean:

Busy:

WM: Openbox
GTK: MurrinaGilouche