로컬 디렉토리에 패키지를 설치 하시겠습니까?


38

다음과 유사 apt-get install <foo>하지만 소프트웨어 패키지를 설치하고 싶습니다 .

  1. 없이 sudo, 그리고
  2. 로컬 디렉토리로

이 연습의 목적은 연속 통합 서버 에서 독립적 인 빌드를 분리하는 것입니다 .

소스에서 컴파일하는 것이 마음에 들지 않습니다. 그렇다면 가능한 한 가장 간단한 접근법을 선호합니다. 여기서apt-get source --compile <foo> 언급 한대로 시도했지만 autoconf와 같은 패키지에서는 작동하지 않습니다. 다음과 같은 오류가 발생합니다.

dpkg-checkbuilddeps: Unmet build dependencies: help2man

로컬 디렉토리에 help2man을 컴파일했지만 apt-get에 알리는 방법을 모르겠습니다. 어떤 아이디어?

업데이트 : https://askubuntu.com/a/350/23678 에서 거의 작동 하는 답변을 찾았습니다 . 문제 는 sudo가 필요하다는 것입니다. 문제 는 의존성을 해결하는 방법을 모른다는 것입니다. 나는 매우 매력적으로 보입니다 . sudo를 필요로하지 않는 동등한 명령이 있습니까?chrootapt-get sourcechroot



7
@kamil, 그렇지 않습니다. 네트워크 액세스없이 설치하려고하지 않습니다. sudo비 시스템 디렉토리 없이 설치하려고합니다 .
길리

4
얘들 아, 이유 를 설명하지 않고 내 질문을 downvote하지 마십시오 . 감사합니다.
길리

시스템에 루트가 없으면 종속성을 쉽게 해결할 수 없습니다 . 그러나 때때로 가능하다. 프로그램을 라이브러리에서 찾을 수 있도록 가정에서 소프트웨어 설치, 가장 하위 종속성부터 시작하여 LD_PATH 수정을 시작해야합니다. 그러나 패키지에서 루트 (또는 suid)를 실행해야하는 패키지가 있으면 실패합니다.
1 월

@ 1 월, 자동화 된 빌드 시스템 내에서 소프트웨어 프로젝트를 컴파일하려고합니다. 내가 아는 한 의존성 (컴파일해야 함)에는 root가 필요하지 않습니다.
길리

답변:


20

apt 의존성 시스템을 망칠 수 있기 때문에 일반적으로 불가능합니다.

두 가지 해결책이 있습니다.

  1. 패키징 시스템에 관계없이 소스 패키지를 설치하고 소스 디렉토리로 변경 한 후 패키지를 구성하고 설치하십시오.

    apt-get source <package>
    

    루트가 필요하지 않고 패키지 소스를 다운로드하여 현재 디렉토리의 디렉토리에서 압축을 풉니 다. 그런 다음 해당 디렉토리로 변경하고 소스를 수정하고 다른 대상으로 설치를 구성 할 수 있습니다.

    그러나 프로그램을 설치 디렉토리로 구성하는 것은 특정 프로그램에 따라 다릅니다. 많은 프로그램 ./configure --prefix localdir이이 프로그램을 사용하여 설치를 localdir로 지정합니다. 그러나 항상 그런 것은 아닙니다.

  2. 패키지를 설치할 chroot 환경을 작성하십시오.

    debootstrap precise myfancyinstall
    

    이제 myfancyinstall / 디렉토리에 더미 설치를 만들었습니다

    chroot myfancyinstall
    

    chroot 케이지 내에서 apt-get install을 사용하여 원하는 것을 설치할 수 있습니다.


이것은 유망 해 보인다. apt-get sourcewithout없이 사용하면 --compile충족되지 않은 종속성에 대한 경고가 표시되지 않는 것 같습니다 (내가 직접 해결할 수 있도록 허용)
Gili

이 방법으로 소스가없는 패키지를 얻는 방법이 있습니까?
soandos

솔루션 (2)는 관계없이 작동합니다. 그렇지 않으면, 당신은 당신 자신에 있습니다 : 패키지를 설치하는 다른 방법이있을 수 있습니다. 또는 deb 패키지 파일을 다운로드하여 ar :로 압축을 풉니 다 ar vx mypackage.deb. 그런 다음 패키지의 내용을 분석하고 수동으로 설치하는 방법을 찾으십시오.
1 월

14

bash 쉘을 사용하고 "package.deb"파일을 가져 오면 (팩 이름이 "package"라고 가정) 홈 디렉토리가 동일한 방식으로 처리되도록 패키지를 설치하여 원하는 것을 수행 할 수 있습니다. "는 일반 설치에서 처리됩니다.

이것은 명령입니다 :

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

$ HOME / var / lib / dpkg / lock과 같은 일부 오류가 발생할 수 있으므로 오류에서 발생하는 모든 누락 된 파일을 작성하면 설치가 sudo없이 작동합니다.

"apt-get download"가 작동하지 않으면 "apt download"또는 "apitutde download package"를 시도 할 수 있습니다.

두 방법 모두 작동하지 않으면 http://packages.ubuntu.com/ 에서 수동으로 패키지를 다운로드 할 수 있습니다 .

또 다른 방법은 $ HOME 매개 변수로 chroot 명령을 실행 한 다음 --root = $ HOME없이 위와 동일한 방식으로 설치하는 것입니다. 이 명령은 "/"가 현재 $ HOME 인 쉘로 이동합니다. 정상 모드로 돌아가려면 "종료"하는 것을 잊지 마십시오

행운을 빕니다.


dpkg가 불평하는 누락 된 파일을 만든 후 segfaulting을 시작했습니다.
매트 챔버

0

ssh액세스 권한이 있지만 apt-get루트 등이 없거나 유사하게 제한된 시스템이 없는 공유 웹 호스팅 업체 인 경우 다음이 적합 할 수 있습니다. 그것은 uname -a같은 것을 반환 하는 시스템에서 나를 위해 일했습니다.SMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.