From fa04c30d6c443ce620750cec8b6ed6c40001feab Mon Sep 17 00:00:00 2001 From: TolaMironcenko Date: Mon, 19 May 2025 17:17:35 +0700 Subject: [PATCH] added check package versions #11 --- Makefile | 4 +- src/pm | 278 ++++++++++++++++++++++++++++--------------------------- 2 files changed, 144 insertions(+), 138 deletions(-) diff --git a/Makefile b/Makefile index 20e8116..aaa74d1 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,6 @@ DESTDIR=/ install: @if [ ! -d ${DESTDIR}/etc/pm ]; then \ mkdir -p ${DESTDIR}/etc/pm; \ - # touch ${DESTDIR}/etc/pm/repo; \ fi @if [ ! -d ${DESTDIR}/tmp ]; then \ mkdir -p ${DESTDIR}/tmp; \ @@ -14,7 +13,6 @@ install: fi @if [ ! -d ${DESTDIR}/usr/share/pm ]; then \ mkdir -p ${DESTDIR}/usr/share/pm/{packages,repos}; \ - # touch ${DESTDIR}/usr/share/pm/query; \ fi @if [ ! -d ${DESTDIR}/var/cache/pm/pkg ]; then \ mkdir -p ${DESTDIR}/var/cache/pm/pkg; \ @@ -51,4 +49,4 @@ clean: fi @if [ -f pm.pkg.gz ]; then \ rm pm.pkg.gz; \ - fi \ No newline at end of file + fi diff --git a/src/pm b/src/pm index 560cbaa..92ee9bf 100755 --- a/src/pm +++ b/src/pm @@ -34,56 +34,40 @@ BGREEN="\033[1;32m" #------------ check status function ------------ check() { - if [ $1 -ne 0 ]; then - printf "$BBLUE**$BWHITE $2 [$BRED ERROR $BWHITE]\n$RESET" - exit $1 - fi + [ $1 -ne 0 ] \ + && printf "$BBLUE**$BWHITE $2 [$BRED ERROR $BWHITE]\n$RESET" \ + && exit $1 printf "$BBLUE**$BWHITE $2 [$BGREEN SUCCESS $BWHITE]\n$RESET" } #----------------------------------------------- #---------------- check root priveleges function ------------------------ checkroot() { - if [[ $(id -u) != 0 ]]; then - printf "$BBLUE**$BWHITE You must be root [$BRED ERROR $BWHITE]\n$RESET" - exit 1 - fi + [[ $(id -u) != 0 ]] \ + && printf "$BBLUE**$BWHITE You must be root [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 } #------------------------------------------------------------------------ +# check non root priveleges function +checknonroot() { + [[ $(id -u) == 0 ]] \ + && printf "$BBLUE**$BWHITE You must be non root [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 +} +# ---------------------------------- + #----------------- add(install) package function ------------------------ add() { shift 1 - if [[ "$1" == "" ]]; then - help - exit 0 - fi + [[ "$1" == "" ]] \ + && help \ + && exit 0 for i in $@; do - case $i in - add|a) - continue - ;; - esac + down $i done for i in $@; do - case $i in - add|a) - continue - ;; - *) - down $i - ;; - esac - done - for i in $@; do - case $i in - add|a) - continue - ;; - *) - unpack $cachedpkgdir/$i.pkg.gz - ;; - esac + unpack $cachedpkgdir/$i*.pkg.gz done } a() { @@ -93,10 +77,9 @@ a() { #-------------------- download package without install function --------- down() { - if [[ ! $1 ]]; then - help - exit 0 - fi + [[ ! $1 ]] \ + && help \ + && exit 0 servers=$(/usr/bin/cat $repofile) check $? "Read repositories" for i in $servers; do @@ -104,24 +87,25 @@ down() { serverdir=$(echo $serverdir | sed -e "/ftp:\/\//s///") repoquery=$(/usr/bin/cat $reposquerydir/$serverdir/query | sed -e '/.pkg.gz/s///') for j in $repoquery; do - if [[ $j == $1 ]]; then - if [ ! -f $cachedpkgdir/$1.pkg.gz ]; then + # echo $(get_pkgname $j) $(get_pkgname $1) + if [[ "$(get_pkgname $j)" == "$1" ]]; then + if [ ! -f $cachedpkgdir/$j.pkg.gz ]; then printf "$YELLOW**$RESET Downloading $YELLOW$serverdir: $Bwhite$j\n$RESET" - echo $i/$1.pkg.gz - wget $i/$1.pkg.gz -P $cachedpkgdir + echo $i/$j.pkg.gz + wget $i/$j.pkg.gz -P $cachedpkgdir check $? "Download package" # if [[ "$?" == "0" ]]; then # printf "$YELLOW**$GREEN successful downloaded $1\n$RESET" # return - # else + # else # printf "$YELLOW**$RED error:$RESET can't download package\n" # exit 1 # fi else printf "$YELLOW**$GREEN successful downloaded $1\n$RESET" return - fi - return + fi + return fi done done @@ -135,28 +119,32 @@ download() { #-------------------- unpack local package archive ---------------------- unpack() { + [[ "$1" == "" ]] \ + && printf "$BBLUE**$BWHITE Specify package name [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 packagename=$(echo $1 | sed -e "/.gz/s///") packagename=${packagename#*pkg/} printf "$YELLOW**$GREEN Installing ${packagename%.pkg*}\n$RESET" - if [ ! -f $packagesqueryfile ]; then - printf "$BBLUE**$BWHITE Can't find $packagesqueryfile [$BRED ERROR $BWHITE]\n$RESET" - fi + [ ! -f $packagesqueryfile ] \ + && printf "$BBLUE**$BWHITE Can't find $packagesqueryfile [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 installed=false for i in $(/usr/bin/cat $packagesqueryfile); do - if [ "$i" = "${packagename%.pkg*}" ]; then - export installed=true - break - fi + [ "$i" = "${packagename%.pkg*}" ] \ + && export installed=true \ + && break done - if [[ "$installed" == "true" ]]; then - printf "$YELLOW**$RESET Package already installed:$YELLOW reinstalling\n$RESET" - fi + [[ "$installed" == "true" ]] \ + && printf "$YELLOW**$RESET Package already installed:$YELLOW reinstalling\n$RESET" tar -xvf $1 -C $rootdir/tmp &> /dev/null cd $rootdir/tmp/$packagename + [ -f pre_install ] \ + && /usr/bin/sh -c ./pre_install \ + && rm -v pre_install &> /dev/null if [ -f deps ]; then printf "$YELLOW**$GREEN Checking deps\n$RESET" deps=$(/usr/bin/cat deps) - for dep in $deps; do + for dep in $deps; do have=false for pack in $(/usr/bin/cat $packagesqueryfile); do if [ $pack = $dep ]; then @@ -176,17 +164,18 @@ unpack() { fi mkdir $installedpackagesdir/$packagename &> /dev/null mv -v list $installedpackagesdir/$packagename &> /dev/null + [ -f pre_delete ] \ + && mv -v pre_delete $installedpackagesdir/$packagename &> /dev/null + [ -f post_delete ] \ + && mv -v post_delete $installedpackagesdir/$packagename &> /dev/null cp -r ./* $rootdir/ - if [ -f $rootdir/post_install ]; then - rm $rootdir/post_install - fi - if [ -f $rootdir/tmp/$packagename/post_install ]; then - printf "$YELLOW**$GREEN post_install script ${packagename%.pkg*}\n$RESET" - /usr/bin/sh -c $rootdir/tmp/$packagename/post_install &> /dev/null - fi - if [[ "$installed" == "false" ]]; then - echo ${packagename%.pkg*} >> $packagesqueryfile - fi + [ -f $rootdir/post_install ] \ + && rm $rootdir/post_install + [ -f $rootdir/tmp/$packagename/post_install ] \ + && printf "$YELLOW**$GREEN post_install script ${packagename%.pkg*}\n$RESET" \ + && /usr/bin/sh -c $rootdir/tmp/$packagename/post_install &> /dev/null + [[ "$installed" == "false" ]] \ + && echo ${packagename%.pkg*} >> $packagesqueryfile rm -rv $rootdir/tmp/$packagename &> /dev/null printf "$YELLOW**$GREEN Installed ${packagename%.pkg*} successful\n$RESET" } @@ -201,24 +190,25 @@ del() { shift 1 for i in $@; do printf "$YELLOW**$GREEN deleting $i\n$RESET" - if [ ! -f $installedpackagesdir/$i.pkg/list ]; then - printf "$BBLUE**$BWHITE package not installed ($i) [$BRED ERROR $BWHITE]\n$RESET" - exit 1 - fi - for file in $(/usr/bin/cat $installedpackagesdir/$i.pkg/list); do + [ ! -f $installedpackagesdir/$i*.pkg/list ] \ + && printf "$BBLUE**$BWHITE package not installed ($i) [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 + [ -f $installedpackagesdir/$i*.pkg/pre_delete ] \ + && /usr/bin/sh -c $installedpackagesdir/$i*.pkg/pre_delete + for file in $(/usr/bin/cat $installedpackagesdir/$i*.pkg/list); do rm -v $rootdir/$file done - # rm -v $rootdir/$(/usr/bin/cat $installedpackagesdir/$i.pkg/list) - rm -rv $installedpackagesdir/$i.pkg &> /dev/null + rm -rv $installedpackagesdir/$i*.pkg &> /dev/null packs=$(cat $packagesqueryfile) rm $packagesqueryfile for pack in $packs; do - if [ "$pack" = "$i" ]; then + if [ "$(get_pkgname $pack)" = "$i" ]; then continue fi echo $pack >> $packagesqueryfile done - # sed -i "s/$i/d" $packagesqueryfile + [ -f $installedpackagesdir/$i*.pkg/post_delete ] \ + && /usr/bin/sh -c $installedpackagesdir/$i*.pkg/post_delete printf "$YELLOW**$GREEN delete $i successful\n$RESET" done } @@ -231,18 +221,17 @@ d() { list() { if [[ "$1" == "" ]]; then for i in $(/usr/bin/cat $packagesqueryfile); do - filelist=$(/usr/bin/cat $installedpackagesdir/$i.pkg/list) + filelist=$(/usr/bin/cat $installedpackagesdir/$i*.pkg/list) for j in $filelist; do printf "$YELLOW$i: $BWHITE$j$RESET\n" done done exit 0 fi - if [[ "$(/usr/bin/cat $packagesqueryfile | grep $1)" == "" ]]; then - printf "$BBLUE**$BWHITE Package is not installed [$BRED ERROR $BWHITE]\n$RESET" - exit 1 - fi - filelist=$(/usr/bin/cat $installedpackagesdir/$1.pkg/list) + [[ "$(/usr/bin/cat $packagesqueryfile | grep $1)" == "" ]] \ + && printf "$BBLUE**$BWHITE Package is not installed [$BRED ERROR $BWHITE]\n$RESET" \ + && exit 1 + filelist=$(/usr/bin/cat $installedpackagesdir/$1*.pkg/list) for i in $filelist; do printf "$YELLOW$1: $BWHITE$i$RESET\n" done @@ -251,16 +240,30 @@ l() { list $1 } #------------------------------------------------------------------------ +get_pkgrel() { + echo $(echo $1 | awk -F'-' '{ print $NF }') +} + +get_pkgver() { + echo $(echo $1 | awk -F'-' '{ print $(NF-1) }') +} + +get_pkgname() { + echo $( echo $(echo $1 | awk -F'-' '{ for (i=NF-2; i>=1; i--) print $i }') | awk -F' ' '{ if (NF==1) { print $NF } else { for (i=NF; i >= 1; i--) { if (i-1 >= 1) { printf $i "-" } else { printf $i } } } }') +} + +printpkg() { + printf "$BWHITE$(get_pkgname $1) $BGREEN$(get_pkgver $1)-$(get_pkgrel $1)\n$RESET" +} #------------------- show installed packages function ------------------- query() { packagesquery=$(/usr/bin/cat $packagesqueryfile) - if [[ "$packagesquery" == "" ]]; then - printf "$YELLOW**$BWHITE No installed packages\n$RESET" - exit 0 - fi + [[ "$packagesquery" == "" ]] \ + && printf "$YELLOW**$BWHITE No installed packages\n$RESET" \ + && exit 0 for i in $packagesquery; do - printf "$BWHITE$i\n$RESET" + printpkg $i done } q() { @@ -283,18 +286,7 @@ help() { clear - clear all package archives from cached packages directory sync, s - synchronize repository deps [package name] - show package dependencies - - $YELLOW**$GREEN examples$RESET : - $BWHITE pm add dnsmasq - pm unpack ./dnsmasq.pkg.gz - pm down dnsmasq - pm search dnsmasq - pm help - pm clear - pm sync - pm del dnsmasq - pm list dnsmasq - pm query + build - build package (./ must contain PMBUILD) \n$RESET" } #------------------------------------------------------------------------ @@ -325,7 +317,17 @@ search() { serverdir=$(echo $serverdir | sed -e "/ftp:\/\//s///") repoquery=$(/usr/bin/cat $reposquerydir/$serverdir/query | sed -e '/.pkg.gz/s///') for j in $repoquery; do - printf "$YELLOW$serverdir: $BWHITE$j\n$RESET" + installed=false + for inst in $(/usr/bin/cat $packagesqueryfile); do + # echo $inst + [ "$(get_pkgname $inst)" = "$(get_pkgname $j)" ] \ + && export installed=true \ + && break + done + printf "$YELLOW$serverdir: $BWHITE$(get_pkgname $j) $BGREEN$(get_pkgver $j)-$(get_pkgrel $j) $RESET" + [[ "$installed" == "true" ]] \ + && printf "$BBLUE[installed]\n$RESET" \ + || echo "" done done exit 0 @@ -357,14 +359,12 @@ clear() { #--- show package dependencies function --- deps() { - if [ "$1" = "" ]; then - help - exit 1 - fi - if [ ! -f $installedpackagesdir/$1.pkg/deps ]; then - printf "$YELLOW**$BWHITE No deps\n$RESET" - exit 0 - fi + [ "$1" = "" ] \ + && help \ + && exit 1 + [ ! -f $installedpackagesdir/$1.pkg/deps ] \ + && printf "$YELLOW**$BWHITE No deps\n$RESET" \ + && exit 0 cat $installedpackagesdir/$1.pkg/deps } #------------------------------------------ @@ -376,6 +376,7 @@ buildpkg() { source $1 else printf "$BBLUE**$BWHITE Can't find PMBUILD [$BRED ERROR $BWHITE]\n$RESET" + exit 1 fi else source ./PMBUILD @@ -388,26 +389,25 @@ buildpkg() { else [ -d pkg ] && rm -r pkg [ -d src ] && rm -r src - [ -f $pkgname-$pkgver-$pkgrel.pkg.gz ] && rm -r $pkgname-$pkgver-$pkgrel.pkg.gz + [ -f $pkgname-$pkgver-$pkgrel.pkg.gz ] \ + && rm -r $pkgname-$pkgver-$pkgrel.pkg.gz fi fi [ ! -d src ] && mkdir -p src - [ ! -d pkg/$pkgname-$pkgver-$pkgrel.pkg ] && mkdir -p pkg/$pkgname-$pkgver-$pkgrel.pkg + [ ! -d pkg/$pkgname-$pkgver-$pkgrel.pkg ] \ + && mkdir -p pkg/$pkgname-$pkgver-$pkgrel.pkg export pkgdir=$buildroot/pkg/$pkgname-$pkgver-$pkgrel.pkg - if [ "$srcdir" = "" ]; then - export srcdir=$buildroot/src/$pkgname - fi - if [ "$gitsource" != "" ]; then - printf "$BBLUE**$BWHITE Downloading sources\n$RESET" - git clone $gitsource $srcdir - check $? "Download sources" - fi + [ "$srcdir" = "" ] && export srcdir=$buildroot/src/$pkgname + [ "$gitsource" != "" ] \ + && printf "$BBLUE**$BWHITE Downloading sources\n$RESET" \ + && git clone $gitsource $srcdir \ + && check $? "Download sources" if [ "$source" != "" ]; then printf "$BBLUE**$BWHITE Downloading sources\n$RESET" [ ! -d $srcdir ] && mkdir -p $srcdir cd $srcdir [ ! -f $pkgname-$pkgver.tar.* ] && wget $source - cd - + cd - fi if [[ $(type -t configure) = function ]]; then printf "$BBLUE**$BWHITE Configuring package\n$RESET" @@ -457,20 +457,28 @@ buildpkg() { #----------------------------------------------------- #--- main --- -case "$1" in - add|a|del|d) - checkroot - "$1" $@ - ;; - query|q|s|sync|clear|ss|search|list|l|unpack|u|down|download|deps) - checkroot - "$1" $2 - ;; - build) - buildpkg $2 - ;; - *) - help - ;; -esac +main() { + case "$1" in + add|a|del|d) + checkroot + "$1" $@ + ;; + s|sync|clear|unpack|u|down|download) + checkroot + "$1" $2 + ;; + query|q|search|ss|list|l|deps) + "$1" $2 + ;; + build) + checknonroot + buildpkg $2 + ;; + *) + help + ;; + esac +} #------------ + +main $@