chroot에 데비안 패키지 설치

chroot에 데비안 패키지 설치

저는 debootstrap, chroot 및 grub 설치를 포함하는 최소 Debian 이미지를 만들고 있습니다.

이제 집에서 만든 사용자 정의 데비안 패키지를 설치해야 합니다. 이러한 패키지에는 데이터베이스 마이그레이션을 실행하는 postinst 스크립트가 있습니다. 하지만 물론 내 chroot 환경에서는 postgresql이 실행되고 있지 않습니다.

시도해 보았지만 systemd-nspawn해당 플래그가 없으면 -b컨테이너가 시작되지 않고 postgresql이 실행되지 않습니다.

물론 첫 번째 실제 부팅 중에 postinst를 apt install ...실패하고 실행하면 apt installpostinst가 성공적으로 다시 실행될 수 있지만 이는 보기 흉한 일입니다.

최소한의 클린 부팅 가능 구성 이미지를 준비하는 더 좋은 방법이 있습니까?

답변1

사용자 정의 패키지를 설치하기 전에 chroot에서 PostgreSQL을 시작하지 않는 이유는 무엇입니까?

기본적으로 systemd 서비스는 chroot에서 실행되지 않지만 PostgreSQL을 수동으로 시작할 수 있습니다. 예를 들면 다음과 같습니다.

 su postgres -c 'pg_ctl start -D /usr/local/pgsql/data -l serverlog'

(다음에서 가져온 명령PostgreSQL 11 문서)

시작에 실패하면 서버 로그 파일을 확인하여 이유를 알아보세요.

답변2

실행 이미지를 사용하고 부팅될 때까지 기다린 후 systemd-nspawn --boot실행 명령을 사용하세요.systemd-run

#!/bin/bash

MACHINE_NAME=target$$

wait_for_container() {

  while true; do

    if machinectl | grep --quiet "$MACHINE_NAME"; then
      break
    fi

    echo "Wait for container $MACHINE_NAME"
    sleep 1

  done

  echo "Container up!"

}

poweroff_container() {

  machinectl poweroff $MACHINE_NAME

}

systemd-nspawn --boot --machine $MACHINE_NAME --directory "$MOUNT_PATH" > /dev/null 2>&1 &

# wait until container is up
wait_for_container

systemd-run --machine $MACHINE_NAME --pipe --wait /bin/bash <<EOF 

  # do your stuff
  hostnamectl set-hostname your-hostname

EOF

poweroff_container

관련 정보