Gentoo Archives: gentoo-commits

From: "Mike Pagano (mpagano)" <mpagano@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] gentoo-x86 commit in sys-kernel/module-rebuild/files: module-rebuild-0.7
Date: Mon, 04 Apr 2011 15:27:42
Message-Id: 20110404152727.A7EDE20057@flycatcher.gentoo.org
1 mpagano 11/04/04 15:27:27
2
3 Added: module-rebuild-0.7
4 Log:
5 Version bump to support paludis cave. See bug #345403
6
7 (Portage version: 2.2.0_alpha29/cvs/Linux i686)
8
9 Revision Changes Path
10 1.1 sys-kernel/module-rebuild/files/module-rebuild-0.7
11
12 file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/module-rebuild/files/module-rebuild-0.7?rev=1.1&view=markup
13 plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-kernel/module-rebuild/files/module-rebuild-0.7?rev=1.1&content-type=text/plain
14
15 Index: module-rebuild-0.7
16 ===================================================================
17 #!/bin/bash
18 #######################################
19 # Inspiration from bug #34921
20 # Thanks to Paul Varner
21
22 # Distributed under the GPL v2
23 # Written by John Mylchreest (johnm@g.o)
24 # Copyright Gentoo Linux
25
26 if [[ `id -u` != 0 ]]; then
27 echo "This application must be run as root."
28 exit 1
29 fi
30
31 R_VERSION="0.7"
32 R_MODULES="${ROOT}/var/lib/module-rebuild/moduledb"
33 R_PORTAGEQ="`which portageq 2>/dev/null`"
34 if [[ -z ${R_PORTAGEQ} ]]; then
35 echo "** FATAL: Unable to find portageq."
36 exit 1
37 fi
38 R_PORTDIR=`${R_PORTAGEQ} portdir`
39 R_VDBPATH=`${R_PORTAGEQ} vdb_path`
40 R_OPTION_X=0;
41 R_OPTION_C=0;
42 R_OPTION_PM="portage";
43
44 package_valid() {
45 local package=${1}
46 [[ -z ${package} ]] && return 1
47 [[ -z ${package/*\/*} ]] && return 0 || return 1
48 }
49
50 package_valid_strict() {
51 local package=${1}
52 package_valid ${package} && [[ -z ${package%%*-[0-9]*} ]] && return 0 || return 1
53 }
54
55 package_exists() {
56 local package=${1}
57
58 package=${package%-[0-9]*}
59 if $(${R_PORTAGEQ} has_version / ${package}); then
60 return 0
61 else
62 return 1
63 fi
64 }
65
66 db_module_exists() {
67 local line package=${1}
68
69 for line in `<${R_MODULES}`; do
70 [[ -z ${line/*${package}*} ]] && return 0
71 done
72 return 1
73 }
74
75 db_module_toggle() {
76 local package=${1} toggleto=${2} togglefrom line
77
78 if db_module_exists ${package}; then
79 line=`grep ${package} ${R_MODULES}`
80 togglefrom=${line#*:}
81 togglefrom=${togglefrom/:*}
82 if [[ -z ${toggleto} ]]; then
83 [[ ${togglefrom} = 0 ]] && toggleto=1 || toggleto=0
84 fi
85 echo "** Setting ${package}; rebuild=${toggleto}."
86 sed -i -e "s:\(.\:\)\([01]\)\(\:${package}\):\1${toggleto}\3:g" ${R_MODULES}
87 else
88 echo "** ${package} not found in moduledb."
89 fi
90 }
91
92 db_module_add() {
93 local package=${1}
94
95 if db_module_exists ${package}; then
96 echo -e "${C_BOLD}** Module already exists in moduledb.${C_NORM}"
97 db_module_toggle ${package} 1
98 return 0
99 else
100 if package_exists ${package}; then
101 echo -e "${C_BOLD}${C_GREEN}** Adding ${package} to moduledb.${C_NORM}"
102 echo "m:1:${package}" >> ${R_MODULES}
103 return 0
104 else
105 echo -e "${C_RED}** Unable to locate an available ebuild for ${package}.${C_NORM}"
106 echo "** Please manually emerge ${package} first."
107 fi
108 fi
109 return 1
110 }
111
112 db_module_del() {
113 local package=${1}
114
115 if db_module_exists ${package}; then
116 echo "** Removing ${package} from moduledb."
117 sed -ie "/.*${package/\//\\/}.*/d" ${R_MODULES}
118 return 0
119 else
120 echo "** ${package} not found in moduledb."
121 return 1
122 fi
123 }
124
125 db_module_list() {
126 local line auto pkg a=0 b=0
127
128 for line in `<${R_MODULES}`; do
129 mode=${line:0:1}
130 pkg=${line#*:}
131 auto=${pkg/:*}
132 pkg=${pkg/*:}
133
134 if [[ ${R_OPTION_X} == 1 ]]; then
135 pkg=${pkg%-[0-9]*}
136 package_valid ${pkg}
137 else
138 package_valid_strict ${pkg} && pkg="=${pkg}"
139 fi
140
141 if [[ ${auto} = 1 ]]; then
142 tomerge[${a}]=${pkg}
143 a=$((${a} + 1))
144 else
145 toignore[${b}]=${pkg}
146 b=$((${b} + 1))
147 fi
148 done
149
150 pkg="${tomerge[@]}${toignore[@]}"
151 if [[ -z ${pkg} ]]; then
152 echo -e "${C_BOLD}${C_RED}** There are no known modules. Quitting.${C_NORM}"
153 exit 1
154 fi
155
156 if [[ -n ${tomerge[@]} ]]; then
157 echo -e "${C_BOLD}${C_GREEN}** Packages which I will emerge are:${C_NORM}"
158 for pkg in ${tomerge[@]}; do
159 echo -e "\t${pkg}"
160 done
161 fi
162
163 if [[ -n ${toignore[@]} ]]; then
164 echo -e "${C_BOLD}${C_GREEN}** Packages which I will ignore are:${C_NORM}"
165 for pkg in ${toignore[@]}; do
166 echo -e "\t${pkg}"
167 done
168 fi
169 }
170
171 db_module_populate() {
172 local i x=0 pkg version list pad
173
174 # Lets find them all
175 # chances are we will get a few dupes in here.
176 version=`uname -r`
177 for pkg in `grep -i /lib/modules/${version}/.*o ${R_VDBPATH}/*/*/CONTENTS`; do
178 pad=""; x=0;
179
180 if [[ -z ${pkg//${R_VDBPATH}*} ]]; then
181 for((i=0;i<=${#pkg};i++)); do
182 [[ ${pkg:${i}:1} = / ]] && x=$((${x} + 1));
183 [[ ${x} == 4 ]] || [[ ${x} == 5 ]] && pad="${pad}${pkg:${i}:1}";
184 done
185 # Remove any dupes
186 list=${list//${pad:1}}
187 list="${list} ${pad:1}"
188 fi
189 done
190
191 for pkg in ${list}; do
192 db_module_add ${pkg};
193 done
194 }
195
196 db_module_merge() {
197 local i pkg
198
199 echo -e "${C_BOLD}** Preparing to merge modules:${C_NORM}"
200 db_module_list >/dev/null
201
202 if [[ -z ${tomerge[@]} ]]; then
203 echo -e "${C_BOLD}${C_RED}** No packages to merge. Quitting.${C_NORM}"
204 exit 1
205 fi
206
207 echo -e "${C_BOLD}${C_GREEN}** Packages which I will emerge are:"${C_NORM}
208 for pkg in ${tomerge[@]}; do
209 echo -e "\t${pkg}"
210 done
211
212 for((i=1;i<6;i++)); do
213 echo -en "${C_BOLD}${C_RED}$((6 - ${i})) ${C_NORM}"
214 sleep 1
215 done
216 echo
217
218 case ${R_OPTION_PM} in
219 portage) emerge --ignore-default-opts --oneshot --nodeps ${tomerge[@]};;
220 paludis) cave resolve --execute --preserve-world --continue-on-failure if-satisfied --lazy ${tomerge[@]};;
221 *) echo "** Unsupported package manager"; phelp; exit 1;;
222 esac
223 }
224
225 phelp() {
226 cat << EOF
227 module-rebuild [options] action [category/package]
228 Version: ${R_VERSION}
229
230 Where options are:
231 -X - Emerge based on package names,
232 not exact versions.
233 -C - Disable all coloured output.
234 -P foo - Specify package manager: portage(default) or paludis
235
236 Where action is one of:
237 add - Add package to moduledb.
238 del - Delete a package from moduledb.
239 toggle - Toggle auto-rebuild of Package.
240 list - List packages to auto-rebuild.
241 rebuild - Rebuild packages.
242 populate - Populate the database with any
243 packages which currently install
244 drivers into the running kernel.
245
246 EOF
247
248 }
249
250 check_validity() {
251 local package=${1} strict=${2:-0} ret=1
252
253 [[ ${strict} = 0 ]] && package_valid ${package} && ret=0
254 [[ ${strict} = 1 ]] && package_valid_strict ${package} && ret=0
255
256 if [[ ${ret} != 0 ]]; then
257 echo "** Please pass the fully qualified package. For example:"
258 echo "** media-video/nvidia-kernel-1.0.7174"
259 exit 1
260 fi
261 }
262
263 while getopts "XCP:" options; do
264 case ${options} in
265 X) R_OPTION_X='1';;
266 C) R_OPTION_C='1';;
267 P) R_OPTION_PM="$OPTARG";;
268 *) phelp; exit 1;;
269 esac
270 done
271
272 if [[ ${R_OPTION_C} == 0 ]]; then
273 C_BOLD='\e[1m'
274 C_NORM='\e[0m'
275 C_GREEN='\e[32m'
276 C_RED='\e[31m'
277 else
278 C_BOLD=''
279 C_NORM=''
280 C_GREEN=''
281 C_RED=''
282 fi
283
284 x=0
285 for i in ${@:${OPTIND}}; do
286 if [[ ${i:0:1} != - ]]; then
287 R_PARAMS[${x}]=${i}
288 x=$((${x} + 1))
289 fi
290 done
291 unset i x
292
293 # If the moduledb doesnt exist, lets populate it automatically.
294 if [[ ! -f ${R_MODULES} ]]; then
295 echo -e "${C_BOLD}${C_RED}No moduledb found...${C_NORM}"
296
297 [[ ! -d ${ROOT}/var/lib/module-rebuild/ ]] && \
298 echo -e "${C_BOLD}Creating moduledb state directory.${C_NORM}"; \
299 mkdir -p ${ROOT}/var/lib/module-rebuild/
300
301 echo -e "${C_BOLD}Populating moduledb...${C_NORM}"
302 touch ${R_MODULES}
303 R_PARAMS[0]=populate
304 fi
305
306 case ${R_PARAMS[0]} in
307 add) check_validity ${R_PARAMS[1]} 1; db_module_add ${R_PARAMS[1]};;
308 del) check_validity ${R_PARAMS[1]}; db_module_del ${R_PARAMS[1]};;
309 toggle) check_validity ${R_PARAMS[1]}; db_module_toggle ${R_PARAMS[1]};;
310 list) db_module_list;;
311 rebuild) db_module_merge;;
312 populate) db_module_populate;;
313 *) phelp; exit 1;;
314 esac