Nix 包管理器

Nix 包管理器

我试图在同一台机器上安装两个不同版本的 Xubuntu(16.10 和 14.04.5 LTS),但 Grub 没有在菜单中显示另一个 Xubuntu 作为选项。主要原因是我需要在工作中使用 PHP 5.9,但在个人项目中我使用 PHP 7。我不确定这是否重要,但两个安装都使用 crypt-luks,我尝试为每个安装创建一个单独的启动,并让它们共享相同的启动分区(结果相同)。遗憾的是,这台机器(XPS 15)只有一个 PCI SSD 的空间。我还关闭了安全启动并打开了 UEFI。

据我所知

我不是 Ubuntu 专家,但我在典型的双操作系统(单 Ubuntu)中使用它已有几年了。我认为发生的事情是操作系统探测器仅检测 Windows(当我运行 update-grub 时)

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

其他解决方案 我也对其他想法感兴趣。如果可以的话,我真的不想使用虚拟盒(以前用过)。Docker 是另一种选择,但让编辑器(Netbeans)CLI QA 工具从容器中运行可能行不通。我可以做的另一件事是让第二个操作系统通过 USB 运行,但那是最后的手段(我更喜欢没有电缆)。

答案1

如果没有更多信息,调试双启动(三启动?)问题会非常困难。即便如此,仅仅为了更改 php 版本而切换操作系统似乎会是一笔很大的开销。

因此,既然您愿意接受其他解决方案,我可以为您提供一个我最近经常使用的解决方案。请注意,我不是 php 开发人员,但这应该与其他语言一样有效。

Nix 包管理器

目前,当我需要安装某种语言/工具的多个版本时,我会使用尼克斯

Nix 是一个功能强大的包管理器,在这里我不会深入介绍,只需要知道它允许您轻松安全地使用多个版本的库/工具等...您可以通过运行来安装它:

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

一般来说,将脚本卷入到 shell 不是一个好主意,您可以查看脚本,然后通过以下方式手动下载并启动它:https://nixos.org/nix/install

安装后,有两种快速开始方式。

列出版本

首先,让我们看看有哪些可用的版本:

$ 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

此命令列出了当前可用的所有php版本(注意:这将搜索安装后获得的默认 nixpkgs channel,我不会在这里详细介绍 nixpkgschannel是什么,只需将其视为一组已知的软件包)。此命令有一个简写形式,nix-env -qaP php

如你所见,共有 3 个版本。现在我们如何使用它们呢?

在临时 Shell 中安装

这通常是我在工具版本之间切换的方式。Nix 附带一个内置命令,nix-shell它允许您安装一个包(或多个包)并在 shell 中运行它。要运行 php5.6:

$ nix-shell --packages php56

这将下载 php56 (和它的依赖项),并且它将在刚刚启动的 shell 中可用:

[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

如果你运行,exit你将被带出nix-shell并返回到你的原始shell,php在那里运行,你会看到它不再存在(技术上它仍然存在于系统上的nix存储中,但这不是你需要担心的事情),除非你已经在系统中安装了它。

现在,您可以对 php7 执行相同的操作:

$ nix-shell --packages php

我发现这是在版本之间跳转的最灵活的方式。

在Nix用户商店中安装

另一种方法是使用命令在用户存储中安装nix-env

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

现在php5 应该可用,并且在您的路径上,不需要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

要安装php7:

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

如您所见,它会自动删除以前的版本。要手动删除,请运行nix-env -e php。最后,您可以通过运行列出用户存储中安装的软件包nix-env -qa

这仅仅触及了 nix 功能的表面,如果这有任何帮助,我建议深入研究它,因为根据您的需求(其他工具、php 包管理等...),可能会有更好的方法来实现您想要的。

相关内容