질문

질문

질문

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

하지만 다음을 사용하여 패키지를 설치하려고 하면

일반 사용자로 이 작업을 수행하고 있지만 시스템 디렉터리에 설치하려고 하면 이것이 문제입니다.

시스템 전체에 설치하시겠습니까? 그런 다음 루트로 이 작업을 수행하십시오. 해당 사용자 한 명에게만 패키지가 필요합니까? 그런 다음 시스템 전체에 설치하지 마십시오.

관련 정보