blob: 9fcb4b87e70453400d1e79a48087d976518ffca2 (
plain) (
blame)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
|
#!/bin/bash
#
# get all files of required packages by a module
#
# Usage:
# list_content_packages
# - lists all files/directories in REQUIRED_CONTENT_PACKAGES
# list_content_packages --files
# - lists all files in REQUIRED_CONTENT_PACKAGES
# list_content_packages --dirs
# - lists all dirs in REQUIRED_CONTENT_PACKAGES
#
# NOTE: additional packages needed to be listed can be given
# through the environment variable EXTRA_PACKAGES
list_content_packages() {
[ -z "$REQUIRED_CONTENT_PACKAGES" ] && pinfo "No required packages for $TOOL" && return 1
[ $# -gt 2 ] && perror "'list_content_packages' accepts only 1 or no args. $# given."
local PACKAGE=""
for PACKAGE in $REQUIRED_CONTENT_PACKAGES $EXTRA_PACKAGES; do
list_content_package $1 $PACKAGE
done
}
list_content_package(){
#[ -z "$EXTRA_PACKAGES" ] || pinfo "Listing additional packages: $EXTRA_PACKAGES"
[ $# -gt 2 ] && perror "'list_content_package' accepts max 2 args. $# given."
local OP="-e"
case "$1" in
"--files")
OP="-f"
;;
"--dirs")
OP="-d"
;;
"")
OP="-e"
;;
*)
perror "'list_content_packages' invalid argument: $1"
;;
esac
local PACKAGE="$2"
local OPTIONAL="$(echo "$PACKAGE" | cut -c 1)"
[ "x$OPTIONAL" = "x@" ] && PACKAGE="$(echo "$PACKAGE" | cut -c 2-)"
local FILES=""
if [ "$PACKET_HANDLER" = "dpkg" ]; then
PACKAGECOMMAND="dpkg -L"
elif [ "$PACKET_HANDLER" = "rpm" ]; then
PACKAGECOMMAND="rpm -ql"
fi
if [ -n "$REQUIRED_PACKET_FILES_BLACKLIST" ]; then
FILES="$($PACKAGECOMMAND "$PACKAGE" | grep "^/" | \
grep -v "$REQUIRED_PACKET_FILES_BLACKLIST" | \
grep -v -E 'share/(man|doc)|/var/run|/var/log|/etc/init\.d'; \
echo ":###:${PIPESTATUS[0]}")"
else
FILES="$($PACKAGECOMMAND "$PACKAGE" | grep "^/" | grep -v -E 'share/(man|doc)|/var/run|/var/log|/etc/init\.d'; echo ":###:${PIPESTATUS[0]}")"
fi
# FILES="$(rpm -ql "$PACKAGE" | grep "^/" | grep -v -E 'share/(man|doc)|/var/run|/var/log'; echo ":###:${PIPESTATUS[0]}")"
# ugly hack to get our return value
local LPRET=$(echo "$FILES" | awk -F ':###:' '{printf $2}')
FILES=$(echo "$FILES" | awk -F ':###:' '{print $1}')
if [ "x$LPRET" != "x0" -a "x$OPTIONAL" != "x@" ]; then
pdebug "FILES: '$FILES'"
perror "dpkg/rpm exited with code '$LPRET' for required package ${PACKAGE}."
fi
[ "x$LPRET" != "x0" ] && pwarning "dpkg/rpm exited with code '$LPRET' for optional package ${PACKAGE}." && continue
[ -z "$FILES" ] && pwarning "list_packet_files empty for packet ${PACKAGE}." && continue
pdebug "Packet $PACKAGE has $(echo $FILES | wc -w) files..."
for FILE in $FILES; do
[ "$OP" "$FILE" ] && echo "$FILE"
done
}
#
# Convenience function
#
list_packet_files() {
list_content_packages --files
}
#
# Convenience function
#
# install all dependencies of a module
# goes through all package as given in the variable REQUIRED_INSTALLED_PACKAGES
install_dependencies() {
[ -z "$REQUIRED_INSTALLED_PACKAGES" ] && return
install_packages "$REQUIRED_INSTALLED_PACKAGES"
}
#
# install given packet through system's packet manager
# uses PACKET_HANDLER as determined in helper/system.inc
#
install_packages() {
[ $# -eq 0 ] && perror "Sanity check failed: no argument given to install_package"
local PACKAGE_LIST="$@"
local INSTALLED_PACKAGES=""
local LRET=""
for PKG in ${PACKAGE_LIST}; do
# check if installed:
# this is done mainly for performance reasons, even though
# reinstalling all packages is a valid possibility too...
if [ "x$PACKET_HANDLER" == "xdpkg" ]; then
dpkg -l ${PKG} > /dev/null 2>&1
LRET=$?
elif [ "x$PACKET_HANDLER" == "xrpm" ]; then
rpm -ql "${PKG}" > /dev/null 2>&1
LRET=$?
else
perror "No packet manager / handler determined, this should not happen!"
fi
if [ "x$LRET" == "x0" ]; then
# check if it is completly installed, not just leftover configuration files
if [ "x$PACKET_HANDLER" == "xdpkg" ]; then
local INSTALL_STATUS=$(dpkg -l "${PKG}" | grep "${PKG}" | cut -c1-2)
if [[ $INSTALL_STATUS != "ii" ]]; then
pinfo "$PKG is either missing or a meta-package! Installing it to be sure..."
install_package "${PKG}"
else
# package installed
pdebug "${PKG} installed!"
fi
elif [ "x$PACKET_HANDLER" == "xrpm" ]; then
# TODO: blindly install again for now
rpm -q "${PKG}" >/dev/null 2>&1 || install_package "${PKG}"
fi
else
# package not installed
pdebug "$PKG not installed!"
install_package $PKG
fi
done
[ ! -z "$INSTALLED_PACKAGES" ] && pinfo "New packages installed: ${INSTALLED_PACKAGES}"
}
#
# install individual package depending on package manager
#
install_package() {
if [ "$#" -ne 1 ]; then
perror "Only call install_package with one argument!"
fi
if [ "x$PACKET_MANAGER" == "xapt" ]; then
apt-get install -y ${PKG}
local IRET=$?
if [ "x$IRET" == "x0" ]; then
# $PGK was installed successfully
INSTALLED_PACKAGES+="$PKG "
else
# PKG was not installed
# TODO error handling
perror "install_packages: apt-get failed with '$IRET' for package '$PKG'"
fi
elif [ "x$PACKET_MANAGER" == "xzypper" ]; then
zypper --no-refresh --non-interactive install --force-resolution ${PKG}
local IRET=$?
if [ "x$IRET" == "x0" ]; then
# $PGK was installed successfully
INSTALLED_PACKAGES+="$PKG "
else
# PKG was not installed
# TODO error handling
perror "install_packages: zypper failed with '$IRET' for package '$PKG'"
fi
elif [ "x$PACKET_MANAGER" == "xyum" ]; then
yum --assumeyes install ${PKG}
local IRET=$?
if [ "x$IRET" == "x0" ]; then
# $PGK was installed successfully
INSTALLED_PACKAGES+="$PKG "
else
# PKG was not installed
# TODO error handling
perror "install_packages: yum failed with '$IRET' for package '$PKG'"
fi
else
perror "No packet manager determined, this should not happen!"
fi
}
|