Compare commits

..

4 Commits

Author SHA1 Message Date
lw-everestlinux
84ec22f0bd 10/13/22 2022-10-13 09:31:43 -04:00
lw-everestlinux
b97f0337de (FINALLY) add positional arguments 2022-10-10 21:59:36 -04:00
lw-everestlinux
27ec12f373 Add hooks.sh for legacy usrpkgs 2022-10-07 11:40:00 -04:00
lw-everestlinux
6dbb63378e Glacier v3.0.0-rc.1 2022-10-06 20:16:48 -04:00
21 changed files with 436 additions and 1362 deletions

View File

95
README
View File

@ -1,95 +0,0 @@
+-----------------+
| [*] Glacier [*] |
+-----------------+
Manage packages on an Everest Linux system
+-----------------------+
| [?] About Glacier [?] |
+-----------------------+
Glacier's main goal is to combine the power of
source based packaging with the simplicity of
binary based packaging.
Glacier downloads source code from
https://git.everestlinux.org/EverestLinux/glacier-pkgs
and compiles it locally on your system.
+----------------------+
| [!] Dependencies [!] |
+----------------------+
Glacier requires the following programs to function:
- sh
- wget/curl (any program that can download files)
- tar
- make
- a c compiler (tested with gcc, although others should work)
- python (for integrity checking)
+----------------------------+
| [🠗] Installing Glacier [🠗] |
+----------------------------+
Obtain the source code:
$ git clone https://git.everestlinux.org/EverestLinux/glacier
$ cd glacier
Copy install.conf.def to install.conf
$ mv install.conf.def install.conf
Make necessary adjustments to install.conf, then run
build.sh as root.
# ./build.sh install # for first time installations
# ./build.sh update # for existing installations
+-----------------+
| [>_] Usage [>_] |
+-----------------+
# glacier install/-f
# glacier update/-u
# glacier remove/-x
$ glacier query/-q
# glacier cache/-c
# glacier cache-install/-ci
# glacier cache-clear/-cc
$ glacier --debuginfo
$ glacier -h/--help
$ glacier -v/--version
+------+
| News |
+------+
- 11/3/22 - Changing how packages are uninstalled
In Glacier's current state, it needs to download the package archive in order to remove it.
This is highly inefficient and presents its own risks.
In an upcoming update, the removal script will be retained on the system.
This method will be space efficient because:
a) Instruction scripts are mere kilobytes
b) For larger scripts, you will have the option of compressing them.
This feature is expected around 3.2.0.
+-----------+
| Licensing |
+-----------+
(C) 2021-2022 Everest Developers
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 <https://www.gnu.org/licenses/>.

3
README.md Normal file
View File

@ -0,0 +1,3 @@
# glacier3
Glacier3 is a testing ground for the upcoming Glacier rewrite

6
TODO Normal file
View File

@ -0,0 +1,6 @@
### TODO LIST ###
#- fix messages not printing (ASAP)
#- fix archives not downloading
# /usr/bin/gscripts: line 37: /nano.tar.gz: No such file or directory
#- Colors not printing

View File

@ -1,72 +0,0 @@
#!/bin/sh
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "must be run as root\n"
exit 1
fi
WORKING_DIR=$(pwd)
SRC_DIR=$(pwd)/../src
printf "parsing install.conf\n"
source $WORKING_DIR/install.conf
if [ "$?" != 0 ]; then
printf "install.conf not found\n"
exit 1
fi
case $1 in
install)
printf "installing executable\n"
mv -v $SRC_DIR/glacier $PREFIX/bin
if [ "$?" != 0 ]; then
mv -v $SRC_DIR/glacier $PREFIX
printf "directory $PREFIX/bin does not exist, moving to $PREFIX instead\n"
fi
$CC $SRC_DIR/int-check/main.c -o glacier-integrity-check
mv -v $SRC_DIR/int-check/glacier-integrity-check $PREFIX/bin
if [ "$?" != 0 ]; then
mv -v $SRC_DIR/int-check/glacier-integrity-check $PREFIX
printf "directory $PREFIX/bin does not exist, moving to $PREFIX instead.\n"
fi
printf "installing configuration files\n"
mv -v $SRC_DIR/glacier.conf $CONFDIR
if [ "$?" != 0 ]; then
printf "$CONFDIR does not exist\n"
printf "this can be corrected by running:\n"
printf "# mkdir -v -pv $CONFDIR\n"
exit 1
fi
mkdir -v /opt/glacier
mkdir -v /opt/glacier/workspace
mkdir -v /var/log/glacier
mkdir -v /var/cache/glacier
mkdir -v /etc/glacier
mkdir -v /etc/glacier/pkginfo
mv -v $SRC_DIR/hooks $CONFDIR/glacier
mv -v $SRC_DIR/post-hooks $CONFDIR/glacier
mv -v $SRC_DIR/pre-hooks $CONFDIR/glacier
mv -v $SRC_DIR/hooks.sh $CONFDIR/glacier
mv -v $SRC_DIR/make.conf $CONFDIR
mv -v $SRC_DIR/glacier-integrity-check $PREFIX/bin
if [ "$?" != "0" ]; then
mv -v $SRC_DIR/glacier-integrity-check $PREFIX
printf "directory $PREFIX/bin does not exist, moving to $PREFIX instead\n"
fi
printf "finished installation\n"
exit 0
;;
update)
printf "updating executable\n"
rm -v $PREFIX/bin/glacier || rm -v $PREFIX/glacier
rm -v $PREFIX/bin/glacier-integrity-check || rm -v $PREFIX/glacier-integrity-check
mv -v $SRC_DIR/glacier $PREFIX/bin || mv -v $SRC_DIR/glacier $PREFIX
$CC $SRC_DIR/int-check/main.c -O2 -fstack-protector-strong -o $SRC_DIR/int-check/glacier-integrity-check
mv -v $SRC_DIR/int-check/glacier-integrity-check $PREFIX/bin || mv -v $SRC_DIR/int-check/glacier-integrity-check $PREFIX
printf "finished updating\n"
exit 0
esac

