Add files via upload
This commit is contained in:
@@ -1,191 +1,191 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Altitude, a simple apt wrapper written in shell
|
# Altitude, a simple apt wrapper written in shell
|
||||||
# Code borrowed from Google's Android toolchain repo, file named "build-lucid-multilib-toolchain.sh"
|
# Code borrowed from Google's Android toolchain repo, file named "build-lucid-multilib-toolchain.sh"
|
||||||
|
|
||||||
set -eE
|
set -eE
|
||||||
|
|
||||||
DEFAULT_DISTRO="debian"
|
DEFAULT_DISTRO="debian"
|
||||||
DEFAULT_RELEASE="buster"
|
DEFAULT_RELEASE="buster"
|
||||||
DEFAULT_ARCH="amd64"
|
DEFAULT_ARCH="amd64"
|
||||||
MIRROR="http://mirrors.us.kernel.org"
|
MIRROR="http://mirrors.us.kernel.org"
|
||||||
ALTITUDE_CFG=".altitude/altitude.cfg"
|
ALTITUDE_CFG=".altitude/altitude.cfg"
|
||||||
ALTITUDE_INSTALLED_LIST=".altitude/altitude_installed.list.d"
|
ALTITUDE_INSTALLED_LIST=".altitude/altitude_installed.list.d"
|
||||||
DOWNLOAD_DIR="`mktemp -d /tmp/altitude_dl.XXXXXXX`"
|
DOWNLOAD_DIR="`mktemp -d /tmp/altitude_dl.XXXXXXX`"
|
||||||
|
|
||||||
trap "rm -rf /tmp/altitude_* && exit 1" EXIT
|
trap "rm -rf /tmp/altitude_* && exit 1" EXIT
|
||||||
|
|
||||||
help()
|
help()
|
||||||
{
|
{
|
||||||
cat <<help
|
cat <<help
|
||||||
|
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
`basename ${0}` [--sysroot|-s] [--mirror|-m] [--release|-r] [--arch|-a] [--distro|-d] <--install|i || --uninstall|-u> <PACKAGES>
|
`basename ${0}` [--sysroot|-s] [--mirror|-m] [--release|-r] [--arch|-a] [--distro|-d] <--install|i || --uninstall|-u> <PACKAGES>
|
||||||
|
|
||||||
|
|
||||||
help
|
help
|
||||||
}
|
}
|
||||||
|
|
||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
mkdir -p ${ALTITUDE_INSTALLED_LIST}
|
mkdir -p ${ALTITUDE_INSTALLED_LIST}
|
||||||
echo -e "Which default distro:\n[1] - debian\n[2] - ubuntu\n"
|
echo -e "Which default distro:\n[1] - debian\n[2] - ubuntu\n"
|
||||||
read DISTRO
|
read DISTRO
|
||||||
[ -z ${DISTRO} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_DISTRO}" && echo "export DISTRO=\"${DEFAULT_DISTRO}\|" >${ALTITUDE_CFG}
|
[ -z ${DISTRO} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_DISTRO}" && echo "export DISTRO=\"${DEFAULT_DISTRO}\|" >${ALTITUDE_CFG}
|
||||||
echo -e "Which default distro version:\n"
|
echo -e "Which default distro version:\n"
|
||||||
read RELEASE
|
read RELEASE
|
||||||
[ -z ${RELEASE} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_RELEASE}" && echo "export RELEASE=\"${DEFAULT_RELEASE}\|" >>${ALTITUDE_CFG}
|
[ -z ${RELEASE} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_RELEASE}" && echo "export RELEASE=\"${DEFAULT_RELEASE}\|" >>${ALTITUDE_CFG}
|
||||||
echo -e "Which default destination folder:\n"
|
echo -e "Which default destination folder:\n"
|
||||||
read SYSROOT
|
read SYSROOT
|
||||||
[ -z ${SYSROOT} ] && echo -e "No typed!\nDefaults to: ${HOME}/altitude" && echo "export SYSROOT=\"${HOME}/altitude\|" >>${ALTITUDE_CFG}
|
[ -z ${SYSROOT} ] && echo -e "No typed!\nDefaults to: ${HOME}/altitude" && echo "export SYSROOT=\"${HOME}/altitude\|" >>${ALTITUDE_CFG}
|
||||||
echo -e "Which default arch:\n"
|
echo -e "Which default arch:\n"
|
||||||
read ARCH
|
read ARCH
|
||||||
[ -z ${ARCH} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_ARCH}" && echo "export ARCH=\"${DEFAULT_ARCH}\|" >>${ALTITUDE_CFG}
|
[ -z ${ARCH} ] && echo -e "No typed!\nDefaults to: ${DEFAULT_ARCH}" && echo "export ARCH=\"${DEFAULT_ARCH}\|" >>${ALTITUDE_CFG}
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ ${#} != 0 ]; then
|
if [ ${#} != 0 ]; then
|
||||||
for arg in ${@}; do
|
for arg in ${@}; do
|
||||||
v="${arg#*=}"
|
v="${arg#*=}"
|
||||||
case ${arg} in
|
case ${arg} in
|
||||||
--sysroot=*|-s\ *) export SYSROOT="${v}" ;;
|
--sysroot=*|-s\ *) export SYSROOT="${v}" ;;
|
||||||
--mirror=*|-m\ *) export MIRROR="${v}" ;;
|
--mirror=*|-m\ *) export MIRROR="${v}" ;;
|
||||||
--release=*|-r\ *) export RELEASE="${v}" ;;
|
--release=*|-r\ *) export RELEASE="${v}" ;;
|
||||||
--arch=*|-a\ *) export ARCH="${v}"
|
--arch=*|-a\ *) export ARCH="${v}" ;;
|
||||||
--distro=*|-d\ *) export DISTRO="${v}";;
|
--distro=*|-d\ *) export DISTRO="${v}" ;;
|
||||||
--install=*|-i\ *) export PACKAGES="${@}" && METHOD="install" ;;
|
--install=*|-i\ *) export PACKAGES="${@}" && METHOD="install" ;;
|
||||||
--uninstall=*|-u\ *) export PACKAGES="${@}" && METHOD="uninstall" ;;
|
--uninstall=*|-u\ *) export PACKAGES="${@}" && METHOD="uninstall" ;;
|
||||||
--init) init ;;
|
--init) init ;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
if [ -e ${ALTITUDE_CFG} ]; then
|
if [ -e ${ALTITUDE_CFG} ]; then
|
||||||
help
|
help
|
||||||
else
|
else
|
||||||
init
|
init
|
||||||
fi
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
. ${ALTITUDE_CFG}
|
. ${ALTITUDE_CFG}
|
||||||
|
|
||||||
# A variant of 'download_file' used to specify the target directory
|
# A variant of 'download_file' used to specify the target directory
|
||||||
# $1: source URL
|
# $1: source URL
|
||||||
# $2: target directory
|
# $2: target directory
|
||||||
download_file()
|
download_file()
|
||||||
{
|
{
|
||||||
local URL="$1"
|
local URL="$1"
|
||||||
local DIR="$2"
|
local DIR="$2"
|
||||||
local DST="$DIR/`basename $URL`"
|
local DST="$DIR/`basename $URL`"
|
||||||
mkdir -p $DIR
|
mkdir -p $DIR
|
||||||
wget -c --no-check-cert "$URL" -O "$DST" || false
|
wget -c --no-check-cert "$URL" -O "$DST" || false
|
||||||
}
|
}
|
||||||
|
|
||||||
no_trailing_slash()
|
no_trailing_slash()
|
||||||
{
|
{
|
||||||
echo ${1##/}
|
echo ${1##/}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Load the Debian packages file. This is a long text file that will list
|
# Load the Debian packages file. This is a long text file that will list
|
||||||
# each package for a given release.
|
# each package for a given release.
|
||||||
# $1: Mirror base URL (e.g. http://mirrors.us.kernel.org/)
|
# $1: Mirror base URL (e.g. http://mirrors.us.kernel.org/)
|
||||||
# $2: Release name
|
# $2: Release name
|
||||||
get_packages_list ()
|
get_packages_list ()
|
||||||
{
|
{
|
||||||
local RELEASE=$2
|
local RELEASE=$2
|
||||||
local BASE="`no_trailing_slash \"$1\"`"
|
local BASE="`no_trailing_slash \"$1\"`"
|
||||||
local SRCFILE DSTFILE
|
local SRCFILE DSTFILE
|
||||||
for UA in $ARCH; do
|
for UA in $ARCH; do
|
||||||
SRCFILE="$BASE/${DISTRO}/dists/$RELEASE/main/binary-$UA/Packages.xz"
|
SRCFILE="$BASE/${DISTRO}/dists/$RELEASE/main/binary-$UA/Packages.xz"
|
||||||
DSTFILE="$DOWNLOAD_DIR/Packages-$UA.bz2"
|
DSTFILE="$DOWNLOAD_DIR/Packages-$UA.bz2"
|
||||||
download_file "$SRCFILE" "$DSTFILE" || exit 255
|
download_file "$SRCFILE" "$DSTFILE" || exit 255
|
||||||
(cd $DOWNLOAD_DIR && xzcat Packages-$UA.bz2 > Packages-$UA)
|
(cd $DOWNLOAD_DIR && xzcat Packages-$UA.bz2 > Packages-$UA)
|
||||||
done
|
done
|
||||||
|
|
||||||
# Write a small awk script used to extract filenames for a given package
|
# Write a small awk script used to extract filenames for a given package
|
||||||
cat > $DOWNLOAD_DIR/extract-filename.awk <<EOF
|
cat > $DOWNLOAD_DIR/extract-filename.awk <<EOF
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# escape special characters in package name
|
# escape special characters in package name
|
||||||
gsub("\\\\.","\\\\.",PKG)
|
gsub("\\\\.","\\\\.",PKG)
|
||||||
gsub("\\\\+","\\\\+",PKG)
|
gsub("\\\\+","\\\\+",PKG)
|
||||||
FILE = ""
|
FILE = ""
|
||||||
PACKAGE = ""
|
PACKAGE = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
\$1 == "Package:" {
|
\$1 == "Package:" {
|
||||||
if (\$2 == PKG) {
|
if (\$2 == PKG) {
|
||||||
PACKAGE = \$2
|
PACKAGE = \$2
|
||||||
} else {
|
} else {
|
||||||
PACKAGE = ""
|
PACKAGE = ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
\$1 == "Filename:" && PACKAGE == PKG {
|
\$1 == "Filename:" && PACKAGE == PKG {
|
||||||
FILE = \$2
|
FILE = \$2
|
||||||
}
|
}
|
||||||
|
|
||||||
END {
|
END {
|
||||||
print FILE
|
print FILE
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
# Convert an unversioned package name into a .deb package URL
|
# Convert an unversioned package name into a .deb package URL
|
||||||
# $1: Package name without version information (e.g. libc6-dev)
|
# $1: Package name without version information (e.g. libc6-dev)
|
||||||
# $2: Mirror base URL
|
# $2: Mirror base URL
|
||||||
# $3: Arch
|
# $3: Arch
|
||||||
get_package_deb_url ()
|
get_package_deb_url ()
|
||||||
{
|
{
|
||||||
# The following is an awk command to parse the Packages file and extract
|
# The following is an awk command to parse the Packages file and extract
|
||||||
# the filename of a given package.
|
# the filename of a given package.
|
||||||
local BASE="`no_trailing_slash \"$1\"`"
|
local BASE="`no_trailing_slash \"$1\"`"
|
||||||
local FILE=`awk -f "$DOWNLOAD_DIR/extract-filename.awk" -v PKG=$1 $DOWNLOAD_DIR/Packages-$3`
|
local FILE=`awk -f "$DOWNLOAD_DIR/extract-filename.awk" -v PKG=$1 $DOWNLOAD_DIR/Packages-$3`
|
||||||
if [ -z "$FILE" ]; then
|
if [ -z "$FILE" ]; then
|
||||||
echo "Could not find filename for package $1"
|
echo "Could not find filename for package $1"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "$2/${DISTRO}/$FILE"
|
echo "$2/${DISTRO}/$FILE"
|
||||||
}
|
}
|
||||||
|
|
||||||
install()
|
install()
|
||||||
{
|
{
|
||||||
get_packages_list "$MIRROR" "$RELEASE"
|
get_packages_list "$MIRROR" "$RELEASE"
|
||||||
rm -f $DOWNLOAD_DIR/SOURCES && touch $DOWNLOAD_DIR/SOURCES
|
rm -f $DOWNLOAD_DIR/SOURCES && touch $DOWNLOAD_DIR/SOURCES
|
||||||
for PACKAGE in $PACKAGES; do
|
for PACKAGE in $PACKAGES; do
|
||||||
echo "Downloading $PACKAGE"
|
echo "Downloading $PACKAGE"
|
||||||
PKGURL=`get_package_deb_url $PACKAGE $MIRROR $ARCH`
|
PKGURL=`get_package_deb_url $PACKAGE $MIRROR $ARCH`
|
||||||
echo "URL: $PKGURL"
|
echo "URL: $PKGURL"
|
||||||
download_file $PKGURL $DOWNLOAD_DIR || return 1
|
download_file $PKGURL $DOWNLOAD_DIR || return 1
|
||||||
done
|
done
|
||||||
#sha1sum $DOWNLOAD_DIR/*.deb | while read LINE; do
|
#sha1sum $DOWNLOAD_DIR/*.deb | while read LINE; do
|
||||||
# PACKAGE=$(basename $(echo $LINE | awk '{ print $2;}'))
|
# PACKAGE=$(basename $(echo $LINE | awk '{ print $2;}'))
|
||||||
# SHA1=$(echo $LINE | awk '{ print $1; }')
|
# SHA1=$(echo $LINE | awk '{ print $1; }')
|
||||||
# printf "%-64s %s\n" $PACKAGE $SHA1 >> $DOWNLOAD_DIR/SOURCES
|
# printf "%-64s %s\n" $PACKAGE $SHA1 >> $DOWNLOAD_DIR/SOURCES
|
||||||
#done
|
#done
|
||||||
|
|
||||||
for PACKAGE in $PACKAGES; do
|
for PACKAGE in $PACKAGES; do
|
||||||
FAKEROOT="`mktemp -d /tmp/altitude_fakeroot.XXXXXXX`"
|
FAKEROOT="`mktemp -d /tmp/altitude_fakeroot.XXXXXXX`"
|
||||||
PKGURL=`get_package_deb_url $PACKAGE $MIRROR $ARCH`
|
PKGURL=`get_package_deb_url $PACKAGE $MIRROR $ARCH`
|
||||||
SRC_PKG=$DOWNLOAD_DIR/`basename $PKGURL`
|
SRC_PKG=$DOWNLOAD_DIR/`basename $PKGURL`
|
||||||
echo "Extracting $SRC_PKG"
|
echo "Extracting $SRC_PKG"
|
||||||
ar -x $SRC_PKG
|
ar -x $SRC_PKG
|
||||||
tar -xf data.tar.* -C ${FAKEROOT} || return 1
|
tar -xf data.tar.* -C ${FAKEROOT} || return 1
|
||||||
(cd ${FAKEROOT}; find . -type f >${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list) || return 1
|
(cd ${FAKEROOT}; find . -type f >${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list) || return 1
|
||||||
rsync -r ${FAKEROOT}/* ${SYSROOT} >/dev/null 2>&1 || return 1
|
rsync -r ${FAKEROOT}/* ${SYSROOT} >/dev/null 2>&1 || return 1
|
||||||
rm -rf ${FAKEROOT}
|
rm -rf ${FAKEROOT}
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
uninstall()
|
uninstall()
|
||||||
{
|
{
|
||||||
for PACKAGE in $PACKAGES; do
|
for PACKAGE in $PACKAGES; do
|
||||||
for FILE in `cat ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list`
|
for FILE in `cat ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list`
|
||||||
rm -f ${FILE} || return 1
|
rm -f ${FILE} || return 1
|
||||||
done
|
done
|
||||||
rm -f ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list || return 1
|
rm -f ${ALTITUDE_INSTALLED_LIST}/${PACKAGE}.list || return 1
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
${METHOD}
|
${METHOD}
|
||||||
trap - EXIT
|
trap - EXIT
|
||||||
exit 0
|
exit 0
|
||||||
Reference in New Issue
Block a user