feat: fetcher

This commit is contained in:
Ben Grande 2023-12-18 15:31:19 +00:00
parent 9fc2c03a2c
commit f16bfdd28b
10 changed files with 189 additions and 0 deletions

43
salt/fetcher/README.md Normal file
View File

@ -0,0 +1,43 @@
# fetcher
Fetch publicly accessible files over the internet in Qubes OS.
## Table of Contents
* [Description](#description)
* [Installation](#installation)
* [Usage](#usage)
## Description
A Template for DispVMs will be created and named "dvm-fetcher", from this qube
you will create others that can connect to the internet to download files. You
will be able to download from any protocol as long as the installed tools,
`curl`, `wget`, `git`, `rsync`, accept them.
## Installation
- Top:
```sh
qubesctl top.enable fetcher
qubesctl --targets=tpl-fetcher,dvm-fetcher state.apply
qubesctl top.disable fetcher
```
- State:
<!-- pkg:begin:post-install -->
```sh
qubesctl state.apply fetcher.create
qubesctl --skip-dom0 --targets=tpl-fetcher state.apply fetcher.install
qubesctl --skip-dom0 --targets=dvm-fetcher state.apply fetcher.configure-dvm
```
<!-- pkg:end:post-install -->
## Usage
You will base qubes from the Template for DispVMs `dvm-fetcher` to download
files over the internet using popular command-line tools such as `git`,
`curl`, `wget`, `rsync`.
You can use disposables based from `dvm-fetcher` to clone repositories,
download PGP signatures, Operating System ISOs etc.

8
salt/fetcher/clone.sls Normal file
View File

@ -0,0 +1,8 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% from 'utils/macros/clone-template.sls' import clone_template -%}
{{ clone_template('debian-minimal', sls_path) }}

10
salt/fetcher/clone.top Normal file
View File

@ -0,0 +1,10 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'dom0':
- match: nodegroup
- fetcher.clone

View File

@ -0,0 +1,12 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% if grains['nodename'] != 'dom0' -%}
include:
- dev.home-cleanup
{% endif -%}

View File

@ -0,0 +1,10 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'*':
- match: nodegroup
- fetcher.configure-dvm

42
salt/fetcher/create.sls Normal file
View File

@ -0,0 +1,42 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{%- from "qvm/template.jinja" import load -%}
include:
- .clone
{% load_yaml as defaults -%}
name: dvm-{{ slsdotpath }}
force: True
require:
- sls: {{ slsdotpath }}.clone
present:
- template: tpl-{{ slsdotpath }}
- label: red
prefs:
- template: tpl-{{ slsdotpath }}
- label: red
- memory: 300
- maxmem: 500
- vcpus: 1
- autostart: False
- template_for_dispvms: True
- include_in_backups: False
features:
- enable:
- appmenus-dispvm
- disable:
- service.cups
- service.cups-browsed
{%- endload %}
{{ load(defaults) }}
"{{ slsdotpath }}-resize-private-volume":
cmd.run:
- require:
- qvm: dvm-{{ slsdotpath }}
- name: qvm-volume extend dvm-{{ slsdotpath }}:private 15Gi

10
salt/fetcher/create.top Normal file
View File

@ -0,0 +1,10 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'dom0':
- match: nodegroup
- fetcher.create

14
salt/fetcher/init.top Normal file
View File

@ -0,0 +1,14 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'dom0':
- match: nodegroup
- fetcher.create
'tpl-fetcher':
- fetcher.install
'dvm-fetcher':
- fetcher.configure-dvm

31
salt/fetcher/install.sls Normal file
View File

@ -0,0 +1,31 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
{% if grains['nodename'] != 'dom0' -%}
include:
- dotfiles.copy-sh
- dotfiles.copy-x11
- sys-pgp.install-client
"{{ slsdotpath }}-updated":
pkg.uptodate:
- refresh: True
"{{ slsdotpath }}-installed":
pkg.installed:
- refresh: True
- install_recommends: False
- skip_suggestions: True
- pkgs:
- qubes-core-agent-networking
- ca-certificates
- curl
- wget
- git
- rsync
{% endif -%}

9
salt/fetcher/install.top Normal file
View File

@ -0,0 +1,9 @@
{#
SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
SPDX-License-Identifier: AGPL-3.0-or-later
#}
base:
'tpl-fetcher':
- fetcher.install