![Nix パッケージ マネージャー](https://rvso.com/image/1518702/Nix%20%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%20%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%A3%E3%83%BC.png)
同じマシンに 2 つの異なるバージョンの Xubuntu (16.10 と 14.04.5 LTS) をインストールしようとしていますが、Grub はメニューのオプションとしてもう一方の Xubuntu を表示しません。主な理由は、仕事では PHP 5.9 を使用する必要があるのに、個人的なプロジェクトでは PHP 7 を使用しているためです。問題になるかどうかはわかりませんが、両方のインストールで crypt-luks を使用しており、それぞれに別のブートを作成し、同じブート パーティションを共有してみました (結果は同じ)。残念ながら、このマシン (XPS 15) には PCI SSD を 1 つしか搭載できません。また、セキュア ブートはオフ、UEFI はオンになっています。
私が集めた情報から
私はUbuntuの専門家ではありませんが、典型的なデュアルOS(シングルUbuntu)で数年間使用してきました。私が思うに、os-プローバWindowsのみを検出します(update-grubを実行したとき)
#os-prober
/dev/sda2@/EFI/Microsoft/Boot/bootmgfw.efi:Windows Boot Manager:Windows:efi
その他のソリューション 他のアイデアにも興味があります。できれば仮想ボックスは使いたくありません (以前も使いました)。Docker も別の選択肢ですが、コンテナーからエディター (Netbeans) CLI QA ツールを動作させることはおそらくうまくいきません。他にできることは、USB から 2 番目の OS を実行することですが、これは最後の手段です (ケーブルは不要です)。
答え1
詳細情報がなければ、デュアル (トリプル?) ブートの問題をデバッグするのはかなり困難です。それでも、PHP バージョンを変更するためだけに OS を切り替える必要があるのは、大きなオーバーヘッドになると思われます。
したがって、他のソリューションを検討している場合は、私が最近よく使用しているソリューションを 1 つ紹介します。私は PHP 開発者ではありませんが、これは他の言語と同じように機能するはずです。
Nix パッケージ マネージャー
現在、ある言語/ツールの複数のバージョンをインストールする必要がある場合は、ニックス。
Nix は強力なパッケージ マネージャーです。ここではあまり詳しく説明しません。複数のバージョンのライブラリやツールなどを簡単かつ安全に使用できるということだけ知っておいてください。次のコマンドを実行してインストールできます。
$ curl https://nixos.org/nix/install | sh
一般的にスクリプトをシェルにcurするのは良い考えではありませんが、スクリプトを確認してから手動でダウンロードして起動することができます。https://nixos.org/nix/install。
インストールが完了したら、すぐに開始できる方法が 2 つあります。
バージョン一覧
まず、利用可能なバージョンを確認しましょう。
$ 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
現在利用可能なすべてのバージョンを一覧表示します (注: これは、channel
インストール後に取得するデフォルトの nixpkgs を検索します。ここでは nixpkgs が何であるかについては詳しく説明しませんchannel
。既知のパッケージ セットとして考えてください)。このコマンドには、 という短縮形がありますnix-env -qaP php
。
ご覧のとおり、3 つのバージョンがあります。では、これらをどのように活用すればよいのでしょうか。
一時シェルにインストールする
これは通常、ツールのバージョンを切り替える方法です。Nix には、パッケージ (または複数のパッケージ) をインストールしてシェル内で実行できる組み込みコマンドが付属していますnix-shell
。php5.6 を実行するには、次のようにします。
$ nix-shell --packages php56
これにより、php56 (およびその依存関係) がダウンロードされ、起動したシェル内で利用できるようになります。
[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
元のシェルに戻ります。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
7をインストールするにはphp
:
$ 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 パッケージ管理など) に応じて、目的を達成するためのさらに優れた方法がある可能性が高いからです。