私のシステムでは、パッケージマネージャを使用せずにソースコードを直接コンパイルしたり、別の方法で複数のプログラムをインストールしました(たとえば、Webサイトで提供されているisoからTeX Liveを直接インストールしました)。一例はViMである。以下からインストールしました。ソースコードをコンパイルしてインストールして実行しますsudo make install
。
問題は、パッケージマネージャが私のシステムにそのようなソフトウェアがインストールされていることを知らないので、それをインストールする必要があるということですapt install vim
。私のシステムでは)。
特定のパッケージに含まれているプログラムが既にインストールされていることをパッケージマネージャにどのように伝えることができますか?
よろしくお願いします。
編集:この質問はGNU-Octaveをインストールする必要があるために発生します。 (前述のように)すでにtexliveをインストールしていますが、まだインストールしたいとapt
思いました。インストール前に入力してtexinfoパッケージの内容が存在することを確認し、マンページが表示されました。インストール後、このマニュアルページが変更されました。tex-common
texinfo
man texinfo
texinfo
apt install texinfo
答え1
パッケージマネージャが機能するには、パッケージに関するいくつかのデータが必要です。パス、設定ファイル、サービスの起動と停止、プレインストールとポストアンインストールスクリプト、依存関係など…
ソースからコンパイルし、ソースコードにシステムが使用するパッケージのビルドターゲットがないと、手動でインストールされたソフトウェアをシステムに知らせることは困難です(パッケージマネージャの観点からは何もありません。インストール済み)。これは、ソースから適切なパッケージ(.debなど)を作成するのと同じです。
したがって、答えは、ソースがシステムで使用されているパッケージのビルドターゲットがあることを確認することです。そうでない場合は、パッケージを構築するために構造を直接作成する必要があります。
オクターブのスタッフはもう一つの問題です。これが実際の問題である場合は、新しい質問を開始してapt
コマンドと出力を投稿してください。
答え2
スタブ「同等の」パッケージをインストールしてパッケージマネージャをだますことができます。これ同等パッケージはこれらのアイテムを作成するのに役立ち、説明は次のとおりです。
Debian パッケージの依存関係を避ける
このパッケージは、単純な Debian パッケージを作成するためのツールを提供します。通常、これらのパッケージには依存情報のみが含まれていますが、他のパッケージと同様に、通常インストールされているファイルも含めることができます。
その用途の1つはメタパッケージを作ることです。このパッケージの唯一の目的は、他のパッケージへの依存関係と競合を宣言して、自動的にインストール、アップグレード、または削除できるようにすることです。
別の用途は、依存性チェックをバイパスすることです。 dpkgに特定のパッケージ名とバージョンがインストールされていると思うようにすることで(そうでない場合)、他のパッケージ依存関係のエラーを解決できます。 (ただし、これらのバグは報告してください。)
この時点からはあなたの責任です。パッケージ(好ましくはバックポートまたはによってcheckinstall
)からソフトウェアをインストールするのではなく、このパスを選択する合理的な理由があることを願っています。
答え3
私は同様の問題に遭遇し、それを見つけるのに時間がかかったので、ここに解決策を入れると思いました。
これは、パッケージ名のリストで呼び出すことができ、インストール可能な.debパッケージファイルを構築するスクリプトです。
完了したら(数秒かかります)、「dpkg -i *.deb」を使用してパッケージをインストールできます。
#!/bin/bash
# default version ('high' to supercede further updates)
VERSION=99.99-99.99
# debian-version, urgency, date
RELEASE="experimental; urgency=low\n\n * Initial Release\n\n -- Dummy <[email protected]> Thu, 31 Dec 2099 00:00:00 +0000\n"
# iterate over command-line arguments
for PKGNAME do
# check for existing package, to borrow the control file
echo -n "\n${PKGNAME} : exists in dpkg ? "
grep -m 1 "^Package: ${PKGNAME}$" /var/lib/dpkg/status \
&& {
echo " .. YES .. try use dpkg version of control file"
grep -A 2000 "^Package: ${PKGNAME}$" /var/lib/dpkg/status | \
sed "s|^\(Package:\)|~\1|" | tr '\n~' '^\n' | \
head -n 2 | tr '^' '\n' | grep "[^ ]" \
> ${PKGNAME}.ctl
# remove borrowed control-file if none found
find . -maxdepth 1 -type f -name ${PKGNAME}.ctl -size 0 -delete || \
echo " .. (but failed)"
}
# if we didn't successfully borrow a control-file, fake it to make it
[ -f ${PKGNAME}.ctl ] || \
{
echo " .. NO .. use template (/usr/share/equivs/template*)"
equivs-control ${PKGNAME}.ctl
sed -i "s/^Package:.*/Package: ${PKGNAME}/" ${PKGNAME}.ctl
sed -i "s/.*Changelog:.*/Changelog: dummychangelog/" ${PKGNAME}.ctl
echo -e "${PKGNAME} (${VERSION}) ${RELEASE}" > dummychangelog
}
# now, with a control-file, build a deb file
[ -f ${PKGNAME}.ctl ] && \
{
sed -i "s/^Version:.*/Version: ${VERSION}/" ${PKGNAME}.ctl
equivs-build ${PKGNAME}.ctl 2>&1 > ${PKGNAME}.ctl.log
# cleanup if we succeeded
ls -l ${PKGNAME}*.deb && { rm dummychangelog ${PKGNAME}.ctl.log ${PKGNAME}.ctl 2>/dev/null ; }
}
done