Bagaimana cara mendapatkan add-apt-repository agar berfungsi melalui proxy?

119

Saya mencoba mengikuti petunjuk "Menginstal Cross Toolchain di Ubuntu 10.04 (Lucid) dan 10.10 (Maverick) Hosts" di wiki.linaro.org (di Ubuntu 10.04 VM). Langkah pertama adalah:

sudo add-apt-repository ppa:linaro-maintainers/toolchain

Tetapi ketika saya menjalankan itu saya mendapatkan:

Error reading https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain: <urlopen error [Errno 110] Connection timed out>

Saya menduga masalahnya adalah konfigurasi saya untuk server proxy majikan saya, terutama untuk HTTPS.

Ketika saya membuka https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain di Firefox, saya mendapat "Sambungan habis waktu". Saya kemudian pergi ke Firefox Preferences -> Advanced -> Network -> Settings ... dan mengatur HTTP Proxy ke "gateway" dan Port ke 8080, dan memeriksa "Gunakan server proxy ini untuk semua protokol". Kemudian halaman dimuat. Ini mendukung teori saya.

Saya sudah mencoba mengatur variabel lingkungan http_proxy dan https_proxy (huruf besar dan kecil):

$ set | grep -i proxy
HTTPS_PROXY=https://gateway:8080
HTTP_PROXY=http://gateway:8080
http_proxy=http://gateway:8080
https_proxy=https://gateway:8080

Saya juga mencoba mengubahnya menjadi:

$ set | grep -i proxy
HTTPS_PROXY=gateway:8080
HTTP_PROXY=gateway:8080
http_proxy=gateway:8080
https_proxy=gateway:8080

Dan saya mencoba menambahkan baris kedua ini ke /etc/apt/apt.conf:

Acquire::http::proxy "http://gateway:8080/";
Acquire::https::proxy "https://gateway:8080/";

Tapi saya terus mendapatkan kesalahan yang sama.

Bagaimana saya memecahkan masalah ini?

Pembaruan: Saya mengikuti instruksi dalam jawaban yang diterima untuk "Masalah menambahkan repositori dan menghubungkan dari terminal di belakang proxy" dan mendapatkan lebih lanjut:

$ sudo add-apt-repository ppa:linaro-maintainers/toolchain
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv 1DD749B890A6F66D050D985CF1FCBACA7BE1F97B
gpg: requesting key 7BE1F97B from hkp server keyserver.ubuntu.com
gpgkeys: HTTP fetch error 7: couldn't connect to host
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

Saya ingin tahu apakah "HTTP fetch error" berarti saya juga perlu menambahkan "Defaults env_keep = http_proxy" ke /etc/sudoers...

Pembaruan # 2: Saya menambahkan:

Defaults env_keep="http_proxy"
Defaults env_keep="https_proxy"

... seperti dalam Komentar 18 untuk bug 516032 , tapi saya masih mendapatkan kesalahan "gpgkeys: HTTP fetch 7: tidak dapat terhubung ke host" yang sama.

Dan ini penasaran:

$ sudo env | grep proxy
https_proxy=https://gateway:8080

... karena http_proxy tidak ada.

Setiap saran sangat dihargai.

Pembaruan # 3: Karena host VM saya adalah laptop, saya membawanya pulang dan mencobanya (tanpa proxy):

$ sudo add-apt-repository ppa:linaro-maintainers/toolchain
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv 1DD749B890A6F66D050D985CF1FCBACA7BE1F97B
gpg: requesting key 7BE1F97B from hkp server keyserver.ubuntu.com
gpg: key 7BE1F97B: public key "Launchpad Linaro Overlay PPA" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Itu berhasil. Jadi masalah terkait dengan konfigurasi proxy. Tapi saya kira saya punya solusi.

Daryl Spitzer
sumber
Hanya untuk referensi askubuntu.com/questions/60217/…
Deepak Rajput

Jawaban:

183

