diff --git a/bin/distr_info b/bin/distr_info new file mode 100755 index 0000000000000000000000000000000000000000..cab54e978cda126cb5e866e64c27ff677430ae9b --- /dev/null +++ b/bin/distr_info @@ -0,0 +1,295 @@ +#!/bin/sh +# Author: Vitaly Lipatov <lav@etersoft.ru> +# 2007, 2009, 2010, 2012 (c) Etersoft +# 2007 Public domain + +# Detect the distro and version +# Welcome to send updates! + +# You can set ROOTDIR to root system dir +#ROOTDIR= + +# Check for DISTRO specific file in /etc +distro() +{ + #[ -n "$ROOTDIR" ] || return + # fill global DISTROFILE + DISTROFILE="$ROOTDIR/etc/$1" + [ -f "$DISTROFILE" ] +} + +# Has a distro file the specified word? +has() +{ + [ -n "$DISTROFILE" ] || exit 1 + grep "$1" "$DISTROFILE" >/dev/null 2>&1 +} + +# Translate DISTRIB_ID to vendor name (like %_vendor does) +rpmvendor() +{ + [ "$DISTRIB_ID" = "ALTLinux" ] && echo "alt" && return + [ "$DISTRIB_ID" = "LinuxXP" ] && echo "lxp" && return + echo "$DISTRIB_ID" | tr "[A-Z]" "[a-z]" +} + +# Translate DISTRIB_ID name to package manner (like in the package release name) +pkgvendor() +{ + [ "$DISTRIB_ID" = "Mandriva" ] && echo "mdv" && return + rpmvendor +} + +# Print pkgtype (need DISTRIB_ID var) +pkgtype() +{ + case `pkgvendor` in + freebsd) echo "tbz" ;; + sunos) echo "pkg.gz" ;; + slackware|mopslinux) echo "tgz" ;; + archlinux) echo "tar.xz" ;; + gentoo) echo "tbz2" ;; + windows) echo "exe" ;; + debian|ubuntu|mint|runtu) echo "deb" ;; + alt|asplinux|suse|mandriva|mandrake|pclinux|sled|sles) + echo "rpm" ;; + fedora|redhat|scientific|centos|rhel) + echo "rpm" ;; + *) echo "rpm" ;; + esac +} + +get_var() +{ + grep -i "^$1 *=" | head -n 1 | sed -e "s/^[^=]*[ \t]*=[ \t]*//" + +} + +# 2010.1 -> 2010 +get_major_version() +{ + echo "$1" | sed -e "s/\..*//g" +} + +# Default values +DISTRIB_ID="Generic" +DISTRIB_RELEASE="" + +# Default with LSB +if distro lsb-release ; then + DISTRIB_ID=`cat $DISTROFILE | get_var DISTRIB_ID` + DISTRIB_RELEASE=`cat $DISTROFILE | get_var DISTRIB_RELEASE` +fi + +# ALT Linux based +if distro altlinux-release ; then + DISTRIB_ID="ALTLinux" + if has Strawberry ; then DISTRIB_RELEASE="2.3" + elif has Citron ; then DISTRIB_RELEASE="2.4" + elif has 20050723 ; then DISTRIB_RELEASE="3.0" + elif has Ajuga ; then DISTRIB_RELEASE="4.0" + elif has 20070810 ; then DISTRIB_RELEASE="4.0" + elif has "ALT Linux 4.0" ; then DISTRIB_RELEASE="4.0" + elif has "ALT Linux 4.1" ; then DISTRIB_RELEASE="4.1" + elif has Walnut ; then DISTRIB_RELEASE="4.0" + elif has 5.0 ; then DISTRIB_RELEASE="5.0" + elif has Desktop ; then DISTRIB_RELEASE="4.0" + elif has 5.1 ; then DISTRIB_RELEASE="5.1" + elif has Ziziphora ; then DISTRIB_RELEASE="5.1" + elif has "ALT Linux p5" ; then DISTRIB_RELEASE="p5" + elif has "ALT Linux p6" ; then DISTRIB_RELEASE="p6" + elif has "ALT Linux p7" ; then DISTRIB_RELEASE="p7" + elif has 6.0 ; then DISTRIB_RELEASE="p6" + elif has Centaurea ; then DISTRIB_RELEASE="p6" + elif has Sisyphus ; then DISTRIB_RELEASE="Sisyphus" + fi + +elif distro gentoo-release ; then + DISTRIB_ID="Gentoo" + DISTRIB_RELEASE=`basename $(readlink $ROOTDIR/etc/make.profile)` + +# Slackware based +elif distro mopslinux-version ; then + DISTRIB_ID="MOPSLinux" + if has 4.0 ; then DISTRIB_RELEASE="4.0" + elif has 5.0 ; then DISTRIB_RELEASE="5.0" + elif has 5.1 ; then DISTRIB_RELEASE="5.1" + elif has 6.0 ; then DISTRIB_RELEASE="6.0" + elif has 6.1 ; then DISTRIB_RELEASE="6.1" + fi +elif distro slackware-version ; then + DISTRIB_ID="Slackware" + if has 10.2 ; then DISTRIB_RELEASE="10.2" + elif has 11 ; then DISTRIB_RELEASE="11" + elif has 11.1 ; then DISTRIB_RELEASE="11.1" + elif has 12 ; then DISTRIB_RELEASE="12" + fi + +elif distro arch-release ; then + DISTRIB_ID="ArchLinux" + DISTRIB_RELEASE="2010" + if grep 2011 -q $ROOTDIR/etc/pacman.d/mirrorlist ; then + DISTRIB_RELEASE="2011" + fi + +# for Ubuntu use standard LSB info +elif [ "$DISTRIB_ID" = "Ubuntu" ] && [ -n "$DISTRIB_RELEASE" ]; then + # use LSB version + true + +# Debian based +elif distro debian_version ; then + DISTRIB_ID="Debian" + DISTRIB_RELEASE=`cat $DISTROFILE` + + +# Mandriva based +elif distro pclinuxos-release ; then + DISTRIB_ID="PCLinux" + if has "2007" ; then DISTRIB_RELEASE="2007" + elif has "2008" ; then DISTRIB_RELEASE="2008" + elif has "2010" ; then DISTRIB_RELEASE="2010" + fi + +elif distro mandriva-release || distro mandrake-release ; then + DISTRIB_ID="Mandriva" + if has 2005 ; then DISTRIB_RELEASE="2005" + elif has 2006 ; then DISTRIB_RELEASE="2006" + elif has 2007 ; then DISTRIB_RELEASE="2007" + elif has 2008 ; then DISTRIB_RELEASE="2008" + elif has 2009.0 ; then DISTRIB_RELEASE="2009.0" + elif has 2009.1 ; then DISTRIB_RELEASE="2009.1" + else + # use /etc/lsb-release info by default + true + fi + +# Fedora based +elif distro linux-xp-release || distro lxp-release; then + DISTRIB_ID="LinuxXP" + if has "Attack of the Clones" ; then DISTRIB_RELEASE="2006" + elif has "2007" ; then DISTRIB_RELEASE="2007" + elif has "2008" ; then DISTRIB_RELEASE="2008" + elif has "2009" ; then DISTRIB_RELEASE="2009" + fi + +elif distro asplinux-release ; then + DISTRIB_ID="ASPLinux" + if has Karelia ; then DISTRIB_RELEASE="10" + elif has Seliger ; then DISTRIB_RELEASE="11" + elif has "11.1" ; then DISTRIB_RELEASE="11.1" + elif has Ladoga ; then DISTRIB_RELEASE="11.2" + elif has "11.2" ; then DISTRIB_RELEASE="11.2" + elif has "12" ; then DISTRIB_RELEASE="12" + elif has "13" ; then DISTRIB_RELEASE="13" + elif has "14" ; then DISTRIB_RELEASE="14" + elif has "15" ; then DISTRIB_RELEASE="15" + fi + +elif distro MCBC-release ; then + DISTRIB_ID="MCBC" + if has 3.0 ; then DISTRIB_RELEASE="3.0" + elif has 3.1 ; then DISTRIB_RELEASE="3.1" + fi + +elif distro fedora-release ; then + DISTRIB_ID="Fedora" + DISTRIB_RELEASE=$(cat "$DISTROFILE" | grep "release" | sed -e "s|.*release \([0-9]*\).*|\1|g") + +elif distro redhat-release ; then + # FIXME if need + # actually in the original RHEL: Red Hat Enterprise Linux .. release N + DISTRIB_ID="RHEL" + if has CentOS ; then + DISTRIB_ID="CentOS" + elif has Scientific ; then + DISTRIB_ID="Scientific" + fi + if has Beryllium ; then + DISTRIB_ID="Scientific" + DISTRIB_RELEASE="4.1" + elif has Shrike ; then + DISTRIB_ID="RedHat" + DISTRIB_RELEASE="9" + elif has Taroon ; then DISTRIB_RELEASE="3" + elif has "release 4" ; then DISTRIB_RELEASE="4" + elif has "release 5" ; then DISTRIB_RELEASE="5" + elif has "release 6" ; then DISTRIB_RELEASE="6" + elif has "release 7" ; then DISTRIB_RELEASE="7" + fi + +# SUSE based +elif distro SuSe-release || distro SuSE-release ; then + DISTRIB_ID="SUSE" + DISTRIB_RELEASE=$(cat "$DISTROFILE" | grep "VERSION" | sed -e "s|^VERSION = ||g") + if has "SUSE Linux Enterprise Desktop" ; then + DISTRIB_ID="SLED" + elif has "SUSE Linux Enterprise Server" ; then + DISTRIB_ID="SLES" + fi + +# fixme: can we detect by some file? +elif [ `uname` = "FreeBSD" ] ; then + DISTRIB_ID="FreeBSD" + UNAME=$(uname -r) + DISTRIB_RELEASE=$(echo "$UNAME" | grep RELEASE | sed -e "s|\([0-9]\.[0-9]\)-RELEASE|\1|g") + +# fixme: can we detect by some file? +elif [ `uname` = "SunOS" ] ; then + DISTRIB_ID="SunOS" + DISTRIB_RELEASE=$(uname -r) + +# try use standart LSB info by default +elif distro lsb-release && [ -n "$DISTRIB_RELEASE" ]; then + # use LSB + true +fi + +case $1 in + -p) + # override DISTRIB_ID + test -n "$2" && DISTRIB_ID="$2" + pkgtype + exit 0 + ;; + -h) + echo "distr_vendor - system name and version detection" + echo "Usage: distr_vendor [options] [args]" + echo "-p [SystemName] - print type of packaging system" + echo "-d - print distro name" + echo "-v - print version of distro" + echo "-e - print full name of distro with version (by default)" + echo "-s [SystemName] - print name of distro for build system (like in the package release name)" + echo "-n [SystemName] - print vendor name (as _vendor macros in rpm)" + echo "-V - print the version of $0" + echo "-h - this help" + exit 0 + ;; + -d) + echo $DISTRIB_ID + ;; + -v) + echo $DISTRIB_RELEASE + ;; + -s) + # override DISTRIB_ID + test -n "$2" && DISTRIB_ID="$2" + pkgvendor + exit 0 + ;; + -n) + # override DISTRIB_ID + test -n "$2" && DISTRIB_ID="$2" + rpmvendor + exit 0 + ;; + -V) + echo "20120519" + exit 0 + ;; + *) + # if run without args, just printout Name/Version of the current system + [ -n "$DISTRIB_RELEASE" ] && echo $DISTRIB_ID/$DISTRIB_RELEASE || echo $DISTRIB_ID + ;; +esac + diff --git a/bin/epm b/bin/epm index 1eea4c744ff95b758ee06c5e2547570e94bce20d..00495c8e45403ff4e3b8a6549209bd809a2e3818 100755 --- a/bin/epm +++ b/bin/epm @@ -115,7 +115,8 @@ pkg_filenames=$(strip_spaces "$pkg_files $pkg_names") echover "pkg_files=$pkg_files" echover "pkg_names=$pkg_names" -DISTRVENDOR=distr_vendor +# Fill for use: PMTYPE, DISTRNAME, DISTRVERSION, PKGFORMAT, PKGVENDOR, RPMVENDOR +DISTRVENDOR=$PROGDIR/distr_info [ -n "$DISTRNAME" ] || DISTRNAME=$($DISTRVENDOR -d) [ -n "$DISTRVERSION" ] || DISTRVERSION=$($DISTRVENDOR -v) set_target_pkg_env diff --git a/bin/epm-sh-functions b/bin/epm-sh-functions index 592f62d32c559db0f339474bd0085983a1dcefd0..ed1d58b5c77b6e4bc34e0d69b3736d4e04242d17 100644 --- a/bin/epm-sh-functions +++ b/bin/epm-sh-functions @@ -27,7 +27,6 @@ echover() # Used DISTRNAME set_target_pkg_env() { - [ "$($DISTRVENDOR -V)" -ge "20120519" ] || fatal "update rpm-build-altlinux-compat package to get new $DISTRVENDOR command" [ -n "$DISTRNAME" ] || fatal "Run set_target_pkg_env without DISTRNAME" PKGFORMAT=$($DISTRVENDOR -p "$DISTRNAME") PKGVENDOR=$($DISTRVENDOR -s "$DISTRNAME")