From 1b332d1b1ea190a09ed9e00687ac17f3788cd4a8 Mon Sep 17 00:00:00 2001 From: Glenn Date: Wed, 3 Jan 2024 11:36:33 +0100 Subject: [PATCH] chore: add testing & demo tools --- Vagrantfile | 34 ++++ misc/SCRIPT.md | 114 +++++++++++++ misc/record-output.sh | 373 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 521 insertions(+) create mode 100644 Vagrantfile create mode 100644 misc/SCRIPT.md create mode 100644 misc/record-output.sh diff --git a/Vagrantfile b/Vagrantfile new file mode 100644 index 0000000..6ea27b7 --- /dev/null +++ b/Vagrantfile @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# -*- mode: ruby -*- +# vi: set ft=ruby : + +Vagrant.configure('2') do |config| + config.vm.box = 'debian/bookworm64' + config.vm.box_check_update = false + + config.vm.provider 'virtualbox' do |vb| + vb.gui = false + vb.memory = '4096' + end + + config.vm.provider "libvirt" do |lv| + # lv.cpus = "2" + lv.memory = "4096" + # enable nested virtualization + lv.nested = true + lv.cpu_mode = "host-model" + end + + # config.vm.synced_folder ".", "/vagrant", type: "nfs", mount_options: ["vers=3,tcp"] + # config.vm.synced_folder "../../exercises", "/exercises", type: "nfs", mount_options: ["vers=3,tcp"] + + config.vm.define 'demo' do |machine| + machine.vm.hostname = 'demo' + + machine.vm.network 'forwarded_port', guest: 8080, host: 8080, host_ip: '127.0.0.1' + machine.vm.network 'forwarded_port', guest: 80, host: 1080, host_ip: '127.0.0.1' + end + + config.vm.provision 'shell', path: 'scripts/vagrant-provision/base.sh' +end diff --git a/misc/SCRIPT.md b/misc/SCRIPT.md new file mode 100644 index 0000000..2e844cf --- /dev/null +++ b/misc/SCRIPT.md @@ -0,0 +1,114 @@ + +# Minimalist FUSE Manager + +--- + +## Configuration + +Let's start by configuring `~/mnt/mfm.yml`! + +--- + +--- + +## Configuration + +We can add as many filesystems we want in the `filesystems:` list. + +--- + +## Configuration + +Each filesystem has a `type:` and specific configuration parameters + +The current values supported by *mfm* are `gocryptfs`, `httpdirfs` and `sshfs`. + +--- + +## Preparation + +Before using *mfm*, lets have a look at the `~/mnt/` directory. + +--- + +--- + +## Preparation + +Yes, it is empty! + +Don't worry, the mountpoint will be created automatically. + +--- + +## Usage + +Ok. Now, simply run *mfm* and choose your favorite filesystem! + +In this demo, I will choose `Public - Debian Repository` which is a remote web +page hosting debian packages and registy catalog. + +--- + +--- + +## Usage + +Hmmm... + +What happened? + +--- + +## Usage + +A directory was created in `~/mnt`. + +It is filled with files and directories from a remote system, in which we can +navigate. + +--- + +## Usage + +Let's detach it now! + +Simply run *mfm* again, and choose the same filesystem. + +--- + +--- + +## Usage + +It is now detached, and the directory is empty again! + +--- + +## Conclusion + +The *mfm* command works in the same way regardless of the filesystem selected. + +It's simple, fast and efficient. + +--- + +## Conclusion + +The *mfm* project is still in its infancy. + +We're looking for contributors to test it, to improve it, to make it even more +useful and enjoyable to use. + +--- + +## Conclusion + +But if you're just a user, we're already happy. + +--- + +## Conclusion + +Now it's your turn to use *mfm*! + diff --git a/misc/record-output.sh b/misc/record-output.sh new file mode 100644 index 0000000..b239c9b --- /dev/null +++ b/misc/record-output.sh @@ -0,0 +1,373 @@ +#!/bin/bash +# shellcheck disable=SC2317 + +set -u + +# parameters +konsole=org.kde.konsole-2913641 +session=2 +SLEEP_LONG_READ="3" +SLEEP_SHORT_READ="2" +SLEEP_TRANSITION="0.4" +SLEEP_COMMAND_BEFORE="0.4" +SLEEP_COMMAND_AFTER="0.65" +SLEEP_MICROPAUSE="0.25" +SLEEP_TYPESPEED="0.10" + +qtype() { + qdbus "$konsole" "/Sessions/$session" sendText "$1" +} + +qrun() { + qdbus "$konsole" "/Sessions/$session" runCommand "$1" +} + +qctrlb() { + qdbus "$konsole" "/Sessions/$session" sendText $'\002' +} + +qctrlc() { + qdbus "$konsole" "/Sessions/$session" sendText $'\003' +} + + +qtype_slow() { + echo -n "$1" \ + | sed 's/\(.\)/\1\n/g' \ + | while IFS="" read -r X ; do qtype "$X" ; sleep "$SLEEP_TYPESPEED" ; done +} + +tmux_key() { + qctrlb + sleep 0.5 + qtype "$1" +} + +qtype_arrow_up() { + qtype $'\033' + qtype "[A" +} + +qtype_arrow_down() { + qtype $'\033' + qtype "[B" +} + +qtype_arrow_left() { + qtype $'\033' + qtype "[D" +} + +qtype_arrow_right() { + qtype $'\033' + qtype "[C" +} + +## cleanup + +qctrlc +tmux_key "d" +qctrlc + +qrun "clear" +sleep "$SLEEP_MICROPAUSE" +qrun "cd ~/src/mfm" +sleep "$SLEEP_MICROPAUSE" +qrun "cp doc/demo.mfm.yml ~/.config/mfm.yml" +sleep "$SLEEP_MICROPAUSE" +qrun "rm -f output.rec" +sleep "$SLEEP_MICROPAUSE" +qrun "tmux kill-session -t demo" +sleep "$SLEEP_MICROPAUSE" +qrun "mkdir -p /home/vagrant/mnt" +sleep "$SLEEP_MICROPAUSE" +qrun "fusermount -u \"/home/vagrant/mnt/Public - Remote Debian Repository\"" +sleep "$SLEEP_MICROPAUSE" +qrun "rm -fr \"/home/vagrant/mnt/Public - Remote Debian Repository\"" +sleep "$SLEEP_MICROPAUSE" +qrun "# cleanup done" +sleep "$SLEEP_LONG_READ" + +## reset demo environment +qrun "tmux new -s demo" +sleep "$SLEEP_MICROPAUSE" +tmux_key "c" +qrun "cd ~/src/mfm" +sleep "$SLEEP_MICROPAUSE" +qrun "mdp --noslidenum doc/SCRIPT.md" +sleep "$SLEEP_MICROPAUSE" + +tmux_key "c" +qrun "export PATH=\$PATH:~/src/mfm/bin" +sleep "$SLEEP_MICROPAUSE" +qrun "export FZF_DEFAULT_OPTS=\"--height 40% --layout=reverse --border\"" +sleep "$SLEEP_MICROPAUSE" +qrun "alias cat=\"batcat -p\"" +sleep "$SLEEP_MICROPAUSE" +qrun "cd ~/src/mfm" +sleep "$SLEEP_MICROPAUSE" +qrun "clear" +sleep "$SLEEP_MICROPAUSE" + +tmux_key "1" +tmux_key ":" +qrun "set -g status off" +sleep "$SLEEP_MICROPAUSE" + +tmux_key "d" + +## record +qrun "asciinema rec --cols 80 --rows 24 -c 'tmux attach' output.rec" + +# slide 1 (title) +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 2 (config file) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# cmd 2 (show config file) +qtype " " +sleep "$SLEEP_TRANSITION" + +tmux_key "2" +qtype_slow "cat " +sleep "$SLEEP_MICROPAUSE" +qtype_slow "~/.config" +sleep "$SLEEP_MICROPAUSE" +qtype_slow "/mfm.yml" +sleep "$SLEEP_MICROPAUSE" +qrun "" +sleep "$SLEEP_LONG_READ" # double +sleep "$SLEEP_LONG_READ" +tmux_key "1" + +# slide 3 (config options 1) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 4 (config options 2) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 5 (preparation - mnt) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# demo 5 (show mnt) +qtype " " +sleep "$SLEEP_TRANSITION" + +tmux_key "2" +qtype_slow "cd " +sleep "$SLEEP_MICROPAUSE" +qtype_slow "~/mnt" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_LONG_READ" +tmux_key "1" + +# slide 6 (preparation - empty mnt!) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 7 (usage - run) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# demo 7 (run mfm) +qtype " " +sleep "$SLEEP_TRANSITION" + +tmux_key "2" +qtype_slow "m" +sleep "$SLEEP_MICROPAUSE" +qtype_slow "f" +sleep "$SLEEP_MICROPAUSE" +qtype_slow "m" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_arrow_down +sleep "$SLEEP_MICROPAUSE" +qtype_arrow_down +sleep "$SLEEP_MICROPAUSE" +qtype_arrow_up +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_LONG_READ" + +tmux_key "1" + +# slide 8 (usage - what?) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# demo 8 (usage - what : show mnt) +tmux_key "2" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_slow "cd \"Pub" +sleep "$SLEEP_MICROPAUSE" +qtype "lic - Remote Debian Repository\"" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" + +qtype_slow "ls" +sleep "$SLEEP_MICROPAUSE" +qtype $'\015' +sleep "$SLEEP_SHORT_READ" + +qtype_slow "cd pool" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_slow "cd main" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_LONG_READ" + +tmux_key "1" + +# slide 9 (usage - explanation) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 10 (usage - prepare for detach) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# demo 10 (run mfm for detach) +qtype " " +sleep "$SLEEP_TRANSITION" + +tmux_key "2" + +qtype_slow "cd ~/mnt/" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" + +qtype_slow "m" +sleep "$SLEEP_MICROPAUSE" +qtype_slow "f" +sleep "$SLEEP_MICROPAUSE" +qtype_slow "m" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_arrow_down +sleep "$SLEEP_MICROPAUSE" +qtype_arrow_down +sleep "$SLEEP_MICROPAUSE" +qtype_arrow_up +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_LONG_READ" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_slow "cd \"Pub" +sleep "$SLEEP_MICROPAUSE" +qtype "lic - Remote Debian Repository\"" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_slow "ls" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_SHORT_READ" + +qtype_slow "ls -la" +sleep "$SLEEP_COMMAND_BEFORE" +sleep "$SLEEP_COMMAND_BEFORE" +qtype $'\015' +sleep "$SLEEP_COMMAND_AFTER" +sleep "$SLEEP_LONG_READ" + +tmux_key "1" + +# slide 11 (usage - detached) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + + +# slide 12 (conclusion) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 13 (conclusion) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 14 (conclusion) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# slide 15 (conclusion) +qtype " " +sleep "$SLEEP_TRANSITION" +sleep "$SLEEP_LONG_READ" + +# detach and clean +tmux_key "d" + +qrun "tmux kill-session -t demo" +qrun "termtosvg render output.rec output.svg" + +qrun "# success!" + +exit 0 +