Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *