Essayez d'installer Git à partir des sources en utilisant les modules make et unarchive d'Ansible

■ Présentation

■ PlayBook pour installer Git à partir de la source

playbook.yml


---
- hosts: all
  remote_user: ec2-user
  become: true
  vars:
    version: 2.9.0
    prefix_dir: /usr/local
    src_dir: "{{ prefix_dir }}/src"
    bin_dir: "{{ prefix_dir }}/bin"
  tasks:
    - name: original git exist check
      stat: path={{ bin_dir }}/git
      register: exist_git

    - debug: msg="git not installed."
      when: exist_git.stat.exists == false

    - name: original git version check
      command: "{{ bin_dir }}/git --version warn=false"
      register: org_version
      changed_when: false
      when: exist_git.stat.exists == true

    - name: install dependences
      yum: name={{ item }}
      with_items:
        - curl-devel
        - expat-devel
        - gettext-devel
        - openssl-devel
        - zlib-devel
        - gcc
        - perl-ExtUtils-MakeMaker
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")

    - name: make download dir
      file: path={{ src_dir }} state=directory owner=root group=root mode=755
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")

    - name: download git version {{ version }}
      unarchive:
        src: https://www.kernel.org/pub/software/scm/git/git-{{ version }}.tar.gz
        dest: "{{ src_dir }}"
        copy: no
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")

    - name: make all
      make:
        chdir: "{{ src_dir }}/git-{{ version }}"
        target: all
        params:
          prefix: "{{ prefix_dir }}"
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")

    - name: make install
      make:
        chdir: "{{ src_dir }}/git-{{ version }}"
        target: install
        params:
          prefix: "{{ prefix_dir }}"
      when: (exist_git.stat.exists == false) or
            (exist_git.stat.exists == true and org_version.stdout != "git version {{ version }}")

L'exécution est la suivante.

$ ansible-playbook playbook.yml

Remarques

■ À propos du module de création et modifié

Le module make d'Ansible deviendra "chenged" chaque fois qu'il sera exécuté tel quel. Je veux qu'il soit «changé» lorsque j'exécute le PlayBook pour la première fois, mais je veux qu'il soit «ok» au lieu de «changé» lorsque je relance le même PlayBook. Cependant, si vous spécifiez changed_when: False, ce sera ʻok même si le changement a été effectué lors de la première exécution, vous devriez donc éviter de spécifier changed_when: False. Donc, cette fois, j'ai ajouté une fonction de vérification de version qui combine register et when`.

■ À propos de la combinaison du module de désarchivage et de https

La combinaison de «une archive» et de «https» était l'auteur-compositeur. Cela fonctionnait bien sur Amazon Linux, mais cela ne fonctionnait pas lorsque j'ai configuré le proxy dans un environnement authentifié par proxy. Probablement parce que vous n'avez pas spécifié d'invalider le certificat SSL. Le module ʻunarchivea une optionvalidate_certs, et c'est OK si vous spécifiez validate_crets = no, mais cette option n'est pas prise en charge sauf si c'est Ansible ver.2.2 ou une version ultérieure. Dans l'environnement avant Ansible ver.2.1, il était nécessaire de télécharger avec la combinaison de get_url, httpsetvalidate_crets = no`.

■ Conclusion

Cette fois, j'ai essayé d'installer Git à partir de la source, mais si vous installez un package qui n'est pas publié par rpm à partir de la source, il semble que ce PlayBook puisse être appliqué.

Eh bien.

Recommended Posts

Essayez d'installer Git à partir des sources en utilisant les modules make et unarchive d'Ansible
Compilez et installez Git à partir des sources.
Essayez de le faire avec GUI, PyQt en Python
Essayez d'utiliser pytest-Overview and Samples-
Essayez d'utiliser Amazon DynamoDB à partir de Python
Introduisez git depuis la source dans l'environnement Linux en utilisant wget avec des privilèges non root