88 lines
2.1 KiB
Bash
88 lines
2.1 KiB
Bash
#!/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 "#################################"
|
|
|
|
|