commit 97029a8d0d480d53d0256d420e542a134dd72c6b Author: telot Date: Sat Sep 5 22:08:37 2026 +0000 initial commit diff --git a/.bash_history b/.bash_history new file mode 100644 index 0000000..aaa9405 --- /dev/null +++ b/.bash_history @@ -0,0 +1,80 @@ +sudo apt update +sudo apt upgrade -y +sudo shutdown -r now +exit +ssh-keygen -t rsa +.ssh/authorized_keys +nano .ssh/authorized_keys +exit +sudo apt install software-properties-common +sudo add-apt-repository --yes --update ppa:ansible/ansible +sudo apt install ansible +nano /etc/ansible/hosts . +nano /etc/ansible/hosts +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo ansible -i hosts all -m ping +cp /etc/ansible/hosts . +ansible -i hosts all -m ping +cat .ssh/id_rsa.pub +ssh 10.0.1.205 +ssh 10.0.1.209 +sudo nano /etc/ansible/hosts +ssh 10.0.1.5 +sudo nano /etc/ansible/hosts +ssh 10.0.1.240 +ssh 10.0.1. +ssh 10.0.1.139 +sudo nano /etc/ansible/hosts +ssh 10.0.1.206 +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +ansible -i hosts all -m ping +sudo nano /etc/ansible/hosts +cp /etc/ansible/hosts . +ansible -i hosts all -m ping +nano hosts +ansible -i hosts all -m ping +nano hosts +ansible -i hosts all -m ping +ansible -i hosts all -m ping | less +nano hosts +ansible -i hosts all -m ping | less +nano hosts +ansible -i hosts all -m ping | less +nano hosts +ansible -i hosts all -m ping | less +-m sudo apt update +clear +ls +mkdir playbooks +cd playbooks/ +nano apt-updates.yaml +ansible-playbook apt-updates.yaml +ansible-playbook apt-updates.yaml -K +nano apt-updates.yaml +cd +nano hosts +ansible-playbook apt-updates.yaml -K --limit media +ansible-playbook ~/playbooks/apt-updates.yaml -K --limit media +nano hosts +sudo nano /etc/ansible/hosts +sudo cp hosts /etc/ansible/ +ansible-playbook ~/playbooks/apt-updates.yaml -K --limit media +ansible-playbook ~/playbooks/apt-updates.yaml -K --limit hermes +cd playbooks/ +scp 10.0.1.209:/home/telot/hermes-update.yml . +cd .. +cd playbooks/ +ansible-playbook hermes-update.yml +exit diff --git a/.bash_logout b/.bash_logout new file mode 100644 index 0000000..de4f5f7 --- /dev/null +++ b/.bash_logout @@ -0,0 +1,7 @@ +# ~/.bash_logout: executed by bash(1) when login shell exits. + +# when leaving the console clear the screen to increase privacy + +if [ "$SHLVL" = 1 ]; then + [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q +fi diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..b488fcc --- /dev/null +++ b/.bashrc @@ -0,0 +1,117 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi diff --git a/.cache/motd.legal-displayed b/.cache/motd.legal-displayed new file mode 100644 index 0000000..e69de29 diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..b293a07 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,3 @@ +[user] + email = jonpaulstory@gmail.com + name = telot diff --git a/.lesshst b/.lesshst new file mode 100644 index 0000000..4d1c30b --- /dev/null +++ b/.lesshst @@ -0,0 +1 @@ +.less-history-file: diff --git a/.profile b/.profile new file mode 100644 index 0000000..d89ea5a --- /dev/null +++ b/.profile @@ -0,0 +1,27 @@ +# ~/.profile: executed by the command interpreter for login shells. +# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login +# exists. +# see /usr/share/doc/bash/examples/startup-files for examples. +# the files are located in the bash-doc package. + +# the default umask is set in /etc/profile; for setting the umask +# for ssh logins, install and configure the libpam-umask package. +#umask 022 + +# if running bash +if [ -n "$BASH_VERSION" ]; then + # include .bashrc if it exists + if [ -f "$HOME/.bashrc" ]; then + . "$HOME/.bashrc" + fi +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/bin" ] ; then + PATH="$HOME/bin:$PATH" +fi + +# set PATH so it includes user's private bin if it exists +if [ -d "$HOME/.local/bin" ] ; then + PATH="$HOME/.local/bin:$PATH" +fi diff --git a/.sudo_as_admin_successful b/.sudo_as_admin_successful new file mode 100644 index 0000000..e69de29 diff --git a/hosts b/hosts new file mode 100644 index 0000000..ddc3896 --- /dev/null +++ b/hosts @@ -0,0 +1,72 @@ + +# This is the default ansible 'hosts' file. +# +# It should live in /etc/ansible/hosts +# +# - Comments begin with the '#' character +# - Blank lines are ignored +# - Groups of hosts are delimited by [header] elements +# - You can enter hostnames or ip addresses +# - A hostname/ip can be a member of multiple groups + +# Ex 1: Ungrouped hosts, specify before any group headers: + +## green.example.com +## blue.example.com +## 192.168.100.1 +## 192.168.100.10 + +# Ex 2: A collection of hosts belonging to the 'webservers' group: + +## [webservers] +## alpha.example.org +## beta.example.org +## 192.168.1.100 +## 192.168.1.110 +[setsail] +10.0.1.5 + +[media] +#audiobookshelf +10.0.1.240 +#komga-comics +10.0.1.139 +#craft +10.0.1.206 + + +[hermes] +#personal +10.0.1.209 +#work +10.0.1.205 +# If you have multiple hosts following a pattern, you can specify +# them like this: + +## www[001:006].example.com + +# You can also use ranges for multiple hosts: + +## db-[99:101]-node.example.com + +# Ex 3: A collection of database servers in the 'dbservers' group: + +## [dbservers] +## +## db01.intranet.mydomain.net +## db02.intranet.mydomain.net +## 10.25.1.56 +## 10.25.1.57 + + +# Ex4: Multiple hosts arranged into groups such as 'Debian' and 'openSUSE': + +## [Debian] +## alpha.example.org +## beta.example.org + +## [openSUSE] +## green.example.com +## blue.example.com + + diff --git a/playbooks/apt-updates.yaml b/playbooks/apt-updates.yaml new file mode 100644 index 0000000..b8f7c8a --- /dev/null +++ b/playbooks/apt-updates.yaml @@ -0,0 +1,14 @@ +--- +- name: Update and upgrade Linux servers + hosts: all + become: true + + tasks: + - name: Update apt package cache + ansible.builtin.apt: + update_cache: true + cache_valid_time: 3600 + + - name: Upgrade installed packages + ansible.builtin.apt: + upgrade: yes diff --git a/playbooks/hermes-update.yml b/playbooks/hermes-update.yml new file mode 100644 index 0000000..b49c7ef --- /dev/null +++ b/playbooks/hermes-update.yml @@ -0,0 +1,71 @@ +--- +# Update Hermes Agent on every host in the Ansible `hermes` group. +# Run with: ansible-playbook -i inventory.yml hermes-update.yml + +- name: Update Hermes Agent + hosts: hermes + gather_facts: true + serial: 1 # update one Hermes instance at a time so both are not down together + + vars: + # Override per-host/group if Hermes is installed somewhere else. + hermes_bin: "{{ ansible_env.HOME }}/.local/bin/hermes" + hermes_branch: main + # Use true for a full HERMES_HOME backup before updating; false keeps Hermes' default quick snapshot. + hermes_full_backup: true + + tasks: + - name: Check Hermes launcher exists + ansible.builtin.stat: + path: "{{ hermes_bin }}" + register: hermes_launcher + + - name: Fail if Hermes launcher is missing + ansible.builtin.fail: + msg: "Hermes launcher not found at {{ hermes_bin }}. Set hermes_bin for this host/group." + when: not hermes_launcher.stat.exists + + - name: Show current Hermes version and install info + ansible.builtin.command: "{{ hermes_bin }} --version" + register: hermes_version_before + changed_when: false + + - name: Show Hermes update plan + ansible.builtin.command: "{{ hermes_bin }} update --plan --branch {{ hermes_branch }}" + register: hermes_update_plan + changed_when: false + + - name: Check whether Hermes update is available + ansible.builtin.command: "{{ hermes_bin }} update --check --branch {{ hermes_branch }}" + register: hermes_update_check + changed_when: false + + - name: Update Hermes when needed + ansible.builtin.command: >- + {{ hermes_bin }} update --yes --branch {{ hermes_branch }} + {{ '--backup' if hermes_full_backup else '' }} + register: hermes_update_result + when: "'Update available' in hermes_update_check.stdout" + changed_when: true + + - name: Verify Hermes is now current + ansible.builtin.command: "{{ hermes_bin }} update --check --branch {{ hermes_branch }}" + register: hermes_update_verify + changed_when: false + failed_when: >- + hermes_update_verify.rc != 0 or + ('Update available' in hermes_update_verify.stdout) + + - name: Show final Hermes version and install info + ansible.builtin.command: "{{ hermes_bin }} --version" + register: hermes_version_after + changed_when: false + + - name: Print Hermes update summary + ansible.builtin.debug: + msg: + host: "{{ inventory_hostname }}" + before: "{{ hermes_version_before.stdout_lines }}" + updated: "{{ 'Update available' in hermes_update_check.stdout }}" + after: "{{ hermes_version_after.stdout_lines }}" + verify: "{{ hermes_update_verify.stdout_lines }}"