Apakah mungkin untuk menginstal .deb dari URL?

74

Apakah ada cara untuk menginstal paket deb langsung dari URL, menggunakan shell ? Sesuatu seperti

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

(Saya tahu saya bisa menggunakan wget dan kemudian dpkg, saya hanya ingin tahu apakah ada sesuatu yang sudah melakukannya)

Joril
sumber

Jawaban:

48

Sunting: Saya tidak melihat pernyataan Anda sebelumnya tentang mengetahui Anda bisa wget jadi ini agak canggung ... Saya akan meninggalkan ini di sini untuk siapa saja yang ingin tahu bagaimana melakukan ini. Selain itu versi sebelumnya dari jawaban saya tidak berfungsi tetapi versi ini (dengan mengorbankan yang agak lama) tidak:

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

Anda hanya perlu mengubah URL di awal. Ini bisa alias atau ditulis sebagai fungsi bash.

Saya menyadari ada masalah teknis dan keamanan di sekitar ini (Anda tidak mendapatkan pembaruan otomatis, dapatkah sumbernya dipercaya, dll), tetapi murni atas dasar dapat-lakukan-itu, ini mungkin berhasil.

Oli
sumber
3
Saya juga menyarankan untuk menggunakan dpkg --skip-same-version -i $FILEjika akan dijalankan dari skrip. Info lebih lanjut di sini - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
Vadim Kotov
26

Itu tidak mungkin tanpa membuat file sementara. Biasanya Anda akan melakukan ini seperti

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

atau mungkin

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

tapi dpkg menggunakan mmap untuk mengakses file sehingga tidak berfungsi. Ada laporan bug tentang ini: # 367297

Tgr
sumber
4
Ini adalah jawaban yang berguna, tetapi cara terstruktur membuatnya tampak seperti jawabannya adalah "ya, berikut adalah dua cara untuk melakukan itu".
bonh
1
Diedit. Perhatikan bahwa dpkg 1.17.7+ membutuhkan argumen stdin untuk beberapa perintahnya tetapi tidak untuk instalasi.
Tgr
HA HA! Saya sudah mencoba keduanya sebelum Googling. Terima kasih telah membuat jawaban ini untuk memberi tahu orang yang berpikiran sama, "Anda tidak gila."
Bruno Bronosky
9

Metode tercepat adalah seperti ini. Klik untuk mulai menginstal rana .

URL yang digunakan untuk mengklik nama:

http://packages.ubuntu.com/shutter

... dan untuk klik pada ikon:

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

Dan ya, Anda perlu Pusat Perangkat Lunak Ubuntu untuk menyelesaikan instalasi .DEB. Kalau tidak, Anda harus menjalankan instalasi dari Nautilus atau baris perintah.

Teks lengkap yang digunakan untuk ini adalah untuk Tanya Ubuntu saja sehingga Anda perlu memformat ulang ini menjadi jangkar:

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

Info lebih lanjut dapat ditemukan di halaman apturl wiki :

  1. 1 Paket:

    a href="apt:package"
    
  2. Bundling beberapa paket:

    a href="apt:package1,package2,package3"
    
  3. Mengaktifkan repositori:

    apturl apt:freevial?section=universe
    

Jadi, jika perangkat lunak tidak dalam repositori yang diaktifkan default Anda harus menambahkan 'section =' ke dalamnya. Kalau tidak, Anda tidak dapat menggunakan metode ini dan membutuhkan pengguna untuk mengunduhnya dan menginstal sendiri.

Rinzwind
sumber
8
Sekedar catatan: AptUrl tidak berfungsi untuk perangkat lunak yang tidak ada di repositori pengguna
sergio91pt
1
Bagus, terima kasih! Pokoknya saya mencari sesuatu yang akan bekerja dari baris perintah, saya mengedit pertanyaan. Sayangnya apturl mengharapkan X berjalan: /
Joril
6

Anda dapat mencobanya curl.

Untuk mengunduh file ke folder saat ini dan menginstal dari file lokal:

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

