chef.sh 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. #!/bin/bash
  2. # Script generador de imagenes de firmware para el proyecto "LaOtraRed"
  3. #
  4. # Crea una imagen de firmware usando el Image Generator (ImagBuilder) de
  5. # openwrt, lede o librecmc.
  6. #
  7. # Ver la funcion ayuda() para forma de uso
  8. #
  9. # Autor(es):
  10. # * Rodrigo Garcia <strysg@riseup.net>
  11. #
  12. ayuda()
  13. {
  14. echo "Uso:"
  15. echo " ./chef.sh modelo_router bloque_IP/CIDR [bloque_Ipv6] [-t tipo]"
  16. echo " ./chef.sh [-l] [-h][--help]"
  17. echo
  18. echo "Donde:"
  19. echo " modelo_router El codigo segun el ImageBuilder , del enrutador."
  20. echo " bloque_IP/CIDR El bloque de direcciones IPv4 y el /CIDR asignado al router."
  21. echo " -l Lista los codigos segun los modelos de routers."
  22. echo " -h, --help Muestra esta ayuda."
  23. echo " -t tipo Establece el tipo de archivos de configuracion a usar."
  24. echo " si no se proporciona usa las configuraciones dentro de 'deafult'"
  25. echo
  26. echo "IMPORTANTE:"
  27. echo "El script requiere leer archivos PLANTILLA de configuraciones y estos deben estar ubicados en una carpeta en el directorio del script y tener el nombre 'configuraciones_chef'. "
  28. echo "Por cada modelo de router debe haber una carpeta nombrada con el CODIGO del MODELO del ROUTER y que contenga los archivos de configuraciones."
  29. echo "El script deberia estar ubicado en el directorio justo antes del ImageBuilder que se usara por defecto, tambien funcionaria un enlace simbolico."
  30. echo
  31. echo "Los modelos soportados estan en los archivos 'modelos_2.4Ghz.txt' y 'modelos_dualBand.txt'"
  32. echo
  33. echo "Autor(es): "
  34. echo " * Rodrigo Garcia <strysg.riseup.net>"
  35. echo "Repositorio: https://git.laotrared.net/LaOtraRed-dev/generador-firmwares-script"
  36. }
  37. RUTA_SCRIPT=$PWD
  38. RUTA_IMAGEBUILDER=lede-imagebuilder-ar71xx-generic.Linux-x86_64
  39. # otros ImageBuilder
  40. #RUTA_IMAGEBUILDER+=
  41. DIR_CONFIGS=$PWD/configuraciones_chef
  42. DIR_GENERADOS=$DIR_CONFIGS/generados
  43. MODELO_ROUTER=tl-mr3020-v1
  44. BLOQUE_IPV4='10.64.1.1/24'
  45. MASCARA='255.255.255.0'
  46. RED_IPV4='10.64.1.0'
  47. BLOQUE_IPV6=''
  48. TIPO_CONFIGS='default'
  49. # PAQUETES
  50. PACKAGES_TL_MR3020="kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld"
  51. PACKAGES_TL_WDR3600="kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld"
  52. #PACKAGES_TL_MR3020=kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport babeld
  53. lista_routers()
  54. {
  55. P=$PWD
  56. cd $RUTA_IMAGEBUILDER
  57. make info
  58. cd $P
  59. }
  60. if [ "$1" == "-l" ]
  61. then
  62. lista_routers
  63. exit 1
  64. fi
  65. if [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--help" ] || [ -z "$2" ]
  66. then
  67. ayuda
  68. exit 1
  69. fi
  70. if [ "$3" == "-t" ]
  71. then
  72. TIPO_CONFIGS=$4
  73. if [ ! -e $DIR_CONFIGS ]
  74. then
  75. echo "No se ha encontrado $DIR_CONFIGS"
  76. exit 1
  77. fi
  78. fi
  79. if [ "$4" == "-t" ]
  80. then
  81. TIPO_CONFIGS=$5
  82. if [ ! -e $DIR_CONFIGS ]
  83. then
  84. echo "No se ha encontrado $DIR_CONFIGS"
  85. exit 1
  86. fi
  87. fi
  88. ### preparacion
  89. # modelo
  90. if [ ! -e $DIR_CONFIGS/$1 ]
  91. then
  92. echo "Modelo: $1 ,no encontrado o configuraciones inexistentes"
  93. echo "use la opcion '-l' para ver los modelos soportados."
  94. exit 1
  95. else
  96. MODELO_ROUTER=$1
  97. DIR_CONFIGS=$DIR_CONFIGS/$MODELO_ROUTER/$TIPO_CONFIGS
  98. echo " Modelo DEFINIDO: $MODELO_ROUTER"
  99. fi
  100. # bloque IPv4
  101. if ! echo $2 | grep -e "\/2[4|5|6|7|8|9]" &> /dev/null
  102. then
  103. echo "No se ha definido CIDR valido"
  104. exit 1
  105. fi
  106. if ipcalc $2 | grep "INVALID" &> /dev/null
  107. then
  108. echo "Bloque IPv4: $2, Invalido"
  109. exit 1
  110. else
  111. BLOQUE_IPV4=$2
  112. MASCARA=$(ipcalc $2 | grep "Netmask" | awk '{ print $2 }')
  113. RED_IPV4=$(ipcalc $2 | grep "Network" | awk '{ print $2 }' | cut -d '/' -f1 )
  114. echo "Bloque IPv4 DEFINIDO: $2"
  115. echo " MASCARA: $MASCARA"
  116. echo " DIR RED: $RED_IPV4"
  117. echo " Tipo configuracion: $TIPO_CONFIGS"
  118. fi
  119. # generar archivos de configuracion a partir de plantillas
  120. AUX=$(echo $BLOQUE_IPV4 | cut -d '/' -f1)
  121. AUX=$(echo $AUX | cut -d '.' -f4)
  122. let "AUX += 1"
  123. IPV4_ROUTER=$(echo $BLOQUE_IPV4 | cut --complement -d '.' -f4)
  124. IPV4_ROUTER+=".$AUX"
  125. echo " IPv4 del router: $IPV4_ROUTER"
  126. CIDR=$(echo $BLOQUE_IPV4 | cut -d '/' -f2)
  127. echo " CIDR: $CIDR"
  128. DIR_GENERADOS=$DIR_GENERADOS/$MODELO_ROUTER"_"$RED_IPV4
  129. # copiando archivos de las plantillas
  130. if [ ! -e $DIR_GENERADOS ]
  131. then
  132. mkdir $DIR_GENERADOS
  133. fi
  134. echo " directorio destino: $DIR_GENERADOS"
  135. rm -rf $DIR_GENERADOS &> /dev/null
  136. cp -r $DIR_CONFIGS $DIR_GENERADOS/ &> /dev/null
  137. ## routers 2.4Ghz
  138. if grep $MODELO_ROUTER modelos_2.4Ghz.txt
  139. then
  140. ## /etc/config/network
  141. # IPv4
  142. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# IP publica del router 2.4Ghz"/"'$IPV4_ROUTER' # IP publica del router 2.4Ghz"/g $DIR_CONFIGS/etc/config/network)
  143. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  144. # CIDR
  145. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# CIDR 2.4Ghz"/"'$MASCARA' # CIDR 2.4Ghz \/$CIDR"/g $DIR_GENERADOS/etc/config/network)
  146. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  147. # IPV6n
  148. # ..
  149. ## /etc/config/wireless
  150. # (ningun cambio por ahora)
  151. ## /etc/config/babeld
  152. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+\/2[4-9]' *# bloque IPv4"/"'$RED_IPV4\/$CIDR' # bloque IPv4"/g $DIR_CONFIGS/etc/config/babeld)
  153. echo "$AUX" > $DIR_GENERADOS/etc/config/babeld
  154. ## scripts adicionales (ajustes de inicio)
  155. # ..
  156. echo
  157. echo "---- etc/config/network (generado) ----"
  158. cat $DIR_GENERADOS/etc/config/network
  159. echo
  160. echo "---- etc/config/babeld (generado) ----"
  161. cat $DIR_GENERADOS/etc/config/babeld
  162. echo
  163. # generar la imagen de firmware
  164. cd $RUTA_IMAGEBUILDER
  165. echo " ---- generando firmware -----"
  166. echo "make image PROFILE=$MODELO_ROUTER FILES=$DIR_GENERADOS/ PACKAGES='kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld'"
  167. echo
  168. # make image PROFILE=MODELO_ROUTER FILES=$DIR_GENERADOS PACKAGES=..
  169. if ! make image PROFILE=$MODELO_ROUTER FILES=$DIR_GENERADOS/ PACKAGES="kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld" > /dev/null
  170. then
  171. echo "ERROR al generar el firmware"
  172. exit 1
  173. fi
  174. # copiando imagen generada
  175. cd $RUTA_SCRIPT
  176. cd $RUTA_IMAGEBUILDER
  177. IMAGEN_GENERADA=$(find . -name *$MODELO_ROUTER-squashfs-factory.bin -type f | head -n 1)
  178. echo "IMG: $IMAGEN_GENERADA"
  179. cp $IMAGEN_GENERADA $DIR_GENERADOS
  180. # creando comprimido de la carpeta de configuraciones
  181. cd $DIR_GENERADOS
  182. echo "comprimiendo carpeta de configuraciones"
  183. zip -r configuraciones etc > /dev/null
  184. ### mostrar reportes
  185. echo
  186. echo "IMAGEN GENERADA en: $DIR_GENERADOS"
  187. exit 0
  188. fi
  189. ## routers DUAL BAND
  190. if grep $MODELO_ROUTER modelos_dualBand.txt
  191. then
  192. # /etc/config/network
  193. # IPv4 2.4Ghz
  194. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# IP publica del router 2.4Ghz"/"'$IPV4_ROUTER' # IP publica del router 2.4Ghz"/g $DIR_CONFIGS/etc/config/network)
  195. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  196. # CIDR 2.4Ghz
  197. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# CIDR 2.4Ghz"/"'$MASCARA' # CIDR 2.4Ghz \/$CIDR"/g $DIR_GENERADOS/etc/config/network)
  198. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  199. # IPv4 5Ghz
  200. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# IP publica del router 5Ghz"/"'$IPV4_ROUTER' # IP publica del router 5Ghz"/g $DIR_GENERADOS/etc/config/network)
  201. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  202. # CIDR 5Ghz
  203. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+' *# CIDR 5Ghz"/"'$MASCARA' # CIDR 5Ghz \/$CIDR"/g $DIR_GENERADOS/etc/config/network)
  204. echo "$AUX" > $DIR_GENERADOS/etc/config/network
  205. ## /etc/config/babeld
  206. AUX=$(sed --regexp-extended s/"'[0-9]+.[0-9]+.[0-9]+.[0-9]+\/2[4-9]' *# bloque IPv4"/"'$RED_IPV4\/$CIDR' # bloque IPv4"/g $DIR_CONFIGS/etc/config/babeld)
  207. echo "$AUX" > $DIR_GENERADOS/etc/config/babeld
  208. echo
  209. echo "---- etc/config/network (generado) ----"
  210. cat $DIR_GENERADOS/etc/config/network
  211. echo
  212. echo "---- etc/config/babeld (generado) ----"
  213. cat $DIR_GENERADOS/etc/config/babeld
  214. echo
  215. # generar la imagen de firmware
  216. cd $RUTA_SCRIPT
  217. cd $RUTA_IMAGEBUILDER
  218. echo " ---- generando firmware -----"
  219. echo "make image PROFILE=$MODELO_ROUTER FILES=$DIR_GENERADOS/ PACKAGES='kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld'"
  220. echo
  221. # make image PROFILE=MODELO_ROUTER FILES=$DIR_GENERADOS PACKAGES=..
  222. if ! make image PROFILE=$MODELO_ROUTER FILES=$DIR_GENERADOS PACKAGES="kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport -wpad-mini wpad babeld" > /dev/null
  223. then
  224. echo "ERROR al generar el firmware"
  225. exit 1
  226. fi
  227. # copiando imagen generada
  228. cd $RUTA_IMAGEBUILDER
  229. IMAGEN_GENERADA=$(find . -name *$MODELO_ROUTER-squashfs-factory.bin -type f | head -n 1)
  230. echo "IMG: $IMAGEN_GENERADA"
  231. cp $IMAGEN_GENERADA $DIR_GENERADOS
  232. # creando comprimido de la carpeta de configuraciones
  233. cd $DIR_GENERADOS
  234. echo "comprimiendo carpeta de configuraciones"
  235. zip -r configuraciones etc > /dev/null
  236. ### mostrar reportes
  237. echo
  238. echo "IMAGEN GENERADA en: $DIR_GENERADOS"
  239. exit 0
  240. fi
  241. exit 1