dimanche 16 octobre 2022

Closed [ppprod] need of update

need of update
By pp-prod
Assigned to

need of update

Labeled:

October 16, 2022 at 04:58PM
via GitHub https://ift.tt/cyGZIU6

samedi 15 octobre 2022

Closed [pp-prod.github.io] recup du site

recup du site
By anon-admin
Assigned to



Labeled:

October 15, 2022 at 06:08PM
via GitHub https://ift.tt/7MijJuf

mercredi 18 mai 2016

experience as a DomainServer ( cluster_config master mastering )

Les idées en vrac avant de se lancer

  • experience contient les manifest puppet pour l'install en local de ansible, et la mise en place du playbook de bootstap (attention, parti de zéro, il faut que le ansible soit lancé avec un script expect).
  • Le tout doit être hébergé sur cluster_config.
  • utiliser nvogel/puppet_ansible et surcharger pour configurer automatiquement le hiera de ce module.
Show time

On commence par quelques simples essais pour vérifier les paramètres de la ligne de commande.
J'arrive à lancer ce que je veux avec les commandes suivantes

root@experience:~# cat ./cluster_inventory
192.168.1.6
root@experience:~# cat ./playbook_simple.yaml
---

- hosts: 192.168.1.6
  tasks:
  - name: apt-get update
    apt: update_cache=yes
  - name: apt-get install -y puppet git expect
    apt: name=puppet,git,expect state=latest dpkg_options='force-confold,force-confdef'

root@experience:~# ansible-playbook -u root -i ./cluster_inventory -k ./playbook_simple.yaml
SSH password:
SUDO password[defaults to SSH password]:

PLAY [192.168.1.6] *************************************************************

TASK [setup] *******************************************************************
fatal: [192.168.1.6]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", "module_stdout": "/bin/bash: /usr/bin/python: No such file or directory\r\n", "msg": "MODULE FAILURE", "parsed": false}

NO MORE HOSTS LEFT *************************************************************
        to retry, use: --limit @./playbook_simple.retry

PLAY RECAP *********************************************************************
192.168.1.6                : ok=0    changed=0    unreachable=0    failed=1

Mais voila, Hahahaaaa, Mort De Rire !!!! comme c'est d'la merde ansible !!! En fait, on a le même problème que puppet : il faut un minimum d'install, ssh ne suffit pas du tout !!!

Il faut installer python pour pouvoir faire du ansible !

Je vais donc avoir un script complètement hybrid !! Un expect qui lance du shell, puis du ansible. Le ansible perd tout sont intérêt. autant uploaded un shell et le lancer. Aller, on laisser tomber ansible. Ce produit perd d'un coup beauuuucoup de son intérêt !!

bon j'ai trouvé un set potable

root@experience:~# cat bootstrap.sh
#!/bin/bash

if test $( whoami ) = root ; then

    APT_GET_OPTIONS="-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" -y"
    GITREPO_NAME="cluster_config"
    GITREPO_DOMAIN="bitbucket.org"
    GITREPO_USER="dbouwyn"
    ROOT_MOUNTPOINT="/opt"
    REPO_MOUNTPOINT="${ROOT_MOUNTPOINT}/${GITREPO_NAME}"
    apt-get -q update
    apt-get -q ${APT_GET_OPTIONS} dist-upgrade
    apt-get -q ${APT_GET_OPTIONS} install puppet gem git expect
    grep $GITREPO_DOMAIN /etc/ssh/ssh_known_hosts 1>/dev/null 2>&1 ||\
        ssh-keyscan -H $GITREPO_DOMAIN >> /etc/ssh/ssh_known_hosts
    git clone https://${GITREPO_USER}@${GITREPO_DOMAIN}/${GITREPO_USER}/${GITREPO_NAME}.git ${REPO_MOUNTPOINT}
    for DIR in ansible puppet ; do
        mkdir -p ${REPO_MOUNTPOINT}/${DIR} && \
            chown :0 ${REPO_MOUNTPOINT}/${DIR} &&\
            chmod g+rw ${REPO_MOUNTPOINT}/${DIR}
        mount ${REPO_MOUNTPOINT}/${DIR} /etc/${DIR} -t none -o rw,bind
    done

    chown 495 /etc/puppet &&\
        chmod u+rw /etc/puppet
    user: name=puppetadmin -m -N -r -u 495 -g root -G adm -s /bin/bash -d /etc/puppet &&\
        su - puppetadmin -c 'ssh-keygen -A -b 2048 -f .ssh/id_rsa'
    echo 'puppetadmin ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/puppetadmin
    cd /etc/puppet &&\
        gem install librarian-puppet
    cd /etc/puppet &&\
        librarian-puppet update && /usr/bin/puppet apply manifests/$( hostname ).pp