View File

@ -1,13 +0,0 @@
#!/bin/sh
# install.conf
# Installation prefix
# On Everest, this should be /usr, because /bin, /sbin, and /lib are all symlinks to /usr
PREFIX="/usr"
# System config directory
# On almost all systems, this should be /etc
CONFDIR="/etc"
# C Compiler to use
CC="gcc"

24
install/install.sh Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf " [ * ] Installation Script must be run as root.\n"
exit 0
fi
# Create directories
mkdir /etc/glacier
mkdir /etc/glacier/pkginfo
mkdir /var/log/glacier
mkdir /var/cache/glacier
# Install Scripts
cd ../src
chmod +x *
cp glacier /usr/bin/glacier
cp glacier.conf /etc/glacier.conf
cp glacier_release /etc/glacier/glacier_release
cp gscripts /usr/bin/gscripts
cp messages /etc/glacier/messages
cp hooks /etc/glacier/hooks
printf "done\n"

9
src/INSTALL_LOCATIONS Normal file
View File

@ -0,0 +1,9 @@
=== Executables ===
/usr/bin/glacier
/usr/bin/gscripts
=== Settings/Other files ===
/etc/glacier/glacier_release
/etc/glacier/hooks
/etc/glacier.conf
/etc/make.conf

View File

@ -1,490 +1,289 @@
#!/bin/sh
# Glacier - manage installed packages on a Linux system
# Glacier - A simple package management system written in POSIX sh
# Copyright (C) 2022 Everest Linux Development Group
#
# This file is part of Glacier.
# 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.
#
# Glacier 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.
#
# Glacier 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 <https://www.gnu.org/licenses/>.
# You should have received a copy of the GNU General Public License
# along with Glacier. If not, see <https://www.gnu.org/licenses/>.
# Preloading
/usr/bin/gscripts preload
source $(pwd)/messages # this is here for the sole purpose of testing
source /etc/glacier/messages
input = ${2}
. /etc/glacier/hooks
get_pkg() {
printf "$blue[ i ]$reset Downloading archive for package '$2'...\n"
for r in ${ALLOWED_REPOS[@]}; do
$GLACIER_DOWNLOAD_BACKEND $GREPO/${r}/$2.tar.gz
done
find $2.tar.gz
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package '$2' not found.\n"
exit 1
fi
printf "$blue[ i ]$reset Downloading checksum for package '$2'...\n"
for r in ${ALLOWED_REPOS[@]}; do
$GLACIER_DOWNLOAD_BACKEND $GREPO/${r}/$2.checksum
done
find $2.checksum
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package checksum not found.\n"
exit 1
fi
}
int_check() {
if [ "$GLACIER_DO_INT_CHECK" = "true" ]; then
printf "$blue[ i ]$reset Checking package integrity...\n"
mv *.checksum local_sum
sha256sum *.tar.gz > pkg_sum
/usr/bin/glacier-integrity-check local_sum pkg_sum
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Integrity check failed.\n"
# Main Script
while [[ $# -gt 0 ]]; do
case $1 in
-h|--help)
printf "$blue [ * ] Glacier - Manage packages on the system [ * ] $reset\n"
printf "$blue=== Information ====================================================================================$reset\n"
printf "$ glacier {-h --help} show this message and exit\n"
printf "$ glacier {--version} display the current Glacier version and exit\n"
printf "$blue=== Package Operations =============================================================================$reset\n"
printf "# glacier {install -f} install a package to the system\n"
printf "# glacier {update -u} update an installed package\n"
printf "# glacier {remove -x} remove an installed package\n"
printf "$ glacier {query -q} query the information of an installed package\n"
printf "# glacier {cache -c} cache a package from the repositories\n"
printf "# glacier {cache-install -ci} install a cached package\n"
printf "# glacier {cache-clear -cc} clear the package cache\n"
printf "$blue=== Debugging ======================================================================================$reset\n"
printf "$ glacier {--showDebugInfo} show debugging info\n"
printf "$blue=== Licensing ======================================================================================$reset\n"
printf "This program is freely distributable under the terms of the\n"
printf "GNU General Public License version 3 or later.\n"
printf "You should have recieved a copy of the GNU General Public License\n"
printf "along with this program. If not, see <https://www.gnu.org/licenses/>.\n"
printf "$blue======================================================================================================\n"
exit 0
;;
--version)
printf "$blue Glacier v$GLACIER_RELEASE $reset\n"
exit 0
;;
install|-f)
# Require script to be run as root
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
printf "$green[ $check ]$reset Integrity check passed.\n"
else
printf "$yellow[ ! ]$reset Skipping integrity check...\n"
fi
}
unpack_pkg() {
printf "$blue[ i ]$reset Unpacking $2.tar.gz...\n"
mkdir $2 && mv $2.tar.gz $2 && cd $2
pv $2.tar.gz | tar -xz
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Could not unpack $2.tar.gz.\n"
cd .. && rm -rf $2
exit 1
fi
}
installpkg() {
printf "$blue[ i ]$reset Installing $2...\n"
sleep 1
chmod +x *
./INSTALL.sh
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to update $2.\n"
cd .. && rm -rf $2
exit 1
fi
./$2.ts.sh
mv $2-pkginfo.json /etc/glacier/pkginfo
}
updatepkg() {
printf "$blue[ i ]$reset Updating $2...\n"
sleep 1
chmod +x *
./UPDATE.sh
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to update $2.\n"
cd .. && rm -rf $2
exit 1
fi
./$2.ts.sh
}
removepkg() {
printf "$blue[ i ]$reset Removing $2...\n"
sleep 1
chmod +x *
/etc/glacier/pkginfo/$2.remove
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to remove $2.\n"
cd .. && rm -rf $2
exit 1
fi
rm /var/log/glacier/$2.timestamp
rm /etc/glacier/pkginfo/$2-pkginfo.json
}
installpkg_from_cache() {
printf "$blue[ i ]$reset Installing $2 from cache...\n"
sleep 1
cd /var/cache/glacier && cp $2.tar.gz /tmp && cd /tmp
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package does not exist in cache.\n"
exit 1
fi
unpack_pkg
install_pkg
}
clear_cache() {
printf "$blue[ i ]$reset Clearing cache...\n"
sleep 1
cd /var/cache/glacier && rm -rvf *
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Some items could not be cleared.\n"
exit 1
fi
}
#
# Show Glacier debugging info
#
debug_info() {
printf "$blue>> Glacier v3.3.0$reset\n"
printf ">> Checking for valid download backend...\n"
whereis wget
whereis curl
whereis aria2c
printf ">> Checking which download backend is in use...\n"
echo $GLACIER_DOWNLOAD_BACKEND
printf ">> Checking if all Glacier files are present...\n"
whereis glacier glacier.conf make.conf
ls /var/log | grep glacier
ls /var/cache | grep glacier
printf ">> If any files are missing, Glacier will not behave properly.\n"
printf ">> Checking if terminal can output unicode symbols...\n"
printf "$check\n"
printf "$error\n"
printf "$warning\n"
printf "$question\n"
printf "$red Red.$reset\n"
printf "$green Green.$reset\n"
printf "$yellow Yellow.$reset\n"
printf "$blue Blue.$reset\n"
printf "NOTE: If you use a custom colorscheme, colors will not match.\n"
printf ">> Checking if repositories are valid...\n"
echo $GREPO1
echo $GREPO2
echo $GREPO3
echo $GREPO4
echo $GREPO5
echo $GREPO6
echo $GREPO7
echo $GREPO8
printf ">> Checking which shell is in use...\n"
which $SHELL
printf "NOTE: If you use zsh, a percentage symbol may appear after some lines.\n"
printf ">> Gathered debug information.\n"
printf ">> To save this information to a file, run:\n"
printf ">> $ glacier --debuginfo > glacier.debug\n"
}
#
# Parses JSON from pkginfo files and outputs it
#
query() {
printf "$blue[ i ]$reset Showing information for package '$2'.\n"
printf "$blue>> Package name:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_name
printf "$blue>> Package version:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_version
printf "$blue>> Package description:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_description
printf "$blue>> Source tree size:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .src_tree_size
printf "$blue>> Size of installed files:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .exec_size
printf "$blue>> License:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .license
printf "$blue>> Installation date:$reset " && cat /var/log/glacier/$2.timestamp
}
#
# Will either keep removal script, update it with a new one, or delete it alltogether
#
cleanup_keep_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
mv REMOVE.sh /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
cleanup_update_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
rm /etc/glacier/pkginfo/$2.remove
mv REMOVE.sh /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
cleanup_del_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
rm /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
#
# Execute pre and posr hooks from files
#
pre_hooks() {
source /etc/glacier/hooks
}
pre_op_hooks() {
printf "$blue[ i ]$reset Executing pre-operation hooks...\n"
/etc/glacier/pre-hooks
}
post_hooks() {
printf "$blue[ i ]$reset Executing post-operation hooks...\n"
/etc/glacier/post-hooks
}
search_for_local_pkg() {
printf "$blue[ i ]$reset Searching working directory for package $2...\n"
find $2.tar.gz
if [ "$?" != 0 ]; then
printf "$red[ $error ]$reset Package $2 not found.\n"
exit 1
fi
}
case $1 in
-h|--help)
printf "$blue[ * ] Glacier - Manage installed packages on the system$reset\n"
printf "usage: glacier [-f] [-u] [-x] [-q] [-c] [-ci] [-cc] [-li] [--debuginfo]\n"
printf "\n"
printf "$blue=== Information ===$reset\n"
printf "glacier {-h/--help} - Show this message and exit\n"
printf "glacier {-v/--version} - Show the version and exit\n"
printf "\n"
printf "$blue=== Operations ===$reset\n"
printf "glacier {-f/install} - Install a new package\n"
printf "glacier {-u/update} - Update an installed package\n"
printf "glacier {-x/remove} - Remove an installed package\n"
printf "glacier {-q/query} - Query an installed package\n"
printf "glacier {-c/cache} - Download a package to the cache\n"
printf "glacier {-ci/cache-install} - Install a package from the cache\n"
printf "glacier {-cc/cache-clear} - Clear the cache\n"
printf "glacier {-li/local-install} - Install a package from a local directory\n"
printf "\n"
printf "$blue=== Debugging ===$reset\n"
printf "glacier {--debuginfo} - Show debugging information\n"
printf "\n"
printf "$blue=== Licensing ===$reset\n"
printf "This program is free software: you can redistribute it and/or modify it\n"
printf "under the terms of the GNU General Public License as published by the\n"
printf "Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n"
exit 0
;;
-v|--version)
printf "${blue}Glacier v3.3.0${reset}\n"
exit 0
;;
-f|install)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Installing package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
get_pkg "$@"
int_check "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
installpkg "$@"
post_hooks "$@"
cleanup_keep_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
echo $GLACIER_STATUS_INSTALLING
/usr/bin/gscripts download
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_DOES_NOT_EXIST
exit 1
fi
echo $GLACIER_STATUS_INTEGRITY_CHECK
mkdir $2 && mv $2.tar.gz $2 && cd $2
/usr/bin/gscripts integrity-check
if [ "$?" != "0" ]; then
exit 1
fi
echo $GLACIER_STATUS_UNPACKING
tar -xvf $2.tar.gz
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_CANNOT_UNPACK
exit 1
fi
chmod +x INSTALL.sh
chmod +x $2.ts.sh
echo $GLACIER_STATUS_EXECUTING
./INSTALL.sh
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_INSTRUCTIONS_CANNOT_EXECUTE
exit 1
fi
./$2.ts.sh
/usr/bin/gscripts post-install
echo $GLACIER_SUCCESS
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-u|update)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
;;
update|-u)
# Require script to be run as root
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
printf "$blue[ i ]$reset Updating package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
get_pkg "$@"
int_check "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
updatepkg "$@"
post_hooks "$@"
cleanup_update_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
echo $GLACIER_STATUS_UPDATING
/usr/bin/gscripts download
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_DOES_NOT_EXIST
exit 1
fi
echo $GLACIER_STATUS_INTEGRITY_CHECK
mkdir $2 && mv $2.tar.gz $2 && cd $2
/usr/bin/gscripts integrity-check
if [ "$?" != "0" ]; then
exit 1
fi
echo $GLACIER_STATUS_UNPACKING
tar -xvf $2.tar.gz
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_CANNOT_UNPACK
exit 1
fi
chmod +x UPDATE.sh
chmod +x $2.ts.sh
echo $GLACIER_STATUS_EXECUTING
./UPDATE.sh
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_INSTRUCTIONS_CANNOT_EXECUTE
exit 1
fi
./$2.ts.sh
/usr/bin/gscripts post-install
echo $GLACIER_SUCCESS
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-x|remove)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
;;
remove|-x)
# Require script to be run as root
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Removing package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
removepkg "$@"
post_hooks "$@"
cleanup_del_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
echo $GLACIER_STATUS_REMOVING
/usr/bin/gscripts download
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_DOES_NOT_EXIST
exit 1
fi
echo $GLACIER_STATUS_INTEGRITY_CHECK
mkdir $2 && mv $2.tar.gz $2 && cd $2
/usr/bin/gscripts integrity-check
if [ "$?" != "0" ]; then
exit 1
fi
echo $GLACIER_STATUS_UNPACKING
tar -xvf $2.tar.gz
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_CANNOT_UNPACK
exit 1
fi
chmod +x REMOVE.sh
chmod +x $2.ts.sh
echo $GLACIER_STATUS_EXECUTING
./REMOVE.sh
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_INSTRUCTIONS_CANNOT_EXECUTE
exit 1
fi
./$2.ts.sh
/usr/bin/gscripts post-install
echo $GLACIER_SUCCESS
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-q|query)
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
query "$@"
exit 0
;;
-c|cache)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Caching package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /var/cache/glacier
printf "\n"
get_pkg "$@"
int_check "$@"
printf "$green[ $check ]$reset Operation completed.\n"
;;
query|-q)
cat /etc/glacier/pkginfo/$2-pkginfo.json
cat /var/log/glacier/$2.timestamp
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_NOT_INSTALLED
exit 1
fi
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-ci|cache-install)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
;;
cache|-c)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Installing package '$2' from cache.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /var/cache/glacier
mv $2.tar.gz /opt/glacier/workspace
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
installpkg "$@"
post_hooks "$@"
cleanup_keep_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
echo $GLACIER_STATUS_CACHING
/usr/bin/gscripts download
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_DOES_NOT_EXIST
exit 1
fi
echo $GLACIER_STATUS_INTEGRITY_CHECK
mv $2.tar.gz /var/cache/glacier && cd /var/cache/glacier
/usr/bin/gscripts integrity-check
if [ "$?" != "0" ]; then
exit 1
fi
echo $GLACIER_SUCCESS
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-cc|cache-clear)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
;;
cache-install|-ci)
if [[ $(usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
clear_cache "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
;;
-li|local-install)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Failed to commit to transaction - permission denied. Are you root?\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
search_for_local_pkg "$@"
printf "$blue[ i ]$reset Installing package '$2' from local file.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cp $2.tar.gz /opt/glacier/workspace
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
installpkg "$@"
post_hooks "$@"
cleanup_keep_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
echo $GLACIER_STATUS_INSTALLING
cd /var/cache/glacier && cp $2.tar.gz /tmp && cd /tmp
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_NOT_IN_CACHE
exit 1
fi
echo $GLACIER_STATUS_UNPACKING
mkdir $2 && mv $2.tar.gz $2 && cd $2
tar -xvf $2.tar.gz
if [ "$?" != "0" ]; then
echo $GLACIER_ERROR_CANNOT_UNPACK
exit 1
fi
echo $GLACIER_STATUS_EXECUTING
chmod +x INSTALL.sh
chmod +x $2.ts.sh
./INSTALL.sh
if [ "$!" != "0" ]; then
echo $GLACIER_ERROR_INSTRUCTIONS_CANNOT_EXECUTE
exit 1
fi
./$2.ts.sh
/usr/bin/gscripts post-install
echo $GLACIER_SUCCESS
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "$red[ $error ]$reset Aborting.\n"
exit 1
fi
;;
--debuginfo)
debug_info "$@"
exit 0
;;
-*|--*)
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
exit 1
;;
*)
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
exit 1
;;
esac
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
;;
cache-clear|-cc)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
echo $GLACIER_ERROR_NO_ROOT
exit 1
fi
echo $GLACIER_STATUS_CLEARING
cd /var/cache/glacier && rm -rf *
echo $GLACIER_SUCCESS
exit 0
;;
--showDebugInfo)
printf "$blue Glacier v$GLACIER_RELEASE $reset\n"
printf ">> Checking for a viable download backend...\n"
whereis wget
whereis curl
whereis aria2c
printf ">> Checking which download backend is in use...\n"
echo $GLACIER_DOWNLOAD_BACKEND
printf ">> Checking if all Glacier directories and files are present...\n"
ls /etc | grep glacier
ls /etc/glacier
whereis make.conf
printf ">> If any files are missing, especially make.conf, Glacier will behave abnormally.\n"
printf ">> Checking if unicode symbols and colors display properly...\n"
printf "(NOTE): If you use a custom colorscheme, colors may vary.\n"
printf " For instance, the Dracula colorscheme turns blue into purple.\n"
printf "$check\n"
printf "$error\n"
printf "$warning\n"
printf "$question\n"
printf "$red Red.$reset\n"
printf "$green Green.$reset\n"
printf "$yellow Yellow.$reset\n"
printf "$blue Blue.$reset\n"
printf ">> Checking repositories...\n"
echo $GREPO1
echo $GREPO2
echo $GREPO3
echo $GREPO4
echo $GREPO5
echo $GREPO6
echo $GREPO7
echo $GREPO8
printf ">> Debug information has been gathered.\n"
printf ">> Run 'glacier --showDebugInfo > glacier.debug' to save this information to a file.\n"
exit 0
;;
-*|--*)
echo $GLACIER_ERROR_NO_SUCH_OPTION
exit 1
;;
*)
echo $GLACIER_ERROR_NO_SUCH_OPTION
exit 1
;;
esac
done
echo $GLACIER_ERROR_NO_SUCH_OPTION
exit 1

