Upgrading OpenBSD — so darn easy!

Tonight I finally got around to upgrading my OpenBSD machine, Vectra functions as my file server among other things hehe. The 4.2 upgrade screwed around with the expat library making it depend on xbase42.tgz which is the X Windows System, normally not needed unless one is running a graphical desktop environment.

The system runs headless with no monitor, keyboard, or mouse and functions as a file server. So I have no need what so ever to run a GUI, using a command prompt over SSH is actually my preferred way of working on the box any way. because it means I don’t need a monitor, keyboard, or mouse to work on Vectra and because SSH is not as heavy on the network as using VNC/X Forwarding and crap. Now that 4.3 was released May 1st and fixed the libexpat thing I can update

I took the machine from OpenBSD 4.1 to 4.2 to 4.3. I could probably have saved time by not dealing with any of the *42.tgz files besides etc42.tgz but I did it any way. I’ve also learned the hardway to back up /root first hehe (see end of post notes). OpenBSD is one of the most easy to install, upgrade, use, and maintain operating systems I have ever used.

Here is my general log of things, and yes I do use the shells command grouping and flow-control constructs when I feel like it :-P. Most of the configuration file changes in 4.2/4.3 were never modified by me so I could install most of them over the old ones

EDIT:, be sure to remove BOTH etc*.tgz before using any the for loops to install files!!! or end up in my sleepy boat. Updating the files in /dev before rebooting is also not a bad idea.

su – root
Password:
cd /usr/obj
mkdir {4.2,4.3} && cd 4.2
cat ~/.profile          # look up my mirrors address
ftp ftp.usa.openbsd.org
        …             # login as anonymous
ftp> cd /pub/OpenBSD/4.2/i386
        …             # fetch files for OpenBSD 4.2
ftp> get base42.tgz
        …
ftp> get etc42.tgz
        …
ftp> get comp42.tgz
        …
ftp> get misc42.tgz
        …
ftp> get man42.tgz
        …
ftp> get games42.tgz
        …
ftp> lcd ../4.3
        …     # change directories
ftp> cd /pub/OpenBSD/4.3/i386
        …             # fetch files for OpenBSD 4.3
ftp> get bsd
        …
ftp> get bsd.rd
        …
ftp> get base43.tgz
        …
ftp> get etc43.tgz
        …
ftp> get comp43.tgz
        …
ftp> get misc43.tgz
        …
ftp> get man43.tgz
        …
ftp> get games43.tgz
        …