else
    sudo $0
fi
root@experience:~# cat bootstrap_cluster.sh
#!/bin/bash

IP=$( ping -qc 1 master 2>&1 | head -1 | sed "s#^.* master (\([^)]*\)) [0-9]*(.*#\1#" )
MASK=$(  echo ${IP} | sed "s#\.[0-9]*\$#.#" )
LOCALIP=$( facter | grep ^ipaddress | grep " ${MASK}[0-9]*$" | head -1 | tr -s ' ' ' ' | cut -f3 -d' ' )

echo "remote ip is $IP"
echo "local ip is $LOCALIP"

./expect_scp_to ./bootstrap.sh root somePass $IP /root/bootstrap.sh
./expect_ssh_cmd root somePass $IP /root/bootstrap.sh


root@experience:~# cat ./expect_scp_to
#!/usr/bin/expect --
set timeout 30

set PASSWORD [ lindex $argv 2 ]

spawn scp [ lindex $argv 0 ] [ lindex $argv 1 ]@[ lindex $argv 3 ]:[ lindex $argv 4 ]

expect { 
    "assword" {
        send "$PASSWORD\r"
        set timeout -1
        exp_continue
    } "yes/no)?" {
        send "yes\r"
        set timeout -1
        exp_continue
    } timeout {
        exit
    } eof {
        exit
    }
}
root@experience:~# cat ./expect_ssh_cmd
#!/usr/bin/expect --
set timeout 30

set PASSWORD [ lindex $argv 1 ]

spawn ssh [ lindex $argv 0 ]@[ lindex $argv 2 ] [ lindex $argv 3 ]

expect {
    "assword" {
        send "$PASSWORD\r"
        set timeout -1
        exp_continue
    } "yes/no)?" {
        send "yes\r"
        set timeout -1
        exp_continue
    } timeout {
        exit
    } eof {
        exit
    }
}

reste a puppetiser le tout dans cluster_config et a le tirer dans experience

mardi 17 mai 2016

Une machine, un projet ... un nom !

Pour faire simple

  • Comment expliquer et surtout permettre à n'importe qui de répliquer mon architecture ? La mettre a dispo sur le net.
  • Oui, mais c'est quand même ultra dépendant de plein de paramètres liés à l'organisation du parc ? Oui et non, cette machine est une gateway, donc, elle peut s’insérer dans n'importe quelle organisation, à partir du moment ou on fait un minimum de forwarding des ports. Par-contre, sur la machine elle même, oui, c'est quand même bien dépendant (promis je vais jouer avec hiera et talos).
  • Ben alors, comment on fait ? Et bien, on va fixer les choses, si vous voulez me copier (avec grand plaisir, je fais ça pour ça), ben il faudra nommer votre machine experience, voila !
  • Ok, et donc ? Donc, pour mon projet de Dark Web Gateway, le nom est trouvé : "DWG experience" ! 

Hot topic

... swarm cluster behind the dark  web gateway ... working on it !

lundi 25 avril 2016

Intégration de puppet et ansible

Intégration de puppet et ansible

Objectif


Ansible fait du ssh, et ne nécessite pas d'install sur le client.
De ce fait, ansible pour bootstapper puppet est une bonne option.

De plus Ansible a le vent en poupe, et, est (soi-disant, je vais tester) plus simple pour déployer "en quelques lignes"

Plateforme


Je me sers de mon infrastructure, à base de raspberry et de cubietruck (donc raspbian et armbian en jessie).
Le serveur d'administration est experience.

It's showtime

Synthesis

root@experience:~# apt-get update
root@experience:~# mkdir /etc/ansible
root@experience:~# cd /etc/ansible
root@experience:/etc/ansible# wget -4 https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg

Edit ansible.cfg

