![Der Nix-Paketmanager](https://rvso.com/image/1518702/Der%20Nix-Paketmanager.png)
Ich versuche, zwei verschiedene Versionen von Xubuntu (16.10 und 14.04.5 LTS) auf derselben Maschine zu installieren, aber Grub zeigt das andere Xubuntu nicht als Option im Menü an. Der Hauptgrund dafür ist, dass ich für die Arbeit PHP 5.9 verwenden muss, für private Projekte jedoch PHP 7. Ich bin mir nicht sicher, ob es wichtig ist, aber beide Installationen verwenden Crypt-Luks und ich habe versucht, für jede einen separaten Boot zu erstellen und sie dieselbe Bootpartition gemeinsam nutzen zu lassen (dasselbe Ergebnis). Leider hat diese Maschine (XPS 15) nur Platz für eine PCI-SSD. Ich habe außerdem Secure Boot deaktiviert und UEFI aktiviert.
Soweit ich das beurteilen kann
Ich bin kein Ubuntu-Experte, aber ich benutze es seit ein paar Jahren in einem typischen Dual-OS (Einzel-Ubuntu). Ich denke, dass Folgendes passiert:OS-Probenehmererkennt nur Windows (wenn ich update-grub ausführe)
#os-prober
/dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi
Andere Lösungen Ich bin auch an anderen Ideen interessiert. Ich möchte nicht wirklich Virtual Box verwenden, wenn es sich vermeiden lässt (das habe ich schon mal gemacht). Docker ist eine weitere Option, aber die CLI-QA-Tools des Editors (Netbeans) aus dem Container zum Laufen zu bringen, wird wahrscheinlich nicht funktionieren. Ich könnte auch ein zweites Betriebssystem über USB laufen lassen, aber das wäre der letzte Ausweg (ich würde keine Kabel bevorzugen).
Antwort1
Es wäre ziemlich schwierig, Ihr Dual- (Triple-?) Boot-Problem ohne weitere Informationen zu debuggen. Trotzdem scheint es ein großer Aufwand zu sein, das Betriebssystem wechseln zu müssen, nur um die PHP-Versionen zu ändern.
Da Sie also für andere Lösungen offen sind, kann ich Ihnen eine Lösung nennen, die ich in letzter Zeit recht häufig verwende. Beachten Sie, dass ich kein PHP-Entwickler bin, aber dies sollte genauso funktionieren wie andere Sprachen.
Der Nix-Paketmanager
Wenn ich derzeit mehrere Versionen einer Sprache/eines Tools installiert haben muss, verwende ichnix.
Nix ist ein leistungsstarker Paketmanager. Ich werde hier nicht zu sehr ins Detail gehen. Sie sollten nur wissen, dass Sie damit einfach und sicher mehrere Versionen von Bibliotheken/Tools usw. verwenden können. Sie können ihn durch Ausführen von folgendem installieren:
$ curl https://nixos.org/nix/install | sh
Im Allgemeinen ist das Curling eines Skripts in die Shell keine gute Idee. Sie können das Skript überprüfen und es dann manuell herunterladen und starten, indem Sie zuhttps://nixos.org/nix/install.
Nach der Installation können Sie auf zwei Arten schnell loslegen.
Versionen auflisten
Sehen wir uns zunächst an, welche Versionen verfügbar sind:
$ 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
Dieser Befehl listet alle php
derzeit verfügbaren Versionen auf (Hinweis: Dies durchsucht die Standard-Nixpkgs channel
, die Sie nach der Installation erhalten. Ich werde hier nicht näher darauf eingehen, was Nixpkgs channel
sind. Betrachten Sie es einfach als einen bekannten Satz von Paketen). Für diesen Befehl gibt es eine Kurzform: nix-env -qaP php
.
Wie Sie sehen, gibt es drei Versionen. Wie nutzen wir sie nun?
In einer temporären Shell installieren
So wechsle ich normalerweise zwischen den Versionen der Tools. Nix verfügt über einen integrierten Befehl namens , nix-shell
mit dem Sie ein Paket (oder mehrere Pakete) installieren und es einfach in einer Shell ausführen können. So führen Sie php5.6 aus:
$ nix-shell --packages php56
Dadurch wird php56 (und seine Abhängigkeiten) heruntergeladen und ist in der gerade gestarteten Shell verfügbar:
[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
Wenn Sie es ausführen, exit
werden Sie aus der Shell herausgeführt nix-shell
und zu Ihrer ursprünglichen Shell zurückgeführt. Führen Sie php
es dort aus und Sie werden sehen, dass es nicht mehr existiert (technisch gesehen existiert es noch im Nix-Store auf Ihrem System, aber das ist nichts, worüber Sie sich nur aus diesem Grund Gedanken machen müssen), es sei denn, Sie hatten es natürlich bereits im System installiert.
Jetzt können Sie dasselbe für PHP7 tun:
$ nix-shell --packages php
Meiner Ansicht nach ist dies die flexibelste Möglichkeit, zwischen Versionen zu springen.
Im Nix User Store installieren
Eine andere Möglichkeit ist die Installation im Benutzerspeicher mithilfe des nix-env
Befehls.
$ nix-env --install --attr nixpkgs.php56
Jetzt php
sollte 5 verfügbar sein, und auf Ihrem Pfad ist kein Hier erforderlich 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
So installieren Sie php
7:
$ nix-env --install --attr nixpkgs.php
replacing old ‘php-5.6.29’
installing ‘php-7.0.14’
...
Wie Sie sehen, wird die vorherige Version automatisch entfernt. Um sie manuell zu entfernen, führen Sie aus nix-env -e php
. Schließlich können Sie die im Benutzerspeicher installierten Pakete auflisten, indem Sie ausführen nix-env -qa
.
Dies ist nur die oberflächliche Darstellung dessen, was Nix leisten kann. Wenn dies irgendwie hilfreich ist, würde ich vorschlagen, sich etwas tiefer damit zu befassen, da es je nach Ihren Anforderungen (andere Tools, PHP-Paketverwaltung usw.) wahrscheinlich sogar noch bessere Möglichkeiten gibt, das Gewünschte zu erreichen.