[Solar-general] divisor de nombres de paquetes
Diego Saravia
dsa en unsa.edu.ar
Dom Jun 20 02:20:32 CEST 2010
lentamente continuo avanzando con sumpack
esto parece tonto, pero es util
es un script , bajo el nombre de upackname que separa nombres de
paquetes en sus partes
(para lo que hago necesito solo dos: nombre y version, pero no es
dificil separar mas en este contexto: release, etc)
si alguien conoce algo mejor, sacarle errores, o como mejorarlo o
darle mas capacidades, gracias
#!/bin/bash
version(){
cat <<EOF
upackname $PROG_VERSION
Copyright (C) 2010 Diego Saravia <dsa en unsa.edu.ar>
License: $PROG_LICENCE
<http://gnu.org/licenses/gpl.html>
EOF
}
help(){
cat <<EOF
upackname PACKAGE
Splits package string in name, version and extension
EOF
}
usage(){
cat <<EOF
Usage:
upackname PACKAGE
EOF
}
extsep(){
for ext in $2 ; do
rext=`echo $ext | sed 's|\.|\\\.|' `
first=`echo $1 | sed "s/\.$rext\$//"`
if test "x$first" != "x$1"; then
PACKEXT=$ext
PACKTYPE=$3
PACKNOEXT=$first
break
fi
done
}
PROG_VERSION=0.1
PROG_LICENCE="AGPLv3+: GNU AGPL version 3 or later"
while test $# -gt 0 ; do
case "$1" in
-h|--help)
help
;;
-v|-V|--version)
version
;;
-u|--usage)
usage
;;
*)
FILES=$@
break
;;
esac
shift
done
if test x"$1" = x ; then
usage
exit
fi
PACK=$1
#PACKSTRING=`basename $PACK`
PACKSTRING=`echo $PACK | awk -F/ '{print $NF}'`
PACKDIRPRE=${PACK%${PACKSTRING}} # en dos pasos por si no tiene /
if test x"$PACKDIRPRE" = x/ ; then
PACKDIR=/
else
PACKDIR=${PACKDIRPRE%/}
fi
# 4 kind: file list (lf), metapacks (ebuild ubuild suma), binary
packs, source packs
METAEXT="ebuild ubuild summa"
LISTEXT="lf"
#KNOWN:
BINPKGEXT="tgz tbz2 deb rpm"
#SEE:
PKGEXT="tar.gz tgz tar.bz tar.bz2 tbz tbz2 ZIP sip jar gz Z z bz2 bz
7Z 7z RAR rar LHa LHA lha lzh a deb lzma xz rpm"
PACKTYPE=0 # EXIST EXTENSION
PACKEXT=""
# packtype
PACKNAMEVERS=$PACKSTRING
########################################3 test sobre archivos reales,
ver que pasa si no se quiere esto
# o sea proveer
# basename?
extsep $PACKSTRING "$BINPKGEXT" BINPKGEXT
if test x"$PACKEXT" = x ; then
extsep $PACKSTRING "$LISTEXT" LISTEXT
fi
if test x"$PACKEXT" = x ; then
PACKEXT=`echo $PACKSTRING | awk -F. '{print $NF}'`
PACKNOEXT=${PACKSTRING%.${PACKEXT}}
PACKTYPE=UNKNOWNEXT
fi
if test x"$PACKEXT" = x ; then
PACKNOEXT=$PACKSTRING
PACKTYPE=NOEXT
fi
case $PACKEXT in
ebuild|ubuild|tbz2)
#http://distfiles.gentoo.org/distfiles/pms-3.pdf
`echo $PACKNOEXT | sed -e
's/\(.*\)-\([[:digit:]]\+\(\.[[:digit:]]\+\)*\+[a-z]\?\(_\(alpha\|beta\|pre\|rc\|p\)[[:digit:]]*\)*\(-r[[:digit:]]\+\)\?\)$/export
PACKNAME=\1 PACKVERSION=\2/'`
#PACKNAME=sed -e
's/(.*\)\(-[[:digit:]]\+\(\.[[:digit:]]\+\)*\+[a-z]\?\(_\(alpha\|beta\|pre\|rc\|p\)[[:digit:]]*\)*\(-r[[:digit:]]\+\)\?\)$//'`
#PACKVERSION=`echo $PACK|cut -d- -f2-`
#if test x"$PACKVERSION" = x"$PACKNAME" ; then # esto es raro,
# PACKVERSION=''
# # que el cut ponga el primer campo si no hay segundo ver
# #PACKVERSION=0
# fi
#sed 's/-[0-9]\{1,\}.*$//'
;;
rpm)
PACKNAME=`echo $PACKNOEXT |sed 's/-[^-]*-[^-]*$//'`
PACKVERSIONPRE=${PACKNOEXT#${PACKNAME}} # primero el nombre por si es todo
PACKVERSION=${PACKVERSIONPRE#-}
# `echo $PACKNOEXT | sed -e
's/\([a-zA-Z0-9_\-\+]*\)-\([a-zA-Z0-9_\.]*\)-\([a-zA-Z0-9_\.]*\)\.\(noarch\|src\|noarch\|i386\|i686\|athlon\|ppc\|x86_64\)$/export
PACKNAME\="\1" PACKVERSION\="\2-\3.\4" PACKOV\="\2" PACKRV\="\3"
PACKARCH\="\4"/'`
#older systems do not have arch part, see
# my $name = $1;
# my $version = $2;
# my $release = $3;
# my $arch = $4;
#$ rpm -qp --qf '%{NAME}' some.rpm
#rpm -qa|sed 's/-[^-]*-[^-]*$//'
#RPM <name>-<version>-<release>.<architecture>.rpm
nano-0.98-2.i386.rpm libgnomeuimm-2.0-2.0.0-3.src.rpm
#A package label is contained within the file and does not necessarily
#need to match the name of the file.
#Additionally, libraries are distributed in two separate packages for
#each version. One contains the precompiled code, while the second one
#contains the development files such as headers, static library files,
#etc. for the library in question. Those packages have "-devel"
appended to their name field. Users need to carefully check so that
#the version of the development package matches that of the binary
#package, otherwise the library may not work very well.
;;
deb)
#DEB <foo>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
PACKNAME=`echo $PACKNOEXT | awk -F_ '{print $1}'`
PACKVERSIONPRE=${PACKNOEXT#${PACKNAME}} # en dos pasos por si el
nombre debian esta mal y no usa _
PACKVERSION=${PACKVERSIONPRE#_}
#\([a-z][a-z0-9\+\-\.]+\)_\([a-zA-Z0-9_\.]*\)-\([0-9a-zA-Z\+\.\~]+\)_\(noarch\|src\|noarch\|i386\|i686\|athlon\|ppc\|x86_64\)
#The name of the package itself (not the filename, just the name
of the package) can contain lowercase letters, numbers, and the "-"
and "+" characters.
#debian_revision
#This part of the version number specifies the version of the
Debian package based on the upstream version.
#It may contain only alphanumerics and the characters + . ~
(plus, full stop, tilde) and is compared in the same way as the
upstream_version is.
#It is optional; if it isn't present then the upstream_version
may not contain a hyphen.
#This format represents the case where a piece of software was
written specifically to be turned into a Debian package,
#and so there is only one "debianisation" of it and therefore no
revision indication is required.
#It is conventional to restart the debian_revision at 1 each time
the upstream_version is increased.
#The package management system will break the version number
apart at the last hyphen in the string
#(if there is one) to determine the upstream_version and
debian_revision. The absence of a debian_revision is equivalent to a
debian_revision of 0
#The VVV component is the version number specified by the upstream
#developer. There are no standards in place here, so the version number
#may have formats as different as "19990513" and "1.3.8pre1".
#The RRR component is the Debian revision number, and is specified by
#the Debian developer (or an individual user if he chooses to build the
#package himself). This number corresponds to the revision level of the
#Debian package, thus, a new revision level usually signifies changes
#in the Debian Makefile (debian/rules), the Debian control file
#(debian/control), the installation or removal scripts (debian/p*), or
#in the configuration files used with the package.
#The AAA component identifies the processor for which the package was
#built. This is commonly i386, which refers to chips compatible to
#Intel's 386 or later versions. For other possibilities review Debian's
#FTP directory structure at What are all those directories at the
#Debian FTP archives?, Section 6.7. For details, see the description of
#"Debian architecture" in the manual page dpkg-architecture(1).
#noarch i386 i686 athlon ppc src x86_64
#i386 ia64 alpha amd64 armeb arm hppa m32r m68k mips mipsel
powerpc ppc64 s390 s390x sh3 sh3eb sh4 sh4eb sparc darwin-i386
darwin-ia64 darwin-alpha darwin-amd64 darwin-armeb darwin-arm
darwin-hppa darwin-m32r darwin-m68k darwin-mips darwin-mipsel
darwin-powerpc darwin-ppc64 darwin-s390 darwin-s390x darwin-sh3
darwin-sh3eb darwin-sh4 darwin-sh4eb darwin-sparc freebsd-i386
freebsd-ia64 freebsd-alpha freebsd-amd64 freebsd-armeb freebsd-arm
freebsd-hppa freebsd-m32r freebsd-m68k freebsd-mips freebsd-mipsel
freebsd-powerpc freebsd-ppc64 freebsd-s390 freebsd-s390x freebsd-sh3
freebsd-sh3eb freebsd-sh4 freebsd-sh4eb freebsd-sparc kfreebsd-i386
kfreebsd-ia64 kfreebsd-alpha kfreebsd-amd64 kfreebsd-armeb
kfreebsd-arm kfreebsd-hppa kfreebsd-m32r kfreebsd-m68k kfreebsd-mips
kfreebsd-mipsel kfreebsd-powerpc kfreebsd-ppc64 kfreebsd-s390
kfreebsd-s390x kfreebsd-sh3 kfreebsd-sh3eb kfreebsd-sh4 kfreebsd-sh4eb
kfreebsd-sparc knetbsd-i386 knetbsd-ia64 knetbsd-alpha knetbsd-amd64
knetbsd-armeb knetbsd-arm knetbsd-hppa knetbsd-m32r knetbsd-m68k
knetbsd-mips knetbsd-mipsel knetbsd-powerpc knetbsd-ppc64 knetbsd-s390
knetbsd-s390x knetbsd-sh3 knetbsd-sh3eb knetbsd-sh4 knetbsd-sh4eb
knetbsd-sparc netbsd-i386 netbsd-ia64 netbsd-alpha netbsd-amd64
netbsd-armeb netbsd-arm netbsd-hppa netbsd-m32r netbsd-m68k
netbsd-mips netbsd-mipsel netbsd-powerpc netbsd-ppc64 netbsd-s390
netbsd-s390x netbsd-sh3 netbsd-sh3eb netbsd-sh4 netbsd-sh4eb
netbsd-sparc openbsd-i386 openbsd-ia64 openbsd-alpha openbsd-amd64
openbsd-armeb openbsd-arm openbsd-hppa openbsd-m32r openbsd-m68k
openbsd-mips openbsd-mipsel openbsd-powerpc openbsd-ppc64 openbsd-s390
openbsd-s390x openbsd-sh3 openbsd-sh3eb openbsd-sh4 openbsd-sh4eb
openbsd-sparc hurd-i386 hurd-ia64 hurd-alpha hurd-amd64 hurd-armeb
hurd-arm hurd-hppa hurd-m32r hurd-m68k hurd-mips hurd-mipsel
hurd-powerpc hurd-ppc64 hurd-s390 hurd-s390x hurd-sh3 hurd-sh3eb
hurd-sh4 hurd-sh4eb hurd-sparc ;;
;;
esac
if test x"$PACKNAME" = x"$PACKNOEXT" ; then
PACKVERSION=`echo $PACKNOEXT | awk -F- '{print $NF}'`
if test x"$PACKVERSION" = x"$PACKNOEXT" ; then
PACKVERSION=''
fi
PACKNAMEPRE=${PACKNOEXT%${PACKVERSION}} # en dos pasos por si no tiene -
PACKNAME=${PACKNAMEPRE%-}
fi
if test x"$PACKNAME" = x"$PACKNOEXT" ; then
PACKVERSION=`echo $PACKNOEXT | awk -F_ '{print $NF}'`
if test x"$PACKVERSION" = x"$PACKNOEXT" ; then
PACKVERSION=''
fi
PACKNAMEPRE=${PACKNOEXT%${PACKVERSION}} # en dos pasos por si no tiene -
PACKNAME=${PACKNAMEPRE%_}
fi
echo "PACKSTRING='$PACKSTRING'"
echo "PACKDIR='$PACKDIR'"
echo "PACKNAME='$PACKNAME'"
echo "PACKVERSION='$PACKVERSION'" #version and release
# no: si no hay version , version debe ser 0
echo "PACKEXT='$PACKEXT'"
echo "PACKTYPE='$PACKTYPE'"
echo "PACKCOMPLETENAME='$PACKNOEXT'" # without extension
SLASH=-
if test x"$PACKVERSION" = x ; then
SLASH=''
fi
echo "PACKCOMPLETENORMALIZEDNAME='$PACKNAME$SLASH$PACKVERSION'" #
without extension
--
Diego Saravia
Diego.Saravia en gmail.com
NO FUNCIONA->dsa en unsa.edu.ar
Más información sobre la lista de distribución Solar-general