Puse los siguientes comandos en los datos de usuario de un EC2 que ejecuta RedHat 8 AMI ( ami-0fc841be1f929d7d1
), cuando se ejecutan, mkdir intenta crear .kube en la raíz, lo que me parece que $HOME
no está configurado en ese momento.
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Los siguientes son registros de /var/log/user-data.log
+ mkdir -p /.kube + sudo cp -i /etc/kubernetes/admin.conf /.kube/config ++ id -u ++ id -g + sudo chown 0:0 /.kube/config
Cuando hago SSH a la instancia, $HOME
se establece correctamente en /home/ec2-user.
¿Podría aconsejarme qué hice mal aquí?
Gracias
$HOME
hace referencia al directorio de inicio del usuario que ha iniciado sesión. Userdata se ejecuta bajo el usuario raíz, y el usuario raíz $HOME
es /
. Ese es el resultado que estás viendo.
En lugar de la variable $HOME
, su secuencia de comandos debe hacer referencia a /home
como un literal.
Consulte https://superuser.com/questions/271925/where-is-the-home-environment-variable-set
Está ejecutando como sudo, que se sabe que cambia las variables de entorno que se establecen con el shell de sus usuarios (como $HOME
), así como el contexto de shell basado como ssh-agent
.
En general, puede asegurarse de que esto persista cuando ejecuta sudo agregándolo a la configuración de env_keep
en su configuración de sudoers agregando la siguiente línea dentro de /etc/sudoers
. Hay más información disponible aquí , tenga cuidado al modificar este archivo.
Defaults env_keep=HOME
De lo contrario, si no desea realizar el cambio anterior, asegúrese de tener los permisos para llevarlo a cabo sin ejecutar sudo
o pasar un valor de ruta absoluto .
En general, me mantendría alejado de los datos de usuario para la configuración importante de todos modos, en lugar de construir una AMI prefabricada con anticipación con la configuración que desee, utilizando una herramienta de configuración como Ansible , Chef , Puppet .
Alternativamente , como esto está dentro de los Datos de usuario de todos modos, es poco probable que ya haya configurado la configuración de sudoers, en su lugar, solo debe especificar la ruta.
Cuando se aprovisiona su servidor EC2, el script de datos de usuario se ejecuta como raíz de usuario, por lo que $HOME está vacío. Lo que podría hacer es definir HOME env var en la parte superior de su secuencia de comandos de datos de usuario, así (inserte el directorio de inicio de su usuario aquí):
export HOME=/home/ubuntu
Lo probé y funciona (instalé NVM, SDKMAN, sbt, java, git, docker; todo funciona bien). Es posible que deba hacer algunos chown al final de su secuencia de comandos de datos de usuario para cambiar el propietario de algunos archivos a su usuario. Por ejemplo, si sus datos de usuario configuran algunos archivos en su directorio de inicio:
chown ubuntu ~/.foo/bar.properties