Magellan Linux

Contents of /branches/mage-next/usr/lib/mage/convert_databases.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2525 - (show annotations) (download) (as text)
Wed Jan 29 10:42:21 2014 UTC (10 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 12013 byte(s)
-open mage-next branch
1 #!/bin/bash
2
3 : ${MAGERC="/etc/mage.rc"}
4
5 source /etc/mage.rc.global
6 source ${MAGERC}
7 source ${MLIBDIR}/mage4.functions.sh
8 source ${MLIBDIR}/smage2.functions.sh
9 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 smagesource ${magefile}
118
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 #
202 # install routines & includes
203 #
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 sql "insert into packages_routines(pkg_id,
218 mincludes,
219 postinstall,
220 preinstall,
221 preremove,
222 postremove)
223 values('${pkgid}',
224 '${mincludes}',
225 '$([[ -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
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 *