created: 2023-05-20T02:50:52.739Z

[2023年版][ansible x Raspbian] golang のインストール

3年前とおなじことを今やる方法について。

golang は apt でインストールされるのだが、これで入る go はバージョンが古くて mackerel-plugins の中のものをビルドできなかったりする。

以前は apt で入れた古い go を使ってソースから新しい go を入れるということをやっていたが、いつのまにやら armv6l のビルド済みバイナリが配布されていたのでラズパイ上でビルドする必要がなくなっていた。wget して gunzip するだけでよい。

- name: Check go version
  shell: GOROOT=/opt/go /opt/go/bin/go version
  register: checked_go_version
  ignore_errors: true
- name: install go
  when: checked_go_version.rc != 0 or (go_version) not in checked_go_version.stdout
  block:
    - name: wget golang tar.gz
      ansible.builtin.shell: wget https://golang.org/dl/go{{ go_version }}.linux-armv6l.tar.gz
    - name: gunzip golang tar.gz
      ansible.builtin.shell: tar -C /opt -xzf go{{ go_version }}.linux-armv6l.tar.gz

参考

公式で案内されている方法。

その他

インストールしたバイナリを使って go install を実行する場合の ansible のタスク定義はこんな感じ。

  • GOROOT を定義して go install を実行する
  • GOBIN=/usr/local/bin として、PATHが通ったところにプラグインをインストールする
- name: go install mackerel plugins
  ansible.builtin.shell: "/opt/go/bin/go install github.com/{{ item }}@latest"
  environment:
    GOROOT: /opt/go
    GOBIN: /usr/local/bin
  with_items:
    - mackerelio/mackerel-agent-plugins/mackerel-plugin-linux
    - mackerelio/mackerel-agent-plugins/mackerel-plugin-json
    - mackerelio/mackerel-agent-plugins/mackerel-plugin-docker
    - mackerelio/mackerel-agent-plugins/mackerel-plugin-multicore
    - mackerelio/mackerel-agent-plugins/mackerel-plugin-inode
    - mackerelio/go-check-plugins/check-procs
    - mackerelio/go-check-plugins/check-ntpoffset
UXデザインの法則 ―最高のプロダクトとサービスを支える心理学
[ad] UXデザインの法則 ―最高のプロダクトとサービスを支える心理学
Jon Yablonski, 相島 雅樹 (単行本(ソフトカバー))