먼저 정정할 게 있습니다. 코드를 열어 보니 앞 답변의 전제가 틀렸습니다. 이건 FreeBSD 호스트 문제가 아니라 Linux 호스트(x280f) + FreeBSD 게스트 문제입니다. 에러는 lv_serial_setup() 에서 나오고, 8.7.111 에서 넣으신 FreeBSD 게스트 분기까지 가지도 못한 채 lv_find_customize() 게이트에서 걸렸습니다. 호스트에 libguestfs 가 없어서입니다. 앞서 드린 seed ISO 스크립트는 이미지 프로비저닝용이라 이 경로에는 해당되지 않습니다. 그래서 8.7.112 는 "설치 자동화" 쪽으로 병합했습니다. src/platforms/linux/virt_drv_libvirt.c lv_exec_to() 신규 — lv_exec 과 같지만 초 단위 제한이 있습니다. 기존 lv_exec 에는 제한이 없어서 dpkg 락이 잡히면 명령 스레드가 영원히 묶입니다. 자식은 setsid() 로 자기 프로세스 그룹을 만들고, 300초 초과 시 그룹째 SIGKILL 합니다. apt 가 띄운 dpkg 가 남지 않게 하려는 것입니다. lv_pkg_install() / lv_pkg_try() 신규 — pacman/apt-get/dnf 를 골라 비대화형으로 설치합니다. 비루트면 sudo -n , 자식 환경에 DEBIAN_FRONTEND=noninteractive , apt 에는 -o DPkg::Lock::Timeout=60 . 프로세스당 도구마다 한 번만 시도하고 실패를 기억합니다. MIHO_AUTO_PKG=0 이면 아예 하지 않습니다. 세 자리에 연결했습니다. lv_serial_setup (virt-customize→libguestfs), lv_create (virt-install), lv_clone (virt-clone). 셋 다 원래 하드 실패하던 자리라 동작이 바뀌는 경우는 없고, 설치가 실패하면 사유가 기존 메시지에 덧붙습니다. lv_guestfs_hint() — libguestfs 는 깔려 있어도 Debian 계열의 /boot/vmlinuz-* 0600 때문에 supermin 단계에서 자주 죽습니다. 출력에서 알아보고 chmod 0644 /boot/vmlinuz-* 를 사유에 붙입니다. virt-customize / virt-inspector 탐색을 고정 경로 두 개에서 lv_which_r() 로 바꿔 PATH 까지 봅니다. 액션 목록과 정책은 손대지 않았습니다. 새 액션이 아니라 기존 virt.guest.serial_setup 의 실패 경로만 바뀐 것이라 CE_KNOWN_ACTIONS[] · _arg_allow · policy.json.example 셋 다 변경 없습니다. 정지 상태 확인, OS 판별 후 진행, 실패 시 즉시 중단이라는 안전장치도 그대로입니다. 검증은 gcc -Wall -Wextra 무경고 컴파일, 그리고 헬퍼를 따로 떼어 실행해서 확인했습니다. 타임아웃은 sleep 30 을 2초에 -2 로 끊고 자식 정리, 없는 실행파일 127, pacman/apt argv 조립, 재시도 캐시, 킬스위치, 힌트 판별까지 실제로 돌려 봤습니다. 실제 apt 로 돌려보니 -o DPkg::Lock::Timeout=60 도 파싱을 통과해 의존성 해석까지 들어갔습니다. 한 가지 확인해 두실 점은 dnf 패키지명입니다. pacman/apt 이름은 기존 코드에 있던 것을 그대로 썼지만 dnf 쪽( libguestfs-tools , virt-install )은 노드 구성에 없는 경로라 검증하지 못했습니다. 틀려도 설치 실패 사유가 그대로 올라오니 그때 고치시면 됩니다.