4 votos

Actualizar mksh a la última versión

Las naves Androids con mksh como shell, ¿cómo puedo actualizar a la última versión (ahora R57, la mía sigue en R43)?

Sitio oficial https://www.mirbsd.org/mksh.htm ofrece compilar desde la fuente, ¿alguien que construya listo para ejecutar binarios?

11voto

mirabilos Puntos 165

mksh desarrollador aquí ☺

El problema de la distribución de binarios es que los binarios deben ser construidos contra el mismo bionic libc como lo proporciona su teléfono, que necesita tanto los binarios libc (tal como se envían en su teléfono) como las cabeceras de desarrollo (sólo presentes en el árbol de fuentes de la AOSP de la persona que construyó su imagen).

Si desea utilizar un binario ARM mksh genérico en su lugar, puede utilizar uno compilado estáticamente contra otra libra (como musl (recomendado), dietlibc o klibc ). Sin embargo, estos Diferencia de comportamiento de la enviada por Android:

  • Android tiene un diferente defecto PATH usando algo como /sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin en lugar de /usr/bin:/bin
  • Android ha diferentes directorios para /etc ( /system/etc ), /tmp ( /data/local ), y las ubicaciones de ~/.mkshrc y por defecto EXECSHELL diferir

Por estas razones recomendaría mantener su /system/bin/sh como es y sólo añadir un /system/bin/mksh o incluso /vendor/bin/mksh ejecutable con una versión más reciente si realmente lo necesitas y lo usas de forma explícita en los scripts y/o de forma interactiva.

Si vas a la Debian mksh página del paquete puede descargar el paquete de Debian para su arquitectura ( arm64 para sistemas ARM de 64 bits, armhf para ARMv7 de 32 bits o más reciente; es poco probable que necesites los más antiguos; 32 bits podría funcionar en sistemas de 64 bits pero no al revés), entonces una vez descargado en tu ordenador local, puedes extraer el paquete de la siguiente manera (usaré la versión de 32 bits para este ejemplo):

ar x mksh_57-2_armhf.deb
tar xaf data.tar.*
find usr/lib/ -name \*ksh -ls

El último comando listará todos los posibles binarios estáticamente enlazados contra no GNU-libc; para la versión 57-2, la salida es:

  2633594    184 -rwxr-xr-x   1 user   user     185584 Sep 26 00:52 usr/lib/arm-linux-musleabihf/bin/mksh
  2633596    124 -rwxr-xr-x   1 user   user     126816 Sep 26 00:52 usr/lib/klibc/bin/mksh
  2633595    152 -rwxr-xr-x   1 user   user     152716 Sep 26 00:52 usr/lib/diet/bin/mksh

Así que, puedes elegir cualquiera de estos tres binarios; realmente recomiendo usar el musl -compilado (es decir usr/lib/arm-linux-musleabihf/bin/mksh el camino difiere para arm64 ) ya que es la biblioteca C más correcta y completa.

adb push usr/lib/arm-linux-musleabihf/bin/mksh /sdcard/mksh-new
adb shell
su
mv /sdcard/mksh-new /vendor/bin/mksh
chown 0:0 /vendor/bin/mksh
chmod 555 /vendor/bin/mksh

Ahora, a menos que otro mksh ejecutable está en el PATH antes de /vendor/bin/ corriendo mksh script.sh o simplemente mksh (o mksh -l para un shell de inicio de sesión) iniciará el nuevo binario (pero no leerá /system/etc/mkshrc a menos que lo inicies como env ENV=/system/etc/mkshrc mksh ), pero el proceso de arranque del sistema seguirá usando la versión para la que fue diseñado y probado. (Más reciente mksh las versiones pueden contener correcciones de errores que causan que los scripts que se basan en esos errores o en antiguas interpretaciones del estándar POSIX sh fallen).

Como también soy el desarrollador de Debian que mantiene el paquete mksh allí, puedes considerar esos paquetes como construcciones oficiales de Linux/ARM de las nuevas versiones de mksh (aunque sin las especificaciones de Android).

Si tú realmente necesitan un binario con los detalles de Android, puedo acceder a una caja de adaptación de Debian/ARM y compilar mksh desde la fuente, con las diferentes definiciones (como se indica arriba), manualmente y proporcionarlo para su descarga; contáctame (por eMail o IRC) si lo necesitas, ya que es un esfuerzo manual y me cuesta tiempo extra.

1 votos

Mejor soporte en IRC o por correo ;) Borraré los comentarios aquí para no ser charlatán.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X