dpkg-reconfigure : stdin을 다시 열 수 없음 : 파일 또는 디렉토리가 없습니다. 스크립트를 구축하고 ubuntu vagrant

나는에 대한 프로비저닝 스크립트를 구축하고 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에 오류가 발생합니다.

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



답변

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

export DEBIAN_FRONTEND=noninteractive

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


답변

대답은 설정하는 것이었다 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프로비저닝에 원치 않는 시간이 추가 됩니다.


답변

이 명령을 실행하십시오 :

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

답변

배쉬 리디렉션은 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

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