URL에서 .deb를 설치할 수 있습니까?


74

쉘을 사용하여 URL에서 직접 deb 패키지를 설치하는 방법이 있습니까? 같은 것

dpkg -i http://domain.com/path/to/package.deb

(wget을 사용한 다음 dpkg를 사용할 수 있다는 것을 알고 있습니다. 이미하고있는 것이 있는지 궁금합니다.)

답변:


48

편집 : 나는 당신이 wget 할 수 있다는 것을 알고 있다는 것에 대한 이전 진술을 보지 못했기 때문에 조금 어색합니다 ...이 작업을 수행하는 방법을 알고 싶은 사람을 위해 여기에 남겨 둘 것입니다. 또한 이전 답변의 이전 버전은 작동하지 않지만이 버전은 다소 길어 지지만 다음과 같습니다.

TEMP_DEB="$(mktemp)" &&
wget -O "$TEMP_DEB" 'http://path.to/my.deb' &&
sudo dpkg -i "$TEMP_DEB"
rm -f "$TEMP_DEB"

처음에 URL을 변경하면됩니다. 이것은 별명이거나 bash 함수로 작성 될 수 있습니다.

나는 이것을 둘러싼 기술 및 보안 문제가 있다는 것을 알고 있습니다 (자동 업데이트를받지 못하고 소스를 신뢰할 수있는 등). 그러나 순전히 할 수있는 방식으로 작동 할 수 있습니다.


3
dpkg --skip-same-version -i $FILE스크립트에서 실행될 예정이라면 사용 하는 것이 좋습니다 . 여기에 더 많은 정보 - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
바딤 Kotov

26

그것은이다 수없는 임시 파일을 생성하지 않고. 일반적으로 당신은 이것을 이렇게 할 것입니다

### Does not work
wget --quiet --output-document=- http://example.com/path/to/package.deb | dpkg --install -

아니면

