Nix 패키지 관리자

Nix 패키지 관리자

동일한 시스템에 두 가지 다른 버전의 Xubuntu(16.10 및 14.04.5 LTS)를 설치하려고 하는데 Grub이 다른 Xubuntu를 메뉴 옵션으로 표시하지 않습니다. 주된 이유는 업무용으로 PHP 5.9를 사용해야 하는데 개인 프로젝트에서는 PHP 7을 사용하기 때문입니다. 문제가 될지는 모르겠지만 두 설치 모두 crypt-luks를 사용하고 있으며 각각에 대해 별도의 부팅을 생성해 보았습니다. 동일한 부팅 파티션을 공유하기 때문입니다(동일한 결과). 안타깝게도 이 시스템(XPS 15)에는 PCI SSD를 하나만 설치할 수 있는 공간이 있습니다. 또한 보안 부팅이 꺼져 있고 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를 사용하여 두 번째 OS를 실행하는 것이지만 이는 최후의 수단이 될 것입니다(케이블이 없는 것을 선호합니다).

답변1

추가 정보 없이 이중(삼중?) 부팅 문제를 디버깅하는 것은 매우 어려울 수 있습니다. 그렇다고 해도 단지 PHP 버전을 바꾸기 위해 OS를 바꿔야 하는 것은 큰 오버헤드가 될 것 같습니다.

따라서 귀하는 다른 솔루션에 대해 열려 있으므로 요즘 제가 자주 사용하는 솔루션을 알려드릴 수 있습니다. 저는 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를 검색합니다 . 여기서는 nixpkgs가 무엇 인지 자세히 설명하지 않고 알려진 패키지 세트라고 생각하면 됩니다). 이 명령에는 약어 가 있습니다 .channelchannelnix-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

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 패키지 관리 등...) 원하는 것을 달성하는 더 나은 방법.

관련 정보