View File

@ -1,185 +0,0 @@
#!/bin/sh
# glacier-mkimg - Generate a root filesystem image
#
# This file is part of Glacier.
#
# Glacier 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.
#
# Glacier 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 Glacier. If not, see <https://www.gnu.org/licenses/>.
am_i_root() {
printf ">> Checking if user is root...\n"
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf ">> glacier-mkimg must be run as root.\n"
exit 1
fi
}
info() {
printf ">> Building root filesystem image with the following settings:\n"
printf "Image build location: /opt/everest\n"
printf "Packages to be installed:\n"
printf " - system-toolchain-bin\n"
printf " - busybox-base-bin\n"
printf " - glacier-base-bin\n"
printf " - make-base-bin\n"
}
init-env() {
mkdir -v /opt/everest
mkdir -v /opt/everest/{sources,toolchain,targetfs}
cd /opt/everest
}
get_skel() {
printf ">> Creating directory layout in /opt/everest...\n"
ROOT=/opt/everest/targetfs
mkdir -v $ROOT/{boot,dev,etc,home,mnt,opt,proc,root,srv,sys,tmp,var}
mkdir -v $ROOT/usr
mkdir -v $ROOT/usr/{bin,sbin,include,lib,lib64,libexec,local,sbin,share,src}
mkdir -v $ROOT/var/{cache,lib,local,lock,log,opt,run,spool,tmp,www}
mkdir -v $ROOT/var/cache/glacier
mkdir -v $ROOT/var/log/glacier
mkdir -v $ROOT/etc/glacier
mkdir -v $ROOT/etc/glacier/pkginfo
ln -sv $ROOT/usr/bin $ROOT/bin
ln -sv $ROOT/usr/lib $ROOT/lib
lv -sv $ROOT/usr/sbin $ROOT/sbin
ln -sv $ROOT/usr/lib64 $ROOT/lib64
printf ">> Finished.\n"
exit 0
}
prepare_for_pkg() {
printf ">> Preparing for package installation...\n"
glacier -c system-toolchain-bin
glacier -c busybox-base-bin
glacier -c glacier-base-bin
glacier -c make-base-bin
printf ">> Done.\n"
exit 0
}
install_pkg() {
printf ">> Installing packages...\n"
glacier -ci system-toolchain-bin
if [ "$?" != "0" ]; then
exit 1
fi
glacier -ci busybox-base-bin
if [ "$?" != "0" ]; then
exit 1
fi
glacier -ci glacier-base-bin
if [ "$?" != "0" ]; then
exit 1
fi
glacier -ci make-base-bin
if [ "$?" != "0" ]; then
exit 1
fi
}
warn_about_cache() {
printf ">> WARNING: The cache was used for installing packages to the target.\n"
printf ">> It is recommended to run the following command to clean the cache:\n"
printf ">> glacier -cc\n"
exit 0
}
change_ownership() {
printf ">> Ensuring file ownership is correct...\n"
chown -Rv root:root /opt/everest/targetfs
chgrp -v 13 /opt/everest/targetfs/var/log/lastlog
printf ">> Done.\n"
}
create_img() {
printf ">> Creating filesystem image...\n"
install -dv /opt/everest/build
cd /opt/everest/targetfs
tar -cvf /opt/everest/build/everestlinux-RELEASE-img.tar *
zstd /opt/everest/build/everestlinux-RELEASE-img.tar
rm /opt/everest/build/everestlinux-${EVEREST_RELEASE}-img.tar
printf ">> Done.\n"
}
finish() {
printf ">> Build has finished.\n"
printf ">> Filesystem image is located in the following directory:\n"
printf ">> /opt/everest/build\n"
}
showhelp_big() {
printf "glacier-mkimg - easily compile an Everest Linux image\n"
printf "usage - glacier-mkimg [-h] [init] [-t] [-s] [-p] [-o] [-i]\n"
printf "\n"
printf "glacier-mkimg {init} initialize the environment\n"
printf "glacier-mkimg {-s} only download filesystem skeleton\n"
printf "glacier-mkimg {-p} only install packages to /opt/everest\n"
printf "glacier-mkimg {-o} only change ownership of /opt/everest\n"
printf "glacier-mkimg {-i} only create image\n"
printf "\n"
printf "If no option is passed, glacier-mkimg will perform all tasks\n"
printf "glacier-mkimg init must be run before anything else is done\n"
printf "\n"
printf "This program is free software.\n"
printf "See the GNU GPL version 3 for details.\n"
exit 0
}
case $1 in
-h|--help)
showhelp_big
;;
init)
am_i_root "$@"
init_env "$@"
exit 0
;;
-s)
get_skel "$@"
exit 0
;;
-p)
prepare_for_pkg "$@"
install_pkg "$@"
warn_about_cache "$@"
exit 0
;;
-o)
change_ownership "$@"
exit 0
;;
-i)
create_img "$@"
exit 0
;;
-*)
printf "usage: glacier-mkimg [-h] [init] [-s] [-p] [-o] [-i]\n"
exit 1
;;
*)
get_skel "$@"
prepare_for_pkg "$@"
install_pkg "$@"
warn_about_cache "$@"
change_ownership "$@"
create_img "$@"
finish
exit 0
;;
esac
printf "usage: glacier-mkimg [-h] [init] [-s] [-p] [-o] [-i]\n"
exit 1

