「ユニバーサルオフィスコンバータ (unoconv)」の版間の差分

提供:MoodleDocs
移動先:案内検索
 
221行目: 221行目:
[[mod/assign/feedback/editpdf/testunoconv/initd | Debian用の初期化スクリプト]]
[[mod/assign/feedback/editpdf/testunoconv/initd | Debian用の初期化スクリプト]]


[[mod/assign/feedback/editpdf/testunoconv/initdcentos6 | CentOS / RedHat6.xの初期化スクリプト]]
[[mod/assign/feedback/editpdf/testunoconv/initdcentos6 | CentOS/RedHat6.xの初期化スクリプト]]


[[mod/assign/feedback/editpdf/testunoconv/systemd | CentOS / RedHat7.x用のSystemDサービススクリプト]]
[[mod/assign/feedback/editpdf/testunoconv/systemd | CentOS/RedHat7.x用のSystemDサービススクリプト]]


==処理を別のサーバにオフロードします==
==処理を別のサーバにオフロードします==

2020年10月26日 (月) 04:24時点における最新版

unoconvとは何ですか?

unoconv は、異なるオフィスドキュメントファイル形式間で変換するために使用されるコマンドラインプログラムです。 LibreOfficeのインスタンスを使用して変換を行い、課題活動がドキュメントをPDFに変換して注釈を付けるために使用します。 unoconvがインストールされていない場合、唯一の影響は、学生がPDFドキュメントをアップロードしたときにのみ課題活動で注釈が許可されることです。

unoconvをインストールするために必要な手順は、Moodleをインストールしたオペレーティングシステムによって異なります。

Linuxにunoconvをインストールする

unoconvの必要なバージョンは少なくとも0.7です。 Linuxのフレーバーによっては、これはパッケージマネージャで利用できる場合があり、次のコマンドで直接インストールできます。

Ubuntu 18.04 LTS

apt-get install unoconv
mkdir /var/www/.config
chown www-data:www-data /var/www/.config


Ubuntu 16.04 LTS

apt-get install unoconv

パッケージマネージャに古いバージョンのパッケージが含まれている場合は、新しいバージョンを見つけて手動でインストールする必要があります(Debian Testing)。 Unoconv自体は単なるPythonスクリプトであるため、依存関係はほとんどありません。

潜在的な問題:

  • 一部のシステムでは、apacheユーザのホームディレクトリが存在しないフォルダに設定されています。これにより、unoconvが失敗する可能性があります。これには2つの解決策があります。1つは、apacheユーザ用の(書き込み可能な)ホームディレクトリ(/home/www-dataなど)を作成することです。もう1つは、apacheユーザ(有効で書き込み可能なホームディレクトリを持つユーザ)以外の別のユーザとしてunoconvリスナー(以下で説明)を実行することです。
  • まだ14.04LTSを実行している場合、unoconvは出荷時に機能しません。これは最も効率的なルートではないかもしれませんが、最初に上記のようにパッケージマネージャからunoconv(バージョン0.6)をインストールすることで機能しました。次に、Github( https://github.com/dagwieers/unoconv )からunoconv 0.7を取得し、PPA( https://launchpad.net/~libreoffice/+archive/ubuntu/ppa )を使用して最新のlibreofficeにアップグレードする必要があります。unoconvのGithubバージョンにmoodleをポイントします。最初の行の 'python' を 'python3' に変更して、Pythonunoconvファイルを変更する必要があります。また、ディレクトリ/var/wwwのアクセス許可を変更して、ユーザwww-dataが書き込むことができるようにする必要があります(www-dataはホームディレクトリに書き込む必要がありますが、デフォルトではできません)。

Debian Stableでは、[ https://packages.debian.org/jessie-backports/unoconvunoconv ]をインストールする最もクリーンな方法はJessie-backportsを使用することです。まず、/etc/apt/sources.listでバックポートリポジトリ行を有効にします。

#### Jessie-backports  ####
deb http://ftp.debian.org/debian jessie-backports main

次に、jessie-backportsからunoconvを更新してインストールします。

apt-get update
apt-get install -t jessie-backports unoconv

パッケージはあなたのために必要なすべての依存関係をもたらします。

Ubuntu 14.04 LTS

1)optディレクトリに移動します

cd /opt


2)unoconvをダウンロードする

sudo wget https://raw.githubusercontent.com/dagwieers/unoconv/master/unoconv


3)最初の行の 'python' を 'python3' に変更してPythonunoconvファイルを変更します

sudo nano/opt/unoconv


#!/usr/bin/env python3


4)unoconvを実行可能にする

sudo chmod ugo+x /opt/unoconv

5)LibreOffice PPAをシステムに追加し、最新バージョンをインストールします

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice


6)apacheがホームディレクトリに書き込めるようにパーミッションを変更します

sudo chown www-data /var/www


