Set up an Asterisk box and connect it to a SIP trunking service (like Twilio or a bunch of other similar providers) to make and receive regular phone calls. Use the same provider to separately send and receive text messages (via the provider's web API). With a little elbow grease, you can replicate all the features of Google Voice using that (plus have a lot more possibilities for customization and automation).
The downside is that while you can get a basic set-up done over a weekend, it will probably take you much longer to actually get everything set up to your liking (and you'll probably need to do a lot of background reading and research just to figure out what you want to set up, how it all fits together, etc).
The downside is that while you can get a basic set-up done over a weekend, it will probably take you much longer to actually get everything set up to your liking (and you'll probably need to do a lot of background reading and research just to figure out what you want to set up, how it all fits together, etc).