View File

@ -1,12 +1,45 @@
#
# /etc/glacier.conf
# The settings stored in this file will be loaded when Glacier is called
# For more information on each of these options, see https://git.everest
#
# Repository Glacier will download programs from
# Repositories Glacier will use
export GREPO="https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main"
export ALLOWED_REPOS=("world" "galaxy" "universe" "multiverse")
#[world]
export GREPO1="https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/world" # System Software
#[galaxy]
export GREPO2="https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/galaxy" # GPL Only Software
#[universe]
export GREPO3="https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/universe" # All Open Source Software
#[multiverse]
#export GREPO4=https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/multiverse # Proprietary Software
#[world-testing]
#export GREPO5=https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/world-testing
#[galaxy-testing]
#export GREPO6=https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/galaxy-testing
#[universe-testing]
#export GREPO7=https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/universe-testing
#[multiverse-testing]
#export GREPO8=https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main/multiverse-testing
# Checksum locations
export WORLD_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/world"
export GALAXY_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/galaxy"
export UNIEVRSE_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/universe"
export MULTIVERSE_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/multiverse"
export WORLD_TESTING_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/world-testing"
export GALAXY_TESTING_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/galaxy-testing"
export UNIVERSE_TESTING_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/universe-testing"
export MULTIVERSE_TESTING_SUM="https://git.everestlinux.org/EverestLinux/glacier-pkgs/src/branch/main/multiverse-testing"
# Define colors and unicode symbols to be used
export red="\033[1;31m"
@ -22,16 +55,9 @@
# Which backend Glacier will use to download files
# Selecting more than one backend will cause breakage
export GLACIER_DOWNLOAD_BACKEND="wget --quiet --show-progress"
#export GLACIER_DOWNLOAD_BACKEND="curl --output $2.tar.gz"
#export GLACIER_DOWNLOAD_BACKEND="curl --output $input.tar.gz"
#export GLACIER_DOWNLOAD_BACKEND="aria2c"
# Enable/disable package integrity checking
# WARNING: Keeping this enabled is strongly recommended.
# This option ensures all packages from the repositories are genuine.
export GLACIER_DO_INT_CHECK="true"
#
# end /etc/glacier.conf
#

