El administrador de paquetes Nix

El administrador de paquetes Nix

Estoy intentando instalar dos versiones diferentes de Xubuntu (16.10 y 14.04.5 LTS) en la misma máquina, pero Grub no muestra el otro Xubuntu como una opción en el menú. La razón principal de esto es que necesito usar PHP 5.9 para el trabajo, pero en proyectos personales uso PHP 7. No estoy seguro de si importa, pero ambas instalaciones usan crypt-luks y también intenté crear un arranque separado para cada una. ya que comparten la misma partición de arranque (mismo resultado). Lamentablemente, esta máquina (XPS 15) sólo tiene espacio para un SSD PCI. También tengo el arranque seguro desactivado y UEFI activado.

De lo que puedo reunir

No soy un experto en Ubuntu, pero lo he estado usando durante un par de años en el sistema operativo dual típico (Ubuntu único). Lo que creo que está pasando es queos-probersolo detecta Windows (cuando ejecuto update-grub)

#os-prober 
/dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi

Otras soluciones También estoy interesado en otras ideas. Realmente no quiero usar la caja virtual si puedo evitarlo (he estado allí antes). Docker es otra opción, pero hacer que las herramientas de control de calidad de la CLI del editor (Netbeans) funcionen desde el contenedor probablemente no funcione. La otra cosa que podría hacer es tener un segundo sistema operativo ejecutándose desde un USB, pero eso sería el último recurso (preferiría sin cables).

Respuesta1

Sería bastante difícil solucionar el problema de arranque dual (¿triple?) sin más información. Aun así, parece que sería una gran sobrecarga tener que cambiar de sistema operativo solo para cambiar las versiones de PHP.

Entonces, como está abierto a otras soluciones, puedo brindarle una que utilizo bastante estos días. Tenga en cuenta que no soy un desarrollador de PHP, pero esto debería funcionar igual que otros lenguajes.

El administrador de paquetes Nix

Actualmente, cuando necesito tener varias versiones de algún idioma/herramienta instaladas, usonada.

Nix es un poderoso administrador de paquetes, no profundizaré mucho aquí, solo sepa que le permite usar de manera fácil y segura múltiples versiones de bibliotecas/herramientas, etc. Puede instalarlo ejecutando:

$ curl https://nixos.org/nix/install | sh

En general, convertir un script en el shell no es una buena idea; puede revisar el script y luego descargarlo e iniciarlo manualmente yendo ahttps://nixos.org/nix/install.

Una vez instalado, hay dos formas rápidas de comenzar.

Versiones de lista

Primero, veamos qué versiones están disponibles:

$ nix-env --query --available --attr-path php
nixpkgs.php56  php-5.6.29
nixpkgs.php    php-7-0.14
nixpkgs.php71  php-7.1.0

Este comando enumera todas las phpversiones disponibles actualmente (nota: busca los nixpkgs predeterminados channelque obtienes después de la instalación, no entraré en detalles aquí sobre qué channeles un nixpkgs, solo piensa en él como un conjunto conocido de paquetes). Hay una abreviatura para este comando nix-env -qaP php.

Como puedes ver, hay 3 versiones. Ahora bien, ¿cómo hacemos uso de ellos?

Instalar en un shell temporal

Generalmente así es como cambio entre versiones de herramientas. Nix viene con un comando integrado llamado nix-shellque le permite instalar un paquete (o paquetes) y ejecutarlo dentro de un shell. Para ejecutar php5.6:

$ nix-shell --packages php56

Eso descargará php56 (y sus dependencias), y estará disponible dentro del shell que acaba de iniciar:

[nix-shell:~]$ php --version
PHP 5.6.29 (cli) (built: Dec  8 2016 06:32:02) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

Si ejecuta, exitsaldrá de nix-shelly volverá a su shell original, ejecútelo phpallí y verá que ya no existe (técnicamente, todavía existe en la tienda nix de su sistema, pero eso no es algo de lo que deba preocuparse). sólo para esto), a menos, por supuesto, que ya lo tuvieras instalado en el sistema.

Ahora puedes hacer lo mismo con php7:

$ nix-shell --packages php

Considero que esta es la forma más flexible de saltar entre versiones.

Instalar en la tienda de usuarios de Nix

Otra forma es instalar en la tienda de usuarios usando el nix-envcomando.

$ nix-env --install --attr nixpkgs.php56

Ahora php5 deberían estar disponibles, y en su camino, no es necesario un nix-shellaquí:

$ php --version
PHP 5.6.29 (cli) (built: Dec  8 2016 06:32:02) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

Para instalar php7:

$ nix-env --install --attr nixpkgs.php
replacing old ‘php-5.6.29’
installing ‘php-7.0.14’
...

Como puedes ver, elimina automáticamente la versión anterior. Para eliminarlo ejecute manualmente nix-env -e php. Finalmente, puede enumerar los paquetes instalados en el almacén de usuarios ejecutando nix-env -qa.

Esto apenas toca la superficie de lo que nix puede hacer, si esto es de alguna manera útil, sugeriría profundizar un poco más en ello, ya que, dependiendo de sus necesidades (otras herramientas, administración de paquetes php, etc.), es probable que incluso haya mejores maneras de lograr lo que deseas.

información relacionada