Thursday, April 15, 2010

Hdhomerun_config scan of cable channels.

In my area, my local cable provider likes, on occassion, to change the frequency and/or program number for a channel.  Recently WRAZ, channel 13 stopped working.

When I ran the command


hdhomerun_config FFFFFFFF scan /tuner1 scan_output.log

it said something like this

SCANNING: 803000000 (us-bcast:69)
LOCK: none (ss=72 snq=0 seq=0)
SCANNING: 797000000 (us-bcast:68)
LOCK: none (ss=96 snq=0 seq=0)

us-bcast, I thought. That's wrong. When I did this last year, it selected us-cable channel map by default. I didn't have to change anything. I searched and searched the web for an answer. Finally I decided to hunt for the Silicondust config guide. I found the hdhomerun development guide. In there you can set the channelmap and change it from us-bcast to us-cable.


hdhomerun_config FFFFFFFF set /tuner1/channelmap us-cable

Now when I ran the "scan" command, I got the new frequency and program number for WRAZ.

I manually scan for channels instead of relying on mythtv's channel scanner cause I map my channels differently then the channel scanner would. I've used this config for years and would hate to jack it up.

Wednesday, February 24, 2010

Gentoo Shorewall Setup to Allow NFS

I built a PC that acts as a file sharing server and firewall. To protect it I run Shorewall. PC runs Gentoo Linux. It took me a while to, somewhat securely, setup NFS sharing from this PC to my inside net. Here a modified version of my config.

-- /etc/shorewall/rules ---
# Allow NFS
ACCEPT          loc      fw     tcp     111
ACCEPT          loc      fw     udp     111
ACCEPT          loc      fw     tcp     32767 
ACCEPT          loc      fw     udp     32767
ACCEPT          loc      fw     tcp     2049
ACCEPT          loc      fw     udp     2049

-- /etc/sysctl.conf ---
# TCP Port for lock manager
fs.nfs.nlm_tcpport = 32768
# UDP Port for lock manager
fs.nfs.nlm_udpport = 32768

-- /etc/conf.d/nfs ---

# Options to pass to rpc.mountd
# ex. OPTS_RPC_MOUNTD="-p 32767"
OPTS_RPC_MOUNTD="-p 32767"

# Options to pass to rpc.statd
# ex. OPTS_RPC_STATD="-p 32765 -o 32766"
OPTS_RPC_STATD="-p 32765 -o 32766 "


-- /etc/hosts.allow ---
portmap: 10.1.1.
mountd: 10.1.1.
nfsd:   10.1.1.
rquotad: 10.1.1.
statd: 10.1.1.
lockd: 10.1.1.



My mythweb configuration using lighttpd

Recently upgraded my production setup to the pre-release of mythtv 0.23. It kicks ass. I love the new features and the improved stability of the ffmpeg code. I upgraded from a custom build of 0.19 to 0.23 with few problems.
It took me a while to setup mythweb using lighttpd. I used the Gentoo wiki version and some tips from the mythtv alias to create mine.

# Tell lighttpd where mythweb directory is located
alias.url += (
    "/mythweb" => "/usr/share/mythweb"
)

# These modules are necessary
server.modules += ("mod_rewrite", "mod_setenv")


# Apply config if url contains mythweb. In my case I put mythweb under
# localhost/mythweb directory. 
$HTTP["url"] =~ "mythweb" {
    # Requiring authentication is a good idea if the server is publicly
    # accessible.  On a private server this section can be safely removed.
    auth.backend = "htdigest"
    auth.backend.htdigest.userfile = "location_of_htdigest_file"
    auth.require = (
        "/" => (
            "method"  => "digest",
            "realm"   => "MythTV",
            "require" => "valid-user"
        )
    )

    # Use fastcgi for the PHP parts
    fastcgi.server = (
        ".php" => ((
            "bin-path" => "/usr/bin/php-cgi",
            "socket"   => "/var/run/lighttpd/mythtv-php-fcgi.socket",
            "broken-scriptfilename" => "enable",
            "bin-environment" => (
                "db_server"   => "localhost",
                "db_name"     => "mythconverg",
                "db_login"    => "mythtv",
                "db_password" => "myhtv_db_password"
            )
        ))
    )

    # Environment variables for the Perl parts
    setenv.add-environment = (
        "db_server"   => "localhost",
        "db_name"     => "mythconverg",
        "db_login"    => "mythtv",
        "db_password" => "mythdb_password"
    )

    cgi.assign = (
        ".pl"  => "/usr/bin/perl"
    )

}

#Specify which IPs should lighttpd rewrite the url
#URL rewriting cannot be put in $HTTP['url']
# section, so I used the $HTTP['host'] option instead for url rewriting
# If I specify 10.1.1.1/mythweb, it should put 10.1.1.1/mythweb/mythweb.php
# If I specify 10.1.1.1/mythweb/tv/ it should rewrite to 10.1.1.1/mythweb/mythweb.php?tv

$HTTP["host"] =~ "10.1.1.1|127.0.0.1|localhost" {
   url.rewrite-once = (
 "^/mythweb/(css|data|images|js|themes|skins|[a-z_]+\.(php|pl)).*" => "$0",
        "^/mythweb/(pl(/.*)?)$" => "/mythweb/mythweb.pl/$1",
        "^/mythweb/(.+)$"       => "/mythweb/mythweb.php/$1",
        "^/mythweb/(.*)$"       => "/mythweb/mythweb.php"
    )

}

