노드 js 코드의 ubuntu 18.04에서 이 명령을 실행하고 싶기 때문에 프롬프트에 응답할 수 없으며 한 번 호출해야 합니다.
sudo apt-get install --install-recommends linux-generic-hwe-18.04
다음 트릭으로 내가 해냈어
printf '\n' | sudo apt-get install --install-recommends linux-generic-hwe-18.04
그런데 두 번째 옵션이 선택되었다는 대화 상자 질문이 표시되지만 내 대답은 첫 번째 옵션입니다. 일명 "패키지 관리자 버전 설치" 아래 트릭이 작동하지 않습니다.
┌─────────────────────────────────┤ ├─────────────────────────────────┐
│ A new version of /boot/grub/menu.lst is available, but the version │
│ installed currently has been locally modified. │
│ │
│ What would you like to do about menu.lst? │
│ │
│ install the package maintainer's version │
│ keep the local version currently installed │
│ show the differences between the versions │
│ show a side-by-side difference between the versions │
│ show a 3-way difference between available versions │
│ do a 3-way merge between available versions (experimental) │
│ start a new shell to examine the situation │
│ │
│ │
│ <Ok> │
│ │
└──────────────────────────────────────────────────────────────────────┘
아래 중 어느 것도 작동하지 않습니다
printf '\n1\n' | sudo apt-get install --install-recommends linux-generic-hwe-18.04 printf '\n\n' | sudo apt-get install --install-recommends linux-generic-hwe-18.04
그리고 나는 아래와 같은 많은 방법을 시도했지만 작동하지 않았습니다.
sudo DEBIAN_FRONTEND=비대화형 apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade
예를 들어 libssl 질문과 같은 질문에 여러 번 직면하고 있습니다. 이런 종류의 질문에 어떻게 대답할 수 있는지 알려주세요. 명령을 실행하면 먼저 모든 질문에 답하고 싶습니다.
답변1
Dpkg는 실제로 대화 상자 질문 응답을 자동화하는 방법을 제공하며 설치를 미리 설정할 때 매우 인기가 있습니다(대부분 우분투 서버, 새 설치 프로그램에서는 지원되지 않음). 이러한 설치 프로그램에는 방대한 양의 메뉴와 메뉴 옵션이 있는 경향이 있습니다.
debconf 파일이란 무엇입니까?
ㅏdebconf(데비안 구성) 파일,시드 파일이라고도 함는 설치 프로그램이 묻는 질문(있는 그대로)과 매개변수 및 이에 대한 답변을 나열하는 파일입니다. 질문이 누락되었거나 지원되지 않는 답변으로 답변된 경우 기본값이 선택됩니다(가능한 경우).
모든 패키지에는구성 목록, 설치 과정에서 질문이 없고 기본값이 사용된 경우에도 마찬가지입니다. 패키지를 다시 설치하고 새 구성을 지정하지 않으면 시스템에 이미 알려진 구성이 사용됩니다. 메모:debconf 파일은 실제로 패키지를 구성하지 않으며 단순히 설치 프로그램에서 사용하는 일련의 질문과 대답 값을 보유합니다.
패키지 debconf 선택을 어떻게 보거나 생성할 수 있나요?
- 설치된 모든 패키지에 대해 선택된 모든 항목을 나열하려면 간단히
debconf-get-selections
. - 특정 패키지를 나열하려면 를 사용하십시오
debconf-get-selections |grep '<my_package_name>'
. - 기존 답변의 값을 다른 값으로 변경하거나 명령줄에서 새 선택 항목을 추가하려면 를 사용하세요
debconf-set-selections '<my_package_selection_stanza>'
. - 파일의 값을 변경하거나 추가하려면 를 사용합니다
debconf-set-selections '<my_file_location>'
.
자세한 내용은 매뉴얼 페이지를 참조하십시오.debconf-get-selections(1),debconf-set-selections(1).
일반적으로 올바른 전체 선택 목록을 찾는 것은 어렵고 매우 좋은 방법은 먼저 패키지를 설치하고 해당 선택 항목을 파일에 덤프한 다음 관련 선택 항목을 편집하고 파일에서 새 선택 항목을 설정하는 것입니다. 문자열이나 파일 내용을 set 명령으로 파이프할 수도 있습니다.
echo "some selection" |debconf-set-selections
debconf 구문 이해:
다음은 두 가지 패키지 debconf 선택의 예입니다. 하나는 lightdm(Ubuntu 디스플레이 관리자)용이고, grub 선택의 몇 스탠자는 다음과 같습니다.
$debconf-get-selections |grep lightdm
lightdm shared/default-x-display-manager select lightdm
lightdm lightdm/daemon_name string /usr/sbin/lightdm
$debconf-get-selections |grep grub-pc
grub-pc grub-pc/chainload_from_menu.list boolean true
grub-pc grub-pc/timeout string 10
grub-pc grub-pc/install_devices multiselect
보시다시피 구문은 매우 직관적입니다. 첫 번째 부분은 패키지 이름이고 그 뒤에 '/' 및 질문/구성 이름이 옵니다. 그 뒤에는 대답하는 방법과 대답이 나옵니다.
debconf 선택 항목 주입 및 패키지 재구성
debconf-set-selections
명령은 OS에 저장된 debconf 데이터베이스를 업데이트했습니다. 새 패키지를 설치하기 전에 선택 목록을 설정할 수 있으며 해당 목록이 사용됩니다. 이미 설치된 패키지의 경우 제거가 필요하지 않습니다. dpkg-reconfigure '<my_package_name>'
새로운 선택 항목을 적용한 후 간단히 사용하세요 .
또한 debconf 수준을 정의하여 일부 질문/확인 프롬프트만 표시하고 답변하도록 허용하거나 중요하지는 않지만 중요한 질문을 묻는 것으로 정의할 수도 있습니다.
dpkg-reconfigure -p '<level>' '<my_package_name>'
사용 가능한 수준은 낮음, 중간, 높음 또는 심각입니다. debconf에 대한 자세한 내용은 여기를 참조하세요.데비안위키/debconf. 모든 대화 상자를 완전히 비활성화하려면(선택 사항이 의도한 대로 정확히 맞는 경우에만 권장됨) 비대화형 옵션을 사용하십시오: dpkg-reconfigure --frontend Noninteractive '<package_name>'
.
답변2
대화형 프로그램의 프롬프트에 프로그래밍 방식으로 응답하려면 을 사용해야 합니다 expect
. 패키지를 설치 expect
하고 프로그램을 실행하고 프롬프트에 응답하는 스크립트를 작성하십시오. 스크립트의 일반적인 레이아웃은 다음과 같습니다.
#!/usr/bin/expect
spawn <command_to_run>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
expect <something_that_should_appear_on_screen>
send <keys_that_should_be_sent_to_program>
...
expect <something_that_should_appear_at_the_very_end>
exit
Expect를 올바르게 사용하려면 약간의 연습이 필요하지만 일단 익숙해지면 매우 유용한 도구입니다.