import old book

This commit is contained in:
2026-09-15 09:18:07 +05:30
parent 8972d33311
commit bc85ab7969
17 changed files with 580 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
check:
ansible-playbook --check -i inventory.ini -v --become-method community.general.run0 main.yaml
run:
ansible-playbook -i inventory.ini -v --become-method community.general.run0 main.yaml
+2
View File
@@ -0,0 +1,2 @@
[all]
localhost ansible_connection=local
+47
View File
@@ -0,0 +1,47 @@
- name: backup stuff
hosts: all
vars:
backup_directory: /var/backups/{{ ansible_date_time.date }}
pre_tasks:
- name: create backup directory
become: true
file:
state: directory
owner: root
group: root
mode: '0770'
path: "{{ backup_directory }}"
- name: "let {{ ansible_user_id }} write to backup directory"
register: setfacl
failed_when:
- setfacl.rc != 140
- setfacl.rc != 0
changed_when: setfacl.rc != 140
become: true
shell: |
if { getfacl -tn {{ backup_directory }} | tr -d ' ' | grep -Fq 'user{{ansible_user_uid}}rwxrwx' ; }; then
exit 140
fi
setfacl -dRmu:{{ ansible_user_id }}:rwX {{ backup_directory }}
setfacl -mu:{{ ansible_user_id }}:rwX {{ backup_directory }}
- name: structure the backup directory
file:
state: directory
path: "{{ backup_directory }}/{{ item }}"
with_items:
- disks
- "system-{{ ansible_hostname }}/users"
roles:
- storefacts
- disks
tasks:
- name: turn it into an archive
community.general.archive:
path: "{{ backup_directory }}"
dest: "{{ backup_directory | dirname }}/{{ backup_directory | basename }}.tar"
format: tar
+4
View File
@@ -0,0 +1,4 @@
setup:
ansible all -a 'ansible-galaxy collection install community.general'
play:
ansible-playbook desktop-playbook.yml -v
+12
View File
@@ -0,0 +1,12 @@
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do | config |
config.vm.box = "fedora/41-cloud-base"
config.vm.provider :libvirt do | v |
end
config.ssh.insert_key = false
config.vm.define "desktop" do | client |
client.vm.hostname = "desktop"
# client.vm.network :private_network, ip: "192.168.122.132"
end
end
+3
View File
@@ -0,0 +1,3 @@
[defaults]
inventory = ./hosts.ini
vault_password_file = ./secrets-client
@@ -0,0 +1,368 @@
---
- hosts: all
name: setup desktop
vars_files:
- secrets
tasks:
- name: remove fedora fluff
become: true
ansible.builtin.dnf:
allowerasing: true
autoremove: true
name:
- anaconda-core
- anaconda-live
- anaconda-install-env-deps
- cockpit-system
- python3-botocore
- firefox
- nodejs
state: absent
- name: install core components
become: true
dnf:
state: present
name:
- git
- git-crypt
- git-lfs
- gnupg2
- tmux
- curl
- acl
- stow
- make
- just
- zsh
- neovim
- nnn
- openssh-clients
- openssh-server
- mosh
- unzip
- flatpak
- name: install pup
become: true
unarchive:
remote_src: yes
creates: /usr/local/bin/pup
dest: /usr/local/bin/
src: https://github.com/ericchiang/pup/releases/download/v0.4.0/pup_v0.4.0_linux_amd64.zip
- name: install google-chrome dnf repository
become: true
copy:
dest: /etc/yum.repos.d/google-chrome.repo
content: |
[google-chrome]
name=google-chrome
baseurl=https://dl.google.com/linux/chrome/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl.google.com/linux/linux_signing_key.pub
- name: install tailscale dnf repository
become: true
copy:
dest: /etc/yum.repos.d/tailscale.repo
content: |
[tailscale]
name=Tailscale
baseurl=https://pkgs.tailscale.com/stable/fedora/$basearch
enabled=1
type=rpm
repo_gpgcheck=1
gpgcheck=1
gpgkey=https://pkgs.tailscale.com/stable/fedora/repo.gpg
- name: install dnf packages
become: true
dnf:
state: present
name:
- aria2
- bat
- bc
- btop
- btrfs-progs
- coreutils
- moreutils
- fcitx5-gtk4
- file
- gh
- google-chrome-stable
- gparted
- jo
- jq
- jrnl
- kitty
- kitty-terminfo
- lshw
- mpv
- ncdu
- pandoc
- podman
- runc
- pass
- wtype
- tailscale
- rclone
- rsync
- seahorse
- timew
- toolbox
- tree
- fzf
- socat
- tree-sitter-cli
- waybar
- wkhtmltopdf
- yq
- ImageMagick
- name: install flatpak applications
become: true
flatpak:
state: present
name:
- https://valent.andyholmes.ca/valent.flatpakref
- com.nextcloud.desktopclient.nextcloud
- org.libreoffice.LibreOffice
- org.mozilla.Thunderbird
- com.logseq.Logseq
- com.github.xournalpp.xournalpp
- com.obsproject.Studio
- com.yubico.yubioath
- com.github.tchx84.Flatseal
- org.gnome.Loupe
- com.github.johnfactotum.Foliate
- org.gnome.Papers
- org.gnome.FileRoller
- org.gnome.SimpleScan
- com.github.neithern.g4music
- info.febvre.Komikku
- org.gimp.GIMP
- net.scribus.Scribus
- org.inkscape.Inkscape
- org.darktable.Darktable
- org.audacityteam.Audacity
- name: create group myself
become: true
group:
name: myself
gid: 690
system: true
- name: create group rootlessmen
become: true
group:
name: rootlessmen
system: true
- name: create users
become: true
with_items:
- name: kevins
uid: 6901
groups: ["myself", "rootlessmen"]
- name: kevinsamuel
uid: 6902
groups: myself
- name: kevinnlsamuel
uid: 6903
groups: ["myself", "rootlessmen"]
user:
state: present
name: "{{ item.name }}"
uid: "{{ item.uid }}"
groups: "{{ item.groups }}"
skeleton: /dev/null
append: true
password: $1$aBLdYKQI$iB3ZfYF.QPCwVhgnkROUX.
update_password: on_create
shell: /bin/zsh
- name: use crun as podman engine
become: true
vars:
file: /etc/containers/containers.conf
block:
- lineinfile:
owner: root
group: root
mode: '0644'
create: true
path: "{{file}}"
line: "[engine]"
insertbefore: BOF
- lineinfile:
path: "{{file}}"
line: 'runtime = "/usr/bin/runc"'
search_string: 'runtime = '
- name: create storage for rootlessmen
become: true
file:
path: /var/lib/rootlessmen
owner: root
group: rootlessmen
mode: "0770"
state: directory
- name: setup podman to use rootlessmen for storage
become: true
vars:
file: /etc/containers/storage.conf
block:
- name: create container storage config
lineinfile:
owner: root
group: root
mode: '0644'
create: true
path: "{{file}}"
line: "[storage]"
insertbefore: BOF
- name: setup storage config to use rootlessmen
with_items:
- line: 'driver_priority = ["btrfs", "overlay", "vfs"]'
search_string: 'driver_priority = '
- line: 'rootless_storage_path = "/var/lib/rootlessmen/$USER/storage"'
search_string: 'rootless_storage_path = '
lineinfile:
path: "{{file}}"
line: "{{item.line}}"
search_string: "{{item.search_string}}"
- name: set selinux fcontext for rootlessmen
become: true
with_items:
- pathspec: /var/lib/rootlessmen/[^/]+/storage/artifacts(/.*)?
type: container_ro_file_t
- pathspec: /var/lib/rootlessmen/[^/]+/storage/volumes/[^/]*/.*
type: container_file_t
sefcontext:
target: "{{item.pathspec}}"
setype: "{{item.type}}"
seuser: unconfined_u
- name: enable tpm-tss in dracut
become: true
lineinfile:
path: /etc/dracut.conf.d/55-tpm.conf
line: "add_dracutmodules+=' tpm2-tss '"
owner: root
group: root
mode: "1644"
create: true
state: present
- name: tell PAM to unlock gnome-keyring in tty
become: true
with_items:
- type: auth
args: ""
- type: session
args: auto_start
pamd:
name: login
state: before
type: "{{item.type}}"
control: include
module_path: postlogin
new_type: "-{{item.type}}"
new_control: optional
new_module_path: pam_gnome_keyring.so
module_arguments: "{{item.args}}"
- name: create wifi networks
become: true
loop:
- ssid: KEVINSAM_5
zone: home
- ssid: KEVINSAM
zone: home
- ssid: askKevin
zone: work
community.general.nmcli:
state: present
type: wifi
zone: "{{ item.zone }}"
conn_name: "{{ item.ssid }}"
ssid: "{{ item.ssid }}"
autoconnect: true
wifi:
hidden: true
wifi_sec:
key-mgmt: wpa-psk
psk: "not really the key"
- name: create tailscale firewall zone
become: true
shell: |
firewall-cmd --permanent --new-zone=tailscale
firewall-cmd --permanent --zone=tailscale --add-interface=tailscale0
firewall-cmd --permanent --zone=tailscale --add-forward
firewall-cmd --permanent --zone=tailscale --set-target=ACCEPT
firewall-cmd --reload
- name: other firewall rules
become: true
shell: |
firewall-cmd --permanent --zone public --remove-service ssh
firewall-cmd --permanent --zone public --add-service kdeconnect
firewall-cmd --permanent --zone home --add-service=kdeconnect --add-service=mosh --add-service=ssh
firewall-cmd --reload
- name: create /home/myself
become: true
file:
state: directory
path: /home/myself
group: myself
owner: kevins
mode: '2770'
- name: check if HOME.git is cloned
become: true
become_user: kevins
register: home_repo
stat:
path: /home/myself/HOME.git/HEAD
- name: "clone HOME.git"
become: true
become_user: kevins
when: not home_repo.stat.exists
shell: |
mkdir -p /home/myself/HOME.git
cd /home/myself/HOME.git
git init --bare .
git remote add \
origin \
-t stable \
-m stable \
https://{{PAT}}@github.com/kevinnlsamuel/HOME.git
git fetch --set-upstream origin stable
- name: clone HOME to my selves
vars:
src: /home/myself/HOME.git
dest: "/home/{{item}}/.local/state/HOME"
with_items:
- kevins
- kevinsamuel
- kevinnlsamuel
become_user: "{{item}}"
become: true
failed_when:
- result.rc != 140
- result.rc != 0
changed_when: "result.rc != 140"
register: result
shell: |
mkdir -p "{{dest}}"
cd "{{dest}}"
if [ -f ".git/HEAD" ]; then exit 140 2>/dev/null; fi
git init -b main
git config --add safe.directory "{{src}}"
git remote add myself "{{src}}"
git pull myself main
# manually install:
# - sieve
+7
View File
@@ -0,0 +1,7 @@
[all]
; set to whatever the vm is
172.35.1.142
[all:vars]
ansible_user = admin
ansible_ssh_private_key_file = ~/.ssh/keys/kevins.pub
@@ -0,0 +1,2 @@
collections:
- name: community.general
+27
View File
@@ -0,0 +1,27 @@
$ANSIBLE_VAULT;1.1;AES256
38333432336134663937363161333833373365386635613338333761346662653566333439363132
3437393431643233393133643133313963323134626465630a666565653234626630373837343933
64633966303761333539633335393234396264616266323439303932623535396335663839323363
3861643566303563610a333166363032636462353836303365333634643639353934386233353438
31373664386332613637626663633030313232383435303966643835346536313737393030623038
36616465653563366138633334343665363131313361343836383132346334306330636138666666
35636631646431393130376232663665343736313466626235623032636462316438656238656463
35396465643936613935646237373837373037333561393133633033303038373565386236336339
36636666623835343662346461643735646237653236386132623334653734633431313735363765
64323839663765326336336263323535373663323232323336386464623734373433353135393566
30663130656336653832653862383464363261323831346632306539613139646632306133666132
38363066666563383436316537626439313134363365326333623633383138346134356232646664
31333834323138366635613933616363363131643330353166383234333236343833343432656163
33663963333039303737386431396337636665633532373336383762363966343139346335353463
33383632343630343134333062326138383562636666396336313530363939333965626130303332
35306238663633613130616138613137393331343862666664613539346237616537376166303130
62393633613666613235633736666361653764356161396532306135343162316262386136386538
32353861633362323166616263656633346531336633323064336162323630343532323139366166
64316130633436303230353133623036656337316232323538316562663663326438383736313261
63633766326638363939346531643836616561366365326236393031643633633836353837613963
35333532393435313435333935353935656631386264626535303265353732653832613935623238
33643765633939343730636165313737393037343337653230313637306365303539636233643839
35613463386439323965613763396535383730383431666437393338336562663035653461613035
64346465313532373938383833343334666563333362643961626138653664623337383964383463
64343031373534346161386134663933626335326337386634666133343533626662646136623134
3536656133663039353436666339323437323162633139613632
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -e
pass encryptions/com.kevinnlsamuel/playbooks/setup-workstations/secrets
+35
View File
@@ -0,0 +1,35 @@
#SPDX-License-Identifier: MIT-0
galaxy_info:
author: your name
description: your role description
company: your company (optional)
# If the issue tracker for your role is not on github, uncomment the
# next line and provide a value
# issue_tracker_url: http://example.com/issue/tracker
# Choose a valid license ID from https://spdx.org - some suggested licenses:
# - BSD-3-Clause (default)
# - MIT
# - GPL-2.0-or-later
# - GPL-3.0-only
# - Apache-2.0
# - CC-BY-4.0
license: license (GPL-2.0-or-later, MIT, etc)
min_ansible_version: 2.1
# If this a Container Enabled role, provide the minimum Ansible Container version.
# min_ansible_container_version:
galaxy_tags: []
# List tags for your role here, one per line. A tag is a keyword that describes
# and categorizes the role. Users find roles by searching for tags. Be sure to
# remove the '[]' above, if you add tags to this list.
#
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.
dependencies: []
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.
+48
View File
@@ -0,0 +1,48 @@
- name: get list of disks
changed_when: false
shell: >
lsblk
--json
--paths
--filter 'MIN == 0 && TYPE == "disk" && MOUNTPOINT != "[SWAP]"'
| jq '.blockdevices'
register: disks
- name: backup partition tables
become: true
shell: |
if [ {{ item.type }} != disk ]; then exit 0; fi
sfdisk --dump {{ item.name }} >{{ backup_directory }}/disks/{{ item.name | basename }}.sfdisk
loop: "{{ disks.stdout }}"
- name: get list of luks devices
changed_when: false
shell: >
lsblk
--json
--paths
| jq '[ .blockdevices[]|.children[]?|select(recurse(.children[]?)|.type == "crypt") ]'
register: cryptdisks
- name: backup luks2 headers
become: true
loop: "{{ cryptdisks.stdout }}"
shell: |
rm -f {{ backup_directory }}/disks/{{ item.children[0].name | basename }}.luks2header
cryptsetup luksHeaderBackup {{ item.name }} \
--header-backup-file {{ backup_directory }}/disks/{{ item.children[0].name | basename }}.luks2header
- name: backup lvm volume groups
become: true
shell: |
if [ ! -d /etc/lvm/backup ]; then exit 0; fi
for vg in /etc/lvm/backup/*; do
cp $vg {{backup_directory}}/disks/${vg##*/}.volumegroup
done
# get list of disks
# run sfdisk on it
# get list of partitions with luks2
# # backup their headers
# get list of partitions with lvm2
# # copy the metadata
+6
View File
@@ -0,0 +1,6 @@
galaxy_info:
author: kevinnlsamuel
description: sayin hello
dependencies:
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.
+6
View File
@@ -0,0 +1,6 @@
- name: register greeting
command: echo hello
register: greeting
- name: say greeting
debug:
msg: "{{ greeting.stdout }}"
+4
View File
@@ -0,0 +1,4 @@
- name: store facts
template:
src: facts.jinja2
dest: "{{ backup_directory }}/ansible_facts.json"
+1
View File
@@ -0,0 +1 @@
{{ ansible_facts | to_nice_json }}