APT가 홈 디렉토리에 패키지를 설치하도록하는 방법이 있습니까?


답변:


17

Dpkg에는 RPM에있는 --relocate 기능이 없습니다. 이 기능을 지원하는 RPM 패키지 수를 고려해 볼 가치가 있습니다. 기본적으로는 할 수 없습니다.

시스템에 전역으로 설치하기 전에 무언가를 테스트하려면 chroot를 사용하면됩니다. 이렇게하려면 루트에 액세스 할 수 있어야합니다. 가장 먼저 할 일은 기본 chroot를 만드는 것입니다.

# debootstrap lenny lenny-chroot

이것은 lenny-chroot디렉토리 안에 Lenny chroot를 만듭니다 .

이제 chroot를 입력 할 수 있습니다 :

# chroot lenny-chroot

이제 우리는 원하는 것을하고 나머지 시스템을 망칠 필요없이 무엇이든 설치할 수 있습니다. 완료되면 exit를 입력하거나 ctrl-D를 누르십시오.


8

Linuxbrew 는 소스에서 컴파일하고 바이너리를 홈 디렉토리에 유지하는 Linux 용 루트가 아닌 패키지 관리자입니다 (OS X 용으로 널리 사용되는 Homebrew 패키지 관리 시스템 기반).

문서를 인용하면 Linuxbrew 기능은 다음과 같습니다.

  • 홈 디렉토리에 소프트웨어를 설치할 수 있으므로 sudo가 필요하지 않습니다.
  • 기본 배포판으로 패키지되지 않은 소프트웨어 설치
  • 기본 배포판이 오래된 경우 최신 버전의 소프트웨어 설치
  • 동일한 패키지 관리자를 사용하여 Mac 및 Linux 시스템을 모두 관리하십시오.

7

젠투 접두사는 원하는 것을 정확하게 수행합니다.

지정된 디렉토리에 모든 패키지를 설치합니다. 루트 액세스가 필요하지 않습니다. 제거하려면 기본 디렉토리를 제거하십시오.

추신 : 우분투> = 11.04 또는 Multiarch가있는 다른 데비안 파생 제품에서는 작동하지 않습니다.


1
젠투는 소스에서 빌드하며 포스터는 패키지를 통해 특정 디렉토리에 설치하려고합니다. 그것은 실제로 같은 것이 아닙니다.
앤드류 케이스

1
@AndrewCase Gentoo에는 패키지도 있습니다. 바이너리가 아니라는 사실은 최종 설치와 관련이 없습니다.
jiggunjer

4

컴파일 옵션을 약간 추가 한 것처럼 컴파일 타임에 다른 접두사 옵션 ( "checkinstall"또는 다른 방법으로)을 사용하여 패키지로 컴파일하는 중도 옵션이 있습니다. 장점은 적성 또는 시냅스와 같은 패키지 관리자에 패키지가 표시된다는 것입니다.

게다가 어떤 경우에는 실제 .deb를 다운로드하고 dpkg 설치를 통해 다른 접두사를 적용하는 것이 가능할 수 있다고 생각하지만 임의의 패키지로 수행 할 수있는 것이 아니라고 생각합니다. 설치하기 전에 내보낼 위치에 대한 일부 변수 (리터럴 명시 적 접두사가 아닌). 나는 "dpkg instdir prefix"에 대한 google 절차에 대해 아무것도 모른다.



1

루트가없는 GoboLinux는 자신의 홈 디렉토리에서 높은 권한이없는 패키지 관리자를 원하는대로 정확하게 수행 할 수 있습니다. 바라건대 당신은 무엇을하고 있는지 알고 있습니다. rootless는 Gobo의 가장 잘 유지되는 설치 모드가 아니며, 몇 년 전에 사용했을 때 설치 스크립트가 다른 Gobo 변경 사항에 비해 약간 오래 되었기 때문에 약간의 조정이 필요했습니다.

꽤 많은 패키지를 다시 .deb패키지하고 홈 디렉토리에 패키지를 설치할 수 있으며 작동하기 위해 루트 권한이 필요하지 않은 klik이 있지만 초기 설정에는 루트가 필요합니다.


1

나는 보통 소스를 얻고 "INSTALL"과 같은 파일을 체크 아웃한다. 일반적으로해야 할 지침이 ./configure --prefix=somedir있습니다. 그런 다음 somedir/bin경로 에 추가 해야합니다.


종속성을 가져오고 컴파일하고 유지하기가 어려울 수 있습니다.
Paolo

이것은 거꾸로입니다. 문제는 패키지 관리자 (1990 년대 이후로 선호되는)를 이런 식으로 작동시키는 방법에 관한 것입니다.
Monica와의 가벼움 경주

1

아니, 난 당신이 할 수 있다고 생각하지 않습니다.

지금 당장 생각할 수있는 가장 좋은 apt-get source것은 패키지 를 사용 하고 컴파일하는 것입니다. 어쩌면 집에 패키지를 설치하는 절차 (어떻게 자동화 할 수 있는지)를 조정할 수 있습니다.

다른 하나는 dpkg -X선택한 디렉토리에서 압축을 풀 때 사용 하는 것입니다.


0

홈 폴더에 패키지를 설치해야하는 경우는 거의 없습니다.

그러나 로컬 컴퓨터에 소프트웨어를 컴파일하고 설치할 수 있습니다. 압축을 풀고 ./configure --prefix=$HOME/local다른 디렉토리 로 구성하십시오 . 그런 다음 수 makemake install정상적으로. 이것은 그 프로그램을 컴파일하고 설치합니다 ~/local/. 예를 들어, 당신이 실행하는 프로그램은 안에 ~/local/bin/programmname있습니다.