[defaults]
inventory      = /etc/ansible/hosts
library        = /usr/share/ansible/
remote_tmp     = $HOME/.ansible/tmp
local_tmp      = $HOME/.ansible/tmp
forks          = 5
poll_interval  = 15
sudo_user      = root
ask_sudo_pass = True
ask_pass      = True
module_lang    = C
module_set_locale = True
host_key_checking = False

timeout = 10
remote_user = pi
executable = /bin/bash
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[ssh_connection]
scp_if_ssh = True


remplir /etc/ansible/hosts avec les ips

Si l'utilisateur 'pi' n'existe pas :
root@cubietruck:~# useradd -u 1000 -m -d /home/pi -s /bin/bash -U pi
root@cubietruck:~# passwd pi

root@cubietruck:~# usermod -a -G adm,sudo,audio,video,users,input,netdev,plugdev pi

Puis

root@experience:/etc/ansible# cd
root@experience:~# apt-get install -y sshpass python-pip python-apt python-distutils-extra libssl-dev

root@experience:~# sudo -H pip install --upgrade pip
root@experience:~# sudo -H pip install ansible setuptools paramiko PyYAML Jinja2 httplib2 six

 Test :
root@experience:~#  ansible all -m ping

Attention, le sample ici est pour lancer puppet, mais il nécessite le fichier /etc/passwd_git
Pensez a le remplir

Edit ~/playbook.yaml

---

- hosts: all
  tasks:
  - name: make sure ntp daemon is running
    service: name=ntp state=started

  - name: set proxy for apt
    copy: src=/etc/apt/apt.conf.d/01proxy dest=/etc/apt/apt.conf.d/01proxy owner=root group=root mode=0644
  - name: apt-get update and upgrade
    apt: upgrade=dist update_cache=yes dpkg_options='force-confold,force-confdef'
  - name: apt-get install -y puppet git expect
    apt: name=puppet,git,expect state=latest dpkg_options='force-confold,force-confdef'
  - name: allow puppetadmin to write in /etc/puppet
    file: path=/etc/puppet owner=495 state=touch mode="u+rw"
  - name: install puppetadmin user
    user: name=puppetadmin uid=495 group=root groups=adm append=yes shell=/bin/bash home=/etc/puppet move_home=yes skeleton=yes generate_ssh_key=yes ssh_key_bits=2048 ssh_key_\
file=.ssh/id_rsa
  - name: allow puppetadmin to be su
    shell: "echo 'puppetadmin ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/puppetadmin"
  - name: install librarian
    gem: name=librarian-puppet state=latest
  - name: install tgit link
    shell: ln -s scripts/tgit
    ignore_errors: True
    args:
      chdir: /etc/puppet/
  - name: update /etc/puppet
    shell: librarian-puppet clean && su - puppetadmin -c './tgit pull'
    args:
      executable: /bin/bash
      chdir: /etc/puppet/
  - name: Start puppet agent
    shell: librarian-puppet update && /usr/bin/puppet apply manifests/$( hostname ).pp
    register: puppet_apply_result
    changed_when: puppet_apply_result.rc == 2
    failed_when: puppet_apply_result.rc != 2 and puppet_apply_result.rc != 0
    args:
      executable: /bin/bash
      chdir: /etc/puppet/


On lance !!
root@experience:~# ansible-playbook playbook.yaml

Showtime !! 

Tribulations (uniquement si vous avez des erreurs)


root@experience:~# apt-get update
root@experience:~# apt-get install -y ansible
root@experience:~# cd /etc/ansible/
root@experience:/etc/ansible# ls
ansible.cfg  hosts




Pour le test, on va ajouter toutes les machines, on verra plus tard pour filtrer et pour grouper.


#myself, experience                                                                                                
127.0.0.1
#cubietruck                                                                                                        
192.168.1.5
#omv                                                                                                               
192.168.1.28
#owncloud                                                                                                          
192.168.1.22


root@experience:/etc/ansible#  ansible all -m ping --ask-pass
SSH password:
192.168.1.28 | FAILED => to use the 'ssh' connection type with passwords, you must install the sshpass program
...


root@experience:/etc/ansible# apt-get install sshpass
...

root@experience:/etc/ansible#  ansible all -m ping --ask-pass
SSH password:
127.0.0.1 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

...

