プロキシを介してadd-apt-repositoryを機能させるにはどうすればよいですか?


119

私は従うことをしようとしているwiki.linaro.orgの指示「のUbuntu 10.04(明晰)および10.10(マーベリック)ホストへのインストールクロスツールチェーンを」(私のUbuntu 10.04 VM上で)。最初のステップは次のとおりです。

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

しかし、私がそれを実行すると、次のようになります:

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

問題は雇用主のプロキシサーバー、特にHTTPSの構成にあると推測しています。

Firefoxでhttps://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchainを開くと、「接続がタイムアウトしました」というメッセージが表示されました。次に、Firefoxの設定->詳細設定->ネットワーク->設定...に進み、HTTPプロキシを「ゲートウェイ」に、ポートを8080に設定し、「このプロキシサーバーをすべてのプロトコルに使用する」にチェックを付けました。次に、ページがロードされました。これは私の理論を裏付けています。

http_proxyおよびhttps_proxy環境変数を設定しようとしました(大文字と小文字の両方):

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

また、それらを次のように変更してみました。

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

そして、この2行目を/etc/apt/apt.confに追加してみました:

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

しかし、同じエラーが引き続き発生します。

これをトラブルシューティングするにはどうすればよいですか?

アップデート:私はの指示に従っ受け入れ答えをする「問題のリポジトリを追加し、プロキシの背後にある端末からの接続」し、さらに得ました:

$ 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

「HTTPフェッチエラー」は、「Defaults env_keep = http_proxy」も追加する必要があることを意味するのだろうか/etc/sudoers...

更新#2:追加しました:

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

... バグ516032のコメント18と同じですが、「gpgkeys:HTTPフェッチエラー7:ホストに接続できませんでした」というエラーが引き続き発生します。

そして、これは奇妙です:

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

... http_proxyが存在しないためです。

どんなアドバイスも大歓迎です。

更新#3: VMのホストはラップトップなので、家に持ち帰って試してみました(プロキシなし):

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

動いた。したがって、問題はプロキシ構成に関連しています。しかし、回避策があると思います。


回答:


183

プロキシの構成に加えてsudo-Eオプションを使用して環境を保存するように指示します。

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

ユーザー名とパスワード:

export https_proxy=https://<username>:<password>@<proxy>:<port>

雅は本当に働いていた
Shashwatクマールを

14
-E(上記の他のすべてを行った後)が機能しました。
cschooley

2
はい、https_proxy構成が必要でした...:P
monkut

1
プロキシを永続的に追加し、-Eスイッチを回避する方法は?行を追加して/ etc / environmentファイルを適切に構成しました...ありがとう
エンリケ

1
From man sudo-E, --preserve-envユーザーが既存の環境変数を保持することをセキュリティポリシーに示します。ユーザーがenvironment.mを維持する権限を持っていない場合、セキュリティポリシーがエラーを返すことがあり
パブロ・A

39

端末で次のコードを使用して、プロキシの背後にgpgキーを追加します。

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

それに応じて大文字を置き換えます。ユーザー認証(つまり、ユーザー名とパスワード)なしでプロキシを使用している場合は、http-proxy=http://PROXY_URL:PORT/代わりに使用します。

たとえばGPG_KEY=C2514567EEA14886、使用できるようにするには、

sudo apt-key adv --keyserver-options http-proxy=http://user:abc123@10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

どこ、

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

ユーザー認証を使用していない場合は、

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

3
これは、実際にはadd-apt-repositoryコマンドの実行を「修正」しません。実際、そのタスクの1つを回避します。少なくとも1つの追加のコマンドが必要です:sudoedit /etc/apt/sources.list.d/XXXX.list +マニュアル版... debファイルのURLを追加する
チャッキー

プロキシを永遠に修正する方法についての情報を追加すれば完璧でしょう。あなたが提供した解決策は
多く

9

最後に!次の方法でhttps_proxyを設定する必要があります。

export https_proxy=....

http_proxyを設定するだけでは不十分です。

そして、sudo経由ではなく、rootとしてadd-apt-repositoryコマンドを実行する必要がありました。

コード:

sudo su
add-apt-repository ppa:........

6

プロキシ設定はセットアップされているようですが、どういうわけかサーバーに接続できません...

私はこのように解決した非常によく似た問題を抱えていました:企業プロキシはセキュリティ上の理由でポート80と443のみを許可します。

したがって、SSHアウトして外部のサーバーの1つからキーを取得し、それをダウンロードしてローカルにインストールする以外に、以下にリストされているキーサーバーからキーサーバーを指定し、ポートを指定できます。

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

例えば:

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

ブーム、出来上がり!


うん。Debianの7の上にモノをインストールしている間これは、私にとっては、働いていた:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
ケン

3

sudoers変更が期待どおりに機能しなかった理由は、次の代わりに:

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

あなたが書いている必要があります:

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

また、Defaultsとの間のスペースがenv_keep毎回タブであることを確認してください。


3

私は編集/usr/lib/python3/dist-packages/softwareproperties/ppa.pyして追加することでこれを回避することができました

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

次の行の下

"--keyserver", self.keyserver,

詳細な背景情報

