freepbx is a great piece of software, and has a *lot* of powerful applications, such as followme, ring groups, queues, low cost routing, time conditions, etc. you can use voip trunks or telephony hardware (as quad-port analog cards or quad-port isdn cards, or simply an inexpensive HCF-PCI isdn card - 15 -)
we have a lot of pbx boxes powered by gentoo-hardened and freepbx plus a lot of our personalizations/plugins and we are very happy...
you can get it at
www.freepbx.org
(i suggest freepbx because asterisk is not easy to configure manually)
install is not hard, you can follow the setup instructions for CentOS (search "freepbx install centos" on google or
www.voip-info.org) except that you can't (obviouvsly) use yum to install the dependances
you'll need php, mysql, pear, asterisk, asterisk-addons, asterisk-sounds, lame, etc and some use-flags)
in a home/soho environment, we tested freepbx in a virtual machine running on vmware-server on a Pentium 4 HT machine without problems (of course without telephony hardware, only SIP phones/softphones)
you can buy voip phones for 60-80 . the linksys SPA941 is not expensive and is suitable for home/soho. (or use softphones as xten - available on windows and linux too)