Selain mengonfigurasi proksi, beri tahu sudountuk melestarikan lingkungan dengan -Eopsi:

export http_proxy=http://<proxy>:<port>
export https_proxy=http://<proxy>:<port>
sudo -E add-apt-repository ppa:linaro-maintainers/toolchain

dengan nama pengguna dan kata sandi:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Amal Pillai
sumber
Ya benar-benar bekerja
Shashwat Kumar
14
-E (setelah melakukan semua hal di atas) membuatnya bekerja untuk saya.
cschooley
2
dan ya, https_proxykonfigurasi itu diperlukan ...: P
monkut
1
Bagaimana cara menambahkan proxy secara permanen dan menghindari saklar -E? Saya sudah file / etc / environment dikonfigurasi dengan benar dengan baris ditambahkan ... Terima kasih
Enrique
1
Dari man sudo: -E, --preserve-envMenunjukkan kebijakan keamanan bahwa pengguna ingin mempertahankan variabel lingkungan yang ada. Kebijakan keamanan dapat mengembalikan kesalahan jika pengguna tidak memiliki izin untuk melestarikan lingkungan.m
Pablo A
39

Gunakan kode berikut di terminal untuk menambahkan kunci gpg di belakang proxy,

sudo apt-key adv --keyserver-options http-proxy=http://USER:PASSWORD@PROXY_URL:PORT/ --keyserver keyserver.ubuntu.com --recv-keys GPG_KEY

Dan ganti huruf besar sesuai. Jika Anda menggunakan proxy tanpa autentikasi pengguna (misalnya, nama pengguna dan kata sandi) gunakan http-proxy=http://PROXY_URL:PORT/sebagai gantinya.

Misalnya agar GPG_KEY=C2514567EEA14886Anda dapat menggunakan,

sudo apt-key adv --keyserver-options http-proxy=http://user:[email protected]:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

dimana,

USER_ID=user
PASSWORD=abc123
PROXY_URL=10.10.2.21
PORT=3128

Jika Anda tidak memiliki otentikasi pengguna cukup gunakan,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Patxi Gomez
sumber
3
Ini sebenarnya tidak "memperbaiki" eksekusi perintah add-apt-repository. Memang ia bekerja di sekitar salah satu tugasnya. Setidaknya diperlukan satu perintah tambahan: sudoedit /etc/apt/sources.list.d/XXXX.list + edisi manual untuk menambahkan URL deb ...
Chucky
Akan sempurna jika Anda menambahkan beberapa info cara memperbaiki proxy selamanya. Solusi yang Anda berikan membutuhkan BANYAK pengetikan
Danatela
9

Akhirnya! Anda perlu mengatur https_proxy melalui:

export https_proxy=....

hanya mengatur http_proxy tidak cukup.

Dan saya perlu menjalankan perintah add-apt-repository sebagai root, BUKAN melalui sudo.

Kode:

sudo su
add-apt-repository ppa:........
DaRattler
sumber
6

Tampaknya konfigurasi proxy sudah diatur tetapi entah bagaimana server tidak dapat dihubungi ...

Saya memiliki masalah yang sangat mirip yang saya selesaikan seperti ini: Proksi perusahaan hanya mengizinkan port 80 dan 443 untuk alasan keamanan, jadi ketika pengaturan, karena protokol HKP menggunakan port 11371, itu tidak akan membiarkan Anda melewatinya.

Jadi, singkat dari SSH-ing keluar dan mendapatkan kunci dari salah satu server Anda di luar, mengunduhnya dan menginstalnya secara lokal, Anda dapat menentukan server kunci dari pada yang tercantum di bawah ini dan menentukan port:

http://sks-keyservers.net/overview-of-pools.php

misalnya:

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys XXXXX

Boom, Voila!

leroyse
sumber
Ya. Ini berhasil, bagi saya, saat memasang Mono pada Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
ken
3

