質問

質問

質問

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

アンサーブルマニュアル

アルマLinux 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

しかし、次のようにパッケージをインストールしようとすると

通常のユーザーとしてこれを実行していますが、システムディレクトリにインストールしようとするとこれが問題です。

システム全体にインストールしますか?次に、rootとしてこれを行います。そのユーザー一人にのみパッケージが必要ですか?その後、システム全体にインストールしないでください。

おすすめ記事