Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 488 - (hide 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 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 niro 488 #
206 niro 487 # install routines & includes
207 niro 488 #
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 niro 487 sql "insert into packages_routines(pkg_id,
222     mincludes,
223     postinstall,
224     preinstall,
225     preremove,
226     postremove)
227     values('${pkgid}',
228     '${mincludes}',
229 niro 488 '$([[ -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 niro 487
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 *