ftp> close
221 Goodbye.
ftp> bye        # return to my shell, pwd := /usr/obj/4.2
ftp>  http://openbsd.org/faq/upgrade42.patch      # fetch patch file for /etc
tar -xzphf etc42.tgz
cd etc          # pwd := /usr/obj/4.2/etc
# install the etc42 files as directed by the upgrade notes
cp magic man.conf netstart rc rc.conf rpc services /etc
cp mtree/* /etc/mtree/
cp mail/helpfile mail/localhost.cf mail/submit.cf /etc/mail
cp mail/sendmail.cf /etc/mail
cp etc/bgpd.conf /etc/                                                      
cp etc/mail/spamd.conf /etc/mail/                                            
cp etc/ospfd.conf /etc/                                                      
# test the patch
cd ..           # pwd:= /usr/obj/4.2 again
(cd /; patch -C -p0) < ./upgrade42.patch        # test patch
(cd /; patch -p0) < ./upgrade42.patch           # apply patch
        …    
# my /etc/ntpd.conf is customized and fails to patch clean
# remove the left over notes, _AFTER_ reviewing them !
(cd /etc; for i in `ls /etc/|grep rej`; do rm $i; done)
vimdiff etc/ssh/sshd_config /etc/ssh/sshd_config
        …    
# manually merge the new sshd_config with mine
                # this puts both files in a verticle split, new on the left,
                # old on the right. Merge changes in with the :diffput command
cd ../4.3              
# pwd := /usr/obj/4.3
ftp>  http://openbsd.org/faq/upgrade43.patch      # fetch patch file for /etc
# install the etc43 files as directed by the upgrade notes
tar -xzphf etc43.tgz
cp moduli netstart ospf6d.conf rc rc.conf relayd.conf security snmpd.conf /etc
cp mtree/* /etc/mtree/
cp mail/README /etc/mail
cp ../var/named/etc/root.hint /var/named/etc
cp etc/ttys /etc/ttys                                                        
(cd /; patch -C -p0) < ./upgrade43.patch        # test patch
(cd /; patch -p0) < ./upgrade43.patch           # apply patch
        …
# remove the left over notes, _AFTER_ reviewing them !
(cd /etc; for i in `ls /etc/|grep rej`; do rm $i; done)
# remove uneeded files, as directed in 4.3 upgrade
notes

rm /etc/hoststated.conf /var/named/standard/root.hint
# add the new users and groups in 4.3:
useradd -u90 -g=uid -c"OSPF6 Daemon" -d/var/empty -s/sbin/nologin _ospf6d
useradd -u91 -g=uid -c"SNMP Daemon" -d/var/empty -s/sbin/nologin _snmpd
newaliases      
        …    
# update mail aliases
mtree -qdef /etc/mtree/4.4BSD.dist -p / -u                                  
        …    
# create new directories as needed
# change permissions as instructed by the 4.3 upgrade notes
chown root:operator /etc/chio.conf                                          
chmod 644 /etc/chio.conf                                                    
# install the new kernel as directed, pwd := /usr/obj/4.3
ln /bsd /bsd.41                                                              
cp bsd /bsd.41
mv /bsd.41 /bsd                                                              
shutdown -r now         # reboot into the new kernel so we can begin
extracting

                        # upgrade files safely.
# wait for the machine to come back up, and ssh back to it
ping vectra
ssh2v                   # an alias that expands to ssh’ing me into vectra
        …
su – root
Password:
# install all of the 4.2 upgrade files
(cd /usr/obj/4.2/; for ark in `ls | grep .tgz`; do tar -C / -xzphf $ark; done
# install all of the 4.3 upgrade files
(cd /usr/obj/4.3/; for ark in `ls | grep .tgz`; do tar -C / -xzphf $ark; done

Since there are a lot of printing related packages from back when I screwed with setting up a Lexmark WinJet with cups awhile back and the Samba system which is no longer used… Since oddly integrating Windows and BSD clients forced me into NFS shares : I’ve opted to delete all of the packages installed on the server and reinstall the only ones I actually give a flying rats rear end about

pkg_delete -cxi -F dependencies /var/db/pkg/*
pkg_add -vi bzip2 lzma

Sadly it seems that /root/profile for some odd reason was overwritten by one of the upgrade files, which really sucks… Because I didn’t stop to think — the tarballs for upgrade are the same as a fresh install which has to create roots default home directory!!!

I had set up roots ~/.profile to set PKG_PATH dynamically based on the current architecture and release level. So I redirected the output of ‘set’ to a file to retain the values and rewrote my file by hand and changed ~/.profile to source a separate ~/.kshrc before rebooting the system

set > /tmp/root.profile
vim -o ~/.profile -o ~/.kshrc
shutdown -r now

After having been wanting to for ages I have finally fixed up my OpenBSD machines partitions.

I had an 80GB hard drive formated (wd1a) and moved /usr/local/ on to it and put my SMB shares on it for the free space.

Since wd0 is a 8GB disk split into a, b, h, d, g, and e partitions the biggest is wd0g mounted on /usr with ~6GB free but I had almost 10GB of files on /usr/local (wd1a). So I had to copy my backups and videos to the windows machine via Samba/Network Neighborehood before I could move all of my files in /usr/local/srv to a temporary place in /usr and then archived the rest of the directory.

cd /usr
mkdir storage
mv local/srv storage
tar -cf /var/tmp/local.tar local

I had to relabel the disk and then format the partitions, I created wd1a and wd1d to use as /usr/local and /srv with ~15GB more free space in case I need it.

umount -f local
disklabel -E wd1
newfs wd1a
newfs wd1d

During the disk label I changed to ‘disk geometry’ (g d), deleted the a partition (d a) and created the a and d partitions (c a and c d) keeping with the prompts on it and specifying 12G and 45G for the partition sizes.

Fixed my fstab and then mounted the partitions

vi /etc/fstab
# 8GB Primary Master, PATA drive
# device mount type opts dump fsck
/dev/wd0a / ffs rw 1 1
/dev/wd0h /home ffs rw,nodev,nosuid 1 2
/dev/wd0d /tmp ffs rw,nodev,nosuid 1 2
/dev/wd0g /usr ffs rw,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid 1 2
# 80GB Primary Slave, PATA drive
# device mount type opts dump fsck
/dev/wd1a /usr/local ffs rw,nodev 1 2
/dev/wd1d /srv ffs rw,nodev,nosuid 1 2

mount -o rw,nodev /dev/wd1a /usr/local
mount -o rw,nodev,nosuid /srv

I’m some what tempted to mark wd1d ‘noexec’ but I may wish to run scripts from there later if I ever move ~/code over. After that it was just a quick hop, skip, and jump to restore my files.

tar xpf /var/tmp/local.tar
mv storage/srv/smb /srv/
vi /etc/samba/smb.conf

I corrected all of my shares in smb.conf from command line mode:

:1,$s//usr/local/srv//srv/g

I could’ve used ex but I rather like paging up/down with ^U and ^D instead of using ‘addr1,addr2p’ in ex.

mount
/dev/wd0a on / type ffs (local)
/dev/wd0h on /home type ffs (local, nodev, nosuid)
/dev/wd0d on /tmp type ffs (local, nodev, nosuid)
/dev/wd0g on /usr type ffs (local, nodev)
/dev/wd0e on /var type ffs (local, nodev, nosuid)
/dev/wd1a on /usr/local type ffs (local, nodev)
/dev/wd1d on /srv type ffs (local, nodev, nosuid)
# df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 147M 30.4M 110M 22% /
/dev/wd0h 393M 35.6M 337M 10% /home
/dev/wd0d 98.3M 2.0K 93.4M 0% /tmp
/dev/wd0g 6.7G 398M 6.0G 6% /usr
/dev/wd0e 148M 84.1M 56.2M 60% /var
/dev/wd1a 11.8G 76.9M 11.1G 1% /usr/local
/dev/wd1d 44.3G 5.1G 37.0G 12% /srv

Windows wouldn’t see the file shares and sending the HUP signal to Samba to reread it’s conf file immediately didn’t help any. So I gave Vectra a reboot to double check my fstab entry (yes I am paranoid), I could’ve just killed the processes and reloaded them manually for the same effect.

# uptime
9:14PM up 19 days, 3:29, 1 user, load averages: 4.12, 4.16, 3.86
# reboot

I love OpenBSD 🙂

EDIT:

To prevent some nasty time outs.

vi /etc/ssh/sshd_config
ClientAliveInterval 15
ClientAliveCountMax 45

vi ~/.ssh/config # or /etc/ssh/ssh_config for all clients
ServerAliveInterval 15

I love BSD !!!!

Well to make a long story short, I’ve got my older brothers old PC (whats left of it). It’s missing it’s Graphics card, Optical Drives, and DDR1 SDRAM and only has a WinModem for it’s Cards but other wise it’s functional. It’s a originally a Dell Dimension 4500, Ma has a 4550 so i used her user manual to check what kind of RAM I would need.

If I bought 256~512mb of RAM and a Networking card I could get a 4th PC running, maybe try and get a Wifi adopter for it so I could move one of the Towers into my room (where my Laptop usually is stored)… 5 PC’s hehe that would be nice!! And if I get enough money for Christmas I could do it.. I could also buy Ma some RAM to upgrade her PC, or just buy her a new 1GB’s worth and take her old 512’s set.

The Box has a Pentium 4, probably ~2Ghz… Compare to my File Servers Katmai (Pentium 3, 500Mhz).

Having 512MB RAM would be an upgrade from 384MB-8MB for Matrox Gfx that the server has. Even if I had to make do with only 256MB, the processor upgrade would be worth it imho.

I have an old ATI Ultra Rage 128 AGP4X card on my shelf, a 32MB card should be overkill for any thing but gaming.

The IMPORTANT thing is, the hulk came with a 40GB Western Digital PATA drive and a 80GB Hitachi PATA drive.

My OpenBSD server is running off an old Office Desktop PC (cica 1998/1999) and only has an old 8GB Maxtor PATA drive. The BIOS also has a known problem that it can only address up to about 33GB of disk, any more would be wasted.

Guess what… OpenBSD can use the entire drive !!!!!

I installed the 80GB HDD and hooked it up to the (E)IDE cable and power thingy and checked the BIOS to see the setup, I could see that the 8GB root disk was Primary Master, 80GB drive as Primary Slave, and the CD-ROM drive as Secondary Master.

I didn’t really learn much about the innards of Computers by looking it up. I learned most of what I know by pulling a PC apart and putting it back together again.

I tried to mount the disk but could not, even with the mount_ntfs program. Probably because of no disklabel. I booted off my Knoppix Live CD to see if it was working. Sure enough, Linux found a ~75GB /dev/hdb1 and was able to mount it as NTFS. I reformatted it FAT32 and booted back to OpenBSD.

To set up the hard drive for usage, I fdisk’d it

fdisk -i wd1

I gave it a yes to updating and moved on to labeling the disk.

disklabel -E wd1

I used the g d command in disklabel to tell it to use the disks geometry and not the BIOS. I setup a 4.2BSD Partition (wd1a) for the full size of the disk and wrote the label out.

Next I formated it with the UFS file system used in OpenBSD.

newfs wd1a

and mounted it to a temporary mount point

mount /dev/wd1a /mnt

And volia it worked !!! I moved every thing from /usr/local/* to /mnt/ and edited /etc/fstab with instructions to auto-mount the new 80GB drive in it’s place.

Terry@vectra-$ cat /etc/fstab
/dev/wd0a / ffs rw 1 1
/dev/wd0h /home ffs rw,nodev,nosuid 1 2
/dev/wd0d /tmp ffs rw,nodev,nosuid 1 2
/dev/wd0g /usr ffs rw,nodev 1 2
/dev/wd0e /var ffs rw,nodev,nosuid 1 2
# 80GB Primary Slave, PATA drive.
/dev/wd1a /usr/local ffs rw,nodev 1 2
Terry@vectra-$

Now I have good solid storage… No more trying to cram network shares and LAN backups onto a small ~7GB /usr partition.

Terry@vectra-$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 147M 31.3M 109M 22% /
/dev/wd0h 393M 378K 373M 0% /home
/dev/wd0d 98.3M 2.0K 93.4M 0% /tmp
/dev/wd0g 6.7G 398M 6.0G 6% /usr
/dev/wd0e 148M 8.3M 132M 6% /var
/dev/wd1a 73.3G 2.5G 67.2G 4% /usr/local
Terry@vectra-$

I love BSD !!!

Linux or BSD?

Some how it figures, I always have more issues setting up a Linux system then a BSD one… Go figure

Linux supports newer hardware faster

but BSD tends to just detect it.

Heck, if the box in question had a Floppy disk I think I’d install OpenBSD on the thing and go /w the X11 option. But if it won’t dual boot FreeBSD and PC-BSD without hicups I doubt OpenBSD and PC-BSD would be any better….

Bloody hardware !!!

And thinking about early Linux systems, the term ‘Linux/GNU’ probably is more accurate then Linux or GNU/Linux =/

OpenBSD

The day before yesterday I backed up Vectra, /kolab, /etc, /usr/local/etc. And reformatted the computer and installed OpenBSD 4.0.

http://www.openbsd.org/

The worlds most secure OS, with only two remote holes in the default install found in over 10 years. And a heck of a lot of looking !!!

With out a doubt, this is the easiest to install OS I have ever worked with. I downloaded floppy40.fs from one of the FTP Mirrors. There are 40, 40A, and 40B. For most ‘Desktop’, ‘Server’, and ‘Laptop’ hardware sets respectfully.

I put one of my 3.5″ Stiffies in floppy disk drive #1 (/dev/fd0). Formated the disk and did a byte exact copy with the dd command.

Vectra# fdformat /dev/fd0
Format 1440K floppy `/dev/fd0'? (y/n): y
Processing VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV done.
Vectra# dd if=floppy40.fs of=/dev/rfd0c bs=32k
Vectra# cmp /dev/fd0 floppy40.fs
Vectra#

As per the OpenBSD documentation I used the compare utility to make sure I had a clean disk. Gotta remember about ol’cmp(1) hehe.

I ejected the disk and labeled it, ‘OpenBSD 4.0 Floppy40.fs’. Reinserted it and rebooted my computer. (After swapping monitors and keyboards).

The PC booted off the stiff disk, giving me a boot> prompt. Very sweetly I could use ‘ls’ to see what was on the disk, boot and bsd. Knowing that bsd was the kernel (from reading tfm) I booted it.

boot> boot bsd

Of course it will auto loaded the kernel into memory if you let it sit for a few seconds. Afterwards it asked for an install, upgrade, or shell prompt. I could have used a CD-ROM, but for just making a boot disk with an installer I felt it was kind of wasteful. Especially when Vectra is the only _personal_ computer I have /w a floppy drive. Ma’s has one but she’d freak if her PC booted to a getty prompt !

The installer reminds me some what of Slackware GNU/Linux’s way of asking which kernel to boot. But for the whole installer xD. I’m sorry to say that OpenBSD, while being the easiest to install OS I have _ever_ seen. Is not for the faint of heart to install !

The installer asked me for a terminal type, defaulting to vt220. I’m not really very smart about the old terminals having never used one. But the internet helps. The vt220 came with a LK201 keyboard with a layout close enough to the modern US Standard keyboard layout for my tastes. The only sad thing is that one cannot press scroll lock and page back to read stuff that flew by. At least on my system so, I’d recommend having the manual handy during partitioning.

The installer prompted for a kbd map, I took the default ‘us’ layout.

Welcome to the OpenBSD/i386 4.0 install program.

This program will help you install OpenBSD in a simple and rational way. At
any prompt except password prompts you can run a shell command by typing
'!foo', or escape to a shell by typing '!'. Default answers are shown in []'s
and are selected by pressing RETURN. At any time you can exit this program by
pressing Control-C and then RETURN, but quitting during an install can leave
your system in an inconsistent state.

Specify terminal type: [vt220]
kbd(8) mapping? ('L' for list) [none]

OpenBSD even supports using a serial console with a little hanky panky. One of the things, that in my opinion was very professional and a great change. It asked me _if_ I had a backup of my data. Normally (in my exp) you only get a warning about how dangerous it can be to any data on disk (which of course OpenBSD did). We then proceeded into the partitioning phase.

It listed the available disks (wd0) and asked for the root disk. I was prompted to use all of the disk or (default) not to use the whole disk for BSD. Being a dedicated machine, I wanted the whole disk used. If you want to multi-boot or make multiple slices (primary partitions) you’ll need to elect for a fdisking nightmare. Generally OpenBSD supports disks up to one Terrabyte, thats about 1,000,000 MB. Wwell, not really but close enough and easier to remember :-P. I chose to use the whole disk, so I was allowed to skip fdisk and go on to disklabel maker 9.0 pro.

I must warn ya, the fdisk/disklabel software has not advanced much in terms of interface. Since the ex(1) line editor was mans best friend. FYI, vi is a ‘visual’ interface to the ‘extended’ editor 🙂

I created a group of bsd partitions in my slice, following the suggestions most of the time.

From my installed system:

Terry@vectra-$ df -h
Filesystem Size Used Avail Capacity Mounted on
/dev/wd0a 147M 28.0M 112M 20% /
/dev/wd0h 393M 628K 372M 0% /home
/dev/wd0d 98.3M 2.0K 93.4M 0% /tmp
/dev/wd0g 6.7G 426M 5.9G 7% /usr
/dev/wd0e 148M 5.8M 135M 4% /var

One can set the offset, size, FS Type, and mount point when adding a new partition. Very lucky for me, it was smart enough to find the offset itself. I don’t really like working in cylinders so I was pleased to be able to specify the size in a more friendly manor. Such as 150M for 150 Megabytes 🙂

The file system type is ‘4.2BSD” or swap. wd0a and wd0b default to the root / partition and swap partitions respectfully. Also the wd0c refers to the _entire_ slice (primary partition). When done, I wrote the label and exited. It prompted me to confirm the mount points, kind of handy. After confirming my 5 mount points I issued a ‘done’.

Yet again, it wanted me to confirm that I wanted to continue with the formating. It auto formated each partition in the label and took me to the configuration phase.

I have never seen such a simple configuration phase, all it really amounts to is setting up enough data for the machine to attach to the network, or at least use the ‘hostname’ command. I set the short hostname when prompted to ‘vectra’. I then had a boolean problem, do I configure the network or not? Since I don’t see any point in waiting till first boot or chrooting after install and doing it before first boot. I decided to set up the network settings. Be warned, the only text editor you have to work with is ed(1). I really hate ed, but its a good little editor when you think about how tight the space is on a 1.44MB boot disk.

I set up my 3Com ethernet NIC (xl0) using DHCP, when prompted and worked the following.

  DNS domain name? (e.g. 'bar.com') [my.domain] my.domain
DNS nameserver? (IP address or 'none') [my name servers] Enter
Use the nameserver now? [yes] yeskbd>
Default route? (IP address, 'dhcp' or 'none') [dhcp] dhcp
Edit hosts with ed? [no] Enter
Do you want to do any manual network configuration? [no] yes

A very nice set up, I then used the shell and ed to take a look at my network configuration, all was right. After exiting the shell, I was ordered to set roots password. That completed the configuration phase ! Yeah thats it, all you really have to set up is enough to get a network connection and a password for root.

Not having been able to afford a disk set, when prompted for the install media (i386 supports cd, disk, ftp, and http). I took up an ftp install, electing _not_ to setup ftp/http proxy connection details. As I do not have one to worry about when doing this stuff ^_^

I installed using the ftp.openbsd.org mirror with the default package sets. Be warned it does take a little while for it to connect to the server and let you choose packages. The required are:

  • bsd - The Kernel
  • base40.tgz - The base system (think /bin:/sbin:/usr/bin:/usr/sbin e.t.c)
  • * bsd.mp - Multi-processor (SMP) kernel (only some platforms) * bsd.rd - RAM disk kernel

  • etc40.tgz - System Configuration files (/etc)

The other packages are: comp40, development tools (gcc, headers, libs e.t.c.), man40 (man pages), misc40 (extra docs), games40 (simple games), and a slew of x* packages required for using the X Windows System. Being intended for a SMB/NTP/Print server, I don't need an X Server eating my 8GB disk.

The system fetched and installed each package I selected from the ftp mirror and took me to the 'startup' phase. Where I could adjust settings related to what would turn on automatically at boot. Namely.

Do I want SSHD (default yes), my LAN requires this since I can't get a KVM switch.

Do I want NTPD (default no), I want vectra to be a time server for my lan.

Do I expect to run X (default no), which if yes would tune a few things to make the XxX life easier.

Should the default console be com0, *nix starts numbers at 0, so BSDs com0 is DOS/Winsucks com1 !

And a would've been nicer to ask during configuration: Time Zone setup. I elected for 'Zulu' time. I don't use local time for much, and try to use UTC when ever I can.

A little BSD Magic and vola

CONGRATULATIONS! Your OpenBSD install has been successfully completed!
To boot the new system, enter halt at the command prompt. Once the
system has halted, reset the machine and boot from the disk.

The manual did mention chroot'ing and doing configuration before reboot, but I found that it was unnecessary for my needs.

On reboot I had a very good working system, checked the afterboot man page, confirmed I had a solid network connection, added a regular user(s), and could SSH in from it/them.

All was well and good, but after like 10-15 mintues the system would drop off the LAN. I couldn't figure it out, but putting a KB or monitor back on it fixed it. After a poke in the BIOS the next morning. I found a very interesting option 🙂

The system was set to stand by after n minutes, I tested with both standby and suspend set to 15 minutes. And sure enough after 15 minutes my SSH session would time out. And I'd have to physically type a key on the keyboard, or insert one into the port. After I cleared this, all was well ! FreeBSD never cared a rats behind but FreeBSD is not OpenBSD 🙂

I had thought maybe the kernel thought there was a problem /w the default console, but I figured that'd leave some viable info or a crash. Apparently the BIOS was the problem hehe.

PC-BSD, an easy to install FreeBSD based desktop has a great GUI installer. Very easy and simple, but I think OpenBSDs was easier. Since I elect to do 'advanced' installs with PC-BSD rather then the short basics. Never the less, the effect was the same.

PC-BSD, a fully working KDE Desktop on the first boot.

OpenBSD, a fully working Console System on the first boot.

I didn't really have to configure a bloody thing after running adduser on the OpenBSD box 😉 Of course theres more work to do, but not as a case of getting a _working_ system. I find OpenBSD so far to be a great system.