#!/bin/sh # Script to handle alien packages under Debian # # Options: # -p Manually specify a patch # -n Install an alien package using heuristics # -g Prepare directories for development # # Christoph Lameter, October 30, 1996 set -e LIB=/usr/lib/alien while expr "$1" : '-.*' >/dev/null; do case $1 in -n) NOPATCH=1 ;; -g) GENERATE=1 ;; -p*) PATCHFILE=`expr "$1" : '-p\(.*\)'` if [ ! -f "$PATCHFILE" ]; then echo "$PATCHFILE not found" exit 1 fi ;; *) echo "Bad option $1" exit 1 ;; esac shift done if [ "$NOPATCH" -a "$PATCHFILE" ]; then echo "Cannot handle -n and -p options simultaneously" exit 1 fi FILE=$1 if [ "$FILE" = "" ]; then echo "Usage: alien [-n] [-g] [-p] " exit 1 fi if [ ! -f $FILE ]; then echo "File $FILE not found" exit 1 fi DATE="`822-date`" # Cut off the directory name if echo $FILE|grep -q "/"; then X=`expr $FILE : '.*/\(.*\)'` else X="$FILE" fi if expr $X : '.*\.rpm' >/dev/null; then RPM=1 if [ ! -f /etc/rpmrc ]; then echo "RPM Package Manager not installed" exit 1 fi X=`expr $X : '\(.*\)\.rpm'` else case $X in *.tgz) X=`expr $X : '\(.*\).tgz'` ;; *.tar.gz) X=`expr $X : '\(.*\).tar.gz'` ;; *) echo "Format of filename bad $FILE" ;; esac fi if [ "$NOPATCH" = "" ]; then if [ "$PATCHFILE" = "" ]; then PATCHFILE=/var/lib/alien/$X.diff.gz fi if [ ! -f $PATCHFILE -a "$GENERATE" = "" ]; then echo "Patchfile $PATCHFILE not found." exit 1 fi if [ ! -f $PATCHFILE ]; then PATCHFILE= fi fi if [ "$RPM" ]; then # Analyze the FILE name PACKAGE=`expr $X : '\(.*\)-.*-.*\..*'` VERSION=`expr $X : '.*-\(.*\)-.*\..*'` DELTA=`expr $X : '.*-.*-\(.*\)\..*'` ARCHIT=`expr $X : '.*-.*-.*\..\(.*\)'` if [ "$DELTA" = "" -o "$VERSION" = "" -o "$PACKAGE" = "" ]; then echo "Filename must have the form Package-Version-Release.Architecture.rpm" exit 1 fi if [ "$ARCHIT" = "386" ]; then ARCHIT=i386 fi CDIR=rpm else # Generic handling for slackware and tar.gz packages if echo $X | grep -q "-"; then PACKAGE=`expr $X : '\(.*\)-.*'` VERSION=`expr $X : '.*-\(.*\)'` else PACKAGE=$X VERSION=1 fi if [ "$VERSION" = "" -o "$PACKAGE" = "" ]; then echo "Filename must have the form Package-Version.tgz" exit 1 fi ARCHIT=i386 DELTA=1 CDIR=tgz fi mkdir $PACKAGE-$VERSION cd $PACKAGE-$VERSION mkdir debian echo "-- Unpacking $FILE" if [ "$RPM" ]; then (cd ..;rpm2cpio $FILE) | cpio --extract --make-directories --no-absolute-filenames # install script could be located here. else # Must be a tar file tar zxpf ../$FILE # Make install script to postinst if [ -e install/doinst.sh ]; then mv install/doinst.sh debian/postinst if ! rmdir install; then echo "Other files besides doinst.sh present in install directory" echo "Install script cannot be used as postinst script!" mv debian/postinst install/doinst.sh fi fi fi if [ "$GENERATE" ]; then cd .. cp -a $PACKAGE-$VERSION $PACKAGE-$VERSION.orig echo "Directories $PACKAGE-$VERSION.orig + $PACKAGE-$VERSION prepared." cd $PACKAGE-$VERSION fi # Now lets patch it! if [ "$PATCHFILE" ]; then echo "-- Patching in $PATCHFILE" zcat $PATCHFILE | patch -p1 X=`find . -name "*.rej"` if [ "$X" ]; then echo "Patch failed: giving up" exit 1 fi rm `find . -name "*.orig"` else echo "-- Automatic package debianization" # Generate all the values we need if [ "$EMAIL" = "" ]; then EMAIL="$USER@`cat /etc/mailname`" fi USERNAME=`awk -F: -vUSER=$USER '$1 == USER { print $5; }' /etc/passwd` if [ "$USERNAME" = "" -a -x /usr/bin/ypmatch ]; then # Give NIS a try USERNAME=`ypmatch $USER passwd.byname|awk -F: '{ print $5; }'` fi if echo $USERNAME | grep -q "\,"; then X=`expr index "$USERNAME" ","` X=`expr $X - 1` USERNAME=`expr substr "$USERNAME" 1 $X` fi cd debian X=`(cd $LIB/$CDIR;ls)` for i in $X; do sed <$LIB/$CDIR/$i >$i -e "s/#PACKAGE#/$PACKAGE/g" \ -e "s/#VERSION#/$VERSION/g" \ -e "s/#DELTA#/$DELTA/g" \ -e "s/#ARCHIT#/$ARCHIT/g" \ -e "s/#EMAIL#/$EMAIL/g" \ -e "s/#USERNAME#/$USERNAME/g" \ -e "s/#DATE#/$DATE/g" done if [ "$RPM" ]; then (cd ../..;rpm -qpi $FILE) >>copyright fi cd .. # Assume all files in etc are conffiles if [ -d etc ]; then find etc -type f -printf "/%p\n" >debian/conffiles fi fi chmod a+x debian/rules if [ "$GENERATE" = "" ]; then echo "-- Building the package $PACKAGE-$VERSION-$DELTA.deb" debian/rules binary cd .. rm -rf $PACKAGE-$VERSION echo "-- Installing generated .deb package" dpkg -i $PACKAGE*.deb rm $PACKAGE\_$VERSION-$DELTA*.deb fi echo "-- Successfully finished" exit 0