Unloading tcz extensions in Tiny Core Linux

  • 投稿日:
  • 更新日:2016/06/07
  • by
  • カテゴリ:

(English below)

各モジュールがコンパクトで使いやすいTiny Coreですが、tce-loadでロードしたtczパッケージを削除(アンロード)したいことがあります。

フォーラムに載っていた方法をベースに試したところ、うまく行くようなので挙げます。なお、いくつかバグフィクスをしたり改良したりしています。

ダウンロードはこちら

ファイルに何も拡張子がついていませんが、ただのシェルスクリプトです。 このファイルをもとのtce-unloadという名前でも保存して、実行権限をつけておきます。たとえば、

% chmod a+x tce-unload

で、実際にアンロードしたい時は

% ./tce-unload パッケージ名(例: perl5)

でokです。

注意: このスクリプトでは、アンロードしようとしているファイルがプロセスで使用中であるかどうか判別するためにlsofコマンドを使います。 lsofがなくても動作はするようにしてありますが、その場合ファイルの使用中判定ができないので、メインツリー(/usr/local/等)から/tmp/tcloopへのシンボリックリンクの削除をしてしまってからも/tmp/tcloop/(パッケージ名)のディレクトリは残ってしまいます。

そのあたりの判定をうまくやろうと思ったのですが、ashは使い慣れてなくてうまく行きませんでした。なので、以下のようにlsofを入れておいたほうが安全です。

% tce-load -i lsof

こうしておけば(または起動時にロードしておけば)ファイル使用中の判定をします。

なお、現在インストールされているパッケージ名は

% ls /usr/local/tce.installed/

で見ることができます。

最後の注意として、このスクリプトではメインツリー(/usr/local/等)からのリンクの除去、tcz用のループマウントの解除をしていますが、パッケージ間の依存関係までは見ていませんのでご注意ください。

(最後に飛ぶ)

Even each package is very small and tidy in Tiny Core, sometimes you want to unload a tcz package.

I've tried a method based on a forum thread and it works fine with some minor improvements. Here's the script.

Download here

The file has no extension, but it is just a shell script, so you can execute this with sh command or just making it executable. For example,

% chmod a+x tce-unload

When you want to unload a package:

% ./tce-unload {package name}(e.g. perl5)

It unloads a package from a loopback device and removes related files (links).

Note: this script uses lsof command to identify if the files trying to unload are being used. I made the script work without lsof command (this command is a tcz extension in Tiny Core), but the script cannot identify if the files are being used in this case. Consequently the links (mainly under /usr/local) will be removed but /tmp/tcloop/{package} will remain.

I tried to resolve this issue without lsof command, it was not successful as I'm not very familiar with ash shell scripts. So you might want to install lsof command to make it work more safely.

% tce-load -i lsof

With doing above (or loading lsof package at the booting time), the script tries to identify if the related files are being used and emits an error when unloading is not possible.

By the way, you can get currently installed (loaded) packages by the following command:

% ls /usr/local/tce.installed/

Caveat: while this script removes links from the main directories (such as /usr/local) and unmount loopback device for tcz (/tmp/tcloop/{package}), it doesn't check the dependency of the packages.

こちらもよく読まれています