From 7df5bca282287a20ebb61ad252cd13f122b61a18 Mon Sep 17 00:00:00 2001
From: Carl Wilson The playbook The The The 'server.yml' sub-role: The 'server.yml' sub-role: The The The The The The The There are a few flavours of VM for a particular OS. The project team have already
-agreed that Debian 9 (Stretch) was a sensible starting choice. The two main criteria
+agreed that Debian 12 (Bookworm) was a sensible starting choice. The two main criteria
that guided the decision were stability and long update cycles. Virtual Box was chosen as the virtualisation platform
because of its cross platform ubiquity. Vagrant is a
tool designed for building and managing virtual machine environments. It was chosen
to speed up the initial virtual box provisioning. Vagrant Cloud
provides a collection of cookie-cut virtual machines. The Vagrant machine chosen
-as a starting point was an official Debian Stretch build with the addition of the
-Virtual Box shared folder kernel module: https://app.vagrantup.com/debian/boxes/contrib-stretch64.Ansible command
end
ansible/initialise-env.yaml
is the list of roles that set up the virtual research environment. An Ansible role is simply a set of tasks that achieve a desired state, e.g. install software, copy files, etc.. The next two sections break down the sub-roles describing the general steps taken and the rationale.ddhn.setup
-ddhn.setup
role handles the setup of the environment, updating the OS, installing dependencies, creating accounts and the like. The main role simply calls four sub-roles.viper.setup
+viper.setup
role handles the setup of the environment, updating the OS, installing dependencies, creating accounts and the like. The main role simply calls four sub-roles.Server tasks
-
Pre-requisites
-prerequisites.yml
sub-role installs any apt package dependencies. The package list is the ddhn_env_apt_defaults
variable in the roles' main default file.prerequisites.yml
sub-role installs any apt package dependencies. The package list is the viper_env_apt_defaults
variable in the roles' main default file.User tasks
-user.yml
sub-role creates a sudo user to administer the environment. Again, the task is configurable using variables in the roles' main default file.user.yml
sub-role creates a sudo user to administer the environment. Again, the task is configurable using variables in the roles' main default file.Security
-security
role hardens SSH access, no password and no root access, while setting up firewall rules. The thinking is that the environment should be secure with port access only opened where required.security
role hardens SSH access, no password and no root access, while setting up firewall rules. The thinking is that the environment should be secure with port access only opened where required.viper.tools
viper.tools
role installs the digital preservation tools. It comprises a series of sub-roles, one for each tool. The general workflow for a tool is:
diff --git a/ansible/roles/viper.tools/vars/main.yml b/ansible/roles/viper.tools/vars/main.yml
index 36adcb7..81dad2e 100644
--- a/ansible/roles/viper.tools/vars/main.yml
+++ b/ansible/roles/viper.tools/vars/main.yml
@@ -1,2 +1,2 @@
-# Variables file for ddhn.tools
+# Variables file for viper.tools
---
diff --git a/ansible/vagrant.yml b/ansible/vagrant.yml
index e427246..b61a088 100644
--- a/ansible/vagrant.yml
+++ b/ansible/vagrant.yml
@@ -3,7 +3,7 @@
# Define all servers children
all:
vars:
- ddhn_env_timezone: "Europe/Berlin"
- ddhn_env_ip: "{{ ansible_ssh_host }}"
+ viper_env_timezone: "Europe/Berlin"
+ viper_env_ip: "{{ ansible_ssh_host }}"
hosts:
- env.ddhn.test:
+ env.viper.test:
diff --git a/docs/faqs/index.md b/docs/faqs/index.md
index 2eaf1a5..1b5ed28 100644
--- a/docs/faqs/index.md
+++ b/docs/faqs/index.md
@@ -22,6 +22,6 @@ title: Frequently Asked Questions
- **ViPER doesn't start on Windows 10**
If the ViPER OVA file won't start on a Windows 10 host you must enable 3D acceleration using the VirtualBox VM Display settings.
-See also ViPER’s Github issues list:
Tweaking the VirtualBox Machine
Prototyping Decisions
VM and OS
A vagrant machine is configured by a Vagrantfile
which can be
set up with the appropriate virtual machine template:
vagrant init debian/contrib-stretch64
+vagrant init debian/bookworm64
Before starting the machine we want to configure a few things out of the box. By default Vagrant machines are headless, i.e. all access via terminal and SSH with no GUI. We also need to provision the memory and number of CPUs available to the machine. While cores and memory are plentiful on a development workstation, 2 virtual CPUs and 4GB or RAM are sensible starting parameters. Anything requiring significantly more compute power would struggle to satisfy the accessible research environment brief. These parameters can be adjusted in situ regardless.
We can set these up for a Virtual Box VM by adding the following lines to our Vagrantfile, we'll also set a VM name while we're at it:
diff --git a/ansible/roles/viper.tools/meta/main.yml b/ansible/roles/viper.tools/meta/main.yml
index a64064d..bb445b2 100644
--- a/ansible/roles/viper.tools/meta/main.yml
+++ b/ansible/roles/viper.tools/meta/main.yml
@@ -9,7 +9,7 @@ galaxy_info:
platforms:
- name: Debian
versions:
- - stretch
+ - bookworm
galaxy_tags:
- OPF
- DDHN
diff --git a/docs/maintainer/index.md b/docs/maintainer/index.md
index e0b8687..b91246c 100644
--- a/docs/maintainer/index.md
+++ b/docs/maintainer/index.md
@@ -22,13 +22,13 @@ You'll need at least familiarity with the following software and technologies to
### Operating system
-[Debian 11 (Bullseye)](https://www.debian.org/) was chosen as a base OS. The two main criteria that guided the decision were stability and long update cycles.
+[Debian 12 (Bookworm)](https://www.debian.org/) was chosen as a base OS. The two main criteria that guided the decision were stability and long update cycles.
### Virtualisation
- [VirtualBox](https://www.virtualbox.org/) was chosen as the virtualisation platform because of its cross platform ubiquity.
- [Vagrant](https://www.vagrantup.com/) is a tool designed for building and managing virtual machine environments. It was chosen to speed up the initial VirtualBox provisioning.
-- [Vagrant Cloud](https://app.vagrantup.com/) provides a collection of cookie-cut virtual machines. The Vagrant machine chosen as a starting point was an official Debian Stretch build with the addition of the VirtualBox shared folder kernel module: .
+- [Vagrant Cloud](https://app.vagrantup.com/) provides a collection of cookie-cut virtual machines. The Vagrant machine chosen as a starting point was an official Debian Bookworm build with the addition of the VirtualBox shared folder kernel module: .
### Provisioning
@@ -45,10 +45,10 @@ The vagrant machine is configured by a [`Vagrantfile`](https://github.com/openpr
The VirtualBox VM is initialised with on the following line, which also selects the guest OS version:
```shell
-config.vm.box = "debian/bullseye64"
+config.vm.box = "debian/bookworm64"
```
-This choses a 64 bit Debian 11 (Bullseye) image as the base OS.
+This choses a 64 bit Debian 12 (Bookworm) image as the base OS.
#### VirtualBox configuration
From 71da4991e7487ea4c469701a25609ebcaf0c8f45 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 11:51:00 +0100
Subject: [PATCH 06/36] MAINT: MediaArea Debian Packages
- upgraded MediaArea debian packages in `ansible/roles/viper.tools/defaults/main.yml`; and
- bumped ViPER version in `Vagrantfile`.
---
Vagrantfile | 2 +-
ansible/roles/viper.tools/defaults/main.yml | 28 ++++++++++-----------
2 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/Vagrantfile b/Vagrantfile
index e6a84d9..515377b 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -25,7 +25,7 @@ Vagrant.configure("2") do |config|
# provider for Vagrant. These expose provider-specific options.
config.vm.provider "virtualbox" do |vb|
# Name the prototype machine
- vb.name = "VIPER v1.1"
+ vb.name = "VIPER v1.2"
# Display the VirtualBox GUI when booting the machine
vb.gui = true
# Customize the CPUs (2x) and memory (4GB) on the VM:
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 7f349e5..dc55077 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -38,8 +38,8 @@ jhove_version: "{{ jhove_major }}.{{ jhove_minor }}.{{ jhove_patch }}"
# veraPDF version details, to override set verapdf_major }}.{{ verapdf_minor and vera_patch
verapdf_major: "1"
-verapdf_minor: "22"
-verapdf_patch: "3"
+verapdf_minor: "26"
+verapdf_patch: "2"
verapdf_version: "{{ verapdf_major }}.{{ verapdf_minor }}.{{ verapdf_patch }}"
droid_major: "6"
@@ -126,18 +126,18 @@ viper:
lib: "{{ viper_lib }}/veraPDF/{{ verapdf_version }}"
src: "{{ viper_src }}/veraPDF/{{ verapdf_version }}"
mediaarea:
- - name: "libzen0v5"
- download_url: "https://mediaarea.net/download/binary/libzen0/0.4.41/libzen0v5_0.4.41-1_amd64.Debian_11.deb"
- package_name: "libzen0v5_0.4.41-1_amd64.Debian_11.deb"
- - name: "libmediainfo0v5"
- download_url: "https://mediaarea.net/download/binary/libmediainfo0/23.04/libmediainfo0v5_23.04-1_amd64.Debian_11.deb"
- package_name: "libmediainfo0v5_23.04-1_amd64.Debian_11.deb"
+ - name: "libzen0"
+ download_url: "https://mediaarea.net/download/binary/libzen0/0.4.41/libzen0v5_0.4.41-1_amd64.Debian_12.deb"
+ package_name: "libzen0v5_0.4.41-1_amd64.Debian_12.deb"
+ - name: "libmediainfo0"
+ download_url: "https://mediaarea.net/download/binary/libmediainfo0/24.04/libmediainfo-dev_24.04-1_amd64.Debian_12.deb"
+ package_name: "libmediainfo-dev_24.04-1_amd64.Debian_12.deb"
- name: "libmediaconch0"
- download_url: "https://mediaarea.net/download/binary/libmediaconch0/23.03/libmediaconch0_23.03-1_amd64.Debian_11.deb"
- package_name: "libmediaconch0_23.03-1_amd64.Debian_11.deb"
+ download_url: "https://mediaarea.net/download/binary/libmediaconch0/23.10/libmediaconch0_23.10-1_amd64.Debian_12.deb"
+ package_name: "libmediaconch0_23.19-1_amd64.Debian_12.deb"
- name: "mediainfo-gui"
- download_url: "https://mediaarea.net/download/binary/mediainfo-gui/23.04/mediainfo-gui_23.04-1_amd64.Debian_11.deb"
- package_name: "mediainfo-gui_23.04-1_amd64.Debian_11.deb"
+ download_url: "https://mediaarea.net/download/binary/mediainfo-gui/24.04/mediainfo-gui_24.04-1_amd64.Debian_12.deb"
+ package_name: "mediainfo-gui_24.04-1_amd64.Debian_12.deb"
- name: "mediaconch-gui"
- download_url: "https://mediaarea.net/download/binary/mediaconch-gui/23.03/mediaconch-gui_23.03-1_amd64.Debian_11.deb"
- package_name: "mediaconch-gui_23.03-1_amd64.Debian_11.deb"
+ download_url: "https://mediaarea.net/download/binary/mediaconch-gui/23.10/mediaconch-gui_23.10-1_amd64.Debian_12.deb"
+ package_name: "mediaconch-gui_23.10-1_amd64.Debian_12.deb"
From adaada12c57e5f489bc2a98db0b2dc8ad6fb1157 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 11:54:00 +0100
Subject: [PATCH 07/36] FIX: MediaArea version
---
ansible/roles/viper.tools/defaults/main.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index dc55077..a50a4ca 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -134,7 +134,7 @@ viper:
package_name: "libmediainfo-dev_24.04-1_amd64.Debian_12.deb"
- name: "libmediaconch0"
download_url: "https://mediaarea.net/download/binary/libmediaconch0/23.10/libmediaconch0_23.10-1_amd64.Debian_12.deb"
- package_name: "libmediaconch0_23.19-1_amd64.Debian_12.deb"
+ package_name: "libmediaconch0_23.10-1_amd64.Debian_12.deb"
- name: "mediainfo-gui"
download_url: "https://mediaarea.net/download/binary/mediainfo-gui/24.04/mediainfo-gui_24.04-1_amd64.Debian_12.deb"
package_name: "mediainfo-gui_24.04-1_amd64.Debian_12.deb"
From ad3787c82d9a444bebab0bf250907bfdb335353f Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 11:54:00 +0100
Subject: [PATCH 08/36] FIX: MediaArea versions
---
ansible/roles/viper.tools/defaults/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index a50a4ca..21a8c01 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -130,8 +130,8 @@ viper:
download_url: "https://mediaarea.net/download/binary/libzen0/0.4.41/libzen0v5_0.4.41-1_amd64.Debian_12.deb"
package_name: "libzen0v5_0.4.41-1_amd64.Debian_12.deb"
- name: "libmediainfo0"
- download_url: "https://mediaarea.net/download/binary/libmediainfo0/24.04/libmediainfo-dev_24.04-1_amd64.Debian_12.deb"
- package_name: "libmediainfo-dev_24.04-1_amd64.Debian_12.deb"
+ download_url: "https://mediaarea.net/download/binary/libmediainfo0/24.04/libmediainfo0v5_24.04-1_amd64.Debian_12.deb"
+ package_name: "libmediainfo0v5_24.04-1_amd64.Debian_12.deb"
- name: "libmediaconch0"
download_url: "https://mediaarea.net/download/binary/libmediaconch0/23.10/libmediaconch0_23.10-1_amd64.Debian_12.deb"
package_name: "libmediaconch0_23.10-1_amd64.Debian_12.deb"
From d2d4230ee4b670dcde457b9ef70348feeee13af2 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 11:58:00 +0100
Subject: [PATCH 09/36] FIX: Revert veraPDF upgrade
---
ansible/roles/viper.tools/defaults/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 21a8c01..6d259a6 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -38,8 +38,8 @@ jhove_version: "{{ jhove_major }}.{{ jhove_minor }}.{{ jhove_patch }}"
# veraPDF version details, to override set verapdf_major }}.{{ verapdf_minor and vera_patch
verapdf_major: "1"
-verapdf_minor: "26"
-verapdf_patch: "2"
+verapdf_minor: "22"
+verapdf_patch: "3"
verapdf_version: "{{ verapdf_major }}.{{ verapdf_minor }}.{{ verapdf_patch }}"
droid_major: "6"
From 7da847b3ad0dc7732fb6df5c9d13847a743e0d67 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 13:42:00 +0100
Subject: [PATCH 10/36] MAINT: veraPDF upgrade
- updated veraPDF from 1.22.3 -> 1.26.2.
---
ansible/roles/viper.tools/defaults/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 6d259a6..21a8c01 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -38,8 +38,8 @@ jhove_version: "{{ jhove_major }}.{{ jhove_minor }}.{{ jhove_patch }}"
# veraPDF version details, to override set verapdf_major }}.{{ verapdf_minor and vera_patch
verapdf_major: "1"
-verapdf_minor: "22"
-verapdf_patch: "3"
+verapdf_minor: "26"
+verapdf_patch: "2"
verapdf_version: "{{ verapdf_major }}.{{ verapdf_minor }}.{{ verapdf_patch }}"
droid_major: "6"
From 6e624491c9a5646b9ef3cdac08dca013e29a2383 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Tue, 28 May 2024 15:28:00 +0100
Subject: [PATCH 11/36] MAINT: JHOVE upgrade
- updated JHOVE from 1.26.1 -> 1.28.0
---
ansible/roles/viper.tools/defaults/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 21a8c01..6cd2788 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -32,8 +32,8 @@ viper_debian_icons:
# JHOVE version details, to override set jhove_major_minor and jhove_patch
jhove_major: "1"
-jhove_minor: "26"
-jhove_patch: "1"
+jhove_minor: "28"
+jhove_patch: "0"
jhove_version: "{{ jhove_major }}.{{ jhove_minor }}.{{ jhove_patch }}"
# veraPDF version details, to override set verapdf_major }}.{{ verapdf_minor and vera_patch
From 2144fd18b3d803c23f7adf127819f6ae535d7a90 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Wed, 29 May 2024 07:50:00 +0100
Subject: [PATCH 12/36] MAINT: Upgrade DROID
- bumped DROID from 6.6.1 -> 6.7.0.
---
ansible/roles/viper.tools/defaults/main.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 6cd2788..8fc6feb 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -43,8 +43,8 @@ verapdf_patch: "2"
verapdf_version: "{{ verapdf_major }}.{{ verapdf_minor }}.{{ verapdf_patch }}"
droid_major: "6"
-droid_minor: "6"
-droid_patch: "1"
+droid_minor: "7"
+droid_patch: "0"
droid_version: "{{ droid_major }}.{{ droid_minor }}.{{ droid_patch }}"
# Apache Tika version details
From 2f09688bfec0b23b8e3671e228b93cf237e7533c Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Wed, 29 May 2024 07:57:00 +0100
Subject: [PATCH 13/36] FIX: New DROID tag format
---
ansible/roles/viper.tools/defaults/main.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 8fc6feb..389a260 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -79,7 +79,7 @@ viper:
comment: "File format identification tool from The National Archives of the UK."
exec: "droid-gui"
icon: "droid.png"
- version: "{{ droid_version }}"
+ version: "droid-{{ droid_version }}"
source:
git: "https://github.com/digital-preservation/droid.git"
tag: "{{ droid_version }}"
From b530394bafa33a4b6241127f86b2681270baee9e Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Wed, 29 May 2024 08:25:00 +0100
Subject: [PATCH 14/36] MAINT: Upgrade Apache Tika
- upgraded Apache Tika from 1.28.5 -> 2.9.2.
---
ansible/roles/viper.tools/defaults/main.yml | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 389a260..15cab32 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -48,9 +48,9 @@ droid_patch: "0"
droid_version: "{{ droid_major }}.{{ droid_minor }}.{{ droid_patch }}"
# Apache Tika version details
-tika_major: "1"
-tika_minor: "28"
-tika_patch: "5"
+tika_major: "2"
+tika_minor: "9"
+tika_patch: "2"
tika_version: "{{ tika_major }}.{{ tika_minor }}.{{ tika_patch }}"
viper:
@@ -82,7 +82,7 @@ viper:
version: "droid-{{ droid_version }}"
source:
git: "https://github.com/digital-preservation/droid.git"
- tag: "{{ droid_version }}"
+ tag: "droid-{{ droid_version }}"
installer:
loc: "https://repo1.maven.org/maven2/uk/gov/nationalarchives/droid-binary/{{ droid_version }}/droid-binary-{{ droid_version }}-bin.zip"
dests:
From bf2b5f124452d14f9d6326d222e384d8360be221 Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Wed, 29 May 2024 10:48:00 +0100
Subject: [PATCH 15/36] FIX: Add handbrake to desktop icons
---
ansible/roles/viper.tools/defaults/main.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/ansible/roles/viper.tools/defaults/main.yml b/ansible/roles/viper.tools/defaults/main.yml
index 6cd2788..fc152c2 100644
--- a/ansible/roles/viper.tools/defaults/main.yml
+++ b/ansible/roles/viper.tools/defaults/main.yml
@@ -29,6 +29,7 @@ viper_debian_icons:
- "org.inkscape.Inkscape"
- "mediainfo-gui"
- "mediaconch-gui"
+ - "fr.handbrake.ghb"
# JHOVE version details, to override set jhove_major_minor and jhove_patch
jhove_major: "1"
From 14d619f87ed0d93bc30ba54c7fba4de17c20177e Mon Sep 17 00:00:00 2001
From: Carl Wilson
Date: Wed, 29 May 2024 12:07:00 +0100
Subject: [PATCH 16/36] SITE: Add favicons
- added favicon files generated from site menu logo to `docs/`;
- added `docs/site.webmanifest`; and
- updated `docs/_includes/header.html` to include favicons.
---
docs/_includes/header.html | 5 +++++
docs/android-chrome-192x192.png | Bin 0 -> 15883 bytes
docs/apple-touch-icon.png | Bin 0 -> 14790 bytes
docs/favicon-16x16.png | Bin 0 -> 764 bytes
docs/favicon-32x32.png | Bin 0 -> 1864 bytes
docs/favicon.ico | Bin 0 -> 34494 bytes
docs/site.webmanifest | 14 ++++++++++++++
7 files changed, 19 insertions(+)
create mode 100644 docs/android-chrome-192x192.png
create mode 100644 docs/apple-touch-icon.png
create mode 100644 docs/favicon-16x16.png
create mode 100644 docs/favicon-32x32.png
create mode 100644 docs/favicon.ico
create mode 100644 docs/site.webmanifest
diff --git a/docs/_includes/header.html b/docs/_includes/header.html
index 371d8d9..bfddfea 100644
--- a/docs/_includes/header.html
+++ b/docs/_includes/header.html
@@ -16,4 +16,9 @@
+
+
+
+
+
diff --git a/docs/android-chrome-192x192.png b/docs/android-chrome-192x192.png
new file mode 100644
index 0000000000000000000000000000000000000000..34c45451b81bb4b55d6740a53e97876ee9f5ca55
GIT binary patch
literal 15883
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â^0p>-<{
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
V-9PuzK?gIzWF!>DYebC#{}1I!ij@EW
literal 0
HcmV?d00001
diff --git a/docs/favicon-16x16.png b/docs/favicon-16x16.png
new file mode 100644
index 0000000000000000000000000000000000000000..202b90d8286291a8efea05dc7c7afa0b5d13f41b
GIT binary patch
literal 764
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
Date: Wed, 29 May 2024 14:16:00 +0100
Subject: [PATCH 17/36] FEAT: Site documentation tool versions
- added `docs/_data/vars.yml` with template details, e.g.:
- ViPER release details;
- tool versions; and
- guest OS details.
- used template vars to add dynamic variables to the index page and the tools page.
---
docs/_config.yml | 12 ++++++++++++
docs/_data/vars.yml | 14 ++++++++++++++
docs/index.md | 4 ++--
docs/tools/index.md | 20 ++++++++++----------
4 files changed, 38 insertions(+), 12 deletions(-)
create mode 100644 docs/_config.yml
create mode 100644 docs/_data/vars.yml
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..b3c8075
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,12 @@
+github: [metadata]
+encoding: UTF-8
+kramdown:
+ input: GFM
+ hard_wrap: false
+future: true
+jailed: false
+repository: openpreserve/ViPER
+plugins:
+- jekyll-github-metadata
+- jekyll-sitemap
+- jemoji
diff --git a/docs/_data/vars.yml b/docs/_data/vars.yml
new file mode 100644
index 0000000..c7f4597
--- /dev/null
+++ b/docs/_data/vars.yml
@@ -0,0 +1,14 @@
+version: "1.2-RC1"
+release_date: "31.05.2024"
+guest_os: "Debian"
+guest_os_version: "12"
+guest_os_nickname: "Bookworm"
+droid_version: "6.7.0"
+jhove_version: "1.28.0"
+verapdf_version: "1.26.2"
+tika_version: "2.9.2"
+handbrake_version: "1.6.1"
+mediainfo_version: "24.04"
+mediaconch_version: "23.10"
+inkscape_version: "1.2.2"
+gimp_version: "2.10.34"
\ No newline at end of file
diff --git a/docs/index.md b/docs/index.md
index 8bdc17c..f8c5d62 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -4,9 +4,9 @@ title: Home
---

-