aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/ak-pkg55
-rwxr-xr-xlib/_ak_pkg177
2 files changed, 232 insertions, 0 deletions
diff --git a/bin/ak-pkg b/bin/ak-pkg
new file mode 100755
index 0000000..12d5d26
--- /dev/null
+++ b/bin/ak-pkg
@@ -0,0 +1,55 @@
+#!/usr/bin/env bash
+###
+### arching-kaos-tools
+### Tools to interact and build an Arching Kaos Infochain
+### Copyright (C) 2021 - 2025 kaotisk
+###
+### This program is free software: you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation, either version 3 of the License, or
+### (at your option) any later version.
+###
+### This program is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with this program. If not, see <http://www.gnu.org/licenses/>.
+###
+##
+## Brief description
+##
+## Usage:
+##
+## -h, --help Prints this help message
+## --make-releases-from-local Makes releases from all local installation's module
+## --make-release-from-local Makes release from a local installation's module
+## --install-from-zblock <zblock> Installs from a zblock
+## --install-from-akfs <maphash> Installs from an AKFS map
+## --uninstall Uninstalls a module selected from a menu
+##
+fullprogrampath="$(realpath $0)"
+PROGRAM=$(basename $0)
+descriptionString="Quick description"
+
+# At least these
+source $AK_LIBDIR/_ak_log
+source $AK_LIBDIR/_ak_pkg
+source $AK_LIBDIR/_ak_script
+
+
+# Flags to run
+if [ ! -z $1 ]
+then
+ case $1 in
+ -h | --help) _ak_usage; exit;;
+ --make-releases-from-local) shift; _ak_pkg_all_modules_make_releases_from_local_installation; exit;;
+ --make-release-from-local) _ak_pkg_all_modules_make_release_from_local_installation $1; exit;;
+ --install-from-zblock) shift; _ak_pkg_install_from_zblock $1; exit;;
+ --install-from-akfs) shift; _ak_pkg_install_from_akfsmap $1; exit;;
+ --uninstall) _ak_pkg_uninstall; exit;;
+ * ) _ak_usage;;
+ esac
+else _ak_usage
+fi
diff --git a/lib/_ak_pkg b/lib/_ak_pkg
new file mode 100755
index 0000000..1155acd
--- /dev/null
+++ b/lib/_ak_pkg
@@ -0,0 +1,177 @@
+#!/usr/bin/env bash
+###
+### arching-kaos-tools
+### Tools to interact and build an Arching Kaos Infochain
+### Copyright (C) 2021 - 2025 kaotisk
+###
+### This program is free software: you can redistribute it and/or modify
+### it under the terms of the GNU General Public License as published by
+### the Free Software Foundation, either version 3 of the License, or
+### (at your option) any later version.
+###
+### This program is distributed in the hope that it will be useful,
+### but WITHOUT ANY WARRANTY; without even the implied warranty of
+### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+### GNU General Public License for more details.
+###
+### You should have received a copy of the GNU General Public License
+### along with this program. If not, see <http://www.gnu.org/licenses/>.
+###
+
+source $AK_LIBDIR/_ak_log
+source $AK_LIBDIR/_ak_script
+source $AK_LIBDIR/_ak_fs
+source $AK_LIBDIR/_ak_gpg
+source $AK_LIBDIR/_ak_zblock
+
+function _ak_pkg_all_modules_make_release_from_local_installation(){
+ outdir="$(pwd)"
+ find $AK_MODULESDIR -type l | xargs ls -l | rev | cut -d ' ' -f 1 | rev | while read mod
+ do
+ mod_root="$(echo $mod | rev | cut -d '/' -f 2- | rev)"
+ mod_name="$(basename $mod)"
+ cd ${mod_root}/${mod_name}
+ if [ ! -f version ]
+ then
+ echo -n 'v0.0.0' > version
+ fi
+ mod_version="$(cat version)"
+ if [ ! -f ${outdir}/${mod_name}-${mod_version}.tar.gz ]
+ then
+ tar cfz ${outdir}/${mod_name}-${mod_version}.tar.gz *
+ fi
+ done
+}
+
+function _ak_pkg_all_modules_make_release_from_local_installation(){
+ outdir="$(pwd)"
+ select mod in $(find $AK_MODULESDIR -type l | xargs ls -l | rev | cut -d ' ' -f 1 | rev | tr '\n' ' ') # | while read mod
+ do
+ mod_root="$(echo $mod | rev | cut -d '/' -f 2- | rev)"
+ mod_name="$(basename $mod)"
+ cd ${mod_root}/${mod_name}
+ if [ ! -f version ]
+ then
+ echo -n 'v0.0.0' > version
+ fi
+ mod_version="$(cat version)"
+ outfile="${mod_name}-${mod_version}.tar.gz"
+ fout="${outdir}/${outfile}"
+ if [ ! -f ${fout} ]
+ then
+ tar cfz ${fout} *
+ cd ${outdir}
+ _ak_gpg_sign_detached ${outfile}.asc ${outfile}
+ akfsmap="$(_ak_fs_import ${outfile})"
+ akfsmapsig="$(_ak_fs_import ${outfile}.asc)"
+ cat > data << EOF
+{
+ "package":"$mod_name",
+ "version":"$mod_version",
+ "akfsmap":"$akfsmap",
+ "detach":"$akfsmapsig"
+}
+EOF
+ _ak_zblock_pack pkg/add data
+ else
+ tfile="$(_ak_make_temp_file).tar.gz"
+ tar cfz ${tfile} *
+ hasht="$(sha512sum ${tfile} | cut -d ' ' -f 1)"
+ hashf="$(sha512sum ${fout} | cut -d ' ' -f 1)"
+ if [ "$hashf" != "$hasht" ]
+ then
+ _ak_log_warning "Please manually pick-up your archive from ${tfile} or delete the copy on your directory and rerun."
+ exit 5
+ else
+ _ak_log_info "You already have latest release"
+ exit 0
+ fi
+ fi
+ break
+ done
+}
+
+function _ak_pkg_install_from_akfsmap(){
+ TEMP="$(_ak_make_temp_directory)"
+ cd $TEMP
+ filename="$(_ak_fs_from_map_net_get_original_filename $1)"
+ _ak_fs_net_get_from_map_hash $1
+ module_name="$(echo -n $filename | cut -d '-' -f 1)"
+ module_version="$(echo -n $filename | sed -e 's/\.tar\.gz//g' | rev | cut -d '-' -f 1 | rev)"
+ if [ -d $AK_MODULESDIR/$module_name ] || [ -L $AK_MODULESDIR/$module_name ]
+ then
+ _ak_log_error "$module_name seems already installed"
+ if [ -f $AK_MODULESDIR/$module_name/version ]
+ then
+ imv=$(cat $AK_MODULESDIR/$module_name/version)
+ if [ "$filename" == "${module_name}-${imv}.tar.gz" ]
+ then
+ _ak_log_debug "and in latest version: ${imv}"
+ exit 1
+ else
+ _ak_log_debug "version mismatch: attempted to install $module_version but found $imv installed"
+ exit 1
+ fi
+ fi
+ else
+ _ak_log_error "$module_name doesn't seem installed"
+ mkdir -p $AK_MODULESDIR/$module_name
+ if [ $? -ne 0 ]
+ then
+ _ak_log_error "Something went wrong when making directory"
+ exit 1
+ fi
+ tar -C $AK_MODULESDIR/$module_name -xf $TEMP/$filename
+ if [ $? -ne 0 ]
+ then
+ _ak_log_error "$TEMP Something went wrong while extracting $filename"
+ exit 1
+ fi
+ _ak_log_info "$filename was installed successfully!"
+ _ak_log_info "Enter: ak -m $module_name --help for help"
+ rm -rf $TEMP
+ exit 0
+ fi
+ exit 224
+}
+
+function _ak_pkg_install_from_zblock(){
+ if [ ! -z $1 ] && [ -n "$1" ]
+ then
+ tempzblock="$(_ak_make_temp_file)"
+ _ak_zblock_show $1 | jq > $tempzblock
+ if [ $? -ne 0 ]
+ then
+ _ak_log_error "Something must happened wrong"
+ exit 1
+ fi
+ tzmod="$(cat $tempzblock|jq -r '.module')"
+ tzdata="$(cat $tempzblock|jq -r '.data')"
+ tzakfsmap="$(cat $tempzblock|jq -r '.'$tzdata'.akfsmap')"
+ _ak_pkg_install_from_akfsmap $tzakfsmap
+ else
+ _ak_log_error "No zblock hash provided"
+ exit 1
+ fi
+}
+
+function _ak_pkg_uninstall(){
+ select x in $(ls -1 $AK_MODULESDIR | tr '\n' ' ')
+ do
+ if [ -n "$x" ]
+ then
+ if [ -d $AK_MODULESDIR/$x ] || [ -L $AK_MODULESDIR/$x ]
+ then
+ _ak_log_info "Removing module $x..."
+ rm -rf $AK_MODULESDIR/$x
+ if [ $? -ne 0 ]
+ then
+ _ak_log_error "Failed to remove module $x"
+ exit 1
+ fi
+ _ak_log_info "$x module was uninstalled!"
+ fi
+ break
+ fi
+ done
+}