Ubuntu 25.10 has got an AppArmor policy for gs (ghostscript) which
prevents its accesses to files outside of $HOME/:
[in /etc/apparmoer.d/gs]
# allow access to files with selected extensions under HOME
owner file rw @{HOME}/**.@{gs_file_ext},
This change has resulted in build errors under Git repos not under
$HOME/ [1].
As a workaround, tweak recipes involving ghostscript so that their
input/output files are under /tmp, where rw accesses are allowed by
a policy included from abstructions/user-tmp.
Link [1]:
https://askubuntu.com/questions/1560219/ghostscript-unable-to-write-to-non-boot-volume-after-update-to-25-10
Signed-off-by: Akira Yokosawa <[email protected]>
---
Makefile | 5 ++++-
a2ping-rule.mk | 40 +++++++++++++++++++++++++++++++---------
epstopdf-rule.mk | 48 ++++++++++++++++++++++++++++++++++++------------
3 files changed, 71 insertions(+), 22 deletions(-)
diff --git a/Makefile b/Makefile
index 1e63c0b5..a72b4794 100644
--- a/Makefile
+++ b/Makefile
@@ -503,7 +503,10 @@ endif
$(PDFTARGETS_OF_SVG_CROP): %-crop.pdf: %.pdf
@echo "Crop $< (pdfcrop)"
- @pdfcrop $< $@ > /dev/null
+ @TMP=`mktemp -d` && cp $< $$TMP/$(notdir $<) && \
+ pdfcrop $$TMP/$(notdir $<) $$TMP/$(notdir $@) > /dev/null && \
+ mv -f $$TMP/$(notdir $@) $@ && \
+ rm -rf $$TMP/
ifdef RSVG_CONVERT
FALLBACK_RSVG_CONVERT = || (cat $<i | rsvg-convert $(RSVG_FMT_OPT) > $@ &&
echo "$< --> $(suffix $@) (fallback rsvg-convert)")
diff --git a/a2ping-rule.mk b/a2ping-rule.mk
index 62de9704..da20488e 100644
--- a/a2ping-rule.mk
+++ b/a2ping-rule.mk
@@ -38,10 +38,14 @@ endif
ifeq ($(A2PING_GSCNFL),1)
$(error You need to update a2ping. See #7 in FAQ-BUILD.txt)
endif
- @cp $< $<i
- @sh $(FIXANEPSFONTS) $<i
- @a2ping --below --hires --bboxfrom=compute-gs $<i $@ > /dev/null 2>&1
- @rm -f $<i
+ @TMP=`mktemp -d` && \
+ TMP1=$$TMP/$(notdir $<i) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMP1 && \
+ sh $(FIXANEPSFONTS) $$TMP1 && \
+ a2ping --below --hires --bboxfrom=compute-gs $$TMP1 $$TMPDST >
/dev/null 2>&1 && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
$(PDFTARGETS_OF_TEX): %.pdf: %.eps
@echo "$< --> $(suffix $@) (by a2ping)"
@@ -52,11 +56,23 @@ ifeq ($(A2PING_GSCNFL),1)
$(error a2ping version conflict. See #7 in FAQ-BUILD.txt)
endif
ifeq ($(A2PING_GSCNFL),2)
- @a2ping --below --gsextra=-dALLOWPSTRANSPARENCY $< $(basename $@)__.pdf
> /dev/null 2>&1
- @pdfcrop --hires $(basename $@)__.pdf $@ > /dev/null
- @rm -f $(basename $@)__.pdf
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMP1=$$TMP/$(notdir $(basename $@)__.pdf) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ a2ping --below --gsextra=-dALLOWPSTRANSPARENCY $$TMPSRC $$TMP1 >
/dev/null 2>&1 && \
+ pdfcrop --hires $$TMP1 $$TMPDST > /dev/null && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
else
- @a2ping --below --hires --bboxfrom=compute-gs $< $@ > /dev/null 2>&1
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ a2ping --below --hires --bboxfrom=compute-gs $$TMPSRC $$TMPDST >
/dev/null 2>&1 && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
endif
$(PDFTARGETS_OF_EPSORIG_NOFIXFONTS) $(PDFTARGETS_OF_EPSOTHER): %.pdf: %.eps
@@ -67,4 +83,10 @@ endif
ifeq ($(A2PING_GSCNFL),1)
$(error a2ping version conflict. See #7 in FAQ-BUILD.txt)
endif
- @a2ping --below --hires --bboxfrom=compute-gs $< $@ > /dev/null 2>&1
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ a2ping --below --hires --bboxfrom=compute-gs $$TMPSRC $$TMPDST >
/dev/null 2>&1 && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
diff --git a/epstopdf-rule.mk b/epstopdf-rule.mk
index ea0ff791..56261259 100644
--- a/epstopdf-rule.mk
+++ b/epstopdf-rule.mk
@@ -14,10 +14,15 @@ $(PDFTARGETS_OF_GNUPLOT_NEEDFIXFONTS): %.pdf: %.eps
ifndef EPSTOPDF
$(error $< --> $@: epstopdf not found. Please install it)
endif
- @sh $(FIXFONTS) < $< > $(basename $<)__.eps
- @eps2eps $(basename $<)__.eps $(basename $<)___.eps
- @epstopdf $(GS_OPT) $(basename $<)___.eps $@
- @rm -f $(basename $<)__.eps $(basename $<)___.eps
+ @TMP=`mktemp -d` && \
+ TMP1=$$TMP/$(notdir $(basename $<)__.eps) && \
+ TMP2=$$TMP/$(notdir $(basename $<)___.eps) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ sh $(FIXFONTS) < $< > $$TMP1 && \
+ eps2eps $$TMP1 $$TMP2 && \
+ epstopdf $(GS_OPT) $$TMP2 $$TMPDST && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
$(PDFTARGETS_OF_TEX): %.pdf: %.eps
@echo "$< --> $(suffix $@)"
@@ -25,19 +30,38 @@ ifndef EPSTOPDF
$(error $< --> $@: epstopdf not found. Please install it)
endif
ifeq ($(GS_953_OR_LATER),1)
- @eps2eps -dALLOWPSTRANSPARENCY $< $(basename $<)__.eps
- @epstopdf --gsopt=-dALLOWPSTRANSPARENCY $(GS_OPT) $(basename $<)__.eps
$@
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMP1=$$TMP/$(notdir $(basename $<)__.eps) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ eps2eps -dALLOWPSTRANSPARENCY $$TMPSRC $$TMP1 && \
+ epstopdf --gsopt=-dALLOWPSTRANSPARENCY $(GS_OPT) $$TMP1 $$TMPDST &&
\
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
else
- @eps2eps -dNOSAFER $< $(basename $<)__.eps
- @epstopdf --nosafer $(GS_OPT) $(basename $<)__.eps $@
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMP1=$$TMP/$(notdir $(basename $<)__.eps) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ eps2eps -dNOSAFER $$TMPSRC $$TMP1 && \
+ epstopdf --nosafer $(GS_OPT) $$TMP1 $$TMPDST && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
endif
- @rm -f $(basename $<)__.eps
$(PDFTARGETS_OF_EPSORIG_NOFIXFONTS) $(PDFTARGETS_OF_EPSOTHER): %.pdf: %.eps
@echo "$< --> $(suffix $@)"
ifndef EPSTOPDF
$(error $< --> $@: epstopdf not found. Please install it)
endif
- @eps2eps $< $(basename $<)__.eps
- @epstopdf $(GS_OPT) $(basename $<)__.eps $@
- @rm -f $(basename $<)__.eps
+ @TMP=`mktemp -d` && \
+ TMPSRC=$$TMP/$(notdir $<) && \
+ TMP1=$$TMP/$(notdir $(basename $<)__.eps) && \
+ TMPDST=$$TMP/$(notdir $@) && \
+ cp $< $$TMPSRC && \
+ eps2eps $$TMPSRC $$TMP1 && \
+ epstopdf $(GS_OPT) $$TMP1 $$TMPDST && \
+ mv -f $$TMPDST $@ && \
+ rm -rf $$TMP
--
2.43.0