-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild_piper_models_deb.sh
More file actions
executable file
·145 lines (115 loc) · 5.99 KB
/
build_piper_models_deb.sh
File metadata and controls
executable file
·145 lines (115 loc) · 5.99 KB
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
#!/bin/bash
### build_libretranslate_models_deb.sh - Descarga modelos de LibreTranslate y los empaqueta por idioma
# --- Variables de Configuración Global ---
LT_VERSION="1.4.0" # Debe coincidir con la versión de libretranslate-base
PACKAGE_NAME_BASE="libretranslate"
ARCH="all" # ¡CRÍTICO! Los modelos son datos, no binarios.
MODEL_INDEX_URL="https://raw.githubusercontent.com/argosopentech/argospm-index/refs/heads/main/index.json"
MODEL_INDEX_FILE="models.json"
DOWNLOAD_DIR="lt_models_download_temp"
BUILD_DIR="lt_models_staging"
# Ruta donde LibreTranslate espera encontrar los modelos: /usr/share/libretranslate/models
MODEL_INSTALL_PATH="/usr/share/$PACKAGE_NAME_BASE/models"
# --- Variables de Repositorio Local (NUEVAS) ---
# Ruta donde se guardarán los paquetes DEB de arquitectura 'all'
REPO_PATH="${HOME}/public_html/ch9/debian/pool/${ARCH}"
# --- Variables de Directorio Temporal de FPM (para robustez) ---
FPM_TMP_BASE="fpm_model_temp"
export ABSOLUTE_FPM_TMP_PATH="$(pwd)/${FPM_TMP_BASE}"
# CRÍTICO: Forzar el uso de la ruta de disco duro en lugar de /tmp (tmpfs)
export TMPDIR="$ABSOLUTE_FPM_TMP_PATH"
export TEMP="$ABSOLUTE_FPM_TMP_PATH"
export FPM_TEMP="$ABSOLUTE_FPM_TMP_PATH"
# --- 1. Preparación y Descarga de Índice de Modelos ---
echo "--- 1. Preparación y Descarga de Índice de Modelos ---"
command -v wget >/dev/null 2>&1 || {
echo "Instalando wget..."
sudo apt update && sudo apt install -y wget
}
command -v jq >/dev/null 2>&1 || {
echo "Instalando jq (necesario para procesar JSON)..."
sudo apt update && sudo apt install -y jq
}
# Preparamos directorios
rm -rf "$DOWNLOAD_DIR" "$BUILD_DIR"-* "$FPM_TMP_BASE" # Añadimos limpieza del temporal
mkdir -p "$DOWNLOAD_DIR"
mkdir -p "$FPM_TMP_BASE" # Creamos el directorio temporal para fpm
rm -f ${PACKAGE_NAME_BASE}-model-*.deb # Limpiamos .deb anteriores
# Descargar el archivo índice
echo "-> Intentando descargar el índice de modelos desde: $MODEL_INDEX_URL"
wget -c "$MODEL_INDEX_URL" -O "$MODEL_INDEX_FILE" || { echo "Error al descargar $MODEL_INDEX_FILE."; exit 1; }
# --- 2. Procesar JSON y Descargar Modelos ---
echo "--- 2. Procesando el índice para obtener URLs y códigos de modelos ---"
# CRÍTICO: Nueva lógica de jq:
MODEL_LIST=$(jq -r '.[] | select(.links[0] | endswith(".argosmodel")) | "\(.links[0]) \(.code)"' "$MODEL_INDEX_FILE")
#'
if [ -z "$MODEL_LIST" ]; then
echo "Error: No se encontraron modelos válidos (.argosmodel) en el índice JSON. Comprueba la estructura del archivo."
exit 1
fi
# Descargar cada modelo
echo "--- 3. Descargando modelos de LibreTranslate (.argosmodel) ---"
while read -r MODEL_URL MODEL_CODE_PAIR; do
FILENAME=$(basename "$MODEL_URL")
echo "-> Descargando $FILENAME (Código: $MODEL_CODE_PAIR)..."
wget -c "$MODEL_URL" -O "$DOWNLOAD_DIR/$FILENAME" || { echo "Advertencia: Error al descargar $FILENAME. Continuando..."; }
done <<< "$MODEL_LIST"
# --- 4. Empaquetar Modelos (.deb) por separado (MODIFICADO) ---
echo "--- 4. Creando paquetes .deb para cada modelo descargado ---"
echo "INFO: Los paquetes se guardarán en: ${REPO_PATH}"
# Crear la estructura de directorios del repositorio (si no existe)
mkdir -p "${REPO_PATH}"
# Itera sobre los archivos .argosmodel descargados
for MODEL_FILE in "$DOWNLOAD_DIR"/*.argosmodel; do
if [ ! -f "$MODEL_FILE" ]; then
continue # Si no hay archivos .argosmodel, salta
fi
FILENAME=$(basename "$MODEL_FILE")
# Extraemos el par de idiomas (ej: sq_en) del nombre del archivo: translate-sq_en-1_9.argosmodel
LANG_PAIR=$(echo "$FILENAME" | sed -E 's/translate-([a-z]{2}_[a-z]{2}).*/\1/')
#'
if [ -z "$LANG_PAIR" ]; then
echo "Advertencia: No se pudo extraer el par de idiomas (LANG_PAIR) del archivo $FILENAME. Saltando."
continue
fi
PACKAGE_FULL_NAME="${PACKAGE_NAME_BASE}-model-${LANG_PAIR}"
# Directorio de Staging para este paquete: ./lt_models_staging-es_en/...
LANG_STAGING_DIR="$BUILD_DIR-$LANG_PAIR"
FINAL_DEST_DIR="$LANG_STAGING_DIR/$MODEL_INSTALL_PATH"
rm -rf "$LANG_STAGING_DIR"
mkdir -p "$FINAL_DEST_DIR"
echo "-> Empaquetando modelo: $FILENAME (Paquete: $PACKAGE_FULL_NAME)..."
# Copiar el archivo .argosmodel descargado al directorio de destino final
cp "$MODEL_FILE" "$FINAL_DEST_DIR/"
# --- 4.1 Creación del Paquete .deb ---
MODEL_PRE_INSTALL_SCRIPT="${LANG_PAIR}-pre-install.sh"
echo "echo 'Instalando modelo ($FILENAME) para LibreTranslate...' y creando directorio de destino." > "$MODEL_PRE_INSTALL_SCRIPT"
# El directorio /usr/share/libretranslate/models se crea en el paquete base, pero lo creamos aquí por seguridad.
echo "mkdir -p $MODEL_INSTALL_PATH" >> "$MODEL_PRE_INSTALL_SCRIPT"
chmod +x "$MODEL_PRE_INSTALL_SCRIPT"
# Nombre final del DEB: nombre_version_all.deb
DEB_MODEL_FILENAME="${PACKAGE_FULL_NAME}_${LT_VERSION}_${ARCH}.deb"
# Ya no necesitamos crear y limpiar LOCAL_FPM_TMP_PATH aquí, usamos el global FPM_TEMP exportado.
fpm -s dir -t deb --force \
--before-install "$MODEL_PRE_INSTALL_SCRIPT" \
-n "$PACKAGE_FULL_NAME" \
-v "$LT_VERSION" \
-a "$ARCH" \
--depends "$PACKAGE_NAME_BASE = $LT_VERSION" \
--description "Modelo de idioma ($LANG_PAIR) para LibreTranslate. Archivo: $FILENAME" \
--maintainer "Channel9 Project <ch9@mi.atalaya>" \
-p "${REPO_PATH}/${DEB_MODEL_FILENAME}" \
-C "$LANG_STAGING_DIR" \
usr || { echo "Error al crear el paquete $PACKAGE_FULL_NAME."; }
rm "$MODEL_PRE_INSTALL_SCRIPT" 2>/dev/null
rm -rf "$LANG_STAGING_DIR" # Limpieza del staging de este modelo
done
# --- 5. Limpieza Final...
echo "--- 5. Limpieza Final ---"
rm -rf "$DOWNLOAD_DIR"
rm -f "$MODEL_INDEX_FILE"
rm -rf "$FPM_TMP_BASE" # Limpieza del directorio temporal de FPM
echo "=========================================================="
echo "✅ CREACIÓN DE PAQUETES DE MODELOS FINALIZADA."
echo "Los paquetes se encuentran en: ${REPO_PATH}"
echo "=========================================================="