✍️

備忘録:Ansible PlaybookによるRaspberry Pi 5のロケール設定とDockerインストールの自動化

に公開

Ansible PlaybookによるRaspberry Pi 5の自動設定の備忘録。

1. 動作環境

  • macOS : 15.7.3
  • Raspberry Pi OS : Debian 13 Trixie
  • ansible : 11.8.0

2. 概要

Ansibleを使ってRaspberry Pi 5の以下の設定を自動化する。

  • ロケール(ja_JP.UTF-8)の設定
  • Dockerのインストール
  • piユーザーのdockerグループへの追加

3. 事前準備

  • Ansibleのインストール
    以下の公式サイトを参考にAnsibleをインストールする。

  • Raspberry Pi OSのインストール
    Raspberry piにSSHでリモートログインできる状態にする。以下の手順を参照。

4. Ansible Playbookによる自動化

以下の2つのファイルを準備してansible-playbookコマンドを実行する。

  • インベントリー
  • Playbook

4.1. インベントリーの記述

対象サーバの一覧(イベントリー)を記述する。

hosts.ini
[RPi5]
raspberrypi5.local ansible_user=pi ansible_ssh_private_key_file=~/.ssh/id_raspberrypi ansible_python_interpreter=/usr/bin/python3
  • raspberrypi5.local
    対象サーバのホスト名
  • ansible_user=pi
    対象サーバへ接続するユーザー名
  • ansible_ssh_private_key_file=~/.ssh/id_raspberrypi
    対象サーバへの接続用ssh秘密鍵
  • ansible_python_interpreter=/usr/bin/python3
    対象サーバ側の設定を行うPythonのパス

4.2. Playbookの記述

対象サーバで実行するタスクをPlaybookに記述する。

playbook.yml
---
- name: Raspberry Pi Setup (Update, Locale, and Docker)
  hosts: RPi5
  become: true

  tasks:
    # 1. パッケージの更新
    - name: Update and upgrade apt packages
      ansible.builtin.apt:
        update_cache: true
        upgrade: full
        autoremove: true

    # 2. ja_JP.UTF-8の生成
    - name: Generate ja_JP.UTF-8
      community.general.locale_gen:
        name: ja_JP.UTF-8
        state: present
      register: locale_gen

    # 3. デフォルトロケールの設定
    - name: Set default system locale to ja_JP.UTF-8
      ansible.builtin.lineinfile:
        path: /etc/default/locale
        regexp: '^LANG='
        line: 'LANG=ja_JP.UTF-8'

    # 4. 旧バージョンのDocker関連パッケージの削除
    - name: Remove old Docker related packages
      ansible.builtin.apt:
        name:
          - docker.io
          - docker-compose
          - docker-doc
          - podman-docker
          - containerd
          - runc
        state: absent

    # 5. Dockerのインストールに必要なパッケージの追加
    - name: Install dependencies for Docker
      ansible.builtin.apt:
        name: [ca-certificates, curl]
        state: present

    # 6. keyrings ディレクトリの作成
    - name: Create keyrings directory
      ansible.builtin.file:
        path: /etc/apt/keyrings
        state: directory
        mode: '0755'

    # 7. Docker GPG key のダウンロード
    - name: Download Docker GPG key
      ansible.builtin.get_url:
        url: https://download.docker.com/linux/debian/gpg
        dest: /etc/apt/keyrings/docker.asc
        mode: '0644'

    # 8. Dockerリポジトリの追加 (DEB822形式)
    - name: Add Docker repository to sources.list.d
      ansible.builtin.copy:
        dest: /etc/apt/sources.list.d/docker.sources
        mode: '0644'
        content: |
          Types: deb
          URIs: https://download.docker.com/linux/debian
          Suites: {{ ansible_distribution_release }}
          Components: stable
          Signed-By: /etc/apt/keyrings/docker.asc

    # 9. Dockerのインストール
    - name: Install Docker CE and plugins
      ansible.builtin.apt:
        name:
          - docker-ce
          - docker-ce-cli
          - containerd.io
          - docker-buildx-plugin
          - docker-compose-plugin
        update_cache: true
        state: present

    # 10. piユーザーのdockerグループへの追加(sudoを不要にする)
    - name: Add user to docker group
      ansible.builtin.user:
        name: pi
        groups: docker
        append: true

4.3. ansible-playbookコマンドの実行

以下のコマンドを実行する。

$ ansible-playbook -i ./hosts.ini ./playbook.yml

Discussion