dnf - 어떤 미러 URL이 선택되었는지 표시하는 방법은 무엇입니까?

dnf - 어떤 미러 URL이 선택되었는지 표시하는 방법은 무엇입니까?

아래는 bash 로그의 일부입니다. 전체 로그는 다음에서 찾을 수 있습니다.https://gist.github.com/limkokhole/f2a423112aa005f10862:

[xiaobai@xiaobai hello]$ dnf --verbose download --source readline
cachedir: /var/cache/dnf
Loaded plugins: noroot, needs-restarting, reposync, copr, playground, kickstart, Query, generate_completion_cache, builddep, download, config-manager, protected_packages, system-upgrade, debuginfo-install
DNF version: 0.6.4
repo: using cache for: spot-chromium
not found deltainfo for: Copr repo for chromium owned by spot
not found updateinfo for: Copr repo for chromium owned by spot
repo: using cache for: rpmfusion-nonfree-updates-testing
not found deltainfo for: RPM Fusion for Fedora 21 - Nonfree - Test Updates
not found updateinfo for: RPM Fusion for Fedora 21 - Nonfree - Test Updates
repo: using cache for: updates-source
...
not found deltainfo for: RPM Fusion for Fedora 21 - Nonfree - Updates Source
not found updateinfo for: RPM Fusion for Fedora 21 - Nonfree - Updates Source
readline-6.3-5.fc21.src.rpm                                                                                                             623 kB/s | 2.4 MB     00:03    
[xiaobai@xiaobai hello]$ 

나도 해봤어 dnf info, URLhttp://cnswww.cns.cwru.edu/php/chet/readline/rltop.html저장소 URL이 아님:

[xiaobai@xiaobai hello]$ dnf info readline
[sudo] password for xiaobai: 
Using metadata from Thu Dec 31 19:18:09 2015 (6:13:33 hours old)
Installed Packages
Name        : readline
Arch        : i686
Epoch       : 0
Version     : 6.3
Release     : 5.fc21
Size        : 446 k
Repo        : @System
Summary     : A library for editing typed command lines
URL         : http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
License     : GPLv3+
Description : The Readline library provides a set of functions that allow users to
            : edit command lines. Both Emacs and vi editing modes are available. The
            : Readline library includes additional functions for maintaining a list
            : of previously-entered command lines for recalling or editing those
            : lines, and for performing csh-like history expansion on previous
            : commands.

Name        : readline
Arch        : x86_64
Epoch       : 0
Version     : 6.3
Release     : 5.fc21
Size        : 483 k
Repo        : @System
Summary     : A library for editing typed command lines
URL         : http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html
License     : GPLv3+
Description : The Readline library provides a set of functions that allow users to
            : edit command lines. Both Emacs and vi editing modes are available. The
            : Readline library includes additional functions for maintaining a list
            : of previously-entered command lines for recalling or editing those
            : lines, and for performing csh-like history expansion on previous
            : commands.

[xiaobai@xiaobai hello]$ 

이 readline-6.3-5.fc21.src.rpm을 다운로드하기 위해 어떤 URL이나 도메인이 선택되었는지 어떻게 알 수 있나요? --verbose링크가 표시되지 않는 것 같습니다. bash 세션을 종료한 후 나중에 dnf 기록에서 이 URL 정보를 어떻게 얻을 수 있나요?

답변1

그 자체 로 dnf이것은지연된 기능 요청. 당연히 dnfURL을 모릅니다. 의견 4와 5를 참조하세요.

동기를 오해해서 죄송합니다. 참고로 DNF는 실제로 URL을 모릅니다. "metalink"의 URL과 패키지의 파일 이름(및 일부 기타 메타데이터)만 알고 있습니다. 기본 라이브러리 librepo는 최상의 이미지 선택, URL 작성 및 파일 다운로드를 담당합니다. 그건 그렇고, 이는 정보를 제공하기 위해 라이브러리에서 몇 가지 콜백을 수행해야 함을 의미합니다. 참고용으로만...


문제는 우리가 metalinks의 URL을 모른다는 것입니다. librepo에 의해 하위 수준에서 처리됩니다. 동일한 사용 사례를 공유하고 이 기능을 보고 싶은 사람이 있는 경우 댓글을 남겨주시면 이 기능을 사용할 확률이 높아집니다.

답변2

다운로드를 담당하는 librepo를 지적해준 @muru에게 감사드립니다.

현재 해결 방법은 a를 정의하여 debug_function전달하는 것입니다 set_debug_log_handler(참조:download_packages.py ) 존재하다 repo.py:

def download_payloads(payloads, drpm):
    # download packages
    drpm.err.clear()
    targets = [pload.librepo_target() for pload in payloads]
    errs = _DownloadErrors()
    try:

        #START my custom code
        def debug_function(msg, _):
            print("##hole## msg:", msg)
        librepo.set_debug_log_handler(debug_function)
        #END my custom  code

        librepo.download_packages(targets, failfast=True)
    except librepo.LibrepoException as e:
        errs.fatal = e.args[1] or '<unspecified librepo error>'
    ...

repo.py파일은 다음을 통해 수동으로 찾을 수 있습니다.

[xiaobai@xiaobai log]$ python -c 'import sys, dnf.repo; print(sys.modules["dnf.repo"])'
<module 'dnf.repo' from '/usr/lib/python2.7/site-packages/dnf/repo.py'>
[xiaobai@xiaobai log]$ 

[고쳐 쓰다]Fedora 24에서는 경로가 /usr/lib/python3.5/site-packages/dnf/repo.py.

이제 URL을 얻을 수 있습니다http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/21/Everything/source/SRPMS/r/readline-6.3-5.fc21.src.rpm:

[xiaobai@xiaobai test]$ dnf download --source readline
[sudo] password for xiaobai: 
Using metadata from Thu Dec 31 19:18:09 2015 (1 day, 11:59:10 hours old)
...
##hole## msg: select_next_target: Selecting mirror for: r/readline-6.3-5.fc21.src.rpm
##hole## msg: select_suitable_mirror: Skipping rsync url: rsync://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/21/Everything/source/SRPMS/
##hole## msg: prepare_next_transfer: URL: http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/21/Everything/source/SRPMS/r/readline-6.3-5.fc21.src.rpm
##hole## msg: prepare_next_transfer: Resume ignored, existing file was not originaly being downloaded by Librepo
##hole## msg: lr_download: Downloading started
##hole## msg: lr_headercb: Server returned Content-Length: "2493152" (converted 2493152/2493152 expected)                             ] ---  B/s |   0  B     --:-- ETA
##hole## msg: check_transfer_statuses: Transfer finished: r/readline-6.3-5.fc21.src.rpm (Effective url: http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/21/Everything/source/SRPMS/r/readline-6.3-5.fc21.src.rpm)
##hole## msg: check_finished_trasfer_checksum: Checksum (sha256) 521bd47a3293e694190a237921a9954b20fa41d0e8e38183d186452d4cc62ac8 is OK
readline-6.3-5.fc21.src.rpm                                                                                                             1.4 MB/s | 2.4 MB     00:01    
##hole## msg: lr_download_packages: Restoring an old SIGINT handler
[xiaobai@xiaobai test]$ 

물론 dnf가 향후 참조를 위해 이 URL을 기록하는 것이 dnf history더 좋습니다 (명령 또는 파일에서 검색됨) /var/log/dnf.log.

답변3

dnf download readline
cat /var/log/dnf.librepo.log | grep Downloading: | tail -n1

그런 다음 패키지를 다운로드할 수 있는 URL을 얻습니다.

관련 정보