Alasan sudoersperubahan Anda tidak berfungsi seperti yang diharapkan adalah bahwa alih-alih:

    Defaults env_keep="http_proxy"
    Defaults env_keep="https_proxy"

Anda seharusnya menulis:

    Defaults env_keep+="http_proxy"
    Defaults env_keep+="https_proxy"

Pastikan juga spasi antara Defaultsdan env_keepmerupakan tab setiap kali.

Urhixidur
sumber
3

Saya berhasil mengatasinya dengan mengedit /usr/lib/python3/dist-packages/softwareproperties/ppa.pydan menambahkan

"--keyserver-options", "http-proxy=<proxy_url>",

di bawah baris berikut

"--keyserver", self.keyserver,

Informasi latar belakang lainnya

ppa.pyadalah skrip python yang digunakan oleh add-apt-repositoryuntuk memanggil gpg. Kadang-kadang tampaknya ada bug dengan gpg di mana ia tidak menggunakan variabel lingkungan http_proxy. Ini dapat dikonfirmasi dengan melihat file /root/.gnupg/dirmngr.confdan memeriksa untuk melihat yang honor-http-proxytidak dikomentari.

Leota Junior
sumber
3

Pendekatan empat langkah ini berhasil bagi saya pada Ubuntu 17,04 VM di belakang proxy perusahaan.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng dan biarkan itu gagal
  2. sudo apt update dan cari pesan kesalahan seperti The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F5DA5F09C3173AA6
  3. sudo apt-key adv --keyserver-options http-proxy=http://10.0.2.2:3128 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F5DA5F09C3173AA6
  4. sudo apt update sekarang akan bekerja

Perhatikan bahwa VM host menjalankan CNTLMserver proxy pada port 3128.

thegreendroid
sumber
1
Anda tidak perlu menunggu untuk memberi tahu Anda apa kuncinya. Itu ada di dalam rincian teknis PPA : "Sidik jari: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6"
muru
Itu benar, tetapi saya menemukan proses ini sedikit lebih mudah.
thegreendroid
1

Ini membantu saya:

sudo https_proxy='https://user:password@proxyhost:port/' \
http_proxy='http://user:password@proxyhost:port/' \
ftp_proxy='ftp://user:password@proxyhost:port/' \
no_proxy=localhost,127.0.0.0/8,10.0.0.0/8 add-apt-repository ppa:webupd8team/java

Saya kira ada beberapa variabel lingkungan yang tidak diperlukan dalam perintah tetapi mereka tidak membahayakan.

Leo
sumber
1

Tambahkan PPA secara manual ke /etc/apt/sources.list:

deb http://ppa.launchpad.net/<user>/<repo>/ubuntu trusty main

Simpan file dan jalankan sudo apt-get update. Kesalahan ini mungkin muncul:

W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5BB92C09DB82666C

Jalankan perintah berikut untuk menerima kunci untuk PPA, ingat untuk mengubah kunci (5BB92C09DB82666C) untuk PPA yang sesuai.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 5BB92C09DB82666C

Lari sudo apt-get updatedan Anda selesai.

Ref: Cara Menambahkan PPA Launchpad Di Debian Via add-apt-repositoryCommand

Sebuah kesenangan
sumber
1

Sebenarnya, saya mengalami masalah yang sama, itulah cara saya menemukan halaman ini.

  • variabel lingkungan http_proxy (case sensitif) dan https_proxy (case apa pun) melakukan sesuatu. Tidak menetapkan mereka gagal pada tahap pertama, pengaturan variabel lingkungan tampaknya memiliki efek; itu akan gagal jika Anda tidak mengekspornya

    TCRKVMW ~ $ sudo su -
    TCRKVMW ~ # export http_proxy=http://10.54.0.4:8080/
    TCRKVMW ~ # export https_proxy=http://10.54.0.4:8080/
    TCRKVMW ~ # add-apt-repository ppa:webupd8team/java
    You are about to add the following PPA:
     Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK7 / JDK8 / JDK9). There are no actual Java files in this PPA.
    

    (sisanya berhasil - kali ini)

