Debian:パッケージマネージャに手動でインストールされたパッケージを認識させる。

Debian:パッケージマネージャに手動でインストールされたパッケージを認識させる。

私のシステムでは、パッケージマネージャを使用せずにソースコードを直接コンパイルしたり、別の方法で複数のプログラムをインストールしました(たとえば、Webサイトで提供されているisoからTeX Liveを直接インストールしました)。一例はViMである。以下からインストールしました。ソースコードをコンパイルしてインストールして実行しますsudo make install

問題は、パッケージマネージャが私のシステムにそのようなソフトウェアがインストールされていることを知らないので、それをインストールする必要があるということですapt install vim。私のシステムでは)。

特定のパッケージに含まれているプログラムが既にインストールされていることをパッケージマネージャにどのように伝えることができますか?

よろしくお願いします。

編集:この質問はGNU-Octaveをインストールする必要があるために発生します。 (前述のように)すでにtexliveをインストールしていますが、まだインストールしたいとapt思いました。インストール前に入力してtexinfoパッケージの内容が存在することを確認し、マンページが表示されました。インストール後、このマニュアルページが変更されました。tex-commontexinfoman texinfotexinfoapt 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

関連情報