Làm thế nào để bạn xây dựng nhà tù chroot với dnf?


7

Ngày trước, tôi đã sử dụng để xây dựng các nhà tù chroot bằng cách sử dụng yum. Thật đơn giản, dễ dàng và để tôi làm những việc không thực sự có sẵn tại thời điểm đó (xây dựng các gói cho nhiều bản phát hành trên các nền tảng như ia64 và ppc sử dụng cùng một cơ sở hạ tầng).

Tiến nhanh trong 5 năm, tôi muốn xây dựng một nhà tù chroot đơn giản trên Fedora 23. Tuy nhiên, dnfđiều đó không dễ dàng gì. Tôi đã từng có thể chỉ cần tạo một /etc/yum.repo.d/tập tin trong thư mục tù và gọi yum --installroot. Thật không may dnflà vẫn đọc repo địa phương và không phải là người được tạo ra trong nhà tù chroot.

Có thể dnfsử dụng các tập tin conf không /etc/dnf/dnf.confhoặc trong /etc/yum.repos.d/?


Vì vậy, hóa ra việc thêm --releasever=23cài đặt đã làm việc với các repos cục bộ của tôi, nhưng nó vẫn không cho phép tôi tham khảo một repo khác không phải là một phần của cài đặt của tôi. Điều này mang lại cho tôi những gì tôi muốn ngay bây giờ, nhưng không giải quyết được vấn đề gốc
Joe

Câu trả lời:


3

Như bạn đã tìm ra, với dnf, bạn cần chỉ định --releaserverđối số.

Ngoài ra, nếu bạn muốn sử dụng các kho lưu trữ cụ thể cho chroot, thì bạn sẽ cần thêm một chút công việc.

Tôi thấy giải pháp đơn giản nhất là tạo dnf.conftập tin của riêng bạn bên trong chroot, đặt cấu hình kho lưu trữ bên trong và sau đó sử dụng nó.

Ví dụ: giả sử bạn muốn tạo một chroot Fedora 24 trong $(pwd)/mychrootthư mục, chỉ sử dụng các gói từ kho lưu trữ không có fedora và rpmfusion.

Bạn sẽ tạo mychroot/etc/dnf/dnf.conftập tin với nội dung sau:

[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
reposdir=

[fedora]
name=Fedora $releasever - $basearch
failovermethod=priority
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=7d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[updates]
name=Fedora $releasever - $basearch - Updates
failovermethod=priority
metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch
enabled=1
gpgcheck=1
metadata_expire=6h
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False

[rpmfusion-free]
name=RPM Fusion for Fedora $releasever - Free
metalink=https://mirrors.rpmfusion.org/metalink?repo=free-fedora-$releasever&arch=$basearch
enabled=1
metadata_expire=14d
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmfusion-free-fedora-$releasever

(nhìn vào các /etc/yum.repos.d/*.repotập tin trên hệ thống của bạn và chỉ cần sao chép-dán)

Phần quan trọng là dòng này trong mainphần này, cho biết dnf không tìm kiếm các kho lưu trữ trong bất kỳ thư mục nào, mà chỉ trong tệp cấu hình chính, sẽ làm cho nó bỏ qua kho lưu trữ hệ thống của bạn:

reposdir=

Cuối cùng, bạn có thể chạy dnf:

# dnf -c $(pwd)/mychroot/etc/dnf/dnf.conf install --installroot=$(pwd)/mychroot --releasever=24 gstreamer1-libav

Bạn có thể hiển thị nó bây giờ!
Demi

Và cuối cùng tôi đã làm được. Xin lỗi nó làm tôi mất quá lâu. : - /
Mathieu Bridon

Tôi đã thử điều đó, nhưng tất cả những gì tôi nhận được làAttributeError: 'NoneType' object has no attribute 'lstrip'
panzi

3

Kể từ 2016-10 hoặc lâu hơn, Dnf đã thay đổi mặc định . Điều đó có nghĩa là khi thực hiện một lệnh như

# dnf --installroot=/mnt/new-root --releasever=26 \
    group install custom-environment

Bây giờ, dff nhìn đầu tiên choetc/dnf/dnf.confetc/yum.repo.ddưới /mnt/new-root, theo mặc định.

Mặc định này có thể được thay đổi thông qua việc chỉ định:

 --setopt=reposdir=/other/path --config /other/location/dnf.conf

0

dnf cho phép thiết lập bất kỳ tùy chọn cấu hình nào trên dòng lệnh và điều này bao gồm reposdir. Có thể sử dụng một lệnh như thế này:

ROOT=/path/to/my/chroot
dnf --installroot="$ROOT" \
    -c "$ROOT"/etc/dnf/dnf.conf \
    --setopt=reposdir="$ROOT"/etc/yum.repos.d \
    install ...

Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - Từ đánh giá
Thomas

@Thomas bạn có thích phrasing này không?
nguồn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.