Determine los indicadores que se dieron para los paquetes instalados con homebrew


17

¿Hay alguna manera de verificar qué indicadores se dieron cuando se instaló un paquete con homebrew?

Por ejemplo, la fórmula de emacs tiene un número absurdo de banderas. Si lo hice

brew install emacs --with-glib --with-librsvg

Me gustaría determinar más tarde que para la instalación de emacs homebrew le di las banderas --with-glib --with-librsvgy no otras banderas.

Caso de prueba con paquete lua:

Antes de instalar el paquete, la información muestra todas las opciones.

$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
Not installed
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
    Build a universal binary
--with-completion
    Enables advanced readline support
--without-sigaction
    Revert to ANSI signal instead of improved POSIX sigaction

Instalo el paquete solo con la --with-completionbandera.

$ brew install lua --with-completion
==> Downloading http://www.lua.org/ftp/lua-5.2.3.tar.gz
######################################################################## 100.0%
==> Downloading http://luajit.org/patches/lua-5.2.0-advanced_readline.patch
######################################################################## 100.0%
==> Downloading http://lua-users.org/files/wiki_insecure/power_patches/5.2/lua-5
######################################################################## 100.0%
==> Patching
patching file Makefile
patching file src/Makefile
patching file src/lua.c
Hunk #1 succeeded at 231 (offset -5 lines).
Hunk #2 succeeded at 559 (offset -4 lines).
Hunk #3 succeeded at 575 (offset -4 lines).
patching file src/lua.c
==> make macosx INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/local
==> make install INSTALL_TOP=/usr/local/Cellar/lua/5.2.3_1 INSTALL_MAN=/usr/loca
🍺  /usr/local/Cellar/lua/5.2.3_1: 13 files, 312K, built in 6 seconds

Después de instalar el paquete, la información muestra todas las opciones, incluidas las que no usé. El comando reconoce que el paquete se creó desde la fuente y no se vertió de una botella.

$ brew info lua
lua: stable 5.2.3 (bottled)
http://www.lua.org/
/usr/local/Cellar/lua/5.2.3_1 (13 files, 312K) *
  Built from source with: --with-completion
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/lua.rb
==> Options
--universal
    Build a universal binary
--with-completion
    Enables advanced readline support
--without-sigaction
    Revert to ANSI signal instead of improved POSIX sigaction

Respuestas:


15

Cuando se crea un paquete desde el origen, los indicadores que se usaron para compilar se muestran cuando lo hace brew info <package>.

En este caso: brew info emacs | grep "Built from source"


La salida de información de preparación siempre enumera todas las opciones disponibles para la fórmula, no las opciones utilizadas si se instaló el paquete.
Praxeolítico

1
Eso no es cierto. La información especifica si el paquete se instaló desde una botella o se creó desde la fuente, y si se creó desde la fuente, muestra los indicadores que se utilizaron.
André

OP editado con un ejemplo en el que, por lo que puedo decir, la información no especifica los indicadores utilizados para un paquete construido desde la fuente.
Praxeolítico

2
Oh, vaya, lo veo y tu comando grep tiene sentido ahora.
Praxeolitic

6

Hay un archivo /usr/local/Cellardebajo de cada paquete que se llama INSTALL_RECEIPT.json, por ejemplo, para gawk:

/usr/local/Cellar/gawk/4.1.3/INSTALL_RECEIPT.json

eso define cómo se instaló el paquete. Creo que la forma correcta de acceder es con

brew info --json=v1 <packagename>

p.ej

brew info --json=v1 gnuplot

Eso arroja un montón de cosas, pero si lo envía a través de jq(Procesador JSON, disponible a través de homebrew) puede seleccionar las opciones que utilizó para instalar el paquete de esta manera (verificando el gnuplotpaquete):

brew info --json=v1 gnuplot | jq '.[].installed[0].used_options'
[
    "--with-qt"
]

que me dice que instalé gnuplotusando:

brew install --with-qt gnuplot 

Esta debería ser la respuesta.
Jacob Degeling

for package in $(brew list); do echo -n "brew install $package "; for item in $(brew info --json=v1 $package | jq -r '.[0].installed[0].used_options | .[]'); do echo -n "$item "; done; echo ; done 2>/dev/null se puede usar para generar una lista de comandos brew install que puede usar en otro lugar.
Sankalp

4

Otra herramienta útil es homebrew-bundler. Una vez instalado a través de brew tap Homebrew/bundle, puede ejecutar brew bundle dumpy creará un archivo Brewfile que enumera todos los paquetes que ha instalado junto con cualquier argumento adicional utilizado para instalarlos.


Esta es de hecho una buena opción. Y, para editar Brewfiley verificarlo en su repositorio de archivos de puntos, es fácil "configurar" nuevas máquinas. Sin embargo, enumera todos los paquetes, incluidas todas las dependencias. Actualmente tengo que analizar la lista de una brew leaveslista que enumera solo los paquetes instalados de nivel superior.
eduncan911

3

Aquí hay una pequeña función bash que devuelve las banderas independientemente de si el paquete fue construido desde la fuente o no.

function brew_options()
{
    [ "$#" -ne 1 ] && >&2 echo -e "$FUNCNAME requires only 1 option, the package name" && return 1

    local item=$1
    local opts

    ## Check if package installed
    [ -n "$(brew ls --versions $item)" ] || ( >&2 echo -e "$item is not installed" && return 1 )

    set -o pipefail

    ## Get options if built from source
    if ! opts="$(brew info $item | grep 'Built from source with:' | sed 's/^[ \t]*Built from source with:/ /g; s/\,/ /g')" ; then
        # If not built from source, get options from brew metadata
        opts="$(brew info --json=v1 $item | jq -ec '.[].installed[0].used_options' | awk '{print substr($0, 2, length($0) - 2)}' | sed 's/,/ /g;s/"//g')"
    fi

    ## If we're able to get options and its just not spaces echo it 
    if [ "$?" -eq 0 ] && [[ ! -z "${opts// }" ]]; then
        echo "$opts"
    fi

    set +o pipefail

}

Para usar esta función bash dentro de un script bash, escriba

 brew_options PKGNAME

donde PKGNAMEestá el nombre del paquete homebrew deseado. También puede iterar a través de todos los paquetes homebrew instalados dentro de un script bash como

 # Command to generate install script
 PKGS=$(brew list)

 # iterate through all packges
 for PKG in $PKGS; do

   echo $PKG `brew_options $PKG`

 done

.


nota de dependencia: jqprocesador JSON de línea de comandos
l --marc l
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.