Sitzt man mit seinem Mac in einem Netzwerk ohne direkten Zugang zum Internet funktioniert MacPorts leider nicht automatisch mit den im System eingepflegten Proxies. Durch manuelles Setzen der Umgebungsvariablen http_proxy und RSYNC_PROXY lässt sich MacPorts aber ohne Einschränkungen nutzen.

Das erste Problem entsteht dadurch, dass der Befehl sudo den ausgeführten Befehl von in der Shell gesetzten Umgebungsvariablen abschirmt. Dadurch sieht der port-Befehl in der Benutzershell gesetzte Proxy-Variablen nicht und kann sich nicht mit seinen Servern verbinden.

eccentrica:~ marix$ sudo port selfupdate
--->  Updating the ports tree
Error: Synchronization of the local ports tree failed doing rsync
Error: /opt/local/bin/port: port selfupdate failed: Couldn't sync the ports tree: Synchronization of 1 source(s) failed

Die Lösung dieses Problems ist mit sudo eine neue Shell zu starten in der die Umgebungsvariablen gesetzt werden können. Wichtig ist hierbei, dass MacPorts auch rsync verwendet, welches nicht die http_proxy-Variable interpretiert. Deshalb muss auch die Variable RSYNC_PROXY gesetzt werden.

eccentrica:~ marix$ sudo -s
Password:
bash-3.2# export http_proxy=http://proxy:8080
bash-3.2# export HTTPS_PROXY=http://proxy:8080
bash-3.2# export FTP_PROXY=http://proxy:8080
bash-3.2# export RSYNC_PROXY=proxy:8080
bash-3.2# port selfupgrade

An Stelle des port selfupgrade kann natürlich eine beliebige Anzahl anderer Befehle stehen.

Ein weiteres Problem entsteht, wenn MacPorts Subversion verwendet um an den Quelltext des zu installierenden Programmes zu kommen.

ash-3.2# port install iterm
--->  Computing dependencies for iTerm
--->  Fetching iTerm
Error: Target org.macports.fetch returned: Subversion check out failed
Error: Status 1 encountered during processing.
Before reporting a bug, first run the command again with the -d flag to get complete output.

Subversion lässt sich leider nicht über Umgebungsvariablen zur Verwendung des Proxies überreden. Stattdessen muss man die Datei ~/.subversion/servers entsprechend anpassen.