7)ブラウザから以下にに移動します サイト管理 > サーバ > システムパスそしてパスをunoconvに追加します
/opt/unoconv

  • 注:デフォルトのパスを保持したい場合は、/usr/binにシンボリックリンクを追加してください。
sudo ln -s /opt/unoconv /usr/bin/

8)以下に移動します サイト管理 > プラグイン > 活動モジュール > 課題 > フィードバックプラグイン > PDF注釈 > unoconvパスをテストする

すると以下が表示されるはずです:

unoconvパスが適切に構成されているようです

  • 変換されたpdfテストファイルをダウンロードします。 (PDFのロードに失敗した場合は、www-dataがホームディレクトリ/var/wwwに書き込めることを確認してください)

CentOS / RedHat

始める直前に、最新のLibreOffice 6.3.2を直接インストールすることを検討してください。使用しているディストリビューションの一部ではないRPMパッケージから。 2016年11月の時点で、CentOSとRedHat7.2にはOpenOffice4.3が付属しています。したがって、このバージョンの使用に興味がなく、最新の6.3独立LibreOffice 6.3をインストールしたい場合は、以下を発行して、OSにある可能性のあるopenofficeパッケージをすべて削除してください。

yum remove openoffice* libreoffice*

ドキュメントの変換を改善するために、ローカライズされたlibreofficeバージョンを選択することをお勧めします。

yum install libreoffice libreoffice-pyuno
git clone https://github.com/dagwieers/unoconv.git
#コピー
cp unoconv/unoconv /usr/bin
#またはunoconvを/usr binにリンクします
ln -s unoconv/unoconv /usr/bin/unoconv

注:インストールするバージョン(openofficeまたはlibreoffice)に応じて、*-pyunoパッケージをインストールしたことを確認してください。 (ヘッドレスパッケージはすでにコアにコンパイルされています)

正しく構成されていることを確認してください: http://your-moodle/admin/search.php?query=unoconv

本番サーバは、リスナーモードでのunoconvの実行を検討する必要があります。unoconvのインストール#unoconvリスナーを実行するを参照するか、以下の指示に従ってください。

vi /etc/systemd/system/unoconv.service

次に、次の構成をコピーして貼り付けます。

[Unit]
Description=Unoconv listener for document conversions
Documentation=https://github.com/dagwieers/unoconv
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
Environment="UNO_PATH=/usr/lib64/libreoffice/program"
ExecStart=/usr/bin/unoconv --listener

[Install]
WantedBy=multi-user.target

次に、上記のサービスを有効にして開始します

systemctl enable unoconv.service
systemctl start unoconv.service

selinuxが有効になっている場合は、設定する必要があります

#setsebool -P httpd_execmem on

OSXにunoconvをインストールする

