From Fedora Project Wiki

No edit summary
(47 intermediate revisions by the same user not shown)
Line 1: Line 1:
Please look at the [[Networking]] wiki page. It links to many other interesting wiki pages about linux networking. Any help appreciated.
Mail: psimerda AT redhat DOT com, pavlix AT pavlix DOT net
 
Jabber: pavlix AT pavlix DOT net
 
IRC Freenode: pavlix (#nm, #gentoo, ...)
 
Phone: +420 775 996 256
 
Timezone: Europe/Prague (CET), sometimes available through later hours
 
== About ==
 
After learning a bit of programming, I was attracted by the networking world. I got from petty Pascal/C++ projects through web development using ugly PHP and later Python, to a freelancing work with most of the projects in server administration, network equipment configuration and a bit of programming. Most people in the business know me from my conference talks and articles.
 
One of my conference talk brought me an offer from Red Hat, which I joined in May 2012 to work on NetworkManager. I was already a Fedora user and package maintainer at that time. Since August 2013 I'm no longer working as a regular NetworkManager developer (staying an upstream contributor, though). Even before that I tried to put my hands on a number of other projects via bug reports, tests and code. I'm also interested in various network-related standards and especially bugs and bad assumptions in IETF documents.


=== About me ===
== Wiki resources ==


I have been using Fedora for some time. My primary interest is computer networking and I didn't like many things
* [[Networking]] – A starting point for information related to networking.
in linux networking and particularly in NetworkManager. I've been talking about it and watching and filing bug reports
* [[Tools/NetworkManager]] – NetworkManager information page.
for too long. When I recieved an offer to work regularly on NetworkManager, it was natural to accept.


At the time I joined NetworkManager development, I already had a history of articles, talks and trainings on IPv6
Contributions are welcome.
so I started fixing IPv6 automatic configuration. In NetworkManager 0.9.6 it connects to any standard IPv6 networks.


I didn't particularly like how NetworkManager works so after learning a bit about it, I started working on some
== Packages ==
larger-scale changes in a separate branch called 'pavlix/next' that is described below. All of the modifications
are made with the goal of making NetworkManager more robust, testable, debuggable and useful for all sorts of use
cases including server, virtualization and desktop.


During my work on NetworkManager, I see more and more problems with other network-related tools including kernel,
=== Maintainer ===
glibc, avahi, nss-mdns but also with the IETF standards. We have many more things to be fixed (or replaced, if
anyone likes that better) than just NetworkManager.


=== NetworkManager ===
* aiccu (IPv6 tunneling client)
* connman
* racoon2
* radvd (taken over from Petr Písař)
* strongswan


When working on NetworkManager, the following projects cause me headache:
Help with specific features or integration issues welcome.


* NetworkManager itself: I need to test NM in a virtual environment with bridges. These are not supported in the current release. I hope to make the next release mature enough to support its own development.
=== Co-maintainer ===
* Kernel: The kernel IPv6 networking layer is somewhat unmanagable. The rtnetlink interface doesn't provide enough funcionality to support IPv6 networking.
* GLIBC: The <code>getaddrinfo()</code> function doesn't work properly and is not supported in nsswitch.conf. It breaks whenever my development machine happens to be on an IPv4-only network.
* nss-mdns (Avahi nsswitch plugin): Can't implement link-local name resolution because of the above problem in GLIBC.
* IETF networking standards: For some reasons many IPv6-related standards have serious design flaws that prevent them from working properly.


I'm currently maintaining a patchset in a  separate NetworkManager branch called 'pavlix/next'. It has a lot of improvements over the
* bind
current release of NetworkManager but also over the 'master' branch. The reason for keeping a separate branch is that
* bind10
I need to do a lot of interdependent stuff to fullfil a big picture of how things should work. Many changes I'm making
* NetworkManager-ssh
are quite big.
* rsync
* squid


I am often rebasing this branch and rewriting its history. It is not currently possible to merge it into 'master' and it is not possible
== Upstream contributions ==
to continuously marge your local changes without a considerable amount of 'rebase' magic.


The current patchset includes the following changes:
* [https://sourceware.org/git/?p=netresolve.git;a=blob;f=README;hb=HEAD netresolve] (author)
* dnssec-trigger
** NetworkManager integration scripts (with [[User:thozza|Tomáš Hozza]])
** systemd integration
* glibc (name resolution patches)
* NetworkManager
** [http://bugzilla.gnome.org/show_bug.cgi?id=663602 Building on any distribution]
** Virtual device support (bridging/bonding, with others)
** Valgrind and code coverage support for tests
** [http://bugzilla.gnome.org/show_bug.cgi?id=683173 Separate platform interaction module] (nm-platform, with [[User:danw|Dan Winship]])
*** Refactored NetworkManager's bridging/bonding/vlan configuration
*** Refactored NetworkManager's IPv4/IPv6 configuration
** Userspace IPv6 autoconfiguration (nm-rdisc/libndp, with [[User:jpirko|Jiří Pírko]])
*** Getting IPv6 autoconf features on par with IPv4
*** Avoiding loads of kernel IPv6 bugs and design flaws
** Runtime (non-persistent) configuration support (with [[User:danw|Dan Winship]] and [[User:dcbw|Dan Williams]])
** A ''lot'' of bug triaging
* rpmdevtools


* Add a '''new subsystem for kernel network configuration''' (bgo #683173)
== Bug tracking/reporting ==
* Remove distribution-specific initscripts
* '''Build on any linux distribution''' without special options (bgo #663602)
* Remove unnecessary '--with-distro' values (some distributors may need to remove it from their package builds)
* Move NM-specific DHCP leases to /var/lib/NetworkManager (may need selinux policy changes)
* Add support for IPv4 dhclient.conf overrides in /etc/NetworkManager
* Don't ask 'nscd' to reload configuration (it uses inotify to watch it)
* Add support for '''bridges''' with manual and automatic IPv4/IPv6 configuration (bgo #546197)
* Fix support for '''bonds''' with manual and automatic IPv4/IPv6 configuration (bgo #540995)
* Read IPv4 addresses also in CIDR format in keyfile


Other stuff:


* I'm trying to keep NetworkManager bugzilla (at least the 'general' component) in a good state
* glibc
* I fixed various IPv6-related so that IPv6 autoconfigures in all common scenarios
** The getaddrinfo() support is very complicated while not giving correct results in ''many'' cases.
* kernel
** Network configuration is a real pain.
** Kernel IPv6 autoconfiguration is only designed for trivial use cases and is very buggy.
* libnl
** Most of the advanced stuff is very buggy.
* avahi
** Missing for IPv6 link-local addresses.
** IPv6 disabled by default.
** Problems with duplicates in discovery.


=== GLIBC ===
== Daily usage ==


* getaddrinfo(127.0.0.1, AI_ADDRCONFIG) fails on hosts without global IPv4 (e.g. notebooks not connected to any networks)
=== Distributions ===
* getaddrinfo(::1, AI_ADDRCONFIG) fails on hosts without any other IPv6 address
* getaddrinfo(link-local-address, AI_ADDRCONFIG) fails on hosts without global IPv6 (hopefully solved)


Temporary patch: https://bugzilla.redhat.com/attachment.cgi?id=615840
* Gentoo
* Fedora/CentOS
* Debian
* OpenWRT


=== Contact ===
=== Desktop ===


Mail: psimerda AT redhat DOT com, pavlix AT pavlix DOT net
* Gnome 3 – Seeking something more mature and stable
* Gnome Terminal
* Evolution (for IMAP/SMTP mail) – Seeking something more mature and stable
* Empathy/Telepathy (for jabber and IRC) – Seeking something more mature and stable
* Evince
* Firefox
 
=== Development ===
 
* vim
* gcc
* make, autotools
* gdb
* valgrind
 
=== Presentation ===
 
* LaTeX/Beamer
 
== Idea pages ==
 
* [[Networking/Ideas/NetworkManagerMethods]]
* [[Networking/Ideas/NetworkManagerRuntimeConfiguration]]
* [[Networking/Ideas/ConfigurationService]]
* [[Networking/Ideas/AutomaticConfiguration]]
* [[Networking/Ideas/NetworkNameResolution]]
* [[Networking/Ideas/NetworkManagerBugReporting]]
* [[Networking/Ideas/NetworkManagerOnServers]]
 
== Fedora notes ==
 
=== Fedora tools on Gentoo ===
 
<pre>
emerge -av layman
echo source /var/lib/layman/make.conf > /etc/portage.make.conf
layman -a ixit
mkdir -p /etc/portage/sets
cat > /etc/portage/sets/fedora-packaging <<EOF
dev-util/fedora-packager
dev-util/quilt
EOF
emerge -av @fedora-packaging
</pre>
 
=== Bump a rawhide package to a newer version ===
 
In the package git directory:
 
<pre>
VERSION=...
 
fedpkg switch-branch master
rpmdev-bumpspec --new="$VERSION" --comment="new version $VERSION" *.spec
spectool -g *.spec
fedpkg new-sources `spectool -l *.spec | grep / | sed 's/.*\///'`
fedpkg commit -c
fedpkg push
fedpkg build
</pre>
 
Requires developmet version, see:
 
* https://fedorahosted.org/rpmdevtools/attachment/ticket/14
 
=== Prepare rawhide to replace branches ===
 
Warning: This method discards changes in all branches and should only be used after all of the important changes are incorporated into master. Also, it is only suitable for packages where it's practical to maintain the same version in branches as in rawhide.
 
<pre>
BRANCHES="f20 f19"
 
# Fake-merge all branches into master:
for branch in $BRANCHES; do
    fedpkg switch-branch master
    git merge -s ours $branch
done
 
# Build a new release
rpmdev-bumpspec
fedpkg commit -c
fedpkg push
fedpkg build
</pre>
 
=== Update branches to match rawhide ===
 
Use the above technique to prepare rawhide if branches can't be fast forwarded to rawhide.


Jabber: pavlix AT pavlix DOT net
<pre>
BRANCHES="f20 f19"


IRC Freenode: pavlix (#nm and a couple of other channels)
# Fast-forward all branches to master HEAD:
for branch in $BRANCHES; do
    fedpkg switch-branch $branch
    git merge --ff-only master
    fedpkg push
    fedpkg build --nowait
done


Phone: +420 775 996 256
# Switch back to master
fedpkg switch-branch master
</pre>

Revision as of 10:19, 16 April 2014

Mail: psimerda AT redhat DOT com, pavlix AT pavlix DOT net

Jabber: pavlix AT pavlix DOT net

IRC Freenode: pavlix (#nm, #gentoo, ...)

Phone: +420 775 996 256

Timezone: Europe/Prague (CET), sometimes available through later hours

About

After learning a bit of programming, I was attracted by the networking world. I got from petty Pascal/C++ projects through web development using ugly PHP and later Python, to a freelancing work with most of the projects in server administration, network equipment configuration and a bit of programming. Most people in the business know me from my conference talks and articles.

One of my conference talk brought me an offer from Red Hat, which I joined in May 2012 to work on NetworkManager. I was already a Fedora user and package maintainer at that time. Since August 2013 I'm no longer working as a regular NetworkManager developer (staying an upstream contributor, though). Even before that I tried to put my hands on a number of other projects via bug reports, tests and code. I'm also interested in various network-related standards and especially bugs and bad assumptions in IETF documents.

Wiki resources

Contributions are welcome.

Packages

Maintainer

  • aiccu (IPv6 tunneling client)
  • connman
  • racoon2
  • radvd (taken over from Petr Písař)
  • strongswan

Help with specific features or integration issues welcome.

Co-maintainer

  • bind
  • bind10
  • NetworkManager-ssh
  • rsync
  • squid

Upstream contributions

  • netresolve (author)
  • dnssec-trigger
    • NetworkManager integration scripts (with Tomáš Hozza)
    • systemd integration
  • glibc (name resolution patches)
  • NetworkManager
    • Building on any distribution
    • Virtual device support (bridging/bonding, with others)
    • Valgrind and code coverage support for tests
    • Separate platform interaction module (nm-platform, with Dan Winship)
      • Refactored NetworkManager's bridging/bonding/vlan configuration
      • Refactored NetworkManager's IPv4/IPv6 configuration
    • Userspace IPv6 autoconfiguration (nm-rdisc/libndp, with Jiří Pírko)
      • Getting IPv6 autoconf features on par with IPv4
      • Avoiding loads of kernel IPv6 bugs and design flaws
    • Runtime (non-persistent) configuration support (with Dan Winship and Dan Williams)
    • A lot of bug triaging
  • rpmdevtools

Bug tracking/reporting

  • glibc
    • The getaddrinfo() support is very complicated while not giving correct results in many cases.
  • kernel
    • Network configuration is a real pain.
    • Kernel IPv6 autoconfiguration is only designed for trivial use cases and is very buggy.
  • libnl
    • Most of the advanced stuff is very buggy.
  • avahi
    • Missing for IPv6 link-local addresses.
    • IPv6 disabled by default.
    • Problems with duplicates in discovery.

Daily usage

Distributions

  • Gentoo
  • Fedora/CentOS
  • Debian
  • OpenWRT

Desktop

  • Gnome 3 – Seeking something more mature and stable
  • Gnome Terminal
  • Evolution (for IMAP/SMTP mail) – Seeking something more mature and stable
  • Empathy/Telepathy (for jabber and IRC) – Seeking something more mature and stable
  • Evince
  • Firefox

Development

  • vim
  • gcc
  • make, autotools
  • gdb
  • valgrind

Presentation

  • LaTeX/Beamer

Idea pages

Fedora notes

Fedora tools on Gentoo

emerge -av layman
echo source /var/lib/layman/make.conf > /etc/portage.make.conf
layman -a ixit
mkdir -p /etc/portage/sets
cat > /etc/portage/sets/fedora-packaging <<EOF
dev-util/fedora-packager
dev-util/quilt
EOF
emerge -av @fedora-packaging

Bump a rawhide package to a newer version

In the package git directory:

VERSION=...

fedpkg switch-branch master
rpmdev-bumpspec --new="$VERSION" --comment="new version $VERSION" *.spec
spectool -g *.spec
fedpkg new-sources `spectool -l *.spec | grep / | sed 's/.*\///'`
fedpkg commit -c
fedpkg push
fedpkg build

Requires developmet version, see:

Prepare rawhide to replace branches

Warning: This method discards changes in all branches and should only be used after all of the important changes are incorporated into master. Also, it is only suitable for packages where it's practical to maintain the same version in branches as in rawhide.

BRANCHES="f20 f19"

# Fake-merge all branches into master:
for branch in $BRANCHES; do
    fedpkg switch-branch master
    git merge -s ours $branch
done

# Build a new release
rpmdev-bumpspec
fedpkg commit -c
fedpkg push
fedpkg build

Update branches to match rawhide

Use the above technique to prepare rawhide if branches can't be fast forwarded to rawhide.

BRANCHES="f20 f19"

# Fast-forward all branches to master HEAD:
for branch in $BRANCHES; do
    fedpkg switch-branch $branch
    git merge --ff-only master
    fedpkg push
    fedpkg build --nowait
done

# Switch back to master
fedpkg switch-branch master