안내
앞으로 상당 기간에 걸쳐 RPM 기반 리눅스 배포판을 위한 패키지 관리도구 DNF에 대해 연재하게 되었습니다.
이 연재는 레드햇 계열 리눅스를 처음 접하는 분들을 위해 초심자가 꼭 알야야 하거나 또는 알면 유용한 것들을 선별하여 내용을 작성하였습니다.
잘못된 정보가 있다면 댓글로 제보해주시면 감사하겠습니다.
연재 항목은 다음과 같습니다.
2020/01/13 - [리눅스/CentOS] - DNF 명령 - DNF 명령 연재 목록
2020/01/27 - [리눅스/CentOS] - DNF 명령 관리 - 명령 별명(Alias), 대화식 쉘(Shell), 도움말(Help)
2020/01/30 - [리눅스/CentOS] - DNF 트랜잭션 관리 - 트랜잭션 이력(History)
2020/02/03 - [리눅스/CentOS] - DNF 배포판 동기화 - 배포판 동기화(Distro-Sync)
2020/02/05 - [리눅스/CentOS] - DNF 모듈 관리 - 모듈 관리(Module)
2020/02/09 - [리눅스/CentOS] - DNF 명령줄 옵션 연재 목록
2020/02/11 - [리눅스/CentOS] - DNF 명령줄 분류별 옵션 - [01] 패키지 관리
2020/02/13 - [리눅스/CentOS] - DNF 분류별 명령줄 옵션 - [02] 환경 설정
2020/02/15 - [리눅스/CentOS] - DNF 분류별 명령줄 옵션 - [03] 부가 기능
2020/02/17 - [리눅스/CentOS] - DNF 분류별 명령줄 옵션 - [04] 정보 확인
2020/02/20 - [리눅스/CentOS] - DNF 환경 설정[구성] 파일(dnf.conf) [main] 섹션 옵션
2020/02/22 - [리눅스/CentOS] - DNF 저장소 옵션(Repo Options)과 저장소 변수(Repo Variables)
YUM과 비교하여 DNF CLI의 변화 목차
--skip-broken 옵션
Upgrade 명령과 Update 명령의 기능 동일화
clean_requirements_on_remove 구성 설정 활성화 기본값화
resolvedep 명령 제거
deplist 명령 제거
제외 및 저장소 제외 설정을 모든 작업에 적용
YUM’s conf의 지시어 includepkgs를 include로 변경
dnf provides /bin/<file>의 불완전한 지원
skip_if_unavailable 설정이 기본적으로 활성화 가능
overwrite_groups 구성 설정 삭제 및 항상 비활성화된 것처럼 작동하는 함수 구성
mirrorlist_expire 구성 삭제
mirrorlist 저장소 옵션에서 metalink 미인식
alwaysprompt 삭제
upgrade_requirements_on_install 삭제
dnf history rollback 확인 삭제
yum swap 없이 패키지 교체
CLI에서 종속성 처리 세부 사항 미표시
dnf provides가 YUM 명령 문서를 바탕으로 컴파일
대역폭 제한
installonlypkgs 구성 옵션
Delta RPM 파일의 사용
.srpm파일과 존재하지 않는 패키지에 대한 미동작
더 이상 사용되지 않는 패키지에 설치하도록 패키지 승격
--installroot 옵션의 동작
트랜잭션 테이블 표시 후 다운로드 기능 지원 여부
List 명령의 모든 대안 저장소 내 패키지 표시
yum-langpacks 하위 명령 제거
--skip-broken 옵션
install 명령에서 쓰는 경우
--skip-broken옵션은 --setopt=strict=0별칭입니다. 두 옵션 모두 DNF와 함께 사용하면 전체 작업이 실패하는 오류를 일으키지 않고 사용 불가능한 패키지 또는 DNF에 대한 종속성이 깨진 패키지를 건너 뛸 수 있습니다.
이 동작은 dnf.conf 파일에서 기본값으로 설정할 수 있습니다.
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
위 예시는 CentOS 8 설치 후 /etc/dnf/dnf.conf 파일의 수정 전 모습입니다.
위 파일에 strict 구성을 아래와 같이 추가해주시면 패키지 install 작업 시 --skip-broken옵션이 자동으로 수행됩니다.
strict=False
참고로 이 --skip-broken옵션은 현재 install 명령에서만 적용됩니다.
upgrade 명령에서
과거 YUM에서는 사용 불가능한 패키지 또는 종속성이 깨진 패키지를 건너 뛸 필요가 있는 경우 따로 --skip-broken 옵션을 사용해야 했습니다. 그러나 DNF에서는 패키지를 업그레이드할 경우 해당 옵션이 자동으로 수행되므로 따로 --skip-broken 옵션을 적을 필요 없습니다.
참고
트랜잭션에서 최신 버전의 패키지만 사용하려면 --best 옵션을 사용하면 됩니다.
참고로 이 --best 옵션은 dnf.conf 파일에서 기본값으로 설정되어 있습니다.
Upgrade 명령과 Update 명령의 기능 동일화
모든 형태(옵션 사용)의 dnf update 명령과 dnf upgrade 명령은 그 수행 과정과 결과는 완전히 동일합니다. DNF는 업그레이드 명령으로 upgrade를 기본값으로 설정하고 있으며 update는 upgrade의 별칭입니다.
참고
YUM에서 yum upgrade 명령은 yum --obsoletes update 명령과 동일합니다.
즉, YUM에서 update와 upgrade는 별개의 명령입니다.
clean_requirements_on_remove 구성 설정 활성화 기본값화
/etc/dnf/dnf.conf
clean_requirements_on_remove=True
clean_requirements_on_remove 스위치는 위처럼 DNF에서 기본값으로 True로 설정되어 있어 사용자가 따로 설정하지 않아도 기본적으로 활성화되어 있습니다. 반대로 YUM의 경우 이것이 기본값이 비활성화로 설정되어 있습니다.
따라서 DNF에서 패키지를 제거(remove 명령)하는 경우 YUM에 비해 보다 많은 패키지가 자동으로 제거될 수 있음에 유념해야 합니다.
resolvedep 명령 제거
만약 사용자가 특정 파일을 제공하는 패키지를 찾고자 한다면 dnf provides 명령을 사용하면 됩니다.
deplist 명령 제거
그렇다고 사용자 입장에서 deplist를 사용하지 못하는 것은 아닙니다. 단지 자체 명령이 제거되고 dnf deplist 명령은 dnf repoquery --deplist 명령의 별칭(Alias)으로 존재하게 되는 것입니다. 즉 dnf deplist 명령을 입력하면 DNF가 자동으로 dnf repoquery --deplist 명령으로 치환하여 작동한다는 뜻입니다.
제외 및 저장소 제외 설정을 모든 작업에 적용
예시는 다음과 같습니다.
Flask 패키지를 제외한, 설치된 모든 python-f * 패키지 목록을 보고자 하는 경우
dnf -x '*flask*' list installed 'python-f*'
YUM 환경 설정 파일의 지시어 includepkgs는 DNF의 include와 동일
YUM은 지시어로 include와 includepkgs 를 가지고 있습니다. 그런데 이 두 지시어는 명백히 다른 기능을 가집니다. DNF의 지시어 include는 YUM의 includepkgs 지시어와 역할이 같습니다.
dnf provides /bin/<file>의 불완전한 지원
심볼릭 링크를 실제 경로로 설정해주면 제대로 작동할 것 같지만 그렇지 않습니다.
올바르게 수행하기 위해서는 아래처럼 실제 경로를 입력해주어야 하빈다.
[study@localhost ~]$ dnf provides /usr/bin/
일부 배포판에서 skip_if_unavailable 설정이 기본적으로 활성화
overwrite_groups 구성 옵션 삭제 및 항상 비활성화된 것처럼 작동
mirrorlist_expire 구성 삭제
mirrorlist 저장소 옵션에서 metalink 미인식
metalink가 설정되지 않은 상태에서 mirrorlist URL에 "metalink"라는 단어가 포함된 경우 mirrorlist의 값이 metalink에 복사되는 비정상 작동 때문입니다.
이와 관련하여 관련 저장소 구성 파일이 수정되었습니다.
보다 자세한 내용은 Fedora의 관련 버그 948788을 참조하시기 바랍니다.
alwaysprompt 삭제
upgrade_requirements_on_install 삭제
이제 시스템 내 모든 패키지를 사용 가능한 최신 버전으로 업그레이드하려면 dnf upgrade만 입력해주시면 됩니다.
dnf history rollback 확인 삭제
따라서 이러한 상황이 발생하더라도 DNF는 정상적으로 작동합니다. 그래서 force 옵션이 더 이상 필요하지 않습니다.
yum swap 없이 패키지 교체 가능
때때로 설치된 패키지를 제거하고 다른 패키지로 교체하여 동일한 기능을 제공하는 동시에 이러한 기능에 따라 다른 패키지는 설치 상태를 유지해야하는 경우가 있습니다.
패키지 데이터베이스의 일관성을 일시적으로 깨서 한 번의 트랜잭션으로 제거 및 설치를 수행하여 수행 할 수 있습니다.
DNF에서 이러한 트랜잭션을 설정하는 일반적인 방법은 dnf shell을 사용하거나 --allowerasing 스위치를 사용하는 것입니다.
예를 들어 C 패키지(P 필요)를 삭제하지 않고 A 패키지 (P 제공)를 B 패키지 (P 제공, A와 충돌)로 바꾸고 싶다고 할 때 다음의 명령을 사용하면 됩니다.
[study@localhost ~]$ sudo dnf --allowerasing install B이 명령은 yum swap A B와 같습니다.
DNF는 스왑 명령을 제공하지만 dnf 스왑 A B 구문만 지원됩니다.
CLI에서 종속성 처리 세부 사항 미표시
YUM은 종속성 해결 과정에서 아래와 같은 문구를 출력합니다.
---> Package rubygem-rhc.noarch 0:1.16.9-1.fc19 will be an update --> Processing Dependency: rubygem-net-ssh-multi >= 1.2.0 for package: rubygem-rhc-1.16.9-1.fc19.noarch
기술적으로 다음과 같은 이유가 있습니다. 첫 번째로 DNF의 depsolver는 항상 업데이트 후보에 대한 모든 종속성을 고려하기 때문에 이에 대한 정보를 보여주게 되면 출력이 매우 길어지기 때문입니다.
두 번째로, 이 결과는 YUM 에서도 특히 대규모 트랜잭션의 경우 지나친 정보량으로 사용자를 매우 혼란스럽게 만듭니다. 정보 획득으로 인한 이점보다 과한 정보로 야기되는 혼란으로 발생하는 해가 더 큽니다.
dnf provides는 YUM 명령 문서를 준수
[study@localhost ~]$ yum provides sandbox
예를 들어 PATH 환경 변수의 항목을 순차적으로 적용하여 일부 패키지에서 제공한 파일과 일치하는지 확인합니다.
DNF는 YUM의 후신이긴 하지만 YUM의 이러한 작동 방식은 따르지 않습니다. DNF는 명령 문법을 엄격히 따지므로 일반적으로 아래와 같이 실행해주어야 합니다.
[study@localhost ~]$ dnf provides /usr/bin/sandbox
또는
[study@localhost ~]$ dnf provides '*/sandbox'
대역폭 제한
그러나 YUM과는 달리, DNF는 여러 다운로드가 동시에 실행되면 총 다운로드 속도가 조절됩니다. YUM에서는 다운로더가 각기 다른 프로세스로 실행되었기 때문에 이러한 작업이 불가능했습니다.
installonlypkgs 구성 옵션
Delta RPM 파일의 사용
YUM과 비교하여 DNF는 deltarpm_percentage를 지원하지 않으며 대신 deltarpm 사용이 적절한 지 결정하기 위해 최적의 DRPM / RPM 비율값을 선택합니다.
.srpm파일과 존재하지 않는 패키지에 대한 미동작
로컬 .srpm파일에서 설치 작업을 요청하는 명령이 실행되면 DNF가 오류와 함께 종료 됩니다.
[study@localhost ~]$ sudo $ dnf install fdn-0.4.17-1.fc20.src.rpm tour-4-6.noarch.rpm Error: Will not install a source rpm package (fdn-0.4.17-1.fc20.src).
DNF가 이렇게 작동하는 이유는 프로그램이 CLI 명령을 완전히 이행할 수 없는 경우 오류와 함께 종료해야 한다는 명제에 따른 것입니다.
이러한 작동 방색은 사용 가능한 패키지와 일치하지 않는 패키지 사양에도 동일하게 적용됩니다.
이에 반해 YUM은 이 경우 경고만 출력하고 "tour"패키지 설치를 계속합니다.
구 패키지 대신 신 패키지가 자동으로 설치되지 않음
DNF는 패키지 Y가 패키지 X의 후신이라고 해서 패키지 X의 설치 요청을 패키지 Y에 대한 설치 요청으로 자동으로 대체해 수행하지 않습니다.
그러나 YUM은 obsoletes 구성 옵션이 활성화되어 있는 경우 신 패키지에 대한 설치로 자동으로 변경하여 실행합니다. 그러나 적절히 문서화되어 있지 않고 시스템에 해로울 수 있으므로 권장하지는 않습니다.
--installroot 옵션의 동작
DNF는 --config 명령줄 옵션과 다르게 경로를 처리합니다. 이 경로는 항상 호스트 시스템과 관련이 있습니다 (YUM은 이 경로를 installroot와 결합합니다.).
Reposdir is also handled slightly differently, if one path of the reposdirs exists inside of installroot, then repos are strictly taken from installroot
Reposdir는 또한 약간 다르게 처리되는데, 만약 reposdir의 하나의 경로가 installroot의 내부에 존재한다면 repos는 installroot에서 엄격하게 가져옵니다.
YUM은 reposdir에서 각 경로를 개별적으로 테스트하고 존재하는 경우 installroot 경로를 사용합니다.
트랜잭션 테이블 표시 후 다운로드 기능 지원 여부
List 명령의 모든 대안 저장소 내 패키지 표시
yum-langpacks 하위 명령 제거
번역은 core DNF의 일부가 되어 더 이상 개별 언어팩을 관리할 필요가 없어졌습니다.
따라서 다음과 같은 하위 명령이 제거되었습니다.
langavailable / langinstall / langremove / langlist / langinfo
YUM 플러그인과 비교한 DNF 플러그인 변경
Original YUM tool | DNF command/option | Package |
yum check | dnf repoquery --unsatisfied | dnf |
yum-langpacks | dnf | |
yum-plugin-aliases | dnf alias | dnf |
yum-plugin-auto-update-debug-info | option in debuginfo-install.conf | dnf-plugins-core |
yum-plugin-changelog | dnf-plugins-core | |
yum-plugin-copr | dnf copr | dnf-plugins-core |
yum-plugin-fastestmirror | fastestmirror option in dnf.conf | dnf |
yum-plugin-fs-snapshot | dnf-plugins-extras-snapper | |
yum-plugin-local | dnf-plugins-core | |
yum-plugin-merge-conf | dnf-plugins-extras-rpmconf | |
yum-plugin-priorities | priority option in dnf.conf | dnf |
yum-plugin-remove-with-leaves | dnf autoremove | dnf |
yum-plugin-show-leaves | dnf-plugins-core | |
yum-plugin-tmprepo | --repofrompath option | dnf |
yum-plugin-tsflags | tsflags option in dnf.conf | dnf |
yum-plugin-versionlock | python3-dnf-plugin-versionlock | |
yum-rhn-plugin | dnf-plugin-spacewalk |
아직 포팅되지 않은 플러그인들
yum-plugin-filter-data
,
yum-plugin-keys
,
yum-plugin-list-data
,
yum-plugin-post-transaction-actions
,
yum-plugin-protectbase
,
yum-plugin-ps
,
yum-plugin-puppetverify
,
yum-plugin-refresh-updatesd
,
yum-plugin-rpm-warm-cache
,
yum-plugin-upgrade-helper
,
yum-plugin-verify
YUM 유틸리티와 비교한 DNF 플러그인 변경
Original YUM tool | New DNF command | Package |
debuginfo-install | dnf debuginfo-install | dnf-plugins-core |
find-repos-of-install | dnf list installed | dnf |
needs-restarting | dnf tracer | dnf-plugins-extras-tracer |
package-cleanup | dnf list, dnf repoquery | dnf , dnf-plugins-core |
repoclosure | dnf repoclosure | dnf-plugins-extras-repoclosure |
repodiff | dnf repodiff | dnf-plugins-core |
repo-graph | dnf repograph | dnf-plugins-extras-repograph |
repomanage | dnf repomanage | dnf-plugins-extras-repomanage |
repoquery | dnf repoquery | dnf |
reposync | dnf reposync | dnf-plugins-core |
repotrack | dnf download –resolve –alldeps | dnf-plugins-core |
yum-builddep | dnf builddep | dnf-plugins-core |
yum-config-manager | dnf config-manager | dnf-plugins-core |
yum-debug-dump | dnf debug-dump | dnf-plugins-extras-debug |
yum-debug-restore | dnf debug-restore | dnf-plugins-extras-debug |
yumdownloader | dnf download | dnf-plugins-core |
package-cleanup 대체에 대한 상세표
package-cleanup --dupes | dnf repoquery --duplicates |
package-cleanup --leaves | dnf repoquery --unneeded |
package-cleanup --orphans | dnf repoquery --extras |
package-cleanup --problems | dnf repoquery --unsatisfied |
package-cleanup --cleandupes | dnf remove --duplicates |
package-cleanup --oldkernels | dnf remove --oldinstallonly |
package-cleanup --oldkernels --keep=2 | dnf remove $(dnf repoquery --installonly --latest-limit=-2) |
'리눅스 > CentOS' 카테고리의 다른 글
AlmaLinux 8.3 공개 소식 및 CentOS Linux에서 AlmaLinux로 전환 방법 (0) | 2021.04.02 |
---|---|
CentOS Linux 8에서 CentOS Stream으로 전환 (3) | 2021.01.05 |
CentOS 8.1 설치할 때 주의사항(VirtualBox에서 설치할 때 포함) - 인터넷 연결 설정, 부팅 시 오류 메시지 (0) | 2020.04.05 |
CentOS 8.1(+ RHEL 8.1)에 대하여 - 릴리스 노트(Release Notes) 포함 (0) | 2020.03.31 |
유용한 DNF 플러그인 (0) | 2020.02.24 |
DNF 저장소 옵션(Repo Options)과 저장소 변수(Repo Variables) (0) | 2020.02.22 |
DNF 환경 설정[구성] 파일(dnf.conf) [main] 섹션 옵션 (0) | 2020.02.20 |
DNF 분류별 명령줄 옵션 - [04] 정보 확인 (0) | 2020.02.17 |