Magellan Linux

Contents of /trunk/mage/usr/lib/mage/convert_databases.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 488 - (show annotations) (download) (as text)
Tue May 1 13:09:39 2007 UTC (17 years ago) by niro
File MIME type: application/x-sh
File size: 12065 byte(s)
- fixed package_routines import with some echo & sed magic. this is neccessary to export the functions via 'eval'

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 }
59
60 convert_mage_db()
61 {
62 local i
63 local magefile
64 local pcat
65 local pname
66 local pver
67 local pbuild
68 local pcatid
69 local state
70 local preinstall
71 local postinstall
72 local preremove
73 local postremove
74 local pkgid
75 local dep
76 local PKGNAME
77 local STATE
78 local DESCRIPTION
79 local HOMEPAGE
80 local DEPEND
81 local SDEPEND
82 local PROVIDE
83 local PKGTYPE
84 local preinstall
85 local postinstall
86 local preremove
87 local postremove
88 local sym
89 local depname
90 local depver
91 local depbuild
92 local depcat
93 local depcatid
94 local md5file
95 local md5sum
96
97 # create categories
98 for i in virtual ${MAGEDIR}/*
99 do
100 pcat="$(basename ${i})"
101 case ${pcat} in
102 include|profiles) continue;;
103 esac
104
105 sql "insert into categories (pcat) values('${pcat}')"
106 done
107
108 # create packages
109 for magefile in $(find ${MAGEDIR} -type f -name *.mage| sort)
110 do
111 case ${DEBUG} in
112 1|true) echo "converting ${magefile}" ;;
113 esac
114 pcat="$(magename2pcat ${magefile})"
115 pname="$(magename2pname ${magefile})"
116 pver="$(magename2pver ${magefile})"
117 pbuild="$(magename2pbuild ${magefile})"
118 # substitute r from pbuild
119 pbuild="${pbuild/r/}"
120
121 source ${magefile}
122
123 pcatid=$(sql "select id from categories where pcat='${pcat}'")
124 sql "insert into packages(
125 pname,
126 pver,
127 pbuild,
128 pcat_id,
129 state,
130 provide,
131 pkgtype
132 )
133 values(
134 '${pname}',
135 '${pver}',
136 '${pbuild}',
137 '${pcatid}',
138 '${STATE}',
139 '${PROVIDE}',
140 '${PKGTYPE}'
141 )"
142
143 pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'")
144 # depends
145 while read sym dep
146 do
147 [[ -z ${dep} ]] && continue
148 depcat="$(dep2pcat ${dep})"
149 depcatid=$(sql "select id from categories where pcat='${depcat}'")
150 depname="$(dep2pname ${dep})"
151 depver="$(dep2pver ${dep})"
152 sql "insert into depends(pkg_id,
153 relation,
154 pcat_id,
155 pname,
156 pver,
157 pbuild)
158 values('${pkgid}',
159 '${sym}',
160 '${depcatid}',
161 '${depname}',
162 '${depver}',
163 '${depbuild}')"
164 done << EOF
165 ${DEPEND}
166 EOF
167 # sdepends
168 while read sym dep
169 do
170 [[ -z ${dep} ]] && continue
171 depcat="$(dep2pcat ${dep})"
172 depcatid=$(sql "select id from categories where pcat='${depcat}'")
173 depname="$(dep2pname ${dep})"
174 depver="$(dep2pver ${dep})"
175 sql "insert into sdepends(pkg_id,
176 relation,
177 pcat_id,
178 pname,
179 pver,
180 pbuild)
181 values('${pkgid}',
182 '${sym}',
183 '${depcatid}',
184 '${depname}',
185 '${depver}',
186 '${depbuild}')"
187 done << EOF
188 ${SDEPEND}
189 EOF
190
191 for arch in i686 x86_64
192 do
193 md5file="${MAGEDIR}/${pcat}/${pname}/md5/${pname}-${pver}-${arch}-r${pbuild}.md5"
194 [[ -f ${md5file} ]] && md5sum="$(cat ${md5file} | cut -d' ' -f1)"
195
196 # fix descriptions
197 DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)"
198
199 sql "insert into packages_info(pkg_id, arch, md5, description, homepage)
200 values('${pkgid}','${arch}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')"
201 done
202
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 unset PKGNAME
235 unset DEPEND
236 unset SDEPEND
237 unset PROVIDE
238
239 # unset these functions
240 unset -f preinstall
241 unset -f postinstall
242 unset -f preremove
243 unset -f postremove
244 done
245 }
246
247
248 convert_install_db()
249 {
250 local i
251 local magefile
252 local pcat
253 local pname
254 local pver
255 local pbuild
256 local pcatid
257 local state
258 local preinstall
259 local postinstall
260 local preremove
261 local postremove
262 local pkgid
263 local dep
264 local PKGNAME
265 local STATE
266 local DESCRIPTION
267 local HOMEPAGE
268 local DEPEND
269 local SDEPEND
270 local PROVIDE
271 local PKGTYPE
272 local preinstall
273 local postinstall
274 local preremove
275 local postremove
276 local sym
277 local depname
278 local depver
279 local depbuild
280 local depcat
281 local depcatid
282 local md5file
283 local md5sum
284 local pkginfoid
285 local entrydir
286
287 # create categories
288 for i in virtual ${INSTALLDB}/*
289 do
290 pcat="$(basename ${i})"
291 case ${pcat} in
292 include|profiles) continue;;
293 esac
294
295 sql "insert into categories (pcat) values('${pcat}')"
296 done
297
298 # create packages
299 for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort)
300 do
301 case ${DEBUG} in
302 1|true) echo "converting ${magefile}" ;;
303 esac
304
305 pcat="$(magename2pcat ${magefile})"
306 pname="$(magename2pname ${magefile})"
307 pver="$(magename2pver ${magefile})"
308 pbuild="$(magename2pbuild ${magefile})"
309 # substitute r from pbuild
310 pbuild="${pbuild/r/}"
311
312 source ${magefile}
313
314 pcatid=$(sql "select id from categories where pcat='${pcat}'")
315 sql "insert into packages(
316 pname,
317 pver,
318 pbuild,
319 pcat_id,
320 state,
321 provide,
322 pkgtype
323 )
324 values(
325 '${pname}',
326 '${pver}',
327 '${pbuild}',
328 '${pcatid}',
329 '${STATE}',
330 '${PROVIDE}',
331 '${PKGTYPE}'
332 )"
333
334 pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'")
335 # depends
336 while read sym dep
337 do
338 [[ -z ${dep} ]] && continue
339 depcat="$(dep2pcat ${dep})"
340 depcatid=$(sql "select id from categories where pcat='${depcat}'")
341 depname="$(dep2pname ${dep})"
342 depver="$(dep2pver ${dep})"
343 sql "insert into depends(pkg_id,
344 relation,
345 pcat_id,
346 pname,
347 pver,
348 pbuild)
349 values('${pkgid}',
350 '${sym}',
351 '${depcatid}',
352 '${depname}',
353 '${depver}',
354 '${depbuild}')"
355 done << EOF
356 ${DEPEND}
357 EOF
358 # sdepends
359 while read sym dep
360 do
361 [[ -z ${dep} ]] && continue
362 depcat="$(dep2pcat ${dep})"
363 depcatid=$(sql "select id from categories where pcat='${depcat}'")
364 depname="$(dep2pname ${dep})"
365 depver="$(dep2pver ${dep})"
366 sql "insert into sdepends(pkg_id,
367 relation,
368 pcat_id,
369 pname,
370 pver,
371 pbuild)
372 values('${pkgid}',
373 '${sym}',
374 '${depcatid}',
375 '${depname}',
376 '${depver}',
377 '${depbuild}')"
378 done << EOF
379 ${SDEPEND}
380 EOF
381
382 DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)"
383 sql "insert into packages_info(pkg_id, arch, md5, description, homepage)
384 values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')"
385
386
387 # install routines & includes
388 sql "insert into packages_routines(pkg_id,
389 mincludes,
390 postinstall,
391 preinstall,
392 preremove,
393 postremove)
394 values('${pkgid}',
395 '${mincludes}',
396 '$(typeset -f postinstall | sed s:\':\'\':g)',
397 '$(typeset -f preinstall | sed s:\':\'\':g)',
398 '$(typeset -f preremove | sed s:\':\'\':g)',
399 '$(typeset -f postremove | sed s:\':\'\':g)')"
400
401 #### ####
402 # record contents #
403 #### ####
404 pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'")
405 entrydir="$(dirname ${magefile})"
406 # sql "insert into packages_content(pkginfo_id,
407 # char,
408 # dirs,
409 # files,
410 # pipes,
411 # symlinks)
412 # values('${pkginfoid}',
413 # '$(< ${entrydir}/.char)',
414 # '$(< ${entrydir}/.dirs)',
415 # '$(< ${entrydir}/.files)',
416 # '$(< ${entrydir}/.pipes)',
417 # '$(< ${entrydir}/.symlinks)')"
418 sql "insert into packages_content(pkginfo_id,
419 char,
420 dirs,
421 files,
422 pipes,
423 symlinks)
424 values('${pkginfoid}',
425 'records/${pkginfoid}/char.bz2',
426 'records/${pkginfoid}/dirs.bz2',
427 'records/${pkginfoid}/files.bz2',
428 'records/${pkginfoid}/pipes.bz2',
429 'records/${pkginfoid}/symlinks.bz2')"
430 # create compressed content files
431 local entryfile
432 for entryfile in char dirs files pipes symlinks
433 do
434 install -d $(dirname ${DBFILE})/records/${pkginfoid}
435 cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/records/${pkginfoid}/${entryfile}.bz2
436 done
437
438 unset PKGNAME
439 unset DEPEND
440 unset SDEPEND
441 unset PROVIDE
442
443 # unset these functions
444 unset -f preinstall
445 unset -f postinstall
446 unset -f preremove
447 unset -f postremove
448 done
449 }
450
451 convert_virtual_defaults()
452 {
453 local virtual
454 local package
455 local vcat
456 local vname
457 local pcat
458 local pname
459
460 sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)"
461
462 while read virtual package
463 do
464 vcat="$(dirname ${virtual})"
465 vname="$(basename ${virtual})"
466 pcat="$(dirname ${package})"
467 pname="$(basename ${package})"
468
469 sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')"
470 done < /etc/mage-profile/virtuals.defaults
471 }
472
473
474 # packages db
475 #DBFILE=/home/tjoke/DATABASES/mage6.sql
476 #create_database_layout
477 #convert_mage_db
478
479 # virtual default
480 #DBFILE=/home/tjoke/DATABASES/virtuals6.sql
481 #convert_virtual_defaults
482
483 # # install db
484 # DBFILE=/home/tjoke/DATABASES/install6.sql
485 # create_database_layout
486 # convert_install_db
487
488
489 METHOD="$1"
490 DBFILE="$2"
491
492 [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task"
493 [[ -z ${DBFILE} ]] && die "No database given."
494
495 case $1 in
496 --install|-i)
497 create_database_layout
498 convert_install_db
499 ;;
500 --packages|-p)
501 create_database_layout
502 convert_mage_db
503 ;;
504 --virtuals|-v)
505 convert_virtual_defaults
506 ;;
507 *) die "Unkown method." ;;
508 esac

Properties

Name Value
svn:executable *