答えを読むときこの投稿、私は私たちのコンピュータでよく使われるプログラムをポータブル(Windowsの意味で)にしてフラッシュドライブにコピーできるかどうか疑問に思います。他のコンピュータから私たちのお気に入りのプログラムにアクセスできますか?
取り外し可能なインストールは可能ですか?
答え1
はい、そうすることができます。これはパッケージマネージャに頼るよりも多くの作業です。 Windowsで「ポータブル」インストールの主な魅力は、まともなパッケージマネージャが不足していることです。
プログラムが依存関係(データファイル、ライブラリなど)を見つけるために準備する必要があります。多くのプログラムが環境変数をサポートしています。いくつかは、バイナリのあるディレクトリまたは関連ディレクトリ(同伴ファイルが../lib
あるかどうかを確認するなど)を確認します。
ルートディレクトリにソフトウェアをインストールします。このルートディレクトリの下に一般的に使用されるカテゴリディレクトリを作成します。、bin
など。すべてのソフトウェアを管理するには、各ソフトウェアを個別にインストールしてから、次のプログラムを使用します。lib
man
拾って入れるカテゴリディレクトリに接続するためのシンボリックリンクフォレストを作成します。バラより追跡プログラムStoweについて簡単に紹介します。だからあなたは次のようなシンボリックリンクを持つでしょう
bin/foo -> ../stow/foo-1.42/bin/foo
bin/foobar -> ../stow/foo-1.42/bin/foobar
man/man1/foo.1 -> ../../stow/foo-1.42/man/man1/foo.1
…
環境変数を設定するにはスクリプトが必要です。これをインストールのルートディレクトリに置き、それを使用して$0
スクリプトを見つけます。スクリプトは親スクリプトに影響を与えることはできないため、一般的なアプローチは、スクリプトに呼び出しシェルで評価できる出力を生成させることです。このスクリプトをと呼びましょうsetup.sh
。
#!/bin/sh
set -e
root=$(dirname -- "$0")
cd -- "$root"
printf "PORTABLE_ROOT='%s'\\n" "${PWD}" | sed "s/'/'\\\\''/g"
prepend () {
eval "set -- \"\$1\" \"\$2\" \"${$1}\""
case :$3: in
*:$PORTABLE_ROOT/$2:*) :;; # already there (at any location)
:: echo '$1=$PORTABLE_ROOT/$2; export $1';; # the path was empty
*) echo '$1=$PORTABLE_ROOT/$2:$3; export $1';; # prepend
esac
}
prepend PATH bin
prepend MANPATH man
prepend LD_LIBRARY_PATH lib
prepend PERL5LIB lib/perl
prepend PYTHONPATH lib/python
…
(警告:テストされていないコード)
シェルでポータブルインストールを使用するには、を実行しますeval "`/path/to/setup.sh`"
。
答え2
確かに。一部の言語(JavaやPythonなど)はある程度移植性を達成しますが、オペレーティングシステム固有のシステムコールを含めると移植性が低下する可能性があります。