如何通过AWS EC2用户数据(user data)自动化预安装sbt
问题核心原因
- EC2用户数据默认以root用户身份执行,直接运行sdkman安装脚本时,安装路径默认取当前用户的
$HOME目录,root的HOME默认指向/root或/路径,因此不会生成到ec2-user的家目录下 - sdkman初始化脚本内置会读取当前执行用户的
$HOME路径拼接.sdkman目录,就算手动指定根目录下的初始化脚本,只要执行用户是ec2-user,脚本内部还是会自动补全/home/ec2-user前缀,因此触发路径不存在报错 - 额外问题:你之前的用户数据脚本重复声明了
#!/bin/bash,也会导致执行逻辑异常
可行自动化安装方案
直接使用如下完整用户数据脚本即可实现sbt自动安装:
#!/bin/bash # 安装sdkman依赖组件 yum install -y tar unzip gzip # 切换到ec2-user上下文安装sdkman,强制指定安装路径 runuser -l ec2-user -c 'export SDKMAN_DIR="/home/ec2-user/.sdkman" && curl -s "https://get.sdkman.io" | bash' # 执行sdkman初始化并安装最新版sbt runuser -l ec2-user -c 'source "/home/ec2-user/.sdkman/bin/sdkman-init.sh" && sdk install sbt' # 可选:将sdkman初始化配置写入bashrc,后续ssh登录自动加载环境变量 runuser -l ec2-user -c 'echo "source /home/ec2-user/.sdkman/bin/sdkman-init.sh" >> ~/.bashrc'
验证方法
实例启动完成后,以ec2-user身份ssh登录实例,执行sbt about,正常返回sbt版本信息即代表安装成功。
内容的提问来源于stack exchange,提问作者MJey
相关产品推荐
相关产品推荐

