Wednesday, October 24, 2007

Solving asterisk´s HDLC Abort Issue


Have you encountered the following msgs in your /var/log/asterisk/messages?

Oct 23 16:54:51 NOTICE[3345] chan_zap.c: PRI got event: HDLC Abort (6) on Primary D-channel of span 1
Oct 23 16:54:54 NOTICE[3345] chan_zap.c: PRI got event: HDLC Bad FCS (8) on Primary D-channel of span 1

if so... you've come to the right place. This is a very tricky one. There are mailing lists with tons of messages regarding this issue scattered throught the web, but none of the them actually follow throught what causes this and how to solve it.

The tricky part is that you system may probably seem to work, you can receive and place calls, but every now and then... all of the calls get dropped at the same time. "Must have been a quirk" you say to yourself even though you know such thing does not exist. Then a few minutes afterward... again. And that YELLOW alarm is now staring you in the eyes with that smug in his face....

PRI configuration is not for the faint of heart, that is for sure. But this message 99 times out of hundred is a harware incompatibility issue, not ISDN config.

High-Level Data Link Control or HDLC is a bit-oriented synchronous data link layer protocol, HDLC was introduced into Digium systems in order to allow data and voice to be used/routed in the same card. This is a good thing, the bad thing is that it relies on more on the system clock for timing. And new motherboards and kernels do not play nice with this settings and old telephony cards.

This may be caused due to IRQ interrupt sharing, APIC, HD params, but to put it plain and simple: YOUR TELEPHONY CARD DOES NOT LIKE YOUR MOTHERBOARD. I wish i had seen that sentence a few months ago.

This was exactly the case with my Proliant ML150 G3 server, which has an Intel Motherboard and specially an Intel Onboard ethernet card. I had a TE110p, which has been my workhorse in several other settings, so it was strange for me that it failed on me so often. As it turns out, Digium's TE110P is the picky girl type, it does not play well with others because of its chipset (TigerJet). Digium was aware of this, so they had to go back to the drawing board and came up with what they like to call "VoiceBus Technology" which basically works a whole lot better.

So here it is, plain and simple if you have a TE110P card having this problems, you MUST update your card to a newer version or get a motherboard that works with that TE110P and hold on to it, hard. They are getting harder to find by the minute. So the solution: Buy a TE120P with the new VoiceBus technology or just run to the Sangoma Camp.


I wish i had a magical bash script that solved this issue... but this time you must take the expensive road.

Luckily you may have found this blog very early in the guessing process of solving this issue and saved a ton of time. Trust me, i was seconds away of trying voodoo or any other sort of black magic.


Hope this helps!


Alex






Thursday, August 30, 2007

Flex: Checkboxes,repeaters,

Recently I've discovered this GREAT tool called Flex from Adobe, which solved one of my great problems: I can do a little bit of scripting but i am NO designer, so usually my GUIs end up giving a very bad impression of the overall app. Flex is here to save the day. Flex allows anyone to create streamlined, compatible GUIs in no time. But there is so much more to Flex than just GUIs. It uses both MXML and ActionScript so you have easy MXML interface creation along with a full Object Oriented language.

It is INCREDIBLE how all of us have being spoiled into stateful programming, I have had the hardest time trying to think stateless. So i have take baby steps.

This next Flex program is very simple, but it exemplifies some of Flex's main features.

So here it is:


xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="creationCompleteHandler();"
>


private function creationCompleteHandler():void
{
userRequest.send();
}
]]>


[Bindable]
var jailh:Array =new Array;
]]>


public function addToarray(Mymine:String):void{
var match:String = Mymine;
var isChecked:int = 0 ;
for (var i:int = 0; i < jailh.length; i++)
{
if (jailh[i] == match) {
dwindow.text="";
if (jailh.length == 1)
{
dwindow.text +="\n Will shift array"+ '\n'
jailh.shift();}
else
{
dwindow.text +="\n splice:\t"+i+','+(i+1)+'\n'
jailh.splice(i,i+1);
}
isChecked=1;

dwindow.text +="Deleted"+ '\n'
dwindow.text +="Current Length! " +String(jailh.length)+ '\n' ;
myarray.text=jailh.join("\n");
break;
}
}
if (isChecked==0){
jailh.push(Mymine);
dwindow.text="Current Length " +String(jailh.length);
myarray.text=jailh.join("\n");
}
}

]]>





