Saturday, February 20, 2010

Grub woes with my 2 TB disk

This is my first time using a 2 TB disk. After performing a Ubuntu Karmic Update on it, it upgraded the kernel and it asked "Configure GRUB using the package maintainers version". What made me do this I don't know, but I think this totally messed me up. It seemed like it deleted the bios partition.

When the disk booted, it printed the following on the screen and then just hung


GRUB GRUB GRUB GRUB


The fix for this whole mess, I loaded the Ubuntu bootup USB stick, and recreated the BIOS disk partition. After doing this, I executed /usr/sbin/grub-install /dev/sda, then everything started working.

LVM2 error: Cannot add 16th partition using pvcreate

Got a 2TB disk that has 48 raw partitions that I want to add to LVM.
When creating the partitions, I thought it wouldn't let me do more then 16 partitions. I was delighted to know that I could go beyond this 16 partition limitation. I guess maybe with new disks this is not a problem?? Don't know why.

Go this error message when I was in the process of upgrading my hard disk.


#sudo pvcreate /dev/sdc16
Device /dev/sdc16 not found (or ignored by filtering).


I reran the command with the "-vvv" option. It failed because of the following error message


/dev/sdc16: Skipping: Unrecognised LVM device type 259


After much web searching I found that this type is known as blkext

So I added the following line to lvm.conf

types = ['blkext', 50]


After doing this, I can now add all the remaining 40+ partitions to LVM.

This setup is for my mythtv production box. I use the same PC as a backend and frontend. Its not advisable I think but I have to do it this way. I use a Logical volume to store recordings. I found that my performance is greatly improved if the physical partitions are small. My thought is that this reduces seek time. I saw improvements after doing this when my PC is taping 2 HD shows and I'm watching a HD show at the same time. Maybe my theory may be wrong, but this works for me.

Monday, November 2, 2009

Convert an encoded URL query string into a nested hash in a Rails App

On my work with churchservicefinder.com, I wanted to parse out the following string, and produce a nested hash of the query part, just like rails does.

I search the web and found no answer. So I searched through the rails source code and found the answer in the Rack gem.

The command is Rack::Utils.parse_nested_query

Here is my example:

Loading development environment (Rails 2.3.4)
>> ab = "http://localhost:3000/churches/list/address/27713/5?fr[ed]=0&fr[ed]=1&fr[d]=0&fr[tz]=1&fr[et]=0&fr[et]=1&fr[tw]=0&fr[t_opr]=before&fr[t_opt(4i)]=9&fr[t_opt(5i)]=00&commit=Filter+Results"
=> "http://localhost:3000/churches/list/address/27713/5?fr[ed]=0&fr[ed]=1&fr[d]=0&fr[tz]=1&fr[et]=0&fr[et]=1&fr[tw]=0&fr[t_opr]=before&fr[t_opt(4i)]=9&fr[t_opt(5i)]=00&commit=Filter+Results"
>> c = URI.parse(ab)
=> #
>>
?> d = Rack::Utils.parse_nested_query(c.query)
=> {"commit"=>"Filter Results", "fr"=>{"t_opt(4i)"=>"9", "t_opt(5i)"=>"00", "tw"=>"0", "et"=>"1", "d"=>"0", "tz"=>"1", "t_opr"=>"before", "ed"=>"1"}}
>> d = Rack::Utils.parse_nested_query(c.query).symbolize_keys
=> {:commit=>"Filter Results", :fr=>{"t_opt(4i)"=>"9", "t_opt(5i)"=>"00", "tw"=>"0", "et"=>"1", "d"=>"0", "tz"=>"1", "t_opr"=>"before", "ed"=>"1"}}
>> e = d[:fr].symbolize_keys
=> {:tz=>"1", :d=>"0", :"t_opt(4i)"=>"9", :ed=>"1", :et=>"1", :"t_opt(5i)"=>"00", :tw=>"0", :t_opr=>"before"}

Saturday, October 3, 2009

Upgrading my 1st Gen Jailbroken IPhone to Version 3.1

Last week I followed the usual instructions to update the 1gen phone from 2.x to 3.1. I've listed the steps I followed. Details on each step can be easily found from web searches.

  • Backup the Iphone settings using Itunes. Jot down all the apps downloaded via 3rd party installers like Cydia. You'll have to install these later after the upgrade.
  • Download PwnageTool 3.1 via bittorrent
  • From Itunes download the 3.1 software update
  • Use PwnageTool expert mode to create a custom 3.1 .ipsw file. Keep all the default options, except make sure not to select Ivy app from the Custom Packages section. Failure to do this will mean Cydia Installer will fail to work.
  • Take out the SIM (not sure if this helps)
  • Put the IPhone in DFU Mode using PwnageTool
  • Install the custom 3.1 .ipsw file using Itunes
  • Restore the Iphone settings using Itunes
  • Reinstall apps installed via 3rd party installers like Cydia. My favourites are BossPrefs and OpenSSH.
Surfing the web using EDGE stopped working after this upgrade. Modifying the carrier.plist file on the Iphone reveals the configuration option to edit APN/Username/password information.