Dru Lavigne, author of BSD Hacks
For those faithful readers who were starting to wonder when the next article in this column would appear, I'm back. BSD Hacks is finally finished.
In today's article, I'd like to demonstrate some useful utilities that recently arrived in the ports collection. I usually discover these from FreshPorts, which keeps statistics on which ports have been added in the last 24 hours, 48 hours, week, fortnight, and month.
Pruning Installed Ports
However, I first learned about
sysutils/pkg_cutleaves from Richard Bejtlich's weblog. Richard
has the uncanny ability of keeping abreast of my three favorite subjects:
FreeBSD, the ports collection, and security.
If you use
portupgrade to keep your
ports up-to-date, consider
pkg_cutleaves to your repertoire. This interactive Perl
script searches your ports database for "leaves," or software that isn't a
dependency of any other installed program. This gives you the opportunity to
clean your drive of those orphaned programs you no longer use or were
dependencies of software you've since uninstalled.
Once you've built the port from
/usr/ports/sysutils/pkg_cutleaves, take a minute to read
pkg_cutleaves. Then, as the superuser:
# pkg_cutleaves Package 1 of 73: AbiWord2-2.0.5 - An open-source, cross-platform WYSIWYG word processor AbiWord2-2.0.5 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? k ** Keeping AbiWord2-2.0.5.
On this particular system, I have 250 installed ports, of which 73 are
pkg_cutleaves will show each of these and
will pause while I decide to keep or remove the port. I've chosen to keep
AbiWord2, as well as the next 6 XFree86 related ports.
Package 8 of 73: apache-ant-1.6.1 - Java- and XML-based build tool, conceptually similar to make apache-ant-1.6.1 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? d ** Marking apache-ant-1.6.1 for removal.
However, I've chosen to delete
apache-ant since I have a vague
memory of it being a dependency of some application I've long ago uninstalled.
I'll carry on until I've made a decision on each of the 73 ports. Once I'm
pkg_delete will carry out the requested deletions. In
this example, I've chosen to delete 25 ports:
Package 73 of 73: zip-2.3_1 - Create/update ZIP files compatible with pkzip zip-2.3_1 - [keep]/(d)elete/(f)lush marked pkgs/(a)bort? k ** Keeping zip-2.3_1. Deleting apache-ant-1.6.1 (package 1 of 25). ---> Deinstalling 'apache-ant-1.6.1' [Updating the pkgdb <format:bdb1_btree> in /var/db/pkg ... - 250 packages found (-1 +0) (...) done]
When these deletions complete,
pkg_cutleaves reprocesses the
ports database to see if any of those deletions resulted in new leaf
Go on with new leaf packages ((y)es/[no])? y
This process will continue until I've dealt with all leaves. At that point it will provide a summary of the uninstalled packages:
Didn't find any new leaves, exiting. ** Deinstalled packages: apache-ant-1.6.1 <snip> ** Number of deinstalled packages: 53
The next time you run
pkg_cutleaves, it will ask you again
about the ports you chose to keep. In my example, that would be AbiWord2 and
those XFree86 ports. If you know you want to keep these and find it irritating
to confirm this every time, create a file called
/usr/local/etc/pkg_leaves.exclude containing the names of those
ports you wish to keep:
Remember to include the
x (exclude) switch:
# pkg_cutleaves -x
pkg_cutleaves to read your exclude file. For those
occasions when you don't want it to read your exclude file, don't include that
Improving Your Fortunes
The next new port is for those of you who enjoy BOFH humor. If that strikes your funny bone, you can add BOFH-style fortunes to your system by installing
Once installed, try a random fortune:
% fortune /usr/local/share/games/fortune/bofh BOFH excuse #419: overflow error in /dev/null
If you'd like these fortunes to appear randomly with the rest of your fortunes, copy them into the system fortune directory as the superuser:
# cp /usr/local/share/games/fortune/bofh* /usr/share/games/fortune/
Once you've copied over the BOFH files, you can specify you'd like a BOFH fortune by typing:
% fortune bofh
This is many keystrokes shorter than the previous incantation.
Finally, if you're a Futurama fan, repeat the above for the
# cd /usr/ports/misc/fortune-mod-futurama # make install clean # cp /usr/local/share/games/fortune/futurama* /usr/share/games/fortune/ # exit % fortune futurama Fry: I want to see the edge of the universe. Amy: Ooh, that sounds cool. Zoidberg: It's funny. You live in the universe but you never do these things 'til someone comes to visit.
It's funny that this fortune made me wistful for a Douglas Adams fortune. A
quick Google search located that there is indeed a fortune-hitchhiker project. Download
# tar xzvf fortune-hitchhiker.tgz # cp fortune-hitchhiker/hitchhiker* /usr/share/games/fortune # exit % fortune hitchhiker "'You know,' said Arthur, 'it's at times like this, when I'm trapped in a Vogon airlock with a man from Betelgeuse, and about to die from asphyxiation in deep space that I really wish I'd listened to what my mother told me when I was young.' 'Why, what did she tell you?' 'I don't know, I didn't listen.'" -- Arthur coping with certain death as best as he could.
Perhaps another Hitchhiker fan will add this to the ports collection so it will show up in the new section at FreshPorts.
Making Subjects and Verbs Agree
The next port intrigued me as it's named after one of my favorite childhood literary characters:
# cd /usr/ports/textproc/queequeg # make install clean
This will install the
% qq filename
The Queequeg project is still in its beta stages. Its goal is to help the non-native English writer match a singular or plural noun to the correct verb conjugation. At this point, the project developers are still working on filtering out false positives so the resulting output may still be too frustrating for those who lack a solid command of English grammar. However, if English grammar is your forté and you have some time to donate, this project is looking for beta testers. If it matures, it will be an excellent tool for non-English developers to easily create manpages in natural English.
Pages: 1, 2