diff --git a/.gitignore b/.gitignore index 65b2753..89f96aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ pm.pkg pm.pkg.gz -rootfs \ No newline at end of file +rootfs +package \ No newline at end of file diff --git a/Makefile b/Makefile index 3ded585..20e8116 100644 --- a/Makefile +++ b/Makefile @@ -2,53 +2,53 @@ DESTDIR=/ install: - if [ ! -d ${DESTDIR}/etc/pm ]; then \ - mkdir -pv ${DESTDIR}/etc/pm; \ - touch ${DESTDIR}/etc/pm/repo; \ + @if [ ! -d ${DESTDIR}/etc/pm ]; then \ + mkdir -p ${DESTDIR}/etc/pm; \ + # touch ${DESTDIR}/etc/pm/repo; \ fi - if [ ! -d ${DESTDIR}/tmp ]; then \ - mkdir -pv ${DESTDIR}/tmp; \ + @if [ ! -d ${DESTDIR}/tmp ]; then \ + mkdir -p ${DESTDIR}/tmp; \ fi - if [ ! -d ${DESTDIR}/usr/bin ]; then \ - mkdir -pv ${DESTDIR}/usr/bin; \ + @if [ ! -d ${DESTDIR}/usr/bin ]; then \ + mkdir -p ${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; \ + @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 -pv ${DESTDIR}/var/cache/pm/pkg; \ + @if [ ! -d ${DESTDIR}/var/cache/pm/pkg ]; then \ + mkdir -p ${DESTDIR}/var/cache/pm/pkg; \ fi - cp -v src/pm ${DESTDIR}/usr/bin/pm; + @cp src/pm ${DESTDIR}/usr/bin/pm; uninstall: - if [ -d ${DESTDIR}/etc/pm ]; then \ - rm -rv ${DESTDIR}/etc/pm; \ + @if [ -d ${DESTDIR}/etc/pm ]; then \ + rm -r ${DESTDIR}/etc/pm; \ fi - if [ -d ${DESTDIR}/usr/share/pm ]; then \ - rm -rv ${DESTDIR}/usr/share/pm; \ + @if [ -d ${DESTDIR}/usr/share/pm ]; then \ + rm -r ${DESTDIR}/usr/share/pm; \ fi - if [ -d ${DESTDIR}/var/cache/pm ]; then \ - rm -rv ${DESTDIR}/var/cache/pm; \ + @if [ -d ${DESTDIR}/var/cache/pm ]; then \ + rm -r ${DESTDIR}/var/cache/pm; \ fi - if [ -f ${DESTDIR}/usr/bin/pm ]; then \ - rm -v ${DESTDIR}/usr/bin/pm; \ + @if [ -f ${DESTDIR}/usr/bin/pm ]; then \ + rm ${DESTDIR}/usr/bin/pm; \ fi package: - mkdir -pv pm.pkg/usr/bin - mkdir -pv pm.pkg/etc/pm - mkdir -pv pm.pkg/var/cache/pm/pkg - mkdir -pv pm.pkg/usr/share/pm/{repos,packages} - echo usr/bin/pm > pm.pkg/list - echo busybox > pm.pkg/deps - cp -v src/pm pm.pkg/usr/bin/pm - tar -czvf pm.pkg.gz pm.pkg + @mkdir -p pm.pkg/usr/bin + @mkdir -p pm.pkg/etc/pm + @mkdir -p pm.pkg/var/cache/pm/pkg + @mkdir -p pm.pkg/usr/share/pm/{repos,packages} + @echo usr/bin/pm > pm.pkg/list + @echo busybox > pm.pkg/deps + @cp src/pm pm.pkg/usr/bin/pm + @tar -czf pm.pkg.gz pm.pkg clean: - if [ -d pm.pkg ]; then \ - rm -rv pm.pkg; \ + @if [ -d pm.pkg ]; then \ + rm -r pm.pkg; \ fi - if [ -f pm.pkg.gz ]; then \ - rm -v pm.pkg.gz; \ + @if [ -f pm.pkg.gz ]; then \ + rm pm.pkg.gz; \ fi \ No newline at end of file diff --git a/PMBUILD b/PMBUILD new file mode 100644 index 0000000..41d9061 --- /dev/null +++ b/PMBUILD @@ -0,0 +1,11 @@ +pkgname=pm +pkgver=1.1 +pkgrel=1 +# srcdir=/home/tola/Documents/linux/pm +gitsource="https://gitea.home.com:3000/TolaMironcenko/pm.git" +deps="busybox" + +package() { + cd $srcdir + make install DESTDIR=$pkgdir +} diff --git a/src/pm b/src/pm index 4cda774..858b3db 100755 --- a/src/pm +++ b/src/pm @@ -107,6 +107,7 @@ down() { if [[ $j == $1 ]]; then if [ ! -f $cachedpkgdir/$1.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 check $? "Download package" # if [[ "$?" == "0" ]]; then @@ -258,7 +259,9 @@ query() { printf "$YELLOW**$BWHITE No installed packages\n$RESET" exit 0 fi - printf "$packagesquery\n" + for i in $packagesquery; do + printf "$BWHITE$i\n$RESET" + done } q() { query @@ -301,7 +304,6 @@ sync() { servers=$(/usr/bin/cat $repofile) for i in $servers; do printf "$YELLOW**$GREEN Sync $BWHITE$i\n$RESET" - # echo "$i" serverdir=$(echo $i | sed -e "/http:\//s///") serverdir=$(echo $serverdir | sed -e "/ftp:\//s///") mkdir -p $reposquerydir/$serverdir &> /dev/null @@ -328,22 +330,22 @@ search() { done exit 0 fi - + found=false for i in $servers; do serverdir=$(echo $i | sed -e "/http:\/\//s///") 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 [[ $j =~ $1 ]]; then printf "$YELLOW$serverdir: $BWHITE$j\n$RESET" - exit 0 + found=true fi done done - printf "$YELLOW**$RED error:$RESET can't find package ($1)\n" + [ "$found" = "false" ] && printf "$YELLOW**$RED error:$RESET can't find package ($1)\n" } ss() { - search + search $1 } #------------------------------------------------------------------------ @@ -353,6 +355,7 @@ clear() { } #------------------------------------------------------------------------ +#--- show package dependencies function --- deps() { if [ "$1" = "" ]; then help @@ -364,7 +367,80 @@ deps() { fi cat $installedpackagesdir/$1.pkg/deps } +#------------------------------------------ +#--- build package uses PMBUILD file function --- +buildpkg() { + if [ ! -f ./PMBUILD ]; then + if [ "$1" != "" ]; then + source $1 + else + printf "$BBLUE**$BWHITE Can't find PMBUILD [$BRED ERROR $BWHITE]\n$RESET" + fi + else + source ./PMBUILD + fi + export buildroot=$(pwd) + if [ -f $buildroot/$pkgname-$pkgver-$pkgrel.pkg.gz ]; then + if [ "$1" != "-r" ]; then + printf "$BBLUE**$BWHITE $pkgname-$pkgver-$pkgrel.pkg.gz already exists please use -r to rebuild [$YELLOW WARNING $BWHITE]\n$RESET" + exit 0 + else + [ -d pkg ] && rm -r pkg + [ -d src ] && rm -r src + [ -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 + 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 + if [[ $(type -t build) = function ]]; then + printf "$BBLUE**$BWHITE Building package\n$RESET" + build + check $? "Build" + else + echo "no build" + fi + if [[ $(type -t package) == function ]]; then + printf "$BBLUE**$BWHITE Packaging package\n$RESET" + package + check $? "Package" + else + echo "no package" + fi + printf "$BBLUE**$BWHITE Stripping unneded symbols\n$RESET" + for execfile in $(find $pkgdir -executable -type f); do + strip $execfile + done + printf "$BBLUE**$BWHITE Strip unneded symbols [$BGREEN SUCCESS $BWHITE]\n$RESET" + cd $pkgdir + find -type f > $buildroot/list + sed -i "s/.\///" $buildroot/list + cd $buildroot + mv list $pkgdir/list + if [ "$deps" != "" ]; then + for i in $deps; do + echo $i >> $pkgdir/deps + done + fi + cd $pkgdir + printf "$BBLUE**$BWHITE Archiving package\n$RESET" + tar -czf $buildroot/$pkgname-$pkgver-$pkgrel.pkg.gz .. &> /dev/null + check $? "Archive package" + cd $buildroot + unset pkgdir srcdir buildroot +} +#----------------------------------------------------- + +#--- main --- case "$1" in add|a|del|d) checkroot @@ -374,7 +450,11 @@ case "$1" in checkroot "$1" $2 ;; + build) + buildpkg $2 + ;; *) help ;; esac +#------------