### Does not work
dpkg --install <(wget --quiet --output-document=- http://example.com/path/to/package.deb)

그러나 dpkg는 mmap을 사용하여 파일에 액세스하므로 둘 다 작동하지 않습니다. 이것에 대한 버그 보고서가 있습니다 : # 367297


4
이것은 유용한 답변이지만, 구성 방식이 "그렇습니다. 여기에는 두 가지 방법이 있습니다."
bonh December

1
편집했습니다. dpkg 1.17.7+는 일부 명령 에는 stdin 인수를 사용 하지만 설치에는 사용하지 않습니다.
Tgr

하하! 인터넷 검색 전에 두 가지를 모두 시도했습니다. "당신은 미쳤어 요."라는 생각을 가진 사람들에게이 답변을 만들어 주셔서 감사합니다.
Bruno Bronosky

9

가장 빠른 방법은 다음과 같습니다. 셔터 설치를 시작하려면 클릭 .

이름을 클릭하는 데 사용되는 URL :

http://packages.ubuntu.com/shutter

... 그리고 아이콘을 클릭하십시오 :

http://apt.ubuntu.com/p/shutter

그렇습니다. .DEB 설치를 완료하려면 Ubuntu Software Center가 필요합니다. 그렇지 않으면 노틸러스 또는 명령 줄에서 설치를 실행해야합니다.

이것에 사용되는 완전한 텍스트는 Ask Ubuntu 전용이므로 앵커로 다시 포맷해야합니다.

[shutter](http://packages.ubuntu.com/shutter) [![Install shutter]
(https://i.stack.imgur.com/HjNGK.png)](http://apt.ubuntu.com/p/shutter)

더 많은 정보는 apturl 위키 페이지 에서 찾을 수 있습니다 :

  1. 1 패키지 :

    a href="apt:package"
    
  2. 여러 패키지 묶음 :

    a href="apt:package1,package2,package3"
    
  3. 리포지토리 활성화 :

    apturl apt:freevial?section=universe
    

따라서 소프트웨어가 기본 사용 가능 저장소에 없으면 'section ='을 추가해야합니다. 그렇지 않으면이 방법을 사용할 수 없으며 사용자가 다운로드하여 설치해야합니다.


8
참고 사항 : AptUrl 은 사용자 저장소에없는 소프트웨어에서 작동하지 않습니다
sergio91pt

1
감사합니다! 어쨌든 커맨드 라인에서 작동하는 것을 찾고 있는데 질문을 편집했습니다. 안타깝게도 apturl은 X : /를 실행할 것으로 예상합니다.
Joril

6

당신은 시도 할 수 있습니다 curl.

파일을 현재 폴더로 다운로드하고 로컬 파일에서 설치하려면

curl -sLO https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i puppetlabs-release-precise.deb

또는 다운로드하여 /var/cache/apt/archives/설치하십시오.

curl -sL -o/var/cache/apt/archives/puppetlabs-release-precise.deb https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i /var/cache/apt/archives/puppetlabs-release-precise.deb

1
curl 점점 오류를 사용하여 :--install needs at least one package archive file argument
itsazzad

dpkg를 받고 오류를 사용하여 : dpkg-deb: error: 는 / dev / FD / 63 '은 데비안 형식 archive` 아니다
itsazzad가

마지막 컬 사용 :dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad

1
wkhtmltopdf를 설치하려고되었습니다
itsazzad

4
확인 : 모든 변종이 dpkg 1.17.27 인 Debian Jessie에서 작동하지 않습니다.
Envek

3

실제로 비슷한 것을 수행하는 스크립트가 있습니다.

이 스크립트를 복사하여 붙여 넣습니다 ~/bin(없는 경우이 폴더를 만듭니다).

#!/bin/bash
# ~/bin/dpkg
COUNT=0
for i in $@; do
        echo $i | grep http 2>&1 > /dev/null
        if [ $? == 0 ]; then
                URL="$URL $i"
                continue
        fi
        PASSTODPKG="$PASSTODPKG $i"
done

#Remove beginning and trailing space
URL=$(echo $URL | sed -e 's/^ //g' -e 's/ $//g')

if [ ! -z $URL ]; then
        mkdir /tmp/debs
        cd /tmp/debs
        for i in $URL; do
                wget "$i"
        done
        dpkg $PASSTODPKG /tmp/debs/*.deb
else
        dpkg $PASSTODPKG
fi

그런 다음 이것을 마지막 줄에 추가하십시오. ~/.bashrc

PATH="~/bin:$PATH"

이 스크립트는에 대한 래퍼 일뿐입니다 dpkg. ~/.bashrc파일 의 행 은를 bash입력 할 때마다이 아니라 (스크립트) dpkg가 실행 됨을 나타 냅니다.~/bin/dpkg/usr/bin/dpkg

dpkgURL이 제공되지 않으면 스크립트는 인수를 전달합니다 . 이 스크립트는 여러 URL도 지원합니다. 작동하는 몇 가지 예는 다음과 같습니다.

sudo dpkg -i http://www.example.com/file1.deb
sudo dpkg -i http://www.example.com/file1.deb http://www.example.com/file2.deb
sudo dpkg -i http://www.example.com/file1.deb existing.deb http://www.example.com/file2.deb
sudo dpkg -i existing.deb

스크립트에 문제가 있으면 알려주십시오. 나는 우분투 컴퓨터에 없으므로 내 기억으로 이것을 썼습니다.
Andrew Gunnerson

1
무슨 기억이야!
enzotib

@enzotib : 하하! 내가 재설치의 양으로, 내 기억이 :) 내 백업보다 더 유용합니다
앤드류 Gunnerson

2

lynxdpkg(또는 디스플레이가 제공되는 경우 소프트웨어 센터)에 전화 하여 다운로드 한 패키지 설치를 제안 할 수 있습니다. 예를 들어,

lynx http://archive.ubuntu.com/ubuntu/pool/main/z/zsh/

.deb파일 중 하나를 다운로드 하면 다음과 같은 프롬프트가 표시됩니다.

Info for debian package '/tmp/user/1000/L11127-6774TMP.udeb':
 new debian package, version 2.0.
 size 2545218 bytes: control archive=5830 bytes.
     857 bytes,    21 lines      control              
   14682 bytes,   169 lines      md5sums              
     225 bytes,    20 lines   *  postinst             #!/bin/sh
 Package: zsh-doc
 Source: zsh
 Version: 5.1.1-1ubuntu1
 Architecture: all
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 Installed-Size: 5291
 Depends: zsh-common (= 5.1.1-1ubuntu1)
 Section: doc
 Priority: optional
 Homepage: http://www.zsh.org/
 Description: zsh documentation - info/HTML format
  Zsh is a UNIX command interpreter (shell) usable as an
  interactive login shell and as a shell script command
  processor. Of the standard shells, zsh most closely resembles
  ksh but includes many enhancements. Zsh has command-line editing,
  built-in spelling correction, programmable command completion,
  shell functions (with autoloading), a history mechanism, and a
  host of other features.
  .
  This contains the documentation in GNU info and HTML formats.
 Original-Maintainer: Debian Zsh Maintainers <pkg-zsh-devel@lists.alioth.debian.org>

Do you wish to:
 - I)nstall the package now,
 - S)ave it to a file, or
 - Q)uit now
Your choice (I/S/Q)? I
Installation of Debian packages needs to be done as root.
Enter command used to become root (default=sudo): 

Installing package...
[sudo] password for bro3886: 
(Reading database ... 756955 files and directories currently installed.)
Preparing to unpack .../user/1000/L11127-6774TMP.udeb ...
Unpacking zsh-doc (5.1.1-1ubuntu1) over (5.0.5-4ubuntu1~ubuntu14.04.1) ...
dpkg: dependency problems prevent configuration of zsh-doc:
 zsh-doc depends on zsh-common (= 5.1.1-1ubuntu1); however:
  Version of zsh-common on system is 5.0.5-4ubuntu1~ubuntu14.04.1.

dpkg: error processing package zsh-doc (--install):
 dependency problems - leaving unconfigured
Processing triggers for doc-base (0.10.5) ...
Processing 1 changed doc-base file...
Processing triggers for install-info (5.2.0.dfsg.1-2) ...
Errors were encountered while processing:
 zsh-doc

Done.  Press <return> to continue: 

(아마 인터넷에서 임의의 패키지를 설치하려고 시도해서는 안됩니다.)


1

나는이 질문에 대답 한 이후 게시 / 오랜만이야 알지만, 여기에 내 겸손 공헌 :

#!/bin/bash
dir="/tmp/dpkg-get"
url="$1"
file="${url##*/}"

if [ "$EUID" -ne 0 ]
then
echo "Please run as root"
exit
fi

[ -d $dir ] || mkdir $dir
wget -q --show-progress -O "$dir/$file" $url && \
dpkg -i "$dir/$file"

dpkg-get단일 명령으로 Pastebin 에서 설치하는 방법 :

sudo bash -c "wget http://pastebin.com/raw/GWu7qLwK -O- | tr -d '\r' > /usr/local/bin/dpkg-get && \
chmod a+x /usr/local/bin/dpkg-get"

사용 방법 (예 : PowerShell 6 alpha 설치) :

sudo dpkg-get https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.10/powershell_6.0.0-alpha.10-1ubuntu1.16.04.1_amd64.deb

그리고 그게 전부입니다.

나는 그것이 완벽하지는 않다는 것을 알고 있지만 간단하고 작동합니다.

설치 대상 및 다운로드 위치에주의하십시오.


0

SO 답변을 기반으로 한이 라이너 는 Ubuntu 15.04에서 내 환경 (64 비트 Ubuntu)에 대한 github 의 최신 원자 릴리스 를 식별 한 다음 설치했습니다.

sudo dpkg -i $(curl -w "%{filename_effective}" -LO $(curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64[.]deb' | head -n 1 | cut -d '"' -f 4))

tmp 디렉토리에서이 작업을 수행하면 tmp 폴더를 비울 때마다 deb 파일이 정리됩니다. 그렇지 않으면 디스크 공간이 필요한 경우 deb 패키지를 수동으로 삭제할 수 있습니다.


0

/etc/bash.bashrc다음과 같이 추가 할 수 있습니다 (Chen의 스크립트에서 업그레이드 한 것임).

'dpkg-url'() {

COUNT=0

for package in "${urls[@]}"; do
    if [[ $package = *http* ]]; then 
    urls+=("$package")
    fi

    dpkg_url="$dpkg_url "$package""
done

# Remove beginning and trailing spaces #

url=$(echo "$url" | sed -e 's/^ //g' -e 's/ $//g')

if [[ ! -z "$url" ]]; then
    directory=$(mktemp -d);
        trap 'rm -rf "$directory"' EXIT

    cd "$directory" || exit
        for package in "$url"; do
            wget ""$package""
        done
    dpkg $dpkg_url "$directory"/*.deb
else
    dpkg $dpkg_url
fi
}

다음과 같이 호출 할 때이 오류가 발생하는 이유는 알 수 없지만

dpkg-url -i http://downloads.sourceforge.net/ldview/ldview-4.2-beta1.x64.deb
dpkg: error: need an action option

Type dpkg --help for help about installing and deinstalling packages [*];
Use `dselect' or `aptitude' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;

Options marked [*] produce a lot of output - pipe it through `less' or `more' !

0

나는 이것에 대해 내 자신의 2 센트를 줄 것이라고 생각했습니다. 다음 명령을 사용하여 URL에서 패키지를 설치할 수 있습니다.

wget insert_url_here

다운로드가 완료되면 dpkg 명령을 수퍼 유저로 실행해야합니다. sudo dpkg -i insert_file_name_here

그런 다음 터미널에 제공되는 지침을 따르십시오.


1
물론 질문에 명시된 바와 같이 괄호 안에는 :)
Joril
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.