1 votos

¿Cómo puedo forzar a MacPorts a actualizar todos los puertos actualizables que pueda?

Supongamos que tengo los puertos A, B, C, D, E, F y G desactualizados.

  • A no tiene dependencias.
  • B depende directamente de C y D y E.
  • C depende directamente de E y F.
  • D no tiene dependencias.
  • E no tiene dependencias.
  • F no tiene dependencias.
  • G no tiene dependencias.

A mi entender, cuando MacPorts se ejecuta ( sudo port upgrade outdated ), instala los puertos en un árbol de dependencias clasificado por orden alfabético. Así, instalaría los puertos en este orden A, D, E, F, C, B.

Supongamos que el puerto A está roto. MacPorts deja de instalarse.

Lo veo como un inconveniente, porque los otros puertos obsoletos podrían perfectamente funcionar bien. El hecho de que A no se instale no afecta a ninguno de los otros puertos. Ahora, debido a que un solo puerto no se instala, todo el resto de mis puertos están desactualizados hasta que este puerto se arregle.

Mi pregunta:

¿Cómo puedo decirle a MacPorts que continúe instalando todos los puertos instalables que pueda instalar sin error?

Probablemente sea el mismo que este en espíritu : MacPorts: Continuar instalando otras actualizaciones después del error . Sin embargo, no me creo las respuestas de esa página:

  • El dev de MacPorts (@ClemensLang) dice que hay una razón para que MacPorts no continúe. (Los enlaces que incluye apoyan esto, pero se vuelve demasiado técnico para mí. Lo siento). En mi caso anterior, instalar el puerto G después de que el puerto A falle no parece ser problemático. (...o lo es?) ¿Hay alguna manera de hacerlo con seguridad?
  • El -p es evidentemente problemática. Habría pensado que esa sería la respuesta a esta solución, pero varios devs advierten a los usuarios que no la usen a menos que realmente entiendan lo que hace. Prefiero ir a lo seguro.
  • I podría intente sudo port upgrade outdated and not A . Esto funciona si sólo falla un puerto independiente, pero ¿qué pasa si tengo dos o tres puertos (entre docenas) que fallan? ¿Podría hacer algo como, sudo port upgrade outdated and not A and not C and not E (etc.)?

Supongamos que hay demasiados puertos que no se pueden excluir individualmente. Supongamos también que hay demasiados puertos para actualizarlos individualmente.

2voto

Enrico Puntos 11

Esto es lo que yo uso... puede que no sea bonito pero funciona:

sudo bash -c 'for port in `port outdated  2>/dev/null |  tail -n +2 | awk '\''{print $1}'\''` ; do echo -n "$port:" ;  port -N upgrade $port 2>> /tmp/upgrade-ports.err >> /tmp/upgrade-ports.out && echo "" || echo "" ; done'

Permítame que se lo explique:

  • En primer lugar, no quieres sudo en un bucle, de lo contrario tienes que seguir poniendo tu contraseña. Para evitar sudo cogí todo el bucle y lo entrecomillé (Alt+' en zsh es muy útil para escapar correctamente las comillas existentes) y luego lo ejecuté con sudo bash -c . También puede ponerlo en un archivo y ejecutarlo como un script con sudo script

  • que nos deja este bucle:

    for port in port outdated 2>/dev/null | tail -n +2 | awk '{print $1}' ; do echo -n "$port:" ; port -N upgrade $port 2>> /tmp/upgrade-ports.err >> /tmp/upgrade-ports.out && echo "" || echo "" ; done```

  • Construyo la lista de puertos con: port outdated 2>/dev/null | tail -n +2 | awk '{print $1}' (tail elimina la línea "Los siguientes puertos instalados son obsoletos:")

  • para cada puerto imprimo el nombre del puerto y un punto y coma (sin nueva línea )

  • entonces intento actualizarlo de forma no interactiva, y guardo la salida y los errores

  • si la actualización fue exitosa imprimo un "" y una nueva línea, de lo contrario un "" y una nueva línea

  • Tenga en cuenta que esto no mostrará las dependencias que se están instalando, pero puede seguir el registro para ver lo que está sucediendo*.

  • este es el aspecto de la salida:

    adwaita-icon-theme: apr: aquaterm:

HTH

*Editado para aclarar. Esto significa que en su ejemplo la salida se vería así:

A:
B:
C:
D:
E:
F:
G:

Pero B tardará mucho, y C, D, E y F serán muy rápidas porque ya se han actualizado durante B.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple 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