Skip to content

Commit

Permalink
Reference count sources list files so packages that share repositorie…
Browse files Browse the repository at this point in the history
…s work together nicely (wimpysworld#643)

* Count references when repository already exists

* Unify repositories of packages

* Use /etc/deb-get/aptrepos to count references

* Remove deb-get prefix from APT_LIST_NAME of chronograf, influxdb, influxdb2, influxdb2-cli, kapacitor, nomad, sublime-merge, sublime-text, telegraf, terraform and vagrant

* Properly fetch count, properly remove entry, silence tee in remove_repo and add_apt_repo

* Add command line option --remove-repo for remove and purge
  • Loading branch information
natanjunges authored and philclifford committed Jan 23, 2023
1 parent 2174a1b commit 86d74e8
Show file tree
Hide file tree
Showing 16 changed files with 114 additions and 33 deletions.
1 change: 1 addition & 0 deletions 01-main/packages/chronograf
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64 armhf"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="Chronograf"
WEBSITE="https://www.influxdata.com/time-series-platform/chronograf/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/influxdb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64 armhf"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="InfluxDB"
WEBSITE="https://www.influxdata.com/products/influxdb-overview/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/influxdb2
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="InfluxDB2"
WEBSITE="https://www.influxdata.com/products/influxdb-overview/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/influxdb2-cli
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="InfluxDB2 CLI"
WEBSITE="https://www.influxdata.com/products/influxdb-overview/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/kapacitor
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="Kapacitor"
WEBSITE="https://github.com/influxdata/kapacitor"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/nomad
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
DEFVER=1
ASC_KEY_URL="https://apt.releases.hashicorp.com/gpg"
APT_LIST_NAME="hashicorp"
APT_REPO_URL="https://apt.releases.hashicorp.com ${UPSTREAM_CODENAME} main"
APT_REPO_OPTIONS="arch=${HOST_ARCH}"
PRETTY_NAME="Nomad"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/sublime-merge
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
DEFVER=1
ASC_KEY_URL="https://download.sublimetext.com/sublimehq-pub.gpg"
APT_LIST_NAME="sublime-text"
APT_REPO_URL="https://download.sublimetext.com/ apt/stable/"
PRETTY_NAME="Sublime Merge"
WEBSITE="https://www.sublimemerge.com/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/sublime-text
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
DEFVER=1
ASC_KEY_URL="https://download.sublimetext.com/sublimehq-pub.gpg"
APT_LIST_NAME="sublime-text"
APT_REPO_URL="https://download.sublimetext.com/ apt/stable/"
PRETTY_NAME="Sublime Text"
WEBSITE="https://www.sublimetext.com/"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/telegraf
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
ARCHS_SUPPORTED="amd64 arm64 armhf"
ASC_KEY_URL="https://repos.influxdata.com/influxdb.key"
APT_LIST_NAME="influxdata"
APT_REPO_URL="https://repos.influxdata.com/debian stable main"
PRETTY_NAME="Telegraf"
WEBSITE="https://github.com/influxdata/telegraf"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/terraform
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
DEFVER=1
ASC_KEY_URL="https://apt.releases.hashicorp.com/gpg"
APT_LIST_NAME="hashicorp"
APT_REPO_URL="https://apt.releases.hashicorp.com ${UPSTREAM_CODENAME} main"
APT_REPO_OPTIONS="arch=${HOST_ARCH}"
PRETTY_NAME="Terraform"
Expand Down
1 change: 1 addition & 0 deletions 01-main/packages/vagrant
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
DEFVER=1
CODENAMES_SUPPORTED="buster bullseye focal jammy"
ASC_KEY_URL="https://apt.releases.hashicorp.com/gpg"
APT_LIST_NAME="hashicorp"
APT_REPO_URL="https://apt.releases.hashicorp.com ${UPSTREAM_CODENAME} main"
PRETTY_NAME="Vagrant"
WEBSITE="https://www.vagrantup.com/"
Expand Down
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ cog.out(f"```\n{help}\n```")
```
deb-get {update [--repos-only] | upgrade | show <pkg list> | install <pkg list>
| reinstall <pkg list> | remove <pkg list> | purge <pkg list>
| reinstall <pkg list> | remove [--remove-repo] <pkg list>
| purge [--remove-repo] <pkg list>
| search [--include-unsupported] <regex> | cache | clean
| list [--include-unsupported] [--raw|--installed|--not-installed]
| prettylist [<repo>] | csvlist [<repo>] | fix-installed [--old-apps]
Expand Down Expand Up @@ -90,11 +91,13 @@ reinstall
remove
remove is identical to install except that packages are removed instead of
installed.
installed. When --remove-repo is provided, also remove the apt repository
of apt/ppa packages.
purge
purge is identical to remove except that packages are removed and purged
(any configuration files are deleted too).
(any configuration files are deleted too). When --remove-repo is provided,
also remove the apt repository of apt/ppa packages.
clean
clean clears out the local repository (/var/cache/deb-get) of retrieved
Expand Down
95 changes: 75 additions & 20 deletions deb-get
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ cat <<HELP
Usage
deb-get {update [--repos-only] | upgrade | show <pkg list> | install <pkg list>
| reinstall <pkg list> | remove <pkg list> | purge <pkg list>
| reinstall <pkg list> | remove [--remove-repo] <pkg list>
| purge [--remove-repo] <pkg list>
| search [--include-unsupported] <regex> | cache | clean
| list [--include-unsupported] [--raw|--installed|--not-installed]
| prettylist [<repo>] | csvlist [<repo>] | fix-installed [--old-apps]
Expand Down Expand Up @@ -50,11 +51,13 @@ reinstall
remove
remove is identical to install except that packages are removed instead of
installed.
installed. When --remove-repo is provided, also remove the apt repository
of apt/ppa packages.
purge
purge is identical to remove except that packages are removed and purged
(any configuration files are deleted too).
(any configuration files are deleted too). When --remove-repo is provided,
also remove the apt repository of apt/ppa packages.
clean
clean clears out the local repository (/var/cache/deb-get) of retrieved
Expand Down Expand Up @@ -257,17 +260,17 @@ function install_apt() {
((PACKAGE_INSTALLATION_TRIES++))
add_apt_repo
if ! update_only_repo; then
remove_repo
remove_repo --remove-repo --quiet
return
fi

if ! package_is_installed "${APP}"; then
if ! eula; then
remove_repo
remove_repo --remove-repo --quiet
return
fi
if ! ${ELEVATE} apt-get -q=2 -o Dpkg::Progress-Fancy="1" -y install "${APP}"; then
remove_repo
remove_repo --remove-repo --quiet
return
fi
add_installed
Expand Down Expand Up @@ -374,7 +377,7 @@ function remove_deb() {
fi
;;
apt|ppa)
remove_repo;;
remove_repo "${3}";;
esac

}
Expand Down Expand Up @@ -1067,7 +1070,7 @@ function fix_installed() {
if [ "${DEFVER}" != "${OLD_DEFVER}" ]; then
remove_installed "${APP}"
if [[ " apt ppa " =~ " ${OLD_METHOD} " ]]; then
remove_repo
remove_repo --remove-repo
fi
if [ "${METHOD}" = apt ]; then
add_apt_repo
Expand Down Expand Up @@ -1100,22 +1103,64 @@ function remove_old_ppa_repo() {
}

function remove_repo() {
fancy_message info "Removing /usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
${ELEVATE} rm -f "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
fancy_message info "Removing /etc/apt/sources.list.d/${APT_LIST_NAME}.list"
${ELEVATE} rm -f "/etc/apt/sources.list.d/${APT_LIST_NAME}.list"
local count=""
if [ -e "${ETC_DIR}/aptrepos" ]; then
count="$(grep -m 1 "^${APT_LIST_NAME} " "${ETC_DIR}/aptrepos" | cut -d " " -f 2)"
fi
if [ -z "${count}" ]; then
count=0
fi
if [ "${count}" -gt 0 ]; then
((count--))
${ELEVATE} sed -i -E "/^${APT_LIST_NAME} [0-9]+/d" "${ETC_DIR}/aptrepos"
echo "${APT_LIST_NAME} ${count}" | ${ELEVATE} tee -a "${ETC_DIR}/aptrepos" > /dev/null
fi
if [ "${1}" == --remove-repo ]; then
if [ "${count}" -eq 0 ]; then
if [ "${2}" != --quiet ]; then
fancy_message info "Removing /usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
fi
${ELEVATE} rm -f "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
if [ "${2}" != --quiet ]; then
fancy_message info "Removing /etc/apt/sources.list.d/${APT_LIST_NAME}.list"
fi
${ELEVATE} rm -f "/etc/apt/sources.list.d/${APT_LIST_NAME}.list"
if [ -e "${ETC_DIR}/aptrepos" ]; then
${ELEVATE} sed -i -E "/^${APT_LIST_NAME} [0-9]+/d" "${ETC_DIR}/aptrepos"
fi
elif [ "${2}" != --quiet ]; then
fancy_message warn "/etc/apt/sources.list.d/${APT_LIST_NAME}.list was not removed because other packages depend on it."
fi
fi
}

function add_apt_repo() {
local count=""
if [ -e "${ETC_DIR}/aptrepos" ]; then
count="$(grep -m 1 "^${APT_LIST_NAME} " "${ETC_DIR}/aptrepos" | cut -d " " -f 2)"
fi
if [ -z "${count}" ]; then
count=0
fi
if [ "${count}" -eq 0 ] && [ -e "/etc/apt/sources.list.d/${APT_LIST_NAME}.list" ]; then
((count++))
fi
((count++))
if [ -e "${ETC_DIR}/aptrepos" ]; then
${ELEVATE} sed -i -E "/^${APT_LIST_NAME} [0-9]+/d" "${ETC_DIR}/aptrepos"
fi
echo "${APT_LIST_NAME} ${count}" | ${ELEVATE} tee -a "${ETC_DIR}/aptrepos" > /dev/null
if [ ! -d /usr/share/keyrings ]; then
${ELEVATE} mkdir -p /usr/share/keyrings 2>/dev/null
fi
if [ -n "${ASC_KEY_URL}" ]; then
${ELEVATE} wget -q "${ASC_KEY_URL}" -O "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
${ELEVATE} gpg --yes --dearmor "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
${ELEVATE} rm "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
else #GPG_KEY_URL
${ELEVATE} wget -q "${GPG_KEY_URL}" -O "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
if [ ! -e "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg" ]; then
if [ -n "${ASC_KEY_URL}" ]; then
${ELEVATE} wget -q "${ASC_KEY_URL}" -O "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
${ELEVATE} gpg --yes --dearmor "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
${ELEVATE} rm "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring"
else #GPG_KEY_URL
${ELEVATE} wget -q "${GPG_KEY_URL}" -O "/usr/share/keyrings/${APT_LIST_NAME}-archive-keyring.gpg"
fi
fi

#TODO: https://superuser.com/questions/1641291/gpg-only-download-a-key-from-a-keyserver
Expand Down Expand Up @@ -1395,6 +1440,11 @@ case "${ACTION}" in
csvlist_debs "${1}";;
purge)
elevate_privs
opt_remove_repo=""
if [ "${1}" == --remove-repo ]; then
opt_remove_repo=--remove-repo
shift
fi
for APP in "${@,,}"; do
FULL_APP="$(IFS=$'\n'; echo "${APPS[*]}" | grep -m 1 "/${APP}$")"
if [ -z "${FULL_APP}" ]; then
Expand All @@ -1407,10 +1457,15 @@ case "${ACTION}" in
exit 1
fi
validate_deb "${FULL_APP}"
remove_deb "${APP}" purge
remove_deb "${APP}" purge "${opt_remove_repo}"
done;;
remove)
elevate_privs
opt_remove_repo=""
if [ "${1}" == --remove-repo ]; then
opt_remove_repo=--remove-repo
shift
fi
for APP in "${@,,}"; do
FULL_APP="$(IFS=$'\n'; echo "${APPS[*]}" | grep -m 1 "/${APP}$")"
if [ -z "${FULL_APP}" ]; then
Expand All @@ -1423,7 +1478,7 @@ case "${ACTION}" in
exit 1
fi
validate_deb "${FULL_APP}"
remove_deb "${APP}"
remove_deb "${APP}" "" "${opt_remove_repo}"
done;;
search)
if [ "${1}" == --include-unsupported ]; then
Expand Down
18 changes: 12 additions & 6 deletions deb-get_completion
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,21 @@ function _deb-get() {
if [ "${COMP_CWORD}" = 2 ] && [ "${command}" = update ]; then
COMPREPLY=($(compgen -W "--repos-only" "\\${COMP_WORDS[2]}"))
elif [ "${command}" = show ]; then
COMPREPLY=($(compgen -W "$(./deb-get list --include-unsupported --raw | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
COMPREPLY=($(compgen -W "$(deb-get list --include-unsupported --raw | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
elif [ "${COMP_CWORD}" = 2 ] && [ "${command}" = search ]; then
COMPREPLY=($(compgen -W "--include-unsupported $(./deb-get list --raw | tr "\n" " ")" "\\${COMP_WORDS[${COMP_CWORD}]}"))
COMPREPLY=($(compgen -W "--include-unsupported $(deb-get list --raw | tr "\n" " ")" "\\${COMP_WORDS[${COMP_CWORD}]}"))
elif [ "${COMP_CWORD}" = 3 ] && [ "${command}" = search ] && [ "${COMP_WORDS[2]}" = --include-unsupported ]; then
COMPREPLY=($(compgen -W "$(./deb-get list --include-unsupported --raw | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
COMPREPLY=($(compgen -W "$(deb-get list --include-unsupported --raw | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
elif [ "${command}" = install ]; then
COMPREPLY=($(compgen -W "$(./deb-get list --not-installed | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
elif [[ " reinstall remove purge " =~ " ${command} " ]]; then
COMPREPLY=($(compgen -W "$(./deb-get list --installed | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
COMPREPLY=($(compgen -W "$(deb-get list --not-installed | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
elif [ "${command}" = reinstall ]; then
COMPREPLY=($(compgen -W "$(deb-get list --installed | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
elif [[ " remove purge " =~ " ${command} " ]]; then
if [ "${COMP_CWORD}" = 2 ]; then
COMPREPLY=($(compgen -W "--remove-repo $(deb-get list --installed | tr "\n" " ")" "\\${COMP_WORDS[2]}"))
else
COMPREPLY=($(compgen -W "$(deb-get list --installed | tr "\n" " ")" "${COMP_WORDS[${COMP_CWORD}]}"))
fi
elif [ "${command}" = list ]; then
COMPREPLY=($(compgen -W "--include-unsupported --raw --installed --not-installed" "\\${COMP_WORDS[${COMP_CWORD}]}"))
elif [ "${COMP_CWORD}" = 2 ] && [[ " pretty_list prettylist csv_list csvlist csv " =~ " ${command} " ]]; then
Expand Down
7 changes: 6 additions & 1 deletion docs/deb-get.1
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ deb-get - An installation manager for 3rd-Party deb packages
.nf
\f[C]
deb-get {update [--repos-only] | upgrade | show <pkg list> | install <pkg list>
| reinstall <pkg list> | remove <pkg list> | purge <pkg list>
| reinstall <pkg list> | remove [--remove-repo] <pkg list>
| purge [--remove-repo] <pkg list>
| search [--include-unsupported] <regex> | cache | clean
| list [--include-unsupported] [--raw|--installed|--not-installed]
| prettylist [<repo>] | csvlist [<repo>] | fix-installed [--old-apps]
Expand Down Expand Up @@ -62,10 +63,14 @@ packages) desired for reinstallation.
\f[B]remove\f[R]
remove is identical to install except that packages are removed instead
of installed.
When \[en]remove-repo is provided, also remove the apt repository of
apt/ppa packages.
.TP
\f[B]purge\f[R]
purge is identical to remove except that packages are removed and purged
(any configuration files are deleted too).
When \[en]remove-repo is provided, also remove the apt repository of
apt/ppa packages.
.TP
\f[B]clean\f[R]
clean clears out the local repository (/var/cache/deb-get) of retrieved
Expand Down
7 changes: 4 additions & 3 deletions docs/deb-get.1.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ deb-get - An installation manager for 3rd-Party deb packages

```
deb-get {update [--repos-only] | upgrade | show <pkg list> | install <pkg list>
| reinstall <pkg list> | remove <pkg list> | purge <pkg list>
| reinstall <pkg list> | remove [--remove-repo] <pkg list>
| purge [--remove-repo] <pkg list>
| search [--include-unsupported] <regex> | cache | clean
| list [--include-unsupported] [--raw|--installed|--not-installed]
| prettylist [<repo>] | csvlist [<repo>] | fix-installed [--old-apps]
Expand Down Expand Up @@ -45,10 +46,10 @@ repositories or via direct download.
: reinstall is followed by one package (or a space-separated list of packages) desired for reinstallation.

**remove**
: remove is identical to install except that packages are removed instead of installed.
: remove is identical to install except that packages are removed instead of installed. When --remove-repo is provided, also remove the apt repository of apt/ppa packages.

**purge**
: purge is identical to remove except that packages are removed and purged (any configuration files are deleted too).
: purge is identical to remove except that packages are removed and purged (any configuration files are deleted too). When --remove-repo is provided, also remove the apt repository of apt/ppa packages.

**clean**
: clean clears out the local repository (/var/cache/deb-get) of retrieved package files.
Expand Down

0 comments on commit 86d74e8

Please # to comment.