だから私は小さなパッケージマネージャーを書いていて、私が遭遇した問題はファイルへのシンボリックリンクを作ることです。
パッケージを/usr/pkg/name-version
にインストールし、ファイルを読み取って、作成するシンボリックリンクを決定します。リンクを作成するためにln
を使用していますが、Linux APIヘッダーをインストールしようとしたときに問題が発生しました。ヘッダーファイル自体をリンクする必要があります。それを含むフォルダーではありません(2つのパッケージがインクルードの同じサブディレクトリにファイルを配置する必要がある場合、1つのパッケージを台無しにせずにできます)。
その問題は解決しましたが、ln
はパスが不完全な場合にエラーを出力します。これは、パッケージがインストールされるまでこれらのディレクトリが存在してはならないため、厄介です。
不足しているディレクトリを作成するln
のフラグはありますか、それとも複雑なbashスクリプトを使用する必要がありますか?
複雑なbashスクリプトは必要ありませんが、単純なワンライナーです。 mkdir --parents
はすべてを処理し、ディレクトリ構造がすでに存在する場合はエラーを出力しません。
他のパッケージを壊さないように、削除時にこれらのディレクトリをどのように扱うかに注意してください。
また、bash
で記述しているので、 sorcery (恥知らずなプラグイン)を見ることができます。多分それは成熟していて柔軟性があるので、単にそれを修正する方が簡単でしょう。
ln
でこれを行うためのフラグはありません。ディレクトリの作成はその仕事ではありません。
mkdir -p foo/bar/qux
は、必要に応じてfoo
、foo/bar
、foo/bar/qux
を作成します。したがって、最後のパスコンポーネントを除くすべてのコンポーネントで最初にmkdir -p
を呼び出します。
再発明しているようですね ホイールStow は、内部の異なるパッケージのコンポーネントへのシンボリックリンクを使用して、必要な深さまでディレクトリを作成することにより、ディレクトリ階層をマージする単純なパッケージマネージャーです。あるいは、おそらく XStow です。これはStowに似ていますが、より多くのカスタマイズの可能性があります。
たぶんtar
はリンクを含むファイルを準備するのに役立ちます:
find . -type l > links.txt
tar cpf links.tar --files-from links.txt
次に、必要に応じてリンクを作成します。
tar xvf links.tar