need of update
By pp-prod
Assigned to
need of update
Labeled:
October 16, 2022 at 04:58PM
via GitHub https://ift.tt/cyGZIU6
dimanche 16 octobre 2022
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
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 updateroot@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
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.
Inscription à :
Articles (Atom)