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.