dpkg-recfigure: không thể mở lại stdin: Không có tệp hoặc thư mục


75

Tôi đang xây dựng tập lệnh cung cấp cho a ubuntu vagrant vm, trên a ubuntu host, cả hai 12.10 64bitKhi cài đặt các gói sau:

sudo apt-get -y install php5-xsl graphviz php-pear unison

Tôi nhận được cảnh báo:

dpkg-reconfigure: unable to re-open stdin: No file or directory

đã cố gắng tìm kiếm nhưng kết quả đang xuất hiện mọi lỗi khác với apt-get có thể, không thể tìm ra cách khắc phục cảnh báo ở trên. Các cài đặt hoạt động, nhưng cảnh báo ở trên đang gây ra các dòng lỗi trong thiết bị xuất chuẩn.

Bất cứ ai cũng biết những gì có thể là nguyên nhân hoặc làm thế nào để ngăn chặn cảnh báo

Câu trả lời:


91

Tôi đã nhận được thông báo lỗi bằng cách đặt đoạn mã sau vào tập lệnh cung cấp của mình, trước bất kỳ apt-getcuộc gọi nào :

export DEBIAN_FRONTEND=noninteractive

Điều này làm cho việc debconfsử dụng một frontend dự kiến ​​không có đầu vào tương tác nào, ngăn nó thậm chí cố gắng truy cập stdin.


3
Đây là câu trả lời chính xác. Hầu hết các ứng dụng quản lý cấu hình (SaltStack, Puppet, v.v.) tận dụng điều này cho các cài đặt gói không tương tác.
báo

1
Câu trả lời đúng, tôi thứ hai.
stefgosselin

13
Nó không hoạt động cho dpkg-preonfigure mặc dù.
kursus

export DEBIAN_FRONTEND=noninteractivelàm việc cho tôi tại dpkg-preconfiguresân khấu
Snowcrash

23

Câu trả lời là đặt perl:locale's theo điều này :

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

Điều này giải quyết vấn đề, nhưng không thêm thời gian không mong muốn vào việc vagrant upcung cấp.


2
Điều này một mình không làm việc cho tôi. Tôi vẫn nhận được cảnh báo cho đến khi tôi triển khai 70debconfbản sửa lỗi nhận xét của @ kenorb cho cấu hình sẵn.
Brian

Câu hỏi của tôi là: Có ổn không khi bỏ qua những cảnh báo này? @Coombesy
Marco Prins

@MarcoPrins Có, bạn có thể bỏ qua các cảnh báo một cách an toàn như "stdin: không phải là tty" hoặc "dpkg-preonfigure: không thể mở lại stdin: Không có tệp hoặc thư mục như vậy". Một trong số nhiều xác nhận xung quanh có thể được tìm thấy, ví dụ tại đây ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

Chạy lệnh này:

cat /etc/apt/apt.conf.d/70debconf 

để xem nếu bạn có tập tin này. Nếu vậy, giải pháp là nhận xét DPkgdòng ngăn chặn cấu hình trước tất cả các gói với debconftrước khi chúng được cài đặt.

Vì vậy, thêm các lệnh này vào tệp cung cấp của bạn:

sudo ex +"%s@DPkg@//DPkg" -cwq /etc/apt/apt.conf.d/70debconf
sudo dpkg-reconfigure debconf -f noninteractive -p critical

Mặt khác, nếu bạn không quan tâm đến tập tin này, chỉ cần xóa nó:

sudo rm -v /etc/apt/apt.conf.d/70debconf

Dưới đây là một số lệnh khác để xem xét, nhưng tôi không nghĩ rằng chúng làm bất cứ điều gì hữu ích:

sudo dpkg-preconfigure -f noninteractive -p critical
sudo dpkg --configure -a

1
Đây là những gì cuối cùng đã làm việc cho tôi trên OSX Yosemite Vagrant và Ubuntu 14.04.
Brian

Bạn vẫn có thể cần phải thay đổi vỏ sử dụng Vagrant.
ToothlessRebel

1
Lộn xộn với tập tin này là điều duy nhất làm việc cho tôi (rõ ràng bỏ qua các đề xuất "chuyển hướng stderr", mà tôi nghĩ là lời khuyên tồi). Tôi đã chọn sử dụng một cặp các bước cung cấp trước / sau để tạm thời bao gồm --frontend=noninteractivetùy chọn trong lệnh được xác định trong tệp. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconftrước và sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconfsau
phils

5

Chuyển hướng Bash hoạt động tốt cho thiết bị xuất chuẩn và thiết bị xuất chuẩn.

Để chuyển hướng luồng lỗi, sử dụng như sau:

sudo apt-get -y install php5-xsl graphviz php-pear unison 2> /dev/null

Để chuyển hướng cả thiết bị xuất chuẩn (thông báo không phải là lỗi / cảnh báo) và thiết bị xuất chuẩn cả hai, hãy sử dụng:

sudo apt-get -y install php5-xsl graphviz php-pear unison &> /dev/null

Đó là một phím tắt có sẵn trong bash cho việc này:

sudo apt-get -y install php5-xsl graphviz php-pear unison > /dev/null 2>&1

Hoặc là:

sudo apt-get -y install php5-xsl graphviz php-pear unison 1> /dev/null 2>&1

Dưới đây, chúng ta có thể thấy rõ rằng mô tả tập tin 1 là stdout, 2 stderr, 3 stdin.

$ ls -l /dev/std*
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 Apr 18 19:03 /dev/stdout -> /proc/self/fd/1

Vì vậy, đối với những gì bạn đang nói bạn muốn làm, bạn chỉ cần lệnh đầu tiên tôi đưa ra.


1
Tôi muốn có thể lặp lại thiết bị xuất chuẩn thông thường từ apt-get. Nhưng bạn có thể đưa tôi đi đúng hướng ... tôi sẽ thử gửi stderr đến bit-xô - chỉnh sửa cổ vũ: cả hai chúng tôi đã nhận xét cùng một lúc lol - chúc mừng (một lần nữa)
Daithí

Tôi đã chỉnh sửa bài viết. Xem dòng cuối cùng.
BullShark
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.