-
Notifications
You must be signed in to change notification settings - Fork 3
/
deb_functions
49 lines (44 loc) · 1.97 KB
/
deb_functions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env bash
# list packages installed explicitly by current user (using apt/aptitude)
# doesn't include upgraded packages
show_packages_installed_by_current_user() {
readonly local user=$(whoami)
cat /var/log/apt/history.log | awk -v USER="$user" 'BEGIN {
FS="\n"
RS=""
user_pattern="Requested-By:.*" USER
install_pattern="Install:.*"
} $2 ~ user_pattern && NF > 3 && $3 ~ install_pattern {print $3 "\n"}' | sed 's/([^()]*)//g'
}
# list packages upgraded at given date
# $1 date formatted like /var/log/dpkg.log
# [$2] time pattern (otherwise not used) formatted HH:MM:SS
show_packages_upgraded_at() {
if [ -z $2 ]; then
awk -v DATE="$1" '$1==DATE && $3=="upgrade"' /var/log/dpkg.log
else
awk -v DATE="$1" -v TIME="$2" '$1==DATE && $2 ~ TIME && $3=="upgrade"' /var/log/dpkg.log
fi
}
# check if previous version of packages upgraded at specified date are still available in packager cache
# $1 date of upgrade (formatted like in /var/log/dpkg.log)
# [$2] time pattern (otherwise not used) formatted HH:MM:SS
show_previous_packages_versions() {
if [ -z $2 ]; then
awk -v DATE="$1" '$1==DATE && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
else
awk -v DATE="$1" -v TIME="$2" '$1==DATE && $2 ~ TIME && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
fi
}
# download and extract deb package in the current directory
# $1 package name (as listed in repo)
preview_deb_content() {
# because apt-get -d install $1 won't download if package is already installed
aptitude download $1
ar vx ${1}*.deb
#this will result in three files: data.tar.xz, control.tar.gz and debian-binary
}
# list all packages from given repo
list_repository_packages() {
awk '/Package:.*/ {print $2}' $1
}