265 lines
8.4 KiB
YAML
Executable File
265 lines
8.4 KiB
YAML
Executable File
# -*- mode: yaml; indent-tabs-mode: nil; tab-width: 2; coding: utf-8-unix -*-
|
||
|
||
---
|
||
|
||
- name: "DEBUG: base bootstrap.yml inventory_hostname"
|
||
debug:
|
||
verbosity: 1
|
||
msg: "DEBUG: Including bootstrap bootstrap.yml"
|
||
|
||
# have to install sudo
|
||
|
||
# N.B. raw or delegate_to: localhost only until bootstrap is complete!!!
|
||
|
||
- name: boostrap bootstrap_chroot_kicksecure.bash
|
||
shell: |
|
||
{{USR_LOCAL}}/sbin/bootstrap_chroot_kicksecure.bash
|
||
args:
|
||
creates: "{{USR_LOCAL}}/etc/ssl/cacert-testforge.pem"
|
||
delegate_to: localhost
|
||
when:
|
||
- ansible_connection|default('') == 'chroot'
|
||
- inventory_hostname == 'linuxKick150154'
|
||
- ansible_remote_addr != ''
|
||
check_mode: false
|
||
|
||
# cache='none' io='native'
|
||
|
||
- name: bootstrap env
|
||
set_fact:
|
||
proxy_env:
|
||
TERM: "linux"
|
||
shell_env:
|
||
TERM: "linux"
|
||
|
||
- block:
|
||
|
||
- name: bin/update_chroot.bash
|
||
shell: |
|
||
root="{{ ansible_remote_addr }}"
|
||
[ -n "$root" ] || \
|
||
{ echo "ERROR: ansible_remote_addr is undefined" ; exit 1 ; }
|
||
[ -d "$root/" ] || \
|
||
{ echo "ERROR: directory not found: $root" ; exit 2 ; }
|
||
|
||
if [ -x {{VAR_LOCAL}}/sbin/update_chroot.bash ]; then
|
||
{{VAR_LOCAL}}/sbin/update_chroot.bash "$root/" pwd || \
|
||
{ echo ERROR: {{VAR_LOCAL}}/sbin/update_chroot.bash $root/ pwd $? ; exit 3 ; }
|
||
elif [ -x {{USR_LOCAL}}/sbin/base_chroot.bash ]; then
|
||
{{USR_LOCAL}}/sbin/base_chroot.bash "$root/" pwd || \
|
||
{ echo ERROR: {{USR_LOCAL}}/sbin/base_chroot.bash "$root/" pwd $? ; exit 4 ; }
|
||
fi
|
||
|
||
i=$( df -a | sed -e 's/.* //'| sort -u | grep -c "$root" )
|
||
if [ $i -lt 3 ] ; then
|
||
echo "WARN: first run to establish bind mounts - bin/update_chroot.bash $root"
|
||
fi
|
||
exit 0
|
||
# FixMe: 3 stderr: '/usr/bin/env: ‘a’: No such file or directory'
|
||
ignore_errors: true
|
||
|
||
- name: "mount mountpoint dirs"
|
||
shell: |
|
||
df -a | grep -q {{item}} || \
|
||
mount -o bind {{item}} {{ansible_remote_addr}}/{{item}}
|
||
exit 0
|
||
args:
|
||
creates: "{{ansible_remote_addr}}/{{item}}"
|
||
with_items: "{{BASE_HOST_CONTAINER_MOUNTS|default([])}}"
|
||
when: "BASE_HOST_CONTAINER_MOUNTS|default([])|length > 0"
|
||
|
||
delegate_to: localhost
|
||
when:
|
||
- ansible_connection|default('') == 'chroot'
|
||
- ansible_remote_addr != ''
|
||
check_mode: false
|
||
|
||
- name: boostrap bootstrap_proxy.bash
|
||
raw: |
|
||
export TERM=linux
|
||
export http_proxy="{{ http_proxy }}"
|
||
export https_proxy="{{ https_proxy }}"
|
||
export socks_proxy="{{ socks_proxy }}"
|
||
export no_proxy="{{no_proxy}}"
|
||
{{lookup('file', BASE_SCRIPT_DIR+'/bootstrap_proxy.bash')}}
|
||
# >> {{ BASE_USR_LOCAL }}/tmp/bootstrap_proxy.log 2>&1 || exit 3
|
||
exit 0
|
||
args:
|
||
executable: /bin/bash
|
||
chdir: "{{ BASE_USR_LOCAL }}/"
|
||
when:
|
||
# FixMe: figure something better than wgetrc - /etc/apt/conf.d - not needed on kicksecure
|
||
- http_proxy != "" and https_proxy != ""
|
||
check_mode: false
|
||
ignore_errors: true
|
||
|
||
- name: boostrap bootstrap_wheels.bash
|
||
copy:
|
||
src: "{{USR_LOCAL}}/sbin/bootstrap_wheels.bash"
|
||
dest: "{{USR_LOCAL}}/sbin/bootstrap_wheels.bash"
|
||
mode: '0755'
|
||
|
||
- name: boostrap bootstrap_wheels.bash raw
|
||
script: "{{BASE_SCRIPT_DIR+'/bootstrap_wheels.bash'}}"
|
||
# "{{lookup('file', BASE_SCRIPT_DIR+'/bootstrap_wheels.bash')}}"
|
||
# >> {{ BASE_USR_LOCAL }}/tmp/bootstrap_wheels.log 2>&1 || exit 3
|
||
args:
|
||
executable: /bin/bash
|
||
chdir: "{{ BASE_USR_LOCAL }}/"
|
||
creates: "{{ BASE_USR_LOCAL }}/tmp/wheels/ansible-{{BOX_ANSIBLE_VERSION}}.tar.gz"
|
||
when:
|
||
- not ansible_check_mode
|
||
check_mode: false
|
||
ignore_errors: true
|
||
|
||
- name: /etc/hostname
|
||
raw: grep -q localhost /etc/hostname && echo {{inventory_hostname}} > /etc/hostname || true
|
||
when:
|
||
- ansible_distribution in ['Ubuntu', 'Debian', 'Devuan']
|
||
ignore_errors: true
|
||
check_mode: false
|
||
|
||
- name: "stat {{ BASE_USR_LOCAL }}/bin/python3.sh"
|
||
stat:
|
||
path: "{{ BASE_USR_LOCAL }}/lib/python{{BASE_PYTHON3_MINOR}}/site-packages/pip/__init__.py"
|
||
register: base_python3_sh_exists
|
||
when:
|
||
- not ansible_check_mode
|
||
check_mode: false
|
||
|
||
- name: boostrap bootstrap_pip_ansible.sh
|
||
# $https_proxy = http://localhost:9999 to prevent downloads - not
|
||
shell: |
|
||
cd "{{ BASE_USR_LOCAL }}"
|
||
export PYTHONPATH=''
|
||
export BOX_UBUNTU16_VAR_APT_ARCHIVES="{{BOX_UBUNTU16_VAR_APT_ARCHIVES|default('') }}"
|
||
export BOX_UBUNTU16_VAR_APT_ARCHIVES="{{ BOX_UBUNTU16_VAR_APT_ARCHIVES|default('') }}"
|
||
export BOX_DEBIAN10_VAR_APT_ARCHIVES="{{ BOX_UBUNTU16_VAR_APT_ARCHIVES|default('') }}"
|
||
export BOX_GENTOO_DISTFILES_ARCHIVES="{{ BOX_GENTOO_DISTFILES_ARCHIVES|default('') }}"
|
||
export BOX_BOXUSER_PIP_CACHE="{{ BOX_BOXUSER_PIP_CACHE }}"
|
||
export BOX_ROOT_PIP_CACHE="{{ BOX_ROOT_PIP_CACHE }}"
|
||
export PLAY_PIP_CERT="{{ PLAY_CA_CERT }}"
|
||
export LOG_DIR="{{ BASE_USR_LOCAL }}/tmp"
|
||
export BASE_USER_NAME="{{ BASE_USER_NAME }}"
|
||
export BASE_USER_HOME="{{ BASE_USER_HOME }}"
|
||
export BASE_ALSO_GROUP="{{ BASE_ALSO_GROUP }}"
|
||
export http_proxy="{{ http_proxy }}"
|
||
export https_proxy="{{ https_proxy }}"
|
||
export socks_proxy="{{ socks_proxy }}"
|
||
export no_proxy="{{no_proxy}}"
|
||
ls {{BASE_SCRIPT_DIR}}
|
||
{{BASE_SCRIPT_DIR+'/bootstrap_pip_ansible.bash'}}
|
||
# "{{lookup('file', BASE_SCRIPT_DIR+'/bootstrap_pip_ansible.bash')}}"
|
||
# >> {{ BASE_USR_LOCAL }}/tmp/bootstrap_pip_ansible.log 2>&1 || exit 3
|
||
exit 0
|
||
|
||
when:
|
||
- not ansible_check_mode
|
||
- not base_python3_sh_exists.stat.exists
|
||
- false
|
||
#hangs
|
||
register: bootstrap_pip
|
||
#? check_mode: false
|
||
|
||
- name: rc boostrap wheels.sh and ansible.sh
|
||
debug:
|
||
msg: "WARN: boostrap wheels.sh and ansible.sh FAILED - {{bootstrap_pip.stdout}} - {{ bootstrap_pip.stderr}}"
|
||
when:
|
||
- not ansible_check_mode
|
||
- bootstrap_pip is failed
|
||
ignore_errors: true
|
||
|
||
# N.B. raw or delegate_to: localhost only until bootstrap is complete!!!
|
||
|
||
- name: test boostrap wheels.sh
|
||
shell: |
|
||
LELTS=""
|
||
PYVER=3
|
||
if [ -f {{ BASE_USR_LOCAL }}/bin/python$PYVER.sh ] ; then
|
||
{{ BASE_USR_LOCAL }}/bin/python$PYVER.sh --version || exit 2$PYVER$?
|
||
fi
|
||
exit 0
|
||
|
||
- block:
|
||
|
||
- name: "make /etc/portage dirs"
|
||
file:
|
||
path: "/etc/portage/{{item}}"
|
||
state: directory
|
||
mode: 0755
|
||
with_items:
|
||
#? make.profile
|
||
- package.accept_keywords
|
||
- package.license
|
||
- package.mask
|
||
- package.unmask
|
||
- package.use
|
||
- postsync.d
|
||
- profile
|
||
- repo.postsync.d
|
||
- repos.conf
|
||
- savedconfig
|
||
- sets
|
||
|
||
# really bootstrap
|
||
# - include_tasks: Gentoo/Funtoo/portage.yml
|
||
|
||
when:
|
||
- "ansible_distribution == 'Gentoo'"
|
||
|
||
- block:
|
||
|
||
- name: "make /mnt mountpoints"
|
||
# maybe prologue
|
||
shell: |
|
||
[ -d /mnt ] || mkdir /mnt || exit 1
|
||
for elt in {{ BASE_HOST_CONTAINER_MOUNTS|join(' ') }} ; do
|
||
[ -d $elt ] || mkdir $elt
|
||
done
|
||
exit 0
|
||
# with_items: "{{ BASE_HOST_CONTAINER_MOUNTS }}"
|
||
when: BASE_HOST_CONTAINER_MOUNTS|default([])|length > 0
|
||
|
||
- name: HOST_MOUNT_SYMLINKS
|
||
shell: |
|
||
{% for elt in HOST_MOUNT_SYMLINKS %}
|
||
[ -h {{ elt.to }} ] && continue
|
||
[ -d {{ elt.to }} ] && echo "WARN: {{ elt.to }} exists as a directory" && continue
|
||
parent=`dirname {{ elt.to }}`
|
||
[ -d $parent ] || mkdir -p $parent
|
||
#? -h-e
|
||
[ -h {{ elt.to }} ] || \
|
||
ln -s {{ elt.from }} {{ elt.to }}
|
||
{% endfor %}
|
||
# FixMe:
|
||
ignore_errors: true
|
||
when:
|
||
- HOST_MOUNT_SYMLINKS|default([])|length > 0
|
||
# actually the condition is weaker: anything with mounts - sshfs vagrant/virtualbox kvm? lxd?
|
||
- BASE_HOST_CONTAINER_MOUNTS|default([])|length > 0
|
||
|
||
# FixMe: make this a box_command for use with packer
|
||
- name: HOST_MOUNT_SYMLINK_CONTENTS
|
||
shell: |
|
||
{% for elt in HOST_MOUNT_SYMLINK_CONTENTS %}
|
||
[ -n "{{ elt.to }}" ] || continue
|
||
[ -d "{{ elt.to }}" ] || mkdir -p "{{ elt.to }}"
|
||
find -L "{{ elt.to }}" -type f -delete
|
||
for file in "{{ elt.from }}/"* ; do
|
||
[ -e "$file" ] || continue
|
||
[ -d "$file" ] && continue
|
||
base=`basename "$file"`
|
||
[ -e "{{ elt.to }}/$base" ] && continue
|
||
ln -s "$file" "{{ elt.to }}"
|
||
done
|
||
{% endfor %}
|
||
exit 0
|
||
when:
|
||
- HOST_MOUNT_SYMLINK_CONTENTS|default({})|length > 0
|
||
# FixMe:
|
||
ignore_errors: true
|
||
|
||
when:
|
||
# actually the condition is weaker: anything with mounts - sshfs vagrant/virtualbox kvm? lxd?
|
||
- BASE_HOST_CONTAINER_MOUNTS|default([])|length > 0
|