-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathadd-pkg
134 lines (109 loc) · 2.24 KB
/
add-pkg
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/sh
set -e # Exit immediately if a command exits with a non-zero status.
usage() {
echo "usage: $(basename "$0") [--virtual NAME ] PKG [PKG...]"
}
trap : TERM QUIT INT
trap "cleanup" EXIT
#
# Alpine functions
#
is_pkg_installed_alpine() {
apk info 2>/dev/null | grep -v "^WARNING" | grep -q "^$1\$"
}
install_pkg_alpine() {
VIRTUAL_PKG="$1"
shift
APK_EXTRA_OPTS=
if [ "$VIRTUAL_PKG" -eq 1 ]; then
APK_EXTRA_OPTS="--virtual"
fi
apk --no-cache add $APK_EXTRA_OPTS "$@"
}
cleanup_alpine() {
rm -rf /var/cache/misc/*
}
#
# Debian functions
#
is_pkg_installed_debian() {
dpkg --status "$1" 2>&1 | grep -q "^Status: install ok installed"
}
install_pkg_debian() {
VIRTUAL_PKG="$1"
shift
if [ "$VIRTUAL_PKG" -eq 1 ]; then
VIRTUAL_PKG_NAME=$1
shift
if [ -f /var/lib/apt/$VIRTUAL_PKG_NAME.virtual ]; then
echo "ERROR: Virtual package '$VIRTUAL_PKG_NAME' already exists."
exit 1
fi
echo "$*" > /var/lib/apt/$VIRTUAL_PKG_NAME.virtual
fi
if [ -n "$1" ]; then
apt-get -q update
apt-get -q install -y --no-install-recommends "$@"
fi
}
cleanup_debian() {
apt-get -q clean
rm -rf /var/lib/apt/lists/* \
/var/log/dpkg.log \
/var/log/alternatives.log \
/var/log/apt/*
}
#
# OS agnostic functions
#
is_pkg_installed() {
if [ -n "$(which apk)" ]; then
is_pkg_installed_alpine "$@"
else
is_pkg_installed_debian "$@"
fi
}
install_pkg() {
if [ -n "$(which apk)" ]; then
install_pkg_alpine "$@"
else
install_pkg_debian "$@"
fi
}
cleanup() {
if [ -n "$(which apk)" ]; then
cleanup_alpine
else
cleanup_debian
fi
}
#
# Main
#
if [ -z "$1" ]; then
usage
exit 1
fi
VIRTUAL_PKG=
if [ "$1" = "--virtual" ]; then
shift
if [ -z "$1" ]; then
echo "Virtual package name missing."
usage
exit 1
fi
VIRTUAL_PKG="$1"
shift
fi
if [ -n "$VIRTUAL_PKG" ]; then
PKGS="$VIRTUAL_PKG"
for PKG in "$@"
do
if ! is_pkg_installed $PKG; then
PKGS="$PKGS $PKG"
fi
done
install_pkg 1 $PKGS
else
install_pkg 0 "$@"
fi