View File

@ -1,430 +0,0 @@
#!/bin/sh
# Glacier - manage installed packages on a Linux system
# This program is free software - you can distribute it
# under the terms of the GNU General Public License v3.0,
# or at your option, any later version.
# A copy of the GNU General Public License should have been
# recieved along with this program. If not, see
# <https://www.gnu.org/licenses>
source $(pwd)/glacier.conf
get_pkg() {
printf "$blue[ i ]$reset Downloading archive for package '$2'...\n"
$GLACIER_DOWNLOAD_BACKEND $GREPO1/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO2/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO3/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO4/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO5/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO6/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO7/$2.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO8/$2.tar.gz
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package '$2' not found.\n"
exit 1
fi
$GLACIER_DOWNLOAD_BACKEND $GREPO1/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO2/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO3/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO4/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO5/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO6/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO7/$2.checksum || $GLACIER_DOWNLOAD_BACKEND $GREPO8/$2.tar.gz
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package checksum not found.\n"
exit 1
fi
}
int_check() {
if [ "$GLACIER_DO_INT_CHECK" = "true" ]; then
printf "$blue[ i ]$reset Checking package integrity...\n"
/usr/bin/glacier-integrity-check
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Integrity check failed.\n"
exit 1
fi
printf "$green[ $check ]$reset Integrity check passed.\n"
else
printf "$yellow[ ! ]$reset Skipping integrity check...\n"
fi
}
unpack_pkg() {
printf "$blue[ i ]$reset Unpacking $2.tar.gz...\n"
mkdir $2 && mv $2.tar.gz $2 && cd $2
tar -xf $2.tar.gz
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Could not unpack $2.tar.gz.\n"
cd .. && rm -rf $2
exit 1
fi
}
installpkg() {
printf "$blue[ i ]$reset Installing $2...\n"
sleep 1
chmod +x *
./INSTALL.sh
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to update $2.\n"
cd .. && rm -rf $2
exit 1
fi
./$2.ts.sh
mv $2-pkginfo.json /etc/glacier/pkginfo
}
updatepkg() {
printf "$blue[ i ]$reset Updating $2...\n"
sleep 1
chmod +x *
./UPDATE.sh
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to update $2.\n"
cd .. && rm -rf $2
exit 1
fi
./$2.ts.sh
}
removepkg() {
printf "$blue[ i ]$reset Removing $2...\n"
sleep 1
chmod +x *
/etc/glacier/pkginfo/$2.remove
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Failed to remove $2.\n"
cd .. && rm -rf $2
exit 1
fi
rm /var/log/glacier/$2.timestamp
rm /etc/glacier/pkginfo/$2-pkginfo.json
}
installpkg_from_cache() {
printf "$blue[ i ]$reset Installing $2 from cache...\n"
sleep 1
cd /var/cache/glacier && cp $2.tar.gz /tmp && cd /tmp
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Package does not exist in cache.\n"
exit 1
fi
unpack_pkg
install_pkg
}
clear_cache() {
printf "$blue[ i ]$reset Clearing cache...\n"
sleep 1
cd /var/cache/glacier && rm -rvf *
if [ "$?" != "0" ]; then
printf "$red[ $error ]$reset Some items could not be cleared.\n"
exit 1
fi
}
#
# Show Glacier debugging info
#
debug_info() {
printf "$blue>> Glacier v3.2.0$reset\n"
printf ">> Checking for valid download backend...\n"
whereis wget
whereis curl
whereis aria2c
printf ">> Checking which download backend is in use...\n"
echo $GLACIER_DOWNLOAD_BACKEND
printf ">> Checking if all Glacier files are present...\n"
whereis glacier glacier.conf make.conf
ls /var/log | grep glacier
ls /var/cache | grep glacier
printf ">> If any files are missing, Glacier will not behave properly.\n"
printf ">> Checking if terminal can output unicode symbols...\n"
printf "$check\n"
printf "$error\n"
printf "$warning\n"
printf "$question\n"
printf "$red Red.$reset\n"
printf "$green Green.$reset\n"
printf "$yellow Yellow.$reset\n"
printf "$blue Blue.$reset\n"
printf "NOTE: If you use a custom colorscheme, colors will not match.\n"
printf ">> Checking if repositories are valid...\n"
echo $GREPO1
echo $GREPO2
echo $GREPO3
echo $GREPO4
echo $GREPO5
echo $GREPO6
echo $GREPO7
echo $GREPO8
printf ">> Checking which shell is in use...\n"
which $SHELL
printf "NOTE: If you use zsh, a percentage symbol may appear after some lines.\n"
printf ">> Gathered debug information.\n"
printf ">> To save this information to a file, run:\n"
printf ">> $ glacier --debuginfo > glacier.debug\n"
}
#
# Parses JSON from pkginfo files and outputs it
#
query() {
printf "$blue[ i ]$reset Showing information for package '$2'.\n"
printf "$blue>> Package name:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_name
printf "$blue>> Package version:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_version
printf "$blue>> Package description:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .package_description
printf "$blue>> Source tree size:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .src_tree_size
printf "$blue>> Size of installed files:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .exec_size
printf "$blue>> License:$reset " && cat /etc/glacier/pkginfo/$2-pkginfo.json | jq .license
printf "$blue>> Installation date:$reset " && cat /var/log/glacier/$2.timestamp
}
#
# Will either keep removal script, update it with a new one, or delete it alltogether
#
cleanup_keep_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
mv REMOVE.sh /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
cleanup_update_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
rm /etc/glacier/pkginfo/$2.remove
mv REMOVE.sh /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
cleanup_del_rm () {
printf "$blue[ i ]$reset Cleaning up...\n"
rm /etc/glacier/pkginfo/$2.remove
cd .. && rm -rf *.checksum *.tar.* $2
}
#
# Execute pre and posr hooks from files
#
pre_hooks() {
source /etc/glacier/hooks
}
pre_op_hooks() {
printf "$blue[ i ]$reset Executing pre-operation hooks...\n"
/etc/glacier/pre-hooks
}
post_hooks () {
printf "$blue[ i ]$reset Executing post-operation hooks...\n"
/etc/glacier/post-hooks
}
case $1 in
-h|--help)
printf "$blue[ * ] Glacier - Manage installed packages on the system$reset\n"
printf "usage: glacier [-f] [-u] [-x] [-q] [-c] [-ci] [-cc] [--debuginfo]\n"
printf "\n"
printf "$blue=== Information ===$reset\n"
printf "glacier {-h/--help} - Show this message and exit\n"
printf "glacier {-v/--version} - Show the version and exit\n"
printf "\n"
printf "$blue=== Operations ===$reset\n"
printf "glacier {-f/install} - Install a new package\n"
printf "glacier {-u/update} - Update an installed package\n"
printf "glacier {-x/remove} - Remove an installed package\n"
printf "glacier {-q/query} - Query an installed package\n"
printf "glacier {-c/cache} - Download a package to the cache\n"
printf "glacier {-ci/cache-install} - Install a package from the cache\n"
printf "glacier {-cc/cache-clear} - Clear the cache\n"
printf "\n"
printf "$blue=== Debugging ===$reset\n"
printf "glacier {--debuginfo} - Show debugging information\n"
printf "\n"
printf "$blue=== Licensing ===$reset\n"
printf "This program is free software: you can redistribute it and/or modify it\n"
printf "under the terms of the GNU General Public License as published by the\n"
printf "Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n"
exit 0
;;
-v|--version)
printf "${blue}Glacier v3.2.0${reset}\n"
exit 0
;;
-f|install)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Installing package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
get_pkg "$@"
int_check "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
installpkg "$@"
post_hooks "$@"
cleanup_keep_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-u|update)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Updating package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
get_pkg "$@"
int_check "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
updatepkg "$@"
post_hooks "$@"
cleanup_update_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-x|remove)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Removing package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
removepkg "$@"
post_hooks "$@"
cleanup_del_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-q|query)
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
query "$@"
exit 0
;;
-c|cache)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Caching package '$2'.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /var/cache/glacier
printf "\n"
get_pkg "$@"
int_check "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-ci|cache-install)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
if [ "$2" == "" ]; then
printf "$red[ $error ]$reset No package name was supplied.\n"
exit 1
fi
printf "$blue[ i ]$reset Installing package '$2' from cache.\n"
read -p "$(printf "$blue[ ? ]$reset Proceed with this operation? (y/n) ")" -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
cd /var/cache/glacier
mv $2.tar.gz /opt/glacier/workspace
cd /opt/glacier/workspace
printf "\n"
pre_hooks "$@"
unpack_pkg "$@"
pre_op_hooks "$@"
installpkg "$@"
post_hooks "$@"
cleanup_keep_rm "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
elif [[ $REPLY =~ ^[Nn]$ ]]; then
printf "\n"
printf "${red}[ $error ]${reset} Aborting.\n"
exit 1
fi
;;
-cc|cache-clear)
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
printf "$red[ $error ]$reset Please run Glacier as root.\n"
exit 1
fi
clear_cache "$@"
printf "$green[ $check ]$reset Operation completed.\n"
exit 0
;;
--debuginfo)
debug_info "$@"
exit 0
;;
-*|--*)
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
exit 1
;;
*)
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
exit 1
;;
esac
printf "$red[ $error ]$reset Unknown option, see 'glacier -h' for usage.\n"
exit 1

