My favorites | Sign in
Logo
                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
#!/bin/sh
#desc Base del sistema de desarrollo de OpenDomo

# Manual de SDK:
#@ OpenDomo SDK
#@ ------------
#@ Este programa intenta simplificar la utilización de los scripts de OpenDomo
#@ complementándolos con mejores explicaciones y verificaciones, accediendo a
#@ ellos desde un solo ejecutable.
#@
#@ La forma de emplear este ejecutable es indicando el comando a ejecutar como
#@ primer argumento (o emplear "help" para ver la lista de comandos) y, si es
#@ necesario, añadir el resto de argumentos a continuación.
#@

SVN="/usr/bin/svn"
BRPATH="http://buildroot.uclibc.org/downloads"
BRFILE="buildroot-2009.11"
HERE=`pwd`
#Module validation script
MVSCRIPT="opendomo-distro/tests/validatemodule.sh"
TODAY=`date +%d%m%y`
LOGDIR="$HERE/logs/$TODAY"

create_new_pkg() {
mkdir -p $1/etc/opendomo/
mkdir -p $1/usr/local/opendomo
mkdir -p $1/var/opendomo/i18n
mkdir -p $1/pkg
echo -n "Código del paquete (p.e. odcgi):"
read pkgname

if test -f $1/mkpkg.sh; then
echo "El archivo mkpkg.sh ya existe."
else
echo '#!/bin/sh
DATE=`date +%Y%m%d`
PKG="PKGNAME"
ARCH="noarch"
EXCLUSION=" --exclude \"*~\" --exclude .svn "
OWNERS=" --owner 1000 --group 1000 "
# make || exit 1
rm -f pkg/*.tar.gz
tar zcf pkg/$PKG-$DATE.od.$ARCH.tar.gz etc usr var $OWNERS $EXCLUSION
' | sed "s/PKGNAME/$pkgname/" > $1/mkpkg.sh
fi
chmod +x $1/mkpkg.sh
touch $1/TODO
touch $1/README
touch $1/CHANGES
touch $1/var/opendomo/i18n/$pkgname.key
touch $1/var/opendomo/i18n/$pkgname.es
touch $1/var/opendomo/i18n/$pkgname.ca
if ! test -f $1/pkg/$pkgname.desc; then
echo -n "Describe el paquete en una frase: "
read desc
echo "$desc" > $1/pkg/$pkgname.desc
fi
}

#@ Prerequisitos
#@ -------------
#@ Para poder emplear este script será necesario que dispongas de los paquetes
#@ siguientes instalados en tu equipo:
#@ build-essential locales-all subversion git-core make gcc qemu ncurses-dev g++ bison flex gettext texinfo
#@
#@ Si tu distribución es Debian o Ubuntu, puedes emplear el comando "apt-get"
#@ para instalar rápidamente todas las dependencias.
#@
PREREQS="subversion make gcc qemu ncurses-dev g++ bison flex gettext texinfo"
install_prereqs() {
if test -f /usr/bin/apt-get ; then
sudo apt-get install $PREREQS
else
echo "ERROR: apt-get command not found"
fi
}

#@ Primeros pasos
#@ --------------
#@ Si ha podido ejecutar este script, probablemente significa que dispone de
#@ los archivos fuente de OpenDomo en su equipo. En todo caso, es recomendable
#@ empezar todo el proceso de desarrollo ejecutando la siguiente línea:
#@ # ./odsdk.sh update
#@
#@ Hecho esto, dispondremos de todos los archivos fuente necesarios para poder
#@ compilar nuestra distribución. La misma operación deberá ejecutarse de vez
#@ en cuando para estar seguros de tener la última versión disponible.
#@

#@ Generación completa de una distribución OpenDomo
#@ ------------------------------------------------
#@ Una vez obtenido el código fuente, podremos proceder a crear una imagen ISO
#@ con la distribución OpenDomo. Los pasos esenciales a seguir son:
#@ 1. # ./odsdk.sh update (Obtener últimas versiones del código)
#@ 2* # ./odsdk.sh brmc (Seleccionamos las opciones del buildroot)
#@ 3. # ./odsdk.sh brmake (Compilamos buildroot y dependencias)
#@ 4. # ./odsdk.sh packages (Compilamos todos los paquetes OpenDomo)
#@ 5* # ./odsdk.sh external (Compilamos todos los paquetes externos)
#@ 6* # rm opendomo-distro/.. (Borramos los paquetes no deseados)
#@ 7. # ./odsdk.sh mkiso (Creamos la ISO con paquetes y kernel creados)
#@ 8. # ./odsdk.sh test (Lanzamos los tests automáticos, probamos...)
#@ 9. # ./odsdk.sh rel 0.7.9 (Pasados los test, generamos la "release")
#@
#@ (*=pasos opcionales)
#@

process_command(){
case $1 in
deps) ## Instala los paquetes prerequeridos
install_prereqs
;;
update) ## Actualiza los archivos fuente y el buildroot

# Si ODSDK ha cambiado, le pasamos el flujo y salimos
LU=`svn update odsdk.sh | wc -l`
if test "$LU" -gt "1"; then
./odsdk.sh update
exit 0
fi

echo -n " OpenDomo SVN ... "
svn update
echo -n " Busybox SVN ... "
if test -f ../$BRFILE.tar.gz; then
echo "Up to date"
else
if wget "$BRPATH/$BRFILE.tar.gz" >/dev/null 2>/dev/null
then
if tar -zxf $BRFILE.tar.gz ; then
mv $BRFILE ../buildroot
echo "Updated to $BRFILE"
else
echo "ERROR: invalid buildroot"
fi
else
echo "ERROR: no se pudo descargar"
fi
fi
# Copiamos la configuración del buildroot para OpenDomo
cp opendomo-distro/buildroot-config ../buildroot/.config
;;
br-menuconfig|brmc) ## Carga el menú de configuración del buildroot
cd ../buildroot
cp ../opendomo/opendomo-distro/buildroot-config .config
make menuconfig
cp .config ../opendomo/opendomo-distro/buildroot-config
cd ../opendomo
;;
br-make|brmake) ## Compila el buildroot
if test -d ../buildroot; then
cd ../buildroot
echo "Esta operación puede tomar mucho tiempo."\
"Por favor, sea paciente."
make
else
echo "ERROR: El directorio no existe. "\
"Ejecuta $0 checkout en primer lugar."
fi
;;

kn-menuconfig|knmc) ## Carga el menú de configuración del kernel
HERE=`pwd`
cd ../buildroot/output/build/linux-*/
THERE=`pwd`
cp $HERE/opendomo-distro/linux-config $THERE/.config
cd $THERE
make menuconfig
cp .config $HERE/opendomo-distro/linux-config
cd $HERE
;;

newpackage) ## Crea/actualiza un paquete para OpenDomo
if test -z "$2"; then
echo "ERROR: Debe especificar el nombre del paquete."
else
if test -d "$2"; then
echo "ERROR: El directorio $2 ya existe."
else
create_new_pkg $2
fi
fi
;;
rel|release) ## Genera una ISO oficial (requiere indicar versión)
if test -z "$2"; then
echo "ERROR: debe especificar una versión válida. "\
"El formato debe ser V.M.R (p.e. 0.7.8)"
else
cd opendomo-distro
echo "Es necesario ejecutar este comando como Root. "\
"A continuación se le pedirá la contraseña para seguir."
sudo ./create_iso.sh $2
cd ..
fi
;;
mkiso) ## Genera una ISO con el linux compilado
cd opendomo-distro
echo "Es necesario ejecutar este comando como Root. "
echo "A continuación se le pedirá la contraseña para seguir."
if sudo ./create_iso.sh; then
echo "ISO generada"
else
echo "ERROR: No se ha podido generar la ISO."
echo "Es posible que no se encuentre alguno de los paquetes."
echo "Ejecute el comando 'pkg' para generarlos."
fi
cd ..
;;
start) ## Arranca en qEmu la ultima ISO generada
if test -f opendomo-distro/opendomo-unlabeled-486.iso; then
cd opendomo-distro
sudo ./start.sh opendomo-unlabeled-486.iso
cd ..
else
echo "ERROR: ISO no encontrada"
fi
;;
packages|pkg) ## Empaqueta todos los paquetes internos de OpenDomo
mkdir -p $LOGDIR
rm -f opendomo-distro/packages/*.gz
echo "Creando paquetes..."
for s in *; do
if test -x $s/mkpkg.sh; then
PKGNAME=`echo "$s " | cut -b1-20`
echo -n " $PKGNAME "
cd $s
if ./mkpkg.sh >$LOGDIR/$s.log 2>>$LOGDIR/$s.err; then
P=`ls pkg/*.gz | head -n 1` 2>/dev/null
if cp pkg/*.* ../opendomo-distro/packages/ 2>/dev/null
then
WARN=`../$MVSCRIPT $P |grep WARNING |wc -l` 2>/dev/null
echo " OK ($WARN warnings)"
else
echo " FAILED"
fi
else
echo " FAILED"
break
fi
cd ..
fi
done
cp opendomo-distro/external/packages/* opendomo-distro/packages/
;;
external|expkg) ## Empaqueta todos los paquetes externos de OpenDomo
mkdir -p $LOGDIR
cd opendomo-distro/external
rm -f packages/*.gz
echo "Creando paquetes externos..."
for s in mkpkg*.sh; do
PKGNAME=`echo "$s " | \
sed -e 's/mkpkg_//' -e 's/.sh//' | cut -b1-20`
CODE=`echo $s |sed -e 's/mkpkg_//' -e 's/.sh//'`
echo -n " $PKGNAME "
if /bin/sh $s >$LOGDIR/$CODE.log 2>$LOGDIR/$CODE.err; then
P=`ls packages/$CODE*.gz`
WARN=`../../$MVSCRIPT $P |grep WARNING |wc -l`
echo " OK ($WARN warnings)"
else
echo " FAILED"
fi
done
cp packages/* ../packages/
cd ..
cd ..
;;
lspkg|listpackages) ## Muestra un listado con los paquetes preparados
echo "Paquetes preparados:"
for i in ./opendomo-distro/packages/*.tar.gz; do
echo " `basename $i`"
done
;;
repository|rep) ## Crea el índice del repositorio, si este existe
if test -n "$ODREP"; then
HERE=`pwd`
cd $ODREP
echo "Generando índice ..."
echo "#desc OpenDomo development repository" > index.txt
for file in *.tar.gz; do
BASE=`echo $file | cut -f 1 -d'-'`
echo " $BASE "
if test -f $BASE.deps; then
deps=`cat $BASE.deps`
fi
echo "$file;$deps" >> index.txt
sha1sum $file | cut -f1 -d" " > $file.sha1
done
cd $HERE
fi
;;
test) ## Lanza los tests automáticos
cd opendomo-distro/tests
if ./run.sh ../opendomo-unlabeled-486.iso; then
echo "Tests superados!"
else
echo "ERROR: Tests no superados"
fi
cd ..
cd ..
;;

man) ## Muestra el manual del ejecutable
echo
grep '#@' $0 | grep -v grep | sed 's/#@/ /g' | less
;;
clear)
clear
;;
help)
echo
echo "Comandos soportados:"
grep '##' $0 | grep -v grep | sed -e 's/^\t/ /' -e 's/##/\t/g' -e 's/|/,/g'
;;
quit|exit)
exit 0
;;
esac
echo
}

#@ Intérprete de comandos OD SDK
#@ -----------------------------
#@ Si no se ha especificado ningún argumento accederemos a la línea de comandos
#@ que nos proporcionará un entorno simplificado y ágil para trabajar con las
#@ herramientas de OpenDomo.
#@
if test -z "$1"; then
HERE=`pwd`
echo "Intérprete de comandos de OpenDomo SDK. "
echo "Usa Ctrl+C, 'quit' o 'exit' para regresar a la línea de comandos"\
" o 'help' para ver todos los comandos disponibles."
while(true); do
cd $HERE
echo -n "ODSDK> "
read line
var1=`echo $line | cut -f1 -d' '`
var2=`echo $line | cut -f2 -d' '`
process_command $var1 $var2
done

else
process_command $1 $2
fi
Show details Hide details

Change log

r1505 by dlerch on Mar 08, 2010   Diff
odsdk: improve tar.gz files management
Go to: 
Project members, sign in to write a code review

Older revisions

r1503 by dlerch on Mar 08, 2010   Diff
odsdk: fix packages path
r1471 by opalenzuela on Mar 03, 2010   Diff
odsdk: Error message if ISO is not
found
r1290 by opalenzuela on Feb 03, 2010   Diff
odsdk: New command kn-menuconfig, for
further kernel migration and tuning.
In create_iso, drivers must be
manually inserted.
All revisions of this file

File info

Size: 10182 bytes, 343 lines

File properties

svn:executable
*
Powered by Google Project Hosting