![El administrador de paquetes Nix](https://rvso.com/image/1518702/El%20administrador%20de%20paquetes%20Nix.png)
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 php
versiones disponibles actualmente (nota: busca los nixpkgs predeterminados channel
que obtienes después de la instalación, no entraré en detalles aquí sobre qué channel
es 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-shell
que 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, exit
saldrá de nix-shell
y volverá a su shell original, ejecútelo php
allí 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-env
comando.
$ nix-env --install --attr nixpkgs.php56
Ahora php
5 deberían estar disponibles, y en su camino, no es necesario un nix-shell
aquí:
$ 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 php
7:
$ 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.