3
src/glacier_release Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
export GLACIER_RELEASE="3.0.0 "

58
src/gscripts Executable file
View File

@ -0,0 +1,58 @@
#!/bin/sh
# gscripts - Scripts for Glacier operations
source /etc/glacier.conf
while [[ $# -gt 0 ]]; do
case $1 in
help)
printf "gscripts - backend for many Glacier functionalities since v3\n"
printf "gscripts {help} show this message\n"
printf "gscripts {integrity-check} verify package integrity\n"
printf "gscripts {download} download a package\n"
printf "gscripts {post-install} run post installation cleanup hooks\n"
printf "\n"
printf "this program can be distributed under the terms of the GNU General\n"
printf "Public License version 3 or higher\n"
exit 0
;;
preload)
/etc/glacier/hooks
if [ "$?" != "0" ]; then
exit 1
fi
exit 0
;;
integrity-check)
$GLACIER_DOWNLOAD_BACKEND $WORLD_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $GALAXY_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $UNIVERSE_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $MULTIVERSE_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $WORLD_TESTING_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $GALAXY_TESTING_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $UNIVERSE_TESTING_SUM/$input.checksum || $GLACIER_DOWNLOAD_BACKEND $MULTIVERSE_TESTING_SUM/$input.checksum
exit 0
LOCAL_SUM=$(sha256sum $input.tar.gz)
if [ $input.checksum = $LOCAL_SUM ]; then
printf "$green [ $check ]$reset Integrity check passed.\n"
rm $input.checksum
exit 0
else
printf "$red [ $error ]$reset Integrity check failed.\n"
rm $input.checksum
exit 1
fi
;;
download)
$GLACIER_DOWNLOAD_BACKEND $GREPO1/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO2/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO3/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO4/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO5/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO6/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO7/$input.tar.gz || $GLACIER_DOWNLOAD_BACKEND $GREPO8/$input.tar.gz
exit 0
;;
post-install)
mv -vf -- $input-pkginfo.json /etc/glacier/pkginfo || printf "error in subprocess /usr/bin/gscripts: could not stat $input-pkginfo.json\n" && exit 1
cd ..
rm -rf $input || printf "error in subprocess /usr/bin/gscripts: could not remove package source\n" && exit 1
;;
-*|--*)
printf "gscripts - no valid option was passed, see 'help' for details\n"
exit 1
;;
esac
done
printf "gscripts - no option was passed, see 'help' for details\n"

