Debian: сообщить менеджеру пакетов об установленных вручную пакетах

Пояснение:

find. -type f -name '*.c'-рекурсивно найти все файлы в текущем каталоге с любыми символами в имени и .cрасширением. См.man find

-exec cat {} \;-получить содержимое файлов, найденных на предыдущем шаге. См. -конструкция exec:-exec command {} +

sed '/^\s*#/d;/^\s*$/d;/^\s*///d'-удалить несколько типов «комментариев» (или что-то подобное ). Эта часть состоит из 3 разделов, разделенных ;. Где:

  1. /^\s*#/d-начало строки (^), 0, 1 или более пробелов(\s*)и символ #.//d-удалить совпавшую строку;
  2. /^\s*$/d-пустые строки. То же, что и в предыдущей части, но с символом $, означающим конец строки
  3. /^\s*\/\//d-соответствует строкам с двумя косыми чертами (\/\/,\-обратная косая черта, чтобы заключить косую черту в кавычки )и 0,1 или более пробелов перед ними

wc -l-подсчет количества строк кода

0
02.01.2020, 20:55
2 ответа

Вы можете обмануть менеджер пакетов, установив «эквивалентные» пакеты-заглушки. Пакет equivs может помочь вам в их создании, его описание:

Circumvent Debian package dependencies

This package provides a tool to create trivial Debian packages. Typically these packages contain only dependency information, but they can also include normal installed files like other packages do.

One use for this is to create a metapackage: a package whose sole purpose is to declare dependencies and conflicts on other packages so that these will be automatically installed, upgraded, or removed.

Another use is to circumvent dependency checking: by letting dpkg think a particular package name and version is installed when it isn't, you can work around bugs in other packages' dependencies. (Please do still file such bugs, though.)

Имейте в виду, что с этого момента вы будете предоставлены сами себе. Надеюсь, у вас была веская причина для выбора этого маршрута вместо установки программного обеспечения из пакетов (, предпочтительно бэкпортов, но даже созданныхcheckinstall).

1
28.01.2020, 02:29

У меня была аналогичная проблема, и, поскольку мне потребовалось некоторое время, чтобы понять ее, я решил оставить свое решение здесь.

Это сценарий, который вы можете вызвать со списком имен пакетов -, он создает устанавливаемые файлы пакетов.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 <dummy@example.com>  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
01.05.2020, 11:44

Теги

Похожие вопросы