Contents of /trunk/mage/usr/lib/mage/convert_databases_smage.sh
Parent Directory | Revision Log
Revision 489 -
(show annotations)
(download)
(as text)
Wed May 2 06:12:04 2007 UTC (17 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 14244 byte(s)
Wed May 2 06:12:04 2007 UTC (17 years, 4 months ago) by niro
File MIME type: application/x-sh
File size: 14244 byte(s)
-new meta data conversion scripts
1 | #!/bin/bash |
2 | |
3 | source /etc/mage.rc.global |
4 | source /etc/mage.rc |
5 | |
6 | |
7 | #### fixups #### |
8 | MLIBDIR=/home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage |
9 | INSTALLDB=/var/db/mage |
10 | ################# |
11 | |
12 | source ${MLIBDIR}/mage4.functions.sh |
13 | source ${MLIBDIR}/sql_functions.sh |
14 | |
15 | die() |
16 | { |
17 | echo -e "Exited ${BASH_SOURCE} at line no ${BASH_LINENO}." |
18 | echo -e "$@" |
19 | exit 1 |
20 | } |
21 | |
22 | sql() |
23 | { |
24 | local sqlcmd="$*" |
25 | [[ -z ${sqlcmd} ]] && die "no sqlcmd given." |
26 | |
27 | sqlite3 -nullvalue 'NULL' -list -separator '|' ${DBFILE} << EOF || die "error running '$@'" |
28 | ${sqlcmd}; |
29 | EOF |
30 | } |
31 | |
32 | create_database_layout() |
33 | { |
34 | sql "create table categories(id integer primary key, pcat text unique)" |
35 | sql "create table packages(id integer primary key, |
36 | pname text, |
37 | pver text, |
38 | pbuild text, |
39 | pcat_id numeric, |
40 | state text, |
41 | provide text, |
42 | pkgtype text |
43 | )" |
44 | sql "create table depends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)" |
45 | sql "create table sdepends(id integer primary key, pkg_id numeric, relation text, pcat_id numeric, pname text, pver text, pbuild text)" |
46 | sql "create table packages_info(id integer primary key, pkg_id numeric, arch text, md5 text, mtime numeric, homepage text, description text, size numeric)" |
47 | #sql "create table packages_content(id integer primary key, pkginfo_id numeric, char text, dirs text, files text, pipes text, symlinks text)" |
48 | sql "create table packages_content(id integer primary key, pkginfo_id numeric, char blob, dirs blob, files blob, pipes blob, symlinks blob)" |
49 | # sql "create table packages_routines(id integer primary key, |
50 | # pkg_id numeric, |
51 | # mincludes text, |
52 | # preinstall text, |
53 | # postinstall text, |
54 | # preremove text, |
55 | # postremove text, |
56 | # extra_functions text, |
57 | # extra_vars text)" |
58 | sql "create table packages_routines(id integer primary key, |
59 | pkg_id numeric, |
60 | mincludes text, |
61 | preinstall numeric, |
62 | postinstall numeric, |
63 | preremove numeric, |
64 | postremove numeric, |
65 | script text)" |
66 | } |
67 | |
68 | convert_smage_db() |
69 | { |
70 | local i |
71 | local smagefile |
72 | local PCATEGORIE |
73 | local PNAME |
74 | local PVER |
75 | local PBUILD |
76 | local pcatid |
77 | local STATE |
78 | local pkgid |
79 | local dep |
80 | local PKGNAME |
81 | local DESCRIPTION |
82 | local HOMEPAGE |
83 | local DEPEND |
84 | local SDEPEND |
85 | local PROVIDE |
86 | local PKGTYPE |
87 | local preinstall |
88 | local postinstall |
89 | local preremove |
90 | local postremove |
91 | local sym |
92 | local depname |
93 | local depver |
94 | local depbuild |
95 | local depcat |
96 | local depcatid |
97 | local md5file |
98 | local md5sum |
99 | |
100 | # create categories |
101 | cat ${SMAGESCRIPTSDIR}/.known_categories | while read pcat |
102 | do |
103 | case ${pcat} in |
104 | include|profiles) continue;; |
105 | esac |
106 | |
107 | sql "insert into categories (pcat) values('${pcat}')" |
108 | done |
109 | |
110 | # create packages |
111 | for smagefile in $(find ${SMAGESCRIPTSDIR}/glibc-nptl -type f -name '*'.smage2 | sort) |
112 | do |
113 | case ${DEBUG} in |
114 | 1|true) echo "converting ${smagefile}" ;; |
115 | esac |
116 | |
117 | source ${smagefile} |
118 | |
119 | # substitute r from pbuild |
120 | PBUILD="${PBUILD/r/}" |
121 | |
122 | pcatid=$(sql "select id from categories where pcat='${PCATEGORIE}'") |
123 | sql "insert into packages( |
124 | pname, |
125 | pver, |
126 | pbuild, |
127 | pcat_id, |
128 | state, |
129 | provide, |
130 | pkgtype |
131 | ) |
132 | values( |
133 | '${PNAME}', |
134 | '${PVER}', |
135 | '${PBUILD}', |
136 | '${pcatid}', |
137 | '${STATE}', |
138 | '${PROVIDE}', |
139 | '${PKGTYPE}' |
140 | )" |
141 | |
142 | pkgid=$(sql "select id from packages where pname='${PNAME}' and pver='${PVER}' and pbuild='${PBUILD}'") |
143 | # depends |
144 | while read sym dep |
145 | do |
146 | [[ -z ${dep} ]] && continue |
147 | depcat="$(dep2pcat ${dep})" |
148 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
149 | depname="$(dep2pname ${dep})" |
150 | depver="$(dep2pver ${dep})" |
151 | sql "insert into depends(pkg_id, |
152 | relation, |
153 | pcat_id, |
154 | pname, |
155 | pver, |
156 | pbuild) |
157 | values('${pkgid}', |
158 | '${sym}', |
159 | '${depcatid}', |
160 | '${depname}', |
161 | '${depver}', |
162 | '${depbuild}')" |
163 | done << EOF |
164 | ${DEPEND} |
165 | EOF |
166 | # sdepends |
167 | while read sym dep |
168 | do |
169 | [[ -z ${dep} ]] && continue |
170 | depcat="$(dep2pcat ${dep})" |
171 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
172 | depname="$(dep2pname ${dep})" |
173 | depver="$(dep2pver ${dep})" |
174 | sql "insert into sdepends(pkg_id, |
175 | relation, |
176 | pcat_id, |
177 | pname, |
178 | pver, |
179 | pbuild) |
180 | values('${pkgid}', |
181 | '${sym}', |
182 | '${depcatid}', |
183 | '${depname}', |
184 | '${depver}', |
185 | '${depbuild}')" |
186 | done << EOF |
187 | ${SDEPEND} |
188 | EOF |
189 | |
190 | for arch in i686 x86_64 |
191 | do |
192 | md5file="${MAGEDIR}/${PCATEGORIE}/${PNAME}/md5/${PNAME}-${PVER}-${arch}-r${PBUILD}.md5" |
193 | [[ -f ${md5file} ]] && md5sum="$(cat ${md5file} | cut -d' ' -f1)" |
194 | |
195 | # fix descriptions |
196 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" |
197 | |
198 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) |
199 | values('${pkgid}','${arch}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" |
200 | done |
201 | |
202 | # using $INHERITS directly |
203 | #mincludes="$(grep -r 'minclude ' ${magefile} | cut -d: -f2 | sed s:minclude\ ::)" |
204 | |
205 | # # # |
206 | # # # install routines & includes |
207 | # # # |
208 | # # # needs special magic: the last line of typeset has no ';' |
209 | # # # but to eval the function we must append it |
210 | # # # so this sed deletes the last line of the typeset output |
211 | # # # and replaces it with an ;} and a newline between |
212 | # # # |
213 | # # # but we will not add this fun when no postinstall etc are given |
214 | # # # -> [[ -n $(typeset -f postinstall ]] && |
215 | # # # |
216 | # # # also the character ' is a problem while importing to sql |
217 | # # # because we use ' as escape char. so we replace it with '' |
218 | # # # |
219 | # # # $([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}") |
220 | # # # |
221 | # # sql "insert into packages_routines(pkg_id, |
222 | # # mincludes, |
223 | # # postinstall, |
224 | # # preinstall, |
225 | # # preremove, |
226 | # # postremove) |
227 | # # values('${pkgid}', |
228 | # # '${mincludes}', |
229 | # # '$([[ -n $(typeset -f postinstall) ]] && echo -e "$(typeset -f postinstall | sed s:\':\'\':g | sed '$d');\n}")', |
230 | # # '$([[ -n $(typeset -f preinstall) ]] && echo -e "$(typeset -f preinstall | sed s:\':\'\':g | sed '$d');\n}")', |
231 | # # '$([[ -n $(typeset -f preremove) ]] && echo -e "$(typeset -f preremove | sed s:\':\'\':g | sed '$d');\n}")', |
232 | # # '$([[ -n $(typeset -f postremove) ]] && echo -e "$(typeset -f postremove | sed s:\':\'\':g | sed '$d');\n}")')" |
233 | |
234 | local do_preinst=0 |
235 | local do_postinst=0 |
236 | local do_prerm=0 |
237 | local do_postrm=0 |
238 | local do_script=0 |
239 | local script="" |
240 | |
241 | [[ -n $(typeset -f preinstall) ]] && do_preinst=1 && do_script=1 |
242 | [[ -n $(typeset -f postinstall) ]] && do_postinst=1 && do_script=1 |
243 | [[ -n $(typeset -f preremove) ]] && do_prerm=1 && do_script=1 |
244 | [[ -n $(typeset -f postremove) ]] && do_postrm=1 && do_script=1 |
245 | |
246 | [[ ${do_script} = 1 ]] && script="$(basename ${DBFILE} .sql).routines/${pkgid}/routines.sh" |
247 | |
248 | sql "insert into packages_routines(pkg_id, |
249 | mincludes, |
250 | postinstall, |
251 | preinstall, |
252 | preremove, |
253 | postremove, |
254 | script) |
255 | values('${pkgid}', |
256 | '${INHERITS}', |
257 | '${do_postinst}', |
258 | '${do_pretinst}', |
259 | '${do_prerm}', |
260 | '${do_postrm}', |
261 | '${script}')" |
262 | |
263 | # create it only if do_script=1 |
264 | if [[ ${do_script} = 1 ]] |
265 | then |
266 | # create a routines script |
267 | local routines=$(dirname ${DBFILE})/${script} |
268 | install -d $(dirname ${routines}) |
269 | |
270 | echo "#!/bin/sh" > ${routines} |
271 | echo "# routines.sh script for #${pkgid}, ${PNAME}-${PVER}-${PBUILD}" >> ${routines} |
272 | echo >> ${routines} |
273 | |
274 | |
275 | # special functions and variables |
276 | if [[ -n ${SPECIAL_VARS} ]] |
277 | then |
278 | local i |
279 | for i in ${SPECIAL_VARS} |
280 | do |
281 | # being tricky here :) |
282 | echo "${i}=\"$(eval echo \$${i})\"" >> ${routines} |
283 | done |
284 | echo >> ${routines} |
285 | fi |
286 | |
287 | # add special functions |
288 | if [[ -n ${SPECIAL_FUNCTIONS} ]] |
289 | then |
290 | local i |
291 | for i in ${SPECIAL_FUNCTIONS} |
292 | do |
293 | # add to mage (quotes needed !) |
294 | typeset -f "${i}" >> ${routines} |
295 | echo >> ${routines} |
296 | # unset to be safe (quotes needed !) |
297 | unset "${i}" |
298 | done |
299 | echo >> ${routines} |
300 | fi |
301 | |
302 | # postinstall and co |
303 | for i in preinstall postinstall preremove postremove |
304 | do |
305 | if [[ -n $(typeset -f "${i}") ]] |
306 | then |
307 | typeset -f "${i}" >> ${routines} |
308 | echo >> ${routines} |
309 | fi |
310 | done |
311 | |
312 | # create start logic |
313 | echo >> ${routines} |
314 | echo 'case $1 in' >> ${routines} |
315 | echo ' preinstall) preinstall ;;' >> ${routines} |
316 | echo ' postinstall) postinstall ;;' >> ${routines} |
317 | echo ' preremove) preremove ;;' >> ${routines} |
318 | echo ' postremove) postremove ;;' >> ${routines} |
319 | echo 'esac' >> ${routines} |
320 | echo >> ${routines} |
321 | fi |
322 | |
323 | |
324 | unset PCATEGORIE |
325 | unset PNAME |
326 | unset PVER |
327 | unset PBUILD |
328 | unset STATE |
329 | unset DESCRIPTION |
330 | unset HOMEPAGE |
331 | unset PKGTYPE |
332 | unset PKGNAME |
333 | unset DEPEND |
334 | unset SDEPEND |
335 | unset PROVIDE |
336 | unset SPECIAL_VARS |
337 | unset SPECIAL_FUNCTIONS |
338 | unset INHERITS |
339 | |
340 | # unset these functions |
341 | unset -f preinstall |
342 | unset -f postinstall |
343 | unset -f preremove |
344 | unset -f postremove |
345 | done |
346 | } |
347 | |
348 | convert_install_db() |
349 | { |
350 | local i |
351 | local magefile |
352 | local pcat |
353 | local pname |
354 | local pver |
355 | local pbuild |
356 | local pcatid |
357 | local state |
358 | local preinstall |
359 | local postinstall |
360 | local preremove |
361 | local postremove |
362 | local pkgid |
363 | local dep |
364 | local PKGNAME |
365 | local STATE |
366 | local DESCRIPTION |
367 | local HOMEPAGE |
368 | local DEPEND |
369 | local SDEPEND |
370 | local PROVIDE |
371 | local PKGTYPE |
372 | local preinstall |
373 | local postinstall |
374 | local preremove |
375 | local postremove |
376 | local sym |
377 | local depname |
378 | local depver |
379 | local depbuild |
380 | local depcat |
381 | local depcatid |
382 | local md5file |
383 | local md5sum |
384 | local pkginfoid |
385 | local entrydir |
386 | |
387 | # create categories |
388 | for i in virtual ${INSTALLDB}/* |
389 | do |
390 | pcat="$(basename ${i})" |
391 | case ${pcat} in |
392 | include|profiles) continue;; |
393 | esac |
394 | |
395 | sql "insert into categories (pcat) values('${pcat}')" |
396 | done |
397 | |
398 | # create packages |
399 | for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort) |
400 | do |
401 | case ${DEBUG} in |
402 | 1|true) echo "converting ${magefile}" ;; |
403 | esac |
404 | |
405 | pcat="$(magename2pcat ${magefile})" |
406 | pname="$(magename2pname ${magefile})" |
407 | pver="$(magename2pver ${magefile})" |
408 | pbuild="$(magename2pbuild ${magefile})" |
409 | # substitute r from pbuild |
410 | pbuild="${pbuild/r/}" |
411 | |
412 | source ${magefile} |
413 | |
414 | pcatid=$(sql "select id from categories where pcat='${pcat}'") |
415 | sql "insert into packages( |
416 | pname, |
417 | pver, |
418 | pbuild, |
419 | pcat_id, |
420 | state, |
421 | provide, |
422 | pkgtype |
423 | ) |
424 | values( |
425 | '${pname}', |
426 | '${pver}', |
427 | '${pbuild}', |
428 | '${pcatid}', |
429 | '${STATE}', |
430 | '${PROVIDE}', |
431 | '${PKGTYPE}' |
432 | )" |
433 | |
434 | pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'") |
435 | # depends |
436 | while read sym dep |
437 | do |
438 | [[ -z ${dep} ]] && continue |
439 | depcat="$(dep2pcat ${dep})" |
440 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
441 | depname="$(dep2pname ${dep})" |
442 | depver="$(dep2pver ${dep})" |
443 | sql "insert into depends(pkg_id, |
444 | relation, |
445 | pcat_id, |
446 | pname, |
447 | pver, |
448 | pbuild) |
449 | values('${pkgid}', |
450 | '${sym}', |
451 | '${depcatid}', |
452 | '${depname}', |
453 | '${depver}', |
454 | '${depbuild}')" |
455 | done << EOF |
456 | ${DEPEND} |
457 | EOF |
458 | # sdepends |
459 | while read sym dep |
460 | do |
461 | [[ -z ${dep} ]] && continue |
462 | depcat="$(dep2pcat ${dep})" |
463 | depcatid=$(sql "select id from categories where pcat='${depcat}'") |
464 | depname="$(dep2pname ${dep})" |
465 | depver="$(dep2pver ${dep})" |
466 | sql "insert into sdepends(pkg_id, |
467 | relation, |
468 | pcat_id, |
469 | pname, |
470 | pver, |
471 | pbuild) |
472 | values('${pkgid}', |
473 | '${sym}', |
474 | '${depcatid}', |
475 | '${depname}', |
476 | '${depver}', |
477 | '${depbuild}')" |
478 | done << EOF |
479 | ${SDEPEND} |
480 | EOF |
481 | |
482 | DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)" |
483 | sql "insert into packages_info(pkg_id, arch, md5, description, homepage) |
484 | values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')" |
485 | |
486 | |
487 | # install routines & includes |
488 | sql "insert into packages_routines(pkg_id, |
489 | mincludes, |
490 | postinstall, |
491 | preinstall, |
492 | preremove, |
493 | postremove) |
494 | values('${pkgid}', |
495 | '${mincludes}', |
496 | '$(typeset -f postinstall | sed s:\':\'\':g)', |
497 | '$(typeset -f preinstall | sed s:\':\'\':g)', |
498 | '$(typeset -f preremove | sed s:\':\'\':g)', |
499 | '$(typeset -f postremove | sed s:\':\'\':g)')" |
500 | |
501 | #### #### |
502 | # record contents # |
503 | #### #### |
504 | pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'") |
505 | entrydir="$(dirname ${magefile})" |
506 | sql "insert into packages_content(pkginfo_id, |
507 | char, |
508 | dirs, |
509 | files, |
510 | pipes, |
511 | symlinks) |
512 | values('${pkginfoid}', |
513 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/char.bz2', |
514 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/dirs.bz2', |
515 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/files.bz2', |
516 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/pipes.bz2', |
517 | '$(basename ${DBFILE} .sql).records/${pkginfoid}/symlinks.bz2')" |
518 | # create compressed content files |
519 | local entryfile |
520 | for entryfile in char dirs files pipes symlinks |
521 | do |
522 | install -d $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid} |
523 | cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/$(basename ${DBFILE} .sql).records/${pkginfoid}/${entryfile}.bz2 |
524 | done |
525 | |
526 | unset PKGNAME |
527 | unset DEPEND |
528 | unset SDEPEND |
529 | unset PROVIDE |
530 | unset SPECIAL_VARS |
531 | unset SPECIAL_FUNCTIONS |
532 | |
533 | # unset these functions |
534 | unset -f preinstall |
535 | unset -f postinstall |
536 | unset -f preremove |
537 | unset -f postremove |
538 | done |
539 | } |
540 | |
541 | convert_virtual_defaults() |
542 | { |
543 | local virtual |
544 | local package |
545 | local vcat |
546 | local vname |
547 | local pcat |
548 | local pname |
549 | |
550 | sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)" |
551 | |
552 | while read virtual package |
553 | do |
554 | vcat="$(dirname ${virtual})" |
555 | vname="$(basename ${virtual})" |
556 | pcat="$(dirname ${package})" |
557 | pname="$(basename ${package})" |
558 | |
559 | sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')" |
560 | done < /etc/mage-profile/virtuals.defaults |
561 | } |
562 | |
563 | METHOD="$1" |
564 | DBFILE="$2" |
565 | |
566 | [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task" |
567 | [[ -z ${DBFILE} ]] && die "No database given." |
568 | |
569 | case $1 in |
570 | --install|-i) |
571 | create_database_layout |
572 | convert_install_db |
573 | ;; |
574 | --packages|-p) |
575 | create_database_layout |
576 | convert_smage_db |
577 | ;; |
578 | --virtuals|-v) |
579 | convert_virtual_defaults |
580 | ;; |
581 | *) die "Unkown method." ;; |
582 | esac |
Properties
Name | Value |
---|---|
svn:executable | * |