Using the Dvorak layout in FreeBSD
Those of us that type a lot will eventually begin to feel the effects of such an activity manifest as some sort of pain, most likely carpal tunnel syndrome. As somebody who has touch typed for the better part of 15 years, I definitely feel the effects every now and then. Several years ago I heard of an alternate keyboard layout called "Dvorak" that allegedly helped reduce the stress on your hands, but could potentially give you a free speed boost. I won't go into the nitty-gritty details, but encourage you to take a look at the Wikipedia article.
There are two ways to use the Dvorak layout: in the console and in Xorg. They're both quite easy to switch to as well.
To switch over your console, you can either run the sysinstall program as root or just manually specify the keymap using kbdcontrol -l "us.dvorak". Using sysinstall ensures that the Dvorak layout is retained after a reboot, whereas the kbdcontrol command does not. Switching back is as simple as using kbdcontrol -l "us" and removing the entry from rc.conf if you used sysinstall.
For Xorg users, simply open a terminal and run the following to toggle back and forth:
setxkbmap dvorak setxkbmap us
If you are using a desktop environment such as Gnome or KDE, you should be able to change the layout using the appropriate control panel.
I hope to work my way up to my QWERTY speed fairly quickly and be proficient in both layouts, but I'll certainly need to practice. For the record, this post took about 40 minutes to compose with my layout switched to Dvorak...
Updating a ZFS on Root installation in FreeBSD 8
Ever since ZFS became production ready on FreeBSD 8 (and backported to 7), I've been itching to switch to using it and getting rid of UFS. For one, UFS is OLD. It was first used in 4.2BSD if that gives any indication. The most salient problem with UFS is the lack of real journaling. True, you have the soft-updates feature, but soft-updates are an alternative to journaling. This may not be a problem for users with older hardware and smaller hard disks, but with today's multi-terabyte drives, a power failure or system crash can lead to painfully long waits as fsck verifies the consistency of your file system.
To that end, I followed this handy guide to installing a FreeBSD system on a pure ZFS-only setup. Note that you'll end up with a system with no traces of UFS whatsoever, meaning you have to use the ZFS bootloader and can't dual boot anymore. If that's not to your liking, have a look at the index of ZFS on root guides. If you need to dual boot, you'll want to follow one of the MBR guides. For my needs, if I find myself needing to boot to another operating system, I simply hit F12 when my system is performing a POST test and choose a different drive to boot to. It's simple and separates your operating systems so they don't affect one another. Another alternative is to use virtualization if your needs aren't too demanding.
One thing none of the ZFS on root guides show you is also one of the most important: how to update and rebuild your system! If you're a developer you probably already know how to do this, but for the rest of us, it's important to know how to properly update your system when needed.
To begin, you'll want to sync your source tree. Instructions for that are located in the handbook, but it really boils down to using csup to synchronize source from a cvsup server to your local machine. If you do anything that requires building a kernel module, you're probably familiar with this. With your source tree synchronized to your desired version of FreeBSD, you can follow the the handbook guide to rebuilding world.
Once you have installed the kernel, reboot into single user mode as the guide tells you. Issue the "mount" command. You'll notice that no filesystems are mounted except for devfs and the root ZFS filesystem you marked as legacy. The handbook tells you to use "mount -a -t ufs" but obviously this won't work since we have banished UFS from our FreeBSD box. To mount all the ZFS mountpoints you have, simply use "zfs mount -a". This should mount everything except for / (root) as read-write. To enable a writable file system root, use "mount -uw /" and then "mount -a" to mount anything else. The "-uw" option unsets any mount options and then sets the write bit so you can write to that mount point. At this point you should be able to use mergmaster and installworld to finish rebuilding your system. One important task you must do before rebooting into your updated system is to install updated boot code. This is done with the following command after installing the new world: "gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 disk" where disk is the name of the drive you installed to (usually ad0). With this, you should have an updated system with ZFS as your file system!
Enjoy!
How to recover a corrupted password database in FreeBSD
Recently I was mucking around with some stuff on my FreeBSD laptop (7.2) and caused my system to lock up completely. Not thinking much of it, I rebooted the system and everything seemed normal. I went about my business and needed to install some software. I tried to 'su' on the system (sudo wasn't yet installed) and got the message "su: who are you?". Ugh... I took a look at my '/etc/passwd' database and found that it contained parts of '/etc/resolv.conf' and a lot of gibberish. Looks like UFS's lack of journaling struck again.
Just for grins, I tried to change my password using the 'passwd' command and got the same message. After a few Google searches, I ran across the pwd_mkdb command. The man page for this command points you towards '/etc/master.passwd' but again, in my case, it was corrupted. Ugh.
Since I'm an avid user of FreeBSD, I have plenty of systems from which I can copy the password database. So, fingers crossed, I booted my laptop into single user mode and copied the master password database over on a USB flash drive. I then issued the '#pwd_mkdb /etc/master.passwd' command (I copied over the corrupted master password database) and it didn't return any errors. Fingers still crossed, I rebooted and was pleasantly surprised to no longer see all the "unknown user" messages. After successfully logging in as root, I was able to change my passwords back to what they were using the regular 'passwd' command. Whew!
A few updates…
No, I didn't fall off a cliff. Been busy with lots of stuff:
- Passed the CCDP ARCH test and became a CCDP on April 25th!
- Lots of house remodeling projects
- Working on my final Cisco test (for now : ), the MPLS exam
- Various other sundries
On the FreeBSD front, I found an old 250GB SATA drive and installed it in my current rig as the only drive (just to be sure I don't screw something up). Not surprisingly, rebuilding the kernel and world with the latest 7.2 Release is quite snappy as compared to the Thinkpad T40. I was pleased that the Nvidia driver in ports worked without a hitch though it has no 3D acceleration whatsoever. For that you need Nouveau. I went my usual install route: install the minimal FreeBSD distribution, build world and build kernel, build Xorg from ports (including mouse, keyboard, Nvidia driver, and vesa driver for backup) with HAL support, build some sort of window manager (Fluxbox is my current favorite), install a shell (I'm torn between bash and zsh), and install Firefox 3. The entire process took about an hour and a half.
All of my hardware either worked out of the box or worked after a few tweaks but I used the i386 version of FreeBSD, not the AMD64 version. Before I built HAL, I had to use a PS/2 keyboard in order to actually install. Either I missed something or USB hotplug support isn't there out of the box and needs to be added to rc.conf. I was pleasantly surprised to see that my Blackberry was recognized when I plugged it in. It didn't automount or anything but it was neat to see it get recognized. I've yet to get it to work, but there is a ports version of barry available. Barry is a little rough around the edges but I was able to back up my Blackberry Curve 8320 to my Linux box with it.
It seems like FreeBSD is maturing and quite rapidly. Now that VirtualBox is coming for FreeBSD, the only barrier left is either getting a native 64-bit Flash plugin/player or for Gnash to mature rapidly. I tried Gnash on i386 FreeBSD and it works, but only part of the time.
I still watch with a bit of wonder and amazement at the effort that goes into an Open Source operating system and applications. That the developers can get their projects working with little or no support from hardware vendors is nothing short of amazing.
FreeBSD 7 on a Thinkpad T40 update
Not too long ago I wrote a how-to article on how to get FreeBSD 7.0 working on my IBM Thinkpad T40. Among other things, I omitted a section on getting proper video drivers working. The graphics chip is an ATI RV250 (Mobility 9000). This means the driver you should use is the 'radeon' driver. Use 'pciconf -lv |grep ATI' to see which chip you've got. After toiling a bit with it, I figured out how to get the Open Source ATI drivers working.
Because I want to generally keep my systems pretty current, I recently installed FreeBSD 7.1 on my T40. It's important to know that the FreeBSD project generally breaks up development into three separate releases, namely CURRENT, STABLE, and RELEASE, in order of most bleeding edge to most stable. After building Xorg 1.6.0, I tried to start an X session just to see if I would get the ugly TWM desktop. To my surprise I got just a black screen but that was it. Even more surprising was that the usual "three finger salute" (ctrl + alt + backspace) didn't kill my X session. I then hit 'alt + F2' to log into another vty and manually kill off X. Here's where the fun began. It killed more than X; it locked my entire machine up. I continued futzing with my xorg.conf, kernel modules, and locking my system up for a good hour. I then threw in the towel and wound up asking a friend who's a FreeBSD developer WTF was going on. I learned a few interesting facts:
- The DRM code in 7.1 was more than 2 years old
- It is not necessary to manually load or pre-load any kernel modules for video
- X.org should work well with ATI graphics cards (but the amd64 release may not work) since the ATI driver model has had substantial structural changes to it.
On the first point, there's two ways around the old code: Either download/burn/install the FreeBSD 7.2 release candidate or rebuild world. Since I'm a glutton for punishment, I decided to rebuild world. It's not actually that hard, just time consuming. Use the 'csup' utility to grab the entire CVS source tree from your nearest csup server and follow the directions listed here to rebuild your system using the RELENG_7 tree.
The second point is easy enough. There's no need to add anything to your /boot/loader.conf file in order to get X working. X.org will load any necessary kernel modules when you type 'startx'. As an interesting aside, I actually locked my system up when attempting the unload the radeon.ko kernel module when I had learned that preloading isn't necessary. Doh!
Once you've rebuilt your system and are running 7.2-STABLE, it probably wouldn't be a bad idea to rebuild your installed ports. This isn't necessary per se since X.org should work without even building a config file, but it is a good step, just to make sure everything is up to date. I use the portupgrade utility located in /usr/ports/ports-mgmt/ with the following: portupgrade -aRr. That should upgrade all outdated ports recursively as well as recursively rebuilding dependencies.
I'll expand on the last point a bit. ATI has been much more generous with contributing documentation to the Open Source community than Nvidia. In fact, Nvidia hasn't contributed anything other than a proprietary driver for Linux and FreeBSD, though there's a project called Nouveau which aims to build an Open Source Nvidia driver. Because of this, FreeBSD has an Open Source ATI driver (/usr/ports/x11-drivers/xf86-video-radeonhd and usr/ports/x11-drivers/xf86-video-ati) and using the old proprietary fglrx driver is no longer necessary. There's one hiccup to this though. The driver has to be re-worked every time a new ATI chip comes out. To solve this, ATI is moving towards the same unified driver model Nvidia has used for years and taking it a step further. They now have an Open Source BIOS abstraction layer called ATOMBios. The idea is to make it easier to more rapidly deploy drivers for new graphics cards. Read all about that in this article. Bravo ATI!
By the time you finish reading this, your ports should be up to date and you should be able to use hardware accelerated ATI drivers on your Thinkpad. I'm running XFCE4 on my Thinkpad and it's causing me to reevaluate the old "FreeBSD vs. Linux" question. Maybe I'll spend a little more time working on the other parts that I overlooked in my article.
Enjoy!
The long goodbye…
As anyone who has known me knows, I'm definitely a Mac user. I've used Apple hardware on and off since the Apple II days. The first Mac I actually bought, however, was a G4 tower. Most of the time before that was spent hating Apple and suffering in a Windows world.
This went on until a good friend took the time to show me what his G3 could actually do. Of course, back then, Mac OS 8 was the de facto OS and Mac OS X was still a research project. I initially resisted but started liking what I saw enough to say "I want one!". It was then that I bought my first Macintosh, a 400 Mhz PowerPC G4 PowerMac. It came with 64 MB of RAM, an 2x AGP ATI video card with 16 MB of RAM and a whopping 20 GB hard drive. It also came with the venerable 400 MHz PowerPC 7400 (G4) processor with the AltiVec "Velocity Engine" vector processing unit and 1 MB of backside cache. This CPU smoked any Intel Pentium 3 at the time and was classified by the U.S. Government as a supercomputer since it was capable of at least a Gigaflop of performance. Another nifty component this machine has is a gigabit Ethernet interface. No other PC I can remember at that time (we're talking late 1999, early 2000) had that and most didn't have an Ethernet interface (56k was still the bomb-diggity). Needless to say, for $1599, this was a very nice Macintosh.
I endured many months of ridicule but really enjoyed my G4. One very interesting point was that the Playstation emulator, Connectix Virtual Game Station, actually ran Playstation games on my G4 faster than a Playstation! I continued to love my G4 until I decided it was time to go back to school.
At that point, I got my first Apple notebook, the Powerbook G4 Titanium 867. It basically had double the specs of the PowerMac. I wound up selling my PowerMac to a friend that needed a new machine which I thoroughly regret to this day. I had been running Mac OS X 10.0, then 10.1 on the PowerMac with Mac OS 9 "Classic" alongside it. The PowerBook came with Mac OS X 10.2 "Jaguar" and it was a rather large bump in speed from earlier releases as well as actually having software to use.
Shortly before graduation in 2004 I bought a shiny new PowerMac G5 (Dual 2.0) as well as a 23" Apple flat panel (graduation present to myself of course!). It had easily six to ten times the speed of my notebook and is what I currently still have. Not planning on selling it and making the same mistake twice!
Since that time, a subtle but continuous shift has been going on with the direction Apple has taken its business. Back when Mac OS X debuted, Apple was very gung-ho about it's core business: selling Macs. It also had a miniscule share of the overall PC market, so it was still playing catch up after the success of the iMac line. Development of new hardware and Mac OS X happened at a frenzied pace, as evidenced by all the announcements of cool new technology. This continued to happen until around 2006, when the iPod really started becoming a large part of Apple's revenue. Then the iPhone debuted in 2007. And there was the Apple TV. Suddenly, Apple is no longer a PC maker and is instead a consumer electronics maker. They even dropped "Computer" from their name.
I started noticing many changes to what were Apple's core business: Macs and Mac OS X. Now there's nothing but tie-ins to the iTunes store or some other non-PC product or service. New notebooks now have HDCP built in to appease Hollywood in its neverending quest to make water not wet. Everything Apple does surrounds the iPod line or the iPhone now. People say it's supposed to be a halo effect to get you to buy a Mac but I call bullshit on this one. If Apple can sell an iPhone to someone who just wants to make phone calls, they will. There's no indication at the AT&T store that you should also own a Macintosh to get the best experience. Apple is now the new Sony: a consumer electronics behemoth that does much, but nothing very well in particular. Their OS is now comparable to Windows: a tiny portion of it is engineered to get stuff done and the rest is engineered to get in your way and wrest control of your computer from you. And resist as I could, I just couldn't stay away. Until now.
For the past several months, I've been evaluating more than one Free/Open source operating system for use as a replacement. After lots of time spent on all three, I wound up settling on Debian GNU/Linux. Why? Because Debian is a very mature and actively developed distribution of Linux. I tried Ubuntu for a month and a half and it just feels like it's got more "stuff" than I need. I presume this is for handholding new Linux users. It would appear that I'm not the only one getting a little more than sick of the way Apple treats its power users. Two "A-list" bloggers (gawd I hate that word), Mark Pilgrim and Cory Doctorow, are also former Mac users and for very much the same reasons I am (only they did it 3 years ago).
I've used Linux plenty in the past, first installing Red Hat 5.1 on an old 486 back in the day and even managing to get X windows to bend to my will. Today's Linux distros are nothing like that. Everything just kind of works and the stuff that doesn't isn't so hard to fix. I would place the hardware support in Linux about where Windows 98 was: if it works, it works, but if not, prepare to get dirty. To that end, I built a pretty nice box:
* Intel Quad Core Q6600 CPU
* 2 GB PC-8500 DDR 2 RAM
* 1 TB Seagate SATA hard disk
* Nvidia GeForce 9500 GT video card with 1GB RAM
* Gigabyte EP45-DS3l motherboard
* Logitech wireless mouse, wired keyboard
* Repurposed LaCie Big Disk Extreme 500GB Firewire 800 drive
* PCI express Firewire 800 card
* Dual layer DVD burner
By today's standards, these specs are probably a mid-range Windows Vista machine. Yet, by running Debian, I get spectacular performance, no annoying product tie-ins, and best of all, my operating system does what I want and nothing more (yes, that's you, DRM). In layman's terms, this means I control my computer at all times instead of being forced to prop up an entire industry dedicated to preventing me from doing what I want with the stuff I've got. For those of you with entirely too much time (hey, you've made it this far), read here about what goes into ensuring you can't "pirate" content on Windows Vista.
As a parting note, it was nice to build a PC again after a 4 year hiatus. I got all that hardware for less than the cost of a Mac mini and it's certainly more capable. I was rather shocked at just how cheap and powerful PC hardware has become as of late. Since I didn't have to buy a PC and pay the Windows tax, I also saved more cash. And in these times, that's certaintly a good thing. Next time I'll post a list of what apps I'm using so any Linux enthusiasts out there can compare and contrast.
So long Apple, it was fun while you were a PC company.
Getting FreeBSD 7.0 running on an IBM Thinkpad T40
I've been experimenting with various operating systems on my Thinkpad and have been trying to get a Unix-like system on there. I've played with Ubuntu but the battery life is abysmal. I can get around 3 hours with Windows XP installed and barely half that with Ubuntu 8.10 installed.
Just for grins, I decided to see how difficult it would be to get FreeBSD 7.0 working on this machine. After I was done, I decided I'd share the knowledge:
Moved to new hardware
So over the past few days, I've moved my websites to new hardware. I got a used Sun Enterprise 420r and decided it was time. Pretty nice box: 4 UltraSPARC II processors at 450Mhz each, 1 Gig of RAM, and 72 GB of drive space. Of course it's running my favorite server operating system - FreeBSD. I considered and even tried to install Solaris 10 but it was being a PITA so I threw my hands up and just downloaded the FreeBSD ISO instead. In the process, I've learned how to move a site and minimize the impact of doing so (not that I have a heavily trafficed site anyways). For the curious, my old hardware was a PIII 800 with 512 MB RAM and 160 GB of drive space. If the day ever comes that I need more space I can always pop in another drive. I don't see that happening soon though.
BSD is fun!
I've been experimenting with FreeBSD and OpenBSD lately and they're both quite enjoyable, especially coming from the GNU/Linux world. I'm especially fond of the ports collection. Ports is basically how you manage the software on the system and includes everything from web servers to desktop environments. It's similar to the APT or Yum utilities commonly used with Linux systems. The major difference is that instead of simply installing pre-built binaries, Ports compiles the source code. I won't argue for or against this method for performance improvements but it works for me even on a low end system. My favorite BSD feature by far is the PF firewall. PF is a firewall "for the rest of us". Very simple syntax yet very powerful. You could even block computers running that "other" OS from reaching your system.
FreeBSD has come a long way as has OpenBSD. I encourage you to check them both out, especially if Vista isn't the killer upgrade from XP that you thought it'd be...