Basically this is a series of checkboxes that are pulled from an XML using an HTTPService call, then when checked they are added to an array... if the are checked again they are looked up for a match in the array, if there is a match the values are deleted.

Hopefully this will help someone, I know that if I had found such an example It would have saved me hours!


Thanks!

Alejandro

Friday, June 1, 2007

Finding out id of last inserted record using DBI+perl+MySQL

Countless times... and i mean COUNTLESS times i have encountered the pitfall of.... how to find out the value of the autoincrement field of an insert statement, or to put it in layman terms: How do i identify that last insert i did?

Well the answer had been smiling back at me the whole time. Those smart people who wrote the perl DBI::Mysql module had thought of that and came up with mysql_insertid function.

Let's get to it!

$sql="insert into sdata(somedata) values(\"somevalue\")";
$sth = $dbh->prepare($sql);
$sth->execute();
$id = $dbh->{ q{mysql_insertid}};
$sth->finish();


Now $id holds the value of Id (my autoincrement field in that table).

A thing of beauty!! Hope this helps! bye!



Saturday, April 7, 2007

Forgotten Basic Bash Tools (and some obscure tips)

Wow, i did not realize it had been so long since my last post. For all of you out there that check my blog: sorry. In my own behalf I was busy busy getting engaged and a couple of life altering ordeals. And since this is not related to Linux (Auuu Auuu! (....just watched 300, if you watched im sure you have laughed there!)) I will not extend myself there.

