Compare commits
241 Commits
everest-li
...
main
Author | SHA1 | Date | |
---|---|---|---|
f02f83b6a9 | |||
f029628842 | |||
a11e8330c0 | |||
df51893d22 | |||
13cb96df04 | |||
bd07427378 | |||
4e84af0217 | |||
b0d28489e9 | |||
|
d43995befa | ||
|
8a9641be67 | ||
|
9381aecd34 | ||
|
0da359f81b | ||
|
1b94d281a6 | ||
|
974fe1f618 | ||
|
fa1162a88c | ||
|
a2b3ad34d4 | ||
|
346b351ad0 | ||
|
3b4c6f33cf | ||
|
f09d6d45ea | ||
|
5531e98595 | ||
|
0c342167f8 | ||
|
657cbd5e78 | ||
|
96a1c55008 | ||
|
64e58daf40 | ||
|
1c62bd5b19 | ||
|
d419e95f1c | ||
|
bc7b8df2e5 | ||
|
7705ecfb8a | ||
|
677d414a28 | ||
|
de2725a475 | ||
|
f6fce7323d | ||
|
65c2ad8146 | ||
|
2be842a411 | ||
|
5688b4753d | ||
|
b5c28dd802 | ||
|
0807a13286 | ||
|
22e368c5fa | ||
|
3c4919cf0c | ||
|
ebe5e3930e | ||
9c529d1ab2 | |||
|
3b3d5ab369 | ||
8c1f892e2c | |||
e117737527 | |||
69a5f0444a | |||
|
fd6e494314 | ||
4d65c0fb9e | |||
57505be3a2 | |||
0f94ed93b6 | |||
eeac5ed390 | |||
|
b5faa209f2 | ||
1682faa871 | |||
aa0c1ff1ac | |||
863d361e98 | |||
a09bbcaa6b | |||
1e2e514b49 | |||
d5122b918b | |||
cfd90804fe | |||
8749f46706 | |||
|
5beabdbca4 | ||
|
faf8fe7ec8 | ||
|
efada985df | ||
|
73daf1bfbb | ||
|
d751e25f59 | ||
|
343a7c1285 | ||
|
a80d75b5ef | ||
|
f123f98fd6 | ||
|
0b645bd629 | ||
|
17cdc140bb | ||
|
fdc4014672 | ||
|
749b77dcd8 | ||
|
b4749dc30b | ||
|
975ad4fcd2 | ||
|
de61a35eef | ||
|
7caa78f3dd | ||
|
089fe7d668 | ||
|
2b062b9a3d | ||
|
b6aa112bd1 | ||
|
5fe0e37d68 | ||
|
e7ae67d256 | ||
|
34327f5d08 | ||
|
014a8c82a9 | ||
|
983f98d1a0 | ||
|
752ff88e76 | ||
|
b53666a47d | ||
|
49475014da | ||
|
2df34b663d | ||
|
16657923ad | ||
|
5336379812 | ||
|
683626ed85 | ||
|
88d836f4ec | ||
|
b8dbfec436 | ||
|
91bd0a6806 | ||
|
8ef2dd8bf7 | ||
|
8118597e51 | ||
|
0c8862f7b0 | ||
|
40ee42ce9b | ||
|
b2e8ec0b9e | ||
|
de0f023009 | ||
|
1af0eeccb1 | ||
|
c14ef72f62 | ||
|
797f942301 | ||
|
f5b99b1efe | ||
|
f9fe4831e5 | ||
|
58ad767e30 | ||
|
d38cf63cd1 | ||
|
f6742f5a3e | ||
|
33d1d962b7 | ||
|
7e505404a6 | ||
|
12cfa49d20 | ||
|
110c8fcd21 | ||
|
f3778f7ea4 | ||
|
9e9f705fa3 | ||
|
ed024fdab0 | ||
|
e0ce15a616 | ||
|
bcf274a714 | ||
|
a82e25c980 | ||
|
2f21ad528f | ||
|
47f2dddd46 | ||
|
94154b0bf2 | ||
|
09b3305b1b | ||
|
0628947fcc | ||
|
637b4b50d1 | ||
|
7deb3bbb60 | ||
|
114757443d | ||
|
a4627aa1ed | ||
|
9c8c686bf3 | ||
|
c67ea416d3 | ||
|
167bfce674 | ||
|
1188467cd0 | ||
|
6048a99fb2 | ||
|
bdf412eab6 | ||
|
0e616b6771 | ||
|
12bb41baae | ||
|
37b2d829e3 | ||
|
dd017d57d1 | ||
|
c83c6a6cbc | ||
|
81b2247840 | ||
|
3eaa78fc18 | ||
|
9739ea56af | ||
|
b134177b9e | ||
|
4085450712 | ||
|
b555f13f71 | ||
|
af551c95ee | ||
|
41191edda5 | ||
|
489f11e718 | ||
|
3101ad6d6e | ||
|
f65684c0fd | ||
|
143aa68687 | ||
|
1b446e7096 | ||
|
6b3ee3f6e5 | ||
|
b1ba7830a7 | ||
|
d64f208f1a | ||
|
61e3c1b9a3 | ||
|
4f92bbebcc | ||
|
b70d0070d0 | ||
|
40c11082bf | ||
|
3d5c4e0cf3 | ||
|
6f2576170e | ||
|
65662a51e7 | ||
|
37cccd709b | ||
|
6c0a7ded21 | ||
|
1ff803c044 | ||
|
18cd53cbce | ||
|
480e8fe243 | ||
|
7384bb3126 | ||
|
4a6010ac0e | ||
|
6b2e9c9167 | ||
|
a9c50a2c69 | ||
|
c122f5c616 | ||
|
d3b7c2585a | ||
|
a720c23349 | ||
|
11ac289950 | ||
|
e55679d379 | ||
|
ecae5c90ad | ||
|
3fc83bc766 | ||
|
bac21d1925 | ||
|
0b2d3e0e2f | ||
|
cdfba90742 | ||
|
de9dbf0918 | ||
|
66c7e0beb8 | ||
|
c2355528c4 | ||
|
ce6904a236 | ||
|
241e1f543e | ||
|
dbfa201253 | ||
|
a8c1675e14 | ||
|
d545cef36d | ||
|
fea857a8e5 | ||
|
afeddfdeda | ||
|
f27646242a | ||
|
f8ef09df29 | ||
|
1c498e9553 | ||
|
ea3ea66f2d | ||
|
dfc44a179a | ||
|
b40e3e55cf | ||
|
0d6b9fcbc0 | ||
|
85c3169139 | ||
|
5597383b6c | ||
|
1b7f0699e3 | ||
|
3643b20cc1 | ||
|
5b451429ff | ||
|
99d6b8a9e4 | ||
|
3dc076e7cd | ||
|
89c8a66edf | ||
|
5c3c31b70d | ||
|
59cbc4c4b4 | ||
|
999da41b24 | ||
|
d13c54df8d | ||
|
3532e3c0cd | ||
|
4c742b675d | ||
|
2f0161baac | ||
|
8d61a9b07e | ||
|
ecfefffd87 | ||
|
2c0dde990b | ||
|
3668844cb6 | ||
|
002ad51ee8 | ||
|
1f76be2199 | ||
|
544f1e00f1 | ||
|
aab61f1bde | ||
|
65dc8a31ef | ||
|
0b3d502f37 | ||
|
3d753bcec3 | ||
|
1ffb79e849 | ||
|
d7bb7320a0 | ||
|
a9f125a2ab | ||
|
8a21e53041 | ||
|
2d466f47cb | ||
|
0311d859c9 | ||
|
554bf6724f | ||
|
e3162699c0 | ||
|
5ab3b73ec0 | ||
|
25ae7889bb | ||
|
f76856aa1d | ||
|
f18c602dab | ||
|
a3cc13e0ef | ||
|
41b095a399 | ||
|
f49c641245 | ||
|
0c8967c637 | ||
|
cc1e89bf51 | ||
|
98406ad3b5 | ||
|
f23b755981 | ||
|
cc916a54ed |
95
README
Normal file
95
README
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
+-----------------+
|
||||||
|
| [*] 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/>.
|
@ -1,6 +0,0 @@
|
|||||||
# Glacier
|
|
||||||
Glacier is the package manager developed for Everest Linux. It automatically fetches a tarball, unzips it, and compiles it.
|
|
||||||
|
|
||||||
For Glacier to work properly, it needs the following directories to be made:
|
|
||||||
|
|
||||||
`/usr/local/lib/glacier/packages`
|
|
@ -1,14 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# glacier-install
|
|
||||||
# Script used to fetch installation scripts and run them
|
|
||||||
|
|
||||||
echo "[ ? ] Enter package name:" && read input
|
|
||||||
echo "[ i ] Downloading source tarball for $input..."
|
|
||||||
wget https://github.com/everest-linux/glacier-pkgs/raw/main/pkgs/$input.tar.gz
|
|
||||||
echo "[ i ] Unpacking $input.tar.gz..."
|
|
||||||
tar -xvf $input.tar.gz
|
|
||||||
cd $input
|
|
||||||
chmod +x INSTALL.sh
|
|
||||||
./INSTALL.sh
|
|
||||||
rm $input.tar.gz
|
|
||||||
echo "Done."
|
|
72
install/build.sh
Executable file
72
install/build.sh
Executable file
@ -0,0 +1,72 @@
|
|||||||
|
#!/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
|
13
install/install.conf.def
Executable file
13
install/install.conf.def
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/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"
|
490
src/glacier
Executable file
490
src/glacier
Executable file
@ -0,0 +1,490 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Glacier - manage installed packages on a Linux system
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
|
||||||
|
. /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"
|
||||||
|
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"
|
||||||
|
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
|
||||||
|
|
||||||
|
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 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 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 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"
|
||||||
|
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
|
||||||
|
|
||||||
|
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 Failed to commit to transaction - permission denied. Are you root?\n"
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
exit 1
|
185
src/glacier-mkimg/glacier-mkimg
Executable file
185
src/glacier-mkimg/glacier-mkimg
Executable file
@ -0,0 +1,185 @@
|
|||||||
|
#!/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
|
37
src/glacier.conf
Executable file
37
src/glacier.conf
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
# /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
|
||||||
|
|
||||||
|
export GREPO="https://git.everestlinux.org/EverestLinux/glacier-pkgs/raw/branch/main"
|
||||||
|
export ALLOWED_REPOS=("world" "galaxy" "universe" "multiverse")
|
||||||
|
|
||||||
|
# Define colors and unicode symbols to be used
|
||||||
|
export red="\033[1;31m"
|
||||||
|
export green="\033[1;32m"
|
||||||
|
export yellow="\033[1;33m"
|
||||||
|
export blue="\033[1;34m"
|
||||||
|
export reset="\033[m"
|
||||||
|
export check="\xE2\x9C\x93"
|
||||||
|
export error="\xE2\x9C\x95"
|
||||||
|
export warning="\x21"
|
||||||
|
export question="\x3F"
|
||||||
|
|
||||||
|
# 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="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
|
||||||
|
#
|
||||||
|
|
430
src/glacier.test
Executable file
430
src/glacier.test
Executable file
@ -0,0 +1,430 @@
|
|||||||
|
#!/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
|
5
src/hooks
Executable file
5
src/hooks
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Glacier Preloading Hooks
|
||||||
|
|
||||||
|
source /etc/make.conf
|
||||||
|
source /etc/glacier.conf
|
10
src/hooks.sh
Executable file
10
src/hooks.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# 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 "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
|
||||||
|
|
72
src/int-check/main.c
Normal file
72
src/int-check/main.c
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/* 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;
|
||||||
|
}
|
40
src/make.conf
Executable file
40
src/make.conf
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#
|
||||||
|
# make.conf - optimizations and flags for make
|
||||||
|
#
|
||||||
|
|
||||||
|
# Number of parallel makejobs. Change this number to your CPUs cores + threads.
|
||||||
|
# Example: 6 cores + 6 threads = 12
|
||||||
|
MAKEFLAGS="-j1"
|
||||||
|
|
||||||
|
# Build and compile flags for C and C++ programs.
|
||||||
|
# Disable these if packages are breaking.
|
||||||
|
# Using too many optimizations may break packages.
|
||||||
|
CFLAGS="-02"
|
||||||
|
CXXFLAGS="${CFLAGS}"
|
||||||
|
|
||||||
|
# Flag which treats all warnings as errors.
|
||||||
|
# Not recommended, as many packages with large codebases will refuse to compile.
|
||||||
|
#CFLAGS="-Werror"
|
||||||
|
|
||||||
|
# Prefix for installed packages. Most packages will follow this.
|
||||||
|
# Some packages may have their own prefix. For instance, appimages will install to /usr/share/appimages, and be symlinked to /bin.
|
||||||
|
PREFIX="/usr"
|
||||||
|
#PREFIX="/usr/local"
|
||||||
|
|
||||||
|
# CPU architecture. Most users will use x86_64.
|
||||||
|
# This setting should manually set itself. If it doesn't, set it manually.
|
||||||
|
# Note that some packages will not compile for other architectures.
|
||||||
|
# Example: ARCH="x86_64"
|
||||||
|
ARCH="${MACHTYPE}"
|
||||||
|
|
||||||
|
# Triplet for the target system.
|
||||||
|
# This should only be used if cross compiling.
|
||||||
|
# For reference, Everest's triplet is x86_64-linux-musl.
|
||||||
|
#TARGET="x86_64-linux-musl"
|
||||||
|
#TARGET="x86_64-pc-linux-gnu"
|
||||||
|
#TARGET="i386-linux-musl"
|
||||||
|
#TARGET="i386-pc-linux-gnu"
|
||||||
|
|
||||||
|
#
|
||||||
|
# end make.conf
|
||||||
|
#
|
5
src/post-hooks
Executable file
5
src/post-hooks
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Glacier post-operation hooks
|
||||||
|
|
||||||
|
printf "No hooks to be executed.\n"
|
||||||
|
exit 1
|
5
src/pre-hooks
Executable file
5
src/pre-hooks
Executable file
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Hooks to be executed before performing an operation on a package
|
||||||
|
|
||||||
|
printf "No hooks to be executed.\n"
|
||||||
|
exit 0
|
Loading…
Reference in New Issue
Block a user