The main tool
This commit is contained in:
cypher 2020-04-20 19:27:26 -04:00
parent e4a6a27b8c
commit 7bbbed86c4
1 changed files with 88 additions and 0 deletions

88
grab Normal file
View File

@ -0,0 +1,88 @@
#!/usr/bin/env bash
# bin/compile <build-dir> <cache-dir>
echo starting install...
echo press ctrl-D to stop
# fail fast
set -e
# debug
# set -x
# parse and derive params
BUILD_DIR=/home/$USER
CACHE_DIR=/tmp
LP_DIR=`cd $(dirname $0); cd ..; pwd`
function error() {
echo " ! $*" >&2
exit 1
}
function topic() {
echo "----------> $*"
}
function indent() {
c='s/^/ /'
case $(uname) in
Darwin) sed -l "$c";;
*) sed -u "$c";;
esac
}
APT_CACHE_DIR="$CACHE_DIR/apt/cache"
APT_STATE_DIR="$CACHE_DIR/apt/state"
APT_SOURCELIST_DIR="$CACHE_DIR/apt/sources" # place custom sources.list here
APT_SOURCES="$APT_SOURCELIST_DIR/sources.list"
APT_OPTIONS="-o debug::nolocking=true -o dir::cache=$APT_CACHE_DIR -o dir::state=$APT_STATE_DIR"
APT_OPTIONS="$APT_OPTIONS -o dir::etc::sourcelist=$APT_SOURCES"
rm -rf $APT_CACHE_DIR
mkdir -p "$APT_CACHE_DIR/archives/partial"
mkdir -p "$APT_STATE_DIR/lists/partial"
mkdir -p "$APT_SOURCELIST_DIR" # make dir for sources
cat "/etc/apt/sources.list" > "$APT_SOURCES" # no cp here
topic "Updating apt caches"
apt-get $APT_OPTIONS update | indent
for PACKAGE in $*; do
if [[ $PACKAGE == *deb ]]; then
PACKAGE_NAME=$(basename $PACKAGE .deb)
PACKAGE_FILE=$APT_CACHE_DIR/archives/$PACKAGE_NAME.deb
topic "Fetching $PACKAGE"
curl -s -L -z $PACKAGE_FILE -o $PACKAGE_FILE $PACKAGE 2>&1 | indent
else
topic "Fetching .debs for $PACKAGE"
apt-get $APT_OPTIONS -y --force-yes -d install --reinstall $PACKAGE | indent
fi
done
mkdir -p $BUILD_DIR/.apt
for DEB in $(ls -1 $APT_CACHE_DIR/archives/*.deb); do
topic "Installing $(basename $DEB)"
dpkg -x $DEB $BUILD_DIR/.apt/
done
topic "Rewrite package-config files"
find $BUILD_DIR/.apt -type f -ipath '*/pkgconfig/*.pc' | xargs --no-run-if-empty -n 1 sed -i -e 's!^prefix=\(.*\)$!prefix='"$BUILD_DIR"'/.apt\1!g'
echo "##################################"
echo install details
echo package:
echo $PACKAGE_NAME
echo user:
echo $USER
echo cahche_dir:
echo $APT_CACHE_DIR
echo sources:
echo $APT_SOURCELIST_DIR
echo "#################################"