Tôi không thể thêm kho lưu trữ PPA phía sau proxy


14

Tôi đang cố gắng thêm kho lưu trữ ppa (dưới dạng root) bằng lệnh sau:

export HTTP_PROXY="http://firstname.surname@xxx.com:my_pass@165.x.x.232: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')

Thật không may, nó không hoạt động. Có vẻ như curl đang kết nối với proxy, nhưng proxy nói rằng Xác thực là Bắt buộc. Tôi đã thử với .curlrc, http_proxy env, nhưng nó không hoạt động.

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\

Có lẽ đó là vì có @ đăng nhập tên người dùng? Wget hoạt động với proxy tốt.

Liên quan: Làm cách nào để thêm kho lưu trữ từ phía sau proxy?

Môi trường

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

Các tính năng curl: GSS-Đàm phán IDN IPv6 Lớn hơn NTLM NTLM_WB SSL libz TLS-SRP

CẬP NHẬT

Khi thêm thông tin đăng nhập vào .curlrc

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = name.surname@xxx.com:mypass0

Nó dường như làm việc cho các curl đồng bằng .

curl www.google.com | head

* Proxy auth using Basic with user 'name.surname@xxx.com'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

Ngoài ra HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'name.surname@xxx.com'
> 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

Nhưng vẫn không hoạt động khi thêm chứng chỉ ppa.

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

TIÊU ĐỀ

Tiêu đề đã gửi:

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

Đáp lại:

HTTP/1.1 200 Connection established

TIÊU ĐỀ PyCURL

Tiêu đề đã gửi:

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

Đáp lại:

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

Có vẻ như PyCURL không gửi lại bất kỳ Ủy quyền nào khi được yêu cầu.


Cảm ơn, tôi đã thử nhưng điều này không có ích. Để đảm bảo rằng đây không phải là trường hợp, tôi đã đưa thông tin đăng nhập của mình vào .curlrc (không thoát @ dường như hoạt động với lệnh curl tiêu chuẩn), nhưng không phải cho pycurl. Xem phần cập nhật.
kenorb

Cảm ơn, tôi nghĩ rằng tôi đã bỏ lỡ một cái gì đó. Tôi đã báo cáo lỗi ở đây: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

Bạn cũng đã đặt https_proxy chưa? Xem lỗi bug.launchpad.net/ubfox/+source/software-properIES/+orms/iêu
popey

Có lẽ nó là một vấn đề liên quan đến phiên và bình môi trường. Bạn có thể thử xuất http_proxy và https_proxy trong / etc / profile, sau đó khởi động lại máy (nếu có thể) và thử lại.
jap1968

Liên quan đến những gì jap1968 đang nói ở trên tôi, tôi đã đảm bảo rằng cả http_proxy HTTP_PROXY đều được đặt (và https_proxy và HTTPS_PROXY). Nhờ phân biệt chữ hoa chữ thường của Linux, đây thực sự là hai biến khác nhau - và, tốt nhất, không phải tất cả các chương trình sẽ sử dụng cái này hay cái kia. Cấp, nó có vẻ giống như một vấn đề với cách kết hợp tên người dùng / mật khẩu được gửi (vì '@'), nhưng dù sao nó cũng đáng để thử.
YellowApple

Câu trả lời:


10

Giải pháp thay thế nếu apt-getvẫn hoạt động phía sau proxy

  • thêm nguồn thủ công vào /etc/apt/sources.list
  • thêm khóa gpg

Thêm nguồn thủ công

Tôi nghĩ trên launchpad.net mỗi ppa vẫn chứa một mô tả nhỏ về cách thêm nguồn theo cách thủ công. Trang web launchpad cho ppa được đề cập của bạn ppa:nilarimogard/webupd8https://launchpad.net/~nilarimogard/+archive/webupd8 . Nếu bạn cuộn xuống, bạn sẽ thấy một nhãn có thể mở rộng Chi tiết kỹ thuật về PPA này . Nếu bạn mở rộng nó, bạn sẽ tìm thấy mô tả cách thêm nguồn theo cách thủ công. Thêm các dòng sau để đề cập/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 

