AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 560000
Accepted
LuxGiammi
LuxGiammi
Asked: 2020-01-03 10:49:52 +0800 CST2020-01-03 10:49:52 +0800 CST 2020-01-03 10:49:52 +0800 CST

Debian:让包管理器知道手动安装的包

  • 772

在我的系统上,我通过直接编译源代码或通过其他不使用包管理器的方式安装了一些程序(例如,我直接从网站上提供的 iso 安装了 TeX Live),一个例子它们是 ViM:我通过直接编译源代码安装它并运行sudo make install.

问题是包管理器不知道我的系统上安装了这样的软件,因此它要求我安装它(例如,如果我键入apt install vim它告诉我可以安装 ViM,即使我已经安装了 ViM我的系统)。

如何让包管理器知道某些包中包含的程序已经安装的事实?

提前致谢。

编辑:这个问题来自我安装 GNU-Octave 的需要。我已经安装了 texlive(正如我之前提到的),但仍然apt想安装tex-common和texinfo. man texinfo我在安装之前通过键入检查了包 texinfo 的内容是否存在,并显示了一个手册页。安装后texinfo用apt install texinfo那个手册页改变了。

debian package-management
  • 3 3 个回答
  • 521 Views

3 个回答

  • Voted
  1. Best Answer
    Eduardo Trápani
    2020-01-03T12:13:24+08:002020-01-03T12:13:24+08:00

    包管理器需要一些关于包的数据才能发挥它的魔力。诸如路径、配置文件、启动和停止服务、安装前和删除后脚本、依赖项......

    如果您从源代码编译,并且源代码没有您系统使用的包的构建目标,则很难让系统知道手动安装的软件(请注意,在包管理器的眼中,什么都没有安装)。它相当于从源代码创建一个合适的包(例如,一个 .deb)。

    因此,答案是检查源是否具有系统中使用的包的构建目标。如果还没有,那么您必须自己创建结构来构建包。

    Octave 工作人员属于另一个问题。如果那是您真正的问题,那么开始一个新问题,并发布apt命令和输出。

    • 2
  2. Ferenc Wágner
    2020-01-04T03:02:34+08:002020-01-04T03:02:34+08:00

    您可以通过安装存根“等效”包来欺骗包管理器。equivs包可以帮助你创建它们,它的描述是:

    绕过 Debian 软件包依赖项

    这个包提供了一个工具来创建简单的 Debian 包。通常这些包只包含依赖信息,但它们也可以像其他包一样包含正常安装的文件。

    这样做的一个用途是创建一个元包:一个包,其唯一目的是声明对其他包的依赖关系和冲突,以便自动安装、升级或删除这些包。

    另一个用途是绕过依赖检查:通过让 dpkg 认为某个特定的包名称和版本已安装,而实际上它没有安装,您可以解决其他包依赖中的错误。(不过,请务必提交此类错误。)

    请注意,从这一点开始,您将独自一人。希望您有充分的理由选择这条路线,而不是从包中安装软件(最好是反向移植,但甚至是由checkinstall.

    • 1
  3. jmullee
    2020-05-02T03:44:55+08:002020-05-02T03:44:55+08:00

    我有一个类似的问题,因为我花了一段时间才弄清楚,我想我会把我的解决方案放在这里。

    这是一个脚本,您可以使用包名列表调用它,它构建可安装的 .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
    
    • 0

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve