LibreOffice5(8)oxtファイルをzip圧縮するときは最初の階層に注意

ラベル: ,

前の関連記事:LibreOffice5(7)既存インターフェイスを継承してPythonスクリプトをUNOコンポーネント化する例:その2


LibreOfficeのCalcのファイルodtや拡張機能ファイルoxtの実態はzipファイルなのでアーカイブマネージャで解凍することができます。またodtやoxtファイルに戻すときはzipファイルにしてから拡張子をそれぞれ変更すればよいのですが、一番上にくるフォルダ階層を間違わないようしないといけません。

まとめたフォルダを圧縮してはいけない


LibreOffice(31)Pythonマクロをドキュメントファイルに埋め込むでodsファイルを作るときに学習したのですが、すっかり忘れていて今回oxtファイルを作るときに四苦八苦して時間を浪費してしまいました。

例えばpython-tokencounter-calc-addin.oxtファイルを作るためにzipファイルを作るとき。

python-tokencounter-calc-addinフォルダに必要なファイルをまとめてzip圧縮してはいけません。

ちゃんとpython-tokencounter-calc-addinフォルダの中に入ってそこでShiftキーを押しながらすべてのファイルを選択した状態で右クリック。


この状態でファイルを圧縮を選択します。


zip形式で圧縮してできたzipファイルの拡張子をoxtへ変更します。

これでoxtファイルが完成します。

間違ったoxtファイルを拡張機能マネージャーに登録すると「削除」ボタンで削除できなくなる


間違えてpython-tokencounter-calc-addinフォルダを圧縮したzipファイルを作ってしまった場合、

META-INF/manifest.xmlにあるはずのmanifest.xmlファイルがpython-tokencounter-calc-addin/META-INF/manifest.xmlにあるので拡張機能が動きません。

しかし拡張機能マネージャーには登録できてしまいます。


正しく作成したpython-tokencounter-calc-addin.oxtとは別に登録されてしまいますが、間違ったzip圧縮してしまった方には「無効」ボタンが表示されていません。



さらに困ったことに「削除」ボタンをクリックしてもエラーが出てきて削除できません。

拡張機能マネージャーで削除できない拡張機能を削除する方法


結論としてはすっきり削除する方法はわかりませんでした。

Cannot uninstall extension in Linux - Ask LibreOffice

このページをみつけてさらに先ほどのエラー画面にも~/.config/libreoffice/4/user/uno_packages/cache/uno_packages/u12579t6hpdr.tmp_/python-tokencounter-calc-addin.oxtがでていたので、これらを削除してみることにしました。

lu...という名前は各拡張機能固有のようでフォルダの方の中を見ると拡張機能の名前が確認できます。

そのフォルダの中には拡張機能ファイルと同名のフォルダがありその中にoxtファイルの中身が展開されて入っています。

削除したい拡張機能が入っているフォルダとそのフォルダと同名のファイルを削除しました。

これで拡張機能マネージャーにはでてこなくなりました。


しかし再度同じoxtファイルを拡張機能マネージャーに追加しようとすると先ほど削除したlu12579t6hpdr.tmpファイルがありませんといわれて追加できません。

どこかに記録が残っているようですがその削除方法はわかりませんでした。
2015.12.12追記。キャッシュが残っていたのが原因と思われます。キャッシュが削除されるタイミングはLibreOfficeを再起動して拡張機能マネージャーを開いた時です。LibreOffice5(6)既存インターフェイスを継承してPythonスクリプトをUNOコンポーネント化する例:その1参照。)

まあ動かないoxtファイルを再度登録必要性はないのでとくに支障はでないでしょうけど。

ちなみにunopkgを使っても削除できませんでした。

/opt/libreoffice5.0/program/unopkg remove python-tokencounter-calc-addin.oxt

unopkg failed.

/opt/libreoffice5.0/program/unopkg remove -f python-tokencounter-calc-addin.oxt

ERROR: メディアタイプを検出できません:file:///home/pq/.config/libreoffice/4/user/uno_packages/cache/uno_packages/lu12579t6hpdr.tmp_/python-tokencounter-calc-addin.oxt

unopkg failed.

/opt/libreoffice5.0/program/unopkg list python-tokencounter-calc-addin.oxt

Identifier: org.openoffice.legacy.python-tokencounter-calc-addin.oxt
  URL: vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/lu12579t6hpdr.tmp_/python-tokencounter-calc-addin.oxt
  is registered: n/a
  Media-Type: application/vnd.sun.star.package-bundle
  Description:
  bundled Packages: {
    <none>
  }

python-tokencounter-calc-addin.oxtが登録されていないとでています。

それで正しいoxtファイルを拡張機能マネージャーに登録してunopkg listでみて比較してみました。

Identifier: org.openoffice.comp.addin.sample.python.tokencounter-calc-addin
  URL: vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/lu25939tr6atl.tmp_/python-tokencounter-calc-addin.oxt
  is registered: yes
  Media-Type: application/vnd.sun.star.package-bundle
  Description:
  bundled Packages: {
      URL: vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/lu25939tr6atl.tmp_/python-tokencounter-calc-addin.oxt/rdb/sample.rdb
      is registered: yes
      Media-Type: application/vnd.sun.star.uno-typelibrary;type=RDB
      Description:

      URL: vnd.sun.star.expand:$UNO_USER_PACKAGES_CACHE/uno_packages/lu25939tr6atl.tmp_/python-tokencounter-calc-addin.oxt/reg.uno.py
      is registered: yes
      Media-Type: application/vnd.sun.star.uno-component;type=Python
      Description:

  }

META-INF/manifest.xmlの内容がちゃんと登録されています。

zipファイルを作成するときの階層が間違っているとここで気がついたのでした、、、ここにたどり着くまで一晩使ってしまいました、、、

間違ったoxtファイルは追加できないようにしてほしい、、、

参考にしたサイト


Cannot uninstall extension in Linux - Ask LibreOffice
削除できなくなった拡張機能を無理やり削除する方法。

次の関連記事:LibreOffice5(9)oxtファイルによる拡張機能の更新の反映はLibreOfficeの再起動が必要

PR

0 件のコメント:

コメントを投稿