atau unduh /var/cache/apt/archives/dan instal dari sana:

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
kenorb
sumber
1
menggunakan curl getting error:--install needs at least one package archive file argument
itsazzad
menggunakan dpkg, mendapatkan error: dpkg-deb: error: / dev / fd / 63 'bukan arsip format debian`
itsazzad
menggunakan curl terakhir:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad
1
Sedang mencoba menginstal wkhtmltopdf
itsazzad
4
Mengkonfirmasi: semua varian tidak berfungsi di Debian Jessie dengan dpkg 1.17.27
Envek
3

Saya sebenarnya memiliki skrip yang melakukan hal serupa:

Cukup salin dan tempel skrip ini ke ~/bin(buat folder ini jika tidak ada):

#!/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

Kemudian tambahkan ini ke baris terakhir di ~/.bashrc

PATH="~/bin:$PATH"

Script hanya untuk pembungkus dpkg. Baris dalam ~/.bashrcfile memberi tahu bashbahwa setiap kali Anda mengetik dpkg, itu akan berjalan ~/bin/dpkg(skrip), bukan /usr/bin/dpkg.

Script hanya akan meneruskan argumen dpkgjika tidak ada URL yang diberikan. Skrip juga mendukung banyak URL. Berikut ini beberapa contoh yang bisa digunakan:

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
sumber
Harap beri tahu saya jika ada masalah dengan skrip. Saya tidak di komputer Ubuntu saya, jadi saya menulis ini dari memori saya.
Andrew Gunnerson pada
1
Memori yang luar biasa!
enzotib
@enzotib: haha! Dengan jumlah penginstalan ulang yang saya lakukan, memori saya lebih berguna daripada cadangan saya :)
Andrew Gunners
2

lynxdapat menelepon dpkg(atau Pusat Perangkat Lunak, jika tampilan tersedia) dan menawarkan untuk menginstal paket yang diunduh untuk Anda. Misalnya, menggunakan:

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

Dan mengunduh salah satu .debfile, prompt berikut ditunjukkan:

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 <[email protected]>
 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 <[email protected]>

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: 

(Mungkin saya seharusnya tidak mencoba menginstal paket acak dari internet.)

muru
sumber
1

Saya tahu bahwa sudah lama sejak pertanyaan ini dijawab / diposting, tetapi inilah kontribusi saya yang sederhana :

#!/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"

Cara menginstal dpkg-getdari Pastebin dengan satu perintah:

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"

Cara menggunakannya (misalnya menginstal 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

Dan itu saja.

Saya tahu itu tidak sempurna, tetapi sederhana dan berhasil.

Ingatlah untuk berhati-hati dengan apa yang Anda instal dan dari mana Anda mengunduhnya.

ruverav
sumber
0

One-liner ini berdasarkan pada jawaban SO bekerja untuk saya di Ubuntu 15.04 untuk mengidentifikasi rilis atom terbaru di github untuk lingkungan saya (64-bit Ubuntu) dan kemudian menginstalnya:

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))

Jika Anda melakukan ini dalam dir tmp, file deb akan dibersihkan setiap kali Anda mengosongkan folder tmp Anda. Kalau tidak, Anda dapat menghapus paket deb secara manual jika Anda membutuhkan ruang disk.

hobs
sumber
0

Anda dapat menambahkannya /etc/bash.bashrcsebagai berikut (ini merupakan peningkatan dari skrip 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
}

Meskipun saya tidak melihat mengapa saya mendapatkan kesalahan ini ketika memanggilnya sebagai berikut:

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' !
Cypher2
sumber
0

Hanya berpikir saya akan memberikan dua sen saya sendiri pada ini. Anda dapat menginstal paket dari URL menggunakan perintah berikut:

wget insert_url_here

Setelah diunduh, Anda perlu menjalankan perintah dpkg sebagai superuser: sudo dpkg -i insert_file_name_here

Kemudian ikuti saja instruksi yang disajikan di terminal.

Johnathan Brown
sumber
1
Ya tentu saja, seperti yang dinyatakan dalam pertanyaan, di antara tanda kurung :)
Joril