Bir URL'den bir .deb yüklemek mümkün mü?


74

Bir kabuk kullanarak doğrudan bir URL'den bir deb paketini kurmanın bir yolu var mı ? Gibi bir şey

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

(Wget kullanıp sonra dpkg kullanabileceğimi biliyorum, sadece bunu yapan bir şey olup olmadığını merak ediyorum)

Yanıtlar:


48

Düzenleme: Wget yapabileceğinizi bilmekle ilgili önceki ifadenizi görmedim, bu yüzden bu biraz garip ... Bunu yapmak isteyen herkes için bunu burada bırakacağım. Ayrıca cevabımın önceki versiyonu işe yaramadı fakat bu versiyon (biraz daha uzun olması pahasına)

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

Sadece URL'yi en baştan değiştirmeniz gerekir. Bu, takma ad veya bash işlevi olarak yazılabilir.

Bunu çevreleyen teknik ve güvenlik sorunları olduğunun farkındayım (otomatik güncellemeler alamazsınız, kaynağa güvenilebilir mi, vb.), Ancak tamamen yapabileceğim bir temelde bu işe yarayabilir.


3
Ayrıca dpkg --skip-same-version -i $FILEsenaryolardan çalıştırılacaksa kullanmanızı öneririm . Daha fazla bilgi burada - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
Vadim Kotov

26

Öyle mümkün değildir geçici bir dosya yaratmadan. Normalde böyle yaparsın

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

ya da belki

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

dpkg dosyaya erişmek için mmap kullanır, böylece çalışmaz. Bununla ilgili bir hata raporu var: # 367297


4
Bu faydalı bir cevaptır, ancak yapılandırılmış şekli, cevabı "evet, işte bunu yapmanın iki yolu" gibi görünmesini sağlar.
Bonh

1
Düzenlenen. Dpkg 1.17.7+ 'nin bazı komutları için stdin argümanları aldığını ancak kurulum için olmadığını unutmayın.
Tgr

HA HA! Bunların ikisini de Googling'den önce denedim. Bu cevabı, fikirli insanlara anlatmak için yarattığınız için teşekkür ederiz, "deli değilsiniz"
Bruno Bronosky

9

En hızlı yöntem bu şekildedir. Panjur takmaya başlamak için tıklayın .

Adı tıklamak için kullanılan URL'ler:

http://packages.ubuntu.com/shutter

... ve simgeye tıklamak için:

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

Ve evet, bir .DEB kurulumunu tamamlamak için Ubuntu Yazılım Merkezine ihtiyacınız var. Aksi halde, kurulumu Nautilus veya komut satırından yürütmeniz gerekecektir.

Bunun için kullanılan tam metin yalnızca Ubuntu'ya sormak içindir, bu nedenle bunu bir çapa haline getirmeniz gerekir:

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

Apturl wiki sayfasında daha fazla bilgi bulunabilir :

  1. 1 paket:

    a href="apt:package"
    
  2. Birkaç paketi bir araya getirmek:

    a href="apt:package1,package2,package3"
    
  3. Havuzları etkinleştirme:

    apturl apt:freevial?section=universe
    

Dolayısıyla, yazılım varsayılan olarak etkin bir depoda değilse, ona 'bölüm =' eklemelisiniz. Aksi takdirde, bu yöntemi kullanamazsınız ve kullanıcının indirip kendileri kurması gerekir.


8
Sadece bir not: AptUrl , kullanıcı havuzunda olmayan bir yazılım için çalışmaz
sergio91pt

1
Güzel, teşekkürler! Neyse, komut satırından işe yarayacak bir şey arıyorum, soruyu düzelttim. Ne yazık ki apturl çalışan X: / bekliyor
Joril

6

İle deneyebilirsiniz curl.

Dosyayı geçerli klasöre indirmek ve yerel dosyadan yüklemek için:

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

veya /var/cache/apt/archives/buradan indirip yükleyin:

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
kıvrılma hata kullanarak:--install needs at least one package archive file argument
itsazzad

dpkg hata alıyorum: dpkg-deb: error: / dev / fd / 63 'debian formatlı bir arşiv değil'
itsazzad

son kıvrılma kullanarak:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad


4
Onaylama: tüm değişkenler Debian Jessie'de dpkg 1.17.27 ile çalışmıyor
Envek

3

Aslında benzer bir şey yapan bir senaryom var:

Sadece bu betiği kopyalayıp yapıştırın ~/bin(yoksa, bu klasörü oluşturun):

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

Ardından bunu, içindeki son satıra ekleyin. ~/.bashrc

PATH="~/bin:$PATH"

Betik sadece bir sarıcıdır dpkg. ~/.bashrcDosyadaki satır bashyazdığınız zaman dpkg, bunun ~/bin/dpkgyerine (komut dosyası) çalışacağını söyler /usr/bin/dpkg.

Senaryo sadece dpkgURL verilmemişse argümanları iletir. Bu komut dosyası ayrıca birden fazla URL’yi de destekler. İşte işe yarayacak bazı örnekler:

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

Lütfen senaryo ile ilgili herhangi bir sorun olup olmadığını bana bildirin. Ubuntu bilgisayarımda yok, bu yüzden hafızamdan yazdım.
Andrew Gunnerson

1
Ne bir hatıra!
enzotib

@enzotib: haha! Yaptığım yeniden yükleme miktarıyla,
hafızam

2

lynxarayabilir dpkg(veya bir ekran varsa Yazılım Merkezini) arayabilir ve sizin için indirilmiş bir paket kurmayı önerebilir. Örneğin, şunları kullanarak:

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

.debDosyalardan birini indirirken , aşağıdaki bilgi istemi gösterilir:

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: 

(Belki internetten rastgele paketler yüklemeye çalışmamalıyım.)


1

Bu sorunun cevaplanmasından / gönderilmesinden bu yana bir süre geçtiğini biliyorum, ama işte benim mütevazi katilim :

#!/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-getPastebin'den tek komutla nasıl kurulur :

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"

Nasıl kullanılır (örneğin PowerShell 6 alpha yüklemek için):

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

Ve hepsi bu.

Mükemmel olmadığını biliyorum ama çok basit ve işe yarıyor.

Ne kurduğunuza ve indirdiğiniz yere dikkat etmeyi unutmayın.


0

Bir SO cevabına dayanan bu bir liner benim için Ubuntu 15.04'te çalıştı ve ortamım için github'daki en son atom salınımını tespit etti (64-bit Ubuntu):

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

Bunu bir tmp dizininde yaparsanız, tmp klasörünüzü boşalttığınızda deb dosyası temizlenir. Aksi takdirde, disk alanına ihtiyacınız varsa deb paketini manuel olarak silebilirsiniz.


0

Bunu aşağıdaki şekilde ekleyebilirsin /etc/bash.bashrc(bu Chen'in senaryosundan bir yükseltmedir):

'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
}

Gerçi aşağıdaki gibi çağırırken neden bu hatayı aldığımı anlamıyorum:

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

Bu konuda kendi iki sentimi verebileceğimi düşündüm. Aşağıdaki komutu kullanarak bir URL’den bir paket yükleyebilirsiniz:

wget insert_url_here

Bir kere indirildikten sonra, dpkg komutunu süper kullanıcı olarak çalıştırmanız gerekir: sudo dpkg -i insert_file_name_here

Sonra sadece terminalde verilen talimatları takip edin.


1
Tabii ki evet, soruda belirtildiği gibi parantez arasında :)
Joril
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.