C'è un modo per installare un pacchetto deb direttamente da un URL, usando una shell ? Qualcosa come
dpkg -i http://domain.com/path/to/package.deb
(So che potrei usare wget e poi dpkg, mi stavo chiedendo se c'è qualcosa che lo fa già)
C'è un modo per installare un pacchetto deb direttamente da un URL, usando una shell ? Qualcosa come
dpkg -i http://domain.com/path/to/package.deb
(So che potrei usare wget e poi dpkg, mi stavo chiedendo se c'è qualcosa che lo fa già)
Modifica: non ho visto la tua precedente affermazione sul fatto di sapere che potresti wget, quindi questo è un po 'imbarazzante ... Lascerò questo qui per chiunque voglia sapere come farlo. Inoltre, la versione precedente della mia risposta non funzionava, ma questa versione (a spese di essere un po 'più lunga) fa:
TEMP_DEB="$(mktemp)" &&
wget -O "$TEMP_DEB" 'http://path.to/my.deb' &&
sudo dpkg -i "$TEMP_DEB"
rm -f "$TEMP_DEB"
Devi solo modificare l'URL all'inizio. Questo potrebbe essere alias o scritto come una funzione bash.
Mi rendo conto che ci sono problemi tecnici e di sicurezza che circondano questo aspetto (non si ottengono aggiornamenti automatici, si può fidarsi della fonte, ecc.), ma su base puramente can-do-it, questo potrebbe funzionare.
È non possibile senza creare un file temporaneo. Normalmente lo farebbe come
### Does not work
wget --quiet --output-document=- http://example.com/path/to/package.deb | dpkg --install -
o forse
### Does not work
dpkg --install <(wget --quiet --output-document=- http://example.com/path/to/package.deb)
ma dpkg usa mmap per accedere al file in modo che nessuno dei due lavori. C'è una segnalazione di bug su questo: # 367297
Il metodo più veloce è come questo. Fai clic per avviare l'installazione di shutter .
URLutilizzatiperfareclicsulnome:
http://packages.ubuntu.com/shutter
...eperilclicsull'icona:
http://apt.ubuntu.com/p/shutter
Esì,haibisognodiUbuntuSoftwareCenterpercompletarel'installazionediun.DEB.Altrimentidovraieseguirel'installazionedaNautilusodallarigadicomando.
IltestocompletoutilizzatoperquestoèperChiediUbuntu,quindiènecessarioriformattarloinun'ancora:
[shutter](http://packages.ubuntu.com/shutter)[](http://apt.ubuntu.com/p/shutter)
Ulterioriinformazionipossonoesseretrovatenella
1 pacchetto:
a href="apt:package"
Raggruppamento di più pacchetti:
a href="apt:package1,package2,package3"
Abilitazione dei repository:
apturl apt:freevial?section=universe
Quindi, se il software non si trova in un repository predefinito abilitato, dovresti aggiungere un 'section =' ad esso. Altrimenti non è possibile utilizzare questo metodo e richiedere all'utente di scaricarlo e installarsi.
Puoi provare con curl
.
Per scaricare il file nella cartella corrente e installarlo dal file locale:
curl -sLO https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i puppetlabs-release-precise.deb
o scarica in /var/cache/apt/archives/
e installa da lì:
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
In realtà ho uno script che fa qualcosa di simile:
Basta copiare e incollare questo script in ~/bin
(crea questa cartella se non esiste):
#!/bin/bash
# ~/bin/dpkg
COUNT=0
for i in [email protected]; 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
Quindi aggiungi questo all'ultima riga in ~/.bashrc
PATH="~/bin:$PATH"
Lo script è solo un wrapper per dpkg
. La riga nel file ~/.bashrc
indica bash
che ogni volta che digiti dpkg
, verrà eseguito ~/bin/dpkg
(lo script) anziché /usr/bin/dpkg
.
Lo script passerà gli argomenti a dpkg
se non ci sono dati URL. Lo script supporta anche più URL. Ecco alcuni esempi che funzioneranno:
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
lynx
può chiamare dpkg
(o Software Center, se è disponibile una visualizzazione) e offrire di installare un pacchetto scaricato per te. Ad esempio, utilizzando:
lynx http://archive.ubuntu.com/ubuntu/pool/main/z/zsh/
E scaricando uno dei file .deb
, viene visualizzato il seguente prompt:
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:
(Forse non dovrei provare a installare pacchetti casuali da Internet.)
So che è passato un po 'di tempo da quando questa domanda è stata risposta / pubblicata, ma ecco il mio modesto contributo :
#!/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"
Come installare dpkg-get
da Pastebin con un singolo comando:
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"
Come usarlo (ad esempio per installare 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
E questo è tutto.
So che non è perfetto, ma è semplice e funziona.
Ricorda di fare attenzione a ciò che installi e da dove lo scarichi.
Questo one-liner basato su una risposta SO ha funzionato per me su Ubuntu 15.04 per identificare l'ultimo atom rilascia su github per il mio ambiente (64-bit Ubuntu) e poi installalo:
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))
Se lo fai in una directory tmp, il file deb verrà ripulito ogni volta che svuoti la tua cartella tmp. Altrimenti puoi cancellare manualmente il pacchetto deb se ti serve lo spazio su disco.
Puoi aggiungerlo a /etc/bash.bashrc
come segue (è un aggiornamento dallo script di 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
}
Anche se non vedo perché ottengo questo errore quando lo chiamo come segue:
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' !
Ho pensato di dare il mio due centesimi su questo. È possibile installare un pacchetto da un URL utilizzando il seguente comando:
wget insert_url_here
Una volta scaricato, è necessario eseguire il comando dpkg come superutente: % Co_de%
Quindi segui semplicemente le istruzioni che vengono presentate nel terminale.
Leggi altre domande sui tag apt package-management dpkg