Tất nhiên bạn phải điều chỉnh định lượng cho bất kỳ phiên bản nào bạn đang sử dụng.

Thêm khóa ký

Mô tả cũng chứa một khóa ký . Điều này rất quan trọng, để hệ thống của bạn luôn có thể xác minh rằng bạn thực sự truy cập vào địa chỉ ppa đáng tin cậy. Trong trường hợp ppa của bạn là 1024R/4C9D234C(cũng có thể được tìm thấy trong Chi tiết kỹ thuật về PPA này ), trong đó con số đằng sau dấu gạch chéo là quan trọng. Bạn có thể thêm dấu vân tay thông qua apt-keychương trình. Thông thường bạn sẽ thực hiện lệnh sau

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

Thêm nếu apt-keykhông hoạt động thông qua proxy

Vì bạn đã có vấn đề với add-apt-repositorychương trình, điều này cũng có thể không hoạt động. Vì vậy, thay vào đó bạn có thể tải xuống và thêm khóa 1024 Bit theo cách thủ công. Nếu wgetcông việc bạn có thể làm điều đó trong một bước.

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

Nếu không thì an toàn " http://keyserver.ubfox.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " trong ví dụ /path/keyvà sử dụng sudo apt-key add /path/keyđể thêm nó.

Đóng với thông thường

Sau đó, bạn phải cập nhật thông tin kho lưu trữ apt-get updatevà sau đó bạn sẽ có thể tải xuống các gói.

Tài nguyên

Yêu thích cá nhân của tôi về cách sử dụng cơ chế đóng gói (đáng buồn là tiếng Đức): http://wiki.ubfoxusers.de/Paketquellen_freischalten/PPA

Phiên bản launchpad cũng đề cập đến tất cả các điểm quan trọng: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Vì việc sử dụng khóa apt theo cách được mô tả là không bình thường nên tôi chỉ tìm thấy thông tin trong các trang hướng dẫn man apt-key.

Câu trả lời liên quan có khá nhiều mô tả cách tiêu chuẩn để cài đặt ppa theo cách thủ công: https://askubfox.com/a/38029/128349


@kenorb không biết bạn có nhận được thông báo nếu tôi chỉnh sửa bài đăng của mình không, vì vậy: ping: "cách giải quyết có thể"
LeoR

Nếu vấn đề của bạn là cổng 11371 bị chặn trong tường lửa của công ty, giờ đây bạn có thể sử dụng cổng 80: "sudo apt-key adv --keyserver hkp: //keyserver.ub Ubuntu.com: 80 --recv-key 4C9D234C "
leszek.hanusz

7

Thật ra nó có vẻ dễ hơn nhiều so với câu trả lời được đăng trước đó. Bạn chỉ cần "sudo" để biết rằng bạn đứng sau một proxy và nó sẽ hoạt động dễ dàng. Để làm điều này, bạn cần xuất proxy của mình httphttpscách bạn thường làm:

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

và sau đó thêm Defaults env_keep="https_proxy"vào cuối /etc/sudoerstập tin. Sau này, bạn sẽ có thể thêm ppa bằng lệnh:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

hoặc dùng

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

nếu bạn không muốn sửa đổi /etc/sudoers tập tin. Các -Etùy chọn xuất khẩu các biến môi trường cho người sử dụng sudo.

Tôi đã đưa ra một mô tả chi tiết về điều này ở đây trên blog của tôi .


1

Đảm bảo apt proxy được đặt như bên dưới

sudo vi /etc/apt/apt.conf

thêm cài đặt proxy sau và lưu tệp

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

ngoài việc xuất sau trong Terminal trước khi bạn chạy lệnh

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

Điều này nên làm việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.