CentOS 8 하나의 패키지 여러 버전을 관리하는 dnf module(모듈) 명령어 사용법
RHEL/CentOS 8 의 패키지 관리자인 dnf 는 OS 를 구성하기 위한 필수적인 패키지를 제공하는 BaseOS 저장소외에 나머지 패키지들은 AppStream 이라고 부르는 개별 저장소들로 나뉘어져 있습니다.
AppStream 은 module 과 패키지를 제공하는데 module 은 해당 패키지와 패키지가 의존하는 전체 패키지 묶음을 의미합니다. 즉 PHP 모듈은 PHP 패키지와 PHP 패키지가 의존하는 다른 패키지(예: PHP MySQL 드라이버, GD 드라이버등)를 의미합니다.
하나의 모듈은 여러 개의 Stream 을 가질수 있으며 예로 NodeJS 는 10, 12, 14 Stream 을 가질 수 있습니다.
이로 인해 dnf 는 기존과는 달리 하나의 패키지의 여러 버전을 설치할 수 있습니다.
즉 사용자는 rvm(Ruby Version Manager) 이나 nvm(Node Version Manager) 같은 언어별 패키지 매니저가 없어도 Ruby 2.6, 2.7, 3.0 을 동시에 설치할 수 있으며 PHP 나 Python, NodeJS 도 여러 버전을 동시에 설치할 수 있습니다.
모듈 정보 보기
목록 보기
dnf 의 module 명령어 뒤에 list 옵션을 주면 등록된 전체 모듈의 목록을 볼 수 있습니다.
$ dnf module list Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs) Name Stream Profiles Summary nginx 1.14 [d][e] common [d] nginx webserver nginx 1.16 common [d] nginx webserver nginx 1.18 common [d] nginx webserver nodejs 10 [d][e] common [d], development, minimal, s2i Javascript runtime nodejs 12 common [d], development, minimal, s2i Javascript runtime nodejs 14 common [d], development, minimal, s2i Javascript runtime ruby 2.5 [d] common [d] An interpreter of object-oriented scripting language ruby 2.6 common [d] An interpreter of object-oriented scripting language ruby 2.7 common [d] An interpreter of object-oriented scripting language
하나의 패키지에 여러 버전이 표시되는 것을 확인할 수 있으며 버전은 Stream 항목에 나타납니다.
만약 특정 패키지의 모듈을 보려면 list 옵션뒤에 패키지 명을 입력하면 되며 다음은 nodejs 의 모듈 목록만 표시합니다.
$ dnf module list nodejs Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs) Name Stream Profiles Summary nodejs 10 [d][e] common [d], development, minimal, s2i Javascript runtime nodejs 12 common [d], development, minimal, s2i Javascript runtime nodejs 14 common [d], development, minimal, s2i Javascript runtime Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
하단의 Hint 부분을 보면 d 는 default, e 는 enabled, x 는 disabled, i 는 installed 의 약자인 것을 알수 있습니다.
즉 위의 nodejs 모듈은 10 버전이 default 이고 활성화되어 있습니다.
상세 정보 보기
module info 명령으로 모듈의 상세 정보를 볼 수 있습니다. 상세 정보에는 Architecture, 저장소, 의존성, 프로파일등이 포함되며 다음은 nodejs 모듈의 상세 정보를 표시합니다.
$ dnf module info nodejs Last metadata expiration check: 0:32:46 ago on Sun 20 Dec 2020 06:55:55 PM KST. Name : nodejs Stream : 10 Version : 3320200819201945 Context : 601d93de Architecture : x86_64 Profiles : default [d], development, minimal Default profiles : default Repo : fedora-modular Summary : Javascript runtime Description : Node.js is a platform built on Chrome''s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. Requires : platform:[f33] Artifacts : http-parser-0:2.9.4-3.module_f33+9545+0a04377d.src : http-parser-0:2.9.4-3.module_f33+9545+0a04377d.x86_64 : http-parser-debuginfo-0:2.9.4-3.module_f33+9545+0a04377d.x86_64 : http-parser-debugsource-0:2.9.4-3.module_f33+9545+0a04377d.x86_64
여러 스트림에서 정보를 보여주므로 원하는 버전 스트림만 표시할 경우 모듈명 뒤에 버전 스트림을 명시하면 됩니다. 다음은 nodejs 의 12 버전 스트림의 상세 정보만 출력합니다.
$ dnf module info nodejs:12 Last metadata expiration check: 0:35:03 ago on Sun 20 Dec 2020 06:55:55 PM KST. Name : nodejs Stream : 12 Version : 3320200916130557 Context : 601d93de Architecture : x86_64 Profiles : default [d], development, minimal Default profiles : default Repo : fedora-modular Summary : Javascript runtime Description : Node.js is a platform built on Chrome''s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
표시 항목에 Profiles 가 있는데 모듈 설치시에 프로파일을 지정할 수 있습니다.
모듈 활성화
특정 Stream 의 module 을 활성화하려면 다음과 같이 enable 뒤에 모듈명과 스트림을 적어주면 됩니다.
dnf module enable NAME:STREAM
다음 명령은 nodejs 모듈의 Stream 12 버전을 활성화합니다.
$ sudo dnf module enable nodejs:12
가끔 다음과 같은 에러가 나고 모듈이 활성화되지 않는 경우가 있습니다.
The operation would result in switching of module 'nodejs' stream '10' to stream '12' Error: It is not possible to switch enabled streams of a module. It is recommended to remove all installed content from the module, and reset the module using 'dnf module reset <module_name>' command. After you reset the module, you can install the other stream.
그러면 다음과 같이 module 을 reset 해주고 다시 활성화해주면 됩니다.
$ sudo dnf module reset nodejs $ sudo dnf module enable nodejs:12
이제 다시 module list 를 실행하면 12 Stream 이 활성화된 것을 볼 수 있습니다.
$ dnf module list nodejs Red Hat Enterprise Linux 8 for x86_64 - AppStream from RHUI (RPMs) Name Stream Profiles Summary nodejs 10 [d] common [d], development, minimal, s2i Javascript runtime nodejs 12 [e] common [d], development, minimal, s2i Javascript runtime nodejs 14 common [d], development, minimal, s2i Javascript runtime
모듈 설치
모듈을 설치하려면 module install 명령어 뒤에 모듈명과 스트림, 또는 프로파일을 기술하면 됩니다. 스트림이나 프로파일 생략시 기본 값을 사용합니다.
$ dnf module install NAME $ dnf module install NAME:STREAM $ dnf module install NAME/PROFILE $ dnf module install NAME:STREAM/PROFILE
다음은 nodejs12 버전의 minimal 프로파일을 설치합니다.
$ dnf module install nodejs:12/minimal Dependencies resolved. ========================================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================================== Downgrading: nodejs x86_64 1:12.18.4-1.module_f33+10186+5d5ca84d fedora-modular 96 k nodejs-docs noarch 1:12.18.4-1.module_f33+10186+5d5ca84d fedora-modular 2.9 M nodejs-full-i18n x86_64 1:12.18.4-1.module_f33+10186+5d5ca84d fedora-modular 7.8 M nodejs-libs x86_64 1:12.18.4-1.module_f33+10186+5d5ca84d fedora-modular 12 M npm x86_64 1:6.14.6-1.12.18.4.1.module_f33+10186+5d5ca84d fedora-modular 3.4 M Installing module profiles: nodejs/minimal Enabling module streams: nodejs 12 Transaction Summary ========================================================================================================================================================== Downgrade 5 Packages Total download size: 27 M Is this ok [y/N]:
모듈 삭제
삭제는 module remove 명령 뒤에 삭제할 모듈명을 지정해 주면 됩니다.
$ dnf module remove nodejs:12 Dependencies resolved. ========================================================================================================================================================== Package Architecture Version Repository Size ========================================================================================================================================================== Disabling module profiles: nodejs/minimal Transaction Summary ========================================================================================================================================================== Is this ok [y/N]: