Last active
May 13, 2025 21:20
-
-
Save akrez/c873829ae9617b86380311af00b508be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
function error { | |
echo "$1" 1>&2 | |
exit 1 | |
} | |
function check_admin() { | |
if [[ $EUID -ne 0 ]]; then | |
error "RUN AS ROOT" | |
fi | |
} | |
function change_owner() { | |
chown -R _apt:root "$1" || error "FAILED TO CHANGE OWNER : $1" | |
} | |
function make_directory() { | |
mkdir -p -m755 "$1" || error "FAILED TO MAKE DIRECTORY : $1" | |
change_owner "$1" || error "FAILED TO CHANGE OWNER : $1" | |
} | |
function detect_os() { | |
echo $(realpath $(dirname ${BASH_SOURCE[0]}))/$(lsb_release -si)-$(lsb_release -sr) | |
} | |
function download() { | |
if ! apt-cache show "$1" >/dev/null 2>&1; then | |
error "APT-CACHE NOT FOUND PACKAGE : $1" | |
fi | |
dpkg --print-foreign-architectures | grep -q i386 && sudo dpkg --remove-architecture i386 | |
PACKAGES_AND_DEPENDS=$(apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances $1 | grep "^\w" | sort -u); | |
apt download $PACKAGES_AND_DEPENDS | |
} | |
function scan() { | |
dpkg-scanpackages --multiversion ./ /dev/null | gzip -9c >./Packages.gz | |
echo -e "deb [trusted=yes] file://$ABSOLUTE_BASE_PATH ./" > sources.list | |
} | |
if [ $# -gt 0 ]; then | |
COMMAND="$1" | |
shift | |
else | |
error "EMPTY COMMAND" | |
fi | |
check_admin | |
ABSOLUTE_BASE_PATH=$(detect_os) | |
make_directory $ABSOLUTE_BASE_PATH | |
cd $ABSOLUTE_BASE_PATH | |
if [ $COMMAND == "download" ]; then | |
for PACKAGE in $*; do | |
download $PACKAGE | |
make_directory "$ABSOLUTE_BASE_PATH/$PACKAGE"; | |
done | |
change_owner $ABSOLUTE_BASE_PATH | |
scan | |
elif [ $COMMAND == "scan" ]; then | |
scan | |
elif [ $COMMAND == "install" ]; then | |
sudo apt update -o Dir::Etc::sourcelist="$ABSOLUTE_BASE_PATH/sources.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" | |
sudo apt install -o Dir::Etc::sourcelist="$ABSOLUTE_BASE_PATH/sources.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0" $* | |
else | |
error "INVALID COMMAND" | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment