From Fedora Project Wiki

No edit summary
 
(70 intermediate revisions by 3 users not shown)
Line 3: Line 3:
Jabber: pavlix AT pavlix DOT net
Jabber: pavlix AT pavlix DOT net


IRC Freenode: pavlix (#nm and a couple of other channels)
IRC Freenode: pavlix (#nm, #gentoo, ...)
 
Phone: +420 775 996 256


Timezone: Europe/Prague (CET), sometimes available through later hours
Timezone: Europe/Prague (CET), sometimes available through later hours
Line 11: Line 9:
== About ==
== 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.
After learning a bit of programming, I was attracted by the networking world. I got from petty Pascal/C++ projects through web development using PHP and later Python, to years of freelancing work with most of the projects in server administration, network equipment configuration and a bit of programming. I was active in the community, wrote articles and spoke at conferences which finally led to my joining Red Hat in May 2012 to work on NetworkManager. I was already a Fedora user and package maintainer at that time. Since August 2013 I'm working on various network related packages and projects.


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.
== Projects ==


== Wiki resources ==
Fedora projects:
 
* [https://github.com/pavlix/network-testing User space networking test suite] (owner)
* [https://github.com/pavlix/netresolve Non-blocking network name resolution library and tools] (owner)
* [https://github.com/pavlix/gentoo-rpm Gentoo ebuilds for Fedora and CentOS development] (owner)
* [https://github.com/pavlix/fptool Wrapper over Fedora package maintainance tools] (owner)
* DNSSEC in Fedora (contributor)
* IPv6 and dual-stack networking (contributor)
* [https://wiki.gnome.org/Projects/NetworkManager NetworkManager development] (contributor, former developer
 
Fedora wiki documentation:


* [[Networking]] – A starting point for information related to networking.
* [[Networking]] – A starting point for information related to networking.
* [[Tools/NetworkManager]] – NetworkManager information page.
* [[Tools/NetworkManager]] – NetworkManager information page.
* [[QA/Networking]] – Dual-stack networking issues in Fedora.


Contributions are welcome.
(Contributions are welcome.)


== Packages ==
Packages:


=== Maintainer ===
[https://admin.fedoraproject.org/pkgdb/packager/pavlix/ Fedora Package Database].


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


Help with specific features or integration issues welcome.
Fedora features:


=== Co-maintainer ===
* [[Changes/Default_Local_DNS_Resolver]]


* bind
Ideas:
* bind10
* NetworkManager-ssh
* rsync
* squid
 
(I haven't touched any of them, yet, as of August 2013.)
 
== Upstream contributions ==
 
* [https://sourceware.org/git/?p=netresolve.git;a=blob;f=README;hb=HEAD netresolve] (author)
* 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
 
== 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 ==


* [[Networking/Ideas/ServiceOrdering]]
* [[Networking/Ideas/NameResolution]]
* [[Networking/Ideas/NetworkManagerMethods]]
* [[Networking/Ideas/NetworkManagerMethods]]
* [[Networking/Ideas/NetworkManagerRuntimeConfiguration]]
* [[Networking/Ideas/NetworkManagerRuntimeConfiguration]]
Line 118: Line 55:
== Fedora notes ==
== Fedora notes ==


=== Fedora tools on Gentoo ===
=== Simple maintainance tasks ===
 
==== Make a fix and a build ====
 
<pre>
bug=123456
message="do something"
 
# ... add/modify files ...
rpmdev-bumpspec *.spec -c "Resolves: #$bug - $message"
fedpkg commit -c
# ... check using gitk ...
fedpkg push && fedpkg build
</pre>
 
==== Make a scratch build from locally generated SRPM ====


<pre>
<pre>
emerge -av layman
fedpkg build --scratch --srpm
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>
</pre>


=== Bump a rawhide package to a newer version ===
==== Bump a rawhide package to a newer version ====


In the package git directory:
In the package git directory:


<pre>
<pre>
version=...
# Prepare a commit
fedpkg switch-branch master
fedpkg switch-branch master
vim *.spec  # change package version, set release to 0
rpmdev-bumpspec --new="$version" --comment="new version $version" *.spec
rpmdev-bumpspec -c "bump to ..."
spectool -g *.spec && fedpkg new-sources `spectool -l *.spec | grep / | sed 's/.*\///'`
spectool -g *.spec
fedpkg new-sources ...
fedpkg commit -c
fedpkg commit -c
fedpkg push
 
fedpkg build
# Test it
fedpkg build --scratch --srpm
 
# Create a public build
fedpkg push && fedpkg build
</pre>
</pre>


=== Update branches to rawhide ===
Requires development 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.
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>
<pre>
BRANCHES="f20 f19"
branches="f20 f19"


for branch in $BRANCHES; do
# Fake-merge all branches into master:
for branch in $branches; do
     fedpkg switch-branch master
     fedpkg switch-branch master
     git merge -s ours $branch
     git merge -s ours $branch
done
done
# Build a new release
rpmdev-bumpspec
rpmdev-bumpspec
fedpkg commit -c
fedpkg commit -c
fedpkg push
fedpkg push
fedpkg build --nowait
fedpkg build
# Check the master build before building branches.
</pre>
 
==== Update branches to match rawhide and build them ====
 
Use the above technique to prepare rawhide if branches can't be fast forwarded to rawhide.
 
<pre>
branches="f21 f20"


for branch in $BRANCHES; do
# Fast-forward all branches to master HEAD:
for branch in $branches; do
     fedpkg switch-branch $branch
     fedpkg switch-branch $branch
     git merge master
     git merge --ff-only master
     fedpkg push
     fedpkg push
     fedpkg build --nowait
     fedpkg build --nowait
done
done
# Switch back to master
fedpkg switch-branch master
</pre>
==== Issue updates ====
<pre>
branches="f21 f20"
type=bugfix
bugs=
comment="Bug fix update."
# Create updates for all branches
for branch in $branches; do
    fedpkg switch-branch $branch
    bodhi --new --type="$type" --bugs="$bugs" --notes="$comment" --close-bugs `fedpkg verrel`
done
# Switch back to master
fedpkg switch-branch master
</pre>
Resources:
* [https://apps.fedoraproject.org/packages/ Package version in Fedora and EPEL]
* [https://admin.fedoraproject.org/updates/ Package updates]
=== Patchwork ===
==== Using vim ====
Open three panes containing (1) patch to be edited, (2) patched file and (3) rejected hunks.
<pre>
package=...
version=...
patch=...
file=...
vim -O $patch $package-$version/$file{,.rej}
</pre>
==== Using git ====
Warning: Untested. I used a similar command but lost it.
<pre>
package=...
version=...
dir=/path/to/upstream/workdir
(echo cd $dir; for patch in `awk '/^Patch[0-9]*: / { print $2 }' *.spec`; do echo -n "git apply --index "; realpath $patch; echo git commit -m $patch; done) | sh
</pre>
=== New package ===
==== Create a local Git repository ====
<pre>
package=...
editor=...
git init $package
cd $package
$editor $package.spec
git add $package.spec
fedpkg new-sources `spectool -l *.spec | grep / | sed 's/.*\///'`
rpmdev-bumpspec $package.spec -m 'initial build'
fedpkg commit -c
</pre>
==== Create a review request ====
<pre>
rawhide=f22
fedpkg --dist $rawhide srpm
fedora-create-review --no-scratch-build *.spec *.src.rpm
</pre>
==== Update a review request ====
<pre>
rawhide=f22
message="incorporated review feedback"
rpmdev-bumpspec *.spec -m "$message"
fedpkg commit -c
fedpkg --dist $rawhide srpm
fedora-create-review --amend --no-scratch-build *.spec *.src.rpm
</pre>
Requires:
* https://fedorahosted.org/FedoraReview/ticket/237
=== Review a new package ===
System configuration:
<pre>
yum install @fedora-packager fedora-review
ln -s /etc/mock/fedora-devel-x86_64.cfg /etc/mock/default.cfg
mockuser=...
usermod -a -G mock $mockuser
</pre>
Review local files:
<pre>
name=...
fedora-review -n $name
</pre>
Review bugzilla:
<pre>
bz=...
fedora-review -b $bz
</pre>
== 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>
</pre>

Latest revision as of 14:31, 26 August 2024

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

Jabber: pavlix AT pavlix DOT net

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

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 PHP and later Python, to years of freelancing work with most of the projects in server administration, network equipment configuration and a bit of programming. I was active in the community, wrote articles and spoke at conferences which finally led to my joining Red Hat in May 2012 to work on NetworkManager. I was already a Fedora user and package maintainer at that time. Since August 2013 I'm working on various network related packages and projects.

Projects

Fedora projects:

Fedora wiki documentation:

(Contributions are welcome.)

Packages:

Fedora Package Database.

Other resources

Fedora features:

Ideas:

Fedora notes

Simple maintainance tasks

Make a fix and a build

bug=123456
message="do something"

# ... add/modify files ...
rpmdev-bumpspec *.spec -c "Resolves: #$bug - $message"
fedpkg commit -c
# ... check using gitk ...
fedpkg push && fedpkg build

Make a scratch build from locally generated SRPM

fedpkg build --scratch --srpm

Bump a rawhide package to a newer version

In the package git directory:

version=...

# Prepare a commit
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

# Test it
fedpkg build --scratch --srpm

# Create a public build
fedpkg push && fedpkg build

Requires development 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 and build them

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

branches="f21 f20"

# 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

Issue updates

branches="f21 f20"
type=bugfix
bugs=
comment="Bug fix update."

# Create updates for all branches
for branch in $branches; do
    fedpkg switch-branch $branch
    bodhi --new --type="$type" --bugs="$bugs" --notes="$comment" --close-bugs `fedpkg verrel`
done

# Switch back to master
fedpkg switch-branch master

Resources:

Patchwork

Using vim

Open three panes containing (1) patch to be edited, (2) patched file and (3) rejected hunks.

package=...
version=...
patch=...
file=...

vim -O $patch $package-$version/$file{,.rej}

Using git

Warning: Untested. I used a similar command but lost it.


package=...
version=...
dir=/path/to/upstream/workdir

(echo cd $dir; for patch in `awk '/^Patch[0-9]*: / { print $2 }' *.spec`; do echo -n "git apply --index "; realpath $patch; echo git commit -m $patch; done) | sh

New package

Create a local Git repository

package=...
editor=...

git init $package
cd $package

$editor $package.spec
git add $package.spec

fedpkg new-sources `spectool -l *.spec | grep / | sed 's/.*\///'`

rpmdev-bumpspec $package.spec -m 'initial build'
fedpkg commit -c

Create a review request

rawhide=f22

fedpkg --dist $rawhide srpm
fedora-create-review --no-scratch-build *.spec *.src.rpm

Update a review request

rawhide=f22
message="incorporated review feedback"

rpmdev-bumpspec *.spec -m "$message"
fedpkg commit -c

fedpkg --dist $rawhide srpm
fedora-create-review --amend --no-scratch-build *.spec *.src.rpm

Requires:

Review a new package

System configuration:

yum install @fedora-packager fedora-review
ln -s /etc/mock/fedora-devel-x86_64.cfg /etc/mock/default.cfg

mockuser=...

usermod -a -G mock $mockuser

Review local files:

name=...

fedora-review -n $name

Review bugzilla:

bz=...

fedora-review -b $bz

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