185 lines
3.9 KiB
Bash
Executable File
185 lines
3.9 KiB
Bash
Executable File
#!/bin/sh
|
|
### Thaw ###
|
|
#
|
|
# Freon Linux package manager
|
|
# (C) Chris Dorman, 2017-2020 LGPLv2
|
|
#
|
|
### END ####
|
|
|
|
# Include Freon Linux's config
|
|
. /etc/conf.d/main.conf
|
|
. /etc/conf.d/status
|
|
|
|
# Nutrapak root
|
|
THAWROOT="/share/thaw"
|
|
# Package list
|
|
PKGLIST="/share/thaw/package.list"
|
|
# Package list name (could change in the future)
|
|
PKGLISTNAME="package.list"
|
|
# Mirror file
|
|
MIRRORFILE="/share/thaw/mirror.txt"
|
|
# TCZ mount point
|
|
TCZMOUNT="/mnt/pkg"
|
|
# Temp path
|
|
TMPPATH="/tmp/thaw"
|
|
# Installed package dir
|
|
INSTALLEDPKG="/share/thaw/installed"
|
|
|
|
if [ $(id -u) != "0" ]; then
|
|
echo "Error: must be root to operate this command."
|
|
exit 1
|
|
fi
|
|
|
|
# Check Thaw tmp directory
|
|
if [ ! -d "$TMPPATH" ]; then
|
|
mkdir $TMPPATH
|
|
fi
|
|
|
|
# Check if any packages are installed, if not fix before break
|
|
if [ ! -d "$INSTALLEDPKG" ]; then
|
|
mkdir $INSTALLEDPKG
|
|
fi
|
|
|
|
case $1 in
|
|
get-install )
|
|
echo ""
|
|
# check package list
|
|
if [ ! -s $PKGLIST ]; then
|
|
rm $PKGLIST
|
|
echo "Getting package list... "
|
|
wget $(cat $MIRRORFILE)/$PKGLISTNAME -P $THAWROOT
|
|
fi
|
|
|
|
# check if package is already installed
|
|
if [ -f "$INSTALLEDPKG/$2" ]; then
|
|
echo "${2} is already installed."
|
|
exit 0
|
|
fi
|
|
|
|
if [ -f $TMPPATH/$2 ]; then
|
|
rm $TMPPATH/$2
|
|
fi
|
|
|
|
if [ ! -d $TMPPATH/$2 ]; then
|
|
mkdir $TMPPATH/$2
|
|
fi
|
|
|
|
# Check to see if package exists, if so download
|
|
echo "Checking ${2}'s existence... "
|
|
if grep "$2" $PKGLIST > /dev/null
|
|
then
|
|
echo ""
|
|
echo "Downloading ${2}..."
|
|
|
|
wget $(cat $MIRRORFILE)/$2.tgz -P $TMPPATH/
|
|
wget $(cat $MIRRORFILE)/$2.deps -P $TMPPATH/
|
|
else
|
|
echo "${2} was not found in repository."
|
|
exit 1
|
|
fi
|
|
|
|
# Extract the downloaded file
|
|
echo -n "Extracting package to tmp... "
|
|
|
|
tar -xzf $TMPPATH/$2.tgz -C $TMPPATH/$2/
|
|
status
|
|
|
|
# Examine dependencies for package
|
|
if [ -f "$TMPPATH/$2.deps" ]; then
|
|
i=1
|
|
echo ""
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
echo "Examining dependencies... "
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
while read line; do
|
|
if [ -f "$INSTALLEDPKG/$line" ]; then
|
|
echo "$line - INSTALLED"
|
|
else
|
|
echo "$line"
|
|
fi
|
|
done < $TMPPATH/$2.deps
|
|
sleep 1
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
echo "Installing dependencies..."
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
while read line; do
|
|
if [ -f "$INSTALLEDPKG/$line" ]; then
|
|
echo "${line} already installed"
|
|
else
|
|
echo "Installing ${line} for ${2}"
|
|
thaw get-install ${line}
|
|
fi
|
|
done < $TMPPATH/$2.deps
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
|
|
fi
|
|
|
|
echo -n "Installing ${2}..."
|
|
|
|
cp -a $TMPPATH/$2/* /
|
|
status_serious
|
|
|
|
if [ -f "$TMPPATH/$2/execute.sh" ]; then
|
|
echo "Running ${2}'s execution script..."
|
|
$TMPPATH/$2/execute.sh
|
|
fi
|
|
|
|
echo -n "Cleaning up..."
|
|
if [ -f "/execute.sh" ]; then
|
|
rm /execute.sh
|
|
fi
|
|
|
|
if [ -f "/$2.deps" ]; then
|
|
rm /$2.deps
|
|
fi
|
|
|
|
if [ -f "/$2.tgz" ]; then
|
|
rm /$2.tgz
|
|
fi
|
|
|
|
rm -r $TMPPATH/*
|
|
status
|
|
|
|
echo -n "Marking ${2} in the installation database..."
|
|
touch $INSTALLEDPKG/$2
|
|
status
|
|
|
|
echo "${2} Installed!"
|
|
echo ""
|
|
;;
|
|
|
|
update )
|
|
if [ -f $PKGLIST ]; then
|
|
rm $PKGLIST
|
|
fi
|
|
|
|
echo "Getting package list... "
|
|
wget $(cat $MIRRORFILE)/$PKGLISTNAME -P $THAWROOT
|
|
status_serious
|
|
;;
|
|
|
|
search )
|
|
if [ ! -s $PKGLIST ]; then
|
|
rm $PKGLIST
|
|
echo "Getting package list... "
|
|
wget $(cat $MIRRORFILE)/$PKGLISTNAME -P $THAWROOT
|
|
status_serious
|
|
fi
|
|
|
|
echo "Searching results..."
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
grep -i "$2" $PKGLIST
|
|
echo "++++++++++++++++++++++++++++++++++++++++"
|
|
|
|
;;
|
|
|
|
* )
|
|
echo "Usage:
|
|
thaw get-install <package> : Install a package
|
|
thaw update : Update system package list
|
|
thaw search <query> : Search for a package in the database
|
|
"
|
|
;;
|
|
|
|
esac
|