WTF, ça pose les même problème que du ssh ...
Mauvais point, ça me donne envie de faire du expect tout ça ! C'est vrai, si ça ne rajoute rien

Bon, il faut de toute façon changer les utilisateurs : sur les raspbian, il faut se connecter en 'pi' et sur armbian, ben ce sera 'pi' aussi.

remote_user    = pi
sudo_user      = root
ask_sudo_pass = True
ask_pass       = True
scp_if_ssh = True
host_key_checking = False
Bon, avec ça, ça marche sur 127.0.0.1
Par simplicité, on va en ajouter un autre et se limiter à 2 machines.

La seule qui répond est cubietruck, alors on fonce.
Par contre, c'est aussi la seule qui n'a pas l'utilisateur 'pi', on le crée :

root@cubietruck:~# useradd -u 1000 -m -d /home/pi -s /bin/bash -U pi
root@cubietruck:~# passwd pi

 root@cubietruck:~# usermod -a -G adm,sudo,audio,video,users,input,netdev,plugdev pi

 And now !

root@experience:/etc/ansible#  ansible all -m ping --ask-pass
SSH password:
127.0.0.1 | success >> {
    "changed": false,
    "ping": "pong"
}

192.168.1.5 | success >> {
    "changed": false,
    "ping": "pong"
}

root@experience:/etc/ansible# cd
root@experience:~# cat playbook.yaml
---

- hosts: all
  tasks:
  - name: make sure ntp daemon is running
    service: name=ntp state=started


root@experience:~# ansible-playbook playbook.yaml
SSH password:
ERROR: become is not a legal parameter in an Ansible task or handler


Ok, on reprend, on installe ansible différement.

root@experience:~# apt-get remove ansible
root@experience:~# mkdir src
root@experience:~# cd src
root@experience:~/src# git clone git://github.com/ansible/ansible.git --recursive

root@experience:~/src# cd ./ansible
root@experience:~/src/ansible# source ./hacking/env-setup
Ansible now needs setuptools in order to build. Install it using your package manager (usually python-setuptools) or via pip (pip install setuptools).

Setting up Ansible to run out of checkout...

PATH=/root/src/ansible/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PYTHONPATH=/root/src/ansible/lib:
MANPATH=/root/src/ansible/docs/man:

Remember, you may wish to specify your host file with -i

Done!




Ok ! c'est tout pourri ! il ne s'agit pas d'un truc à builder, mais de l'exec lui-même, je ne l'ai donc pas mis au bon endroit ! fuck !!!
 

root@experience:~/src/ansible# cd ..
root@experience:~/src# ls -al
total 12
drwxr-xr-x 3 root root 4096 Apr 25 15:02 .
drwx------ 7 root root 4096 Apr 25 15:09 ..
drwxr-xr-x 15 root root 4096 Apr 25 15:03 ansible
root@experience:~/src# mv ansible /var/lib/
root@experience:~/src# source /var/lib/ansible/hacking/env-setup


root@experience:~# pip install paramiko PyYAML Jinja2 httplib2 six
root@experience:~# pip install setuptools



root@experience:~# ansible-playbook playbook.yaml
SSH password:

PLAY [all] *********************************************************************

TASK [setup] *******************************************************************
fatal: [127.0.0.1]: UNREACHABLE! => {"changed": false, "msg": "Authentication failure.", "unreachable": true}
fatal: [192.168.1.5]: UNREACHABLE! => {"changed": false, "msg": "Authentication failure.", "unreachable": true}
to retry, use: --limit @playbook.retry

PLAY RECAP *********************************************************************
127.0.0.1 : ok=0 changed=0 unreachable=1 failed=0
192.168.1.5 : ok=0 changed=0 unreachable=1 failed=0


bon, je ne sais pas quelle version j'ai, mais avoir une version de dev ne me plait pas.
J'aurais du lire jusqu'au bout : installation via PIP

root@experience:~# cd /var/lib
root@experience:/var/lib# ls
alsa bluetooth dpkg initscripts nfs python-support ucf xml-core
ansible container emacsen-common insserv ntp samba update-rc.d
apt dbus gems logrotate pam sgml-base urandom
apt-cacher-ng dhcp git man-db plymouth sudo usbutils
aptitude dhcpcd5 initramfs-tools misc puppet systemd vim
root@experience:/var/lib# rm -fR ansible
root@experience:/var/lib# exit
pi@experience:~ $ sudo -s
root@experience:/home/pi# pip install ansible
Downloading/unpacking ansible
Downloading ansible-2.0.2.0.tar.gz (1.5MB): 1.5MB downloaded