ppa.pyadd-apt-repositorygpgを呼び出すために使用されるPythonスクリプトです。http_proxy環境変数を使用しないgpgのバグがあるようです。これは、ファイル/root/.gnupg/dirmngr.confを表示し、honor-http-proxyコメントアウトされていないことを確認することで確認できます。


3

この4ステップのアプローチは、企業プロキシの背後にあるUbuntu 17.04 VMで機能しました。

  1. sudo apt-add-repository ppa:brightbox/ruby-ng そして、失敗させます
  2. sudo apt update 次のようなエラーメッセージを探します 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 今すぐ動作します

ホストVMはCNTLMポート3128でプロキシサーバーを実行していることに注意してください。


1
キーが何であるかをaptが伝えるのを待つ必要はありません。それ';の技術的な詳細にそこだPPA: 『指紋:80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6』
muru

それは本当ですが、このプロセスは少し簡単だと感じました。
thegreendroid

1

これは私を助けました:

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

コマンドには必要ないが、害を与えないいくつかの環境変数があると思います。


1

PPAを手動で追加します/etc/apt/sources.list

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

ファイルを保存して実行しますsudo apt-get update。このエラーはポップアップするかもしれません:

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

次のコマンドを実行してPPAのキーを受け入れ、対応するPPAのキー(5BB92C09DB82666C)を忘れずに変更します。

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

実行するsudo apt-get updateと完了です。

参照:Debian Via add-apt-repositoryコマンドでLaunchpad PPAを追加する方法


1

実際、私は同じ問題に遭遇しました。それがこのページを見つけた方法です。

  • 環境変数http_proxy(大文字と小文字が区別されます)およびhttps_proxy(大文字と小文字が区別されます)は何かを行います。これらを設定しないと、最初の段階で失敗します。環境変数を設定すると、何らかの効果があるようです。それらをエクスポートしないと失敗します

    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.
    

    (残りは成功です-今回は)

場合によっては、スタックし、通常のタイムアウトメッセージで終わることがあります:PPAを追加できません: '" https://launchpad.net/api/1.0/~webupd8team/+archive/javaの読み取りエラー:(7、' launchpad.netポート443への接続に失敗しました:接続がタイムアウトしました ') "'。

...しかし、私は不正行為をしている、私はこれをすべてルートとしてやっている 簡単な解決策は、/ etc / profileを編集するか、Ubuntu / Mintで/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}'

ああ、そうです、カールについてもあります(ちなみにapt-add-repositoryで使用されています)。マニュアルでは、ホームディレクトリに.curlrcを追加するように指示されています。apt-add-directoryはルート独自のものであるため、/ root / .curlrcに追加することを意味します。

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

良いアイデアは、あなた自身の〜/ .curlrcで同じことをすることです

また、/ etc / wgetrcでプロキシを有効にすることは良いことです。質問とは関係ありませんが、Googleで別の検索を保存しているだけです(これを読んでいる場合、プロキシに複数の)...


1

では/etc/apt/apt.conf.d/01proxy、このようなアドオン何か

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

これはすべての aptitudeダウンロードをプロキシますが、これがバックエンドでこれを行う唯一の方法だと思います。プロキシがサポートしている場合、http://my.proxy:port/www.target.site.com/url私が知っているようなURLを使用することもできますapt-cache-ng

私は、アドオンのapt-リポジトリがitsselfは、これらの設定を使用しますが、あなたがその仕事をすることができないならば、あなたは常にあなたにリポジトリを追加することができるかどうかわかりません/etc/apt/sources.listか、/etc/apt/sources.list.d/*mytoolchain*

11.10以降、メインレポジトリにはクロスツールチェーンもありapt-get install gcc-arm-linux-gnueabihfます。emdebianからクロスツールチェーンを入手することもできます。ここにいくつかの手順があります:http ://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/


user72421:プロキシには、別の番号ではなく01をプレフィックスとして付ける必要があることをどのようにして知りましたか?
jgomo3

apt-getの&キーサーバーでは動作しません
ヴィク

1

私がやっていることは、apt-keyまたはgpgをプロキシしようとする代わりに、カール経由でhttpを使用することです:

curl -sSL \ ' http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xBBEBDCB318AD50EC6865090613B00F1FD2C19886 ' \ | sudo apt-key add-

この方法では、代わりに使用する必要がありapt-key、コマンドラインまたはhttp_proxyまたはhttps_proxy(のapt-キーの最新バージョンでは無効になっている)環境変数の設定。



0

システム全体の環境変数を/etc/environment(use sudoまたはgksu)に実際に追加する必要がありますが、報告されたエラーはgpgデータが見つからなかったことを示しているようです。アイデア:

  • プロキシ設定を確認します(アクセスできる場合)
  • プロキシが暗号化されたトラフィックの出力を何らかの方法で改ざんしているかどうかを確認します。
  • 連続したnetstatを実行して、プロキシへの接続が実際に行われているかどうかを確認します
  • 最後の手段はtcpdumpで、wiresharkで検査することです。
  • httpトンネルを試してください;)

0

別の解決策は、APT proxy.confファイルを追加することです。/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/";
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.