Менеджер пакетов Nix

Менеджер пакетов Nix

Я пытаюсь установить две разные версии Xubuntu (16.10 и 14.04.5 LTS) на одну и ту же машину, но Grub не отображает другую Xubuntu в качестве опции в меню. Основная причина этого в том, что мне нужно использовать PHP 5.9 для работы, но для личных проектов я использую PHP 7. Я не уверен, имеет ли это значение, но обе установки используют crypt-luks, и я пробовал создать отдельную загрузку для каждой, а также использовать для них один и тот же загрузочный раздел (тот же результат). К сожалению, на этой машине (XPS 15) есть место только для одного PCI SSD. У меня также отключена безопасная загрузка и включен UEFI.

Насколько я могу судить

Я не эксперт по Ubuntu, но я использовал его в течение нескольких лет в типичной Dual OS (один Ubuntu). Я думаю, что происходит следующее:os-исследовательобнаруживает только Windows (когда я запускаю update-grub)

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

Другие решения Мне также интересны любые другие идеи. Я действительно не хочу использовать virtual box, если я могу помочь (уже был). Docker — еще один вариант, но заставить редактор (Netbeans) CLI QA tools работать из контейнера, вероятно, не получится. Еще одно, что я мог бы сделать, это запустить вторую ОС с USB, но это будет крайним средством (я бы предпочел обойтись без кабелей).

решение1

Было бы довольно сложно отладить вашу проблему с двойной (тройной?) загрузкой без дополнительной информации. Тем не менее, кажется, что было бы большой накладной расход при необходимости менять ОС только для смены версий php.

Итак, поскольку вы открыты для других решений, я могу дать вам одно, которое я использую довольно часто в эти дни. Обратите внимание, что я не разработчик PHP, но это должно работать так же, как и другие языки.

Менеджер пакетов Nix

В настоящее время, когда мне нужно установить несколько версий какого-либо языка/инструмента, я используюnix.

Nix — мощный менеджер пакетов. Я не буду вдаваться в подробности, просто знайте, что он позволяет вам легко и безопасно использовать несколько версий библиотек/инструментов и т. д. Вы можете установить его, выполнив:

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

Обычно загрузка скрипта в оболочку не является хорошей идеей. Вы можете просмотреть скрипт, а затем вручную загрузить и запустить его, перейдя по ссылке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, которые вы получаете после установки, я не буду вдаваться в подробности о том, что такое 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

Теперь 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 и т. д.) наверняка найдутся и лучшие способы добиться желаемого.

Связанный контент