Skip to content

Commit eef9935

Browse files
Merge pull request #140 from geoCML/fonts
Install fonts to geoCML Desktop
2 parents 303cb42 + 1cb1fb1 commit eef9935

File tree

11 files changed

+63
-8
lines changed

11 files changed

+63
-8
lines changed

Dockerfiles/Dockerfile.geocml-desktop

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ USER root
55
WORKDIR /
66

77
RUN apt update
8-
RUN apt install -y nix
8+
RUN apt install -y nix python3-pip
99

1010
RUN useradd -d /home/user -m user
1111

Dockerfiles/Dockerfile.geocml-task-scheduler

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
FROM --platform=linux/amd64 ubuntu:22.04
22

33
USER root
4+
WORKDIR /
45
ARG DEBIAN_FRONTEND=noninteractive
56
RUN apt update
67
RUN apt install -y software-properties-common
78
RUN add-apt-repository ppa:deadsnakes/ppa && apt update
89
RUN apt install -y nix python3.11 python3-pip python3.11-venv python3.11-dev
910

10-
ADD ./build-resources/geocml-task-scheduler/geocml-task-scheduler ./geocml-task-scheduler/geocml-task-scheduler/
11+
RUN mkdir ./geocml-task-scheduler/
1112
COPY ./build-resources/geocml-task-scheduler/make.sh ./make.sh
1213

1314
RUN chmod +x ./make.sh
1415
RUN ./make.sh
1516

17+
ADD ./build-resources/geocml-task-scheduler/geocml-task-scheduler ./geocml-task-scheduler/geocml-task-scheduler/
18+
1619
######### Customize Container Here ###########
1720
######### End Customizations ###########
1821

1922
RUN apt clean autoclean && apt autoremove -y && rm -rf /var/lib/{apt,dpkg,cache,log}/
2023
RUN nix-collect-garbage -d
24+
RUN rm ./make.sh
2125

2226
COPY ./build-resources/geocml-task-scheduler/entrypoint.sh ./entrypoint.sh
2327
RUN chmod +x ./entrypoint.sh

build-resources/geocml-desktop/entrypoint.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,18 @@
33
#! nix-shell -p qgis-ltr dbus
44
#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/tags/24.05.tar.gz
55

6+
pip3 install qgis-plugin-manager --user
7+
export PATH=/home/user/.local/bin:$PATH
8+
mkdir -p ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins
9+
cd ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins
10+
qgis-plugin-manager init
11+
qgis-plugin-manager update
12+
qgis-plugin-manager install "QRestart"
13+
14+
cd ~
15+
mkdir ~/.fonts
16+
find /Persistence/Fonts/ -name '*.ttf' -exec cp {} ~/.fonts \; &
17+
fc-cache -f -v &
18+
619
xpra start :100 --start="qgis /Persistence/geocml-project.qgz" --bind-tcp=0.0.0.0:10000 --tcp-auth=env --no-daemon --no-notifications --no-mdns --no-pulseaudio
720

build-resources/geocml-task-scheduler/entrypoint.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env nix-shell
22
#! nix-shell -i bash
3-
#! nix-shell -p postgresql
3+
#! nix-shell -p postgresql docker_26
44
#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/refs/tags/24.05.tar.gz
55

66
python3.11 -m pip install -r /geocml-task-scheduler/geocml-task-scheduler/requirements.txt
Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,22 @@
11
from task import Task
22
from task_scheduler import TaskScheduler
3-
from backup_geocml_db import backup_geocml_db
4-
from restore_geocml_db_from_backups import restore_geocml_db_from_backups
5-
from register_with_drgon import register_with_drgon
3+
from tasks.backup_geocml_db import backup_geocml_db
4+
from tasks.restore_geocml_db_from_backups import restore_geocml_db_from_backups
5+
from tasks.register_with_drgon import register_with_drgon
6+
from tasks.refresh_font_cache import refresh_font_cache
67

78
scheduler = TaskScheduler()
89

910
# DEFINE TASKS HERE
1011
backup_geocml_db_task = Task(backup_geocml_db, ())
1112
restore_geocml_db_task = Task(restore_geocml_db_from_backups, ())
1213
register_with_drgon_task = Task(register_with_drgon, ())
14+
refresh_font_cache_task = Task(refresh_font_cache, ())
1315

1416
# ADD TASKS TO SCHEDULER HERE
1517
scheduler.add(backup_geocml_db_task, 3600) # task runs every hour
1618
scheduler.add(restore_geocml_db_task, 1) # task runs every second until stopped
1719
scheduler.add(register_with_drgon_task, 60)
18-
20+
scheduler.add(refresh_font_cache_task, 60)
1921

2022
scheduler.tick()
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import subprocess
2+
from enum import Enum
3+
4+
class ServiceController(object):
5+
def restart_service(self, service):
6+
return subprocess.run(["docker", "restart", f"{self.get_container_id(service)}"])
7+
8+
def get_container_id(self, service):
9+
return subprocess.run(["docker", "ps", "-aqf", f"name={service}"], capture_output=True, text=True).stdout.split("\n")[0]
10+
11+
def run_command_sh(self, service, cmd):
12+
# BE VERY CAREFUL WITH THIS METHOD! BAD THINGS COULD HAPPEN IF YOU ARE NOT.
13+
return subprocess.run(f'docker exec {self.get_container_id(service)} sh -c "{cmd}"', capture_output=True, text=True, shell=True)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from task_logger import log
2+
from service_controller import ServiceController
3+
4+
controller = ServiceController()
5+
def refresh_font_cache():
6+
out = controller.run_command_sh("geocml-desktop", "find /Persistence/Fonts/ -name '*.ttf' -exec cp {} ~/.fonts \; &")
7+
if out.stderr:
8+
log(f"Failed to collect fonts from /Persistence/Fonts/: {out.stderr}")
9+
return 0
10+
11+
out = controller.run_command_sh("geocml-desktop", "fc-cache -f -v &")
12+
if out.stderr:
13+
log(f"Failed to update font cache: {out.stderr}")
14+
return 0

0 commit comments

Comments
 (0)