Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 487 - (hide 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 niro 487 #!/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 *