팝업은 다음과 상호작용할 수 없습니다: "오래된 라이브러리를 사용하는 데몬" "어떤 서비스를 다시 시작해야 합니까?"

팝업은 다음과 상호작용할 수 없습니다: "오래된 라이브러리를 사용하는 데몬" "어떤 서비스를 다시 시작해야 합니까?"

"데몬이 오래된 라이브러리를 사용합니다." 팝업 "어떤 서비스를 다시 시작해야 합니까?"라는 메시지가 표시되면 스크립트와 상호 작용할 수 없어 스크립트가 중단되었습니다. 이는 apt를 사용하여 패키지를 설치하거나 업데이트할 때 발생합니다(스크립트에서 또는 셸에서 직접). 이 스크립트는 많은 소프트웨어와 패키지를 설치합니다. 예는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

나는 여러 다른 쉘과 장치에서 이것을 시도했습니다. 내 우분투 버전은 20.04입니다.

Enter/Return을 등록하지 않으며 키보드 입력(예: 아래쪽 화살표)은 다음을 수행합니다.

여기에 이미지 설명을 입력하세요.

왜 이런 일이 발생하는지 모르겠고 이렇게 깨지는 것을 방지하는 방법(또는 팝업을 완전히 방지하는 방법)을 알고 싶습니다.

iTerm을 설치했지만 동작이 변경되지 않았습니다. 여기에 이미지 설명을 입력하세요.

다음은 관련이 있을 수 있는 스크립트의 일부 줄입니다(문제를 해결하기 위해 처음에 추가한 일부 포함).

echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections

# Set noninteractive frontend for apt-get to avoid prompts
export DEBIAN_FRONTEND=noninteractive

# Define the file path
FILE_PATH="/etc/needrestart/needrestart.conf"

# Check if the file exists
if [ -f "$FILE_PATH" ]; then
    # Use sed to replace 'i' with 'a' for the specific configuration
    sudo sed -i "s/\$nrconf{restart} = 'i';/\$nrconf{restart} = 'a';/g" "$FILE_PATH"
    
    echo "The file has been updated successfully."
else
    echo "The specified file does not exist."
fi

sudo dpkg-reconfigure -f noninteractive needrestart

sudo systemctl restart needrestart.service
echo '* libraries/restart-without-asking boolean true' | sudo debconf-set-selections
echo 'needrestart needrestart/restart-services boolean true' | sudo debconf-set-selections

# Update the package list and install dependencies
sudo apt-get update && \
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y

# Set timezone
ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && \
apt-get update && \
apt-get install -y tzdata && \
dpkg-reconfigure --frontend noninteractive tzdata

# Set environment variable for timezone
export TZ=America/New_York

# Attempt to install locales and generate en_US.UTF-8
apt-get update && \
apt-get install -y locales && \
locale-gen en_US.UTF-8

# Update packages, fix installations, install sudo, cleanup
apt-get update && \
apt-get install -f && \
apt-get install -y --no-install-recommends sudo && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*

답변1

귀하가 언급한 특정 팝업은 needrestart(귀하의 스크립트가 이를 구성했기 때문에 이미 알고 있다고 가정합니다)에 의해 생성됩니다.

needrestart후크에 의해 호출됩니다. 여기서 관련된 두 개의 후크는 그것 aptdpkg후크입니다. 환경 변수를 null이 아닌 값으로 설정하여 apt후크를 일시적으로 비활성화할 수 있습니다 . NEEDRESTART_SUSPENDdpkg후크는 구성할 수 없지만 이름을 변경하여 비활성화할 수 있습니다.

NEEDRESTART_MODE환경 변수를 사용하여 (구성 파일을 수정하는 대신) 모드 구성 설정을 재정의할 수 있다는 점도 주목할 가치가 있습니다 .

다음 접근 방식을 권장합니다.

  1. needrestart스크립트에서 모든 조정 사항을 제거합니다.

  2. NEEDRESTART_SUSPENDnull이 아닌 값으로 설정 하고 내보냅니다.

    export NEEDRESTART_SUSPEND=1
    
  3. NEEDRESTART_MODE"자동" 또는 "목록"으로 설정 :

    export NEEDRESTART_MODE=l
    
  4. 위의 내용이 충분하지 않으면 dpkg스크립트 시작 부분에서 후크를 비활성화합니다.

    [ -f /etc/dpkg/dpkg.cfg.d/needrestart ] && mv /etc/dpkg/dpkg.cfg.d/needrestart /etc/dpkg/dpkg.cfg.d/needrestart.disabled
    

    끝에서 (또는 출구 트랩에서)

    [ -f /etc/dpkg/dpkg.cfg.d/needrestart.disabled ] && mv /etc/dpkg/dpkg.cfg.d/needrestart.disabled /etc/dpkg/dpkg.cfg.d/needrestart
    

오래된 라이브러리를 사용하여 데몬을 다시 시작하려면 needrestart스크립트 끝에서 이를 명시적으로 실행해야 할 수도 있습니다.

관련 정보