Alpine Linux 3.12.0 -> NFSMount falla debido a que rpc.statd no se inicia

Alpine Linux 3.12.0 -> NFSMount falla debido a que rpc.statd no se inicia

He buscado bastante y encontré problemas similares, pero ninguno con soluciones que parezcan funcionar para mí.

Estoy ejecutando un Alpine LXC en Proxmox. Son contenedores privilegiados y los montajes NFS están habilitados.

Puedo montar manualmente mi recurso compartido NFS mediante el comando de montaje. Desde entonces agregué el montaje a mi /etc/fstab y está funcionando, excepto al reiniciar.

Leí que necesitaba iniciar/habilitar el servicio nfsmount para manejar eso en el arranque. Sin embargo, al intentar habilitar ese servicio me encuentro con lo siguiente.

 * 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

Al comprobar el directorio /usr/sbin se muestra que no hay rpc.statd. El repositorio de Alpine muestra que debe incorporarse cuando se instala nfs-utils, los otros directorios rpc sí.

Agregué el repositorio para una versión anterior de Alpine e instalé nfs-utils revertidos. Esto me proporciona con éxito el archivo rpc.statd en /usr/sbin pero aún no se puede iniciar.

Respuesta1

Entonces no resolví el problema de raíz, nfsmount todavía no se inicia.

Sin embargo, para cualquiera que busque una forma de montar automáticamente recursos compartidos NFS dentro de un contenedor LXC, tengo una solución.

Primero intenté agregar un script a la ubicación if-up.d pero parece que los contenedores LXC no inician todas las secciones de inicio que haría una instalación típica.

Mi solución fue habilitar el servicio local.d con rc-update agregar valor predeterminado local

Luego coloqué un archivo en /etc/local.d/ llamado 'fstab.local' como un script bash que llama a la opción mount -a después de verificar si la interfaz de red está activa.

Respuesta2

Respuesta un poco anticuada, pero aplicable.

Para poder iniciar NFS automáticamente, Alpine necesita "capacidades de archivo" que se incluyen de forma predeterminada en el archivo /usr/share/lxc/config/alpine.common.conf.

lxc.cap.drop = setpcap

Consulte man capabilitiespara obtener una explicación de los bits de capacidades. Hay un par de formas de solucionar este problema: puede actualizar el archivo alpine.common.conf comentando la línea anterior (mi elección ya que la mayoría de mis contenedores alpine usan NFS), pero tenga en cuenta que una actualización lo restablecerá, así que Tendrá que recordar verificar/cambiar el archivo después de la actualización, o puede modificar el archivo .conf de los contenedores individuales, que debe encontrarse en /etc/pve/lxc/####.conf donde #### es el contenedor. identificación. Debe restablecer las capacidades y luego volver a eliminarlas según las configuraciones común y alpina. Utilicé lo siguiente para hacer esto cuando hice los archivos individuales, estaba almacenado como /usr/local/bin/alpine-enable-nfs.sh en mi sistema, por lo que podía escribir alpine-enable-nsf.sh 1492y el contenedor 1492 tendría las capacidades configuradas para permitir 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}"

Al momento de escribir, esto debería agregar lo siguiente a la configuración de su contenedor:

# 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

Tenga en cuenta que la línea setpcap está comentada (# al inicio)

Deberá DETENER e INICIAR sus contenedores para que esto surta efecto (reiniciar un contenedor no recogerá el cambio, debe detenerse y luego iniciarse nuevamente).

Algunas personas sugieren que la forma "correcta" de hacer las cosas es montar el recurso compartido NFS en el host, pero para mí eso es problemático ya que tengo un par de docenas de contenedores alpinos que montan diferentes recursos compartidos NFS desde algunos servidores diferentes para diversos usos. incluidos algunos que no están disponibles directamente para el anfitrión, de ahí este enfoque.

información relacionada