root@experience:/home/pi# ansible --version
ansible 2.0.2.0
config file = /etc/ansible/ansible.cfg
configured module search path = /usr/share/ansible

root@experience:/home/pi# cd /etc/ansible/
root@experience:/etc/ansible# rm ansible.cfg
root@experience:/etc/ansible# wget -4 https://raw.githubusercontent.com/ansible/ansible/devel/examples/ansible.cfg


Edit and modify

Gros boulet que je suis, je tapais l mauvais mot de passe !!!

On recommence.

root@experience:~# ansible-playbook playbook.yaml
SSH password:
SUDO password[defaults to SSH password]:

PLAY [all] *********************************************************************


TASK [setup] *******************************************************************

ok: [192.168.1.5]
ok: [127.0.0.1]

TASK [make sure ntp daemon is running] *****************************************
ok: [127.0.0.1]
ok: [192.168.1.5]

PLAY RECAP *********************************************************************
127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0  
192.168.1.5                : ok=2    changed=0    unreachable=0    failed=0  


Ok, pour faire de l'apt, il faut le module python-apt


root@experience:~# apt-get install -y python-apt python-distutils-extra



dimanche 24 avril 2016

installation de puppet et librarian-puppet

installation de puppet et librarian-puppet

avec les dépôts par défaut

apt-get update
apt-get upgrade -y

lvcreate -L 512M -n puppet system
mkfs.ext4 /dev/mapper/system-puppet

apt-get install -y expect git

cd /etc
git clone https://db_freerider@bitbucket.org/dbouwyn/puppet.git

password is bitbucket_rocks

Cloning into 'puppet'...
Password for 'https://db_freerider@bitbucket.org':
remote: Counting objects: 5656, done.
remote: Compressing objects: 100% (2145/2145), done.
remote: Total 5656 (delta 3252), reused 5474 (delta 3084)
Receiving objects: 100% (5656/5656), 2.14 MiB | 315.00 KiB/s, done.
Resolving deltas: 100% (3252/3252), done.
Checking connectivity... done.


echo '/dev/mapper/system-puppet /etc/puppet ext4 rw,relatime,data=ordered 0 1' >>/etc/fstab
mount -a

mount
/dev/mapper/system-puppet on /etc/puppet type ext4 (rw,relatime,data=ordered)

apt-get install puppet
gem install librarian-puppet

cd /usr/tidy/etc/puppet && tar cf - . | tar xvf - -C /etc/puppet

cd /etc/puppet && mkdir hieradata
echo '/etc/puppet/hieradata           /var/lib/hiera  none    bind,rw         0       2' >>/etc/fstab
mount -a

useradd -g 0 -u 495 -r -d /etc/puppet -s /bin/bash puppetadmin
echo 'puppetadmin ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/puppetadmin


cd /etc && chown -R puppetadmin puppet

cd /etc/puppet && ( ln -s scripts/tgit ; ln -s scripts/autocommit.sh )

echo 'bitbucket_rocks' >/etc/passwd_git

su - puppetadmin -c './tgit pull'
librarian-puppet update

It's now possible to run your puppet manisfest, and you're saying : but ... OMG ! I don't have any !

Real next step is to create your first manifest, using experience, bronco and palette as sample.

Before doing that, setup you environment.

puppet apply manifests/myexperience.pp


jeudi 27 mai 2010

nouvelle organisation

On va coller 5 disques dans experience, 2*80 pour le système (attention, en 3 partitions seulements), 2*80 pour igor, et 160 (en 2*80) en sata comme disque de données.
Palette contiendra 2 HD de 160, chacun en 3+1 partitions, les 2*1 restants font 80+80.

On met un VPN entre palette et experience.

On met en place iScsi sur une partition de 80
On met en place un raid 1 entre les 2 80G distants.
On met du LVM par dessus

On met en place un serveur rsync sur experience et sur palette. on planifie les sync en alternance toute les 2 heures sur chaque partition logique LVM.