Saya tidak bisa menambahkan repositori PPA di belakang proxy

14

Saya mencoba menambahkan repositori ppa (sebagai root) dengan perintah berikut:

export HTTP_PROXY="http://[email protected]:[email protected]:8080"
add-apt-repository ppa:nilarimogard/webupd8


Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 125, in <module>
    ppa_info = get_ppa_info_from_lp(user, ppa_name)
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 84, in get_ppa_info_from_lp
    curl.perform()
pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

Sayangnya itu tidak berhasil. Sepertinya curl terhubung ke proxy, tetapi proxy tersebut mengatakan bahwa Otentikasi Diperlukan. Saya sudah mencoba dengan .curlrc, http_proxy env sebagai gantinya, tetapi tidak berhasil.

strace -e network,write -s1000 add-apt-repository ppa:nilarimogard/webupd8
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, 16) = -1 EINPROGRESS (Operation now in progress)
getsockopt(4, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
getpeername(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, [16]) = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(46025), sin_addr=inet_addr("161.20.75.220")}, [16]) = 0
sendto(4, "CONNECT launchpad.net:443 HTTP/1.1\r\nHost: launchpad.net:443\r\nUser-Agent: PycURL/7.22.0\r\nProxy-Connection: Keep-Alive\r\nAccept: application/json\r\n\r\n", 146, MSG_NOSIGNAL, NULL, 0) = 146
recvfrom(4, "HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: BASIC realm=\"proxy\"\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/html; charset=utf-8\r\nProxy-Connection: close\r\nSet-Cookie: BCSI-CS-91b9906520151dad=2; Path=/\r\nConnection: close\

Mungkin karena ada @ masuk di nama pengguna? Wget berfungsi dengan baik-baik saja proxy.

Terkait: Bagaimana cara saya menambah repositori dari belakang proxy?

Lingkungan Hidup

Ubuntu 12.04

curl 7.22.0 (x86_64-pc-linux-gnu) libcurl / 7.22.0 OpenSSL / 1.0.1 zlib / 1.2.3.4 libidn / 1.23 librtmp / 2.3

Fitur curl: GSS-Negosiasi IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

MEMPERBARUI

Ketika menambahkan kredensial ke .curlrc

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = [email protected]:mypass0

Tampaknya bekerja untuk ikal biasa .

curl www.google.com | head

* Proxy auth using Basic with user '[email protected]'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

Juga HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user '[email protected]'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
    > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1     zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Proxy-Connection: Keep-Alive
< HTTP/1.1 200 Connection established
* Proxy replied OK to CONNECT request
* successfully set certificate verify locations

Tetapi masih tidak berfungsi saat menambahkan sertifikat ppa.

pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

KEPALA CURL

Tajuk terkirim:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
Proxy-Authorization: Basic cGVvcGxlcmVhbGx5c2hvdWxkQHNhbml0aXplcG9zdHM=
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Proxy-Connection: Keep-Alive

Balasan:

HTTP/1.1 200 Connection established

HEADER PyCURL

Tajuk terkirim:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
User-Agent: PycURL/7.22.0
Proxy-Connection: Keep-Alive
Accept: application/json

Balasan:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: BASIC realm="proxy"

Tampaknya PyCURL tidak mengirim kembali Otorisasi apa pun saat diminta.

kenorb
sumber
Terima kasih, saya sudah mencoba tetapi ini tidak membantu. Untuk memastikan bahwa ini tidak terjadi, saya telah memasukkan kredensial saya di .curlrc (tanpa melarikan diri @ tampaknya berfungsi untuk perintah standar curl), tetapi tidak untuk pycurl. Lihat bagian yang diperbarui.
kenorb
Terima kasih, saya pikir saya melewatkan sesuatu. Saya telah melaporkan bug di sini: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb
Sudahkah Anda juga mengatur https_proxy? Lihat bug bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey
Mungkin itu adalah masalah yang terkait dengan sesi dan vars lingkungan. Anda dapat mencoba mengekspor http_proxy dan https_proxy di / etc / profile, kemudian reboot mesin (jika mungkin) dan coba lagi.
jap1968
Terkait dengan apa yang dikatakan jap1968 di atas saya, saya telah memastikan bahwa http_proxy dan HTTP_PROXY diatur (dan https_proxy dan HTTPS_PROXY). Berkat sensitivitas kasus Linux, mereka sebenarnya adalah dua variabel yang berbeda - dan, yang terpenting, tidak semua program akan menggunakan satu atau yang lain. Memang, ini terdengar lebih seperti masalah dengan bagaimana kombinasi nama pengguna / kata sandi sedang dikirim (karena '@'), tetapi tetap patut dicoba.
YellowApple

Jawaban:

10

Penanganan masalah jika apt-getmasih berfungsi di belakang proxy

  • tambahkan sumber secara manual ke /etc/apt/sources.list
  • tambahkan kunci gpg

Menambahkan sumber secara manual

Saya pikir di launchpad.net setiap ppa masih berisi deskripsi kecil cara menambahkan sumber secara manual. Situs launchpad untuk ppa yang Anda sebutkan ppa:nilarimogard/webupd8adalah https://launchpad.net/~nilarimogard/+archive/webupd8 . Jika Anda menggulir ke bawah, Anda akan melihat label yang dapat diperluas. Rincian teknis tentang PPA ini . Jika Anda mengembangkannya, Anda akan menemukan deskripsi cara menambahkan sumber secara manual. Tambahkan baris berikut ke yang disebutkan/etc/apt/sources.list

deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 
deb-src http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 

Tentu saja Anda harus menyesuaikan jumlah dengan versi apa pun yang saat ini Anda gunakan.

Menambahkan Kunci Masuk

Deskripsi juga berisi kunci penandatanganan . Ini penting, agar sistem Anda selalu dapat memverifikasi bahwa Anda benar-benar mengakses alamat ppa yang dapat dipercaya. Dalam hal ppa Anda 1024R/4C9D234C(dapat juga ditemukan di bawah Rincian teknis tentang PPA ini ), di mana nomor di belakang garis miring adalah penting. Anda dapat menambahkan sidik jari melalui apt-keyprogram. Biasanya Anda akan melakukan perintah berikut

 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4C9D234C

Menambahkan jika apt-keytidak berfungsi melalui proxy

Karena Anda sudah memiliki masalah dengan add-apt-repositoryprogram ini, ini mungkin juga tidak berfungsi. Jadi, alih-alih Anda dapat mengunduh dan menambahkan kunci 1024 Bit secara manual. Jika wgetberhasil, Anda dapat melakukannya dalam satu langkah.

wget "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C" -O out && sudo apt-key add out && rm out

Kalau tidak aman " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " dalam contoh /path/keydan gunakan sudo apt-key add /path/keyuntuk menambahkannya.

Tutup dengan yang biasa

Setelah itu Anda harus memperbarui informasi repositori apt-get updatedan kemudian Anda dapat mengunduh paket.

Sumber daya

Favorit pribadi saya tentang cara menggunakan mekanisme pengemasan (sayangnya dalam bahasa Jerman): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

Versi launchpad juga menyebutkan semua poin penting: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Karena tidak biasa menggunakan apt-key dengan cara yang dijelaskan saya hanya menemukan informasi di halaman manual man apt-key,.

Jawaban terkait yang cukup banyak menggambarkan cara standar untuk menginstal ppa secara manual: /ubuntu//a/38029/128349

LeoR
sumber
@kenorb tidak tahu jika Anda mendapat pemberitahuan jika saya mengedit posting saya, jadi: ping: "kemungkinan solusi"
LeoR
Jika masalah Anda adalah port 11371 diblokir di firewall perusahaan Anda, Anda sekarang dapat menggunakan port 80 sebagai gantinya: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz
7

Sebenarnya itu tampaknya jauh lebih mudah daripada jawaban yang diposting sebelumnya. Anda hanya perlu "sudo" untuk mengetahui bahwa Anda berada di belakang proxy dan itu akan bekerja dengan mudah. Untuk melakukan ini, Anda perlu mengekspor proxy Anda httpdan httpscara yang biasa Anda lakukan:

export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/

dan kemudian tambahkan Defaults env_keep="https_proxy"ke akhir /etc/sudoersfile. Setelah ini, Anda harus dapat menambahkan ppa menggunakan perintah:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

atau gunakan

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

jika Anda tidak ingin memodifikasi /etc/sudoersfile. The -Epilihan ekspor variabel lingkungan untuk pengguna sudo.

Saya telah memberikan deskripsi terperinci tentang ini di sini di blog saya .

pekerjaan
sumber
1

Pastikan apt proxy diatur seperti di bawah ini

sudo vi /etc/apt/apt.conf

tambahkan pengaturan proxy berikut dan simpan file

Acquire::http::proxy "http ://proxy.company.com:port/";
Acquire::https::proxy "https ://proxy.company.com:port/";
Acquire::ftp::proxy "ftp://proxy.company.com:port/";

selain itu ekspor berikut di Terminal sebelum Anda menjalankan perintah

export http_proxy=http ://proxy.company.com:port/
export https_proxy=https ://proxy.company.com:port/

Ini seharusnya bekerja.

Manjula
sumber