View File

@ -3,3 +3,4 @@
source /etc/make.conf
source /etc/glacier.conf
source /etc/glacier/glacier_release

View File

@ -2,9 +2,7 @@
# This file is meant to maintain legacy support.
printf "This package uses the legacy hooks file (/etc/glacier/hooks.sh).\n"
printf ">>> This is not an error. <<<\n"
printf "If you are not the maintainer of this package, there is no manual intervention required.\n"
printf ">>> This is not an error. <<< There is no manual intervention needed.\n"
printf "If you are the maintainer of this package, please update your usrbuild.sh, usrupdate.sh, and usrremove.sh accordingly.\n"
source /etc/glacier/hooks && /etc/glacier/hooks

View File

@ -1,72 +0,0 @@
/* Copyright (C) 2022-2023 Everest Linux Developers
This file is part Glacier.
Glacier 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.
Glacier 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 Glacier. If not, see <https://www.gnu.org/licenses/>. */
#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[]) {
FILE *fp1;
FILE *fp2;
int cnt1 = 0;
int cnt2 = 0;
int flg = 0;
if (argc < 3) {
printf("not enough arguments\n");
return -1;
}
fp1 = fopen(argv[1],"r");
if (fp1 == NULL) {
printf("\n%s cannot open file \n",argv[1]);
return -1;
}
fseek(fp1,0,SEEK_END);
cnt1 = ftell(fp1);
fp2 = fopen(argv[2],"r");
if (fp2 == NULL) {
printf("\n%s cannot open file \n",argv[2]);
return -1;
}
fseek(fp2,0,SEEK_END);
cnt2 = ftell(fp2);
fseek(fp1,0,SEEK_SET);
fseek(fp2,0,SEEK_SET);
if (cnt1 != cnt2) {
return 1;
} else {
while ( ! feof(fp1)) {
if (fgetc(fp1) != fgetc(fp2)) {
flg = 1;
break;
}
}
if (flg) return 1;
else return 0;
}
fclose(fp1);
fclose(fp2);
return 0;
}

