![Nix 套件管理器](https://rvso.com/image/1518702/Nix%20%E5%A5%97%E4%BB%B6%E7%AE%A1%E7%90%86%E5%99%A8.png)
我試圖在同一台電腦上安裝兩個不同版本的 Xubuntu(16.10 和 14.04.5 LTS),但 Grub 沒有將另一個 Xubuntu 顯示為選單中的選項。主要原因是我需要使用 PHP 5.9 來工作,但個人專案使用 PHP 7。的啟動分區(相同的結果)。可惜的是,這台機器 (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 ,我不會在這裡詳細介紹 nixpkgs是什麼,只需將其視為一組已知的軟體包)。該命令有一個簡寫形式,。channel
channel
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
現在php
5 應該可用,並且在您的路徑上,不需要此處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
安裝php
7:
$ 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 套件管理等...),甚至可能有更好的方法來實現你想要的。