From 3f80978ab2f3032de97634774754430311c5e8b7 Mon Sep 17 00:00:00 2001 From: Daniel <66517614+danielkot@users.noreply.github.com> Date: Wed, 21 Apr 2021 22:24:46 +0200 Subject: [PATCH] Add files via upload --- altitude | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 altitude diff --git a/altitude b/altitude new file mode 100644 index 0000000..530283e --- /dev/null +++ b/altitude @@ -0,0 +1,191 @@ +#!/usr/bin/env bash + +# Altitude, a simple apt wrapper written in shell +# Code borrowed from Google's Android toolchain repo, file named "build-lucid-multilib-toolchain.sh" + +set -eE + +DEFAULT_DISTRO="debian" +DEFAULT_RELEASE="buster" +DEFAULT_ARCH="amd64" +MIRROR="http://mirrors.us.kernel.org" +ALTITUDE_CFG=".altitude/altitude.cfg" +ALTITUDE_INSTALLED_LIST=".altitude/altitude_installed.list.d" +DOWNLOAD_DIR="`mktemp -d /tmp/altitude_dl.XXXXXXX`" + +trap "rm -rf /tmp/altitude_* && exit 1" EXIT + +help() +{ + cat < + + +help +} + +init() +{ + mkdir -p ${ALTITUDE_INSTALLED_LIST} + echo -e "Which default distro:\n[1] - debian\n[2] - ubuntu\n" + read DISTRO + [ -z ${DISTRO} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_DISTRO}" && echo "export DISTRO=\"${DEFAULT_DISTRO}\|" >${ALTITUDE_CFG} + echo -e "Which default distro version:\n" + read RELEASE + [ -z ${RELEASE} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_RELEASE}" && echo "export RELEASE=\"${DEFAULT_RELEASE}\|" >>${ALTITUDE_CFG} + echo -e "Which default destination folder:\n" + read SYSROOT + [ -z ${SYSROOT} ] && echo -e "No typed!\nDefaults to: ${HOME}/altitude" && echo "export SYSROOT=\"${HOME}/altitude\|" >>${ALTITUDE_CFG} + echo -e "Which default arch:\n" + read ARCH + [ -z ${ARCH} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_ARCH}" && echo "export ARCH=\"${DEFAULT_ARCH}\|" >>${ALTITUDE_CFG} +} + +if [ ${#} != 0 ]; then + for arg in ${@}; do + v="${arg#*=}" + case ${arg} in + --sysroot=*|-s\ *) export SYSROOT="${v}" ;; + --mirror=*|-m\ *) export MIRROR="${v}" ;; + --release=*|-r\ *) export RELEASE="${v}" ;; + --arch=*|-a\ *) export ARCH="${v}" + --distro=*|-d\ *) export DISTRO="${v}";; + --install=*|-i\ *) export PACKAGES="${@}" && METHOD="install" ;; + --uninstall=*|-u\ *) export PACKAGES="${@}" && METHOD="uninstall" ;; + --init) init ;; + esac + done +else + if [ -e ${ALTITUDE_CFG} ]; then + help + else + init + fi + exit 0 +fi + +. ${ALTITUDE_CFG} + +# A variant of 'download_file' used to specify the target directory +# $1: source URL +# $2: target directory +download_file() +{ + local URL="$1" + local DIR="$2" + local DST="$DIR/`basename $URL`" + mkdir -p $DIR + wget -c --no-check-cert "$URL" -O "$DST" || false +} + +no_trailing_slash() +{ + echo ${1##/} +} + +# Load the Debian packages file. This is a long text file that will list +# each package for a given release. +# $1: Mirror base URL (e.g. http://mirrors.us.kernel.org/) +# $2: Release name +get_packages_list () +{ + local RELEASE=$2 + local BASE="`no_trailing_slash \"$1\"`" + local SRCFILE DSTFILE + for UA in $ARCH; do + SRCFILE="$BASE/${DISTRO}/dists/$RELEASE/main/binary-$UA/Packages.xz" + DSTFILE="$DOWNLOAD_DIR/Packages-$UA.bz2" + download_file "$SRCFILE" "$DSTFILE" || exit 255 + (cd $DOWNLOAD_DIR && xzcat Packages-$UA.bz2 > Packages-$UA) + done + + # Write a small awk script used to extract filenames for a given package + cat > $DOWNLOAD_DIR/extract-filename.awk <> $DOWNLOAD_DIR/SOURCES + #done + + for PACKAGE in $PACKAGES; do + FAKEROOT="`mktemp -d /tmp/altitude_fakeroot.XXXXXXX`" + PKGURL=`get_package_deb_url $PACKAGE $MIRROR $ARCH` + SRC_PKG=$DOWNLOAD_DIR/`basename $PKGURL` + echo "Extracting $SRC_PKG" + ar -x $SRC_PKG + tar -xf data.tar.* -C ${FAKEROOT} || return 1 + (cd ${FAKEROOT}; find . -type f >${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list) || return 1 + rsync -r ${FAKEROOT}/* ${SYSROOT} >/dev/null 2>&1 || return 1 + rm -rf ${FAKEROOT} + done +} + +uninstall() +{ + for PACKAGE in $PACKAGES; do + for FILE in `cat ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list` + rm -f ${FILE} || return 1 + done + rm -f ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list || return 1 + done +} + +${METHOD} +trap - EXIT +exit 0 \ No newline at end of file