initial commit

This commit is contained in:
wt
2024-12-25 00:35:44 +07:00
commit 58c22835e5
3 changed files with 346 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
DESTDIR=/
install:
if [ ! -d ${DESTDIR}/etc/pm ]; then \
mkdir -pv ${DESTDIR}/etc/pm; \
touch ${DESTDIR}/etc/pm/repo; \
fi
if [ ! -d ${DESTDIR}/tmp ]; then \
mkdir -pv ${DESTDIR}/tmp; \
fi
if [ ! -d ${DESTDIR}/usr/bin ]; then \
mkdir -pv ${DESTDIR}/usr/bin; \
fi
if [ ! -d ${DESTDIR}/usr/share/pm ]; then \
mkdir -pv ${DESTDIR}/usr/share/pm/{packages,repos}; \
touch ${DESTDIR}/usr/share/pm/query; \
fi
if [ ! -d ${DESTDIR}/var/cache/pm/pkg ]; then \
mkdir -pv ${DESTDIR}/var/cache/pm/pkg; \
fi
uninstall:
if [ -d ${DESTDIR}/etc/pm ]; then \
rm -rv ${DESTDIR}/etc/pm; \
fi
if [ -d ${DESTDIR}/usr/share/pm ]; then \
rm -rv ${DESTDIR}/usr/share/pm; \
fi
if [ -d ${DESTDIR}/var/cache/pm ]; then \
rm -rv ${DESTDIR}/var/cache/pm; \
fi
if [ -f ${DESTDIR}/usr/bin/pm ]; then \
rm -v ${DESTDIR}/usr/bin/pm; \
fi
+25
View File
@@ -0,0 +1,25 @@
# PM - package manager for simple linux
## Filetree
```
/
├── etc
│ └── pm
│ └── repo
├── tmp
├── usr
│ ├── bin
│ │ └── pm
│ └── share
│ └── pm
│ ├── packages
│ ├── query
│ └── repos
│ └── localhost
│ └── query
└── var
└── cache
└── pm
└── pkg
```
Executable
+286
View File
@@ -0,0 +1,286 @@
#!/bin/sh
########## #### ####
########## #### ####
## ## ## ## ## ##
## ## ## ## ## ##
########## ## ## ## - PACKAGE MANAGER FOR SIMPLE LINUX
########## ## ## ## - AUTHOR -- TOLA MIRONCENKO
## ## ##
## ## ##
## ## ##
## ## ##
#---------------- variables --------------------------
rootdir=/home/tola/Documents/linux/pm/rootfs
repofile=$rootdir/etc/pm/repo
packagesqueryfile=$rootdir/usr/share/pm/query
reposquerydir=$rootdir/usr/share/pm/repos
cachedpkgdir=$rootdir/var/cache/pm/pkg
installedpackagesdir=$rootdir/usr/share/pm/packages
#-----------------------------------------------------
#----- colors -------
RESET="\033[0m"
GREEN="\033[0;32m"
RED="\033[0;31m"
BRED="\033[1;31m"
YELLOW="\033[1;33m"
BWHITE="\033[1;37m"
#--------------------
#---------------- check root priveleges function ------------------------
checkroot() {
if [[ $(id -u) != 0 ]]; then
printf "$YELLOW**$BRED error:$RESET you must be root\n"
exit 1
fi
}
checkroot
#------------------------------------------------------------------------
#----------------- add(install) package function ------------------------
add() {
if [[ "$1" == "" ]]; then
help
exit 0
fi
for i in $*; do
if [[ "$i" == "add" ]]; then
continue
fi
done
for i in $*; do
if [[ "$i" == "add" ]]; then
continue
fi
down $i
done
for i in $*; do
if [[ "$i" == "add" ]]; then
continue
fi
unpack $cachedpkgdir/$i.pkg.gz
done
}
#------------------------------------------------------------------------
#-------------------- download package without install function ---------
down() {
if [[ ! $1 ]]; then
help
exit 0
fi
servers=$(/usr/bin/cat $repofile)
for i in $servers; do
serverdir=$(echo $i | sed -e "/http:\/\//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
printf "$YELLOW**$RESET Downloading $YELLOW$serverdir: $Bwhite$j\n$RESET"
wget $i/$1.pkg.gz -P $cachedpkgdir
if [[ "$?" == "0" ]]; then
printf "$YELLOW**$GREEN successful downloaded $1\n$RESET"
return
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
# exit 0
fi
done
done
printf "$YELLOW**$RED error:$RESET can't find package $1\n"
exit 1
}
#------------------------------------------------------------------------
#-------------------- unpack local package archive ----------------------
unpack() {
packagename=$(echo $1 | sed -e "/.gz/s///")
packagename=${packagename#*pkg/}
printf "$YELLOW**$GREEN Installing ${packagename%.pkg*}\n$RESET"
if [[ "$(/usr/bin/cat $packagesqueryfile | grep ${packagename%.pkg*})" != "" ]]; then
printf "$YELLOW**$RESET Package already installed:$YELLOW reinstalling\n"
fi
tar -xvf $1 -C $rootdir/tmp &> /dev/null
cd $rootdir/tmp/$packagename
mkdir $installedpackagesdir/$packagename &> /dev/null
mv -v list $installedpackagesdir/$packagename &> /dev/null
cp -rv ./* $rootdir &> /dev/null
if [ -f $rootdir/tmp/$packagename/post_install ]; then
sh -c $rootdir/tmp/$packagename/post_install
fi
if [[ "$(/usr/bin/cat $packagesqueryfile | grep ${packagename%.pkg*})" == "" ]]; then
echo ${packagename%.pkg*} >> $packagesqueryfile
fi
rm -rv $rootdir/tmp/$packagename &> /dev/null
printf "$YELLOW**$GREEN Installed ${packagename%.pkg*} successful\n$RESET"
}
#------------------------------------------------------------------------
#------------------ delete package function -----------------------------
del() {
printf "$YELLOW**$GREEN deleting\n$RESET"
for i in $*; do
if [[ "$i" == "del" ]]; then
continue
fi
printf "$YELLOW**$GREEN deleting $i\n$RESET"
if [ ! -f $installedpackagesdir/$i.pkg/list ]; then
printf "$YELLOW**$BRED error:$RESET package not installed\n"
exit 0
fi
rm -v $rootdir/$(/usr/bin/cat $installedpackagesdir/$i.pkg/list) &> /dev/null
rm -rv $installedpackagesdir/$i.pkg &> /dev/null
sed -i "/$i/d" $packagesqueryfile
printf "$YELLOW**$GREEN delete $i successful\n$RESET"
done
}
#------------------------------------------------------------------------
#------------------- list files in package function ---------------------
list() {
if [[ "$1" == "" ]]; then
help
exit 0
fi
if [[ "$(/usr/bin/cat $packagesqueryfile | grep $1)" == "" ]]; then
printf "$YELLOW**$BRED error:$RESET package is not installed\n"
exit 1
fi
filelist=$(/usr/bin/cat $installedpackagesdir/$1.pkg/list)
for i in $filelist; do
printf "$YELLOW$1: $BWHITE$i$RESET\n"
done
}
#------------------------------------------------------------------------
#------------------- show installed packages function -------------------
query() {
packagesquery=$(/usr/bin/cat $packagesqueryfile)
if [[ "$packagesquery" == "" ]]; then
printf "$YELLOW**$BWHITE No installed packages\n"
exit 0
fi
printf "$packagesquery\n"
}
#------------------------------------------------------------------------
#--------------------- show help function -------------------------------
help() {
printf "
$YELLOW**$GREEN pm usage$RESET :
$BWHITE pm add [package name] - download and install from repository
pm unpack [/path/to/package/archive] - unpack(install) from local package archive
pm down [package name] - download package from repository without install
pm del [package name] - delete package
pm list [package name] - list files in package
pm search [package name] - search package in repository
pm query - show installed packages
pm help - this help message
pm clear - clear all package archives from cached packages directory
pm sync - synchronize repository
$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
\n$RESET"
}
#------------------------------------------------------------------------
#------------------- sync repo function ---------------------------------
sync() {
servers=$(/usr/bin/cat $repofile)
for i in $servers; do
serverdir=$(echo $i | sed -e "/http:\//s///")
mkdir $reposquerydir/$serverdir &> /dev/null
wget $i/query -O $reposquerydir/$serverdir/query &> /dev/null
done
}
#------------------------------------------------------------------------
#----------------- search package in repo function ----------------------
search() {
servers=$(/usr/bin/cat $repofile)
if [[ ! $1 ]]; then
for i in $servers; do
serverdir=$(echo $i | sed -e "/http:\/\//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"
done
done
exit 0
fi
for i in $servers; do
serverdir=$(echo $i | sed -e "/http:\/\//s///")
repoquery=$(/usr/bin/cat $reposquerydir/$serverdir/query | sed -e '/.pkg.gz/s///')
for j in $repoquery; do
if [[ $j == $1 ]]; then
printf "$YELLOW$serverdir: $BWHITE$j\n$RESET"
exit 0
fi
done
done
printf "$YELLOW**$RED error:$RESET can't find package ($1)\n"
}
#------------------------------------------------------------------------
#------------------- clear cached packages directory --------------------
clear() {
rm -v $cachedpkgdir/*
}
#------------------------------------------------------------------------
case "$1" in
add|a|-a)
add $*
;;
down|download)
down $2
;;
unpack|u|-u)
unpack $2
;;
del|d|-d)
del $*
;;
list|l|-l)
list $2
;;
query|q|-q)
query
;;
help)
help
;;
sync)
sync
;;
search)
search $2
;;
clear)
clear
;;
*)
help
;;
esac