Alpine Linux 3.12.0 -> rpc.statd가 시작되지 않아 NFSMaunt가 실패함

Alpine Linux 3.12.0 -> rpc.statd가 시작되지 않아 NFSMaunt가 실패함

나는 꽤 많이 검색하여 비슷한 문제를 발견했지만 나에게 도움이 되는 수정 사항은 없습니다.

저는 Proxmox에서 Alpine LXC를 실행하고 있습니다. 권한 있는 컨테이너이며 NFS 마운트가 활성화되어 있습니다.

mount 명령을 통해 NFS 공유를 수동으로 마운트할 수 있습니다. 이후 /etc/fstab에 마운트를 추가했는데 재부팅을 제외하고는 작동합니다.

부팅 시 이를 처리하려면 nfsmount 서비스를 시작/활성화해야 한다는 내용을 읽었습니다. 그러나 해당 서비스를 활성화하려고 하면 다음과 같은 문제가 발생합니다.

 * Starting NFS statd ...
 * start-stop-daemon: failed to start `/usr/sbin/rpc.statd'                                                                                                         [ !! ]
 * ERROR: rpc.statd failed to start
 * ERROR: cannot start nfsmount as rpc.statd would not start

/usr/sbin 디렉토리를 확인하면 rpc.statd가 없음을 알 수 있습니다. Alpine용 저장소는 nfs-utils가 설치될 때 가져와야 하며 다른 rpc 디렉토리도 가져와야 함을 보여줍니다.

이전 Alpine 버전에 대한 저장소를 추가하고 롤백된 nfs-utils를 설치했습니다. 그러면 /usr/sbin에 rpc.statd 파일이 성공적으로 제공되지만 여전히 시작되지 않습니다.

답변1

그래서 근본적인 문제를 해결하지 못했습니다. nfsmount는 여전히 시작되지 않습니다.

그러나 LXC 컨테이너 내에서 NFS 공유를 자동 마운트하는 방법을 찾는 사람에게는 해결책이 있습니다.

먼저 if-up.d 위치에 스크립트를 추가하려고 시도했지만 LXC 컨테이너는 일반적인 설치와 같은 모든 init 섹션을 실행하지 않는 것 같습니다.

내 솔루션은 rc-update add local default를 사용하여 local.d 서비스를 활성화하는 것이었습니다.

그런 다음 네트워크 인터페이스가 작동하는지 확인한 후 mount -a 옵션을 호출하는 bash 스크립트로 'fstab.local'이라는 파일을 /etc/local.d/에 배치했습니다.

답변2

약간 오래된 답변이지만 적용 가능합니다.

NFS를 자동으로 시작하려면 Alpine에 기본적으로 /usr/share/lxc/config/alpine.common.conf 파일에 삭제되는 "파일 기능"이 필요합니다.

lxc.cap.drop = setpcap

man capabilities기능 비트에 대한 설명은 을 참조하십시오 . 이 문제를 해결하는 방법에는 몇 가지가 있습니다. 위 줄을 주석 처리하여 alpine.common.conf 파일을 업데이트할 수 있습니다(대부분의 알파인 컨테이너가 NFS를 사용하기 때문에 선택). 하지만 업데이트하면 재설정되므로 주의하세요. 업데이트 후에 파일을 확인/변경해야 한다는 것을 기억해야 합니다. 또는 개별 컨테이너 .conf 파일을 수정할 수 있습니다. 이 파일은 /etc/pve/lxc/####.conf에서 찾을 수 있습니다. 여기서 ####은 컨테이너입니다. ID. 기능을 재설정한 다음 공통 및 알파인 구성에 따라 기능을 다시 삭제해야 합니다. 개별 파일을 수행할 때 이 작업을 수행하기 위해 다음을 사용했습니다. 파일은 내 시스템에 /usr/local/bin/alpine-enable-nfs.sh로 저장되었으므로 입력할 수 있었고 alpine-enable-nsf.sh 1492컨테이너 1492는 허용하도록 설정된 기능을 갖게 됩니다. NFS:

#!/bin/bash
defdir=/usr/share/lxc/config
cfile=/etc/pve/lxc/${1}.conf
if [ ! -r ${cfile} ] ; then
  echo "usage: ${0##*/} IDNO"
  exit
fi
if grep -q "lxc.cap.drop" ${cfile} ; then
  echo "File has lxc.cap.drop configurations already"
  exit
fi
if ! grep -q "ostype: alpine" ${cfile} ; then
  echo "Container ID: ${1} is not alpine."
  exit
fi
echo "# Reset capabilities" >> ${cfile}
echo "lxc.cap.drop:" >> ${cfile}
grep cap ${defdir}/common.conf >> ${cfile}
sed -n "/cap/{/setpcap/s/^/#/;p}" ${defdir}/alpine.common.conf >> ${cfile}
grep cap ${cfile}
echo -e "\nNFS should now be available in container #${1}"

글을 쓰는 시점에서 컨테이너 구성에 다음이 추가되어야 합니다.

# Reset capabilities
lxc.cap.drop:
# Drop some harmful capabilities
lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
# Drop another (potentially) harmful capabilities.
lxc.cap.drop = audit_write
lxc.cap.drop = ipc_owner
lxc.cap.drop = mknod
#lxc.cap.drop = setpcap
lxc.cap.drop = sys_nice
lxc.cap.drop = sys_pacct
lxc.cap.drop = sys_rawio
lxc.cap.drop = sys_resource
lxc.cap.drop = sys_tty_config
lxc.cap.drop = syslog
lxc.cap.drop = wake_alarm

setpcap 줄은 주석 처리되어 있습니다(시작 시 #).

이를 적용하려면 컨테이너를 중지하고 시작해야 합니다(컨테이너를 재부팅해도 변경 사항이 적용되지 않으므로 중지했다가 다시 시작해야 합니다).

어떤 사람들은 작업을 수행하는 "올바른" 방법이 호스트에 NFS 공유를 마운트하는 것이라고 제안하지만 나에게는 다양한 용도로 몇 가지 다른 서버에서 서로 다른 NFS 공유를 마운트하는 수십 개의 알파인 컨테이너가 있기 때문에 문제가 됩니다. 일부는 호스트에서 직접 사용할 수 없으므로 이 접근 방식을 사용합니다.

관련 정보