0
src/make.conf Executable file → Normal file
View File

24
src/messages Executable file
View File

@ -0,0 +1,24 @@
#!/bin/sh
# Glacier messages storage
source /etc/glacier.conf
# Errors
export GLACIER_ERROR_NO_ROOT=$(printf "$red [ $error ]$reset Please run Glacier as root.\n")
export GLACIER_ERROR_DOES_NOT_EXIST=$(printf "$red [ $error ]$reset Package $input either does not exist, or is in a repository that is not enabled.\n")
export GLACIER_ERROR_CANNOT_UNPACK=$(printf "$red [ $error ]$reset Package archive cannot be unpacked.\n")
export GLACIER_ERROR_INSTRUCTIONS_CANNOT_EXECUTE=$(printf "$red [ $error ]$reset Instructions were either unable to execute, or encountered an error while executing.\n")
export GLACIER_ERROR_NO_SUCH_OPTION=$(printf "$red [ $error ]$reset Unknown option, see 'glacier -h' for usage.\n")
# Status
export GLACIER_STATUS_INSTALLING=$(printf "$blue [ i ]$reset Installing $input...\n")
export GLACIER_STATUS_UPDATING=$(printf "$blue [ i ]$reset Updating $input...\n")
export GLACIER_STATUS_REMOVING=$(printf "$blue [ i ]$reset Removing $input...\n")
export GLACIER_STATUS_CACHING=$(printf "$blue [ i ]$reset Caching $input...\n")
export GLACIER_STATUS_UNPACKING=$(printf "$blue [ i ]$reset Unpacking $input.tar.gz...\n")
export GLACIER_STATUS_INTEGRITY_CHECK=$(printf "$blue [ i ]$reset Verifying integrity of package...\n")
export GLACIER_STATUS_EXECUTING=$(printf "$blue [ i ]$reset Executing instructions...\n")
export GLACIER_WHICH_PKG=$(printf "$blue [ $question ]$reset Enter package name: ")
# Success
export GLACIER_SUCCESS=$(printf "$green [ $check ]$reset Operation finished successfully.\n")

View File

@ -1,5 +0,0 @@
#!/bin/sh
# Glacier post-operation hooks
printf "No hooks to be executed.\n"
exit 1

View File

@ -1,5 +0,0 @@
#!/bin/sh
# Hooks to be executed before performing an operation on a package
printf "No hooks to be executed.\n"
exit 0