내 시스템에는 패키지 관리자를 사용하지 않고 소스 코드를 직접 컴파일하거나 다른 방법으로 여러 프로그램을 설치했습니다(예: 웹 사이트에서 제공하는 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
스텁 "동등한" 패키지를 설치하여 패키지 관리자를 속일 수 있습니다. 이것동등한패키지는 이러한 항목을 만드는 데 도움이 되며 설명은 다음과 같습니다.
데비안 패키지 종속성을 피하세요
이 패키지는 간단한 데비안 패키지를 생성하기 위한 도구를 제공합니다. 일반적으로 이러한 패키지에는 종속성 정보만 포함되어 있지만 다른 패키지와 마찬가지로 일반적으로 설치된 파일도 포함될 수 있습니다.
그 용도 중 하나는 메타패키지를 만드는 것입니다. 이 패키지의 유일한 목적은 다른 패키지에 대한 종속성과 충돌을 선언하여 자동으로 설치, 업그레이드 또는 제거할 수 있도록 하는 것입니다.
또 다른 용도는 종속성 검사를 우회하는 것입니다. 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