Ansible设置GraalVM Java17为默认版本时权限报错如何解决
问题根因
修改系统全局alternatives配置属于系统级操作,需要root权限才能写入/var/lib/dpkg/alternatives/目录。community.general.alternatives模块本身不内置sudo提权参数——Ansible的提权逻辑是在模块调用层面统一实现的,不需要单独给单个模块配置sudo相关选项。
修复方法
- 给目标任务添加Ansible原生提权参数
become: true,让任务以root身份执行即可解决权限问题,修改后的任务配置如下:
- name: Make GraalVM Java as the selected version become: true community.general.alternatives: name: java path: '{{ graalvm_home }}/bin/java'
- 如果整个playbook的任务都需要系统级操作权限,可以直接在playbook的顶层配置、对应主机组/主机的inventory变量中全局设置
become: true,不用给每个任务单独加参数。 - 如果当前执行用户的sudo需要密码验证,执行playbook时追加
-K参数即可交互式输入sudo密码;也可以提前在inventory中配置ansible_become_password变量,注意该变量需要用Ansible Vault加密存储,禁止明文写在配置文件中。
注意:不要通过手动修改
/var/lib/dpkg/alternatives/目录的所有者、读写权限的方式绕过提权,会破坏dpkg包管理器的原有权限逻辑,后续系统更新、安装/卸载其他Java相关包时可能出现配置异常。
内容的提问来源于stack exchange,提问作者heuristic123
相关产品推荐
相关产品推荐

