sudo 권한없이 로컬로 프로그램을 설치하는 방법은 무엇입니까?


73

사용자로 일부 우분투 서버에 ssh 액세스 권한이 있고 편의를 위해 일부 시스템 도구를 설치해야한다고 가정합니다 (mc, rtorrent, mcedit). 이 작은 프로그램의 관리자를 귀찮게하고 싶지 않습니다.

같은 것을 사용하지 않고 설치하는 방법이 sudo apt-get install있습니까?






답변:


33
  1. 컴파일하고 설치 ~/bin하십시오 (그리고 그것을 포함 .bashrc하도록 설정하십시오 PATH). 라이브러리는 비슷한 방식으로 컴파일 및 설치 될 수 있으며 ~/lib( LD_LIBRARY_PATH그것을 가리 키도록 설정 ) 개발 헤더는 예를 들어 설치 될 수 있습니다 ~/includes.

  2. 설치하려는 프로그램의 세부 사항과 이들이 의존하는 라이브러리에 따라 .deb 파일을 다운로드하고 ' dpkg-deb -x'를 사용 하여 홈 디렉토리 아래에서 파일 을 추출 할 수 있습니다. 그런 다음 설정을 "재미"를 많이해야합니다 PATH, LD_LIBRARY_PATH그리고 다른 variables. 설치하는 프로그램이나 앱이 복잡할수록 더 재미있을 것입니다. :)

    물론 setuid바이너리를 이런 식으로 설치할 수는 없습니다-설치하지만 (루트를 뿌리거나 setuid비트를 설정할 권한이 없기 때문에 ) 그들은 당신이 소유 한 정상적인 바이너리 일뿐입니다. .

    마찬가지로 특정으로 실행 UID되거나 uid를 변경할 수있는 기능이 있거나 파일이 /etc다소 있을 것으로 예상되는 데몬 및 시스템 서비스 ~/etc는 전혀 작동하지 않을 수 있습니다.

  3. 대부분의 시스템 관리자는 무해한 프로그램 인 "대부분 무해한"프로그램을 고려 mc하고 mcedit있습니다.

    그러나 특히 대역폭을 지불하거나 법적 책임을 져야하는 토렌트 클라이언트를 무해한 것으로 생각하는 사람은 거의 없습니다. 대부분의 sysadmins는 최종 사용자가 그러한 소프트웨어를 허가없이 설치하는 것을 완전히 좋아하지 않을 것입니다. "확실히 진행하십시오."라고 말하거나 그렇지 않을 수도 있습니다. 그러나 기계 소유자 / 관리자에게 문제를 일으킬 수있는 사항에 대해 문의해야합니다.


나는 설정 LD_LIBRARY_PATH이 악한 해킹 이라고 들었습니다 . 이것도 여기에 적용됩니까, 아니면 오해 했습니까?
Will Vousden 님이

1
LD_LIBRARY_PATH 설정과 관련된 모든 문제가 적용됩니다. 그렇습니다, 그것은 사악한 핵일 수 있습니다. 때로는 특정 목표를 달성하기 위해 사악한 해킹이 필요합니다. "규칙"을 어길 때의 중요한 점은 자신을 구하기 위해 무엇을 설계했는지, 그리고 왜이 특정한 경우에이를 깨뜨릴 필요가 있는지를 충분히 아는 것입니다. , 위험이 무엇인지 또는있을 수 있습니다.
cas

방금 독립 프로그램 (확대 프로그램)을 설치해야 했으므로 먼저 dpkg-deb -x로컬 옵션에 두 번째 옵션을 시도했습니다 . 매력처럼 일했다. 나는 LD_LIBRARY_PATH해킹 을 할 필요가 없었다 . 그래도 전역 설정에 영향을 미치지 않도록 동일한 명령 줄에서 수행해야합니다 (예 $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher:).
Antony

설치하려는 하나 이상의 패키지가 공유 라이브러리를 제공하는 경우 LD_LIBRARY_PATH 만 설정하면됩니다. 실행 파일 및 데이터 및 문서 및 구성 파일 등이라면 시스템 라이브러리를 사용할 수 있습니다.
cas

50

소스에서 컴파일해야합니다. 그것은 단지 문제 일 것입니다

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

바이너리는에 위치 ~/myapps/bin합니다. 그래서, 추가 export PATH="$HOME/myapps/bin:$PATH"사용자에게 .bashrc파일과 다시로드 .bashrc와 파일을 source ~/.bashrc. 물론 이것은 gcc가 시스템에 설치되어 있다고 가정합니다.


6
종속성은 어떻습니까? 각각에 대해 동일한 코드를 실행하지 않고 자동으로 처리하는 방법이 있습니까?
yura

1
@ 유라 아니 당신이 직접해야합니다.
Ulrich Dangel

이 작업을 수행 할 권한이 없으면 어떻게합니까? sudo / root 액세스없이 소프트웨어를 컴파일 할 수있는 권한이 일반적입니까?
Freedo

5

JuNest 를 사용 하면 패키지를 설치할 수있는 사용자 디렉토리에 작은 Linux 컨테이너가 작성됩니다.


0

나는 같은 문제에 직면했다. 여기에서 동일한 OS와 아키텍처의 Linux 서버가 있다고 가정하고 신속하게 수정 한 방법이 있습니다.

  1. 제어하는 시스템에 소프트웨어를 설치하십시오

  2. 실행 예제를 찾아서 which python복사하십시오.~/

  3. 다음을 사용하여 라이브러리를 복사하십시오.

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

실행 파일과 라이브러리를 로컬 권한 만있는 다른 시스템으로 전송 한 후 다음을 실행하십시오.

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

~/lib라이브러리를 저장할 폴더 를 만들고 경로에 추가하고 라이브러리에 라이브러리를 보도록 LD에 지시하므로 실행 파일과 라이브러리를 추가하면 다른 곳에서 실행할 수 있습니다.

이것은 매우 해킹 일 수 있지만 매우 휴대 가능하고 빠르며 아직 그렇게 할 수없는 것을 찾지 못했습니다. 물론 소프트웨어는 낮은 포트에 바인딩하는 것과 같이 루트 액세스가 필요한 작업을 시도 할 수 없습니다 1024 이상


-1

나는 당신과 같은 문제가 있습니다. 아직 시도하지는 않았지만 Linuxbrew 가이 문제에 도움이 될 수 있습니다.

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