LibreOffice for Macをダウンロードしてインストールします。残念ながら、LibreOfficeの新しいバージョンは現在Mac用のunoconvと互換性がなく、LibreOffice 4.2をインストールする必要があります(直接ダウンロードリンク-https://downloadarchive.documentfoundation.org/libreoffice/old/4.2.5.2/mac/x86_64/LibreOffice_4 .2.5.2_MacOS_x86-64.dmg)。

unoconvpythonスクリプトの最新バージョンを入手してください。これを行う1つの方法は、http://brew.sh/brewを使用することです。

brew install unoconv

まだ行っていない場合は、ghostscriptをインストールしてください。 ghostscriptをインストールする1つの方法は、http://brew.sh/brewを使用することでもあります。

brew install ghostscript

Moodleでパスをunoconvとghostscriptに設定します( サイト管理 > サーバ > システムパス )。 brewを使用した場合は、両方とも/usr/local/binにインストールされます。

LibreOfficeは、いくつかの一時ファイルを作成するために、現在のユーザのホームディレクトリへの書き込みアクセス権を必要とします。 unoconvがWebサーバユーザ(_www)として実行されている場合、通常はこのパーミッションがありません。

これを回避する方法はいくつかあります。1つの方法は、_www ユーザに/Library/WebServerへの書き込みアクセス権を与えることです。

別の解決策は、このユーザのホームディレクトリが別の場所にあることをLibreOfficeに納得させることです。これは、このコードをunoconvpythonスクリプトの先頭に挿入することで実行できます。 挿入するコード:

  1. ホームを書き込み可能なフォルダに設定します。
# Set home to a writable folder. 
os.environ['HOME'] = '/tmp/'                                                                                                        

これは、行 exitcode = 0 の直後の行36に挿入する必要があります。

Windowsにunoconvをインストールする

LibreOffice forWindowsをダウンロードしてインストールします。 Open Officeも同様に機能しますが、unonconvのドキュメントはLibreOfficeに設定されています。

https://github.com/dagwieers/unoconv/releasesからunoconvスクリプトの最新バージョンをダウンロードします(zipバージョンをダウンロードします)。

ダウンロードしたzipファイルから-1つのファイル unoconv-0.7\unoconv(ファイル拡張子なし)を抽出します。これはunoconvスクリプトです。パッケージ内の他のファイルは必要ありません。

ダウンロードしたスクリプトの名前を unoconv.py にし、C:\Program FilesまたはC:\Program Files(x 86)のいずれかのフォルダにコピーします。

unoconv.pyと同じフォルダにバッチファイルを作成し、 unoconv.bat ような名前を付けます。これは、次の内容のバッチファイルである必要があります。

@"C:\Program Files\LibreOffice (or Open Office #v)\program\python.exe" c:\unoconv\unoconv.py %*

次に、Moodleでパスを設定する 必要があります。

adminとしてログインし、 サイト管理 > サーバ > システムパス に移動します。

セットする: Path to Ghostscript (pathtogs) C:\Program Files\gs\gsversion\bin\gswin64c.exe gswin32.exeまたはgswin64.exeは使用しないでください。これらはコマンドラインプログラムではありません。gswin32c.exeまたはgswin64c.exeを使用してください。

セットする: Path to Python (pathtopython) to C:\Program Files (x86)\OpenOffice v#(or Libra Office v#)\program\python.exe 使用するプログラムをパスで特定し、GhostscriptとPythonの両方の完全なexe名を含めます。

pathtoステートメントを保存すると、Moodleが必要なファイルと通信している場合は緑色のチェックマークが表示されます。

サイト管理 > プラグイン > ドキュメントコンバータ に移動し、 Unoconv の設定を選択し有効にします。

パスステートメントを入力して Path to unoconv document converter : C:\Program Files (x86)\unoconv\unoconv.bat .batファイルのフルネームを含めます。

テストghostscriptとunoconvは、管理テストページ サイト管理 > プラグイン > 活動モジュール > 課題 > フィードバックプラグイン > PDF注釈 で正しく機能しています。

unoconvリスナーを実行する

Unoconvは、ドキュメントを変換するときにクライアント/サーバプロセスを利用します。デフォルトでは、実行中のサーバプロセスがない場合、unoconvが実行されるたびに、サーバプロセスが開始され、リクエストが送信され、リクエストが完了するとサーバプロセスがシャットダウンされます。このモードの欠点は、2つの要求が同時に送信された場合(これにより、2番目の要求がまだ進行中のときに最初の要求がサーバプロセスをシャットダウンする可能性があります)、2番目の変換要求が失敗することです。 unoconvを構成するためのより堅牢な方法は、起動時にサーバプロセスを開始するか、スクリプトを実行して監視し、クラッシュした場合に再起動することです。

起動時にunoconvリスナーを起動するには、起動スクリプトが必要です。さまざまなオペレーティングシステムとLinuxディストリビューションがさまざまな起動スクリプトを使用しますが、さまざまなシステムの起動スクリプトの例をいくつか示します。

Ubuntuベースのシステム用のUpstartスクリプト

OSX用に起動されたスクリプト

Debian用の初期化スクリプト

CentOS/RedHat6.xの初期化スクリプト

CentOS/RedHat7.x用のSystemDサービススクリプト

処理を別のサーバにオフロードします

オフィスドキュメントを処理すると、Webサーバの負荷が増大し、サイトの応答性に影響を与える可能性があります。大規模なサイトにunoconvをインストールする場合は、Web要求も処理していないサーバでunoconvを実行することを検討してください。

これを行う方法:

上記のインストール手順に従って、各Webサーバとリモートサーバにunoconvをインストールします。

unoconvが起動時に --listener 引数を使用してリモートサーバで開始され、終了すると監視および再起動されることを確認してください(これを行う方法の例については、Debian initスクリプトを参照してください)。デフォルトでは、unoconvはローカルホスト(127.0.0.1)でのみリッスンします。別のサーバからリスナープロセスに接続する場合は、--server 引数を使用してunoconvリスナープロセスを開始する必要があります。

リモートサーバでリスナーを起動するためのコマンド例(0.0.0.0はすべてのインターフェイスでリッスンします):

unoconv --listener --server 0.0.0.0 --port 2002

moodleウェブサーバとunoconvを実行しているマシンの間のファイアウォールポート2002を開きます。

ウェブサーバとunoconvを実行しているマシンの間でmoodleデータルートを共有します。このフォルダは、すべてのサーバの同じパスにマウントする必要があります。

リクエストをリモートサーバに転送するunoconvのラッパーをウェブサーバにインストールします。例:

#!/bin/bash
# Wrapper script for unoconv to forward processing.
# Install to /usr/bin/unoconv-remote with 755 permissions
/usr/bin/unoconv --server=<ip of remote server> "$@"


このラッパースクリプトを指すように、Moodle管理者設定でunoconvへのパスを構成します。

追加のリソース

GitHub dagwieers/unoconvには、unoconvのインストールとトラブルシューティングのヒントに関する追加情報があります。

トラブルシューティング

関連項目