0

내 경험으로는 기존 DEB 패키지를 사용하여 chroot 환경 이 아닌 다른 디렉토리에 쉽게 설치할 수있는 방법이 없습니다 . 데비안 / 우분투 설치 도구 dpkg / aptitude / dselect는 모두 제대로 작동하려면 루트 권한이 필요합니다.

이제 소스 DEB가 제공되면 Debian / rules 파일을 수정하여 패키지를 빌드하고 다른 디렉토리 트리에 설치하도록 할 수 있지만 이미 사용 가능한 바이너리 패키지를 사용하지 않는 것입니다.

다른 사람들이 언급했듯이 debootstrap 을 사용 하고 chroot 환경을 쉽게 구축 할 수 있습니다 . 이전에는 64 비트 호스트에 32 비트 환경을 갖기 위해 수행했지만 최소한 기본 패키지가 복제 된 chroot를 설치해야합니다. 공간이 있고 이것이 가능한 솔루션이라면 chroot 환경에 설치된 응용 프로그램을 쉽게 실행할 수 있도록 dchroot또는 더 나은 방법 schroot으로 사용할 수 있습니다.


0

배포판의 공식 저장소와 어떻게 작동하는지 상상하기가 어렵습니다. 종속성을 어떻게 해결해야합니까? 시스템 또는 홈 디렉토리에서? 둘 다에서 다른 버전을 찾으면 어떻게됩니까?

내가 생각할 수있는 최선의 방법은 사람들이 64 비트 시스템에서 32 비트 응용 프로그램을 사용하는 것과 같은 chroot 환경 일 것입니다. chroot에서 debootstrap을 호출 할 때 더 많은 오버 헤드가 있지만 symlinking , 쉘 래퍼 스크립트 재미로 원하는 것을 할 수 있습니다.


0

나는 여전히 문제를 해결하고 있지만 기본적으로 필요한 것을 debootstrap하고 fakeroot와 함께 작동해야합니다. debootstrap은 많은 셸 스크립트이므로 틱을 만드는 방법을 알아보기 위해 분리하고 있습니다. 어려운 부분은 일단 설치되면 파일을 제거하는 것입니다.


나는 (그리고 수천 명의 다른 사용자들도) 이것을 진심으로 장려 할 것이다. 사용자가 제공 한 rpm 데이터베이스뿐만 아니라 기존의 시스템 전체 rpm (또는 적절한 대안) 데이터베이스를 활용하여 사용자 위치 rpm을 설치하는 것. 이것은 놀라운 일입니다. 이것은 메인 라인으로 병합 될 수도 있습니다. 이전에 이것에 대한 연구가 있었습니까?
앤드류 케이스

0

불행히도 나는 이와 같은 것을 제공하는 배포판에 대해 들어 보지 못했습니다 (비록 인기가있을 것이라고 확신하지만). rpm 기반 배포판을 모방 할 수는 있지만 ...이 시도하지는 않았지만 사용자 기반 rpm 데이터베이스를 구축 한 다음 rpm을 사용자 데이터베이스에 설치할 수 있습니다.

다음을 사용하여 새로운 사용자 기반 배포판을 설정하십시오.

rpm --initdb --dbpath DIRECTORY

그런 다음 도움이 될 수있는 몇 가지 옵션이 있습니다.

  • --prefix
  • --relocate

0

학교 데비안 서버에 협력 소프트웨어 패키지의 BIG 콜렉션을 성공적으로 설치하는 데 사용한 솔루션이 있습니다. deboostrap패키지 관리자를 사용하지 않습니다 .

이 방법은 부분적으로 수동이지만 편의를 위해 최선을 다했습니다.

내가 호출 한이 스크립트를 사용합니다 install(잊지 마십시오 chmod +x).

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

그래서 보통은 먼저을 사용하여 deb 파일을 다운로드합니다 apt-get download package_name. 그런 다음을 실행 하고 압축을 푼 파일 ./install package_name_blabla.deb의 각 발생을 /usr대체 해야하는지 여부를 수동으로 결정 합니다 $PREFIX/usr.

이 결정은 시스템에 설치된 패키지와이 방법을 사용하여 설치된 패키지에 전적으로 달려 있습니다. 일반적으로 pkg-config 파일은이 대체가 필요하지만 shebang 행은 #!/usr/bin/perl그렇지 않습니다. 일반적인 경험 규칙은 결과 경로가 기존 파일을 가리켜 야한다는 것입니다.

이 방법으로 패키지를 설치하면 다른 프로그램에 패키지에 대해 알려줘야합니다. 이것은 올바른 값을 부가함으로써 달성 될 수있다 LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATH

이 접근 방식에는 종속성이 자동으로 다운로드 / 설치되지 않는다는 경고가 있습니다. 수동으로 추적해야합니다.

또한 APT는 이러한 패키지에 대해 분명히 알지 못하므로 영원히 누락 된 것으로 표시합니다. 그러나 사용자의 설치에 따라 시스템 전체의 앱을 설치하려는 사람은 이치에 맞습니다.

프로그램을 제거 ar p "$1" data.tar.xz | tar tJ하려면을 사용하여 deb 아카이브의 내용을 나열한 다음에서 모든 파일을 삭제할 수 있습니다 PREFIX.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.