Skip to content

Commit

Permalink
feat: add GUI domain formula
Browse files Browse the repository at this point in the history
For: #89
  • Loading branch information
ben-grande committed Jul 18, 2024
1 parent fa11a1d commit 735b324
Show file tree
Hide file tree
Showing 50 changed files with 1,334 additions and 0 deletions.
3 changes: 3 additions & 0 deletions .qubesbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,9 @@ host:
- rpm_spec/qusal-sys-electrumx.spec
- rpm_spec/qusal-sys-firewall.spec
- rpm_spec/qusal-sys-git.spec
- rpm_spec/qusal-sys-gui.spec
- rpm_spec/qusal-sys-gui-gpu.spec
- rpm_spec/qusal-sys-gui-vnc.spec
- rpm_spec/qusal-sys-mirage-firewall.spec
- rpm_spec/qusal-sys-net.spec
- rpm_spec/qusal-sys-pgp.spec
Expand Down
11 changes: 11 additions & 0 deletions docs/TROUBLESHOOT.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ Qusal troubleshooting guidelines.
* [Qrexec client shows Request refused](#qrexec-client-shows-request-refused)
* [Salt wrapper qubesctl command fails](#salt-wrapper-qubesctl-command-fails)
* [Get Salt management information](#get-salt-management-information)
* [No support for unfinished formulas](#no-support-for-unfinished-formulas)

## Detect if your issue was already opened

Expand Down Expand Up @@ -91,3 +92,13 @@ the qube being managed:
sudo qubesctl state.apply dom0.helpers
qvm-mgmt tpl-qubes-builder
```

## No support for unfinished formulas

If you have been redirect to this section, be aware that the formula you are
using is unfinished and no support will be provided. It is development only
and if you are not a developer, there is a chance you will find yourself lost
on how to debug and revert back to a known good state.

Again, don't try the formula if you don't know how to fix problems that may
arise.
112 changes: 112 additions & 0 deletions rpm_spec/qusal-sys-gui-gpu.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <[email protected]>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

%define project sys-gui-gpu
%define license_csv AGPL-3.0-or-later,GPL-2.0-only
## Reproducibility.
%define source_date_epoch_from_changelog 1
%define use_source_date_epoch_as_buildtime 1
%define clamp_mtime_to_source_date_epoch 1
## Changelog is trimmed according to current date, not last date from changelog.
%define _changelog_trimtime 0
%define _changelog_trimage 0
%global _buildhost %{name}
## Python bytecode interferes when updates occur and restart is not done.
%undefine __brp_python_bytecompile

Name: qusal-sys-gui-gpu
Version: 0.0.1
Release: 1%{?dist}
Summary:
Group: qusal
Packager: %{?_packager}%{!?_packager:Ben Grande <[email protected]>}
Vendor: Ben Grande
License: AGPL-3.0-or-later AND GPL-2.0-only
URL: https://github.com/ben-grande/qusal
BugURL: https://github.com/ben-grande/qusal/issues
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch

Requires: qubes-mgmt-salt
Requires: qubes-mgmt-salt-dom0
Requires: qusal-sys-gui


%description
Setup a GPU GUI domain named "sys-gui-gpu". The GPU is attached to the qube
and all graphics computation are handled by this qube. Requires a dedicated
graphics card (external GPU) and PCI passthrough support.

%prep
%setup -q

%build

%check

%pre

%install
rm -rf %{buildroot}
install -m 755 -d \
%{buildroot}/srv/salt/qusal \
%{buildroot}%{_docdir}/%{name} \
%{buildroot}%{_defaultlicensedir}/%{name}

for license in $(echo "%{license_csv}" | tr "," " "); do
license_dir="LICENSES"
if test -d "salt/%{project}/LICENSES"; then
license_dir="salt/%{project}/LICENSES"
fi
install -m 644 "${license_dir}/${license}.txt" %{buildroot}%{_defaultlicensedir}/%{name}/
done

install -m 644 salt/%{project}/README.md %{buildroot}%{_docdir}/%{name}/
rm -rf \
salt/%{project}/LICENSES \
salt/%{project}/README.md \
salt/%{project}/.*
cp -rv salt/%{project} %{buildroot}/srv/salt/qusal/%{name}

%post
if test "$1" = "1"; then
## Install
qubesctl top.enable qvm.sys-gui pillar=True
qubesctl state.apply sys-gui-gpu.create
qubesctl --skip-dom0 --targets=tpl-sys-gui state.apply sys-gui-gpu.install
qubesctl --skip-dom0 --targets=sys-gui-gpu state.apply sys-gui-gpu.configure
qubesctl state.apply sys-gui-gpu.prefs
elif test "$1" = "2"; then
## Upgrade
true
fi

%preun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%postun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%files
%defattr(-,root,root,-)
%license %{_defaultlicensedir}/%{name}/*
%doc %{_docdir}/%{name}/README.md
%dir /srv/salt/qusal/%{name}
/srv/salt/qusal/%{name}/*
%dnl TODO: missing '%ghost', files generated during %post, such as Qrexec policies.

%changelog

112 changes: 112 additions & 0 deletions rpm_spec/qusal-sys-gui-vnc.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <[email protected]>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

%define project sys-gui-vnc
%define license_csv AGPL-3.0-or-later,GPL-2.0-only
## Reproducibility.
%define source_date_epoch_from_changelog 1
%define use_source_date_epoch_as_buildtime 1
%define clamp_mtime_to_source_date_epoch 1
## Changelog is trimmed according to current date, not last date from changelog.
%define _changelog_trimtime 0
%define _changelog_trimage 0
%global _buildhost %{name}
## Python bytecode interferes when updates occur and restart is not done.
%undefine __brp_python_bytecompile

Name: qusal-sys-gui-vnc
Version: 0.0.1
Release: 1%{?dist}
Summary:
Group: qusal
Packager: %{?_packager}%{!?_packager:Ben Grande <[email protected]>}
Vendor: Ben Grande
License: AGPL-3.0-or-later AND GPL-2.0-only
URL: https://github.com/ben-grande/qusal
BugURL: https://github.com/ben-grande/qusal/issues
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch

Requires: qubes-mgmt-salt
Requires: qubes-mgmt-salt-dom0
Requires: qusal-sys-gui


%description
Setup a VNC GUI domain named "sys-gui-vnc". The qube spawns a VNC server and
you can connect from other qubes to it. It is primarily intended for remote
administration.

%prep
%setup -q

%build

%check

%pre

%install
rm -rf %{buildroot}
install -m 755 -d \
%{buildroot}/srv/salt/qusal \
%{buildroot}%{_docdir}/%{name} \
%{buildroot}%{_defaultlicensedir}/%{name}

for license in $(echo "%{license_csv}" | tr "," " "); do
license_dir="LICENSES"
if test -d "salt/%{project}/LICENSES"; then
license_dir="salt/%{project}/LICENSES"
fi
install -m 644 "${license_dir}/${license}.txt" %{buildroot}%{_defaultlicensedir}/%{name}/
done

install -m 644 salt/%{project}/README.md %{buildroot}%{_docdir}/%{name}/
rm -rf \
salt/%{project}/LICENSES \
salt/%{project}/README.md \
salt/%{project}/.*
cp -rv salt/%{project} %{buildroot}/srv/salt/qusal/%{name}

%post
if test "$1" = "1"; then
## Install
qubesctl top.enable qvm.sys-gui pillar=True
qubesctl state.apply sys-gui-vnc.create
qubesctl --skip-dom0 --targets=tpl-sys-gui state.apply sys-gui-vnc.install
qubesctl --skip-dom0 --targets=sys-gui-vnc state.apply sys-gui-vnc.configure
qubesctl state.apply sys-gui-vnc.prefs
elif test "$1" = "2"; then
## Upgrade
true
fi

%preun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%postun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%files
%defattr(-,root,root,-)
%license %{_defaultlicensedir}/%{name}/*
%doc %{_docdir}/%{name}/README.md
%dir /srv/salt/qusal/%{name}
/srv/salt/qusal/%{name}/*
%dnl TODO: missing '%ghost', files generated during %post, such as Qrexec policies.

%changelog

113 changes: 113 additions & 0 deletions rpm_spec/qusal-sys-gui.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# SPDX-FileCopyrightText: 2023 - 2024 Benjamin Grande M. S. <[email protected]>
#
# SPDX-License-Identifier: AGPL-3.0-or-later

%define project sys-gui
%define license_csv AGPL-3.0-or-later,GPL-2.0-only
## Reproducibility.
%define source_date_epoch_from_changelog 1
%define use_source_date_epoch_as_buildtime 1
%define clamp_mtime_to_source_date_epoch 1
## Changelog is trimmed according to current date, not last date from changelog.
%define _changelog_trimtime 0
%define _changelog_trimage 0
%global _buildhost %{name}
## Python bytecode interferes when updates occur and restart is not done.
%undefine __brp_python_bytecompile

Name: qusal-sys-gui
Version: 0.0.1
Release: 1%{?dist}
Summary: Hybrid GUI domain in Qubes OS
Group: qusal
Packager: %{?_packager}%{!?_packager:Ben Grande <[email protected]>}
Vendor: Ben Grande
License: AGPL-3.0-or-later AND GPL-2.0-only
URL: https://github.com/ben-grande/qusal
BugURL: https://github.com/ben-grande/qusal/issues
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch

Requires: qubes-mgmt-salt
Requires: qubes-mgmt-salt-dom0
Requires: qusal-dotfiles
Requires: qusal-utils


%description
Setup a Hybrid GUI domain named "sys-gui". Dom0 remains with the X Server and
graphics drivers but runs only a single GUI application, a full-screen proxy
for the GUI domain's graphical server.

%prep
%setup -q

%build

%check

%pre

%install
rm -rf %{buildroot}
install -m 755 -d \
%{buildroot}/srv/salt/qusal \
%{buildroot}%{_docdir}/%{name} \
%{buildroot}%{_defaultlicensedir}/%{name}

for license in $(echo "%{license_csv}" | tr "," " "); do
license_dir="LICENSES"
if test -d "salt/%{project}/LICENSES"; then
license_dir="salt/%{project}/LICENSES"
fi
install -m 644 "${license_dir}/${license}.txt" %{buildroot}%{_defaultlicensedir}/%{name}/
done

install -m 644 salt/%{project}/README.md %{buildroot}%{_docdir}/%{name}/
rm -rf \
salt/%{project}/LICENSES \
salt/%{project}/README.md \
salt/%{project}/.*
cp -rv salt/%{project} %{buildroot}/srv/salt/qusal/%{name}

%post
if test "$1" = "1"; then
## Install
qubesctl top.enable qvm.sys-gui pillar=True
qubesctl state.apply sys-gui.create
qubesctl --skip-dom0 --targets=tpl-sys-gui state.apply sys-gui.install
qubesctl --skip-dom0 --targets=sys-gui state.apply sys-gui.configure
qubesctl state.apply sys-gui.prefs
elif test "$1" = "2"; then
## Upgrade
true
fi

%preun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%postun
if test "$1" = "0"; then
## Uninstall
true
elif test "$1" = "1"; then
## Upgrade
true
fi

%files
%defattr(-,root,root,-)
%license %{_defaultlicensedir}/%{name}/*
%doc %{_docdir}/%{name}/README.md
%dir /srv/salt/qusal/%{name}
/srv/salt/qusal/%{name}/*
%dnl TODO: missing '%ghost', files generated during %post, such as Qrexec policies.

%changelog

Loading

0 comments on commit 735b324

Please sign in to comment.