질문
ansible을 사용하여 가상 상자를 구성하고 싶습니다. 이 상자에는 많은 일이 진행되고 있지만 R을 설치해야 하고 기본 R에 포함되지 않은 일부 특정 패키지가 필요합니다.
아래 제공된 vagrant 파일을 사용하여 새 가상 머신을 만든 다음 yum을 사용하여 ansible, epel-release 및 git을 설치했습니다. 그런 다음 해당 가상 머신에서 아래 제공된 "Alma Linux 8" 및 "Docker" 플레이북을 사용하는데, 문제가 있다고 생각되는 플레이북이 있습니다.
그런 다음 이 플레이북을 실행하여 R을 설치했습니다.
---
- name: "Setup R on the local machine"
hosts: localhost
connection: local
tasks:
# Update all installed packages
- name: Update all packages to their latest version
become: yes
ansible.builtin.package:
name: "*"
state: latest
# Install EPEL to get extra packages
- name: Install EPEL
become: yes
ansible.builtin.package:
name: epel-release
state: latest
# Enable the Code Ready Builder (CRB) repository
- name: Install utilities to enable package repositories
become: yes
ansible.builtin.package:
name: yum-utils
state: latest
- name: Enable the PowerTools repository
become: yes
shell: dnf config-manager --set-enabled powertools
# Install R
- name: Install R
become: yes
ansible.builtin.package:
name: R
state: latest
이 플레이북을 실행한 후 다음 명령을 실행할 수 있습니다.
Rscript --slave --no-save --no-restore-history -e "print('Test')"
[1] "Test"
R이 적어도 어느 정도 작동하고 있음을 보여줍니다. 하지만 이를 사용하여 패키지를 설치하려고 하면 다음 오류가 발생합니다.
Rscript --slave --no-save --no-restore-history -e "install.packages('tidyverse')"
"/usr/lib64/R/library"에 패키지 설치("lib"가 지정되지 않았기 때문에) install.packages("tidyverse")의 경고: "lib = "/usr/lib64/R/library""는 허용되지 않습니다. install.packages("tidyverse")의 쓰기 오류: 패키지를 설치할 수 없습니다. 실행이 중지되었습니다.
고치려고 노력하다
나는 위의 R 플레이북 끝에 다음 줄을 추가하여 이 문제를 해결하려고 했습니다.
- name: Make directory writable
become: yes
file:
path: /usr/lib64/R/library
mode: '0777'
- name: Make directory writable
become: yes
file:
path: /usr/share/doc/R/html
mode: '0777'
문제의 디렉토리를 수동으로 읽을 수 있도록 만들었지만 작동하지 않았습니다.
참조 문서
길 잃은 파일
Vagrant.configure("2") do |config|
config.vm.box = "almalinux/8"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = 2
end
end
앤서블 매뉴얼
알마리눅스 8
---
- name: "Setup AlmaLinux 8 on the local machine"
hosts: localhost
connection: local
tasks:
# Install the base operating systemctl
- name: Update all packages to their latest versions
become: yes
ansible.builtin.package:
name: '*'
state: latest
- name: Install virtual machine support
become: yes
ansible.builtin.package:
name: open-vm-tools
state: latest
# Install EPEL to get extra packages
- name: Install EPEL
become: yes
ansible.builtin.package:
name: epel-release
state: latest
루스트어바웃
---
- name: "Setup Docker on the local machine"
hosts: localhost
connection: local
tasks:
# Install Docker
- name: Uninstall any older versions of Docker
become: yes
ansible.builtin.package:
name:
- docker
- docker-client
- docker-client-latest
- docker-common
- docker-latest
- docker-latest-logrotate
- docker-logrotate
- docker-engine
state: absent
- name: Install yum-utils to install a new package repository
become: yes
ansible.builtin.package:
name: yum-utils
state: latest
- name: Install the Docker Repository
become: yes
shell: yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- name: Install Docker
become: yes
ansible.builtin.package:
name:
- docker-ce
- docker-ce-cli
- containerd.io
- docker-buildx-plugin
- docker-compose-plugin
state: latest
- name: Enable the docker service
become: yes
shell: systemctl enable docker
- name: Enable the containerd service
become: yes
shell: systemctl enable containerd
- name: Start the docker service
become: yes
shell: systemctl start docker
- name: Start the containerd service
become: yes
shell: systemctl start containerd
- name: Ensure docker group exists
become: yes
ansible.builtin.group:
name: docker
state: present
- name: Add the vagrant user to the docker group
become: yes
ansible.builtin.user:
name: vagrant
groups: docker
append: yes
답변1
하지만 다음을 사용하여 패키지를 설치하려고 하면
일반 사용자로 이 작업을 수행하고 있지만 시스템 디렉터리에 설치하려고 하면 이것이 문제입니다.
시스템 전체에 설치하시겠습니까? 그런 다음 루트로 이 작업을 수행하십시오. 해당 사용자 한 명에게만 패키지가 필요합니까? 그런 다음 시스템 전체에 설치하지 마십시오.