mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-08-17 12:42:16 +01:00
chore(libreoffice): switch to unoconverter (#715)
This commit is contained in:
@@ -138,17 +138,17 @@ RUN \
|
|||||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
# Install LibreOffice & unoconv.
|
# Install LibreOffice & unoconverter.
|
||||||
echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list &&\
|
echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list &&\
|
||||||
apt-get update -qq &&\
|
apt-get update -qq &&\
|
||||||
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends -t bookworm-backports libreoffice &&\
|
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends -t bookworm-backports libreoffice &&\
|
||||||
curl -Ls https://raw.githubusercontent.com/dagwieers/unoconv/master/unoconv -o /usr/bin/unoconv &&\
|
curl -Ls https://raw.githubusercontent.com/gotenberg/unoconverter/v0.0.1/unoconv -o /usr/bin/unoconverter &&\
|
||||||
chmod +x /usr/bin/unoconv &&\
|
chmod +x /usr/bin/unoconverter &&\
|
||||||
# unoconv will look for the Python binary, which has to be at version 3.
|
# unoconverter will look for the Python binary, which has to be at version 3.
|
||||||
ln -s /usr/bin/python3 /usr/bin/python &&\
|
ln -s /usr/bin/python3 /usr/bin/python &&\
|
||||||
# Verify installations.
|
# Verify installations.
|
||||||
libreoffice --version &&\
|
libreoffice --version &&\
|
||||||
unoconv --version &&\
|
unoconverter --version &&\
|
||||||
# Cleanup.
|
# Cleanup.
|
||||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
@@ -181,7 +181,7 @@ COPY --from=binary-stage /home/gotenberg /usr/bin/
|
|||||||
# Environment variables required by modules or else.
|
# Environment variables required by modules or else.
|
||||||
ENV CHROMIUM_BIN_PATH /usr/bin/chromium
|
ENV CHROMIUM_BIN_PATH /usr/bin/chromium
|
||||||
ENV LIBREOFFICE_BIN_PATH /usr/lib/libreoffice/program/soffice.bin
|
ENV LIBREOFFICE_BIN_PATH /usr/lib/libreoffice/program/soffice.bin
|
||||||
ENV UNOCONV_BIN_PATH /usr/bin/unoconv
|
ENV UNOCONVERTER_BIN_PATH /usr/bin/unoconverter
|
||||||
ENV PDFTK_BIN_PATH /usr/bin/pdftk
|
ENV PDFTK_BIN_PATH /usr/bin/pdftk
|
||||||
ENV QPDF_BIN_PATH /usr/bin/qpdf
|
ENV QPDF_BIN_PATH /usr/bin/qpdf
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ var (
|
|||||||
ErrMalformedPageRanges = errors.New("page ranges are malformed")
|
ErrMalformedPageRanges = errors.New("page ranges are malformed")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Api is a module which provides an [Uno] to interact with LibreOffice.
|
// Api is a module which provides a [Uno] to interact with LibreOffice.
|
||||||
type Api struct {
|
type Api struct {
|
||||||
autoStart bool
|
autoStart bool
|
||||||
args libreOfficeArguments
|
args libreOfficeArguments
|
||||||
@@ -115,9 +115,9 @@ func (a *Api) Provision(ctx *gotenberg.Context) error {
|
|||||||
return errors.New("LIBREOFFICE_BIN_PATH environment variable is not set")
|
return errors.New("LIBREOFFICE_BIN_PATH environment variable is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
unoBinPath, ok := os.LookupEnv("UNOCONV_BIN_PATH")
|
unoBinPath, ok := os.LookupEnv("UNOCONVERTER_BIN_PATH")
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.New("UNOCONV_BIN_PATH environment variable is not set")
|
return errors.New("UNOCONVERTER_BIN_PATH environment variable is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
a.args = libreOfficeArguments{
|
a.args = libreOfficeArguments{
|
||||||
@@ -155,7 +155,7 @@ func (a *Api) Validate() error {
|
|||||||
|
|
||||||
_, statErr = os.Stat(a.args.unoBinPath)
|
_, statErr = os.Stat(a.args.unoBinPath)
|
||||||
if os.IsNotExist(statErr) {
|
if os.IsNotExist(statErr) {
|
||||||
err = multierr.Append(err, fmt.Errorf("uno binary path does not exist: %w", statErr))
|
err = multierr.Append(err, fmt.Errorf("unoconverter binary path does not exist: %w", statErr))
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -118,13 +118,13 @@ func TestApi_Validate(t *testing.T) {
|
|||||||
{
|
{
|
||||||
scenario: "empty LibreOffice bin path",
|
scenario: "empty LibreOffice bin path",
|
||||||
binPath: "",
|
binPath: "",
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
expectError: true,
|
expectError: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
scenario: "LibreOffice bin path does not exist",
|
scenario: "LibreOffice bin path does not exist",
|
||||||
binPath: "/foo",
|
binPath: "/foo",
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
expectError: true,
|
expectError: true,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -142,7 +142,7 @@ func TestApi_Validate(t *testing.T) {
|
|||||||
{
|
{
|
||||||
scenario: "validate success",
|
scenario: "validate success",
|
||||||
binPath: os.Getenv("CHROMIUM_BIN_PATH"),
|
binPath: os.Getenv("CHROMIUM_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
expectError: false,
|
expectError: false,
|
||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ func TestLibreOfficeProcess_Start(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -48,7 +48,7 @@ func TestLibreOfficeProcess_Start(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: "foo",
|
binPath: "foo",
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -92,7 +92,7 @@ func TestLibreOfficeProcess_Stop(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -147,7 +147,7 @@ func TestLibreOfficeProcess_Healthy(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -254,7 +254,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -284,7 +284,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -312,7 +312,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -340,7 +340,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -369,7 +369,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -398,7 +398,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -427,7 +427,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -456,7 +456,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
@@ -485,7 +485,7 @@ func TestLibreOfficeProcess_pdf(t *testing.T) {
|
|||||||
libreOffice: newLibreOfficeProcess(
|
libreOffice: newLibreOfficeProcess(
|
||||||
libreOfficeArguments{
|
libreOfficeArguments{
|
||||||
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
binPath: os.Getenv("LIBREOFFICE_BIN_PATH"),
|
||||||
unoBinPath: os.Getenv("UNOCONV_BIN_PATH"),
|
unoBinPath: os.Getenv("UNOCONVERTER_BIN_PATH"),
|
||||||
startTimeout: 5 * time.Second,
|
startTimeout: 5 * time.Second,
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user