O gerenciador de pacotes Nix

O gerenciador de pacotes Nix

Estou tentando instalar duas versões diferentes do Xubuntu (16.10 e 14.04.5 LTS) na mesma máquina, mas o Grub não está mostrando o outro Xubuntu como opção no menu. A principal razão para isso é que preciso usar o PHP 5.9 para o trabalho, mas em projetos pessoais eu uso o PHP 7. Não tenho certeza se isso importa, mas ambas as instalações estão usando crypt-luks e tentei criar uma inicialização separada para cada uma também como eles compartilham a mesma partição de inicialização (mesmo resultado). Infelizmente, esta máquina (XPS 15) só tem espaço para um SSD PCI. Eu também tenho inicialização segura e UEFI ativado.

Pelo que posso reunir

Não sou especialista em Ubuntu, mas uso-o há alguns anos no Dual OS típico (Ubuntu único). O que eu acho que está acontecendo é queos-proberestá detectando apenas o Windows (quando executo o update-grub)

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

Outras soluções Também estou interessado em outras ideias. Eu realmente não quero usar a caixa virtual se puder evitar (já estive lá antes). Docker é outra opção, mas fazer com que as ferramentas de controle de qualidade CLI do editor (Netbeans) funcionem a partir do contêiner provavelmente não funcionará. A outra coisa que eu poderia fazer é ter um segundo sistema operacional rodando em um USB, mas isso seria o último recurso (eu preferiria sem cabos).

Responder1

Seria muito difícil depurar seu problema de inicialização dupla (tripla?) Sem mais informações. Mesmo assim, parece que seria uma grande sobrecarga ter que trocar de sistema operacional apenas para alterar as versões do php.

Então, como você está aberto a outras soluções posso lhe dar uma que utilizo bastante atualmente. Observe que não sou um desenvolvedor php, mas isso deve funcionar da mesma forma que outras linguagens.

O gerenciador de pacotes Nix

Atualmente, quando preciso ter várias versões de alguma linguagem/ferramenta instaladas, eu usonada.

Nix é um poderoso gerenciador de pacotes, não vou me aprofundar muito aqui, apenas saiba que ele permite que você use de forma fácil e segura múltiplas versões de bibliotecas/ferramentas etc... Você pode instalá-lo executando:

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

Geralmente, enrolar um script no shell não é uma boa ideia, você pode revisar o script e, em seguida, baixá-lo e iniciá-lo manualmente acessandohttps://nixos.org/nix/install.

Depois de instalado, existem duas maneiras rápidas de começar.

Listar versões

Primeiro, vamos ver quais versões estão disponíveis:

$ 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 lista todas as phpversões atualmente disponíveis (nota: isso pesquisa o nixpkgs padrão channelque você obtém após a instalação, não entrarei em detalhes aqui sobre o que channelé um nixpkgs, apenas pense nele como um conjunto conhecido de pacotes). Existe uma abreviatura para este comando, nix-env -qaP php.

Como você pode ver, existem 3 versões. Agora, como podemos fazer uso deles?

Instalar em um shell temporário

Geralmente é assim que alterno entre versões de ferramentas. Nix vem com um comando integrado chamado nix-shellque permite instalar um pacote (ou pacotes) e executá-lo apenas dentro de um shell. Para executar o php5.6:

$ nix-shell --packages php56

Isso fará o download do php56 (e de suas dependências) e estará disponível no shell que acabou de ser lançado:

[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

Se você executar, exitvocê será retirado do nix-shellshell original e de volta ao seu shell original, execute php-o e verá que ele não existe mais (tecnicamente, ele ainda existe na loja nix do seu sistema, mas isso não é algo com que você precise se preocupar. apenas para isso), a menos, é claro, que você já o tenha instalado no sistema.

Agora, você pode fazer o mesmo para o php7:

$ nix-shell --packages php

Acho que esta é a maneira mais flexível de alternar entre versões.

Instale na loja de usuários Nix

Outra forma é instalar na loja do usuário usando o nix-envcomando.

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

Agora php5 devem estar disponíveis e, no seu caminho, não há necessidade de nix-shellaqui:

$ 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 você pode ver, ele remove automaticamente a versão anterior. Para remover manualmente, execute nix-env -e php. Finalmente, você pode listar os pacotes instalados no armazenamento do usuário executando nix-env -qa.

Isso mal toca a superfície do que o nix pode fazer, se isso for de alguma forma útil, sugiro mergulhar um pouco mais nisso, pois, dependendo de suas necessidades (outras ferramentas, gerenciamento de pacotes php etc...), provavelmente há até melhores maneiras de conseguir o que deseja.

informação relacionada