Ok, so I know that most people that want to become a Linux/*NIX/Darwin "expert" immediately dive into the bare bones essentials like how to change directory, rename files... and then crash course into some scripting program like php, ruby, or my weapon of choice perl, and that is that. But they miss a lot of the subtle and beautiful programs included with most distros. Some of them have been around since there very first days of UNIX like, cat or tail and some made it later. But they are powerful and elegant, just try doing some in front of your geek friends, you will earn their awe and probably some resentment along the way.

Lets get started:

tac: the evil twin brother of cat (which stands for concatenate, not the sneaky feline), and it does exactly what cat does (concatenate and print files to standard output) but with a twist. It does it in reverse. So by now like in a M. Night Shyamalan movie, things are all falling into place in your head. Just like cat, tac is the perfect UNIX philosophy example: It does ONE thing, and it does it well.

Ex:

[alex@galapago ~]$cat hello.txt
Hello
my
friends!

[alex@galapago ~]$tac hello.txt
friends!
my
Hello

Simple, elegant and functional, it has a couple of useful switches there. Mix it up with other bash commands, throw in some pipes and voilá you've got yourself a masterpiece.


split : Based on actual events-- Not so long ago i was asked to split a file into several files every million lines, and I thought to myself, "This is an easy job for perl" and indeed it was. Later on i found that i had missed this beautiful command named split whose function in to do exactly that (in less time)

For example

alex@alex-desktop:~/numbers$ cat numbers.txt
one
two
three
four
five
six

And we wish to split in files with three lines:

alex@alex-desktop:~/numbers$ split -l 3 numbers.txt div

div here repre

alex@alex-desktop:~/numbers$ ls
divaa divab numbers.txt
alex@alex-desktop:~/numbers$ cat divaa
one
two
three











Wednesday, February 14, 2007

Using Bluetooth with Nokia 6230i and Fedora


Sometimes I think about all those people carrying around this cool mobiles in their pockets, just because they are the newest ones, or have a nicer color... And most of the time much of the neatest features are just ignored. Take bluetooth for example. Most people don't know even what this is, or they just use it to exchange that funny ringtone... or that naughty wallpaper. But Bluetooth gives you so much more. Other good example is SyncML... and we could go on like this for ages.. as mobiles get more more advanced by the hour.

But right now we are here to create a simple connection with your distinguished, trustworthy and able Linux box and that sexy mobile of yours.

I am using a Bluetooth USB Dongle from D-link, and it works like a champ.

Just plug it into the linux box, and then type (in Fedora...)

#service bluetooth start

So the scenerario is set, lets move on.

Let's see if the dongle was correctly recognized:
#hciconfig -a
hci0: Type: USB
BD Address: 00:15:E9:69:F4:78 ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN
RX bytes:8070 acl:192 sco:0 events:481 errors:0
TX bytes:6708 acl:182 sco:0 commands:169 errors:0
Features: 0xff 0xff 0x0f 0x00 0x00 0x00 0x00 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: ACCEPT MASTER
Name: 'Linux BOX'
Class: 0x000100
Service Classes: Unspecified
Device Class: Computer, Uncategorized
HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d
Manufacturer: Cambridge Silicon Radio (10)

everything looks nice.


Now be sure to turn on your mobile's bluetooth radio.

lets see if linux can find the device:

#hcitool scan
Scanning ...
00:15:E9:69:F4:78 Alex's Nokia

That strange HEX address is the unique identifier of your mobile. Think of it as your mobile's bluetooth radio MAC address.

lets ping the mobile from the server

# l2ping 00:E0:03:58:3F:35
Ping: 00:E0:03:58:3F:35 from 00:15:E9:69:F4:78 (data size 20) ...
0 bytes from 00:E0:03:58:3F:35 id 0 time 51.84ms
0 bytes from 00:E0:03:58:3F:35 id 1 time 40.27ms
0 bytes from 00:E0:03:58:3F:35 id 2 time 27.24ms
3 sent, 3 received, 0% loss

pretty neat huh? Ok so now we are sure that they can see each other... lets get them to talk\

# rfcomm connect rfcomm0 00:E0:03:58:3F:35
Connected /dev/rfcomm0 to 00:E0:03:58:3F:35 on channel 1
Press CTRL-C for hangup


That is it!!! now your mobile and computer with a little tweaking is able to exchange contacts.. files, connect to the internet using the mobile's GPRS service, send receive SMS, and so on... but we will get into this in some other post!


Good luck!!






Friday, February 9, 2007

Finding large files in a linux filesystem

This is a small, "note to self" kind of post. Sometimes it is useful to know what files are taking up the most space in our filesystem. Very useful under stressful times like when your server has a 100% filled partition. It can be done this way:

find / -size +10240000c -exec du -h {} \;

This will find files larger than 10Megs.

Now i won't forget next time!!!

Hope this is useful for you as well!

Thursday, February 8, 2007

Hamachi!


Every few months (even years) i stumble into this piec
e of software that makes me feel like i'm receiving my Atari 2600 for Xmas all over again. HAMACHI falls just right under that category. Unlike its distant cousin Tamaguchi it is not a little device with an animation that you have to feed, take care and play with...

Quoting their website: "Hamachi gives you a LAN ove
r the internet." As easy as that. And what I like about it the most is that it plays well with others. It runs in Windows, Mac OS X, and Linux. What more can you ask for? (Ok,ok.ok... i can already hear some BSD, Solaris, Palm OS people shouting...).


Check out my current setup:


No matter where i am with my laptop... i can always reach all of my files, even from the Mac G5! So far so good. I've been testing and the speed is not that bad (no Formula 1 trophies either...).

Windows installation is pretty straight forward... so lets focus on getting hamachi running on the linux box.

You may download the package from here

As of this posting the version for linux file is hamachi-0.9.9.9-20-lnx.tar.gz

let's play:

#tar -xvzf hamachi-0.9.9.9-20-lnx.tar.gz
# cd hamachi*
#make install
#tuncfg (for MacOS users... there is an extra step involved so you can get a tun device in Darwin)
# hamachi-init
Initializing Hamachi configuration (/root/.hamachi). Please wait ..

generating 2048-bit RSA keypair .. ok
making /root/.hamachi directory .. ok
saving /root/.hamachi/client.pub .. ok
saving /root/.hamachi/client.pri .. ok
saving /root/.hamachi/state .. ok

Authentication information has been created. Hamachi can now be started with
'hamachi start' command and then brought online with 'hamachi login'.

# hamachi start

# hamachi login
Logging in ....>....... ok (this is were you connect to the hamachi network)


Now you will need to create your own network, in this example im creating the "mytestnetwork1" network with a password of "mypassword". (I've been blessed with creativity this morning).

#hamachi create mytestnetwork1 mypassword

Ok, so we should name our linux server something, lets call it CONAN (the comedian, not the barbarian).
#hamachi set-nick CONAN
#hamachi go-online mytestnetwork1
password:*******

lets get everyone names...

#hamachi get-nicks
#hamachi list

There you will notice that you get a 5.x.x.x IP address... that is your address on your Hamachi network. Now you can use that IP to use shared drives... get webpages... whatever you want from your network!


Cool huh? try it out!

Wednesday, January 24, 2007

Creating FC5 a rescue disk in USB stick from windows


All of us who love linux have this little pieces of it we do not dare to try, maybe we think we don't need to know how it is done, maybe it just looks too complicated to be bothered, maybe we are rushing to the nice, more exciting parts of our new Linux book and ALWAYS skip this one part. Why.. we will never need it?... WRONG! sooner or later we will need to know that piece of info.

In my particular case we are talking about creating a Rescue/Boot disc for linux (Fedora Core 5).

Why would you ever need to know this? I can think many scenarios. USB are for more portable and withstand more heavy usage than CDs and DVDs, so they are more likely to be ready when disaster strikes. Not all servers/desktops/laptops have CD-ROMs, even less likely they will have DVD-ROM drive. Normally I use a rescueCD+Net install from DVD. It is a fact that the more media is required on an installation, more things you have to go sour. (that LAST 4th CD of Fedora has a tiny scratch... and there goes those 30 mins of your life...).

So let's get to it:
In your distro you will find : \Images\bootdisk.img this contains ALL the necessary files required for the rescue media to be booted. Sadly it is not as easy as coying the file to the USB Drive. But it is not that hard either.

If you are on linux you could just do this:

dd if=diskboot.img of=/dev/sda1

et voilá! but as Mr. Murphy will have it, the server that is down will be for sure the ONLY one with linux and a DVD.

So, in your laptop you have windows installed, and a DVD ROM... (yes you know you have windows there!! admit it!)

Normally, you can read around and they will suggest that you use the rawrite utility, or it nice GUI cousin rawwritewin, but sadly those two
will only write to a Floppy Drive or will complain that they have no info in the sectors of that drive. So we are in trouble. Please stand up, and cheer our saviour:


dd for win which you can find here

Go ahead, download that and extract it to a directory, after that just type:

dd if=D:\diskboot.img of=\\.\E:

where D drive is your DVD-ROM and E: is your USB stick.

And you are ready.

Remember not all BIOS are created equal, be sure to check the boot order and see if USB is available at all. Else just like me you would have just wasted some time creating your own
USB FC5 rescue disk!!

Hope this help!! See ya!












Sunday, January 21, 2007

I deleted zlib in a live environment!

I really don't know what the BIG deal about RHEL is; if anything i have found it to be annoying, HARD to upgrade (rpms are scarce). Definitively CentOS is wiser choice. Try upgrading to PHP 5.2 on RHEL 4! now... just for kicks try the upgrade on a X86_64 platform. I have been going crazy about this. Some good soul posted his experiences on a 686 platform:

http://www.jasonlitka.com/2006/11/30/upgrading-php-520-rhel-centos/


I have being trying to get all the dependencies for X86_64 and it is very very hard. While i was going crazy about getting a succesful spec build:

rpmbuild -bb php.sec

I get many many many dependencies issues (sqlite,mysql-dev,libpng,etc,etc,etc,etc) I bump that it is complaing about a libc flag not being there "-fPIC", I start searching the web for references for this happening to someone else, and i find several places pointing to a solution by simply updating the zlib libraries.


Never I suspected i was about to venture into dark, scary, uncharted territory. So being as naive as i can i write

rpm -e --nodeps zlib(dont remember the full name)


Let the fun begin:
First i notice that wget, ssh, up2date,rpm or mostly anything else for that matter is working anymore, uh oh. Let me say it again: Uh oh.

Funny thing, this is a colocation server. I am i a different Country, i have no access to the server. I call up the people at The Planet, they suggest i get an OS reload. NOT a choice, there is a lot of valuable data there that would take DAYS to restore since i would have to upload everything again. (whole story being that i HAD to build the .rpm there since there is no php 5.2 rpm for RHEL and i dont have access to another server with the same characteristics).




I noticed that ftp is about the only service currently working. So i went to grab zlib at

http://www.zlib.net/

Since gunzip or tar are not working i had to extract the files in some other server and upload the files already extracted.

After that i cross my fingers and write

./configure

Nope, not working so i read further and notice that i should write for my system

./configure --shared --lib=/usr/lib64


I got away with this one easily... scared but no harm done.

I hope this helps someone. I learned that if you get a collocation server... do yourself a favor and get NAS.


Bye!