Hello everyone,
I've often had problems with managing many slackware boxes simply because I don't have the time to configure them all. I can't use Linuxpackages.net for security reasons, and when I have to manage five or more slackware machines all running different software, it becomes quite a chore. I then usually end up running something like Debian on some of the boxes and it becomes a headache because I like to have a homogenous environment, and I like slackware.
I've made a system similar to "port" or "portage" which automatically downloads source and compiles it. What makes my version unique is that it makes a slackware package, so that you can remove it with removepkg, and you can also send the slackware packages to your friends, or use them on multiple machines without compiling.
When I started dreaming this up, I noticed that if I was making this mainly for my own use, which I was, I wouldn't gain much if I was the only person to maintain the port scripts. Meaning that if I had to write an installation script for every software, I would spend more time than I would just installing software vanilla style, so I had nothing to gain by making the system in the first place.
The solution to this was to find another distro that has ports, and use their installation scripts, with my install tool making the slackware specific changes. So that's what I did.
First I looked at Gentoo and Debian, because they have the biggest repositories. I decided that the amount of packages that Gentoo applies just doesn't go with the Slackware philosophy, and what I like about Slackware. Debian source-debs just had too many patches to make them work on Debian's system, and they wouldn't reliably work on Slackware.
I had used NetBSD's pkgsrc on slackware in the past, and while I love it on NetBSD, alot of the stuff wouldn't build reliably in Slackware.
A while back I tried a distro called CRUX, which had a ports system, and they had a policy which I really liked -- No patching unless absolutely neccessary. However, their ports aren't updated very often, and most of the good software resides in third party repositories.
Well, luckily there is a very successful and very well-updated distro based on CRUX, called Archlinux. I was very impressed with it. They're run by a very good crew, have updated ports for tons of software, and generally do sane things with their build scripts. It's just what I was looking for.
So I hacked up the Arch ports system to run on Slackware. It runs with the complete Arch tree with no modifications so you can just sync to the Arch repository, and we don't have to worry about setting up our own community, though I greatfully encourage supporting the Arch project.
Basically the way it works is simple, there is a program called 'abs' which is a front end to cvsup. This will get you the tree in /var/abs. Under /var/abs you have lots of directories like "devel" and "x11" and "network" to categorize your packages. Under those directories is a directory for each individual package which contains a PKGBUILD script that looks like this:
Code:
# $Id: PKGBUILD,v 1.38 2004/12/28 21:12:58 dorphell Exp $
# Maintainer: dorphell <dorphell@archlinux.org>
pkgname=lftp
pkgver=3.0.13
pkgrel=1
pkgdesc="Sophisticated command line based FTP client"
depends=('gcc' 'openssl' 'bash')
url="http://lftp.yar.ru/"
backup=('etc/lftp.conf')
source=(http://ftp.yars.free.net/pub/softwar...et/ftp/client/$pkgname/$pkgname-$pkgver.tar.bz2)
md5sums=('9d768c0062a58d25e6e1339add10799b')
build() {
cd $startdir/src/$pkgname-$pkgver
./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
rm -rf $startdir/pkg/usr/lib
}
In Archlinux, once in the directory where the PKGBUILD lives you just type 'makepkg' and it downloads and compiles the source, makes a package, and installs that package. The format of the Arch packages is significantly different from that of the Slackware packages, and that's where most of my changes came in.
I've sort of modified it to where it just makes a package and drops it in (for example) /home/ponds/packages/ so that I can install it manually later, but I can easily add an option to install it on the spot, I would assume that some people would want that.
I also ripped out all of the dependancy code. The package manager no longer enforces dependancies, but they are still listed in the build scripts. I feel that having the lower level tool enforce dependancies is a bad idea, and is best left to a front end. I also feel that it's more "Slackware consistant" not having dependancy checking, and most people who want dependancy checking are probably already running Arch.
One more thing, the script is called 'makepkg', and Slackware has a program called makepkg already. So, I need to rename it. I have it as mpkg right now, but I am trying to think of a trendy Slackware name. I was thinking of "schwartz", kind of like Slackware + Ports.
I just got done writing the prototype version of the script three hours ago, and I have made about 120 slackpacks.
What I'd like to ask is if someone has suggestions in what you would like to see in this tool. Since I assume you're a slackware user if you're reading this, what would you like to see in a ports-style system for Slackware? Would you like to see it be more generated to making slackpacks (which I like) or to installing software. Personally I like being able to make a package without installing anything, and then be able to install it later on another machine, we should probably have a command line switch for this or something.
Do you see a role for this tool? Do you think it would be useful?
I will post slackpacks of (prerelease alpha) versions of the ported makepkg and abs tomorrow as well as cvsup (it's kind of hard to build, and is a dependancy of abs).