diff --git a/ansible-bash-config b/ansible-bash-config new file mode 100644 index 0000000..a35592b --- /dev/null +++ b/ansible-bash-config @@ -0,0 +1,340 @@ +--- +- name: Personnalisation du bash pour toutes les VMs de l'inventaire + hosts: all + become: yes + gather_facts: yes + + vars: + bash_config_version: "1.0" + + tasks: + - name: Afficher les informations de l'hôte + debug: + msg: "Configuration de {{ ansible_hostname }} ({{ ansible_distribution }} {{ ansible_distribution_version }})" + + - name: Créer le répertoire profile.d si nécessaire + file: + path: /etc/profile.d + state: directory + mode: '0755' + + - name: Déployer la configuration bash personnalisée globale + copy: + dest: /etc/profile.d/custom_bash.sh + mode: '0644' + content: | + # ============================================ + # Configuration bash personnalisée - v{{ bash_config_version }} + # Déployé par Ansible via Semaphore + # Hôte: {{ ansible_hostname }} + # Date: {{ ansible_date_time.iso8601 }} + # ============================================ + + # Prompt coloré avec utilisateur, hôte et chemin + export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' + + # Pour root, prompt en rouge + if [ "$EUID" -eq 0 ]; then + export PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]# ' + fi + + # ============================================ + # Configuration de l'historique + # ============================================ + export HISTSIZE=10000 + export HISTFILESIZE=20000 + export HISTCONTROL=ignoredups:erasedups + export HISTTIMEFORMAT="%d/%m/%Y %H:%M:%S " + + # Ajouter immédiatement les commandes à l'historique + shopt -s histappend + PROMPT_COMMAND="history -a; $PROMPT_COMMAND" + + # ============================================ + # Alias de navigation + # ============================================ + alias ..='cd ..' + alias ...='cd ../..' + alias ....='cd ../../..' + alias .....='cd ../../../..' + + # ============================================ + # Alias ls avec couleurs + # ============================================ + alias ls='ls --color=auto' + alias ll='ls -lah --color=auto' + alias la='ls -A --color=auto' + alias l='ls -CF --color=auto' + alias lsd='ls -d */ --color=auto' + + # ============================================ + # Alias grep avec couleurs + # ============================================ + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' + + # ============================================ + # Alias système + # ============================================ + alias df='df -h' + alias du='du -h' + alias free='free -h' + alias top='htop 2>/dev/null || top' + alias ps='ps auxf' + alias psg='ps aux | grep -v grep | grep -i -e VSZ -e' + alias meminfo='free -h -l -t' + alias cpuinfo='lscpu' + + # ============================================ + # Alias réseau + # ============================================ + alias ports='netstat -tulanp' + alias listening='netstat -tulanp | grep LISTEN' + alias myip='curl -s ifconfig.me && echo' + alias ping='ping -c 5' + alias pingg='ping google.com -c 5' + + # ============================================ + # Alias Git (utile avec Gitea) + # ============================================ + alias gs='git status' + alias ga='git add' + alias gaa='git add --all' + alias gc='git commit' + alias gcm='git commit -m' + alias gp='git push' + alias gpl='git pull' + alias gl='git log --oneline --graph --decorate --all' + alias gd='git diff' + alias gb='git branch' + alias gco='git checkout' + alias gclone='git clone' + + # ============================================ + # Alias Docker (si disponible) + # ============================================ + alias dps='docker ps' + alias dpsa='docker ps -a' + alias di='docker images' + alias dex='docker exec -it' + alias dlog='docker logs -f' + alias dstop='docker stop $(docker ps -q)' + alias drm='docker rm $(docker ps -aq)' + alias drmi='docker rmi $(docker images -q)' + + # ============================================ + # Alias de sécurité + # ============================================ + alias rm='rm -i' + alias cp='cp -i' + alias mv='mv -i' + alias ln='ln -i' + + # ============================================ + # Alias Rsync + # ============================================ + alias rsync-copy='rsync -avz --progress' + alias rsync-move='rsync -avz --progress --remove-source-files' + alias rsync-update='rsync -avzu --progress' + alias rsync-sync='rsync -avzu --delete --progress' + + # ============================================ + # Alias de date et heure + # ============================================ + alias now='date +"%d-%m-%Y %T"' + alias nowdate='date +"%d-%m-%Y"' + alias nowtime='date +"%T"' + + # ============================================ + # Alias journalctl (systemd logs) + # ============================================ + alias jctl='journalctl -xe' + alias jctlf='journalctl -f' + alias jctlu='journalctl -u' + + # ============================================ + # Fonctions utiles + # ============================================ + + # Créer et entrer dans un répertoire + mkcd() { + mkdir -p "$1" && cd "$1" + } + + # Extraction intelligente d'archives + extract() { + if [ -f "$1" ]; then + case "$1" in + *.tar.bz2) tar xjf "$1" ;; + *.tar.gz) tar xzf "$1" ;; + *.tar.xz) tar xJf "$1" ;; + *.bz2) bunzip2 "$1" ;; + *.rar) unrar x "$1" ;; + *.gz) gunzip "$1" ;; + *.tar) tar xf "$1" ;; + *.tbz2) tar xjf "$1" ;; + *.tgz) tar xzf "$1" ;; + *.zip) unzip "$1" ;; + *.Z) uncompress "$1" ;; + *.7z) 7z x "$1" ;; + *) echo "'$1' ne peut pas être extrait avec cette fonction" ;; + esac + else + echo "'$1' n'est pas un fichier valide" + fi + } + + # Trouver les fichiers les plus volumineux + bigfiles() { + du -h "$1" 2>/dev/null | sort -rh | head -n ${2:-10} + } + + # Backup rapide d'un fichier + backup() { + cp "$1" "$1.backup-$(date +%Y%m%d-%H%M%S)" + } + + # Recherche rapide de fichiers + ff() { + find . -type f -iname "*$1*" + } + + # Recherche rapide de répertoires + fd() { + find . -type d -iname "*$1*" + } + + # ============================================ + # Variables d'environnement + # ============================================ + export EDITOR=nano + export VISUAL=nano + export PAGER=less + + # Configuration de less + export LESS='-R -M -i' + export LESSHISTFILE=- + + # Couleurs pour man pages + export LESS_TERMCAP_mb=$'\e[1;32m' + export LESS_TERMCAP_md=$'\e[1;32m' + export LESS_TERMCAP_me=$'\e[0m' + export LESS_TERMCAP_se=$'\e[0m' + export LESS_TERMCAP_so=$'\e[01;33m' + export LESS_TERMCAP_ue=$'\e[0m' + export LESS_TERMCAP_us=$'\e[1;4;31m' + + # ============================================ + # Message de bienvenue + # ============================================ + echo "🚀 Configuration bash personnalisée chargée (v{{ bash_config_version }})" + echo "📝 Pour voir tous les alias: alias" + echo "💡 Fonctions disponibles: mkcd, extract, bigfiles, backup, ff, fd" + echo "📦 Rsync shortcuts: rsync-copy, rsync-move, rsync-update, rsync-sync" + + - name: Créer le fichier nanorc personnalisé + copy: + dest: /etc/nanorc + mode: '0644' + content: | + ## Configuration Nano personnalisée + set autoindent + set tabsize 4 + set tabstospaces + set linenumbers + set mouse + set smooth + set softwrap + set constantshow + set casesensitive + + ## Activer la coloration syntaxique + include "/usr/share/nano/*.nanorc" + + ## Raccourcis personnalisés + bind ^S savefile main + bind ^Q exit all + bind ^F whereis main + bind ^Z undo main + bind ^Y redo main + + - name: Appliquer les configurations pour les utilisateurs existants + block: + - name: Récupérer la liste des utilisateurs avec home directory + shell: | + getent passwd | awk -F: '$3 >= 1000 && $6 ~ /^\/home/ {print $1":"$6}' + register: users_list + changed_when: false + + - name: Créer un lien symbolique vers la config globale pour chaque utilisateur + file: + src: /etc/profile.d/custom_bash.sh + dest: "{{ item.split(':')[1] }}/.bash_custom" + state: link + owner: "{{ item.split(':')[0] }}" + group: "{{ item.split(':')[0] }}" + force: yes + loop: "{{ users_list.stdout_lines }}" + when: users_list.stdout_lines | length > 0 + + - name: Ajouter le sourcing de la config dans .bashrc des utilisateurs + lineinfile: + path: "{{ item.split(':')[1] }}/.bashrc" + line: "[ -f ~/.bash_custom ] && source ~/.bash_custom" + state: present + create: yes + owner: "{{ item.split(':')[0] }}" + group: "{{ item.split(':')[0] }}" + mode: '0644' + loop: "{{ users_list.stdout_lines }}" + when: users_list.stdout_lines | length > 0 + + - name: Installer des outils utiles (optionnel) + package: + name: + - nano + - htop + - curl + - wget + - git + - tree + - ncdu + - rsync + - sudo + state: present + ignore_errors: yes + + - name: Vérifier que la configuration est bien chargée + shell: | + bash -c 'source /etc/profile.d/custom_bash.sh && echo "Configuration OK"' + register: config_check + changed_when: false + + - name: Afficher le résultat de la configuration + debug: + msg: + - "✅ Configuration bash déployée avec succès sur {{ ansible_hostname }}" + - "📦 Statut: {{ config_check.stdout }}" + - "👤 Nombre d'utilisateurs configurés: {{ users_list.stdout_lines | length }}" + + - name: Créer un fichier de rappel des commandes utiles + copy: + dest: /etc/motd + mode: '0644' + content: | + ╔═══════════════════════════════════════════════════════════╗ + ║ Serveur: {{ ansible_hostname }} + ║ OS: {{ ansible_distribution }} {{ ansible_distribution_version }} + ║ Configuration bash personnalisée active ✓ + ╚═══════════════════════════════════════════════════════════╝ + + 📌 Commandes utiles: + • ll, la, l : Lister les fichiers + • gs, ga, gc : Raccourcis Git + • ports : Voir les ports ouverts + • myip : Afficher l'IP publique + • extract : Extraire une archive + • mkcd : Créer et entrer dans un dossier + + 💡 Tapez 'alias' pour voir tous les alias disponibles