Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 487 - (show annotations) (download) (as text)
Tue May 1 11:46:52 2007 UTC (17 years ago) by niro
File MIME type: application/x-sh
File size: 11212 byte(s)
-added database conversion script

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 # install routines & includes
206 sql "insert into packages_routines(pkg_id,
207 mincludes,
208 postinstall,
209 preinstall,
210 preremove,
211 postremove)
212 values('${pkgid}',
213 '${mincludes}',
214 '$(typeset -f postinstall | sed s:\':\'\':g)',
215 '$(typeset -f preinstall | sed s:\':\'\':g)',
216 '$(typeset -f preremove | sed s:\':\'\':g)',
217 '$(typeset -f postremove | sed s:\':\'\':g)')"
218
219 unset PKGNAME
220 unset DEPEND
221 unset SDEPEND
222 unset PROVIDE
223
224 # unset these functions
225 unset -f preinstall
226 unset -f postinstall
227 unset -f preremove
228 unset -f postremove
229 done
230 }
231
232
233 convert_install_db()
234 {
235 local i
236 local magefile
237 local pcat
238 local pname
239 local pver
240 local pbuild
241 local pcatid
242 local state
243 local preinstall
244 local postinstall
245 local preremove
246 local postremove
247 local pkgid
248 local dep
249 local PKGNAME
250 local STATE
251 local DESCRIPTION
252 local HOMEPAGE
253 local DEPEND
254 local SDEPEND
255 local PROVIDE
256 local PKGTYPE
257 local preinstall
258 local postinstall
259 local preremove
260 local postremove
261 local sym
262 local depname
263 local depver
264 local depbuild
265 local depcat
266 local depcatid
267 local md5file
268 local md5sum
269 local pkginfoid
270 local entrydir
271
272 # create categories
273 for i in virtual ${INSTALLDB}/*
274 do
275 pcat="$(basename ${i})"
276 case ${pcat} in
277 include|profiles) continue;;
278 esac
279
280 sql "insert into categories (pcat) values('${pcat}')"
281 done
282
283 # create packages
284 for magefile in $(find ${INSTALLDB} -type f -name *.mage| sort)
285 do
286 case ${DEBUG} in
287 1|true) echo "converting ${magefile}" ;;
288 esac
289
290 pcat="$(magename2pcat ${magefile})"
291 pname="$(magename2pname ${magefile})"
292 pver="$(magename2pver ${magefile})"
293 pbuild="$(magename2pbuild ${magefile})"
294 # substitute r from pbuild
295 pbuild="${pbuild/r/}"
296
297 source ${magefile}
298
299 pcatid=$(sql "select id from categories where pcat='${pcat}'")
300 sql "insert into packages(
301 pname,
302 pver,
303 pbuild,
304 pcat_id,
305 state,
306 provide,
307 pkgtype
308 )
309 values(
310 '${pname}',
311 '${pver}',
312 '${pbuild}',
313 '${pcatid}',
314 '${STATE}',
315 '${PROVIDE}',
316 '${PKGTYPE}'
317 )"
318
319 pkgid=$(sql "select id from packages where pname='${pname}' and pver='${pver}' and pbuild='${pbuild}'")
320 # depends
321 while read sym dep
322 do
323 [[ -z ${dep} ]] && continue
324 depcat="$(dep2pcat ${dep})"
325 depcatid=$(sql "select id from categories where pcat='${depcat}'")
326 depname="$(dep2pname ${dep})"
327 depver="$(dep2pver ${dep})"
328 sql "insert into depends(pkg_id,
329 relation,
330 pcat_id,
331 pname,
332 pver,
333 pbuild)
334 values('${pkgid}',
335 '${sym}',
336 '${depcatid}',
337 '${depname}',
338 '${depver}',
339 '${depbuild}')"
340 done << EOF
341 ${DEPEND}
342 EOF
343 # sdepends
344 while read sym dep
345 do
346 [[ -z ${dep} ]] && continue
347 depcat="$(dep2pcat ${dep})"
348 depcatid=$(sql "select id from categories where pcat='${depcat}'")
349 depname="$(dep2pname ${dep})"
350 depver="$(dep2pver ${dep})"
351 sql "insert into sdepends(pkg_id,
352 relation,
353 pcat_id,
354 pname,
355 pver,
356 pbuild)
357 values('${pkgid}',
358 '${sym}',
359 '${depcatid}',
360 '${depname}',
361 '${depver}',
362 '${depbuild}')"
363 done << EOF
364 ${SDEPEND}
365 EOF
366
367 DESCRIPTION="$(echo ${DESCRIPTION} | sed s:\':\'\':g)"
368 sql "insert into packages_info(pkg_id, arch, md5, description, homepage)
369 values('${pkgid}','${ARCH}','${md5sum}','${DESCRIPTION}','${HOMEPAGE}')"
370
371
372 # install routines & includes
373 sql "insert into packages_routines(pkg_id,
374 mincludes,
375 postinstall,
376 preinstall,
377 preremove,
378 postremove)
379 values('${pkgid}',
380 '${mincludes}',
381 '$(typeset -f postinstall | sed s:\':\'\':g)',
382 '$(typeset -f preinstall | sed s:\':\'\':g)',
383 '$(typeset -f preremove | sed s:\':\'\':g)',
384 '$(typeset -f postremove | sed s:\':\'\':g)')"
385
386 #### ####
387 # record contents #
388 #### ####
389 pkginfoid=$(sql "select id from packages_info where pkg_id='${pkgid}' and arch='${ARCH}'")
390 entrydir="$(dirname ${magefile})"
391 # sql "insert into packages_content(pkginfo_id,
392 # char,
393 # dirs,
394 # files,
395 # pipes,
396 # symlinks)
397 # values('${pkginfoid}',
398 # '$(< ${entrydir}/.char)',
399 # '$(< ${entrydir}/.dirs)',
400 # '$(< ${entrydir}/.files)',
401 # '$(< ${entrydir}/.pipes)',
402 # '$(< ${entrydir}/.symlinks)')"
403 sql "insert into packages_content(pkginfo_id,
404 char,
405 dirs,
406 files,
407 pipes,
408 symlinks)
409 values('${pkginfoid}',
410 'records/${pkginfoid}/char.bz2',
411 'records/${pkginfoid}/dirs.bz2',
412 'records/${pkginfoid}/files.bz2',
413 'records/${pkginfoid}/pipes.bz2',
414 'records/${pkginfoid}/symlinks.bz2')"
415 # create compressed content files
416 local entryfile
417 for entryfile in char dirs files pipes symlinks
418 do
419 install -d $(dirname ${DBFILE})/records/${pkginfoid}
420 cat ${entrydir}/.${entryfile} | bzip2 -9 >> $(dirname ${DBFILE})/records/${pkginfoid}/${entryfile}.bz2
421 done
422
423 unset PKGNAME
424 unset DEPEND
425 unset SDEPEND
426 unset PROVIDE
427
428 # unset these functions
429 unset -f preinstall
430 unset -f postinstall
431 unset -f preremove
432 unset -f postremove
433 done
434 }
435
436 convert_virtual_defaults()
437 {
438 local virtual
439 local package
440 local vcat
441 local vname
442 local pcat
443 local pname
444
445 sql "create table virtual_defaults(id integer primary key, vcat text,vname text, pcat text, pname text)"
446
447 while read virtual package
448 do
449 vcat="$(dirname ${virtual})"
450 vname="$(basename ${virtual})"
451 pcat="$(dirname ${package})"
452 pname="$(basename ${package})"
453
454 sql "insert into virtual_defaults(vcat,vname,pcat,pname) values('${vcat}','${vname}','${pcat}','${pname}')"
455 done < /etc/mage-profile/virtuals.defaults
456 }
457
458
459 # packages db
460 #DBFILE=/home/tjoke/DATABASES/mage6.sql
461 #create_database_layout
462 #convert_mage_db
463
464 # virtual default
465 #DBFILE=/home/tjoke/DATABASES/virtuals6.sql
466 #convert_virtual_defaults
467
468 # # install db
469 # DBFILE=/home/tjoke/DATABASES/install6.sql
470 # create_database_layout
471 # convert_install_db
472
473
474 METHOD="$1"
475 DBFILE="$2"
476
477 [[ -z ${METHOD} ]] && die "No method given. Use --install, --packages or --virtual for your appropiate task"
478 [[ -z ${DBFILE} ]] && die "No database given."
479
480 case $1 in
481 --install|-i)
482 create_database_layout
483 convert_install_db
484 ;;
485 --packages|-p)
486 create_database_layout
487 convert_mage_db
488 ;;
489 --virtuals|-v)
490 convert_virtual_defaults
491 ;;
492 *) die "Unkown method." ;;
493 esac

Properties

Name Value
svn:executable *