No edit summary |
|||
(5 intermediate revisions by the same user not shown) | |||
Line 23: | Line 23: | ||
*Get NetworkManager & build on Fedora <span style="color:green">DONE!</span> | *Get NetworkManager & build on Fedora <span style="color:green">DONE!</span> | ||
*Understand NetworkManager codebase <span style="color:green">DONE!</span> | *Understand NetworkManager codebase <span style="color:green">DONE!</span> | ||
*Implement NMSettingProxy <span style="color: | *Implement NMSettingProxy <span style="color:red">DOING!</span> | ||
*Implement NMProxyManager and its DBUS Interfaces | *Implement NMProxyManager and its DBUS Interfaces | ||
*Write dispatcher scripts (using gsettings, kwriteconfig, profile.d scripts) | *Write dispatcher scripts (using gsettings, kwriteconfig, profile.d scripts) | ||
Line 38: | Line 38: | ||
====Gnome Applications==== | ====Gnome Applications==== | ||
Gnome applications use values in org.gnome.system.proxy from gsettings.<br> | Gnome applications use values in org.gnome.system.proxy from gsettings.<br> | ||
gnome-terminal goes further by setting the $PROTOCOL_PROXY variables using them for the child process. | gnome-terminal goes further by setting the $PROTOCOL_PROXY variables using them for the child process.<br> | ||
<pre> | <pre> | ||
gsettings list-recursively org.gnome.system.proxy | gsettings list-recursively org.gnome.system.proxy | ||
Line 60: | Line 59: | ||
org.gnome.system.proxy.socks port 0 | org.gnome.system.proxy.socks port 0 | ||
</pre> | </pre> | ||
====KDE Applications==== | ====KDE Applications==== | ||
KDE applications use kioslaverc data configured using kwriteconf.<br> | KDE applications use kioslaverc data configured using kwriteconf.<br> | ||
<pre> | <pre> | ||
[Proxy Settings] | [Proxy Settings] | ||
Line 76: | Line 73: | ||
socksProxy=proxy.iiit.ac.in 8080 | socksProxy=proxy.iiit.ac.in 8080 | ||
</pre> | </pre> | ||
====Console Applications==== | ====Console Applications==== | ||
$PROTOCOL_PROXY variables are sourced from /etc/profile.d/ scripts.<br> | $PROTOCOL_PROXY variables are sourced from /etc/profile.d/ scripts.<br> | ||
These variables have to be set | These following variables have to be set for console applications to work properly. | ||
ALL_PROXY HTTP_PROXY HTTPS_PROXY FTP_PROXY SOCKS_PROXY NO_PROXY | <pre> | ||
all_proxy http_proxy https_proxy ftp_proxy socks_proxy no_proxy< | ALL_PROXY HTTP_PROXY HTTPS_PROXY FTP_PROXY SOCKS_PROXY NO_PROXY | ||
all_proxy http_proxy https_proxy ftp_proxy socks_proxy no_proxy | |||
</pre> | |||
===Building NetworkManager on Fedora=== | ===Building NetworkManager on Fedora=== | ||
NetworkManager depends on many libraries including libgudev, libnl3, libuuid, nss and ppp. They are force-required in the makefiles, though you can edit it to leave some features not built. They are not so easy to figure out, but once done, it is very easy, since fedora's rpms maintain the correct version anyway. | |||
=== | Run this to get everything at once including gettext, intltool and libtool. | ||
<pre> | |||
yum install gettext-devel gtk-doc intltool libtool dbus-glib-devel libgudev1-devel libnl3-devel libuuid-devel nss-devel ppp-devel | |||
</pre> | |||
Now get NetworkManager and build it. | |||
<pre> | |||
git clone git://anongit.freedesktop.org/NetworkManager/NetworkManager.git | |||
cd NetworkManager | |||
./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var | |||
make | |||
sudo make install | |||
</pre> | |||
To avoid over-writing and polluting the system, one could first uninstall NetworkManager without removing dependencies. | |||
It could be tricky to make an rpm out of it. But you can get a SPEC file here: | |||
http://pkgs.fedoraproject.org/cgit/NetworkManager.git/ | |||
Now on fedora, NetworkManager by default uses the ifcfg-rh plugin to read\write settings from /etc/sysconfig/network-scripts/. | |||
We don't want that since it doesn't support proxy configuration. So we will switch to the generic keyfile plugin. | |||
The settings are then stored in /etc/NetworkManager/system-connections/ in the default ini like style (We will add proxy settings here). | |||
Edit /etc/NetworkManager/NetworkManager.conf to do this: | |||
<pre> | |||
[main] | |||
#plugins=ifcfg-rh | |||
plugins=keyfile | |||
</pre> | |||
===Adding NMSettingProxy=== | ===Adding NMSettingProxy=== | ||
Currently | Currently working. |
Latest revision as of 15:46, 28 April 2013
Integrate Proxy Settings with NetworkManager
Overview
Currently Proxy Settings are handled separately (by gnome-control-center in gnome) from NetworkManager. However, since proxy settings are connection dependent, they have to be updated as connections get (de-)activated. NetworkManager which handles that is the perfect place to do it.
Needs Addressed
It makes proxy setting configuration and its propagation to all desktop and console processes automated on a per-connection basis instead of the user setting them each time manually on connection changes.
Relevant Experience: I understand the D-BUS architecture and NetworkManager's code base. I have also thoroughly investigated how applications (of gnome, kde and terminal) seek proxy information as a first step. That said, I understand the concepts of networking and can effortlessly read and write programs in C\C++\bash.
Implementation
An NMProxyManager Gobject derivative class will be added to NetworkManager and initialized during start. This new module will expose the proxy settings over DBUS and call relevant executables to set the proxy settings, as connections get activated\deactivated. For settings, an NMSettingProxy subclass of NMSetting has to be implemented.
Timeline
- Find proxy setting propagation sources DONE!
- Get NetworkManager & build on Fedora DONE!
- Understand NetworkManager codebase DONE!
- Implement NMSettingProxy DOING!
- Implement NMProxyManager and its DBUS Interfaces
- Write dispatcher scripts (using gsettings, kwriteconfig, profile.d scripts)
- Make them build-configurable (update Makefiles)
- Test it on gnome, kde and console applications
- Send a pull request
Current Progress
- This section will be changing continuously.
Proxy Setting Propagation sources
Gnome Applications
Gnome applications use values in org.gnome.system.proxy from gsettings.
gnome-terminal goes further by setting the $PROTOCOL_PROXY variables using them for the child process.
gsettings list-recursively org.gnome.system.proxy org.gnome.system.proxy autoconfig-url '' org.gnome.system.proxy ignore-hosts ['localhost', '127.0.0.0/8'] org.gnome.system.proxy mode 'manual' org.gnome.system.proxy use-same-proxy false org.gnome.system.proxy.ftp host 'proxy.iiit.ac.in' org.gnome.system.proxy.ftp port 8080 org.gnome.system.proxy.http authentication-password '' org.gnome.system.proxy.http authentication-user '' org.gnome.system.proxy.http enabled false org.gnome.system.proxy.http host 'proxy.iiit.ac.in' org.gnome.system.proxy.http port 8080 org.gnome.system.proxy.http use-authentication false org.gnome.system.proxy.https host 'proxy.iiit.ac.in' org.gnome.system.proxy.https port 8080 org.gnome.system.proxy.socks host '' org.gnome.system.proxy.socks port 0
KDE Applications
KDE applications use kioslaverc data configured using kwriteconf.
[Proxy Settings] NoProxyFor= Proxy Config Script= ProxyType=1 ReversedException=false ftpProxy=proxy.iiit.ac.in 8080 httpProxy=proxy.iiit.ac.in 8080 httpsProxy=proxy.iiit.ac.in 8080 socksProxy=proxy.iiit.ac.in 8080
Console Applications
$PROTOCOL_PROXY variables are sourced from /etc/profile.d/ scripts.
These following variables have to be set for console applications to work properly.
ALL_PROXY HTTP_PROXY HTTPS_PROXY FTP_PROXY SOCKS_PROXY NO_PROXY all_proxy http_proxy https_proxy ftp_proxy socks_proxy no_proxy
Building NetworkManager on Fedora
NetworkManager depends on many libraries including libgudev, libnl3, libuuid, nss and ppp. They are force-required in the makefiles, though you can edit it to leave some features not built. They are not so easy to figure out, but once done, it is very easy, since fedora's rpms maintain the correct version anyway.
Run this to get everything at once including gettext, intltool and libtool.
yum install gettext-devel gtk-doc intltool libtool dbus-glib-devel libgudev1-devel libnl3-devel libuuid-devel nss-devel ppp-devel
Now get NetworkManager and build it.
git clone git://anongit.freedesktop.org/NetworkManager/NetworkManager.git cd NetworkManager ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var make sudo make install
To avoid over-writing and polluting the system, one could first uninstall NetworkManager without removing dependencies. It could be tricky to make an rpm out of it. But you can get a SPEC file here: http://pkgs.fedoraproject.org/cgit/NetworkManager.git/
Now on fedora, NetworkManager by default uses the ifcfg-rh plugin to read\write settings from /etc/sysconfig/network-scripts/. We don't want that since it doesn't support proxy configuration. So we will switch to the generic keyfile plugin. The settings are then stored in /etc/NetworkManager/system-connections/ in the default ini like style (We will add proxy settings here). Edit /etc/NetworkManager/NetworkManager.conf to do this:
[main] #plugins=ifcfg-rh plugins=keyfile
Adding NMSettingProxy
Currently working.