Masalahnya adalah, kadang-kadang, itu hanya macet dan diakhiri dengan pesan batas waktu yang biasa: Tidak dapat menambahkan PPA: '"Kesalahan membaca https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7,' Gagal terhubung ke port launchpad.net 443: Koneksi habis waktu ') "'.

... tapi saya curang, saya melakukan semua ini sebagai root. Solusi mudah adalah dengan mengedit / etc / profile atau, di Ubuntu / Mint, cukup tambahkan skrip di /etc/profile.d:

    TCRKVMW ~ $ sudo su -c 'F=/etc/profile.d/proxy.sh S="export proxy_http=\"http://192.168.99.4\"\nexport proxy_https=\"http://192.168.99.4\"" ; echo -e ${S} > ${F} ; chmod 700 ${F}'

Oh, ya, ada juga hal tentang curl (yang digunakan oleh apt-add-repository, by the way). Manual mengatakan untuk menambahkan .curlrc di direktori home Anda. Karena apt-add-directory adalah milik root, itu berarti menambahkannya ke /root/.curlrc:

    proxy_http="http://192.168.99.4"
    proxy_https="http://192.168.99.4"

Ide yang bagus adalah melakukan hal yang sama di ~ ~ .curlrc Anda sendiri

Juga, mengaktifkan proxy di / etc / wgetrc adalah hal yang baik untuk dilakukan, meskipun itu tidak ada hubungannya dengan pertanyaan yang diajukan, saya hanya menyimpan Anda pencarian lain di Google (jika Anda membaca ini, Anda memiliki beberapa dengan proxy ) ...

Marabiloso
sumber
1

Dalam /etc/apt/apt.conf.d/01proxyadd sesuatu seperti ini

Acquire::http { Proxy "http://192.168.0.99:3142"; };

Ini akan mem - proxy semua unduhan aptitude, tapi saya pikir ini adalah satu-satunya cara untuk melakukan ini di backend. Jika proxy Anda mendukungnya, Anda juga dapat menggunakan url seperti http://my.proxy:port/www.target.site.com/urlyang saya tahu berfungsi untukapt-cache-ng

Saya tidak yakin apakah add-apt-repository sendiri menggunakan pengaturan ini, tetapi jika Anda tidak dapat membuatnya, Anda selalu dapat menambahkan repositori ke /etc/apt/sources.listatau/etc/apt/sources.list.d/*mytoolchain*

Sejak 11.10 ada juga cross-tool yang tersedia di repo utama, adil apt-get install gcc-arm-linux-gnueabihf. Ada juga cross-toolchains yang tersedia dari emdebian, dan beberapa instruksi di sini: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

pengguna72421
sumber
user72421: bagaimana Anda tahu bahwa proxy harus diawali dengan 01 dan bukan dengan nomor lain?
jgomo3
Tidak bekerja dengan apt-get & keyserver
Vik
0

Variabel lingkungan sistem lebar harus benar-benar ditambahkan ke /etc/environment(menggunakan sudoatau gksu), tetapi kesalahan yang dilaporkan kepada Anda tampaknya menyatakan tidak ada data gpg ditemukan. Ide ide:

  • periksa pengaturan proxy (jika Anda memiliki akses)
  • periksa apakah proxy tersebut entah bagaimana memudarkan output dari lalu lintas terenkripsi.
  • jalankan netstat terus menerus untuk melihat apakah koneksi ke proxy sebenarnya sedang dibuat
  • pilihan terakhir adalah tcpdump & periksa di wireshark
  • coba terowongan http;)
t0m5k1
sumber
0

Solusi lain adalah menambahkan proxy.conffile APT ,/etc/apt/apt.conf.d/proxy.conf

Acquire::http::Proxy "http://your.proxy.server.here.com:port/";
Acquire::https::Proxy "http://your.proxy.server.here.com:port/";
Dan Anderson
sumber