dpkg-reconfigure : stdin을 다시 열 수 없음 : 파일 또는 디렉토리가 없습니다.


74

나는에 대한 프로비저닝 스크립트를 구축하고 ubuntu vagrant vm켜짐, ubuntu host모두 12.10 64bit다음 패키지를 설치하는 경우 :

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

경고가 나타납니다.

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

검색을 시도했지만 결과가 apt-get 가능한 모든 다른 오류를 발생시키고 위의 경고를 억제하는 방법을 찾을 수 없습니다. 설치가 작동하지만 위의 경고로 인해 유능한 표준 stdout에 오류가 발생합니다.

아무도 원인이 될 수 있거나 경고를 억제하는 방법을 알고 있습니다.

답변:


90

apt-get호출 하기 전에 프로비저닝 스크립트에 다음을 넣어 오류 메시지가 사라졌습니다 .

export DEBIAN_FRONTEND=noninteractive

이것은 debconf대화식 입력을 전혀 기대하지 않는 프론트 엔드를 사용하여 액세스조차 시도하지 못하게합니다 stdin.


3
이것이 정답입니다. 대부분의 구성 관리 응용 프로그램 (SaltStack, Puppet 등)은 비 대화식 패키지 설치에이 기능을 사용합니다.
notpeter

1
정답은 두 번째입니다.
stefgosselin

13
dpkg-preconfigure에서는 작동하지 않습니다.
kursus

export DEBIAN_FRONTEND=noninteractivedpkg-preconfigure무대 에서 나를 위해 일 했다
Snowcrash

23

대답은 설정하는 것이었다 perl:locale따라의를 :

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

이렇게하면 문제가 해결되지만 vagrant up프로비저닝에 원치 않는 시간이 추가 됩니다.


2
이것만으로는 효과가 없었습니다. 70debconf사전 구성을 위해 @kenorb의 주석 처리 수정을 구현할 때까지 여전히 경고가 표시 됩니다.
Brian

내 질문은 :이 경고를 무시해도 괜찮습니까? @Coombesy
Marco Prins

@MarcoPrins 예, "stdin : is a tty"또는 "dpkg-preconfigure : stdin을 다시 열 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다"와 같은 경고를 무시해도됩니다. 예를 들면 여기에서 찾을 수 있습니다 주위에 수많은 확인서 중 하나 ikusalic.com/blog/2013/10/03/vagrant-intro
mloskot

9

이 명령을 실행하십시오 :

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

이 파일이 있는지 확인하십시오. 그렇다면 해결책은 DPkg모든 패키지를 debconf설치하기 전에 미리 구성하지 못하게 하는 행 을 주석 처리하는 것 입니다.

따라서 다음 명령을 프로비저닝 파일에 추가하십시오.

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

그렇지 않으면이 파일이 마음에 들지 않으면 간단히 제거하십시오.

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

고려해야 할 다른 명령이 몇 가지 있지만 유용한 기능은 없다고 생각합니다.

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

1
이것이 OSX Yosemite Vagrant 및 Ubuntu 14.04에서 마침내 나를 위해 일한 것입니다.
Brian

여전히 Vagrant가 사용하는 쉘을 변경해야 할 수도 있습니다.
ToothlessRebel

1
이 파일을 엉망으로 만드는 것은 나를 위해 일한 유일한 것입니다. --frontend=noninteractive파일에 정의 된 명령에 옵션 을 임시로 포함하기 위해 사전 / 이후 프로비저닝 단계 쌍을 사용하기 로 결정했습니다. sudo sed -i 's/\(dpkg-preconfigure\) --apt/\1 --frontend=noninteractive --apt/' /etc/apt/apt.conf.d/70debconf전과 sudo sed -i 's/ --frontend=noninteractive//' /etc/apt/apt.conf.d/70debconf후.

5

배쉬 리디렉션은 stdout 및 stderr에 적합합니다.

오류 스트림을 재 지정하려면 다음을 사용하십시오.

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

stdout (오류 / 경고가 아닌 메시지)과 stderr을 모두 리디렉션하려면 다음을 사용하십시오.

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

이것은 bash에서 사용할 수있는 바로 가기입니다.

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

또는:

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

아래에서 파일 디스크립터 1이 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

그래서 당신이하고 싶은 말에 대해, 내가 준 첫 명령 만 있으면됩니다.


1
apt-get에서 일반 stdout을 에코 할 수 있기를 원합니다. 우리가 모두 동시에 롤에 주석 - 환호 (다시) : 건배 편집 -하지만 당신은 내가 비트 버킷 단지 표준 오류를 전송하려고합니다 ... 바른 길에 나를 수있다
Daithí

게시물을 수정했습니다. 마지막 줄을 참조하십시오.
BullShark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.